diff --git a/dist/vis.js b/dist/vis.js index 7e097494..43b53bf7 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 4.15.0 - * @date 2016-02-23 + * @version 4.15.1 + * @date 2016-03-08 * * @license * Copyright (C) 2011-2016 Almende B.V, http://almende.com @@ -81,9 +81,9 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { - // utils 'use strict'; + // utils exports.util = __webpack_require__(1); exports.DOMutil = __webpack_require__(7); @@ -107,43 +107,43 @@ return /******/ (function(modules) { // webpackBootstrap exports.Timeline = __webpack_require__(19); exports.Graph2d = __webpack_require__(48); exports.timeline = { - Core: __webpack_require__(27), - DateUtil: __webpack_require__(26), - Range: __webpack_require__(23), - stack: __webpack_require__(31), - TimeStep: __webpack_require__(29), + Core: __webpack_require__(30), + DateUtil: __webpack_require__(29), + Range: __webpack_require__(27), + stack: __webpack_require__(34), + TimeStep: __webpack_require__(32), components: { items: { - Item: __webpack_require__(33), - BackgroundItem: __webpack_require__(37), - BoxItem: __webpack_require__(35), - PointItem: __webpack_require__(36), - RangeItem: __webpack_require__(32) + Item: __webpack_require__(36), + BackgroundItem: __webpack_require__(40), + BoxItem: __webpack_require__(38), + PointItem: __webpack_require__(39), + RangeItem: __webpack_require__(35) }, - BackgroundGroup: __webpack_require__(34), - Component: __webpack_require__(25), - CurrentTime: __webpack_require__(43), - CustomTime: __webpack_require__(41), + BackgroundGroup: __webpack_require__(37), + Component: __webpack_require__(28), + CurrentTime: __webpack_require__(46), + CustomTime: __webpack_require__(44), DataAxis: __webpack_require__(50), DataScale: __webpack_require__(51), GraphGroup: __webpack_require__(52), - Group: __webpack_require__(30), - ItemSet: __webpack_require__(28), + Group: __webpack_require__(33), + ItemSet: __webpack_require__(31), Legend: __webpack_require__(56), LineGraph: __webpack_require__(49), - TimeAxis: __webpack_require__(38) + TimeAxis: __webpack_require__(41) } }; // Network exports.Network = __webpack_require__(58); exports.network = { - Images: __webpack_require__(116), - dotparser: __webpack_require__(114), - gephiParser: __webpack_require__(115), - allOptions: __webpack_require__(110) + Images: __webpack_require__(59), + dotparser: __webpack_require__(115), + gephiParser: __webpack_require__(116), + allOptions: __webpack_require__(111) }; exports.network.convertDot = function (input) { return exports.network.dotparser.DOTToGraph(input); @@ -154,20 +154,22 @@ return /******/ (function(modules) { // webpackBootstrap // bundled external libraries exports.moment = __webpack_require__(2); - exports.Hammer = __webpack_require__(20); - exports.keycharm = __webpack_require__(40); + exports.Hammer = __webpack_require__(22); + exports.keycharm = __webpack_require__(43); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + // utility functions // first check if moment.js is already loaded in the browser window, if so, // use this instance. Else, load via commonjs. - 'use strict'; - var moment = __webpack_require__(2); var uuid = __webpack_require__(6); @@ -258,7 +260,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.assignAllKeys = function (obj, value) { for (var prop in obj) { if (obj.hasOwnProperty(prop)) { - if (typeof obj[prop] !== 'object') { + if (_typeof(obj[prop]) !== 'object') { obj[prop] = value; } } @@ -276,14 +278,14 @@ return /******/ (function(modules) { // webpackBootstrap for (var prop in a) { if (b[prop] !== undefined) { - if (typeof b[prop] !== 'object') { + if (_typeof(b[prop]) !== 'object') { if ((b[prop] === undefined || b[prop] === null) && a[prop] !== undefined && allowDeletion === true) { delete a[prop]; } else { a[prop] = b[prop]; } } else { - if (typeof a[prop] === 'object') { + if (_typeof(a[prop]) === 'object') { exports.fillIfDefined(a[prop], b[prop], allowDeletion); } } @@ -645,7 +647,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {String} type */ exports.getType = function (object) { - var type = typeof object; + var type = typeof object === 'undefined' ? 'undefined' : _typeof(object); if (type == 'object') { if (object === null) { @@ -1321,11 +1323,11 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} */ exports.selectiveBridgeObject = function (fields, referenceObject) { - if (typeof referenceObject == "object") { + if ((typeof referenceObject === 'undefined' ? 'undefined' : _typeof(referenceObject)) == "object") { var objectTo = Object.create(referenceObject); for (var i = 0; i < fields.length; i++) { if (referenceObject.hasOwnProperty(fields[i])) { - if (typeof referenceObject[fields[i]] == "object") { + if (_typeof(referenceObject[fields[i]]) == "object") { objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]); } } @@ -1344,11 +1346,11 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} */ exports.bridgeObject = function (referenceObject) { - if (typeof referenceObject == "object") { + if ((typeof referenceObject === 'undefined' ? 'undefined' : _typeof(referenceObject)) == "object") { var objectTo = Object.create(referenceObject); for (var i in referenceObject) { if (referenceObject.hasOwnProperty(i)) { - if (typeof referenceObject[i] == "object") { + if (_typeof(referenceObject[i]) == "object") { objectTo[i] = exports.bridgeObject(referenceObject[i]); } } @@ -1571,10 +1573,10 @@ return /******/ (function(modules) { // webpackBootstrap /* 2 */ /***/ function(module, exports, __webpack_require__) { - // first check if moment.js is already loaded in the browser window, if so, - // use this instance. Else, load via commonjs. 'use strict'; + // 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__(3); /***/ }, @@ -1582,7 +1584,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {//! moment.js - //! version : 2.11.2 + //! version : 2.12.0 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -1606,7 +1608,7 @@ return /******/ (function(modules) { // webpackBootstrap } function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; } function isDate(input) { @@ -1812,7 +1814,82 @@ return /******/ (function(modules) { // webpackBootstrap return diffs + lengthDiff; } - function Locale() { + function warn(msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (firstTime) { + warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + utils_hooks__hooks.suppressDeprecationWarnings = false; + + function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; + } + + function isObject(input) { + return Object.prototype.toString.call(input) === '[object Object]'; + } + + function locale_set__set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } } // internal storage for locale config files @@ -1888,11 +1965,25 @@ return /******/ (function(modules) { // webpackBootstrap return globalLocale._abbr; } - function defineLocale (name, values) { - if (values !== null) { - values.abbr = name; - locales[name] = locales[name] || new Locale(); - locales[name].set(values); + function defineLocale (name, config) { + if (config !== null) { + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale'); + config = mergeConfigs(locales[name]._config, config); + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + config = mergeConfigs(locales[config.parentLocale]._config, config); + } else { + // treat as if there is no base config + deprecateSimple('parentLocaleUndefined', + 'specified parentLocale is not defined yet'); + } + } + locales[name] = new Locale(config); // backwards compat for now: also set the locale locale_locales__getSetGlobalLocale(name); @@ -1905,6 +1996,31 @@ return /******/ (function(modules) { // webpackBootstrap } } + function updateLocale(name, config) { + if (config != null) { + var locale; + if (locales[name] != null) { + config = mergeConfigs(locales[name]._config, config); + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + // returns locale data function locale_locales__getLocale (key) { var locale; @@ -1929,6 +2045,10 @@ return /******/ (function(modules) { // webpackBootstrap return chooseLocale(key); } + function locale_locales__listLocales() { + return Object.keys(locales); + } + var aliases = {}; function addUnitAlias (unit, shorthand) { @@ -1957,10 +2077,6 @@ return /******/ (function(modules) { // webpackBootstrap return normalizedInput; } - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - function makeGetSet (unit, keepTime) { return function (value) { if (value != null) { @@ -2294,12 +2410,15 @@ return /******/ (function(modules) { // webpackBootstrap return mom; } - // 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; + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } } } @@ -2418,36 +2537,6 @@ return /******/ (function(modules) { // webpackBootstrap return m; } - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (firstTime) { - warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - // 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) var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; @@ -3093,7 +3182,7 @@ return /******/ (function(modules) { // webpackBootstrap } var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + 'moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', function () { var other = local__createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { @@ -3105,7 +3194,7 @@ return /******/ (function(modules) { // webpackBootstrap ); var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + 'moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', function () { var other = local__createLocal.apply(null, arguments); if (this.isValid() && other.isValid()) { @@ -3403,7 +3492,8 @@ return /******/ (function(modules) { // webpackBootstrap // 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 - var isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; + // and further modified to allow for strings containing both week and day + var isoRegex = /^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/; function create__createDuration (input, key) { var duration = input, @@ -3441,11 +3531,11 @@ return /******/ (function(modules) { // webpackBootstrap duration = { y : parseIso(match[2], sign), M : parseIso(match[3], sign), - d : parseIso(match[4], sign), - h : parseIso(match[5], sign), - m : parseIso(match[6], sign), - s : parseIso(match[7], sign), - w : parseIso(match[8], sign) + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) }; } else if (duration == null) {// checks for null or undefined duration = {}; @@ -3509,6 +3599,14 @@ return /******/ (function(modules) { // webpackBootstrap return res; } + function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + // TODO: remove 'name' arg after deprecation is removed function createAdder(direction, name) { return function (val, period) { @@ -3528,8 +3626,8 @@ return /******/ (function(modules) { // webpackBootstrap function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; + days = absRound(duration._days), + months = absRound(duration._months); if (!mom.isValid()) { // No op @@ -3855,8 +3953,8 @@ return /******/ (function(modules) { // webpackBootstrap } function toJSON () { - // JSON.stringify(new Date(NaN)) === 'null' - return this.isValid() ? this.toISOString() : 'null'; + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; } function moment_valid__isValid () { @@ -3966,7 +4064,6 @@ return /******/ (function(modules) { // webpackBootstrap var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); - // console.log("got", weekYear, week, weekday, "set", date.toISOString()); this.year(date.getUTCFullYear()); this.month(date.getUTCMonth()); this.date(date.getUTCDate()); @@ -4676,21 +4773,6 @@ return /******/ (function(modules) { // webpackBootstrap return isFunction(format) ? format(output) : format.replace(/%s/i, output); } - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (isFunction(prop)) { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - var prototype__proto = Locale.prototype; prototype__proto._calendar = defaultCalendar; @@ -5154,7 +5236,7 @@ return /******/ (function(modules) { // webpackBootstrap // Side effect imports - utils_hooks__hooks.version = '2.11.2'; + utils_hooks__hooks.version = '2.12.0'; setHookCallback(local__createLocal); @@ -5177,6 +5259,8 @@ return /******/ (function(modules) { // webpackBootstrap utils_hooks__hooks.monthsShort = lists__listMonthsShort; utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; utils_hooks__hooks.defineLocale = defineLocale; + utils_hooks__hooks.updateLocale = updateLocale; + utils_hooks__hooks.locales = locale_locales__listLocales; utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; utils_hooks__hooks.normalizeUnits = normalizeUnits; utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; @@ -5244,7 +5328,7 @@ return /******/ (function(modules) { // webpackBootstrap // If all else fails, use Math.random(). It's fast, but is of unspecified // quality. var _rnds = new Array(16); - _rng = function () { + _rng = function _rng() { for (var i = 0, r; i < 16; i++) { if ((i & 0x03) === 0) r = Math.random() * 0x100000000; _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; @@ -5438,6 +5522,8 @@ return /******/ (function(modules) { // webpackBootstrap /* 7 */ /***/ function(module, exports) { + 'use strict'; + // DOM utility methods /** @@ -5445,8 +5531,6 @@ return /******/ (function(modules) { // webpackBootstrap * @param JSONcontainer * @private */ - 'use strict'; - exports.prepareElements = function (JSONcontainer) { // cleanup the redundant svgElements; for (var elementType in JSONcontainer) { @@ -5652,6 +5736,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var util = __webpack_require__(1); var Queue = __webpack_require__(9); @@ -5766,7 +5852,7 @@ return /******/ (function(modules) { // webpackBootstrap }); } - if (typeof options.queue === 'object') { + if (_typeof(options.queue) === 'object') { this._queue.setOptions(options.queue); } } @@ -6577,6 +6663,8 @@ return /******/ (function(modules) { // webpackBootstrap /* 9 */ /***/ function(module, exports) { + 'use strict'; + /** * A queue * @param {Object} options @@ -6590,8 +6678,6 @@ return /******/ (function(modules) { // webpackBootstrap * Default value of max is Infinity. * @constructor */ - 'use strict'; - function Queue(options) { // options this.delay = null; @@ -6989,7 +7075,7 @@ return /******/ (function(modules) { // webpackBootstrap if (options && options.filter) { if (defaultFilter) { - filter = function (item) { + filter = function filter(item) { return defaultFilter(item) && options.filter(item); }; } else { @@ -7029,7 +7115,7 @@ return /******/ (function(modules) { // webpackBootstrap if (options && options.filter) { if (defaultFilter) { - filter = function (item) { + filter = function filter(item) { return defaultFilter(item) && options.filter(item); }; } else { @@ -7167,6 +7253,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var Emitter = __webpack_require__(12); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); @@ -7342,6 +7430,7 @@ return /******/ (function(modules) { // webpackBootstrap cy = this.camera.getCameraLocation().y, cz = this.camera.getCameraLocation().z, + // calculate angles sinTx = Math.sin(this.camera.getCameraRotation().x), cosTx = Math.cos(this.camera.getCameraRotation().x), @@ -7350,6 +7439,7 @@ return /******/ (function(modules) { // webpackBootstrap sinTz = Math.sin(this.camera.getCameraRotation().z), cosTz = Math.cos(this.camera.getCameraRotation().z), + // calculate translation dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz), dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax - cx)), @@ -7402,7 +7492,7 @@ return /******/ (function(modules) { // webpackBootstrap fill = backgroundColor; stroke = 'none'; strokeWidth = 0; - } else if (typeof backgroundColor === 'object') { + } else if ((typeof backgroundColor === 'undefined' ? 'undefined' : _typeof(backgroundColor)) === 'object') { if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; @@ -9587,14 +9677,14 @@ return /******/ (function(modules) { // webpackBootstrap /* 13 */ /***/ function(module, exports) { + "use strict"; + /** * @prototype Point3d * @param {Number} [x] * @param {Number} [y] * @param {Number} [z] */ - "use strict"; - function Point3d(x, y, z) { this.x = x !== undefined ? x : 0; this.y = y !== undefined ? y : 0; @@ -9670,13 +9760,13 @@ return /******/ (function(modules) { // webpackBootstrap /* 14 */ /***/ function(module, exports) { + "use strict"; + /** * @prototype Point2d * @param {Number} [x] * @param {Number} [y] */ - "use strict"; - function Point2d(x, y) { this.x = x !== undefined ? x : 0; this.y = y !== undefined ? y : 0; @@ -10388,6 +10478,8 @@ return /******/ (function(modules) { // webpackBootstrap /* 18 */ /***/ function(module, exports) { + "use strict"; + /** * @prototype StepNumber * The class StepNumber is an iterator for Numbers. You provide a start and end @@ -10413,8 +10505,6 @@ return /******/ (function(modules) { // webpackBootstrap * @param {boolean} prettyStep Optional. If true, the step size is rounded * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - "use strict"; - function StepNumber(start, end, step, prettyStep) { // set default values this._start = 0; @@ -10534,22 +10624,30 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _Configurator = __webpack_require__(20); + + var _Configurator2 = _interopRequireDefault(_Configurator); + + var _Validator = __webpack_require__(26); + + var _Validator2 = _interopRequireDefault(_Validator); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + var Emitter = __webpack_require__(12); - var Hammer = __webpack_require__(20); + var Hammer = __webpack_require__(22); var moment = __webpack_require__(2); var util = __webpack_require__(1); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); - var Range = __webpack_require__(23); - var Core = __webpack_require__(27); - var TimeAxis = __webpack_require__(38); - var CurrentTime = __webpack_require__(43); - var CustomTime = __webpack_require__(41); - var ItemSet = __webpack_require__(28); - - var Configurator = __webpack_require__(44); - var Validator = __webpack_require__(46)['default']; - var printStyle = __webpack_require__(46).printStyle; + var Range = __webpack_require__(27); + var Core = __webpack_require__(30); + var TimeAxis = __webpack_require__(41); + var CurrentTime = __webpack_require__(46); + var CustomTime = __webpack_require__(44); + var ItemSet = __webpack_require__(31); + + var printStyle = __webpack_require__(26).printStyle; var allOptions = __webpack_require__(47).allOptions; var configureOptions = __webpack_require__(47).configureOptions; @@ -10706,7 +10804,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ Timeline.prototype._createConfigurator = function () { - return new Configurator(this, this.dom.container, configureOptions); + return new _Configurator2.default(this, this.dom.container, configureOptions); }; /** @@ -10723,7 +10821,7 @@ return /******/ (function(modules) { // webpackBootstrap Timeline.prototype.setOptions = function (options) { // validate options - var errorFound = Validator.validate(options, allOptions); + var errorFound = _Validator2.default.validate(options, allOptions); if (errorFound === true) { console.log('%cErrors have been found in the supplied options object.', printStyle); } @@ -10936,18 +11034,18 @@ return /******/ (function(modules) { // webpackBootstrap var getEnd = function getEnd(item) { var end = item.data.end != undefined ? item.data.end : item.data.start; return util.convert(end, 'Date').valueOf(); - } + }; // calculate the date of the left side and right side of the items given - ; - interval = max - min; - // ms + + interval = max - min; // ms + if (interval <= 0) { interval = 10; } factor = interval / _this.props.center.width; - util.forEach(_this.itemSet.items, (function (item) { + util.forEach(_this.itemSet.items, function (item) { item.show(); item.repositionX(); @@ -10965,13 +11063,12 @@ return /******/ (function(modules) { // webpackBootstrap max = right; maxItem = item; } - }).bind(_this)); + }.bind(_this)); if (minItem && maxItem) { lhs = minItem.getWidthLeft() + 10; rhs = maxItem.getWidthRight() + 10; - delta = _this.props.center.width - lhs - rhs; - // px + delta = _this.props.center.width - lhs - rhs; // px if (delta > 0) { min = getStart(minItem) - lhs * interval / delta; // ms @@ -11075,12879 +11172,12969 @@ return /******/ (function(modules) { // webpackBootstrap /* 20 */ /***/ function(module, exports, __webpack_require__) { - // Only load hammer.js when in a browser environment - // (loading hammer.js in a node.js environment gives errors) 'use strict'; - if (typeof window !== 'undefined') { - var propagating = __webpack_require__(21); - var Hammer = window['Hammer'] || __webpack_require__(22); - module.exports = propagating(Hammer, { - preventDefault: 'mouse' - }); - } else { - module.exports = function () { - throw Error('hammer.js is only available in a browser, not in node.js.'); - }; - } - -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { + Object.defineProperty(exports, "__esModule", { + value: true + }); - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - (function (factory) { - if (true) { - // AMD. Register as an anonymous module. - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - window.propagating = factory(); - } - }(function () { - var _firstTarget = null; // singleton, will contain the target element where the touch event started - var _processing = false; // singleton, true when a touch event is being handled + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - /** - * Extend an Hammer.js instance with event propagation. - * - * Features: - * - Events emitted by hammer will propagate in order from child to parent - * elements. - * - Events are extended with a function `event.stopPropagation()` to stop - * propagation to parent elements. - * - An option `preventDefault` to stop all default browser behavior. - * - * Usage: - * var hammer = propagatingHammer(new Hammer(element)); - * var hammer = propagatingHammer(new Hammer(element), {preventDefault: true}); - * - * @param {Hammer.Manager} hammer An hammer instance. - * @param {Object} [options] Available options: - * - `preventDefault: true | 'mouse' | 'touch' | 'pen'`. - * Enforce preventing the default browser behavior. - * Cannot be set to `false`. - * @return {Hammer.Manager} Returns the same hammer instance with extended - * functionality - */ - return function propagating(hammer, options) { - var _options = options || { - preventDefault: false - }; + var _ColorPicker = __webpack_require__(21); - if (hammer.Manager) { - // This looks like the Hammer constructor. - // Overload the constructors with our own. - var Hammer = hammer; + var _ColorPicker2 = _interopRequireDefault(_ColorPicker); - var PropagatingHammer = function(element, options) { - var o = Object.create(_options); - if (options) Hammer.assign(o, options); - return propagating(new Hammer(element, o), o); - }; - Hammer.assign(PropagatingHammer, Hammer); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - PropagatingHammer.Manager = function (element, options) { - var o = Object.create(_options); - if (options) Hammer.assign(o, options); - return propagating(new Hammer.Manager(element, o), o); - }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - return PropagatingHammer; - } + var util = __webpack_require__(1); - // create a wrapper object which will override the functions - // `on`, `off`, `destroy`, and `emit` of the hammer instance - var wrapper = Object.create(hammer); + /** + * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options. + * Boolean options are recognised as Boolean + * Number options should be written as array: [default value, min value, max value, stepsize] + * Colors should be written as array: ['color', '#ffffff'] + * Strings with should be written as array: [option1, option2, option3, ..] + * + * The options are matched with their counterparts in each of the modules and the values used in the configuration are + * + * @param parentModule | the location where parentModule.setOptions() can be called + * @param defaultContainer | the default container of the module + * @param configureOptions | the fully configured and predefined options set found in allOptions.js + * @param pixelRatio | canvas pixel ratio + */ - // attach to DOM element - var element = hammer.element; + var Configurator = function () { + function Configurator(parentModule, defaultContainer, configureOptions) { + var pixelRatio = arguments.length <= 3 || arguments[3] === undefined ? 1 : arguments[3]; - if(!element.hammer) element.hammer = []; - element.hammer.push(wrapper); + _classCallCheck(this, Configurator); - // register an event to catch the start of a gesture and store the - // target in a singleton - hammer.on('hammer.input', function (event) { - if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) { - event.preventDefault(); - } - if (event.isFirst) { - _firstTarget = event.target; - } - }); + this.parent = parentModule; + this.changedOptions = []; + this.container = defaultContainer; + this.allowCreation = false; - /** @type {Object.>} */ - wrapper._handlers = {}; + this.options = {}; + this.initialized = false; + this.popupCounter = 0; + this.defaultOptions = { + enabled: false, + filter: true, + container: undefined, + showButton: true + }; + util.extend(this.options, this.defaultOptions); - /** - * Register a handler for one or multiple events - * @param {String} events A space separated string with events - * @param {function} handler A callback function, called as handler(event) - * @returns {Hammer.Manager} Returns the hammer instance - */ - wrapper.on = function (events, handler) { - // register the handler - split(events).forEach(function (event) { - var _handlers = wrapper._handlers[event]; - if (!_handlers) { - wrapper._handlers[event] = _handlers = []; + this.configureOptions = configureOptions; + this.moduleOptions = {}; + this.domElements = []; + this.popupDiv = {}; + this.popupLimit = 5; + this.popupHistory = {}; + this.colorPicker = new _ColorPicker2.default(pixelRatio); + this.wrapper = undefined; + } - // register the static, propagated handler - hammer.on(event, propagatedHandler); - } - _handlers.push(handler); - }); + /** + * refresh all options. + * Because all modules parse their options by themselves, we just use their options. We copy them here. + * + * @param options + */ - return wrapper; - }; - /** - * Unregister a handler for one or multiple events - * @param {String} events A space separated string with events - * @param {function} [handler] Optional. The registered handler. If not - * provided, all handlers for given events - * are removed. - * @returns {Hammer.Manager} Returns the hammer instance - */ - wrapper.off = function (events, handler) { - // unregister the handler - split(events).forEach(function (event) { - var _handlers = wrapper._handlers[event]; - if (_handlers) { - _handlers = handler ? _handlers.filter(function (h) { - return h !== handler; - }) : []; + _createClass(Configurator, [{ + key: 'setOptions', + value: function setOptions(options) { + if (options !== undefined) { + // reset the popup history because the indices may have been changed. + this.popupHistory = {}; + this._removePopup(); - if (_handlers.length > 0) { - wrapper._handlers[event] = _handlers; + var enabled = true; + if (typeof options === 'string') { + this.options.filter = options; + } else if (options instanceof Array) { + this.options.filter = options.join(); + } else if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + if (options.container !== undefined) { + this.options.container = options.container; } - else { - // remove static, propagated handler - hammer.off(event, propagatedHandler); - delete wrapper._handlers[event]; + if (options.filter !== undefined) { + this.options.filter = options.filter; + } + if (options.showButton !== undefined) { + this.options.showButton = options.showButton; + } + if (options.enabled !== undefined) { + enabled = options.enabled; } + } else if (typeof options === 'boolean') { + this.options.filter = true; + enabled = options; + } else if (typeof options === 'function') { + this.options.filter = options; + enabled = true; + } + if (this.options.filter === false) { + enabled = false; } - }); - return wrapper; - }; + this.options.enabled = enabled; + } + this._clean(); + } + }, { + key: 'setModuleOptions', + value: function setModuleOptions(moduleOptions) { + this.moduleOptions = moduleOptions; + if (this.options.enabled === true) { + this._clean(); + if (this.options.container !== undefined) { + this.container = this.options.container; + } + this._create(); + } + } /** - * Emit to the event listeners - * @param {string} eventType - * @param {Event} event + * Create all DOM elements + * @private */ - wrapper.emit = function(eventType, event) { - _firstTarget = event.target; - hammer.emit(eventType, event); - }; - wrapper.destroy = function () { - // Detach from DOM element - var hammers = hammer.element.hammer; - var idx = hammers.indexOf(wrapper); - if(idx !== -1) hammers.splice(idx,1); - if(!hammers.length) delete hammer.element.hammer; + }, { + key: '_create', + value: function _create() { + var _this = this; - // clear all handlers - wrapper._handlers = {}; + this._clean(); + this.changedOptions = []; - // call original hammer destroy - hammer.destroy(); - }; + var filter = this.options.filter; + var counter = 0; + var show = false; + for (var option in this.configureOptions) { + if (this.configureOptions.hasOwnProperty(option)) { + this.allowCreation = false; + show = false; + if (typeof filter === 'function') { + show = filter(option, []); + show = show || this._handleObject(this.configureOptions[option], [option], true); + } else if (filter === true || filter.indexOf(option) !== -1) { + show = true; + } - // split a string with space separated words - function split(events) { - return events.match(/[^ ]+/g); - } + if (show !== false) { + this.allowCreation = true; - /** - * A static event handler, applying event propagation. - * @param {Object} event - */ - function propagatedHandler(event) { - // let only a single hammer instance handle this event - if (event.type !== 'hammer.input') { - // it is possible that the same srcEvent is used with multiple hammer events, - // we keep track on which events are handled in an object _handled - if (!event.srcEvent._handled) { - event.srcEvent._handled = {}; - } + // linebreak between categories + if (counter > 0) { + this._makeItem([]); + } + // a header for the category + this._makeHeader(option); - if (event.srcEvent._handled[event.type]) { - return; - } - else { - event.srcEvent._handled[event.type] = true; + // get the sub options + this._handleObject(this.configureOptions[option], [option]); + } + counter++; } } - // attach a stopPropagation function to the event - var stopped = false; - event.stopPropagation = function () { - stopped = true; - }; + if (this.options.showButton === true) { + (function () { + var generateButton = document.createElement('div'); + generateButton.className = 'vis-configuration vis-config-button'; + generateButton.innerHTML = 'generate options'; + generateButton.onclick = function () { + _this._printOptions(); + }; + generateButton.onmouseover = function () { + generateButton.className = 'vis-configuration vis-config-button hover'; + }; + generateButton.onmouseout = function () { + generateButton.className = 'vis-configuration vis-config-button'; + }; - //wrap the srcEvent's stopPropagation to also stop hammer propagation: - var srcStop = event.srcEvent.stopPropagation; - if(typeof srcStop == "function") { - event.srcEvent.stopPropagation = function(){ - srcStop(); - event.stopPropagation(); - } + _this.optionsContainer = document.createElement('div'); + _this.optionsContainer.className = 'vis-configuration vis-config-option-container'; + + _this.domElements.push(_this.optionsContainer); + _this.domElements.push(generateButton); + })(); } - // attach firstTarget property to the event - event.firstTarget = _firstTarget; + this._push(); + //~ this.colorPicker.insertTo(this.container); + } - // propagate over all elements (until stopped) - var elem = _firstTarget; - while (elem && !stopped) { - var elemHammer = elem.hammer; - if(elemHammer){ - var _handlers; - for(var k = 0; k < elemHammer.length; k++){ - _handlers = elemHammer[k]._handlers[event.type]; - if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) { - _handlers[i](event); - } - } - } - elem = elem.parentNode; + /** + * draw all DOM elements on the screen + * @private + */ + + }, { + key: '_push', + value: function _push() { + this.wrapper = document.createElement('div'); + this.wrapper.className = 'vis-configuration-wrapper'; + this.container.appendChild(this.wrapper); + for (var i = 0; i < this.domElements.length; i++) { + this.wrapper.appendChild(this.domElements[i]); } + + this._showPopupIfNeeded(); } - return wrapper; - }; - })); + /** + * delete all DOM elements + * @private + */ + }, { + key: '_clean', + value: function _clean() { + for (var i = 0; i < this.domElements.length; i++) { + this.wrapper.removeChild(this.domElements[i]); + } -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { + if (this.wrapper !== undefined) { + this.container.removeChild(this.wrapper); + this.wrapper = undefined; + } + this.domElements = []; - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.6 - 2015-12-23 - * http://hammerjs.github.io/ - * - * Copyright (c) 2015 Jorik Tangelder; - * Licensed under the license */ - (function(window, document, exportName, undefined) { - 'use strict'; + this._removePopup(); + } - var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; - var TEST_ELEMENT = document.createElement('div'); + /** + * get the value from the actualOptions if it exists + * @param {array} path | where to look for the actual option + * @returns {*} + * @private + */ - var TYPE_FUNCTION = 'function'; + }, { + key: '_getValue', + value: function _getValue(path) { + var base = this.moduleOptions; + for (var i = 0; i < path.length; i++) { + if (base[path[i]] !== undefined) { + base = base[path[i]]; + } else { + base = undefined; + break; + } + } + return base; + } - var round = Math.round; - var abs = Math.abs; - var now = Date.now; + /** + * all option elements are wrapped in an item + * @param path + * @param domElements + * @private + */ - /** - * set a timeout with a given scope - * @param {Function} fn - * @param {Number} timeout - * @param {Object} context - * @returns {number} - */ - function setTimeoutContext(fn, timeout, context) { - return setTimeout(bindFn(fn, context), timeout); - } + }, { + key: '_makeItem', + value: function _makeItem(path) { + var _arguments = arguments, + _this2 = this; - /** - * if the argument is an array, we want to execute the fn on each entry - * if it aint an array we don't want to do a thing. - * this is used by all the methods that accept a single and array argument. - * @param {*|Array} arg - * @param {String} fn - * @param {Object} [context] - * @returns {Boolean} - */ - function invokeArrayArg(arg, fn, context) { - if (Array.isArray(arg)) { - each(arg, context[fn], context); - return true; + if (this.allowCreation === true) { + var _len, domElements, _key; + + var _ret2 = function () { + var item = document.createElement('div'); + item.className = 'vis-configuration vis-config-item vis-config-s' + path.length; + + for (_len = _arguments.length, domElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + domElements[_key - 1] = _arguments[_key]; + } + + domElements.forEach(function (element) { + item.appendChild(element); + }); + _this2.domElements.push(item); + return { + v: _this2.domElements.length + }; + }(); + + if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; + } + return 0; } - return false; - } - /** - * walk objects and arrays - * @param {Object} obj - * @param {Function} iterator - * @param {Object} context - */ - function each(obj, iterator, context) { - var i; + /** + * header for major subjects + * @param name + * @private + */ - if (!obj) { - return; + }, { + key: '_makeHeader', + value: function _makeHeader(name) { + var div = document.createElement('div'); + div.className = 'vis-configuration vis-config-header'; + div.innerHTML = name; + this._makeItem([], div); } - if (obj.forEach) { - obj.forEach(iterator, context); - } else if (obj.length !== undefined) { - i = 0; - while (i < obj.length) { - iterator.call(context, obj[i], i, obj); - i++; - } - } else { - for (i in obj) { - obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); - } + /** + * make a label, if it is an object label, it gets different styling. + * @param name + * @param path + * @param objectLabel + * @returns {HTMLElement} + * @private + */ + + }, { + key: '_makeLabel', + value: function _makeLabel(name, path) { + var objectLabel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + + var div = document.createElement('div'); + div.className = 'vis-configuration vis-config-label vis-config-s' + path.length; + if (objectLabel === true) { + div.innerHTML = '' + name + ':'; + } else { + div.innerHTML = name + ':'; + } + return div; } - } - /** - * wrap a method with a deprecation warning and stack trace - * @param {Function} method - * @param {String} name - * @param {String} message - * @returns {Function} A new function wrapping the supplied method. - */ - function deprecate(method, name, message) { - var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n'; - return function() { - var e = new Error('get-stack-trace'); - var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '') - .replace(/^\s+at\s+/gm, '') - .replace(/^Object.\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; + /** + * make a dropdown list for multiple possible string optoins + * @param arr + * @param value + * @param path + * @private + */ - var log = window.console && (window.console.warn || window.console.log); - if (log) { - log.call(window.console, deprecationMessage, stack); + }, { + key: '_makeDropdown', + value: function _makeDropdown(arr, value, path) { + var select = document.createElement('select'); + select.className = 'vis-configuration vis-config-select'; + var selectedValue = 0; + if (value !== undefined) { + if (arr.indexOf(value) !== -1) { + selectedValue = arr.indexOf(value); } - return method.apply(this, arguments); - }; - } + } - /** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} target - * @param {...Object} objects_to_assign - * @returns {Object} target - */ - var assign; - if (typeof Object.assign !== 'function') { - assign = function assign(target) { - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); + for (var i = 0; i < arr.length; i++) { + var option = document.createElement('option'); + option.value = arr[i]; + if (i === selectedValue) { + option.selected = 'selected'; } + option.innerHTML = arr[i]; + select.appendChild(option); + } - var output = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source !== undefined && source !== null) { - for (var nextKey in source) { - if (source.hasOwnProperty(nextKey)) { - output[nextKey] = source[nextKey]; - } - } - } - } - return output; - }; - } else { - assign = Object.assign; - } + var me = this; + select.onchange = function () { + me._update(this.value, path); + }; - /** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} dest - * @param {Object} src - * @param {Boolean=false} [merge] - * @returns {Object} dest - */ - var extend = deprecate(function extend(dest, src, merge) { - var keys = Object.keys(src); - var i = 0; - while (i < keys.length) { - if (!merge || (merge && dest[keys[i]] === undefined)) { - dest[keys[i]] = src[keys[i]]; - } - i++; + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, select); } - return dest; - }, 'extend', 'Use `assign`.'); - /** - * merge the values from src in the dest. - * means that properties that exist in dest will not be overwritten by src - * @param {Object} dest - * @param {Object} src - * @returns {Object} dest - */ - var merge = deprecate(function merge(dest, src) { - return extend(dest, src, true); - }, 'merge', 'Use `assign`.'); + /** + * make a range object for numeric options + * @param arr + * @param value + * @param path + * @private + */ - /** - * simple class inheritance - * @param {Function} child - * @param {Function} base - * @param {Object} [properties] - */ - function inherit(child, base, properties) { - var baseP = base.prototype, - childP; + }, { + key: '_makeRange', + value: function _makeRange(arr, value, path) { + var defaultValue = arr[0]; + var min = arr[1]; + var max = arr[2]; + var step = arr[3]; + var range = document.createElement('input'); + range.className = 'vis-configuration vis-config-range'; + try { + range.type = 'range'; // not supported on IE9 + range.min = min; + range.max = max; + } catch (err) {} + range.step = step; - childP = child.prototype = Object.create(baseP); - childP.constructor = child; - childP._super = baseP; + // set up the popup settings in case they are needed. + var popupString = ''; + var popupValue = 0; - if (properties) { - assign(childP, properties); - } - } + if (value !== undefined) { + var factor = 1.20; + if (value < 0 && value * factor < min) { + range.min = Math.ceil(value * factor); + popupValue = range.min; + popupString = 'range increased'; + } else if (value / factor < min) { + range.min = Math.ceil(value / factor); + popupValue = range.min; + popupString = 'range increased'; + } + if (value * factor > max && max !== 1) { + range.max = Math.ceil(value * factor); + popupValue = range.max; + popupString = 'range increased'; + } + range.value = value; + } else { + range.value = defaultValue; + } - /** - * simple function bind - * @param {Function} fn - * @param {Object} context - * @returns {Function} - */ - function bindFn(fn, context) { - return function boundFn() { - return fn.apply(context, arguments); - }; - } + var input = document.createElement('input'); + input.className = 'vis-configuration vis-config-rangeinput'; + input.value = range.value; - /** - * let a boolean value also be a function that must return a boolean - * this first item in args will be used as the context - * @param {Boolean|Function} val - * @param {Array} [args] - * @returns {Boolean} - */ - function boolOrFn(val, args) { - if (typeof val == TYPE_FUNCTION) { - return val.apply(args ? args[0] || undefined : undefined, args); - } - return val; - } + var me = this; + range.onchange = function () { + input.value = this.value;me._update(Number(this.value), path); + }; + range.oninput = function () { + input.value = this.value; + }; - /** - * use the val2 when val1 is undefined - * @param {*} val1 - * @param {*} val2 - * @returns {*} - */ - function ifUndefined(val1, val2) { - return (val1 === undefined) ? val2 : val1; - } + var label = this._makeLabel(path[path.length - 1], path); + var itemIndex = this._makeItem(path, label, range, input); - /** - * addEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ - function addEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.addEventListener(type, handler, false); - }); - } + // if a popup is needed AND it has not been shown for this value, show it. + if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) { + this.popupHistory[itemIndex] = popupValue; + this._setupPopup(popupString, itemIndex); + } + } - /** - * removeEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ - function removeEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.removeEventListener(type, handler, false); - }); - } + /** + * prepare the popup + * @param string + * @param index + * @private + */ - /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ - function hasParent(node, parent) { - while (node) { - if (node == parent) { - return true; - } - node = node.parentNode; + }, { + key: '_setupPopup', + value: function _setupPopup(string, index) { + var _this3 = this; + + if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) { + var div = document.createElement("div"); + div.id = "vis-configuration-popup"; + div.className = "vis-configuration-popup"; + div.innerHTML = string; + div.onclick = function () { + _this3._removePopup(); + }; + this.popupCounter += 1; + this.popupDiv = { html: div, index: index }; + } } - return false; - } - /** - * small indexOf wrapper - * @param {String} str - * @param {String} find - * @returns {Boolean} found - */ - function inStr(str, find) { - return str.indexOf(find) > -1; - } + /** + * remove the popup from the dom + * @private + */ - /** - * split string on whitespace - * @param {String} str - * @returns {Array} words - */ - function splitStr(str) { - return str.trim().split(/\s+/g); - } + }, { + key: '_removePopup', + value: function _removePopup() { + if (this.popupDiv.html !== undefined) { + this.popupDiv.html.parentNode.removeChild(this.popupDiv.html); + clearTimeout(this.popupDiv.hideTimeout); + clearTimeout(this.popupDiv.deleteTimeout); + this.popupDiv = {}; + } + } - /** - * find if a array contains the object using indexOf or a simple polyFill - * @param {Array} src - * @param {String} find - * @param {String} [findByKey] - * @return {Boolean|Number} false when not found, or the index - */ - function inArray(src, find, findByKey) { - if (src.indexOf && !findByKey) { - return src.indexOf(find); - } else { - var i = 0; - while (i < src.length) { - if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { - return i; + /** + * Show the popup if it is needed. + * @private + */ + + }, { + key: '_showPopupIfNeeded', + value: function _showPopupIfNeeded() { + var _this4 = this; + + if (this.popupDiv.html !== undefined) { + var correspondingElement = this.domElements[this.popupDiv.index]; + var rect = correspondingElement.getBoundingClientRect(); + this.popupDiv.html.style.left = rect.left + "px"; + this.popupDiv.html.style.top = rect.top - 30 + "px"; // 30 is the height; + document.body.appendChild(this.popupDiv.html); + this.popupDiv.hideTimeout = setTimeout(function () { + _this4.popupDiv.html.style.opacity = 0; + }, 1500); + this.popupDiv.deleteTimeout = setTimeout(function () { + _this4._removePopup(); + }, 1800); + } + } + + /** + * make a checkbox for boolean options. + * @param defaultValue + * @param value + * @param path + * @private + */ + + }, { + key: '_makeCheckbox', + value: function _makeCheckbox(defaultValue, value, path) { + var checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.className = 'vis-configuration vis-config-checkbox'; + checkbox.checked = defaultValue; + if (value !== undefined) { + checkbox.checked = value; + if (value !== defaultValue) { + if ((typeof defaultValue === 'undefined' ? 'undefined' : _typeof(defaultValue)) === 'object') { + if (value !== defaultValue.enabled) { + this.changedOptions.push({ path: path, value: value }); } - i++; + } else { + this.changedOptions.push({ path: path, value: value }); + } } - return -1; + } + + var me = this; + checkbox.onchange = function () { + me._update(this.checked, path); + }; + + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, checkbox); } - } - /** - * convert array-like objects to real arrays - * @param {Object} obj - * @returns {Array} - */ - function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - } + /** + * make a text input field for string options. + * @param defaultValue + * @param value + * @param path + * @private + */ - /** - * unique array with objects based on a key (like 'id') or just by the array's value - * @param {Array} src [{id:1},{id:2},{id:1}] - * @param {String} [key] - * @param {Boolean} [sort=False] - * @returns {Array} [{id:1},{id:2}] - */ - function uniqueArray(src, key, sort) { - var results = []; - var values = []; - var i = 0; + }, { + key: '_makeTextInput', + value: function _makeTextInput(defaultValue, value, path) { + var checkbox = document.createElement('input'); + checkbox.type = 'text'; + checkbox.className = 'vis-configuration vis-config-text'; + checkbox.value = value; + if (value !== defaultValue) { + this.changedOptions.push({ path: path, value: value }); + } - while (i < src.length) { - var val = key ? src[i][key] : src[i]; - if (inArray(values, val) < 0) { - results.push(src[i]); - } - values[i] = val; - i++; - } + var me = this; + checkbox.onchange = function () { + me._update(this.value, path); + }; - if (sort) { - if (!key) { - results = results.sort(); - } else { - results = results.sort(function sortUniqueArray(a, b) { - return a[key] > b[key]; - }); - } + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, checkbox); } - return results; - } + /** + * make a color field with a color picker for color fields + * @param arr + * @param value + * @param path + * @private + */ - /** - * get the prefixed property - * @param {Object} obj - * @param {String} property - * @returns {String|Undefined} prefixed - */ - function prefixed(obj, property) { - var prefix, prop; - var camelProp = property[0].toUpperCase() + property.slice(1); + }, { + key: '_makeColorField', + value: function _makeColorField(arr, value, path) { + var _this5 = this; - var i = 0; - while (i < VENDOR_PREFIXES.length) { - prefix = VENDOR_PREFIXES[i]; - prop = (prefix) ? prefix + camelProp : property; + var defaultColor = arr[1]; + var div = document.createElement('div'); + value = value === undefined ? defaultColor : value; - if (prop in obj) { - return prop; - } - i++; - } - return undefined; - } + if (value !== 'none') { + div.className = 'vis-configuration vis-config-colorBlock'; + div.style.backgroundColor = value; + } else { + div.className = 'vis-configuration vis-config-colorBlock none'; + } - /** - * get a unique id - * @returns {number} uniqueId - */ - var _uniqueId = 1; - function uniqueId() { - return _uniqueId++; - } + value = value === undefined ? defaultColor : value; + div.onclick = function () { + _this5._showColorPicker(value, div, path); + }; - /** - * get the window object of an element - * @param {HTMLElement} element - * @returns {DocumentView|Window} - */ - function getWindowForElement(element) { - var doc = element.ownerDocument || element; - return (doc.defaultView || doc.parentWindow || window); - } + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, div); + } - var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; + /** + * used by the color buttons to call the color picker. + * @param event + * @param value + * @param div + * @param path + * @private + */ - var SUPPORT_TOUCH = ('ontouchstart' in window); - var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; - var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); + }, { + key: '_showColorPicker', + value: function _showColorPicker(value, div, path) { + var _this6 = this; - var INPUT_TYPE_TOUCH = 'touch'; - var INPUT_TYPE_PEN = 'pen'; - var INPUT_TYPE_MOUSE = 'mouse'; - var INPUT_TYPE_KINECT = 'kinect'; + // clear the callback from this div + div.onclick = function () {}; - var COMPUTE_INTERVAL = 25; + this.colorPicker.insertTo(div); + this.colorPicker.show(); - var INPUT_START = 1; - var INPUT_MOVE = 2; - var INPUT_END = 4; - var INPUT_CANCEL = 8; + this.colorPicker.setColor(value); + this.colorPicker.setUpdateCallback(function (color) { + var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')'; + div.style.backgroundColor = colorString; + _this6._update(colorString, path); + }); - var DIRECTION_NONE = 1; - var DIRECTION_LEFT = 2; - var DIRECTION_RIGHT = 4; - var DIRECTION_UP = 8; - var DIRECTION_DOWN = 16; + // on close of the colorpicker, restore the callback. + this.colorPicker.setCloseCallback(function () { + div.onclick = function () { + _this6._showColorPicker(value, div, path); + }; + }); + } - var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; - var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; - var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + /** + * parse an object and draw the correct items + * @param obj + * @param path + * @private + */ - var PROPS_XY = ['x', 'y']; - var PROPS_CLIENT_XY = ['clientX', 'clientY']; + }, { + key: '_handleObject', + value: function _handleObject(obj) { + var path = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; + var checkOnly = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - /** - * create new input type manager - * @param {Manager} manager - * @param {Function} callback - * @returns {Input} - * @constructor - */ - function Input(manager, callback) { - var self = this; - this.manager = manager; - this.callback = callback; - this.element = manager.element; - this.target = manager.options.inputTarget; + var show = false; + var filter = this.options.filter; + var visibleInSet = false; + for (var subObj in obj) { + if (obj.hasOwnProperty(subObj)) { + show = true; + var item = obj[subObj]; + var newPath = util.copyAndExtendArray(path, subObj); + if (typeof filter === 'function') { + show = filter(subObj, path); - // smaller wrapper around the handler, for the scope and the enabled state of the manager, - // so when disabled the input events are completely bypassed. - this.domHandler = function(ev) { - if (boolOrFn(manager.options.enable, [manager])) { - self.handler(ev); - } - }; + // if needed we must go deeper into the object. + if (show === false) { + if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) { + this.allowCreation = false; + show = this._handleObject(item, newPath, true); + this.allowCreation = checkOnly === false; + } + } + } - this.init(); + if (show !== false) { + visibleInSet = true; + var value = this._getValue(newPath); - } + if (item instanceof Array) { + this._handleArray(item, value, newPath); + } else if (typeof item === 'string') { + this._makeTextInput(item, value, newPath); + } else if (typeof item === 'boolean') { + this._makeCheckbox(item, value, newPath); + } else if (item instanceof Object) { + // collapse the physics options that are not enabled + var draw = true; + if (path.indexOf('physics') !== -1) { + if (this.moduleOptions.physics.solver !== subObj) { + draw = false; + } + } - Input.prototype = { - /** - * should handle the inputEvent data and trigger the callback - * @virtual - */ - handler: function() { }, + if (draw === true) { + // initially collapse options with an disabled enabled option. + if (item.enabled !== undefined) { + var enabledPath = util.copyAndExtendArray(newPath, 'enabled'); + var enabledValue = this._getValue(enabledPath); + if (enabledValue === true) { + var label = this._makeLabel(subObj, newPath, true); + this._makeItem(newPath, label); + visibleInSet = this._handleObject(item, newPath) || visibleInSet; + } else { + this._makeCheckbox(item, enabledValue, newPath); + } + } else { + var _label = this._makeLabel(subObj, newPath, true); + this._makeItem(newPath, _label); + visibleInSet = this._handleObject(item, newPath) || visibleInSet; + } + } + } else { + console.error('dont know how to handle', item, subObj, newPath); + } + } + } + } + return visibleInSet; + } /** - * bind the events + * handle the array type of option + * @param optionName + * @param arr + * @param value + * @param path + * @private */ - init: function() { - this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - }, + + }, { + key: '_handleArray', + value: function _handleArray(arr, value, path) { + if (typeof arr[0] === 'string' && arr[0] === 'color') { + this._makeColorField(arr, value, path); + if (arr[1] !== value) { + this.changedOptions.push({ path: path, value: value }); + } + } else if (typeof arr[0] === 'string') { + this._makeDropdown(arr, value, path); + if (arr[0] !== value) { + this.changedOptions.push({ path: path, value: value }); + } + } else if (typeof arr[0] === 'number') { + this._makeRange(arr, value, path); + if (arr[0] !== value) { + this.changedOptions.push({ path: path, value: Number(value) }); + } + } + } /** - * unbind the events + * called to update the network with the new settings. + * @param value + * @param path + * @private */ - destroy: function() { - this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - } - }; - /** - * create new input type manager - * called by the Manager constructor - * @param {Hammer} manager - * @returns {Input} - */ - function createInputInstance(manager) { - var Type; - var inputClass = manager.options.inputClass; + }, { + key: '_update', + value: function _update(value, path) { + var options = this._constructOptions(value, path); - if (inputClass) { - Type = inputClass; - } else if (SUPPORT_POINTER_EVENTS) { - Type = PointerEventInput; - } else if (SUPPORT_ONLY_TOUCH) { - Type = TouchInput; - } else if (!SUPPORT_TOUCH) { - Type = MouseInput; - } else { - Type = TouchMouseInput; + if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) { + this.parent.body.emitter.emit("configChange", options); + } + this.initialized = true; + this.parent.setOptions(options); } - return new (Type)(manager, inputHandler); - } + }, { + key: '_constructOptions', + value: function _constructOptions(value, path) { + var optionsObj = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - /** - * handle input events - * @param {Manager} manager - * @param {String} eventType - * @param {Object} input - */ - function inputHandler(manager, eventType, input) { - var pointersLen = input.pointers.length; - var changedPointersLen = input.changedPointers.length; - var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); - var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); + var pointer = optionsObj; - input.isFirst = !!isFirst; - input.isFinal = !!isFinal; + // when dropdown boxes can be string or boolean, we typecast it into correct types + value = value === 'true' ? true : value; + value = value === 'false' ? false : value; - if (isFirst) { - manager.session = {}; + for (var i = 0; i < path.length; i++) { + if (path[i] !== 'global') { + if (pointer[path[i]] === undefined) { + pointer[path[i]] = {}; + } + if (i !== path.length - 1) { + pointer = pointer[path[i]]; + } else { + pointer[path[i]] = value; + } + } + } + return optionsObj; + } + }, { + key: '_printOptions', + value: function _printOptions() { + var options = this.getOptions(); + this.optionsContainer.innerHTML = '
var options = ' + JSON.stringify(options, null, 2) + '
'; + } + }, { + key: 'getOptions', + value: function getOptions() { + var options = {}; + for (var i = 0; i < this.changedOptions.length; i++) { + this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options); + } + return options; } + }]); - // source event is the normalized value of the domEvents - // like 'touchstart, mouseup, pointerdown' - input.eventType = eventType; + return Configurator; + }(); - // compute scale, rotation etc - computeInputData(manager, input); + exports.default = Configurator; - // emit secret event - manager.emit('hammer.input', input); +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { - manager.recognize(input); - manager.session.prevInput = input; - } + 'use strict'; - /** - * extend the data with some usable properties like scale, rotate, velocity etc - * @param {Object} manager - * @param {Object} input - */ - function computeInputData(manager, input) { - var session = manager.session; - var pointers = input.pointers; - var pointersLength = pointers.length; + Object.defineProperty(exports, "__esModule", { + value: true + }); - // store the first input to calculate the distance and direction - if (!session.firstInput) { - session.firstInput = simpleCloneInputData(input); - } + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - // to compute scale and rotation we need to store the multiple touches - if (pointersLength > 1 && !session.firstMultiple) { - session.firstMultiple = simpleCloneInputData(input); - } else if (pointersLength === 1) { - session.firstMultiple = false; - } - - var firstInput = session.firstInput; - var firstMultiple = session.firstMultiple; - var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - - var center = input.center = getCenter(pointers); - input.timeStamp = now(); - input.deltaTime = input.timeStamp - firstInput.timeStamp; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - input.angle = getAngle(offsetCenter, center); - input.distance = getDistance(offsetCenter, center); + var Hammer = __webpack_require__(22); + var hammerUtil = __webpack_require__(25); + var util = __webpack_require__(1); - computeDeltaXY(session, input); - input.offsetDirection = getDirection(input.deltaX, input.deltaY); + var ColorPicker = function () { + function ColorPicker() { + var pixelRatio = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0]; - var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); - input.overallVelocityX = overallVelocity.x; - input.overallVelocityY = overallVelocity.y; - input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y; + _classCallCheck(this, ColorPicker); - input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; - input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + this.pixelRatio = pixelRatio; + this.generated = false; + this.centerCoordinates = { x: 289 / 2, y: 289 / 2 }; + this.r = 289 * 0.49; + this.color = { r: 255, g: 255, b: 255, a: 1.0 }; + this.hueCircle = undefined; + this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 }; + this.previousColor = undefined; + this.applied = false; - input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length > - session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers); + // bound by + this.updateCallback = function () {}; + this.closeCallback = function () {}; - computeIntervalInputData(session, input); + // create all DOM elements + this._create(); + } - // find the correct target - var target = manager.element; - if (hasParent(input.srcEvent.target, target)) { - target = input.srcEvent.target; - } - input.target = target; - } + /** + * this inserts the colorPicker into a div from the DOM + * @param container + */ - function computeDeltaXY(session, input) { - var center = input.center; - var offset = session.offsetDelta || {}; - var prevDelta = session.prevDelta || {}; - var prevInput = session.prevInput || {}; - if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { - prevDelta = session.prevDelta = { - x: prevInput.deltaX || 0, - y: prevInput.deltaY || 0 - }; + _createClass(ColorPicker, [{ + key: 'insertTo', + value: function insertTo(container) { + if (this.hammer !== undefined) { + this.hammer.destroy(); + this.hammer = undefined; + } + this.container = container; + this.container.appendChild(this.frame); + this._bindHammer(); - offset = session.offsetDelta = { - x: center.x, - y: center.y - }; + this._setSize(); } - input.deltaX = prevDelta.x + (center.x - offset.x); - input.deltaY = prevDelta.y + (center.y - offset.y); - } - - /** - * velocity is calculated every x ms - * @param {Object} session - * @param {Object} input - */ - function computeIntervalInputData(session, input) { - var last = session.lastInterval || input, - deltaTime = input.timeStamp - last.timeStamp, - velocity, velocityX, velocityY, direction; - - if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { - var deltaX = input.deltaX - last.deltaX; - var deltaY = input.deltaY - last.deltaY; - - var v = getVelocity(deltaTime, deltaX, deltaY); - velocityX = v.x; - velocityY = v.y; - velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; - direction = getDirection(deltaX, deltaY); + /** + * the callback is executed on apply and save. Bind it to the application + * @param callback + */ - session.lastInterval = input; - } else { - // use latest velocity info if it doesn't overtake a minimum period - velocity = last.velocity; - velocityX = last.velocityX; - velocityY = last.velocityY; - direction = last.direction; + }, { + key: 'setUpdateCallback', + value: function setUpdateCallback(callback) { + if (typeof callback === 'function') { + this.updateCallback = callback; + } else { + throw new Error("Function attempted to set as colorPicker update callback is not a function."); + } } - input.velocity = velocity; - input.velocityX = velocityX; - input.velocityY = velocityY; - input.direction = direction; - } + /** + * the callback is executed on apply and save. Bind it to the application + * @param callback + */ - /** - * create a simple clone from the input used for storage of firstInput and firstMultiple - * @param {Object} input - * @returns {Object} clonedInputData - */ - function simpleCloneInputData(input) { - // make a simple copy of the pointers because we will get a reference if we don't - // we only need clientXY for the calculations - var pointers = []; - var i = 0; - while (i < input.pointers.length) { - pointers[i] = { - clientX: round(input.pointers[i].clientX), - clientY: round(input.pointers[i].clientY) - }; - i++; + }, { + key: 'setCloseCallback', + value: function setCloseCallback(callback) { + if (typeof callback === 'function') { + this.closeCallback = callback; + } else { + throw new Error("Function attempted to set as colorPicker closing callback is not a function."); + } + } + }, { + key: '_isColorString', + value: function _isColorString(color) { + var htmlColors = { black: '#000000', navy: '#000080', darkblue: '#00008B', mediumblue: '#0000CD', blue: '#0000FF', darkgreen: '#006400', green: '#008000', teal: '#008080', darkcyan: '#008B8B', deepskyblue: '#00BFFF', darkturquoise: '#00CED1', mediumspringgreen: '#00FA9A', lime: '#00FF00', springgreen: '#00FF7F', aqua: '#00FFFF', cyan: '#00FFFF', midnightblue: '#191970', dodgerblue: '#1E90FF', lightseagreen: '#20B2AA', forestgreen: '#228B22', seagreen: '#2E8B57', darkslategray: '#2F4F4F', limegreen: '#32CD32', mediumseagreen: '#3CB371', turquoise: '#40E0D0', royalblue: '#4169E1', steelblue: '#4682B4', darkslateblue: '#483D8B', mediumturquoise: '#48D1CC', indigo: '#4B0082', darkolivegreen: '#556B2F', cadetblue: '#5F9EA0', cornflowerblue: '#6495ED', mediumaquamarine: '#66CDAA', dimgray: '#696969', slateblue: '#6A5ACD', olivedrab: '#6B8E23', slategray: '#708090', lightslategray: '#778899', mediumslateblue: '#7B68EE', lawngreen: '#7CFC00', chartreuse: '#7FFF00', aquamarine: '#7FFFD4', maroon: '#800000', purple: '#800080', olive: '#808000', gray: '#808080', skyblue: '#87CEEB', lightskyblue: '#87CEFA', blueviolet: '#8A2BE2', darkred: '#8B0000', darkmagenta: '#8B008B', saddlebrown: '#8B4513', darkseagreen: '#8FBC8F', lightgreen: '#90EE90', mediumpurple: '#9370D8', darkviolet: '#9400D3', palegreen: '#98FB98', darkorchid: '#9932CC', yellowgreen: '#9ACD32', sienna: '#A0522D', brown: '#A52A2A', darkgray: '#A9A9A9', lightblue: '#ADD8E6', greenyellow: '#ADFF2F', paleturquoise: '#AFEEEE', lightsteelblue: '#B0C4DE', powderblue: '#B0E0E6', firebrick: '#B22222', darkgoldenrod: '#B8860B', mediumorchid: '#BA55D3', rosybrown: '#BC8F8F', darkkhaki: '#BDB76B', silver: '#C0C0C0', mediumvioletred: '#C71585', indianred: '#CD5C5C', peru: '#CD853F', chocolate: '#D2691E', tan: '#D2B48C', lightgrey: '#D3D3D3', palevioletred: '#D87093', thistle: '#D8BFD8', orchid: '#DA70D6', goldenrod: '#DAA520', crimson: '#DC143C', gainsboro: '#DCDCDC', plum: '#DDA0DD', burlywood: '#DEB887', lightcyan: '#E0FFFF', lavender: '#E6E6FA', darksalmon: '#E9967A', violet: '#EE82EE', palegoldenrod: '#EEE8AA', lightcoral: '#F08080', khaki: '#F0E68C', aliceblue: '#F0F8FF', honeydew: '#F0FFF0', azure: '#F0FFFF', sandybrown: '#F4A460', wheat: '#F5DEB3', beige: '#F5F5DC', whitesmoke: '#F5F5F5', mintcream: '#F5FFFA', ghostwhite: '#F8F8FF', salmon: '#FA8072', antiquewhite: '#FAEBD7', linen: '#FAF0E6', lightgoldenrodyellow: '#FAFAD2', oldlace: '#FDF5E6', red: '#FF0000', fuchsia: '#FF00FF', magenta: '#FF00FF', deeppink: '#FF1493', orangered: '#FF4500', tomato: '#FF6347', hotpink: '#FF69B4', coral: '#FF7F50', darkorange: '#FF8C00', lightsalmon: '#FFA07A', orange: '#FFA500', lightpink: '#FFB6C1', pink: '#FFC0CB', gold: '#FFD700', peachpuff: '#FFDAB9', navajowhite: '#FFDEAD', moccasin: '#FFE4B5', bisque: '#FFE4C4', mistyrose: '#FFE4E1', blanchedalmond: '#FFEBCD', papayawhip: '#FFEFD5', lavenderblush: '#FFF0F5', seashell: '#FFF5EE', cornsilk: '#FFF8DC', lemonchiffon: '#FFFACD', floralwhite: '#FFFAF0', snow: '#FFFAFA', yellow: '#FFFF00', lightyellow: '#FFFFE0', ivory: '#FFFFF0', white: '#FFFFFF' }; + if (typeof color === 'string') { + return htmlColors[color]; + } } - return { - timeStamp: now(), - pointers: pointers, - center: getCenter(pointers), - deltaX: input.deltaX, - deltaY: input.deltaY - }; - } - - /** - * get the center of all the pointers - * @param {Array} pointers - * @return {Object} center contains `x` and `y` properties - */ - function getCenter(pointers) { - var pointersLength = pointers.length; + /** + * Set the color of the colorPicker + * Supported formats: + * 'red' --> HTML color string + * '#ffffff' --> hex string + * 'rbg(255,255,255)' --> rgb string + * 'rgba(255,255,255,1.0)' --> rgba string + * {r:255,g:255,b:255} --> rgb object + * {r:255,g:255,b:255,a:1.0} --> rgba object + * @param color + * @param setInitial + */ - // no need to loop when only one touch - if (pointersLength === 1) { - return { - x: round(pointers[0].clientX), - y: round(pointers[0].clientY) - }; - } + }, { + key: 'setColor', + value: function setColor(color) { + var setInitial = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; - var x = 0, y = 0, i = 0; - while (i < pointersLength) { - x += pointers[i].clientX; - y += pointers[i].clientY; - i++; - } + if (color === 'none') { + return; + } - return { - x: round(x / pointersLength), - y: round(y / pointersLength) - }; - } + var rgba = void 0; - /** - * calculate the velocity between two points. unit is in px per ms. - * @param {Number} deltaTime - * @param {Number} x - * @param {Number} y - * @return {Object} velocity `x` and `y` - */ - function getVelocity(deltaTime, x, y) { - return { - x: x / deltaTime || 0, - y: y / deltaTime || 0 - }; - } + // if a html color shorthand is used, convert to hex + var htmlColor = this._isColorString(color); + if (htmlColor !== undefined) { + color = htmlColor; + } - /** - * get the direction between two points - * @param {Number} x - * @param {Number} y - * @return {Number} direction - */ - function getDirection(x, y) { - if (x === y) { - return DIRECTION_NONE; - } + // check format + if (util.isString(color) === true) { + if (util.isValidRGB(color) === true) { + var rgbaArray = color.substr(4).substr(0, color.length - 5).split(','); + rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 }; + } else if (util.isValidRGBA(color) === true) { + var _rgbaArray = color.substr(5).substr(0, color.length - 6).split(','); + rgba = { r: _rgbaArray[0], g: _rgbaArray[1], b: _rgbaArray[2], a: _rgbaArray[3] }; + } else if (util.isValidHex(color) === true) { + var rgbObj = util.hexToRGB(color); + rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 }; + } + } else { + if (color instanceof Object) { + if (color.r !== undefined && color.g !== undefined && color.b !== undefined) { + var alpha = color.a !== undefined ? color.a : '1.0'; + rgba = { r: color.r, g: color.g, b: color.b, a: alpha }; + } + } + } - if (abs(x) >= abs(y)) { - return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + // set color + if (rgba === undefined) { + throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: " + JSON.stringify(color)); + } else { + this._setColor(rgba, setInitial); + } } - return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; - } - /** - * calculate the absolute distance between two points - * @param {Object} p1 {x, y} - * @param {Object} p2 {x, y} - * @param {Array} [props] containing x and y keys - * @return {Number} distance - */ - function getDistance(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; + /** + * this shows the color picker. + * The hue circle is constructed once and stored. + */ - return Math.sqrt((x * x) + (y * y)); - } + }, { + key: 'show', + value: function show() { + if (this.closeCallback !== undefined) { + this.closeCallback(); + this.closeCallback = undefined; + } - /** - * calculate the angle between two coordinates - * @param {Object} p1 - * @param {Object} p2 - * @param {Array} [props] containing x and y keys - * @return {Number} angle - */ - function getAngle(p1, p2, props) { - if (!props) { - props = PROPS_XY; + this.applied = false; + this.frame.style.display = 'block'; + this._generateHueCircle(); } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - return Math.atan2(y, x) * 180 / Math.PI; - } - /** - * calculate the rotation degrees between two pointersets - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} rotation - */ - function getRotation(start, end) { - return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); - } + // ------------------------------------------ PRIVATE ----------------------------- // - /** - * calculate the scale factor between two pointersets - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} scale - */ - function getScale(start, end) { - return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); - } + /** + * Hide the picker. Is called by the cancel button. + * Optional boolean to store the previous color for easy access later on. + * @param storePrevious + * @private + */ - var MOUSE_INPUT_MAP = { - mousedown: INPUT_START, - mousemove: INPUT_MOVE, - mouseup: INPUT_END - }; + }, { + key: '_hide', + value: function _hide() { + var _this = this; - var MOUSE_ELEMENT_EVENTS = 'mousedown'; - var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + var storePrevious = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; - /** - * Mouse events input - * @constructor - * @extends Input - */ - function MouseInput() { - this.evEl = MOUSE_ELEMENT_EVENTS; - this.evWin = MOUSE_WINDOW_EVENTS; + // store the previous color for next time; + if (storePrevious === true) { + this.previousColor = util.extend({}, this.color); + } - this.allow = true; // used by Input.TouchMouse to disable mouse events - this.pressed = false; // mousedown state + if (this.applied === true) { + this.updateCallback(this.initialColor); + } - Input.apply(this, arguments); - } + this.frame.style.display = 'none'; + + // call the closing callback, restoring the onclick method. + // this is in a setTimeout because it will trigger the show again before the click is done. + setTimeout(function () { + if (_this.closeCallback !== undefined) { + _this.closeCallback(); + _this.closeCallback = undefined; + } + }, 0); + } - inherit(MouseInput, Input, { /** - * handle mouse events - * @param {Object} ev + * bound to the save button. Saves and hides. + * @private */ - handler: function MEhandler(ev) { - var eventType = MOUSE_INPUT_MAP[ev.type]; - // on start we want to have the left mouse button down - if (eventType & INPUT_START && ev.button === 0) { - this.pressed = true; - } + }, { + key: '_save', + value: function _save() { + this.updateCallback(this.color); + this.applied = false; + this._hide(); + } - if (eventType & INPUT_MOVE && ev.which !== 1) { - eventType = INPUT_END; - } + /** + * Bound to apply button. Saves but does not close. Is undone by the cancel button. + * @private + */ - // mouse must be down, and mouse events are allowed (see the TouchMouse input) - if (!this.pressed || !this.allow) { - return; - } + }, { + key: '_apply', + value: function _apply() { + this.applied = true; + this.updateCallback(this.color); + this._updatePicker(this.color); + } - if (eventType & INPUT_END) { - this.pressed = false; - } + /** + * load the color from the previous session. + * @private + */ - this.callback(this.manager, eventType, { - pointers: [ev], - changedPointers: [ev], - pointerType: INPUT_TYPE_MOUSE, - srcEvent: ev - }); + }, { + key: '_loadLast', + value: function _loadLast() { + if (this.previousColor !== undefined) { + this.setColor(this.previousColor, false); + } else { + alert("There is no last color to load..."); + } } - }); - var POINTER_INPUT_MAP = { - pointerdown: INPUT_START, - pointermove: INPUT_MOVE, - pointerup: INPUT_END, - pointercancel: INPUT_CANCEL, - pointerout: INPUT_CANCEL - }; + /** + * set the color, place the picker + * @param rgba + * @param setInitial + * @private + */ - // in IE10 the pointer types is defined as an enum - var IE10_POINTER_TYPE_ENUM = { - 2: INPUT_TYPE_TOUCH, - 3: INPUT_TYPE_PEN, - 4: INPUT_TYPE_MOUSE, - 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 - }; + }, { + key: '_setColor', + value: function _setColor(rgba) { + var setInitial = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; - var POINTER_ELEMENT_EVENTS = 'pointerdown'; - var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; + // store the initial color + if (setInitial === true) { + this.initialColor = util.extend({}, rgba); + } - // IE10 has prefixed support, and case-sensitive - if (window.MSPointerEvent && !window.PointerEvent) { - POINTER_ELEMENT_EVENTS = 'MSPointerDown'; - POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; - } + this.color = rgba; + var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - /** - * Pointer events input - * @constructor - * @extends Input - */ - function PointerEventInput() { - this.evEl = POINTER_ELEMENT_EVENTS; - this.evWin = POINTER_WINDOW_EVENTS; + var angleConvert = 2 * Math.PI; + var radius = this.r * hsv.s; + var x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h); + var y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h); - Input.apply(this, arguments); + this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px'; + this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - this.store = (this.manager.session.pointerEvents = []); - } + this._updatePicker(rgba); + } - inherit(PointerEventInput, Input, { /** - * handle mouse events - * @param {Object} ev + * bound to opacity control + * @param value + * @private */ - handler: function PEhandler(ev) { - var store = this.store; - var removePointer = false; - var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); - var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; - var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - - var isTouch = (pointerType == INPUT_TYPE_TOUCH); - - // get index of the event in the store - var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - - // start and mouse must be down - if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { - if (storeIndex < 0) { - store.push(ev); - storeIndex = store.length - 1; - } - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - removePointer = true; - } - - // it not found, so the pointer hasn't been down (so it's probably a hover) - if (storeIndex < 0) { - return; - } - - // update the event in the store - store[storeIndex] = ev; + }, { + key: '_setOpacity', + value: function _setOpacity(value) { + this.color.a = value / 100; + this._updatePicker(this.color); + } - this.callback(this.manager, eventType, { - pointers: store, - changedPointers: [ev], - pointerType: pointerType, - srcEvent: ev - }); + /** + * bound to brightness control + * @param value + * @private + */ - if (removePointer) { - // remove from the store - store.splice(storeIndex, 1); - } + }, { + key: '_setBrightness', + value: function _setBrightness(value) { + var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); + hsv.v = value / 100; + var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); + rgba['a'] = this.color.a; + this.color = rgba; + this._updatePicker(); } - }); - var SINGLE_TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL - }; + /** + * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing. + * @param rgba + * @private + */ - var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; - var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; + }, { + key: '_updatePicker', + value: function _updatePicker() { + var rgba = arguments.length <= 0 || arguments[0] === undefined ? this.color : arguments[0]; - /** - * Touch events input - * @constructor - * @extends Input - */ - function SingleTouchInput() { - this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; - this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; - this.started = false; + var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); + var ctx = this.colorPickerCanvas.getContext('2d'); + if (this.pixelRation === undefined) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - Input.apply(this, arguments); - } + // clear the canvas + var w = this.colorPickerCanvas.clientWidth; + var h = this.colorPickerCanvas.clientHeight; + ctx.clearRect(0, 0, w, h); - inherit(SingleTouchInput, Input, { - handler: function TEhandler(ev) { - var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; + ctx.putImageData(this.hueCircle, 0, 0); + ctx.fillStyle = 'rgba(0,0,0,' + (1 - hsv.v) + ')'; + ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); + ctx.fill(); - // should we handle the touch events? - if (type === INPUT_START) { - this.started = true; - } + this.brightnessRange.value = 100 * hsv.v; + this.opacityRange.value = 100 * rgba.a; - if (!this.started) { - return; - } + this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; + this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; + } - var touches = normalizeSingleTouches.call(this, ev, type); + /** + * used by create to set the size of the canvas. + * @private + */ - // when done, reset the started state - if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { - this.started = false; - } + }, { + key: '_setSize', + value: function _setSize() { + this.colorPickerCanvas.style.width = '100%'; + this.colorPickerCanvas.style.height = '100%'; - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); + this.colorPickerCanvas.width = 289 * this.pixelRatio; + this.colorPickerCanvas.height = 289 * this.pixelRatio; } - }); - /** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ - function normalizeSingleTouches(ev, type) { - var all = toArray(ev.touches); - var changed = toArray(ev.changedTouches); + /** + * create all dom elements + * TODO: cleanup, lots of similar dom elements + * @private + */ - if (type & (INPUT_END | INPUT_CANCEL)) { - all = uniqueArray(all.concat(changed), 'identifier', true); - } + }, { + key: '_create', + value: function _create() { + this.frame = document.createElement('div'); + this.frame.className = 'vis-color-picker'; - return [all, changed]; - } + this.colorPickerDiv = document.createElement('div'); + this.colorPickerSelector = document.createElement('div'); + this.colorPickerSelector.className = 'vis-selector'; + this.colorPickerDiv.appendChild(this.colorPickerSelector); - var TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL - }; + this.colorPickerCanvas = document.createElement('canvas'); + this.colorPickerDiv.appendChild(this.colorPickerCanvas); - var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; + if (!this.colorPickerCanvas.getContext) { + var noCanvas = document.createElement('DIV'); + noCanvas.style.color = 'red'; + noCanvas.style.fontWeight = 'bold'; + noCanvas.style.padding = '10px'; + noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; + this.colorPickerCanvas.appendChild(noCanvas); + } else { + var ctx = this.colorPickerCanvas.getContext("2d"); + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - /** - * Multi-user touch events input - * @constructor - * @extends Input - */ - function TouchInput() { - this.evTarget = TOUCH_TARGET_EVENTS; - this.targetIds = {}; + this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + } - Input.apply(this, arguments); - } + this.colorPickerDiv.className = 'vis-color'; - inherit(TouchInput, Input, { - handler: function MTEhandler(ev) { - var type = TOUCH_INPUT_MAP[ev.type]; - var touches = getTouches.call(this, ev, type); - if (!touches) { - return; - } + this.opacityDiv = document.createElement('div'); + this.opacityDiv.className = 'vis-opacity'; - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }); + this.brightnessDiv = document.createElement('div'); + this.brightnessDiv.className = 'vis-brightness'; - /** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ - function getTouches(ev, type) { - var allTouches = toArray(ev.touches); - var targetIds = this.targetIds; + this.arrowDiv = document.createElement('div'); + this.arrowDiv.className = 'vis-arrow'; - // when there is only one touch, the process can be simplified - if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { - targetIds[allTouches[0].identifier] = true; - return [allTouches, allTouches]; - } + this.opacityRange = document.createElement('input'); + try { + this.opacityRange.type = 'range'; // Not supported on IE9 + this.opacityRange.min = '0'; + this.opacityRange.max = '100'; + } catch (err) {} + this.opacityRange.value = '100'; + this.opacityRange.className = 'vis-range'; - var i, - targetTouches, - changedTouches = toArray(ev.changedTouches), - changedTargetTouches = [], - target = this.target; + this.brightnessRange = document.createElement('input'); + try { + this.brightnessRange.type = 'range'; // Not supported on IE9 + this.brightnessRange.min = '0'; + this.brightnessRange.max = '100'; + } catch (err) {} + this.brightnessRange.value = '100'; + this.brightnessRange.className = 'vis-range'; - // get target touches from touches - targetTouches = allTouches.filter(function(touch) { - return hasParent(touch.target, target); - }); + this.opacityDiv.appendChild(this.opacityRange); + this.brightnessDiv.appendChild(this.brightnessRange); - // collect touches - if (type === INPUT_START) { - i = 0; - while (i < targetTouches.length) { - targetIds[targetTouches[i].identifier] = true; - i++; - } - } + var me = this; + this.opacityRange.onchange = function () { + me._setOpacity(this.value); + }; + this.opacityRange.oninput = function () { + me._setOpacity(this.value); + }; + this.brightnessRange.onchange = function () { + me._setBrightness(this.value); + }; + this.brightnessRange.oninput = function () { + me._setBrightness(this.value); + }; - // filter changed touches to only contain touches that exist in the collected target ids - i = 0; - while (i < changedTouches.length) { - if (targetIds[changedTouches[i].identifier]) { - changedTargetTouches.push(changedTouches[i]); - } + this.brightnessLabel = document.createElement("div"); + this.brightnessLabel.className = "vis-label vis-brightness"; + this.brightnessLabel.innerHTML = 'brightness:'; - // cleanup removed touches - if (type & (INPUT_END | INPUT_CANCEL)) { - delete targetIds[changedTouches[i].identifier]; - } - i++; - } + this.opacityLabel = document.createElement("div"); + this.opacityLabel.className = "vis-label vis-opacity"; + this.opacityLabel.innerHTML = 'opacity:'; - if (!changedTargetTouches.length) { - return; - } + this.newColorDiv = document.createElement("div"); + this.newColorDiv.className = "vis-new-color"; + this.newColorDiv.innerHTML = 'new'; - return [ - // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' - uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), - changedTargetTouches - ]; - } + this.initialColorDiv = document.createElement("div"); + this.initialColorDiv.className = "vis-initial-color"; + this.initialColorDiv.innerHTML = 'initial'; - /** - * Combined touch and mouse input - * - * Touch has a higher priority then mouse, and while touching no mouse events are allowed. - * This because touch devices also emit mouse events while doing a touch. - * - * @constructor - * @extends Input - */ - function TouchMouseInput() { - Input.apply(this, arguments); + this.cancelButton = document.createElement("div"); + this.cancelButton.className = "vis-button vis-cancel"; + this.cancelButton.innerHTML = 'cancel'; + this.cancelButton.onclick = this._hide.bind(this, false); - var handler = bindFn(this.handler, this); - this.touch = new TouchInput(this.manager, handler); - this.mouse = new MouseInput(this.manager, handler); - } + this.applyButton = document.createElement("div"); + this.applyButton.className = "vis-button vis-apply"; + this.applyButton.innerHTML = 'apply'; + this.applyButton.onclick = this._apply.bind(this); - inherit(TouchMouseInput, Input, { - /** - * handle mouse and touch events - * @param {Hammer} manager - * @param {String} inputEvent - * @param {Object} inputData - */ - handler: function TMEhandler(manager, inputEvent, inputData) { - var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), - isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); + this.saveButton = document.createElement("div"); + this.saveButton.className = "vis-button vis-save"; + this.saveButton.innerHTML = 'save'; + this.saveButton.onclick = this._save.bind(this); - // when we're in a touch event, so block all upcoming mouse events - // most mobile browser also emit mouseevents, right after touchstart - if (isTouch) { - this.mouse.allow = false; - } else if (isMouse && !this.mouse.allow) { - return; - } + this.loadButton = document.createElement("div"); + this.loadButton.className = "vis-button vis-load"; + this.loadButton.innerHTML = 'load last'; + this.loadButton.onclick = this._loadLast.bind(this); - // reset the allowMouse when we're done - if (inputEvent & (INPUT_END | INPUT_CANCEL)) { - this.mouse.allow = true; - } + this.frame.appendChild(this.colorPickerDiv); + this.frame.appendChild(this.arrowDiv); + this.frame.appendChild(this.brightnessLabel); + this.frame.appendChild(this.brightnessDiv); + this.frame.appendChild(this.opacityLabel); + this.frame.appendChild(this.opacityDiv); + this.frame.appendChild(this.newColorDiv); + this.frame.appendChild(this.initialColorDiv); - this.callback(manager, inputEvent, inputData); - }, + this.frame.appendChild(this.cancelButton); + this.frame.appendChild(this.applyButton); + this.frame.appendChild(this.saveButton); + this.frame.appendChild(this.loadButton); + } /** - * remove the event listeners + * bind hammer to the color picker + * @private */ - destroy: function destroy() { - this.touch.destroy(); - this.mouse.destroy(); - } - }); - var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); - var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + }, { + key: '_bindHammer', + value: function _bindHammer() { + var _this2 = this; - // magical touchAction value - var TOUCH_ACTION_COMPUTE = 'compute'; - var TOUCH_ACTION_AUTO = 'auto'; - var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented - var TOUCH_ACTION_NONE = 'none'; - var TOUCH_ACTION_PAN_X = 'pan-x'; - var TOUCH_ACTION_PAN_Y = 'pan-y'; + this.drag = {}; + this.pinch = {}; + this.hammer = new Hammer(this.colorPickerCanvas); + this.hammer.get('pinch').set({ enable: true }); - /** - * Touch Action - * sets the touchAction property or uses the js alternative - * @param {Manager} manager - * @param {String} value - * @constructor - */ - function TouchAction(manager, value) { - this.manager = manager; - this.set(value); - } + hammerUtil.onTouch(this.hammer, function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('tap', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panstart', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panmove', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panend', function (event) { + _this2._moveSelector(event); + }); + } - TouchAction.prototype = { /** - * set the touchAction value on the element or enable the polyfill - * @param {String} value + * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown. + * @private */ - set: function(value) { - // find out the touch-action by the event handlers - if (value == TOUCH_ACTION_COMPUTE) { - value = this.compute(); + + }, { + key: '_generateHueCircle', + value: function _generateHueCircle() { + if (this.generated === false) { + var ctx = this.colorPickerCanvas.getContext('2d'); + if (this.pixelRation === undefined) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - if (NATIVE_TOUCH_ACTION && this.manager.element.style) { - this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + // clear the canvas + var w = this.colorPickerCanvas.clientWidth; + var h = this.colorPickerCanvas.clientHeight; + ctx.clearRect(0, 0, w, h); + + // draw hue circle + var x = void 0, + y = void 0, + hue = void 0, + sat = void 0; + this.centerCoordinates = { x: w * 0.5, y: h * 0.5 }; + this.r = 0.49 * w; + var angleConvert = 2 * Math.PI / 360; + var hfac = 1 / 360; + var sfac = 1 / this.r; + var rgb = void 0; + for (hue = 0; hue < 360; hue++) { + for (sat = 0; sat < this.r; sat++) { + x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue); + y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue); + rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1); + ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')'; + ctx.fillRect(x - 0.5, y - 0.5, 2, 2); + } } - this.actions = value.toLowerCase().trim(); - }, + ctx.strokeStyle = 'rgba(0,0,0,1)'; + ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); + ctx.stroke(); - /** - * just re-set the touchAction value - */ - update: function() { - this.set(this.manager.options.touchAction); - }, + this.hueCircle = ctx.getImageData(0, 0, w, h); + } + this.generated = true; + } /** - * compute the value for the touchAction property based on the recognizer's settings - * @returns {String} value + * move the selector. This is called by hammer functions. + * + * @param event + * @private */ - compute: function() { - var actions = []; - each(this.manager.recognizers, function(recognizer) { - if (boolOrFn(recognizer.options.enable, [recognizer])) { - actions = actions.concat(recognizer.getTouchAction()); - } - }); - return cleanTouchActions(actions.join(' ')); - }, - /** - * this method is called on each input cycle and provides the preventing of the browser behavior - * @param {Object} input - */ - preventDefaults: function(input) { - // not needed with native support for the touchAction property - if (NATIVE_TOUCH_ACTION) { - return; - } + }, { + key: '_moveSelector', + value: function _moveSelector(event) { + var rect = this.colorPickerDiv.getBoundingClientRect(); + var left = event.center.x - rect.left; + var top = event.center.y - rect.top; - var srcEvent = input.srcEvent; - var direction = input.offsetDirection; + var centerY = 0.5 * this.colorPickerDiv.clientHeight; + var centerX = 0.5 * this.colorPickerDiv.clientWidth; - // if the touch action did prevented once this session - if (this.manager.session.prevented) { - srcEvent.preventDefault(); - return; - } - - var actions = this.actions; - var hasNone = inStr(actions, TOUCH_ACTION_NONE); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - - if (hasNone) { - //do not prevent defaults if this is a tap gesture - - var isTapPointer = input.pointers.length === 1; - var isTapMovement = input.distance < 2; - var isTapTouchTime = input.deltaTime < 250; + var x = left - centerX; + var y = top - centerY; - if (isTapPointer && isTapMovement && isTapTouchTime) { - return; - } - } + var angle = Math.atan2(x, y); + var radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX); - if (hasPanX && hasPanY) { - // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent - return; - } + var newTop = Math.cos(angle) * radius + centerY; + var newLeft = Math.sin(angle) * radius + centerX; - if (hasNone || - (hasPanY && direction & DIRECTION_HORIZONTAL) || - (hasPanX && direction & DIRECTION_VERTICAL)) { - return this.preventSrc(srcEvent); - } - }, + this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px'; + this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px'; - /** - * call preventDefault to prevent the browser's default behavior (scrolling in most cases) - * @param {Object} srcEvent - */ - preventSrc: function(srcEvent) { - this.manager.session.prevented = true; - srcEvent.preventDefault(); - } - }; + // set color + var h = angle / (2 * Math.PI); + h = h < 0 ? h + 1 : h; + var s = radius / this.r; + var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); + hsv.h = h; + hsv.s = s; + var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); + rgba['a'] = this.color.a; + this.color = rgba; - /** - * when the touchActions are collected they are not a valid value, so we need to clean things up. * - * @param {String} actions - * @returns {*} - */ - function cleanTouchActions(actions) { - // none - if (inStr(actions, TOUCH_ACTION_NONE)) { - return TOUCH_ACTION_NONE; + // update previews + this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; + this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; } + }]); - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + return ColorPicker; + }(); - // if both pan-x and pan-y are set (different recognizers - // for different directions, e.g. horizontal pan but vertical swipe?) - // we need none (as otherwise with pan-x pan-y combined none of these - // recognizers will work, since the browser would handle all panning - if (hasPanX && hasPanY) { - return TOUCH_ACTION_NONE; - } + exports.default = ColorPicker; - // pan-x OR pan-y - if (hasPanX || hasPanY) { - return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; - } +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { - // manipulation - if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { - return TOUCH_ACTION_MANIPULATION; - } + 'use strict'; - return TOUCH_ACTION_AUTO; + // Only load hammer.js when in a browser environment + // (loading hammer.js in a node.js environment gives errors) + if (typeof window !== 'undefined') { + var propagating = __webpack_require__(23); + var Hammer = window['Hammer'] || __webpack_require__(24); + module.exports = propagating(Hammer, { + preventDefault: 'mouse' + }); + } else { + module.exports = function () { + throw Error('hammer.js is only available in a browser, not in node.js.'); + }; } - /** - * Recognizer flow explained; * - * All recognizers have the initial state of POSSIBLE when a input session starts. - * The definition of a input session is from the first input until the last input, with all it's movement in it. * - * Example session for mouse-input: mousedown -> mousemove -> mouseup - * - * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed - * which determines with state it should be. - * - * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to - * POSSIBLE to give it another change on the next cycle. - * - * Possible - * | - * +-----+---------------+ - * | | - * +-----+-----+ | - * | | | - * Failed Cancelled | - * +-------+------+ - * | | - * Recognized Began - * | - * Changed - * | - * Ended/Recognized - */ - var STATE_POSSIBLE = 1; - var STATE_BEGAN = 2; - var STATE_CHANGED = 4; - var STATE_ENDED = 8; - var STATE_RECOGNIZED = STATE_ENDED; - var STATE_CANCELLED = 16; - var STATE_FAILED = 32; +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { - /** - * Recognizer - * Every recognizer needs to extend from this class. - * @constructor - * @param {Object} options - */ - function Recognizer(options) { - this.options = assign({}, this.defaults, options || {}); + var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; - this.id = uniqueId(); + (function (factory) { + if (true) { + // AMD. Register as an anonymous module. + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + window.propagating = factory(); + } + }(function () { + var _firstTarget = null; // singleton, will contain the target element where the touch event started - this.manager = null; + /** + * Extend an Hammer.js instance with event propagation. + * + * Features: + * - Events emitted by hammer will propagate in order from child to parent + * elements. + * - Events are extended with a function `event.stopPropagation()` to stop + * propagation to parent elements. + * - An option `preventDefault` to stop all default browser behavior. + * + * Usage: + * var hammer = propagatingHammer(new Hammer(element)); + * var hammer = propagatingHammer(new Hammer(element), {preventDefault: true}); + * + * @param {Hammer.Manager} hammer An hammer instance. + * @param {Object} [options] Available options: + * - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`. + * Enforce preventing the default browser behavior. + * Cannot be set to `false`. + * @return {Hammer.Manager} Returns the same hammer instance with extended + * functionality + */ + return function propagating(hammer, options) { + var _options = options || { + preventDefault: false + }; - // default is enable true - this.options.enable = ifUndefined(this.options.enable, true); + if (hammer.Manager) { + // This looks like the Hammer constructor. + // Overload the constructors with our own. + var Hammer = hammer; - this.state = STATE_POSSIBLE; + var PropagatingHammer = function(element, options) { + var o = Object.create(_options); + if (options) Hammer.assign(o, options); + return propagating(new Hammer(element, o), o); + }; + Hammer.assign(PropagatingHammer, Hammer); - this.simultaneous = {}; - this.requireFail = []; - } + PropagatingHammer.Manager = function (element, options) { + var o = Object.create(_options); + if (options) Hammer.assign(o, options); + return propagating(new Hammer.Manager(element, o), o); + }; - Recognizer.prototype = { - /** - * @virtual - * @type {Object} - */ - defaults: {}, + return PropagatingHammer; + } - /** - * set options - * @param {Object} options - * @return {Recognizer} - */ - set: function(options) { - assign(this.options, options); + // create a wrapper object which will override the functions + // `on`, `off`, `destroy`, and `emit` of the hammer instance + var wrapper = Object.create(hammer); - // also update the touchAction, in case something changed about the directions/enabled state - this.manager && this.manager.touchAction.update(); - return this; - }, + // attach to DOM element + var element = hammer.element; - /** - * recognize simultaneous with an other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - recognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { - return this; - } + if(!element.hammer) element.hammer = []; + element.hammer.push(wrapper); - var simultaneous = this.simultaneous; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (!simultaneous[otherRecognizer.id]) { - simultaneous[otherRecognizer.id] = otherRecognizer; - otherRecognizer.recognizeWith(this); - } - return this; - }, + // register an event to catch the start of a gesture and store the + // target in a singleton + hammer.on('hammer.input', function (event) { + if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) { + event.preventDefault(); + } + if (event.isFirst) { + _firstTarget = event.target; + } + }); + + /** @type {Object.>} */ + wrapper._handlers = {}; /** - * drop the simultaneous link. it doesnt remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this + * Register a handler for one or multiple events + * @param {String} events A space separated string with events + * @param {function} handler A callback function, called as handler(event) + * @returns {Hammer.Manager} Returns the hammer instance */ - dropRecognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { - return this; + wrapper.on = function (events, handler) { + // register the handler + split(events).forEach(function (event) { + var _handlers = wrapper._handlers[event]; + if (!_handlers) { + wrapper._handlers[event] = _handlers = []; + + // register the static, propagated handler + hammer.on(event, propagatedHandler); } + _handlers.push(handler); + }); - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - delete this.simultaneous[otherRecognizer.id]; - return this; - }, + return wrapper; + }; /** - * recognizer can only run when an other is failing - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this + * Unregister a handler for one or multiple events + * @param {String} events A space separated string with events + * @param {function} [handler] Optional. The registered handler. If not + * provided, all handlers for given events + * are removed. + * @returns {Hammer.Manager} Returns the hammer instance */ - requireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { - return this; - } + wrapper.off = function (events, handler) { + // unregister the handler + split(events).forEach(function (event) { + var _handlers = wrapper._handlers[event]; + if (_handlers) { + _handlers = handler ? _handlers.filter(function (h) { + return h !== handler; + }) : []; - var requireFail = this.requireFail; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (inArray(requireFail, otherRecognizer) === -1) { - requireFail.push(otherRecognizer); - otherRecognizer.requireFailure(this); + if (_handlers.length > 0) { + wrapper._handlers[event] = _handlers; + } + else { + // remove static, propagated handler + hammer.off(event, propagatedHandler); + delete wrapper._handlers[event]; + } } - return this; - }, + }); + + return wrapper; + }; /** - * drop the requireFailure link. it does not remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this + * Emit to the event listeners + * @param {string} eventType + * @param {Event} event */ - dropRequireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { - return this; - } + wrapper.emit = function(eventType, event) { + _firstTarget = event.target; + hammer.emit(eventType, event); + }; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - var index = inArray(this.requireFail, otherRecognizer); - if (index > -1) { - this.requireFail.splice(index, 1); - } - return this; - }, + wrapper.destroy = function () { + // Detach from DOM element + var hammers = hammer.element.hammer; + var idx = hammers.indexOf(wrapper); + if(idx !== -1) hammers.splice(idx,1); + if(!hammers.length) delete hammer.element.hammer; - /** - * has require failures boolean - * @returns {boolean} - */ - hasRequireFailures: function() { - return this.requireFail.length > 0; - }, + // clear all handlers + wrapper._handlers = {}; - /** - * if the recognizer can recognize simultaneous with an other recognizer - * @param {Recognizer} otherRecognizer - * @returns {Boolean} - */ - canRecognizeWith: function(otherRecognizer) { - return !!this.simultaneous[otherRecognizer.id]; - }, + // call original hammer destroy + hammer.destroy(); + }; + + // split a string with space separated words + function split(events) { + return events.match(/[^ ]+/g); + } /** - * You should use `tryEmit` instead of `emit` directly to check - * that all the needed recognizers has failed before emitting. - * @param {Object} input + * A static event handler, applying event propagation. + * @param {Object} event */ - emit: function(input) { - var self = this; - var state = this.state; - - function emit(event) { - self.manager.emit(event, input); + function propagatedHandler(event) { + // let only a single hammer instance handle this event + if (event.type !== 'hammer.input') { + // it is possible that the same srcEvent is used with multiple hammer events, + // we keep track on which events are handled in an object _handled + if (!event.srcEvent._handled) { + event.srcEvent._handled = {}; } - // 'panstart' and 'panmove' - if (state < STATE_ENDED) { - emit(self.options.event + stateStr(state)); + if (event.srcEvent._handled[event.type]) { + return; } - - emit(self.options.event); // simple 'eventName' events - - if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...) - emit(input.additionalEvent); + else { + event.srcEvent._handled[event.type] = true; } + } - // panend and pancancel - if (state >= STATE_ENDED) { - emit(self.options.event + stateStr(state)); - } - }, + // attach a stopPropagation function to the event + var stopped = false; + event.stopPropagation = function () { + stopped = true; + }; - /** - * Check that all the require failure recognizers has failed, - * if true, it emits a gesture event, - * otherwise, setup the state to FAILED. - * @param {Object} input - */ - tryEmit: function(input) { - if (this.canEmit()) { - return this.emit(input); + //wrap the srcEvent's stopPropagation to also stop hammer propagation: + var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent); + if(typeof srcStop == "function") { + event.srcEvent.stopPropagation = function(){ + srcStop(); + event.stopPropagation(); } - // it's failing anyway - this.state = STATE_FAILED; - }, + } - /** - * can we emit? - * @returns {boolean} - */ - canEmit: function() { - var i = 0; - while (i < this.requireFail.length) { - if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { - return false; + // attach firstTarget property to the event + event.firstTarget = _firstTarget; + + // propagate over all elements (until stopped) + var elem = _firstTarget; + while (elem && !stopped) { + var elemHammer = elem.hammer; + if(elemHammer){ + var _handlers; + for(var k = 0; k < elemHammer.length; k++){ + _handlers = elemHammer[k]._handlers[event.type]; + if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) { + _handlers[i](event); } - i++; + } } - return true; - }, + elem = elem.parentNode; + } + } - /** - * update the recognizer - * @param {Object} inputData - */ - recognize: function(inputData) { - // make a new copy of the inputData - // so we can change the inputData without messing up the other recognizers - var inputDataClone = assign({}, inputData); + return wrapper; + }; + })); - // is is enabled and allow recognizing? - if (!boolOrFn(this.options.enable, [this, inputDataClone])) { - this.reset(); - this.state = STATE_FAILED; - return; - } - // reset when we've reached the end - if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { - this.state = STATE_POSSIBLE; - } +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { - this.state = this.process(inputDataClone); + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.6 - 2015-12-23 + * http://hammerjs.github.io/ + * + * Copyright (c) 2015 Jorik Tangelder; + * Licensed under the license */ + (function(window, document, exportName, undefined) { + 'use strict'; - // the recognizer has recognized a gesture - // so trigger an event - if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { - this.tryEmit(inputDataClone); - } - }, - - /** - * return the state of the recognizer - * the actual recognizing happens in this method - * @virtual - * @param {Object} inputData - * @returns {Const} STATE - */ - process: function(inputData) { }, // jshint ignore:line - - /** - * return the preferred touch-action - * @virtual - * @returns {Array} - */ - getTouchAction: function() { }, + var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; + var TEST_ELEMENT = document.createElement('div'); - /** - * called when the gesture isn't allowed to recognize - * like when another is being recognized or it is disabled - * @virtual - */ - reset: function() { } - }; + var TYPE_FUNCTION = 'function'; - /** - * get a usable string, used as event postfix - * @param {Const} state - * @returns {String} state - */ - function stateStr(state) { - if (state & STATE_CANCELLED) { - return 'cancel'; - } else if (state & STATE_ENDED) { - return 'end'; - } else if (state & STATE_CHANGED) { - return 'move'; - } else if (state & STATE_BEGAN) { - return 'start'; - } - return ''; - } + var round = Math.round; + var abs = Math.abs; + var now = Date.now; /** - * direction cons to string - * @param {Const} direction - * @returns {String} + * set a timeout with a given scope + * @param {Function} fn + * @param {Number} timeout + * @param {Object} context + * @returns {number} */ - function directionStr(direction) { - if (direction == DIRECTION_DOWN) { - return 'down'; - } else if (direction == DIRECTION_UP) { - return 'up'; - } else if (direction == DIRECTION_LEFT) { - return 'left'; - } else if (direction == DIRECTION_RIGHT) { - return 'right'; - } - return ''; + function setTimeoutContext(fn, timeout, context) { + return setTimeout(bindFn(fn, context), timeout); } /** - * get a recognizer by name if it is bound to a manager - * @param {Recognizer|String} otherRecognizer - * @param {Recognizer} recognizer - * @returns {Recognizer} + * if the argument is an array, we want to execute the fn on each entry + * if it aint an array we don't want to do a thing. + * this is used by all the methods that accept a single and array argument. + * @param {*|Array} arg + * @param {String} fn + * @param {Object} [context] + * @returns {Boolean} */ - function getRecognizerByNameIfManager(otherRecognizer, recognizer) { - var manager = recognizer.manager; - if (manager) { - return manager.get(otherRecognizer); + function invokeArrayArg(arg, fn, context) { + if (Array.isArray(arg)) { + each(arg, context[fn], context); + return true; } - return otherRecognizer; + return false; } /** - * This recognizer is just used as a base for the simple attribute recognizers. - * @constructor - * @extends Recognizer + * walk objects and arrays + * @param {Object} obj + * @param {Function} iterator + * @param {Object} context */ - function AttrRecognizer() { - Recognizer.apply(this, arguments); - } - - inherit(AttrRecognizer, Recognizer, { - /** - * @namespace - * @memberof AttrRecognizer - */ - defaults: { - /** - * @type {Number} - * @default 1 - */ - pointers: 1 - }, - - /** - * Used to check if it the recognizer receives valid input, like input.distance > 10. - * @memberof AttrRecognizer - * @param {Object} input - * @returns {Boolean} recognized - */ - attrTest: function(input) { - var optionPointers = this.options.pointers; - return optionPointers === 0 || input.pointers.length === optionPointers; - }, - - /** - * Process the input and return the state for the recognizer - * @memberof AttrRecognizer - * @param {Object} input - * @returns {*} State - */ - process: function(input) { - var state = this.state; - var eventType = input.eventType; + function each(obj, iterator, context) { + var i; - var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); - var isValid = this.attrTest(input); + if (!obj) { + return; + } - // on cancel input and we've recognized before, return STATE_CANCELLED - if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { - return state | STATE_CANCELLED; - } else if (isRecognized || isValid) { - if (eventType & INPUT_END) { - return state | STATE_ENDED; - } else if (!(state & STATE_BEGAN)) { - return STATE_BEGAN; - } - return state | STATE_CHANGED; + if (obj.forEach) { + obj.forEach(iterator, context); + } else if (obj.length !== undefined) { + i = 0; + while (i < obj.length) { + iterator.call(context, obj[i], i, obj); + i++; + } + } else { + for (i in obj) { + obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); } - return STATE_FAILED; } - }); + } /** - * Pan - * Recognized when the pointer is down and moved in the allowed direction. - * @constructor - * @extends AttrRecognizer + * wrap a method with a deprecation warning and stack trace + * @param {Function} method + * @param {String} name + * @param {String} message + * @returns {Function} A new function wrapping the supplied method. */ - function PanRecognizer() { - AttrRecognizer.apply(this, arguments); + function deprecate(method, name, message) { + var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n'; + return function() { + var e = new Error('get-stack-trace'); + var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '') + .replace(/^\s+at\s+/gm, '') + .replace(/^Object.\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; - this.pX = null; - this.pY = null; + var log = window.console && (window.console.warn || window.console.log); + if (log) { + log.call(window.console, deprecationMessage, stack); + } + return method.apply(this, arguments); + }; } - inherit(PanRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PanRecognizer - */ - defaults: { - event: 'pan', - threshold: 10, - pointers: 1, - direction: DIRECTION_ALL - }, - - getTouchAction: function() { - var direction = this.options.direction; - var actions = []; - if (direction & DIRECTION_HORIZONTAL) { - actions.push(TOUCH_ACTION_PAN_Y); - } - if (direction & DIRECTION_VERTICAL) { - actions.push(TOUCH_ACTION_PAN_X); + /** + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} target + * @param {...Object} objects_to_assign + * @returns {Object} target + */ + var assign; + if (typeof Object.assign !== 'function') { + assign = function assign(target) { + if (target === undefined || target === null) { + throw new TypeError('Cannot convert undefined or null to object'); } - return actions; - }, - - directionTest: function(input) { - var options = this.options; - var hasMoved = true; - var distance = input.distance; - var direction = input.direction; - var x = input.deltaX; - var y = input.deltaY; - // lock to axis? - if (!(direction & options.direction)) { - if (options.direction & DIRECTION_HORIZONTAL) { - direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - hasMoved = x != this.pX; - distance = Math.abs(input.deltaX); - } else { - direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; - hasMoved = y != this.pY; - distance = Math.abs(input.deltaY); + var output = Object(target); + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + if (source !== undefined && source !== null) { + for (var nextKey in source) { + if (source.hasOwnProperty(nextKey)) { + output[nextKey] = source[nextKey]; + } + } } } - input.direction = direction; - return hasMoved && distance > options.threshold && direction & options.direction; - }, - - attrTest: function(input) { - return AttrRecognizer.prototype.attrTest.call(this, input) && - (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); - }, - - emit: function(input) { - - this.pX = input.deltaX; - this.pY = input.deltaY; - - var direction = directionStr(input.direction); + return output; + }; + } else { + assign = Object.assign; + } - if (direction) { - input.additionalEvent = this.options.event + direction; + /** + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} dest + * @param {Object} src + * @param {Boolean=false} [merge] + * @returns {Object} dest + */ + var extend = deprecate(function extend(dest, src, merge) { + var keys = Object.keys(src); + var i = 0; + while (i < keys.length) { + if (!merge || (merge && dest[keys[i]] === undefined)) { + dest[keys[i]] = src[keys[i]]; } - this._super.emit.call(this, input); + i++; } - }); + return dest; + }, 'extend', 'Use `assign`.'); /** - * Pinch - * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). - * @constructor - * @extends AttrRecognizer + * merge the values from src in the dest. + * means that properties that exist in dest will not be overwritten by src + * @param {Object} dest + * @param {Object} src + * @returns {Object} dest */ - function PinchRecognizer() { - AttrRecognizer.apply(this, arguments); - } - - inherit(PinchRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'pinch', - threshold: 0, - pointers: 2 - }, + var merge = deprecate(function merge(dest, src) { + return extend(dest, src, true); + }, 'merge', 'Use `assign`.'); - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, + /** + * simple class inheritance + * @param {Function} child + * @param {Function} base + * @param {Object} [properties] + */ + function inherit(child, base, properties) { + var baseP = base.prototype, + childP; - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); - }, + childP = child.prototype = Object.create(baseP); + childP.constructor = child; + childP._super = baseP; - emit: function(input) { - if (input.scale !== 1) { - var inOut = input.scale < 1 ? 'in' : 'out'; - input.additionalEvent = this.options.event + inOut; - } - this._super.emit.call(this, input); + if (properties) { + assign(childP, properties); } - }); + } /** - * Press - * Recognized when the pointer is down for x ms without any movement. - * @constructor - * @extends Recognizer + * simple function bind + * @param {Function} fn + * @param {Object} context + * @returns {Function} */ - function PressRecognizer() { - Recognizer.apply(this, arguments); - - this._timer = null; - this._input = null; + function bindFn(fn, context) { + return function boundFn() { + return fn.apply(context, arguments); + }; } - inherit(PressRecognizer, Recognizer, { - /** - * @namespace - * @memberof PressRecognizer - */ - defaults: { - event: 'press', - pointers: 1, - time: 251, // minimal time of the pointer to be pressed - threshold: 9 // a minimal movement is ok, but keep it low - }, - - getTouchAction: function() { - return [TOUCH_ACTION_AUTO]; - }, - - process: function(input) { - var options = this.options; - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTime = input.deltaTime > options.time; - - this._input = input; - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { - this.reset(); - } else if (input.eventType & INPUT_START) { - this.reset(); - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.time, this); - } else if (input.eventType & INPUT_END) { - return STATE_RECOGNIZED; - } - return STATE_FAILED; - }, - - reset: function() { - clearTimeout(this._timer); - }, - - emit: function(input) { - if (this.state !== STATE_RECOGNIZED) { - return; - } - - if (input && (input.eventType & INPUT_END)) { - this.manager.emit(this.options.event + 'up', input); - } else { - this._input.timeStamp = now(); - this.manager.emit(this.options.event, this._input); - } + /** + * let a boolean value also be a function that must return a boolean + * this first item in args will be used as the context + * @param {Boolean|Function} val + * @param {Array} [args] + * @returns {Boolean} + */ + function boolOrFn(val, args) { + if (typeof val == TYPE_FUNCTION) { + return val.apply(args ? args[0] || undefined : undefined, args); } - }); + return val; + } /** - * Rotate - * Recognized when two or more pointer are moving in a circular motion. - * @constructor - * @extends AttrRecognizer + * use the val2 when val1 is undefined + * @param {*} val1 + * @param {*} val2 + * @returns {*} */ - function RotateRecognizer() { - AttrRecognizer.apply(this, arguments); + function ifUndefined(val1, val2) { + return (val1 === undefined) ? val2 : val1; } - inherit(RotateRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof RotateRecognizer - */ - defaults: { - event: 'rotate', - threshold: 0, - pointers: 2 - }, + /** + * addEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ + function addEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.addEventListener(type, handler, false); + }); + } - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, + /** + * removeEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ + function removeEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.removeEventListener(type, handler, false); + }); + } - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); + /** + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ + function hasParent(node, parent) { + while (node) { + if (node == parent) { + return true; + } + node = node.parentNode; } - }); + return false; + } /** - * Swipe - * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. - * @constructor - * @extends AttrRecognizer + * small indexOf wrapper + * @param {String} str + * @param {String} find + * @returns {Boolean} found */ - function SwipeRecognizer() { - AttrRecognizer.apply(this, arguments); + function inStr(str, find) { + return str.indexOf(find) > -1; } - inherit(SwipeRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof SwipeRecognizer - */ - defaults: { - event: 'swipe', - threshold: 10, - velocity: 0.3, - direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, - pointers: 1 - }, - - getTouchAction: function() { - return PanRecognizer.prototype.getTouchAction.call(this); - }, - - attrTest: function(input) { - var direction = this.options.direction; - var velocity; - - if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { - velocity = input.overallVelocity; - } else if (direction & DIRECTION_HORIZONTAL) { - velocity = input.overallVelocityX; - } else if (direction & DIRECTION_VERTICAL) { - velocity = input.overallVelocityY; - } - - return this._super.attrTest.call(this, input) && - direction & input.offsetDirection && - input.distance > this.options.threshold && - input.maxPointers == this.options.pointers && - abs(velocity) > this.options.velocity && input.eventType & INPUT_END; - }, + /** + * split string on whitespace + * @param {String} str + * @returns {Array} words + */ + function splitStr(str) { + return str.trim().split(/\s+/g); + } - emit: function(input) { - var direction = directionStr(input.offsetDirection); - if (direction) { - this.manager.emit(this.options.event + direction, input); + /** + * find if a array contains the object using indexOf or a simple polyFill + * @param {Array} src + * @param {String} find + * @param {String} [findByKey] + * @return {Boolean|Number} false when not found, or the index + */ + function inArray(src, find, findByKey) { + if (src.indexOf && !findByKey) { + return src.indexOf(find); + } else { + var i = 0; + while (i < src.length) { + if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { + return i; + } + i++; } - - this.manager.emit(this.options.event, input); + return -1; } - }); + } /** - * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur - * between the given interval and position. The delay option can be used to recognize multi-taps without firing - * a single tap. - * - * The eventData from the emitted event contains the property `tapCount`, which contains the amount of - * multi-taps being recognized. - * @constructor - * @extends Recognizer + * convert array-like objects to real arrays + * @param {Object} obj + * @returns {Array} */ - function TapRecognizer() { - Recognizer.apply(this, arguments); - - // previous time and center, - // used for tap counting - this.pTime = false; - this.pCenter = false; - - this._timer = null; - this._input = null; - this.count = 0; + function toArray(obj) { + return Array.prototype.slice.call(obj, 0); } - inherit(TapRecognizer, Recognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'tap', - pointers: 1, - taps: 1, - interval: 300, // max time between the multi-tap taps - time: 250, // max time of the pointer to be down (like finger on the screen) - threshold: 9, // a minimal movement is ok, but keep it low - posThreshold: 10 // a multi-tap can be a bit off the initial position - }, + /** + * unique array with objects based on a key (like 'id') or just by the array's value + * @param {Array} src [{id:1},{id:2},{id:1}] + * @param {String} [key] + * @param {Boolean} [sort=False] + * @returns {Array} [{id:1},{id:2}] + */ + function uniqueArray(src, key, sort) { + var results = []; + var values = []; + var i = 0; - getTouchAction: function() { - return [TOUCH_ACTION_MANIPULATION]; - }, + while (i < src.length) { + var val = key ? src[i][key] : src[i]; + if (inArray(values, val) < 0) { + results.push(src[i]); + } + values[i] = val; + i++; + } - process: function(input) { - var options = this.options; + if (sort) { + if (!key) { + results = results.sort(); + } else { + results = results.sort(function sortUniqueArray(a, b) { + return a[key] > b[key]; + }); + } + } - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTouchTime = input.deltaTime < options.time; + return results; + } - this.reset(); + /** + * get the prefixed property + * @param {Object} obj + * @param {String} property + * @returns {String|Undefined} prefixed + */ + function prefixed(obj, property) { + var prefix, prop; + var camelProp = property[0].toUpperCase() + property.slice(1); - if ((input.eventType & INPUT_START) && (this.count === 0)) { - return this.failTimeout(); + var i = 0; + while (i < VENDOR_PREFIXES.length) { + prefix = VENDOR_PREFIXES[i]; + prop = (prefix) ? prefix + camelProp : property; + + if (prop in obj) { + return prop; } + i++; + } + return undefined; + } - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (validMovement && validTouchTime && validPointers) { - if (input.eventType != INPUT_END) { - return this.failTimeout(); - } + /** + * get a unique id + * @returns {number} uniqueId + */ + var _uniqueId = 1; + function uniqueId() { + return _uniqueId++; + } - var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; - var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + /** + * get the window object of an element + * @param {HTMLElement} element + * @returns {DocumentView|Window} + */ + function getWindowForElement(element) { + var doc = element.ownerDocument || element; + return (doc.defaultView || doc.parentWindow || window); + } - this.pTime = input.timeStamp; - this.pCenter = input.center; + var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - if (!validMultiTap || !validInterval) { - this.count = 1; - } else { - this.count += 1; - } + var SUPPORT_TOUCH = ('ontouchstart' in window); + var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; + var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); - this._input = input; + var INPUT_TYPE_TOUCH = 'touch'; + var INPUT_TYPE_PEN = 'pen'; + var INPUT_TYPE_MOUSE = 'mouse'; + var INPUT_TYPE_KINECT = 'kinect'; - // if tap count matches we have recognized it, - // else it has began recognizing... - var tapCount = this.count % options.taps; - if (tapCount === 0) { - // no failing requirements, immediately trigger the tap event - // or wait as long as the multitap interval to trigger - if (!this.hasRequireFailures()) { - return STATE_RECOGNIZED; - } else { - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.interval, this); - return STATE_BEGAN; - } - } - } - return STATE_FAILED; - }, + var COMPUTE_INTERVAL = 25; - failTimeout: function() { - this._timer = setTimeoutContext(function() { - this.state = STATE_FAILED; - }, this.options.interval, this); - return STATE_FAILED; - }, + var INPUT_START = 1; + var INPUT_MOVE = 2; + var INPUT_END = 4; + var INPUT_CANCEL = 8; - reset: function() { - clearTimeout(this._timer); - }, + var DIRECTION_NONE = 1; + var DIRECTION_LEFT = 2; + var DIRECTION_RIGHT = 4; + var DIRECTION_UP = 8; + var DIRECTION_DOWN = 16; - emit: function() { - if (this.state == STATE_RECOGNIZED) { - this._input.tapCount = this.count; - this.manager.emit(this.options.event, this._input); - } - } - }); + var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; + var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; + var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + + var PROPS_XY = ['x', 'y']; + var PROPS_CLIENT_XY = ['clientX', 'clientY']; /** - * Simple way to create a manager with a default set of recognizers. - * @param {HTMLElement} element - * @param {Object} [options] + * create new input type manager + * @param {Manager} manager + * @param {Function} callback + * @returns {Input} * @constructor */ - function Hammer(element, options) { - options = options || {}; - options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); - return new Manager(element, options); - } + function Input(manager, callback) { + var self = this; + this.manager = manager; + this.callback = callback; + this.element = manager.element; + this.target = manager.options.inputTarget; - /** - * @const {string} - */ - Hammer.VERSION = '2.0.6'; + // smaller wrapper around the handler, for the scope and the enabled state of the manager, + // so when disabled the input events are completely bypassed. + this.domHandler = function(ev) { + if (boolOrFn(manager.options.enable, [manager])) { + self.handler(ev); + } + }; - /** - * default settings - * @namespace - */ - Hammer.defaults = { - /** - * set if DOM events are being triggered. - * But this is slower and unused by simple implementations, so disabled by default. - * @type {Boolean} - * @default false - */ - domEvents: false, + this.init(); - /** - * The value for the touchAction property/fallback. - * When set to `compute` it will magically set the correct value based on the added recognizers. - * @type {String} - * @default compute - */ - touchAction: TOUCH_ACTION_COMPUTE, + } + Input.prototype = { /** - * @type {Boolean} - * @default true + * should handle the inputEvent data and trigger the callback + * @virtual */ - enable: true, + handler: function() { }, /** - * EXPERIMENTAL FEATURE -- can be removed/changed - * Change the parent input target element. - * If Null, then it is being set the to main element. - * @type {Null|EventTarget} - * @default null + * bind the events */ - inputTarget: null, + init: function() { + this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + }, /** - * force an input class - * @type {Null|Function} - * @default null + * unbind the events */ - inputClass: null, + destroy: function() { + this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + } + }; - /** - * Default recognizer setup when calling `Hammer()` - * When creating a new Manager these will be skipped. - * @type {Array} - */ - preset: [ - // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] - [RotateRecognizer, {enable: false}], - [PinchRecognizer, {enable: false}, ['rotate']], - [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}], - [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']], - [TapRecognizer], - [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']], - [PressRecognizer] - ], + /** + * create new input type manager + * called by the Manager constructor + * @param {Hammer} manager + * @returns {Input} + */ + function createInputInstance(manager) { + var Type; + var inputClass = manager.options.inputClass; - /** - * Some CSS properties can be used to improve the working of Hammer. - * Add them to this method and they will be set when creating a new Manager. - * @namespace - */ - cssProps: { - /** - * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userSelect: 'none', + if (inputClass) { + Type = inputClass; + } else if (SUPPORT_POINTER_EVENTS) { + Type = PointerEventInput; + } else if (SUPPORT_ONLY_TOUCH) { + Type = TouchInput; + } else if (!SUPPORT_TOUCH) { + Type = MouseInput; + } else { + Type = TouchMouseInput; + } + return new (Type)(manager, inputHandler); + } - /** - * Disable the Windows Phone grippers when pressing an element. - * @type {String} - * @default 'none' - */ - touchSelect: 'none', + /** + * handle input events + * @param {Manager} manager + * @param {String} eventType + * @param {Object} input + */ + function inputHandler(manager, eventType, input) { + var pointersLen = input.pointers.length; + var changedPointersLen = input.changedPointers.length; + var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); + var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); - /** - * 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. - * @type {String} - * @default 'none' - */ - touchCallout: 'none', + input.isFirst = !!isFirst; + input.isFinal = !!isFinal; - /** - * Specifies whether zooming is enabled. Used by IE10> - * @type {String} - * @default 'none' - */ - contentZooming: 'none', + if (isFirst) { + manager.session = {}; + } - /** - * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userDrag: 'none', + // source event is the normalized value of the domEvents + // like 'touchstart, mouseup, pointerdown' + input.eventType = eventType; - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in iOS. This property obeys the alpha value, if specified. - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } - }; + // compute scale, rotation etc + computeInputData(manager, input); - var STOP = 1; - var FORCED_STOP = 2; + // emit secret event + manager.emit('hammer.input', input); + + manager.recognize(input); + manager.session.prevInput = input; + } /** - * Manager - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor + * extend the data with some usable properties like scale, rotate, velocity etc + * @param {Object} manager + * @param {Object} input */ - function Manager(element, options) { - this.options = assign({}, Hammer.defaults, options || {}); + function computeInputData(manager, input) { + var session = manager.session; + var pointers = input.pointers; + var pointersLength = pointers.length; - this.options.inputTarget = this.options.inputTarget || element; + // store the first input to calculate the distance and direction + if (!session.firstInput) { + session.firstInput = simpleCloneInputData(input); + } - this.handlers = {}; - this.session = {}; - this.recognizers = []; + // to compute scale and rotation we need to store the multiple touches + if (pointersLength > 1 && !session.firstMultiple) { + session.firstMultiple = simpleCloneInputData(input); + } else if (pointersLength === 1) { + session.firstMultiple = false; + } - this.element = element; - this.input = createInputInstance(this); - this.touchAction = new TouchAction(this, this.options.touchAction); + var firstInput = session.firstInput; + var firstMultiple = session.firstMultiple; + var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - toggleCssProps(this, true); + var center = input.center = getCenter(pointers); + input.timeStamp = now(); + input.deltaTime = input.timeStamp - firstInput.timeStamp; - each(this.options.recognizers, function(item) { - var recognizer = this.add(new (item[0])(item[1])); - item[2] && recognizer.recognizeWith(item[2]); - item[3] && recognizer.requireFailure(item[3]); - }, this); - } + input.angle = getAngle(offsetCenter, center); + input.distance = getDistance(offsetCenter, center); - Manager.prototype = { - /** - * set options - * @param {Object} options - * @returns {Manager} - */ - set: function(options) { - assign(this.options, options); + computeDeltaXY(session, input); + input.offsetDirection = getDirection(input.deltaX, input.deltaY); - // Options that need a little more setup - if (options.touchAction) { - this.touchAction.update(); - } - if (options.inputTarget) { - // Clean up existing event listeners and reinitialize - this.input.destroy(); - this.input.target = options.inputTarget; - this.input.init(); - } - return this; - }, - - /** - * stop recognizing for this session. - * This session will be discarded, when a new [input]start event is fired. - * When forced, the recognizer cycle is stopped immediately. - * @param {Boolean} [force] - */ - stop: function(force) { - this.session.stopped = force ? FORCED_STOP : STOP; - }, - - /** - * run the recognizers! - * called by the inputHandler function on every movement of the pointers (touches) - * it walks through all the recognizers and tries to detect the gesture that is being made - * @param {Object} inputData - */ - recognize: function(inputData) { - var session = this.session; - if (session.stopped) { - return; - } - - // run the touch-action polyfill - this.touchAction.preventDefaults(inputData); - - var recognizer; - var recognizers = this.recognizers; - - // this holds the recognizer that is being recognized. - // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED - // if no recognizer is detecting a thing, it is set to `null` - var curRecognizer = session.curRecognizer; - - // reset when the last recognizer is recognized - // or when we're in a new session - if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { - curRecognizer = session.curRecognizer = null; - } + var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); + input.overallVelocityX = overallVelocity.x; + input.overallVelocityY = overallVelocity.y; + input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y; - var i = 0; - while (i < recognizers.length) { - recognizer = recognizers[i]; + input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; + input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; - // find out if we are allowed try to recognize the input for this one. - // 1. allow if the session is NOT forced stopped (see the .stop() method) - // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one - // that is being recognized. - // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. - // this can be setup with the `recognizeWith()` method on the recognizer. - if (session.stopped !== FORCED_STOP && ( // 1 - !curRecognizer || recognizer == curRecognizer || // 2 - recognizer.canRecognizeWith(curRecognizer))) { // 3 - recognizer.recognize(inputData); - } else { - recognizer.reset(); - } + input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length > + session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers); - // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the - // current active recognizer. but only if we don't already have an active recognizer - if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { - curRecognizer = session.curRecognizer = recognizer; - } - i++; - } - }, + computeIntervalInputData(session, input); - /** - * get a recognizer by its event name. - * @param {Recognizer|String} recognizer - * @returns {Recognizer|Null} - */ - get: function(recognizer) { - if (recognizer instanceof Recognizer) { - return recognizer; - } + // find the correct target + var target = manager.element; + if (hasParent(input.srcEvent.target, target)) { + target = input.srcEvent.target; + } + input.target = target; + } - var recognizers = this.recognizers; - for (var i = 0; i < recognizers.length; i++) { - if (recognizers[i].options.event == recognizer) { - return recognizers[i]; - } - } - return null; - }, + function computeDeltaXY(session, input) { + var center = input.center; + var offset = session.offsetDelta || {}; + var prevDelta = session.prevDelta || {}; + var prevInput = session.prevInput || {}; - /** - * add a recognizer to the manager - * existing recognizers with the same event name will be removed - * @param {Recognizer} recognizer - * @returns {Recognizer|Manager} - */ - add: function(recognizer) { - if (invokeArrayArg(recognizer, 'add', this)) { - return this; - } + if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { + prevDelta = session.prevDelta = { + x: prevInput.deltaX || 0, + y: prevInput.deltaY || 0 + }; - // remove existing - var existing = this.get(recognizer.options.event); - if (existing) { - this.remove(existing); - } + offset = session.offsetDelta = { + x: center.x, + y: center.y + }; + } - this.recognizers.push(recognizer); - recognizer.manager = this; + input.deltaX = prevDelta.x + (center.x - offset.x); + input.deltaY = prevDelta.y + (center.y - offset.y); + } - this.touchAction.update(); - return recognizer; - }, + /** + * velocity is calculated every x ms + * @param {Object} session + * @param {Object} input + */ + function computeIntervalInputData(session, input) { + var last = session.lastInterval || input, + deltaTime = input.timeStamp - last.timeStamp, + velocity, velocityX, velocityY, direction; - /** - * remove a recognizer by name or instance - * @param {Recognizer|String} recognizer - * @returns {Manager} - */ - remove: function(recognizer) { - if (invokeArrayArg(recognizer, 'remove', this)) { - return this; - } + if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { + var deltaX = input.deltaX - last.deltaX; + var deltaY = input.deltaY - last.deltaY; - recognizer = this.get(recognizer); + var v = getVelocity(deltaTime, deltaX, deltaY); + velocityX = v.x; + velocityY = v.y; + velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; + direction = getDirection(deltaX, deltaY); - // let's make sure this recognizer exists - if (recognizer) { - var recognizers = this.recognizers; - var index = inArray(recognizers, recognizer); + session.lastInterval = input; + } else { + // use latest velocity info if it doesn't overtake a minimum period + velocity = last.velocity; + velocityX = last.velocityX; + velocityY = last.velocityY; + direction = last.direction; + } - if (index !== -1) { - recognizers.splice(index, 1); - this.touchAction.update(); - } - } + input.velocity = velocity; + input.velocityX = velocityX; + input.velocityY = velocityY; + input.direction = direction; + } - return this; - }, + /** + * create a simple clone from the input used for storage of firstInput and firstMultiple + * @param {Object} input + * @returns {Object} clonedInputData + */ + function simpleCloneInputData(input) { + // make a simple copy of the pointers because we will get a reference if we don't + // we only need clientXY for the calculations + var pointers = []; + var i = 0; + while (i < input.pointers.length) { + pointers[i] = { + clientX: round(input.pointers[i].clientX), + clientY: round(input.pointers[i].clientY) + }; + i++; + } - /** - * bind event - * @param {String} events - * @param {Function} handler - * @returns {EventEmitter} this - */ - on: function(events, handler) { - var handlers = this.handlers; - each(splitStr(events), function(event) { - handlers[event] = handlers[event] || []; - handlers[event].push(handler); - }); - return this; - }, + return { + timeStamp: now(), + pointers: pointers, + center: getCenter(pointers), + deltaX: input.deltaX, + deltaY: input.deltaY + }; + } - /** - * unbind event, leave emit blank to remove all handlers - * @param {String} events - * @param {Function} [handler] - * @returns {EventEmitter} this - */ - off: function(events, handler) { - var handlers = this.handlers; - each(splitStr(events), function(event) { - if (!handler) { - delete handlers[event]; - } else { - handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); - } - }); - return this; - }, + /** + * get the center of all the pointers + * @param {Array} pointers + * @return {Object} center contains `x` and `y` properties + */ + function getCenter(pointers) { + var pointersLength = pointers.length; - /** - * emit event to the listeners - * @param {String} event - * @param {Object} data - */ - emit: function(event, data) { - // we also want to trigger dom events - if (this.options.domEvents) { - triggerDomEvent(event, data); - } + // no need to loop when only one touch + if (pointersLength === 1) { + return { + x: round(pointers[0].clientX), + y: round(pointers[0].clientY) + }; + } - // no handlers, so skip it all - var handlers = this.handlers[event] && this.handlers[event].slice(); - if (!handlers || !handlers.length) { - return; - } + var x = 0, y = 0, i = 0; + while (i < pointersLength) { + x += pointers[i].clientX; + y += pointers[i].clientY; + i++; + } - data.type = event; - data.preventDefault = function() { - data.srcEvent.preventDefault(); - }; + return { + x: round(x / pointersLength), + y: round(y / pointersLength) + }; + } - var i = 0; - while (i < handlers.length) { - handlers[i](data); - i++; - } - }, + /** + * calculate the velocity between two points. unit is in px per ms. + * @param {Number} deltaTime + * @param {Number} x + * @param {Number} y + * @return {Object} velocity `x` and `y` + */ + function getVelocity(deltaTime, x, y) { + return { + x: x / deltaTime || 0, + y: y / deltaTime || 0 + }; + } - /** - * destroy the manager and unbinds all events - * it doesn't unbind dom events, that is the user own responsibility - */ - destroy: function() { - this.element && toggleCssProps(this, false); + /** + * get the direction between two points + * @param {Number} x + * @param {Number} y + * @return {Number} direction + */ + function getDirection(x, y) { + if (x === y) { + return DIRECTION_NONE; + } - this.handlers = {}; - this.session = {}; - this.input.destroy(); - this.element = null; + if (abs(x) >= abs(y)) { + return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; } - }; + return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; + } /** - * add/remove the css properties as defined in manager.options.cssProps - * @param {Manager} manager - * @param {Boolean} add + * calculate the absolute distance between two points + * @param {Object} p1 {x, y} + * @param {Object} p2 {x, y} + * @param {Array} [props] containing x and y keys + * @return {Number} distance */ - function toggleCssProps(manager, add) { - var element = manager.element; - if (!element.style) { - return; + function getDistance(p1, p2, props) { + if (!props) { + props = PROPS_XY; } - each(manager.options.cssProps, function(value, name) { - element.style[prefixed(element.style, name)] = add ? value : ''; - }); + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + + return Math.sqrt((x * x) + (y * y)); } /** - * trigger dom event - * @param {String} event - * @param {Object} data + * calculate the angle between two coordinates + * @param {Object} p1 + * @param {Object} p2 + * @param {Array} [props] containing x and y keys + * @return {Number} angle */ - function triggerDomEvent(event, data) { - var gestureEvent = document.createEvent('Event'); - gestureEvent.initEvent(event, true, true); - gestureEvent.gesture = data; - data.target.dispatchEvent(gestureEvent); + function getAngle(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + return Math.atan2(y, x) * 180 / Math.PI; } - assign(Hammer, { - INPUT_START: INPUT_START, - INPUT_MOVE: INPUT_MOVE, - INPUT_END: INPUT_END, - INPUT_CANCEL: INPUT_CANCEL, - - STATE_POSSIBLE: STATE_POSSIBLE, - STATE_BEGAN: STATE_BEGAN, - STATE_CHANGED: STATE_CHANGED, - STATE_ENDED: STATE_ENDED, - STATE_RECOGNIZED: STATE_RECOGNIZED, - STATE_CANCELLED: STATE_CANCELLED, - STATE_FAILED: STATE_FAILED, - - DIRECTION_NONE: DIRECTION_NONE, - DIRECTION_LEFT: DIRECTION_LEFT, - DIRECTION_RIGHT: DIRECTION_RIGHT, - DIRECTION_UP: DIRECTION_UP, - DIRECTION_DOWN: DIRECTION_DOWN, - DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, - DIRECTION_VERTICAL: DIRECTION_VERTICAL, - DIRECTION_ALL: DIRECTION_ALL, + /** + * calculate the rotation degrees between two pointersets + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} rotation + */ + function getRotation(start, end) { + return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); + } - Manager: Manager, - Input: Input, - TouchAction: TouchAction, + /** + * calculate the scale factor between two pointersets + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} scale + */ + function getScale(start, end) { + return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); + } - TouchInput: TouchInput, - MouseInput: MouseInput, - PointerEventInput: PointerEventInput, - TouchMouseInput: TouchMouseInput, - SingleTouchInput: SingleTouchInput, + var MOUSE_INPUT_MAP = { + mousedown: INPUT_START, + mousemove: INPUT_MOVE, + mouseup: INPUT_END + }; - Recognizer: Recognizer, - AttrRecognizer: AttrRecognizer, - Tap: TapRecognizer, - Pan: PanRecognizer, - Swipe: SwipeRecognizer, - Pinch: PinchRecognizer, - Rotate: RotateRecognizer, - Press: PressRecognizer, + var MOUSE_ELEMENT_EVENTS = 'mousedown'; + var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; - on: addEventListeners, - off: removeEventListeners, - each: each, - merge: merge, - extend: extend, - assign: assign, - inherit: inherit, - bindFn: bindFn, - prefixed: prefixed - }); + /** + * Mouse events input + * @constructor + * @extends Input + */ + function MouseInput() { + this.evEl = MOUSE_ELEMENT_EVENTS; + this.evWin = MOUSE_WINDOW_EVENTS; - // this prevents errors when Hammer is loaded in the presence of an AMD - // style loader but by script tag, not by the loader. - var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line - freeGlobal.Hammer = Hammer; + this.allow = true; // used by Input.TouchMouse to disable mouse events + this.pressed = false; // mousedown state - 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__)); - } else if (typeof module != 'undefined' && module.exports) { - module.exports = Hammer; - } else { - window[exportName] = Hammer; + Input.apply(this, arguments); } - })(window, document, 'Hammer'); + inherit(MouseInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function MEhandler(ev) { + var eventType = MOUSE_INPUT_MAP[ev.type]; + // on start we want to have the left mouse button down + if (eventType & INPUT_START && ev.button === 0) { + this.pressed = true; + } -/***/ }, -/* 23 */ -/***/ function(module, exports, __webpack_require__) { + if (eventType & INPUT_MOVE && ev.which !== 1) { + eventType = INPUT_END; + } - 'use strict'; + // mouse must be down, and mouse events are allowed (see the TouchMouse input) + if (!this.pressed || !this.allow) { + return; + } - var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(24); - var moment = __webpack_require__(2); - var Component = __webpack_require__(25); - var DateUtil = __webpack_require__(26); + if (eventType & INPUT_END) { + this.pressed = false; + } - /** - * @constructor Range - * A Range controls a numeric range with a start and end value. - * The Range adjusts the range based on mouse events or programmatic changes, - * and triggers events when the range is changing or has been changed. - * @param {{dom: Object, domProps: Object, emitter: Emitter}} body - * @param {Object} [options] See description at Range.setOptions - */ - function Range(body, options) { - var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); - this.start = now.clone().add(-3, 'days').valueOf(); // Number - this.end = now.clone().add(4, 'days').valueOf(); // Number - - this.body = body; - this.deltaDifference = 0; - this.scaleOffset = 0; - this.startToFront = false; - this.endToFront = true; - - // default options - this.defaultOptions = { - start: null, - end: null, - moment: moment, - direction: 'horizontal', // 'horizontal' or 'vertical' - moveable: true, - zoomable: true, - min: null, - max: null, - zoomMin: 10, // milliseconds - zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds - }; - this.options = util.extend({}, this.defaultOptions); - - this.props = { - touch: {} - }; - this.animationTimer = null; + this.callback(this.manager, eventType, { + pointers: [ev], + changedPointers: [ev], + pointerType: INPUT_TYPE_MOUSE, + srcEvent: ev + }); + } + }); - // drag listeners for dragging - this.body.emitter.on('panstart', this._onDragStart.bind(this)); - this.body.emitter.on('panmove', this._onDrag.bind(this)); - this.body.emitter.on('panend', this._onDragEnd.bind(this)); + var POINTER_INPUT_MAP = { + pointerdown: INPUT_START, + pointermove: INPUT_MOVE, + pointerup: INPUT_END, + pointercancel: INPUT_CANCEL, + pointerout: INPUT_CANCEL + }; - // mouse wheel for zooming - this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); + // in IE10 the pointer types is defined as an enum + var IE10_POINTER_TYPE_ENUM = { + 2: INPUT_TYPE_TOUCH, + 3: INPUT_TYPE_PEN, + 4: INPUT_TYPE_MOUSE, + 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 + }; - // pinch to zoom - this.body.emitter.on('touch', this._onTouch.bind(this)); - this.body.emitter.on('pinch', this._onPinch.bind(this)); + var POINTER_ELEMENT_EVENTS = 'pointerdown'; + var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; - this.setOptions(options); + // IE10 has prefixed support, and case-sensitive + if (window.MSPointerEvent && !window.PointerEvent) { + POINTER_ELEMENT_EVENTS = 'MSPointerDown'; + POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; } - Range.prototype = new Component(); - /** - * Set options for the range controller - * @param {Object} options Available options: - * {Number | Date | String} start Start date for the range - * {Number | Date | String} end End date for the range - * {Number} min Minimum value for start - * {Number} max Maximum value for end - * {Number} zoomMin Set a minimum value for - * (end - start). - * {Number} zoomMax Set a maximum value for - * (end - start). - * {Boolean} moveable Enable moving of the range - * by dragging. True by default - * {Boolean} zoomable Enable zooming of the range - * by pinching/scrolling. True by default + * Pointer events input + * @constructor + * @extends Input */ - Range.prototype.setOptions = function (options) { - if (options) { - // copy the options that we know - var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'moment', 'activate', 'hiddenDates', 'zoomKey']; - util.selectiveExtend(fields, this.options, options); + function PointerEventInput() { + this.evEl = POINTER_ELEMENT_EVENTS; + this.evWin = POINTER_WINDOW_EVENTS; - if ('start' in options || 'end' in options) { - // apply a new range. both start and end are optional - this.setRange(options.start, options.end); - } - } - }; + Input.apply(this, arguments); - /** - * Test whether direction has a valid value - * @param {String} direction 'horizontal' or 'vertical' - */ - function validateDirection(direction) { - if (direction != 'horizontal' && direction != 'vertical') { - throw new TypeError('Unknown direction "' + direction + '". ' + 'Choose "horizontal" or "vertical".'); - } + this.store = (this.manager.session.pointerEvents = []); } - /** - * Set a new start and end range - * @param {Date | Number | String} [start] - * @param {Date | Number | String} [end] - * @param {boolean | {duration: number, easingFunction: string}} [animation=false] - * If true (default), the range is animated - * smoothly to the new window. An object can be - * provided to specify duration and easing function. - * Default duration is 500 ms, and default easing - * function is 'easeInOutQuad'. - * @param {Boolean} [byUser=false] - * - */ - Range.prototype.setRange = function (start, end, animation, byUser) { - if (byUser !== true) { - byUser = false; - } - var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null; - var finalEnd = end != undefined ? util.convert(end, 'Date').valueOf() : null; - this._cancelAnimation(); + inherit(PointerEventInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function PEhandler(ev) { + var store = this.store; + var removePointer = false; - if (animation) { - // true or an Object - var me = this; - var initStart = this.start; - var initEnd = this.end; - var duration = typeof animation === 'object' && 'duration' in animation ? animation.duration : 500; - var easingName = typeof animation === 'object' && 'easingFunction' in animation ? animation.easingFunction : 'easeInOutQuad'; - var easingFunction = util.easingFunctions[easingName]; - if (!easingFunction) { - throw new Error('Unknown easing function ' + JSON.stringify(easingName) + '. ' + 'Choose from: ' + Object.keys(util.easingFunctions).join(', ')); - } + var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); + var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; + var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - var initTime = new Date().valueOf(); - var anyChanged = false; + var isTouch = (pointerType == INPUT_TYPE_TOUCH); - var next = function next() { - if (!me.props.touch.dragging) { - var now = new Date().valueOf(); - var time = now - initTime; - var ease = easingFunction(time / duration); - var done = time > duration; - var s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease; - var e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease; + // get index of the event in the store + var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - changed = me._applyRange(s, e); - DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates); - anyChanged = anyChanged || changed; - if (changed) { - me.body.emitter.emit('rangechange', { start: new Date(me.start), end: new Date(me.end), byUser: byUser }); + // start and mouse must be down + if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { + if (storeIndex < 0) { + store.push(ev); + storeIndex = store.length - 1; + } + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + removePointer = true; } - if (done) { - if (anyChanged) { - me.body.emitter.emit('rangechanged', { start: new Date(me.start), end: new Date(me.end), byUser: byUser }); - } - } else { - // animate with as high as possible frame rate, leave 20 ms in between - // each to prevent the browser from blocking - me.animationTimer = setTimeout(next, 20); + // it not found, so the pointer hasn't been down (so it's probably a hover) + if (storeIndex < 0) { + return; } - } - }; - return next(); - } else { - var changed = this._applyRange(finalStart, finalEnd); - DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); - if (changed) { - var params = { start: new Date(this.start), end: new Date(this.end), byUser: byUser }; - this.body.emitter.emit('rangechange', params); - this.body.emitter.emit('rangechanged', params); + // update the event in the store + store[storeIndex] = ev; + + this.callback(this.manager, eventType, { + pointers: store, + changedPointers: [ev], + pointerType: pointerType, + srcEvent: ev + }); + + if (removePointer) { + // remove from the store + store.splice(storeIndex, 1); + } } - } - }; + }); - /** - * Stop an animation - * @private - */ - Range.prototype._cancelAnimation = function () { - if (this.animationTimer) { - clearTimeout(this.animationTimer); - this.animationTimer = null; - } + var SINGLE_TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL }; + var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; + var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; + /** - * Set a new start and end range. This method is the same as setRange, but - * does not trigger a range change and range changed event, and it returns - * true when the range is changed - * @param {Number} [start] - * @param {Number} [end] - * @return {Boolean} changed - * @private + * Touch events input + * @constructor + * @extends Input */ - Range.prototype._applyRange = function (start, end) { - var newStart = start != null ? util.convert(start, 'Date').valueOf() : this.start, - newEnd = end != null ? util.convert(end, 'Date').valueOf() : this.end, - max = this.options.max != null ? util.convert(this.options.max, 'Date').valueOf() : null, - min = this.options.min != null ? util.convert(this.options.min, 'Date').valueOf() : null, - diff; + function SingleTouchInput() { + this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; + this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; + this.started = false; - // check for valid number - if (isNaN(newStart) || newStart === null) { - throw new Error('Invalid start "' + start + '"'); - } - if (isNaN(newEnd) || newEnd === null) { - throw new Error('Invalid end "' + end + '"'); - } + Input.apply(this, arguments); + } - // prevent start < end - if (newEnd < newStart) { - newEnd = newStart; - } + inherit(SingleTouchInput, Input, { + handler: function TEhandler(ev) { + var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; - // prevent start < min - if (min !== null) { - if (newStart < min) { - diff = min - newStart; - newStart += diff; - newEnd += diff; + // should we handle the touch events? + if (type === INPUT_START) { + this.started = true; + } - // prevent end > max - if (max != null) { - if (newEnd > max) { - newEnd = max; + if (!this.started) { + return; } - } - } - } - // prevent end > max - if (max !== null) { - if (newEnd > max) { - diff = newEnd - max; - newStart -= diff; - newEnd -= diff; + var touches = normalizeSingleTouches.call(this, ev, type); - // prevent start < min - if (min != null) { - if (newStart < min) { - newStart = min; + // when done, reset the started state + if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { + this.started = false; } - } - } - } - // prevent (end-start) < zoomMin - if (this.options.zoomMin !== null) { - var zoomMin = parseFloat(this.options.zoomMin); - if (zoomMin < 0) { - zoomMin = 0; - } - if (newEnd - newStart < zoomMin) { - if (this.end - this.start === zoomMin && newStart > this.start && newEnd < this.end) { - // ignore this action, we are already zoomed to the minimum - newStart = this.start; - newEnd = this.end; - } else { - // zoom to the minimum - diff = zoomMin - (newEnd - newStart); - newStart -= diff / 2; - newEnd += diff / 2; - } + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); } - } + }); - // prevent (end-start) > zoomMax - if (this.options.zoomMax !== null) { - var zoomMax = parseFloat(this.options.zoomMax); - if (zoomMax < 0) { - zoomMax = 0; - } + /** + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] + */ + function normalizeSingleTouches(ev, type) { + var all = toArray(ev.touches); + var changed = toArray(ev.changedTouches); - if (newEnd - newStart > zoomMax) { - if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) { - // ignore this action, we are already zoomed to the maximum - newStart = this.start; - newEnd = this.end; - } else { - // zoom to the maximum - diff = newEnd - newStart - zoomMax; - newStart += diff / 2; - newEnd -= diff / 2; - } + if (type & (INPUT_END | INPUT_CANCEL)) { + all = uniqueArray(all.concat(changed), 'identifier', true); } - } - - var changed = this.start != newStart || this.end != newEnd; - - // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range) - if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) { - this.body.emitter.emit('checkRangedItems'); - } - - this.start = newStart; - this.end = newEnd; - return changed; - }; - /** - * Retrieve the current range. - * @return {Object} An object with start and end properties - */ - Range.prototype.getRange = function () { - return { - start: this.start, - end: this.end - }; - }; + return [all, changed]; + } - /** - * Calculate the conversion offset and scale for current range, based on - * the provided width - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.prototype.conversion = function (width, totalHidden) { - return Range.conversion(this.start, this.end, width, totalHidden); + var TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL }; - /** - * Static method to calculate the conversion offset and scale for a range, - * based on the provided start, end, and width - * @param {Number} start - * @param {Number} end - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.conversion = function (start, end, width, totalHidden) { - if (totalHidden === undefined) { - totalHidden = 0; - } - if (width != 0 && end - start != 0) { - return { - offset: start, - scale: width / (end - start - totalHidden) - }; - } else { - return { - offset: 0, - scale: 1 - }; - } - }; + var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; /** - * Start dragging horizontally or vertically - * @param {Event} event - * @private + * Multi-user touch events input + * @constructor + * @extends Input */ - Range.prototype._onDragStart = function (event) { - this.deltaDifference = 0; - this.previousDelta = 0; - - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // only start dragging when the mouse is inside the current range - if (!this._isInsideRange(event)) return; + function TouchInput() { + this.evTarget = TOUCH_TARGET_EVENTS; + this.targetIds = {}; - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + Input.apply(this, arguments); + } - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.dragging = true; + inherit(TouchInput, Input, { + handler: function MTEhandler(ev) { + var type = TOUCH_INPUT_MAP[ev.type]; + var touches = getTouches.call(this, ev, type); + if (!touches) { + return; + } - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'move'; - } - }; + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } + }); /** - * Perform dragging operation - * @param {Event} event - * @private + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] */ - Range.prototype._onDrag = function (event) { - if (!this.props.touch.dragging) return; + function getTouches(ev, type) { + var allTouches = toArray(ev.touches); + var targetIds = this.targetIds; - // only allow dragging when configured as movable - if (!this.options.moveable) return; + // when there is only one touch, the process can be simplified + if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { + targetIds[allTouches[0].identifier] = true; + return [allTouches, allTouches]; + } - // TODO: this may be redundant in hammerjs2 - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + var i, + targetTouches, + changedTouches = toArray(ev.changedTouches), + changedTargetTouches = [], + target = this.target; - var direction = this.options.direction; - validateDirection(direction); - var delta = direction == 'horizontal' ? event.deltaX : event.deltaY; - delta -= this.deltaDifference; - var interval = this.props.touch.end - this.props.touch.start; + // get target touches from touches + targetTouches = allTouches.filter(function(touch) { + return hasParent(touch.target, target); + }); - // normalize dragging speed if cutout is in between. - var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - interval -= duration; + // collect touches + if (type === INPUT_START) { + i = 0; + while (i < targetTouches.length) { + targetIds[targetTouches[i].identifier] = true; + i++; + } + } - var width = direction == 'horizontal' ? this.body.domProps.center.width : this.body.domProps.center.height; - var diffRange = -delta / width * interval; - var newStart = this.props.touch.start + diffRange; - var newEnd = this.props.touch.end + diffRange; - - // snapping times away from hidden zones - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.deltaDifference += delta; - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this._onDrag(event); - return; - } + // filter changed touches to only contain touches that exist in the collected target ids + i = 0; + while (i < changedTouches.length) { + if (targetIds[changedTouches[i].identifier]) { + changedTargetTouches.push(changedTouches[i]); + } - this.previousDelta = delta; - this._applyRange(newStart, newEnd); + // cleanup removed touches + if (type & (INPUT_END | INPUT_CANCEL)) { + delete targetIds[changedTouches[i].identifier]; + } + i++; + } - var startDate = new Date(this.start); - var endDate = new Date(this.end); + if (!changedTargetTouches.length) { + return; + } - // fire a rangechange event - this.body.emitter.emit('rangechange', { - start: startDate, - end: endDate, - byUser: true - }); - }; + return [ + // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' + uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), + changedTargetTouches + ]; + } /** - * Stop dragging operation - * @param {event} event - * @private + * Combined touch and mouse input + * + * Touch has a higher priority then mouse, and while touching no mouse events are allowed. + * This because touch devices also emit mouse events while doing a touch. + * + * @constructor + * @extends Input */ - Range.prototype._onDragEnd = function (event) { - if (!this.props.touch.dragging) return; - - // only allow dragging when configured as movable - if (!this.options.moveable) return; - - // TODO: this may be redundant in hammerjs2 - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; - - this.props.touch.dragging = false; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'auto'; - } - - // fire a rangechanged event - this.body.emitter.emit('rangechanged', { - start: new Date(this.start), - end: new Date(this.end), - byUser: true - }); - }; + function TouchMouseInput() { + Input.apply(this, arguments); - /** - * Event handler for mouse wheel event, used to zoom - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {Event} event - * @private - */ - Range.prototype._onMouseWheel = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; + var handler = bindFn(this.handler, this); + this.touch = new TouchInput(this.manager, handler); + this.mouse = new MouseInput(this.manager, handler); + } - // only zoom when the mouse is inside the current range - if (!this._isInsideRange(event)) return; + inherit(TouchMouseInput, Input, { + /** + * handle mouse and touch events + * @param {Hammer} manager + * @param {String} inputEvent + * @param {Object} inputData + */ + handler: function TMEhandler(manager, inputEvent, inputData) { + var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), + isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); - // only zoom when the according key is pressed and the zoomKey option is set - if (this.options.zoomKey && !event[this.options.zoomKey]) return; + // when we're in a touch event, so block all upcoming mouse events + // most mobile browser also emit mouseevents, right after touchstart + if (isTouch) { + this.mouse.allow = false; + } else if (isMouse && !this.mouse.allow) { + return; + } - // retrieve delta - var delta = 0; - if (event.wheelDelta) { - /* IE/Opera. */ - delta = event.wheelDelta / 120; - } else if (event.detail) { - /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail / 3; - } + // reset the allowMouse when we're done + if (inputEvent & (INPUT_END | INPUT_CANCEL)) { + this.mouse.allow = true; + } - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - // perform the zoom action. Delta is normally 1 or -1 + this.callback(manager, inputEvent, inputData); + }, - // adjust a negative delta such that zooming in with delta 0.1 - // equals zooming out with a delta -0.1 - var scale; - if (delta < 0) { - scale = 1 - delta / 5; - } else { - scale = 1 / (1 + delta / 5); + /** + * remove the event listeners + */ + destroy: function destroy() { + this.touch.destroy(); + this.mouse.destroy(); } + }); - // calculate center, the date to zoom around - var pointer = getPointer({ x: event.clientX, y: event.clientY }, this.body.dom.center); - var pointerDate = this._pointerToDate(pointer); - - this.zoom(scale, pointerDate, delta); - } - - // Prevent default actions caused by mouse wheel - // (else the page and timeline both zoom and scroll) - event.preventDefault(); - }; + var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); + var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; - /** - * Start of a touch gesture - * @private - */ - Range.prototype._onTouch = function (event) { - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.allowDragging = true; - this.props.touch.center = null; - this.scaleOffset = 0; - this.deltaDifference = 0; - }; + // magical touchAction value + var TOUCH_ACTION_COMPUTE = 'compute'; + var TOUCH_ACTION_AUTO = 'auto'; + var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented + var TOUCH_ACTION_NONE = 'none'; + var TOUCH_ACTION_PAN_X = 'pan-x'; + var TOUCH_ACTION_PAN_Y = 'pan-y'; /** - * Handle pinch event - * @param {Event} event - * @private + * Touch Action + * sets the touchAction property or uses the js alternative + * @param {Manager} manager + * @param {String} value + * @constructor */ - Range.prototype._onPinch = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; + function TouchAction(manager, value) { + this.manager = manager; + this.set(value); + } - this.props.touch.allowDragging = false; + TouchAction.prototype = { + /** + * set the touchAction value on the element or enable the polyfill + * @param {String} value + */ + set: function(value) { + // find out the touch-action by the event handlers + if (value == TOUCH_ACTION_COMPUTE) { + value = this.compute(); + } - if (!this.props.touch.center) { - this.props.touch.center = getPointer(event.center, this.body.dom.center); - } + if (NATIVE_TOUCH_ACTION && this.manager.element.style) { + this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + } + this.actions = value.toLowerCase().trim(); + }, - var scale = 1 / (event.scale + this.scaleOffset); - var centerDate = this._pointerToDate(this.props.touch.center); + /** + * just re-set the touchAction value + */ + update: function() { + this.set(this.manager.options.touchAction); + }, - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + /** + * compute the value for the touchAction property based on the recognizer's settings + * @returns {String} value + */ + compute: function() { + var actions = []; + each(this.manager.recognizers, function(recognizer) { + if (boolOrFn(recognizer.options.enable, [recognizer])) { + actions = actions.concat(recognizer.getTouchAction()); + } + }); + return cleanTouchActions(actions.join(' ')); + }, - // calculate new start and end - var newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; - var newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; + /** + * this method is called on each input cycle and provides the preventing of the browser behavior + * @param {Object} input + */ + preventDefaults: function(input) { + // not needed with native support for the touchAction property + if (NATIVE_TOUCH_ACTION) { + return; + } - // snapping times away from hidden zones - this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times - this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times + var srcEvent = input.srcEvent; + var direction = input.offsetDirection; - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this.scaleOffset = 1 - event.scale; - newStart = safeStart; - newEnd = safeEnd; - } + // if the touch action did prevented once this session + if (this.manager.session.prevented) { + srcEvent.preventDefault(); + return; + } - this.setRange(newStart, newEnd, false, true); + var actions = this.actions; + var hasNone = inStr(actions, TOUCH_ACTION_NONE); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default - }; + if (hasNone) { + //do not prevent defaults if this is a tap gesture - /** - * Test whether the mouse from a mouse event is inside the visible window, - * between the current start and end date - * @param {Object} event - * @return {boolean} Returns true when inside the visible window - * @private - */ - Range.prototype._isInsideRange = function (event) { - // calculate the time where the mouse is, check whether inside - // and no scroll action should happen. - var clientX = event.center ? event.center.x : event.clientX; - var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer); - var time = this.body.util.toTime(x); + var isTapPointer = input.pointers.length === 1; + var isTapMovement = input.distance < 2; + var isTapTouchTime = input.deltaTime < 250; - return time >= this.start && time <= this.end; - }; + if (isTapPointer && isTapMovement && isTapTouchTime) { + return; + } + } - /** - * Helper function to calculate the center date for zooming - * @param {{x: Number, y: Number}} pointer - * @return {number} date - * @private - */ - Range.prototype._pointerToDate = function (pointer) { - var conversion; - var direction = this.options.direction; + if (hasPanX && hasPanY) { + // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent + return; + } - validateDirection(direction); + if (hasNone || + (hasPanY && direction & DIRECTION_HORIZONTAL) || + (hasPanX && direction & DIRECTION_VERTICAL)) { + return this.preventSrc(srcEvent); + } + }, - if (direction == 'horizontal') { - return this.body.util.toTime(pointer.x).valueOf(); - } else { - var height = this.body.domProps.center.height; - conversion = this.conversion(height); - return pointer.y / conversion.scale + conversion.offset; - } + /** + * call preventDefault to prevent the browser's default behavior (scrolling in most cases) + * @param {Object} srcEvent + */ + preventSrc: function(srcEvent) { + this.manager.session.prevented = true; + srcEvent.preventDefault(); + } }; /** - * Get the pointer location relative to the location of the dom element - * @param {{x: Number, y: Number}} touch - * @param {Element} element HTML DOM element - * @return {{x: Number, y: Number}} pointer - * @private - */ - function getPointer(touch, element) { - return { - x: touch.x - util.getAbsoluteLeft(element), - y: touch.y - util.getAbsoluteTop(element) - }; - } - - /** - * Zoom the range the given scale in or out. Start and end date will - * be adjusted, and the timeline will be redrawn. You can optionally give a - * date around which to zoom. - * For example, try scale = 0.9 or 1.1 - * @param {Number} scale Scaling factor. Values above 1 will zoom out, - * values below 1 will zoom in. - * @param {Number} [center] Value representing a date around which will - * be zoomed. + * when the touchActions are collected they are not a valid value, so we need to clean things up. * + * @param {String} actions + * @returns {*} */ - Range.prototype.zoom = function (scale, center, delta) { - // if centerDate is not provided, take it half between start Date and end Date - if (center == null) { - center = (this.start + this.end) / 2; - } + function cleanTouchActions(actions) { + // none + if (inStr(actions, TOUCH_ACTION_NONE)) { + return TOUCH_ACTION_NONE; + } - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - // calculate new start and end - var newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale; - var newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale; + // if both pan-x and pan-y are set (different recognizers + // for different directions, e.g. horizontal pan but vertical swipe?) + // we need none (as otherwise with pan-x pan-y combined none of these + // recognizers will work, since the browser would handle all panning + if (hasPanX && hasPanY) { + return TOUCH_ACTION_NONE; + } - // snapping times away from hidden zones - this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - newStart = safeStart; - newEnd = safeEnd; - } + // pan-x OR pan-y + if (hasPanX || hasPanY) { + return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + } - this.setRange(newStart, newEnd, false, true); + // manipulation + if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { + return TOUCH_ACTION_MANIPULATION; + } - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default - }; + return TOUCH_ACTION_AUTO; + } /** - * Move the range with a given delta to the left or right. Start and end - * value will be adjusted. For example, try delta = 0.1 or -0.1 - * @param {Number} delta Moving amount. Positive value will move right, - * negative value will move left + * Recognizer flow explained; * + * All recognizers have the initial state of POSSIBLE when a input session starts. + * The definition of a input session is from the first input until the last input, with all it's movement in it. * + * Example session for mouse-input: mousedown -> mousemove -> mouseup + * + * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed + * which determines with state it should be. + * + * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to + * POSSIBLE to give it another change on the next cycle. + * + * Possible + * | + * +-----+---------------+ + * | | + * +-----+-----+ | + * | | | + * Failed Cancelled | + * +-------+------+ + * | | + * Recognized Began + * | + * Changed + * | + * Ended/Recognized */ - Range.prototype.move = function (delta) { - // zoom start Date and end Date relative to the centerDate - var diff = this.end - this.start; - - // apply new values - var newStart = this.start + diff * delta; - var newEnd = this.end + diff * delta; - - // TODO: reckon with min and max range - - this.start = newStart; - this.end = newEnd; - }; + var STATE_POSSIBLE = 1; + var STATE_BEGAN = 2; + var STATE_CHANGED = 4; + var STATE_ENDED = 8; + var STATE_RECOGNIZED = STATE_ENDED; + var STATE_CANCELLED = 16; + var STATE_FAILED = 32; /** - * Move the range to a new center point - * @param {Number} moveTo New center point of the range + * Recognizer + * Every recognizer needs to extend from this class. + * @constructor + * @param {Object} options */ - Range.prototype.moveTo = function (moveTo) { - var center = (this.start + this.end) / 2; + function Recognizer(options) { + this.options = assign({}, this.defaults, options || {}); - var diff = center - moveTo; + this.id = uniqueId(); - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; + this.manager = null; - this.setRange(newStart, newEnd); - }; + // default is enable true + this.options.enable = ifUndefined(this.options.enable, true); - module.exports = Range; + this.state = STATE_POSSIBLE; -/***/ }, -/* 24 */ -/***/ function(module, exports, __webpack_require__) { + this.simultaneous = {}; + this.requireFail = []; + } - 'use strict'; + Recognizer.prototype = { + /** + * @virtual + * @type {Object} + */ + defaults: {}, - var Hammer = __webpack_require__(20); + /** + * set options + * @param {Object} options + * @return {Recognizer} + */ + set: function(options) { + assign(this.options, options); - /** - * Register a touch event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.onTouch = function (hammer, callback) { - callback.inputHandler = function (event) { - if (event.isFirst) { - callback(event); - } - }; + // also update the touchAction, in case something changed about the directions/enabled state + this.manager && this.manager.touchAction.update(); + return this; + }, - hammer.on('hammer.input', callback.inputHandler); - }; + /** + * recognize simultaneous with an other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + recognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { + return this; + } - /** - * Register a release event, taking place after a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.onRelease = function (hammer, callback) { - callback.inputHandler = function (event) { - if (event.isFinal) { - callback(event); - } - }; + var simultaneous = this.simultaneous; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (!simultaneous[otherRecognizer.id]) { + simultaneous[otherRecognizer.id] = otherRecognizer; + otherRecognizer.recognizeWith(this); + } + return this; + }, - return hammer.on('hammer.input', callback.inputHandler); - }; + /** + * drop the simultaneous link. it doesnt remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRecognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { + return this; + } - /** - * Unregister a touch event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.offTouch = function (hammer, callback) { - hammer.off('hammer.input', callback.inputHandler); - }; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + delete this.simultaneous[otherRecognizer.id]; + return this; + }, - /** - * Unregister a release event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.offRelease = exports.offTouch; + /** + * recognizer can only run when an other is failing + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + requireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { + return this; + } -/***/ }, -/* 25 */ -/***/ function(module, exports) { + var requireFail = this.requireFail; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (inArray(requireFail, otherRecognizer) === -1) { + requireFail.push(otherRecognizer); + otherRecognizer.requireFailure(this); + } + return this; + }, - /** - * Prototype for visual components - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] - * @param {Object} [options] - */ - "use strict"; + /** + * drop the requireFailure link. it does not remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRequireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { + return this; + } - function Component(body, options) { - this.options = null; - this.props = null; - } + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + var index = inArray(this.requireFail, otherRecognizer); + if (index > -1) { + this.requireFail.splice(index, 1); + } + return this; + }, - /** - * Set options for the component. The new options will be merged into the - * current options. - * @param {Object} options - */ - Component.prototype.setOptions = function (options) { - if (options) { - util.extend(this.options, options); - } + /** + * has require failures boolean + * @returns {boolean} + */ + hasRequireFailures: function() { + return this.requireFail.length > 0; + }, + + /** + * if the recognizer can recognize simultaneous with an other recognizer + * @param {Recognizer} otherRecognizer + * @returns {Boolean} + */ + canRecognizeWith: function(otherRecognizer) { + return !!this.simultaneous[otherRecognizer.id]; + }, + + /** + * You should use `tryEmit` instead of `emit` directly to check + * that all the needed recognizers has failed before emitting. + * @param {Object} input + */ + emit: function(input) { + var self = this; + var state = this.state; + + function emit(event) { + self.manager.emit(event, input); + } + + // 'panstart' and 'panmove' + if (state < STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + + emit(self.options.event); // simple 'eventName' events + + if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...) + emit(input.additionalEvent); + } + + // panend and pancancel + if (state >= STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + }, + + /** + * Check that all the require failure recognizers has failed, + * if true, it emits a gesture event, + * otherwise, setup the state to FAILED. + * @param {Object} input + */ + tryEmit: function(input) { + if (this.canEmit()) { + return this.emit(input); + } + // it's failing anyway + this.state = STATE_FAILED; + }, + + /** + * can we emit? + * @returns {boolean} + */ + canEmit: function() { + var i = 0; + while (i < this.requireFail.length) { + if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { + return false; + } + i++; + } + return true; + }, + + /** + * update the recognizer + * @param {Object} inputData + */ + recognize: function(inputData) { + // make a new copy of the inputData + // so we can change the inputData without messing up the other recognizers + var inputDataClone = assign({}, inputData); + + // is is enabled and allow recognizing? + if (!boolOrFn(this.options.enable, [this, inputDataClone])) { + this.reset(); + this.state = STATE_FAILED; + return; + } + + // reset when we've reached the end + if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { + this.state = STATE_POSSIBLE; + } + + this.state = this.process(inputDataClone); + + // the recognizer has recognized a gesture + // so trigger an event + if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { + this.tryEmit(inputDataClone); + } + }, + + /** + * return the state of the recognizer + * the actual recognizing happens in this method + * @virtual + * @param {Object} inputData + * @returns {Const} STATE + */ + process: function(inputData) { }, // jshint ignore:line + + /** + * return the preferred touch-action + * @virtual + * @returns {Array} + */ + getTouchAction: function() { }, + + /** + * called when the gesture isn't allowed to recognize + * like when another is being recognized or it is disabled + * @virtual + */ + reset: function() { } }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * get a usable string, used as event postfix + * @param {Const} state + * @returns {String} state */ - Component.prototype.redraw = function () { - // should be implemented by the component - return false; - }; + function stateStr(state) { + if (state & STATE_CANCELLED) { + return 'cancel'; + } else if (state & STATE_ENDED) { + return 'end'; + } else if (state & STATE_CHANGED) { + return 'move'; + } else if (state & STATE_BEGAN) { + return 'start'; + } + return ''; + } /** - * Destroy the component. Cleanup DOM and event listeners + * direction cons to string + * @param {Const} direction + * @returns {String} */ - Component.prototype.destroy = function () { - // should be implemented by the component - }; + function directionStr(direction) { + if (direction == DIRECTION_DOWN) { + return 'down'; + } else if (direction == DIRECTION_UP) { + return 'up'; + } else if (direction == DIRECTION_LEFT) { + return 'left'; + } else if (direction == DIRECTION_RIGHT) { + return 'right'; + } + return ''; + } /** - * Test whether the component is resized since the last time _isResized() was - * called. - * @return {Boolean} Returns true if the component is resized - * @protected + * get a recognizer by name if it is bound to a manager + * @param {Recognizer|String} otherRecognizer + * @param {Recognizer} recognizer + * @returns {Recognizer} */ - Component.prototype._isResized = function () { - var resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height; - - this.props._previousWidth = this.props.width; - this.props._previousHeight = this.props.height; + function getRecognizerByNameIfManager(otherRecognizer, recognizer) { + var manager = recognizer.manager; + if (manager) { + return manager.get(otherRecognizer); + } + return otherRecognizer; + } - return resized; - }; + /** + * This recognizer is just used as a base for the simple attribute recognizers. + * @constructor + * @extends Recognizer + */ + function AttrRecognizer() { + Recognizer.apply(this, arguments); + } - module.exports = Component; + inherit(AttrRecognizer, Recognizer, { + /** + * @namespace + * @memberof AttrRecognizer + */ + defaults: { + /** + * @type {Number} + * @default 1 + */ + pointers: 1 + }, -/***/ }, -/* 26 */ -/***/ function(module, exports) { + /** + * Used to check if it the recognizer receives valid input, like input.distance > 10. + * @memberof AttrRecognizer + * @param {Object} input + * @returns {Boolean} recognized + */ + attrTest: function(input) { + var optionPointers = this.options.pointers; + return optionPointers === 0 || input.pointers.length === optionPointers; + }, - - /** - * used in Core to convert the options into a volatile variable - * - * @param {function} moment - * @param {Object} body - * @param {Array | Object} hiddenDates - */ - "use strict"; + /** + * Process the input and return the state for the recognizer + * @memberof AttrRecognizer + * @param {Object} input + * @returns {*} State + */ + process: function(input) { + var state = this.state; + var eventType = input.eventType; - exports.convertHiddenOptions = function (moment, body, hiddenDates) { - if (hiddenDates && !Array.isArray(hiddenDates)) { - return exports.convertHiddenOptions(moment, body, [hiddenDates]); - } + var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); + var isValid = this.attrTest(input); - body.hiddenDates = []; - if (hiddenDates) { - if (Array.isArray(hiddenDates) == true) { - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat === undefined) { - var dateItem = {}; - dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); - dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); - body.hiddenDates.push(dateItem); + // on cancel input and we've recognized before, return STATE_CANCELLED + if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { + return state | STATE_CANCELLED; + } else if (isRecognized || isValid) { + if (eventType & INPUT_END) { + return state | STATE_ENDED; + } else if (!(state & STATE_BEGAN)) { + return STATE_BEGAN; + } + return state | STATE_CHANGED; } - } - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time + return STATE_FAILED; } - } - }; + }); /** - * create new entrees for the repeating hidden dates - * @param {function} moment - * @param {Object} body - * @param {Array | Object} hiddenDates + * Pan + * Recognized when the pointer is down and moved in the allowed direction. + * @constructor + * @extends AttrRecognizer */ - exports.updateHiddenDates = function (moment, body, hiddenDates) { - if (hiddenDates && !Array.isArray(hiddenDates)) { - return exports.updateHiddenDates(moment, body, [hiddenDates]); - } - - if (hiddenDates && body.domProps.centerContainer.width !== undefined) { - exports.convertHiddenOptions(moment, body, hiddenDates); - - var start = moment(body.range.start); - var end = moment(body.range.end); + function PanRecognizer() { + AttrRecognizer.apply(this, arguments); - var totalRange = body.range.end - body.range.start; - var pixelTime = totalRange / body.domProps.centerContainer.width; + this.pX = null; + this.pY = null; + } - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat !== undefined) { - var startDate = moment(hiddenDates[i].start); - var endDate = moment(hiddenDates[i].end); + inherit(PanRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PanRecognizer + */ + defaults: { + event: 'pan', + threshold: 10, + pointers: 1, + direction: DIRECTION_ALL + }, - if (startDate._d == "Invalid Date") { - throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); + getTouchAction: function() { + var direction = this.options.direction; + var actions = []; + if (direction & DIRECTION_HORIZONTAL) { + actions.push(TOUCH_ACTION_PAN_Y); } - if (endDate._d == "Invalid Date") { - throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); + if (direction & DIRECTION_VERTICAL) { + actions.push(TOUCH_ACTION_PAN_X); } + return actions; + }, - var duration = endDate - startDate; - if (duration >= 4 * pixelTime) { - - var offset = 0; - var runUntil = end.clone(); - switch (hiddenDates[i].repeat) { - case "daily": - // case of time - if (startDate.day() != endDate.day()) { - offset = 1; - } - startDate.dayOfYear(start.dayOfYear()); - startDate.year(start.year()); - startDate.subtract(7, 'days'); + directionTest: function(input) { + var options = this.options; + var hasMoved = true; + var distance = input.distance; + var direction = input.direction; + var x = input.deltaX; + var y = input.deltaY; - endDate.dayOfYear(start.dayOfYear()); - endDate.year(start.year()); - endDate.subtract(7 - offset, 'days'); + // lock to axis? + if (!(direction & options.direction)) { + if (options.direction & DIRECTION_HORIZONTAL) { + direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + hasMoved = x != this.pX; + distance = Math.abs(input.deltaX); + } else { + direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; + hasMoved = y != this.pY; + distance = Math.abs(input.deltaY); + } + } + input.direction = direction; + return hasMoved && distance > options.threshold && direction & options.direction; + }, - runUntil.add(1, 'weeks'); - break; - case "weekly": - var dayOffset = endDate.diff(startDate, 'days'); - var day = startDate.day(); + attrTest: function(input) { + return AttrRecognizer.prototype.attrTest.call(this, input) && + (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); + }, - // set the start date to the range.start - startDate.date(start.date()); - startDate.month(start.month()); - startDate.year(start.year()); - endDate = startDate.clone(); + emit: function(input) { - // force - startDate.day(day); - endDate.day(day); - endDate.add(dayOffset, 'days'); + this.pX = input.deltaX; + this.pY = input.deltaY; - startDate.subtract(1, 'weeks'); - endDate.subtract(1, 'weeks'); + var direction = directionStr(input.direction); - runUntil.add(1, 'weeks'); - break; - case "monthly": - if (startDate.month() != endDate.month()) { - offset = 1; - } - startDate.month(start.month()); - startDate.year(start.year()); - startDate.subtract(1, 'months'); - - endDate.month(start.month()); - endDate.year(start.year()); - endDate.subtract(1, 'months'); - endDate.add(offset, 'months'); - - runUntil.add(1, 'months'); - break; - case "yearly": - if (startDate.year() != endDate.year()) { - offset = 1; - } - startDate.year(start.year()); - startDate.subtract(1, 'years'); - endDate.year(start.year()); - endDate.subtract(1, 'years'); - endDate.add(offset, 'years'); - - runUntil.add(1, 'years'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - while (startDate < runUntil) { - body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); - switch (hiddenDates[i].repeat) { - case "daily": - startDate.add(1, 'days'); - endDate.add(1, 'days'); - break; - case "weekly": - startDate.add(1, 'weeks'); - endDate.add(1, 'weeks'); - break; - case "monthly": - startDate.add(1, 'months'); - endDate.add(1, 'months'); - break; - case "yearly": - startDate.add(1, 'y'); - endDate.add(1, 'y'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - } - body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); + if (direction) { + input.additionalEvent = this.options.event + direction; } - } - } - // remove duplicates, merge where possible - exports.removeDuplicates(body); - // ensure the new positions are not on hidden dates - var startHidden = exports.isHidden(body.range.start, body.hiddenDates); - var endHidden = exports.isHidden(body.range.end, body.hiddenDates); - var rangeStart = body.range.start; - var rangeEnd = body.range.end; - if (startHidden.hidden == true) { - rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1; - } - if (endHidden.hidden == true) { - rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1; - } - if (startHidden.hidden == true || endHidden.hidden == true) { - body.range._applyRange(rangeStart, rangeEnd); + this._super.emit.call(this, input); } - } - }; + }); /** - * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. - * Scales with N^2 - * @param body + * Pinch + * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). + * @constructor + * @extends AttrRecognizer */ - exports.removeDuplicates = function (body) { - var hiddenDates = body.hiddenDates; - var safeDates = []; - for (var i = 0; i < hiddenDates.length; i++) { - for (var j = 0; j < hiddenDates.length; j++) { - if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { - // j inside i - if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[j].remove = true; - } - // j start inside i - else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { - hiddenDates[i].end = hiddenDates[j].end; - hiddenDates[j].remove = true; - } - // j end inside i - else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[i].start = hiddenDates[j].start; - hiddenDates[j].remove = true; - } - } - } - } + function PinchRecognizer() { + AttrRecognizer.apply(this, arguments); + } - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].remove !== true) { - safeDates.push(hiddenDates[i]); - } - } + inherit(PinchRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'pinch', + threshold: 0, + pointers: 2 + }, - body.hiddenDates = safeDates; - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - }; + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, - exports.printDates = function (dates) { - for (var i = 0; i < dates.length; i++) { - console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); - } - }; + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); + }, + + emit: function(input) { + if (input.scale !== 1) { + var inOut = input.scale < 1 ? 'in' : 'out'; + input.additionalEvent = this.options.event + inOut; + } + this._super.emit.call(this, input); + } + }); /** - * Used in TimeStep to avoid the hidden times. - * @param {function} moment - * @param {TimeStep} timeStep - * @param previousTime + * Press + * Recognized when the pointer is down for x ms without any movement. + * @constructor + * @extends Recognizer */ - exports.stepOverHiddenDates = function (moment, timeStep, previousTime) { - var stepInHidden = false; - var currentValue = timeStep.current.valueOf(); - for (var i = 0; i < timeStep.hiddenDates.length; i++) { - var startDate = timeStep.hiddenDates[i].start; - var endDate = timeStep.hiddenDates[i].end; - if (currentValue >= startDate && currentValue < endDate) { - stepInHidden = true; - break; - } - } + function PressRecognizer() { + Recognizer.apply(this, arguments); - if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { - var prevValue = moment(previousTime); - var newValue = moment(endDate); - //check if the next step should be major - if (prevValue.year() != newValue.year()) { - timeStep.switchedYear = true; - } else if (prevValue.month() != newValue.month()) { - timeStep.switchedMonth = true; - } else if (prevValue.dayOfYear() != newValue.dayOfYear()) { - timeStep.switchedDay = true; - } + this._timer = null; + this._input = null; + } - timeStep.current = newValue; - } - }; + inherit(PressRecognizer, Recognizer, { + /** + * @namespace + * @memberof PressRecognizer + */ + defaults: { + event: 'press', + pointers: 1, + time: 251, // minimal time of the pointer to be pressed + threshold: 9 // a minimal movement is ok, but keep it low + }, - ///** - // * Used in TimeStep to avoid the hidden times. - // * @param timeStep - // * @param previousTime - // */ - //exports.checkFirstStep = function(timeStep) { - // var stepInHidden = false; - // var currentValue = timeStep.current.valueOf(); - // for (var i = 0; i < timeStep.hiddenDates.length; i++) { - // var startDate = timeStep.hiddenDates[i].start; - // var endDate = timeStep.hiddenDates[i].end; - // if (currentValue >= startDate && currentValue < endDate) { - // stepInHidden = true; - // break; - // } - // } - // - // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { - // var newValue = moment(endDate); - // timeStep.current = newValue.toDate(); - // } - //}; + getTouchAction: function() { + return [TOUCH_ACTION_AUTO]; + }, - /** - * replaces the Core toScreen methods - * @param Core - * @param time - * @param width - * @returns {number} - */ - exports.toScreen = function (Core, time, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return (time.valueOf() - conversion.offset) * conversion.scale; - } else { - var hidden = exports.isHidden(time, Core.body.hiddenDates); - if (hidden.hidden == true) { - time = hidden.startDate; - } + process: function(input) { + var options = this.options; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTime = input.deltaTime > options.time; - var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time); + this._input = input; - var conversion = Core.range.conversion(width, duration); - return (time.valueOf() - conversion.offset) * conversion.scale; - } - }; + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { + this.reset(); + } else if (input.eventType & INPUT_START) { + this.reset(); + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.time, this); + } else if (input.eventType & INPUT_END) { + return STATE_RECOGNIZED; + } + return STATE_FAILED; + }, - /** - * Replaces the core toTime methods - * @param body - * @param range - * @param x - * @param width - * @returns {Date} - */ - exports.toTime = function (Core, x, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return new Date(x / conversion.scale + conversion.offset); - } else { - var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - var totalDuration = Core.range.end - Core.range.start - hiddenDuration; - var partialDuration = totalDuration * x / width; - var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); + reset: function() { + clearTimeout(this._timer); + }, - var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); - return newTime; - } - }; + emit: function(input) { + if (this.state !== STATE_RECOGNIZED) { + return; + } - /** - * Support function - * - * @param hiddenDates - * @param range - * @returns {number} - */ - exports.getHiddenDurationBetween = function (hiddenDates, start, end) { - var duration = 0; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= start && endDate < end) { - duration += endDate - startDate; + if (input && (input.eventType & INPUT_END)) { + this.manager.emit(this.options.event + 'up', input); + } else { + this._input.timeStamp = now(); + this.manager.emit(this.options.event, this._input); + } } - } - return duration; - }; + }); /** - * Support function - * @param moment - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} + * Rotate + * Recognized when two or more pointer are moving in a circular motion. + * @constructor + * @extends AttrRecognizer */ - exports.correctTimeForHidden = function (moment, hiddenDates, range, time) { - time = moment(time).toDate().valueOf(); - time -= exports.getHiddenDurationBefore(moment, hiddenDates, range, time); - return time; - }; + function RotateRecognizer() { + AttrRecognizer.apply(this, arguments); + } - exports.getHiddenDurationBefore = function (moment, hiddenDates, range, time) { - var timeOffset = 0; - time = moment(time).toDate().valueOf(); + inherit(RotateRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof RotateRecognizer + */ + defaults: { + event: 'rotate', + threshold: 0, + pointers: 2 + }, - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - if (time >= endDate) { - timeOffset += endDate - startDate; - } + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, + + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); } - } - return timeOffset; - }; + }); /** - * sum the duration from start to finish, including the hidden duration, - * until the required amount has been reached, return the accumulated hidden duration - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} + * Swipe + * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. + * @constructor + * @extends AttrRecognizer */ - exports.getAccumulatedHiddenDuration = function (hiddenDates, range, requiredDuration) { - var hiddenDuration = 0; - var duration = 0; - var previousPoint = range.start; - //exports.printDates(hiddenDates) - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - duration += startDate - previousPoint; - previousPoint = endDate; - if (duration >= requiredDuration) { - break; - } else { - hiddenDuration += endDate - startDate; - } - } - } + function SwipeRecognizer() { + AttrRecognizer.apply(this, arguments); + } - return hiddenDuration; - }; + inherit(SwipeRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof SwipeRecognizer + */ + defaults: { + event: 'swipe', + threshold: 10, + velocity: 0.3, + direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, + pointers: 1 + }, - /** - * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true - * @param hiddenDates - * @param time - * @param direction - * @param correctionEnabled - * @returns {*} - */ - exports.snapAwayFromHidden = function (hiddenDates, time, direction, correctionEnabled) { - var isHidden = exports.isHidden(time, hiddenDates); - if (isHidden.hidden == true) { - if (direction < 0) { - if (correctionEnabled == true) { - return isHidden.startDate - (isHidden.endDate - time) - 1; - } else { - return isHidden.startDate - 1; - } - } else { - if (correctionEnabled == true) { - return isHidden.endDate + (time - isHidden.startDate) + 1; - } else { - return isHidden.endDate + 1; - } - } - } else { - return time; - } - }; + getTouchAction: function() { + return PanRecognizer.prototype.getTouchAction.call(this); + }, - /** - * Check if a time is hidden - * - * @param time - * @param hiddenDates - * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} - */ - exports.isHidden = function (time, hiddenDates) { - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; + attrTest: function(input) { + var direction = this.options.direction; + var velocity; - if (time >= startDate && time < endDate) { - // if the start is entering a hidden zone - return { hidden: true, startDate: startDate, endDate: endDate }; - break; - } - } - return { hidden: false, startDate: startDate, endDate: endDate }; - }; + if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { + velocity = input.overallVelocity; + } else if (direction & DIRECTION_HORIZONTAL) { + velocity = input.overallVelocityX; + } else if (direction & DIRECTION_VERTICAL) { + velocity = input.overallVelocityY; + } -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { + return this._super.attrTest.call(this, input) && + direction & input.offsetDirection && + input.distance > this.options.threshold && + input.maxPointers == this.options.pointers && + abs(velocity) > this.options.velocity && input.eventType & INPUT_END; + }, - 'use strict'; + emit: function(input) { + var direction = directionStr(input.offsetDirection); + if (direction) { + this.manager.emit(this.options.event + direction, input); + } - var Emitter = __webpack_require__(12); - var Hammer = __webpack_require__(20); - var hammerUtil = __webpack_require__(24); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(8); - var DataView = __webpack_require__(10); - var Range = __webpack_require__(23); - var ItemSet = __webpack_require__(28); - var TimeAxis = __webpack_require__(38); - var Activator = __webpack_require__(39); - var DateUtil = __webpack_require__(26); - var CustomTime = __webpack_require__(41); + this.manager.emit(this.options.event, input); + } + }); /** - * Create a timeline visualization + * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur + * between the given interval and position. The delay option can be used to recognize multi-taps without firing + * a single tap. + * + * The eventData from the emitted event contains the property `tapCount`, which contains the amount of + * multi-taps being recognized. * @constructor + * @extends Recognizer */ - function Core() {} - - // turn Core into an event emitter - Emitter(Core.prototype); - - /** - * Create the main DOM for the Core: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Core will - * be attached. - * @protected - */ - Core.prototype._create = function (container) { - this.dom = {}; - - this.dom.container = container; + function TapRecognizer() { + Recognizer.apply(this, arguments); - this.dom.root = document.createElement('div'); - this.dom.background = document.createElement('div'); - this.dom.backgroundVertical = document.createElement('div'); - this.dom.backgroundHorizontal = document.createElement('div'); - this.dom.centerContainer = document.createElement('div'); - this.dom.leftContainer = document.createElement('div'); - this.dom.rightContainer = document.createElement('div'); - this.dom.center = document.createElement('div'); - this.dom.left = document.createElement('div'); - this.dom.right = document.createElement('div'); - this.dom.top = document.createElement('div'); - this.dom.bottom = document.createElement('div'); - this.dom.shadowTop = document.createElement('div'); - this.dom.shadowBottom = document.createElement('div'); - this.dom.shadowTopLeft = document.createElement('div'); - this.dom.shadowBottomLeft = document.createElement('div'); - this.dom.shadowTopRight = document.createElement('div'); - this.dom.shadowBottomRight = document.createElement('div'); + // previous time and center, + // used for tap counting + this.pTime = false; + this.pCenter = false; - this.dom.root.className = 'vis-timeline'; - this.dom.background.className = 'vis-panel vis-background'; - this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical'; - this.dom.backgroundHorizontal.className = 'vis-panel vis-background vis-horizontal'; - this.dom.centerContainer.className = 'vis-panel vis-center'; - this.dom.leftContainer.className = 'vis-panel vis-left'; - this.dom.rightContainer.className = 'vis-panel vis-right'; - this.dom.top.className = 'vis-panel vis-top'; - this.dom.bottom.className = 'vis-panel vis-bottom'; - this.dom.left.className = 'vis-content'; - this.dom.center.className = 'vis-content'; - this.dom.right.className = 'vis-content'; - this.dom.shadowTop.className = 'vis-shadow vis-top'; - this.dom.shadowBottom.className = 'vis-shadow vis-bottom'; - this.dom.shadowTopLeft.className = 'vis-shadow vis-top'; - this.dom.shadowBottomLeft.className = 'vis-shadow vis-bottom'; - this.dom.shadowTopRight.className = 'vis-shadow vis-top'; - this.dom.shadowBottomRight.className = 'vis-shadow vis-bottom'; + this._timer = null; + this._input = null; + this.count = 0; + } - this.dom.root.appendChild(this.dom.background); - this.dom.root.appendChild(this.dom.backgroundVertical); - this.dom.root.appendChild(this.dom.backgroundHorizontal); - this.dom.root.appendChild(this.dom.centerContainer); - this.dom.root.appendChild(this.dom.leftContainer); - this.dom.root.appendChild(this.dom.rightContainer); - this.dom.root.appendChild(this.dom.top); - this.dom.root.appendChild(this.dom.bottom); + inherit(TapRecognizer, Recognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'tap', + pointers: 1, + taps: 1, + interval: 300, // max time between the multi-tap taps + time: 250, // max time of the pointer to be down (like finger on the screen) + threshold: 9, // a minimal movement is ok, but keep it low + posThreshold: 10 // a multi-tap can be a bit off the initial position + }, - this.dom.centerContainer.appendChild(this.dom.center); - this.dom.leftContainer.appendChild(this.dom.left); - this.dom.rightContainer.appendChild(this.dom.right); + getTouchAction: function() { + return [TOUCH_ACTION_MANIPULATION]; + }, - this.dom.centerContainer.appendChild(this.dom.shadowTop); - this.dom.centerContainer.appendChild(this.dom.shadowBottom); - this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); - this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); - this.dom.rightContainer.appendChild(this.dom.shadowTopRight); - this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); + process: function(input) { + var options = this.options; - this.on('rangechange', (function () { - if (this.initialDrawDone === true) { - this._redraw(); // this allows overriding the _redraw method - } - }).bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('pan', this._onDrag.bind(this)); + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTouchTime = input.deltaTime < options.time; - var me = this; - this.on('_change', function (properties) { - if (properties && properties.queue == true) { - // redraw once on next tick - if (!me._redrawTimer) { - me._redrawTimer = setTimeout(function () { - me._redrawTimer = null; - me._redraw(); - }, 0); - } - } else { - // redraw immediately - me._redraw(); - } - }); + this.reset(); - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = new Hammer(this.dom.root); - this.hammer.get('pinch').set({ enable: true }); - this.hammer.get('pan').set({ threshold: 5, direction: 30 }); // 30 is ALL_DIRECTIONS in hammer. - this.listeners = {}; + if ((input.eventType & INPUT_START) && (this.count === 0)) { + return this.failTimeout(); + } - var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend' - // TODO: cleanup - //'touch', 'pinch', - //'tap', 'doubletap', 'hold', - //'dragstart', 'drag', 'dragend', - //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (type) { - var listener = function listener(event) { - if (me.isActive()) { - me.emit(type, event); - } - }; - me.hammer.on(type, listener); - me.listeners[type] = listener; - }); + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (validMovement && validTouchTime && validPointers) { + if (input.eventType != INPUT_END) { + return this.failTimeout(); + } - // emulate a touch event (emitted before the start of a pan, pinch, tap, or press) - hammerUtil.onTouch(this.hammer, (function (event) { - me.emit('touch', event); - }).bind(this)); + var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; + var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; - // emulate a release event (emitted after a pan, pinch, tap, or press) - hammerUtil.onRelease(this.hammer, (function (event) { - me.emit('release', event); - }).bind(this)); + this.pTime = input.timeStamp; + this.pCenter = input.center; - function onMouseWheel(event) { - if (me.isActive()) { - me.emit('mousewheel', event); - } - } - this.dom.root.addEventListener('mousewheel', onMouseWheel); - this.dom.root.addEventListener('DOMMouseScroll', onMouseWheel); + if (!validMultiTap || !validInterval) { + this.count = 1; + } else { + this.count += 1; + } - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; + this._input = input; - this.customTimes = []; + // if tap count matches we have recognized it, + // else it has began recognizing... + var tapCount = this.count % options.taps; + if (tapCount === 0) { + // no failing requirements, immediately trigger the tap event + // or wait as long as the multitap interval to trigger + if (!this.hasRequireFailures()) { + return STATE_RECOGNIZED; + } else { + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.interval, this); + return STATE_BEGAN; + } + } + } + return STATE_FAILED; + }, - // store state information needed for touch events - this.touch = {}; + failTimeout: function() { + this._timer = setTimeoutContext(function() { + this.state = STATE_FAILED; + }, this.options.interval, this); + return STATE_FAILED; + }, - this.redrawCount = 0; - this.initialDrawDone = false; + reset: function() { + clearTimeout(this._timer); + }, - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); - }; + emit: function() { + if (this.state == STATE_RECOGNIZED) { + this._input.tapCount = this.count; + this.manager.emit(this.options.event, this._input); + } + } + }); /** - * Set options. Options will be passed to all components loaded in the Timeline. + * Simple way to create a manager with a default set of recognizers. + * @param {HTMLElement} element * @param {Object} [options] - * {String} orientation - * Vertical orientation for the Timeline, - * can be 'bottom' (default) or 'top'. - * {String | Number} width - * Width for the timeline, a number in pixels or - * a css string like '1000px' or '75%'. '100%' by default. - * {String | Number} height - * Fixed height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. If undefined, - * The Timeline will automatically size such that - * its contents fit. - * {String | Number} minHeight - * Minimum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {String | Number} maxHeight - * Maximum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {Number | Date | String} start - * Start date for the visible window - * {Number | Date | String} end - * End date for the visible window + * @constructor */ - Core.prototype.setOptions = function (options) { - if (options) { - // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment', 'throttleRedraw']; - util.selectiveExtend(fields, this.options, options); + function Hammer(element, options) { + options = options || {}; + options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); + return new Manager(element, options); + } - this.options.orientation = { item: undefined, axis: undefined }; - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation = { - item: options.orientation, - axis: options.orientation - }; - } else if (typeof options.orientation === 'object') { - if ('item' in options.orientation) { - this.options.orientation.item = options.orientation.item; - } - if ('axis' in options.orientation) { - this.options.orientation.axis = options.orientation.axis; - } - } - } + /** + * @const {string} + */ + Hammer.VERSION = '2.0.6'; - if (this.options.orientation.axis === 'both') { - if (!this.timeAxis2) { - var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body); - timeAxis2.setOptions = function (options) { - var _options = options ? util.extend({}, options) : {}; - _options.orientation = 'top'; // override the orientation option, always top - TimeAxis.prototype.setOptions.call(timeAxis2, _options); - }; - this.components.push(timeAxis2); - } - } else { - if (this.timeAxis2) { - var index = this.components.indexOf(this.timeAxis2); - if (index !== -1) { - this.components.splice(index, 1); - } - this.timeAxis2.destroy(); - this.timeAxis2 = null; - } - } + /** + * default settings + * @namespace + */ + Hammer.defaults = { + /** + * set if DOM events are being triggered. + * But this is slower and unused by simple implementations, so disabled by default. + * @type {Boolean} + * @default false + */ + domEvents: false, - // if the graph2d's drawPoints is a function delegate the callback to the onRender property - if (typeof options.drawPoints == 'function') { - options.drawPoints = { - onRender: options.drawPoints - }; - } + /** + * The value for the touchAction property/fallback. + * When set to `compute` it will magically set the correct value based on the added recognizers. + * @type {String} + * @default compute + */ + touchAction: TOUCH_ACTION_COMPUTE, - if ('hiddenDates' in this.options) { - DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates); - } + /** + * @type {Boolean} + * @default true + */ + enable: true, - if ('clickToUse' in options) { - if (options.clickToUse) { - if (!this.activator) { - this.activator = new Activator(this.dom.root); - } - } else { - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } - } - } + /** + * EXPERIMENTAL FEATURE -- can be removed/changed + * Change the parent input target element. + * If Null, then it is being set the to main element. + * @type {Null|EventTarget} + * @default null + */ + inputTarget: null, - if ('showCustomTime' in options) { - throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); - } + /** + * force an input class + * @type {Null|Function} + * @default null + */ + inputClass: null, - // enable/disable autoResize - this._initAutoResize(); - } + /** + * Default recognizer setup when calling `Hammer()` + * When creating a new Manager these will be skipped. + * @type {Array} + */ + preset: [ + // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] + [RotateRecognizer, {enable: false}], + [PinchRecognizer, {enable: false}, ['rotate']], + [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}], + [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']], + [TapRecognizer], + [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']], + [PressRecognizer] + ], - // propagate options to all components - this.components.forEach(function (component) { - return component.setOptions(options); - }); + /** + * Some CSS properties can be used to improve the working of Hammer. + * Add them to this method and they will be set when creating a new Manager. + * @namespace + */ + cssProps: { + /** + * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userSelect: 'none', - // enable/disable configure - if ('configure' in options) { - if (!this.configurator) { - this.configurator = this._createConfigurator(); - } + /** + * Disable the Windows Phone grippers when pressing an element. + * @type {String} + * @default 'none' + */ + touchSelect: 'none', - this.configurator.setOptions(options.configure); + /** + * 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. + * @type {String} + * @default 'none' + */ + touchCallout: 'none', - // collect the settings of all components, and pass them to the configuration system - var appliedOptions = util.deepExtend({}, this.options); - this.components.forEach(function (component) { - util.deepExtend(appliedOptions, component.options); - }); - this.configurator.setModuleOptions({ global: appliedOptions }); - } + /** + * Specifies whether zooming is enabled. Used by IE10> + * @type {String} + * @default 'none' + */ + contentZooming: 'none', - // override redraw with a throttled version - if (!this._origRedraw) { - this._origRedraw = this._redraw.bind(this); - this._redraw = util.throttle(this._origRedraw, this.options.throttleRedraw); - } else { - // Not the initial run: redraw everything - this._redraw(); - } - }; + /** + * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userDrag: 'none', - /** - * Returns true when the Timeline is active. - * @returns {boolean} - */ - Core.prototype.isActive = function () { - return !this.activator || this.activator.active; + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in iOS. This property obeys the alpha value, if specified. + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' + } }; + var STOP = 1; + var FORCED_STOP = 2; + /** - * Destroy the Core, clean up all DOM elements and event listeners. + * Manager + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor */ - Core.prototype.destroy = function () { - // unbind datasets - this.setItems(null); - this.setGroups(null); - - // remove all event listeners - this.off(); + function Manager(element, options) { + this.options = assign({}, Hammer.defaults, options || {}); - // stop checking for changed size - this._stopAutoResize(); + this.options.inputTarget = this.options.inputTarget || element; - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); - } - this.dom = null; + this.handlers = {}; + this.session = {}; + this.recognizers = []; - // remove Activator - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } + this.element = element; + this.input = createInputInstance(this); + this.touchAction = new TouchAction(this, this.options.touchAction); - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; - } - } - this.listeners = null; - this.hammer = null; + toggleCssProps(this, true); - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - return component.destroy(); - }); + each(this.options.recognizers, function(item) { + var recognizer = this.add(new (item[0])(item[1])); + item[2] && recognizer.recognizeWith(item[2]); + item[3] && recognizer.requireFailure(item[3]); + }, this); + } - this.body = null; - }; + Manager.prototype = { + /** + * set options + * @param {Object} options + * @returns {Manager} + */ + set: function(options) { + assign(this.options, options); - /** - * Set a custom time bar - * @param {Date} time - * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted. - */ - Core.prototype.setCustomTime = function (time, id) { - var customTimes = this.customTimes.filter(function (component) { - return id === component.options.id; - }); + // Options that need a little more setup + if (options.touchAction) { + this.touchAction.update(); + } + if (options.inputTarget) { + // Clean up existing event listeners and reinitialize + this.input.destroy(); + this.input.target = options.inputTarget; + this.input.init(); + } + return this; + }, - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); - } + /** + * stop recognizing for this session. + * This session will be discarded, when a new [input]start event is fired. + * When forced, the recognizer cycle is stopped immediately. + * @param {Boolean} [force] + */ + stop: function(force) { + this.session.stopped = force ? FORCED_STOP : STOP; + }, - if (customTimes.length > 0) { - customTimes[0].setCustomTime(time); - } - }; + /** + * run the recognizers! + * called by the inputHandler function on every movement of the pointers (touches) + * it walks through all the recognizers and tries to detect the gesture that is being made + * @param {Object} inputData + */ + recognize: function(inputData) { + var session = this.session; + if (session.stopped) { + return; + } - /** - * Retrieve the current custom time. - * @param {number} [id=undefined] Id of the custom time bar. - * @return {Date | undefined} customTime - */ - Core.prototype.getCustomTime = function (id) { - var customTimes = this.customTimes.filter(function (component) { - return component.options.id === id; - }); + // run the touch-action polyfill + this.touchAction.preventDefaults(inputData); - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); - } - return customTimes[0].getCustomTime(); - }; + var recognizer; + var recognizers = this.recognizers; - /** - * Set a custom title for the custom time bar. - * @param {String} [title] Custom title - * @param {number} [id=undefined] Id of the custom time bar. - */ - Core.prototype.setCustomTimeTitle = function (title, id) { - var customTimes = this.customTimes.filter(function (component) { - return component.options.id === id; - }); + // this holds the recognizer that is being recognized. + // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED + // if no recognizer is detecting a thing, it is set to `null` + var curRecognizer = session.curRecognizer; - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); - } - if (customTimes.length > 0) { - return customTimes[0].setCustomTitle(title); - } - }; + // reset when the last recognizer is recognized + // or when we're in a new session + if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { + curRecognizer = session.curRecognizer = null; + } - /** - * Retrieve meta information from an event. - * Should be overridden by classes extending Core - * @param {Event} event - * @return {Object} An object with related information. - */ - Core.prototype.getEventProperties = function (event) { - return { event: event }; - }; + var i = 0; + while (i < recognizers.length) { + recognizer = recognizers[i]; - /** - * Add custom vertical bar - * @param {Date | String | Number} [time] A Date, unix timestamp, or - * ISO date string. Time point where - * the new bar should be placed. - * If not provided, `new Date()` will - * be used. - * @param {Number | String} [id=undefined] Id of the new bar. Optional - * @return {Number | String} Returns the id of the new bar - */ - Core.prototype.addCustomTime = function (time, id) { - var timestamp = time !== undefined ? util.convert(time, 'Date').valueOf() : new Date(); + // find out if we are allowed try to recognize the input for this one. + // 1. allow if the session is NOT forced stopped (see the .stop() method) + // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one + // that is being recognized. + // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. + // this can be setup with the `recognizeWith()` method on the recognizer. + if (session.stopped !== FORCED_STOP && ( // 1 + !curRecognizer || recognizer == curRecognizer || // 2 + recognizer.canRecognizeWith(curRecognizer))) { // 3 + recognizer.recognize(inputData); + } else { + recognizer.reset(); + } - var exists = this.customTimes.some(function (customTime) { - return customTime.options.id === id; - }); - if (exists) { - throw new Error('A custom time with id ' + JSON.stringify(id) + ' already exists'); - } + // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the + // current active recognizer. but only if we don't already have an active recognizer + if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { + curRecognizer = session.curRecognizer = recognizer; + } + i++; + } + }, - var customTime = new CustomTime(this.body, util.extend({}, this.options, { - time: timestamp, - id: id - })); + /** + * get a recognizer by its event name. + * @param {Recognizer|String} recognizer + * @returns {Recognizer|Null} + */ + get: function(recognizer) { + if (recognizer instanceof Recognizer) { + return recognizer; + } - this.customTimes.push(customTime); - this.components.push(customTime); - this._redraw(); + var recognizers = this.recognizers; + for (var i = 0; i < recognizers.length; i++) { + if (recognizers[i].options.event == recognizer) { + return recognizers[i]; + } + } + return null; + }, - return id; - }; + /** + * add a recognizer to the manager + * existing recognizers with the same event name will be removed + * @param {Recognizer} recognizer + * @returns {Recognizer|Manager} + */ + add: function(recognizer) { + if (invokeArrayArg(recognizer, 'add', this)) { + return this; + } - /** - * Remove previously added custom bar - * @param {int} id ID of the custom bar to be removed - * @return {boolean} True if the bar exists and is removed, false otherwise - */ - Core.prototype.removeCustomTime = function (id) { - var customTimes = this.customTimes.filter(function (bar) { - return bar.options.id === id; - }); + // remove existing + var existing = this.get(recognizer.options.event); + if (existing) { + this.remove(existing); + } - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); - } + this.recognizers.push(recognizer); + recognizer.manager = this; - customTimes.forEach((function (customTime) { - this.customTimes.splice(this.customTimes.indexOf(customTime), 1); - this.components.splice(this.components.indexOf(customTime), 1); - customTime.destroy(); - }).bind(this)); - }; + this.touchAction.update(); + return recognizer; + }, - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - Core.prototype.getVisibleItems = function () { - return this.itemSet && this.itemSet.getVisibleItems() || []; - }; + /** + * remove a recognizer by name or instance + * @param {Recognizer|String} recognizer + * @returns {Manager} + */ + remove: function(recognizer) { + if (invokeArrayArg(recognizer, 'remove', this)) { + return this; + } - /** - * Set Core window such that it fits all items - * @param {Object} [options] Available options: - * `animation: boolean | {duration: number, easingFunction: string}` - * If true (default), the range is animated - * smoothly to the new window. An object can be - * provided to specify duration and easing function. - * Default duration is 500 ms, and default easing - * function is 'easeInOutQuad'. - */ - Core.prototype.fit = function (options) { - var range = this.getDataRange(); + recognizer = this.get(recognizer); - // skip range set if there is no min and max date - if (range.min === null && range.max === null) { - return; - } + // let's make sure this recognizer exists + if (recognizer) { + var recognizers = this.recognizers; + var index = inArray(recognizers, recognizer); - // apply a margin of 1% left and right of the data - var interval = range.max - range.min; - var min = new Date(range.min.valueOf() - interval * 0.01); - var max = new Date(range.max.valueOf() + interval * 0.01); + if (index !== -1) { + recognizers.splice(index, 1); + this.touchAction.update(); + } + } - var animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(min, max, animation); - }; + return this; + }, - /** - * Calculate the data range of the items start and end dates - * @returns {{min: Date | null, max: Date | null}} - * @protected - */ - Core.prototype.getDataRange = function () { - // must be implemented by Timeline and Graph2d - throw new Error('Cannot invoke abstract method getDataRange'); - }; + /** + * bind event + * @param {String} events + * @param {Function} handler + * @returns {EventEmitter} this + */ + on: function(events, handler) { + var handlers = this.handlers; + each(splitStr(events), function(event) { + handlers[event] = handlers[event] || []; + handlers[event].push(handler); + }); + return this; + }, - /** - * Set the visible window. Both parameters are optional, you can change only - * start or only end. Syntax: - * - * TimeLine.setWindow(start, end) - * TimeLine.setWindow(start, end, options) - * TimeLine.setWindow(range) - * - * Where start and end can be a Date, number, or string, and range is an - * object with properties start and end. - * - * @param {Date | Number | String | Object} [start] Start date of visible window - * @param {Date | Number | String} [end] End date of visible window - * @param {Object} [options] Available options: - * `animation: boolean | {duration: number, easingFunction: string}` - * If true (default), the range is animated - * smoothly to the new window. An object can be - * provided to specify duration and easing function. - * Default duration is 500 ms, and default easing - * function is 'easeInOutQuad'. - */ - Core.prototype.setWindow = function (start, end, options) { - var animation; - if (arguments.length == 1) { - var range = arguments[0]; - animation = range.animation !== undefined ? range.animation : true; - this.range.setRange(range.start, range.end, animation); - } else { - animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(start, end, animation); - } - }; + /** + * unbind event, leave emit blank to remove all handlers + * @param {String} events + * @param {Function} [handler] + * @returns {EventEmitter} this + */ + off: function(events, handler) { + var handlers = this.handlers; + each(splitStr(events), function(event) { + if (!handler) { + delete handlers[event]; + } else { + handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); + } + }); + return this; + }, - /** - * Move the window such that given time is centered on screen. - * @param {Date | Number | String} time - * @param {Object} [options] Available options: - * `animation: boolean | {duration: number, easingFunction: string}` - * If true (default), the range is animated - * smoothly to the new window. An object can be - * provided to specify duration and easing function. - * Default duration is 500 ms, and default easing - * function is 'easeInOutQuad'. - */ - Core.prototype.moveTo = function (time, options) { - var interval = this.range.end - this.range.start; - var t = util.convert(time, 'Date').valueOf(); + /** + * emit event to the listeners + * @param {String} event + * @param {Object} data + */ + emit: function(event, data) { + // we also want to trigger dom events + if (this.options.domEvents) { + triggerDomEvent(event, data); + } - var start = t - interval / 2; - var end = t + interval / 2; - var animation = options && options.animation !== undefined ? options.animation : true; + // no handlers, so skip it all + var handlers = this.handlers[event] && this.handlers[event].slice(); + if (!handlers || !handlers.length) { + return; + } - this.range.setRange(start, end, animation); - }; + data.type = event; + data.preventDefault = function() { + data.srcEvent.preventDefault(); + }; - /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range - */ - Core.prototype.getWindow = function () { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; + var i = 0; + while (i < handlers.length) { + handlers[i](data); + i++; + } + }, + + /** + * destroy the manager and unbinds all events + * it doesn't unbind dom events, that is the user own responsibility + */ + destroy: function() { + this.element && toggleCssProps(this, false); + + this.handlers = {}; + this.session = {}; + this.input.destroy(); + this.element = null; + } }; /** - * Force a redraw. Can be overridden by implementations of Core - * - * Note: this function will be overridden on construction with a trottled version + * add/remove the css properties as defined in manager.options.cssProps + * @param {Manager} manager + * @param {Boolean} add */ - Core.prototype.redraw = function () { - this._redraw(); - }; + function toggleCssProps(manager, add) { + var element = manager.element; + if (!element.style) { + return; + } + each(manager.options.cssProps, function(value, name) { + element.style[prefixed(element.style, name)] = add ? value : ''; + }); + } /** - * Redraw for internal use. Redraws all components. See also the public - * method redraw. - * @protected + * trigger dom event + * @param {String} event + * @param {Object} data */ - Core.prototype._redraw = function () { - this.redrawCount++; - var resized = false; - var options = this.options; - var props = this.props; - var dom = this.dom; + function triggerDomEvent(event, data) { + var gestureEvent = document.createEvent('Event'); + gestureEvent.initEvent(event, true, true); + gestureEvent.gesture = data; + data.target.dispatchEvent(gestureEvent); + } - if (!dom || !dom.container || dom.container.clientWidth == 0) return; // when destroyed, or invisible + assign(Hammer, { + INPUT_START: INPUT_START, + INPUT_MOVE: INPUT_MOVE, + INPUT_END: INPUT_END, + INPUT_CANCEL: INPUT_CANCEL, - DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + STATE_POSSIBLE: STATE_POSSIBLE, + STATE_BEGAN: STATE_BEGAN, + STATE_CHANGED: STATE_CHANGED, + STATE_ENDED: STATE_ENDED, + STATE_RECOGNIZED: STATE_RECOGNIZED, + STATE_CANCELLED: STATE_CANCELLED, + STATE_FAILED: STATE_FAILED, - // update class names - if (options.orientation == 'top') { - util.addClassName(dom.root, 'vis-top'); - util.removeClassName(dom.root, 'vis-bottom'); - } else { - util.removeClassName(dom.root, 'vis-top'); - util.addClassName(dom.root, 'vis-bottom'); - } + DIRECTION_NONE: DIRECTION_NONE, + DIRECTION_LEFT: DIRECTION_LEFT, + DIRECTION_RIGHT: DIRECTION_RIGHT, + DIRECTION_UP: DIRECTION_UP, + DIRECTION_DOWN: DIRECTION_DOWN, + DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, + DIRECTION_VERTICAL: DIRECTION_VERTICAL, + DIRECTION_ALL: DIRECTION_ALL, - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); + Manager: Manager, + Input: Input, + TouchAction: TouchAction, - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + TouchInput: TouchInput, + MouseInput: MouseInput, + PointerEventInput: PointerEventInput, + TouchMouseInput: TouchMouseInput, + SingleTouchInput: SingleTouchInput, - // workaround for a bug in IE: the clientWidth of an element with - // a height:0px and overflow:hidden is not calculated and always has value 0 - if (dom.centerContainer.clientHeight === 0) { - props.border.left = props.border.top; - props.border.right = props.border.left; - } - if (dom.root.clientHeight === 0) { - borderRootWidth = borderRootHeight; - } + Recognizer: Recognizer, + AttrRecognizer: AttrRecognizer, + Tap: TapRecognizer, + Pan: PanRecognizer, + Swipe: SwipeRecognizer, + Pinch: PinchRecognizer, + Rotate: RotateRecognizer, + Press: PressRecognizer, - // calculate the heights. If any of the side panels is empty, we set the height to - // minus the border width, such that the border will be invisible - props.center.height = dom.center.offsetHeight; - props.left.height = dom.left.offsetHeight; - props.right.height = dom.right.offsetHeight; - props.top.height = dom.top.clientHeight || -props.border.top; - props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - - // TODO: compensate borders when any of the panels is empty. - - // apply auto height - // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) - var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); - var autoHeight = props.top.height + contentHeight + props.bottom.height + borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; - - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - borderRootWidth; - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.leftContainer.width = props.left.width; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; - props.center.width = centerWidth; - props.centerContainer.width = centerWidth; - props.top.width = centerWidth; - props.bottom.width = centerWidth; - - // resize the panels - dom.background.style.height = props.background.height + 'px'; - dom.backgroundVertical.style.height = props.background.height + 'px'; - dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; - dom.centerContainer.style.height = props.centerContainer.height + 'px'; - dom.leftContainer.style.height = props.leftContainer.height + 'px'; - dom.rightContainer.style.height = props.rightContainer.height + 'px'; - - dom.background.style.width = props.background.width + 'px'; - dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; - dom.backgroundHorizontal.style.width = props.background.width + 'px'; - dom.centerContainer.style.width = props.center.width + 'px'; - dom.top.style.width = props.top.width + 'px'; - dom.bottom.style.width = props.bottom.width + 'px'; + on: addEventListeners, + off: removeEventListeners, + each: each, + merge: merge, + extend: extend, + assign: assign, + inherit: inherit, + bindFn: bindFn, + prefixed: prefixed + }); - // reposition the panels - dom.background.style.left = '0'; - dom.background.style.top = '0'; - dom.backgroundVertical.style.left = props.left.width + props.border.left + 'px'; - dom.backgroundVertical.style.top = '0'; - dom.backgroundHorizontal.style.left = '0'; - dom.backgroundHorizontal.style.top = props.top.height + 'px'; - dom.centerContainer.style.left = props.left.width + 'px'; - dom.centerContainer.style.top = props.top.height + 'px'; - dom.leftContainer.style.left = '0'; - dom.leftContainer.style.top = props.top.height + 'px'; - dom.rightContainer.style.left = props.left.width + props.center.width + 'px'; - dom.rightContainer.style.top = props.top.height + 'px'; - dom.top.style.left = props.left.width + 'px'; - dom.top.style.top = '0'; - dom.bottom.style.left = props.left.width + 'px'; - dom.bottom.style.top = props.top.height + props.centerContainer.height + 'px'; + // this prevents errors when Hammer is loaded in the presence of an AMD + // style loader but by script tag, not by the loader. + var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line + freeGlobal.Hammer = Hammer; - // update the scrollTop, feasible range for the offset can be changed - // when the height of the Core or of the contents of the center changed - this._updateScrollTop(); + 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__)); + } else if (typeof module != 'undefined' && module.exports) { + module.exports = Hammer; + } else { + window[exportName] = Hammer; + } - // reposition the scrollable contents - var offset = this.props.scrollTop; - if (options.orientation.item != 'top') { - offset += Math.max(this.props.centerContainer.height - this.props.center.height - this.props.border.top - this.props.border.bottom, 0); - } - dom.center.style.left = '0'; - dom.center.style.top = offset + 'px'; - dom.left.style.left = '0'; - dom.left.style.top = offset + 'px'; - dom.right.style.left = '0'; - dom.right.style.top = offset + 'px'; + })(window, document, 'Hammer'); - // show shadows when vertical scrolling is available - var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; - dom.shadowTop.style.visibility = visibilityTop; - dom.shadowBottom.style.visibility = visibilityBottom; - dom.shadowTopLeft.style.visibility = visibilityTop; - dom.shadowBottomLeft.style.visibility = visibilityBottom; - dom.shadowTopRight.style.visibility = visibilityTop; - dom.shadowBottomRight.style.visibility = visibilityBottom; - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - var MAX_REDRAW = 5; - if (resized) { - if (this.redrawCount < MAX_REDRAW) { - this.body.emitter.emit('_change'); - return; - } else { - console.log('WARNING: infinite loop in redraw?'); - } - } else { - this.redrawCount = 0; - } - this.initialDrawDone = true; +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { - //Emit public 'changed' event for UI updates, see issue #1592 - this.body.emitter.emit("changed"); - }; + 'use strict'; - // TODO: deprecated since version 1.1.0, remove some day - Core.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); - }; + var Hammer = __webpack_require__(22); /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * Only applicable when option `showCurrentTime` is true. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. + * Register a touch event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) */ - Core.prototype.setCurrentTime = function (time) { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } + exports.onTouch = function (hammer, callback) { + callback.inputHandler = function (event) { + if (event.isFirst) { + callback(event); + } + }; - this.currentTime.setCurrentTime(time); + hammer.on('hammer.input', callback.inputHandler); }; /** - * Get the current time. - * Only applicable when option `showCurrentTime` is true. - * @return {Date} Returns the current time. + * Register a release event, taking place after a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) */ - Core.prototype.getCurrentTime = function () { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } + exports.onRelease = function (hammer, callback) { + callback.inputHandler = function (event) { + if (event.isFinal) { + callback(event); + } + }; - return this.currentTime.getCurrentTime(); + return hammer.on('hammer.input', callback.inputHandler); }; /** - * Convert a position on screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @protected + * Unregister a touch event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) */ - // TODO: move this function to Range - Core.prototype._toTime = function (x) { - return DateUtil.toTime(this, x, this.props.center.width); + exports.offTouch = function (hammer, callback) { + hammer.off('hammer.input', callback.inputHandler); }; /** - * Convert a position on the global screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @protected + * Unregister a release event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) */ - // TODO: move this function to Range - Core.prototype._toGlobalTime = function (x) { - return DateUtil.toTime(this, x, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return new Date(x / conversion.scale + conversion.offset); - }; + exports.offRelease = exports.offTouch; /** - * Convert a datetime (Date object) into a position on the screen - * @param {Date} time A date - * @return {int} x The position on the screen in pixels which corresponds - * with the given date. - * @protected + * Hack the PinchRecognizer such that it doesn't prevent default behavior + * for vertical panning. + * + * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932 + * + * @param {Hammer.Pinch} pinchRecognizer + * @return {Hammer.Pinch} returns the pinchRecognizer */ - // TODO: move this function to Range - Core.prototype._toScreen = function (time) { - return DateUtil.toScreen(this, time, this.props.center.width); - }; + exports.disablePreventDefaultVertically = function (pinchRecognizer) { + var TOUCH_ACTION_PAN_Y = 'pan-y'; - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @protected - */ - // TODO: move this function to Range - Core.prototype._toGlobalScreen = function (time) { - return DateUtil.toScreen(this, time, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return (time.valueOf() - conversion.offset) * conversion.scale; - }; + pinchRecognizer.getTouchAction = function () { + // default method returns [TOUCH_ACTION_NONE] + return [TOUCH_ACTION_PAN_Y]; + }; - /** - * Initialize watching when option autoResize is true - * @private - */ - Core.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); - } else { - this._stopAutoResize(); - } + return pinchRecognizer; }; - /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. - * @private - */ - Core.prototype._startAutoResize = function () { - var me = this; - - this._stopAutoResize(); +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { - this._onResize = function () { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } + 'use strict'; - if (me.dom.root) { - // check whether the frame is resized - // Note: we compare offsetWidth here, not clientWidth. For some reason, - // IE does not restore the clientWidth from 0 to the actual width after - // changing the timeline's container display style from none to visible - if (me.dom.root.offsetWidth != me.props.lastWidth || me.dom.root.offsetHeight != me.props.lastHeight) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; + Object.defineProperty(exports, "__esModule", { + value: true + }); - me.body.emitter.emit('_change'); - } - } - }; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - //Prevent initial unnecessary redraw - if (me.dom.root) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; - } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - this.watchTimer = setInterval(this._onResize, 1000); - }; + var util = __webpack_require__(1); + var errorFound = false; + var allOptions = void 0; + var printStyle = 'background: #FFeeee; color: #dd0000'; /** - * Stop watching for a resize of the frame. - * @private + * Used to validate options. */ - Core.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; - } - // remove event listener on window.resize - if (this._onResize) { - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; + var Validator = function () { + function Validator() { + _classCallCheck(this, Validator); } - }; - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - this.touch.initialScrollTop = this.props.scrollTop; - }; + /** + * Main function to be called + * @param options + * @param subObject + * @returns {boolean} + */ - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onPinch = function (event) { - this.touch.allowDragging = false; - }; - /** - * Move the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onDrag = function (event) { - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; + _createClass(Validator, null, [{ + key: 'validate', + value: function validate(options, referenceOptions, subObject) { + errorFound = false; + allOptions = referenceOptions; + var usedOptions = referenceOptions; + if (subObject !== undefined) { + usedOptions = referenceOptions[subObject]; + } + Validator.parse(options, usedOptions, []); + return errorFound; + } - var delta = event.deltaY; + /** + * Will traverse an object recursively and check every value + * @param options + * @param referenceOptions + * @param path + */ - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + }, { + key: 'parse', + value: function parse(options, referenceOptions, path) { + for (var option in options) { + if (options.hasOwnProperty(option)) { + Validator.check(option, options, referenceOptions, path); + } + } + } - if (newScrollTop != oldScrollTop) { - this.emit("verticalDrag"); - } - }; + /** + * Check every value. If the value is an object, call the parse function on that object. + * @param option + * @param options + * @param referenceOptions + * @param path + */ - /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Core.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; - }; + }, { + key: 'check', + value: function check(option, options, referenceOptions, path) { + if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) { + Validator.getSuggestion(option, referenceOptions, path); + } else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) { + // __any__ is a wildcard. Any value is accepted and will be further analysed by reference. + if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) { + // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object. + Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path); + } else { + Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path); + } + } else { + // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field. + if (referenceOptions[option].__type__ !== undefined) { + // if this should be an object, we check if the correct type has been supplied to account for shorthand options. + Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path); + } else { + Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path); + } + } + } - /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Core.prototype._updateScrollTop = function () { - // recalculate the scrollTopMin - var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero - if (scrollTopMin != this.props.scrollTopMin) { - // in case of bottom orientation, change the scrollTop such that the contents - // do not move relative to the time axis at the bottom - if (this.options.orientation.item != 'top') { - this.props.scrollTop += scrollTopMin - this.props.scrollTopMin; + /** + * + * @param {String} option | the option property + * @param {Object} options | The supplied options object + * @param {Object} referenceOptions | The reference options containing all options and their allowed formats + * @param {String} referenceOption | Usually this is the same as option, except when handling an __any__ tag. + * @param {String} refOptionType | This is the type object from the reference options + * @param {Array} path | where in the object is the option + */ + + }, { + key: 'checkFields', + value: function checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) { + var optionType = Validator.getType(options[option]); + var refOptionType = refOptionObj[optionType]; + if (refOptionType !== undefined) { + // if the type is correct, we check if it is supposed to be one of a few select values + if (Validator.getType(refOptionType) === 'array') { + if (refOptionType.indexOf(options[option]) === -1) { + console.log('%cInvalid option detected in "' + option + '".' + ' Allowed values are:' + Validator.print(refOptionType) + ' not "' + options[option] + '". ' + Validator.printLocation(path, option), printStyle); + errorFound = true; + } else if (optionType === 'object' && referenceOption !== "__any__") { + path = util.copyAndExtendArray(path, option); + Validator.parse(options[option], referenceOptions[referenceOption], path); + } + } else if (optionType === 'object' && referenceOption !== "__any__") { + path = util.copyAndExtendArray(path, option); + Validator.parse(options[option], referenceOptions[referenceOption], path); + } + } else if (refOptionObj['any'] === undefined) { + // type of the field is incorrect and the field cannot be any + console.log('%cInvalid type received for "' + option + '". Expected: ' + Validator.print(Object.keys(refOptionObj)) + '. Received [' + optionType + '] "' + options[option] + '"' + Validator.printLocation(path, option), printStyle); + errorFound = true; + } } - this.props.scrollTopMin = scrollTopMin; - } + }, { + key: 'getType', + value: function getType(object) { + var type = typeof object === 'undefined' ? 'undefined' : _typeof(object); - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + if (type === 'object') { + if (object === null) { + return 'null'; + } + if (object instanceof Boolean) { + return 'boolean'; + } + if (object instanceof Number) { + return 'number'; + } + if (object instanceof String) { + return 'string'; + } + if (Array.isArray(object)) { + return 'array'; + } + if (object instanceof Date) { + return 'date'; + } + if (object.nodeType !== undefined) { + return 'dom'; + } + if (object._isAMomentObject === true) { + return 'moment'; + } + return 'object'; + } else if (type === 'number') { + return 'number'; + } else if (type === 'boolean') { + return 'boolean'; + } else if (type === 'string') { + return 'string'; + } else if (type === undefined) { + return 'undefined'; + } + return type; + } + }, { + key: 'getSuggestion', + value: function getSuggestion(option, options, path) { + var localSearch = Validator.findInOptions(option, options, path, false); + var globalSearch = Validator.findInOptions(option, allOptions, [], true); - return this.props.scrollTop; - }; + var localSearchThreshold = 8; + var globalSearchThreshold = 4; - /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private - */ - Core.prototype._getScrollTop = function () { - return this.props.scrollTop; - }; + if (localSearch.indexMatch !== undefined) { + console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was incomplete? Did you mean: "' + localSearch.indexMatch + '"?\n\n', printStyle); + } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) { + console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, ''), printStyle); + } else if (localSearch.distance <= localSearchThreshold) { + console.log('%cUnknown option detected: "' + option + '". Did you mean "' + localSearch.closestMatch + '"?' + Validator.printLocation(localSearch.path, option), printStyle); + } else { + console.log('%cUnknown option detected: "' + option + '". Did you mean one of these: ' + Validator.print(Object.keys(options)) + Validator.printLocation(path, option), printStyle); + } - /** - * Load a configurator - * @return {Object} - * @private - */ - Core.prototype._createConfigurator = function () { - throw new Error('Cannot invoke abstract method _createConfigurator'); - }; + errorFound = true; + } - module.exports = Core; + /** + * traverse the options in search for a match. + * @param option + * @param options + * @param path + * @param recursive + * @returns {{closestMatch: string, path: Array, distance: number}} + */ -/***/ }, -/* 28 */ -/***/ function(module, exports, __webpack_require__) { + }, { + key: 'findInOptions', + value: function findInOptions(option, options, path) { + var recursive = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - 'use strict'; + var min = 1e9; + var closestMatch = ''; + var closestMatchPath = []; + var lowerCaseOption = option.toLowerCase(); + var indexMatch = undefined; + for (var op in options) { + var distance = void 0; + if (options[op].__type__ !== undefined && recursive === true) { + var result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path, op)); + if (min > result.distance) { + closestMatch = result.closestMatch; + closestMatchPath = result.path; + min = result.distance; + indexMatch = result.indexMatch; + } + } else { + if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) { + indexMatch = op; + } + distance = Validator.levenshteinDistance(option, op); + if (min > distance) { + closestMatch = op; + closestMatchPath = util.copyArray(path); + min = distance; + } + } + } + return { closestMatch: closestMatch, path: closestMatchPath, distance: min, indexMatch: indexMatch }; + } + }, { + key: 'printLocation', + value: function printLocation(path, option) { + var prefix = arguments.length <= 2 || arguments[2] === undefined ? 'Problem value found at: \n' : arguments[2]; - var Hammer = __webpack_require__(20); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(8); - var DataView = __webpack_require__(10); - var TimeStep = __webpack_require__(29); - var Component = __webpack_require__(25); - var Group = __webpack_require__(30); - var BackgroundGroup = __webpack_require__(34); - var BoxItem = __webpack_require__(35); - var PointItem = __webpack_require__(36); - var RangeItem = __webpack_require__(32); - var BackgroundItem = __webpack_require__(37); + var str = '\n\n' + prefix + 'options = {\n'; + for (var i = 0; i < path.length; i++) { + for (var j = 0; j < i + 1; j++) { + str += ' '; + } + str += path[i] + ': {\n'; + } + for (var _j = 0; _j < path.length + 1; _j++) { + str += ' '; + } + str += option + '\n'; + for (var _i = 0; _i < path.length + 1; _i++) { + for (var _j2 = 0; _j2 < path.length - _i; _j2++) { + str += ' '; + } + str += '}\n'; + } + return str + '\n\n'; + } + }, { + key: 'print', + value: function print(options) { + return JSON.stringify(options).replace(/(\")|(\[)|(\])|(,"__type__")/g, "").replace(/(\,)/g, ', '); + } - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var BACKGROUND = '__background__'; // reserved group id for background items without group + // Compute the edit distance between the two given strings + // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript + /* + Copyright (c) 2011 Andrei Mackenzie + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ - /** - * An ItemSet holds a set of items and ranges which can be displayed in a - * range. The width is determined by the parent of the ItemSet, and the height - * is determined by the size of the items. - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See ItemSet.setOptions for the available options. - * @constructor ItemSet - * @extends Component - */ - function ItemSet(body, options) { - this.body = body; + }, { + key: 'levenshteinDistance', + value: function levenshteinDistance(a, b) { + if (a.length === 0) return b.length; + if (b.length === 0) return a.length; - this.defaultOptions = { - type: null, // 'box', 'point', 'range', 'background' - orientation: { - item: 'bottom' // item orientation: 'top' or 'bottom' - }, - align: 'auto', // alignment of box items - stack: true, - groupOrderSwap: function groupOrderSwap(fromGroup, toGroup, groups) { - var targetOrder = toGroup.order; - toGroup.order = fromGroup.order; - fromGroup.order = targetOrder; - }, - groupOrder: 'order', + var matrix = []; - selectable: true, - multiselect: false, - itemsAlwaysDraggable: false, + // increment along the first column of each row + var i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false - }, + // increment each column in the first row + var j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } - groupEditable: { - order: false, - add: false, - remove: false - }, + // Fill in the rest of the matrix + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) == a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution + Math.min(matrix[i][j - 1] + 1, // insertion + matrix[i - 1][j] + 1)); // deletion + } + } + } - snap: TimeStep.snap, + return matrix[b.length][a.length]; + } + }]); - onAdd: function onAdd(item, callback) { - callback(item); - }, - onUpdate: function onUpdate(item, callback) { - callback(item); - }, - onMove: function onMove(item, callback) { - callback(item); - }, - onRemove: function onRemove(item, callback) { - callback(item); - }, - onMoving: function onMoving(item, callback) { - callback(item); - }, - onAddGroup: function onAddGroup(item, callback) { - callback(item); - }, - onMoveGroup: function onMoveGroup(item, callback) { - callback(item); - }, - onRemoveGroup: function onRemoveGroup(item, callback) { - callback(item); - }, + return Validator; + }(); - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - } - }; + exports.default = Validator; + exports.printStyle = printStyle; - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: { start: 'Date', end: 'Date' } - }; + 'use strict'; - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(25); + var moment = __webpack_require__(2); + var Component = __webpack_require__(28); + var DateUtil = __webpack_require__(29); - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function add(event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function update(event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function remove(event, params, senderId) { - me._onRemove(params.items); - } - }; + /** + * @constructor Range + * A Range controls a numeric range with a start and end value. + * The Range adjusts the range based on mouse events or programmatic changes, + * and triggers events when the range is changing or has been changed. + * @param {{dom: Object, domProps: Object, emitter: Emitter}} body + * @param {Object} [options] See description at Range.setOptions + */ + function Range(body, options) { + var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); + this.start = now.clone().add(-3, 'days').valueOf(); // Number + this.end = now.clone().add(4, 'days').valueOf(); // Number - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function add(event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function update(event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function remove(event, params, senderId) { - me._onRemoveGroups(params.items); - } + this.body = body; + this.deltaDifference = 0; + this.scaleOffset = 0; + this.startToFront = false; + this.endToFront = true; + + // default options + this.defaultOptions = { + start: null, + end: null, + moment: moment, + direction: 'horizontal', // 'horizontal' or 'vertical' + moveable: true, + zoomable: true, + min: null, + max: null, + zoomMin: 10, // milliseconds + zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds }; + this.options = util.extend({}, this.defaultOptions); - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; + this.props = { + touch: {} + }; + this.animationTimer = null; - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw + // drag listeners for dragging + this.body.emitter.on('panstart', this._onDragStart.bind(this)); + this.body.emitter.on('panmove', this._onDrag.bind(this)); + this.body.emitter.on('panend', this._onDragEnd.bind(this)); - this.touchParams = {}; // stores properties while dragging - this.groupTouchParams = {}; - // create the HTML DOM + // mouse wheel for zooming + this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); - this._create(); + // pinch to zoom + this.body.emitter.on('touch', this._onTouch.bind(this)); + this.body.emitter.on('pinch', this._onPinch.bind(this)); this.setOptions(options); } - ItemSet.prototype = new Component(); + Range.prototype = new Component(); - // available item types will be registered here - ItemSet.types = { - background: BackgroundItem, - box: BoxItem, - range: RangeItem, - point: PointItem + /** + * Set options for the range controller + * @param {Object} options Available options: + * {Number | Date | String} start Start date for the range + * {Number | Date | String} end End date for the range + * {Number} min Minimum value for start + * {Number} max Maximum value for end + * {Number} zoomMin Set a minimum value for + * (end - start). + * {Number} zoomMax Set a maximum value for + * (end - start). + * {Boolean} moveable Enable moving of the range + * by dragging. True by default + * {Boolean} zoomable Enable zooming of the range + * by pinching/scrolling. True by default + */ + Range.prototype.setOptions = function (options) { + if (options) { + // copy the options that we know + var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'moment', 'activate', 'hiddenDates', 'zoomKey']; + util.selectiveExtend(fields, this.options, options); + + if ('start' in options || 'end' in options) { + // apply a new range. both start and end are optional + this.setRange(options.start, options.end); + } + } }; /** - * Create the HTML DOM for the ItemSet + * Test whether direction has a valid value + * @param {String} direction 'horizontal' or 'vertical' */ - ItemSet.prototype._create = function () { - var frame = document.createElement('div'); - frame.className = 'vis-itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; - - // create background panel - var background = document.createElement('div'); - background.className = 'vis-background'; - frame.appendChild(background); - this.dom.background = background; + function validateDirection(direction) { + if (direction != 'horizontal' && direction != 'vertical') { + throw new TypeError('Unknown direction "' + direction + '". ' + 'Choose "horizontal" or "vertical".'); + } + } - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'vis-foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; + /** + * Set a new start and end range + * @param {Date | Number | String} [start] + * @param {Date | Number | String} [end] + * @param {boolean | {duration: number, easingFunction: string}} [animation=false] + * If true (default), the range is animated + * smoothly to the new window. An object can be + * provided to specify duration and easing function. + * Default duration is 500 ms, and default easing + * function is 'easeInOutQuad'. + * @param {Boolean} [byUser=false] + * + */ + Range.prototype.setRange = function (start, end, animation, byUser) { + if (byUser !== true) { + byUser = false; + } + var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null; + var finalEnd = end != undefined ? util.convert(end, 'Date').valueOf() : null; + this._cancelAnimation(); - // create axis panel - var axis = document.createElement('div'); - axis.className = 'vis-axis'; - this.dom.axis = axis; + if (animation) { + // true or an Object + var me = this; + var initStart = this.start; + var initEnd = this.end; + var duration = (typeof animation === 'undefined' ? 'undefined' : _typeof(animation)) === 'object' && 'duration' in animation ? animation.duration : 500; + var easingName = (typeof animation === 'undefined' ? 'undefined' : _typeof(animation)) === 'object' && 'easingFunction' in animation ? animation.easingFunction : 'easeInOutQuad'; + var easingFunction = util.easingFunctions[easingName]; + if (!easingFunction) { + throw new Error('Unknown easing function ' + JSON.stringify(easingName) + '. ' + 'Choose from: ' + Object.keys(util.easingFunctions).join(', ')); + } - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'vis-labelset'; - this.dom.labelSet = labelSet; + var initTime = new Date().valueOf(); + var anyChanged = false; - // create ungrouped Group - this._updateUngrouped(); + var next = function next() { + if (!me.props.touch.dragging) { + var now = new Date().valueOf(); + var time = now - initTime; + var ease = easingFunction(time / duration); + var done = time > duration; + var s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease; + var e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease; - // create background Group - var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); - backgroundGroup.show(); - this.groups[BACKGROUND] = backgroundGroup; + changed = me._applyRange(s, e); + DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates); + anyChanged = anyChanged || changed; + if (changed) { + me.body.emitter.emit('rangechange', { start: new Date(me.start), end: new Date(me.end), byUser: byUser }); + } - // attach event listeners - // Note: we bind to the centerContainer for the case where the height - // of the center container is larger than of the ItemSet, so we - // can click in the empty area to create a new item or deselect an item. - this.hammer = new Hammer(this.body.dom.centerContainer); + if (done) { + if (anyChanged) { + me.body.emitter.emit('rangechanged', { start: new Date(me.start), end: new Date(me.end), byUser: byUser }); + } + } else { + // animate with as high as possible frame rate, leave 20 ms in between + // each to prevent the browser from blocking + me.animationTimer = setTimeout(next, 20); + } + } + }; - // drag items when selected - this.hammer.on('hammer.input', (function (event) { - if (event.isFirst) { - this._onTouch(event); + return next(); + } else { + var changed = this._applyRange(finalStart, finalEnd); + DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + if (changed) { + var params = { start: new Date(this.start), end: new Date(this.end), byUser: byUser }; + this.body.emitter.emit('rangechange', params); + this.body.emitter.emit('rangechanged', params); } - }).bind(this)); - this.hammer.on('panstart', this._onDragStart.bind(this)); - this.hammer.on('panmove', this._onDrag.bind(this)); - this.hammer.on('panend', this._onDragEnd.bind(this)); - this.hammer.get('pan').set({ threshold: 5, direction: 30 }); // 30 is ALL_DIRECTIONS in hammer. - - // single select (or unselect) when tapping an item - this.hammer.on('tap', this._onSelectItem.bind(this)); + } + }; - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('press', this._onMultiSelectItem.bind(this)); + /** + * Stop an animation + * @private + */ + Range.prototype._cancelAnimation = function () { + if (this.animationTimer) { + clearTimeout(this.animationTimer); + this.animationTimer = null; + } + }; - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); + /** + * Set a new start and end range. This method is the same as setRange, but + * does not trigger a range change and range changed event, and it returns + * true when the range is changed + * @param {Number} [start] + * @param {Number} [end] + * @return {Boolean} changed + * @private + */ + Range.prototype._applyRange = function (start, end) { + var newStart = start != null ? util.convert(start, 'Date').valueOf() : this.start, + newEnd = end != null ? util.convert(end, 'Date').valueOf() : this.end, + max = this.options.max != null ? util.convert(this.options.max, 'Date').valueOf() : null, + min = this.options.min != null ? util.convert(this.options.min, 'Date').valueOf() : null, + diff; - this.groupHammer = new Hammer(this.body.dom.leftContainer); - this.groupHammer.on('panstart', this._onGroupDragStart.bind(this)); - this.groupHammer.on('panmove', this._onGroupDrag.bind(this)); - this.groupHammer.on('panend', this._onGroupDragEnd.bind(this)); - this.groupHammer.get('pan').set({ threshold: 5, direction: 30 }); + // check for valid number + if (isNaN(newStart) || newStart === null) { + throw new Error('Invalid start "' + start + '"'); + } + if (isNaN(newEnd) || newEnd === null) { + throw new Error('Invalid end "' + end + '"'); + } - // attach to the DOM - this.show(); - }; + // prevent start < end + if (newEnd < newStart) { + newEnd = newStart; + } - /** - * Set options for the ItemSet. Existing options will be extended/overwritten. - * @param {Object} [options] The following options are available: - * {String} type - * Default type for the items. Choose from 'box' - * (default), 'point', 'range', or 'background'. - * The default style can be overwritten by - * individual items. - * {String} align - * Alignment for the items, only applicable for - * BoxItem. Choose 'center' (default), 'left', or - * 'right'. - * {String} orientation.item - * Orientation of the item set. Choose 'top' or - * 'bottom' (default). - * {Function} groupOrder - * A sorting function for ordering groups - * {Boolean} stack - * If true (default), items will be stacked on - * top of each other. - * {Number} margin.axis - * Margin between the axis and the items in pixels. - * Default is 20. - * {Number} margin.item.horizontal - * Horizontal margin between items in pixels. - * Default is 10. - * {Number} margin.item.vertical - * Vertical Margin between items in pixels. - * Default is 10. - * {Number} margin.item - * Margin between items in pixels in both horizontal - * and vertical direction. Default is 10. - * {Number} margin - * Set margin for both axis and items in pixels. - * {Boolean} selectable - * If true (default), items can be selected. - * {Boolean} multiselect - * If true, multiple items can be selected. - * False by default. - * {Boolean} editable - * Set all editable options to true or false - * {Boolean} editable.updateTime - * Allow dragging an item to an other moment in time - * {Boolean} editable.updateGroup - * Allow dragging an item to an other group - * {Boolean} editable.add - * Allow creating new items on double tap - * {Boolean} editable.remove - * Allow removing items by clicking the delete button - * top right of a selected item. - * {Function(item: Item, callback: Function)} onAdd - * Callback function triggered when an item is about to be added: - * when the user double taps an empty space in the Timeline. - * {Function(item: Item, callback: Function)} onUpdate - * Callback function fired when an item is about to be updated. - * This function typically has to show a dialog where the user - * change the item. If not implemented, nothing happens. - * {Function(item: Item, callback: Function)} onMove - * Fired when an item has been moved. If not implemented, - * the move action will be accepted. - * {Function(item: Item, callback: Function)} onRemove - * Fired when an item is about to be deleted. - * If not implemented, the item will be always removed. - */ - ItemSet.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - var fields = ['type', 'align', 'order', 'stack', 'selectable', 'multiselect', 'itemsAlwaysDraggable', 'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'hide', 'snap', 'groupOrderSwap']; - util.selectiveExtend(fields, this.options, options); + // prevent start < min + if (min !== null) { + if (newStart < min) { + diff = min - newStart; + newStart += diff; + newEnd += diff; - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom'; - } else if (typeof options.orientation === 'object' && 'item' in options.orientation) { - this.options.orientation.item = options.orientation.item; + // prevent end > max + if (max != null) { + if (newEnd > max) { + newEnd = max; + } } } + } - if ('margin' in options) { - if (typeof options.margin === 'number') { - this.options.margin.axis = options.margin; - this.options.margin.item.horizontal = options.margin; - this.options.margin.item.vertical = options.margin; - } else if (typeof options.margin === 'object') { - util.selectiveExtend(['axis'], this.options.margin, options.margin); - if ('item' in options.margin) { - if (typeof options.margin.item === 'number') { - this.options.margin.item.horizontal = options.margin.item; - this.options.margin.item.vertical = options.margin.item; - } else if (typeof options.margin.item === 'object') { - util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); - } + // prevent end > max + if (max !== null) { + if (newEnd > max) { + diff = newEnd - max; + newStart -= diff; + newEnd -= diff; + + // prevent start < min + if (min != null) { + if (newStart < min) { + newStart = min; } } } + } - if ('editable' in options) { - if (typeof options.editable === 'boolean') { - this.options.editable.updateTime = options.editable; - this.options.editable.updateGroup = options.editable; - this.options.editable.add = options.editable; - this.options.editable.remove = options.editable; - } else if (typeof options.editable === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); + // prevent (end-start) < zoomMin + if (this.options.zoomMin !== null) { + var zoomMin = parseFloat(this.options.zoomMin); + if (zoomMin < 0) { + zoomMin = 0; + } + if (newEnd - newStart < zoomMin) { + if (this.end - this.start === zoomMin && newStart > this.start && newEnd < this.end) { + // ignore this action, we are already zoomed to the minimum + newStart = this.start; + newEnd = this.end; + } else { + // zoom to the minimum + diff = zoomMin - (newEnd - newStart); + newStart -= diff / 2; + newEnd += diff / 2; } } + } - if ('groupEditable' in options) { - if (typeof options.groupEditable === 'boolean') { - this.options.groupEditable.order = options.groupEditable; - this.options.groupEditable.add = options.groupEditable; - this.options.groupEditable.remove = options.groupEditable; - } else if (typeof options.groupEditable === 'object') { - util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable); - } + // prevent (end-start) > zoomMax + if (this.options.zoomMax !== null) { + var zoomMax = parseFloat(this.options.zoomMax); + if (zoomMax < 0) { + zoomMax = 0; } - // callback functions - var addCallback = (function (name) { - var fn = options[name]; - if (fn) { - if (!(fn instanceof Function)) { - throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); - } - this.options[name] = fn; + if (newEnd - newStart > zoomMax) { + if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) { + // ignore this action, we are already zoomed to the maximum + newStart = this.start; + newEnd = this.end; + } else { + // zoom to the maximum + diff = newEnd - newStart - zoomMax; + newStart += diff / 2; + newEnd -= diff / 2; } - }).bind(this); - ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving', 'onAddGroup', 'onMoveGroup', 'onRemoveGroup'].forEach(addCallback); + } + } - // force the itemSet to refresh: options like orientation and margins may be changed - this.markDirty(); + var changed = this.start != newStart || this.end != newEnd; + + // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range) + if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) { + this.body.emitter.emit('checkRangedItems'); } + + this.start = newStart; + this.end = newEnd; + return changed; }; /** - * Mark the ItemSet dirty so it will refresh everything with next redraw. - * Optionally, all items can be marked as dirty and be refreshed. - * @param {{refreshItems: boolean}} [options] + * Retrieve the current range. + * @return {Object} An object with start and end properties */ - ItemSet.prototype.markDirty = function (options) { - this.groupIds = []; - this.stackDirty = true; - - if (options && options.refreshItems) { - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); - } + Range.prototype.getRange = function () { + return { + start: this.start, + end: this.end + }; }; /** - * Destroy the ItemSet + * Calculate the conversion offset and scale for current range, based on + * the provided width + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion */ - ItemSet.prototype.destroy = function () { - this.hide(); - this.setItems(null); - this.setGroups(null); - - this.hammer = null; - - this.body = null; - this.conversion = null; + Range.prototype.conversion = function (width, totalHidden) { + return Range.conversion(this.start, this.end, width, totalHidden); }; /** - * Hide the component from the DOM + * Static method to calculate the conversion offset and scale for a range, + * based on the provided start, end, and width + * @param {Number} start + * @param {Number} end + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion */ - ItemSet.prototype.hide = function () { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); + Range.conversion = function (start, end, width, totalHidden) { + if (totalHidden === undefined) { + totalHidden = 0; } - - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); + if (width != 0 && end - start != 0) { + return { + offset: start, + scale: width / (end - start - totalHidden) + }; + } else { + return { + offset: 0, + scale: 1 + }; } }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Start dragging horizontally or vertically + * @param {Event} event + * @private */ - ItemSet.prototype.show = function () { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + Range.prototype._onDragStart = function (event) { + this.deltaDifference = 0; + this.previousDelta = 0; - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); - } + // only allow dragging when configured as movable + if (!this.options.moveable) return; - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - this.body.dom.left.appendChild(this.dom.labelSet); + // only start dragging when the mouse is inside the current range + if (!this._isInsideRange(event)) return; + + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; + + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.dragging = true; + + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'move'; } }; /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {string[] | string} [ids] An array with zero or more id's of the items to be - * selected, or a single item id. If ids is undefined - * or an empty array, all items will be unselected. + * Perform dragging operation + * @param {Event} event + * @private */ - ItemSet.prototype.setSelection = function (ids) { - var i, ii, id, item; + Range.prototype._onDrag = function (event) { + if (!this.props.touch.dragging) return; - if (ids == undefined) ids = []; - if (!Array.isArray(ids)) ids = [ids]; + // only allow dragging when configured as movable + if (!this.options.moveable) return; - // unselect currently selected items - for (i = 0, ii = this.selection.length; i < ii; i++) { - id = this.selection[i]; - item = this.items[id]; - if (item) item.unselect(); - } + // TODO: this may be redundant in hammerjs2 + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - // select items - this.selection = []; - for (i = 0, ii = ids.length; i < ii; i++) { - id = ids[i]; - item = this.items[id]; - if (item) { - this.selection.push(id); - item.select(); - } + var direction = this.options.direction; + validateDirection(direction); + var delta = direction == 'horizontal' ? event.deltaX : event.deltaY; + delta -= this.deltaDifference; + var interval = this.props.touch.end - this.props.touch.start; + + // normalize dragging speed if cutout is in between. + var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + interval -= duration; + + var width = direction == 'horizontal' ? this.body.domProps.center.width : this.body.domProps.center.height; + var diffRange = -delta / width * interval; + var newStart = this.props.touch.start + diffRange; + var newEnd = this.props.touch.end + diffRange; + + // snapping times away from hidden zones + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.deltaDifference += delta; + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this._onDrag(event); + return; } + + this.previousDelta = delta; + this._applyRange(newStart, newEnd); + + var startDate = new Date(this.start); + var endDate = new Date(this.end); + + // fire a rangechange event + this.body.emitter.emit('rangechange', { + start: startDate, + end: endDate, + byUser: true + }); }; /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items + * Stop dragging operation + * @param {event} event + * @private */ - ItemSet.prototype.getSelection = function () { - return this.selection.concat([]); + Range.prototype._onDragEnd = function (event) { + if (!this.props.touch.dragging) return; + + // only allow dragging when configured as movable + if (!this.options.moveable) return; + + // TODO: this may be redundant in hammerjs2 + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; + + this.props.touch.dragging = false; + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'auto'; + } + + // fire a rangechanged event + this.body.emitter.emit('rangechanged', { + start: new Date(this.start), + end: new Date(this.end), + byUser: true + }); }; /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * Event handler for mouse wheel event, used to zoom + * Code from http://adomas.org/javascript-mouse-wheel/ + * @param {Event} event + * @private */ - ItemSet.prototype.getVisibleItems = function () { - var range = this.body.range.getRange(); - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); + Range.prototype._onMouseWheel = function (event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; + // only zoom when the mouse is inside the current range + if (!this._isInsideRange(event)) return; - // filter the "raw" set with visibleItems into a set which is really - // visible by pixels - for (var i = 0; i < rawVisibleItems.length; i++) { - var item = rawVisibleItems[i]; - // TODO: also check whether visible vertically - if (item.left < right && item.left + item.width > left) { - ids.push(item.id); - } - } + // only zoom when the according key is pressed and the zoomKey option is set + if (this.options.zoomKey && !event[this.options.zoomKey]) return; + + // retrieve delta + var delta = 0; + if (event.wheelDelta) { + /* IE/Opera. */ + delta = event.wheelDelta / 120; + } else if (event.detail) { + /* Mozilla case. */ + // In Mozilla, sign of delta is different than in IE. + // Also, delta is multiple of 3. + delta = -event.detail / 3; + } + + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { + // perform the zoom action. Delta is normally 1 or -1 + + // adjust a negative delta such that zooming in with delta 0.1 + // equals zooming out with a delta -0.1 + var scale; + if (delta < 0) { + scale = 1 - delta / 5; + } else { + scale = 1 / (1 + delta / 5); } + + // calculate center, the date to zoom around + var pointer = getPointer({ x: event.clientX, y: event.clientY }, this.body.dom.center); + var pointerDate = this._pointerToDate(pointer); + + this.zoom(scale, pointerDate, delta); } - return ids; + // Prevent default actions caused by mouse wheel + // (else the page and timeline both zoom and scroll) + event.preventDefault(); }; /** - * Deselect a selected item - * @param {String | Number} id + * Start of a touch gesture * @private */ - ItemSet.prototype._deselect = function (id) { - var selection = this.selection; - for (var i = 0, ii = selection.length; i < ii; i++) { - if (selection[i] == id) { - // non-strict comparison! - selection.splice(i, 1); - break; - } - } + Range.prototype._onTouch = function (event) { + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.allowDragging = true; + this.props.touch.center = null; + this.scaleOffset = 0; + this.deltaDifference = 0; }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Handle pinch event + * @param {Event} event + * @private */ - ItemSet.prototype.redraw = function () { - var margin = this.options.margin, - range = this.body.range, - asSize = util.option.asSize, - options = this.options, - orientation = options.orientation.item, - resized = false, - frame = this.dom.frame; + Range.prototype._onPinch = function (event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - // recalculate absolute position (before redrawing groups) - this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; - this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; + this.props.touch.allowDragging = false; - // update class name - frame.className = 'vis-itemset'; + if (!this.props.touch.center) { + this.props.touch.center = getPointer(event.center, this.body.dom.center); + } - // reorder the groups (if needed) - resized = this._orderGroups() || resized; + var scale = 1 / (event.scale + this.scaleOffset); + var centerDate = this._pointerToDate(this.props.touch.center); - // check whether zoomed (in that case we need to re-stack everything) - // TODO: would be nicer to get this as a trigger from Range - var visibleInterval = range.end - range.start; - var zoomed = visibleInterval != this.lastVisibleInterval || this.props.width != this.props.lastWidth; - if (zoomed) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.props.lastWidth = this.props.width; + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - var restack = this.stackDirty; - var firstGroup = this._firstGroup(); - var firstMargin = { - item: margin.item, - axis: margin.axis - }; - var nonFirstMargin = { - item: margin.item, - axis: margin.item.vertical / 2 - }; - var height = 0; - var minHeight = margin.axis + margin.item.vertical; - - // redraw the background group - this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); - - // redraw all regular groups - util.forEach(this.groups, function (group) { - var groupMargin = group == firstGroup ? firstMargin : nonFirstMargin; - var groupResized = group.redraw(range, groupMargin, restack); - resized = groupResized || resized; - height += group.height; - }); - height = Math.max(height, minHeight); - this.stackDirty = false; - - // update frame height - frame.style.height = asSize(height); + // calculate new start and end + var newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; + var newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; - // calculate actual size - this.props.width = frame.offsetWidth; - this.props.height = height; + // snapping times away from hidden zones + this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times + this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times - // reposition axis - this.dom.axis.style.top = asSize(orientation == 'top' ? this.body.domProps.top.height + this.body.domProps.border.top : this.body.domProps.top.height + this.body.domProps.centerContainer.height); - this.dom.axis.style.left = '0'; + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this.scaleOffset = 1 - event.scale; + newStart = safeStart; + newEnd = safeEnd; + } - // check if this component is resized - resized = this._isResized() || resized; + this.setRange(newStart, newEnd, false, true); - return resized; + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default }; /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup + * Test whether the mouse from a mouse event is inside the visible window, + * between the current start and end date + * @param {Object} event + * @return {boolean} Returns true when inside the visible window * @private */ - ItemSet.prototype._firstGroup = function () { - var firstGroupIndex = this.options.orientation.item == 'top' ? 0 : this.groupIds.length - 1; - var firstGroupId = this.groupIds[firstGroupIndex]; - var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; + Range.prototype._isInsideRange = function (event) { + // calculate the time where the mouse is, check whether inside + // and no scroll action should happen. + var clientX = event.center ? event.center.x : event.clientX; + var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer); + var time = this.body.util.toTime(x); - return firstGroup || null; + return time >= this.start && time <= this.end; }; /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected + * Helper function to calculate the center date for zooming + * @param {{x: Number, y: Number}} pointer + * @return {number} date + * @private */ - ItemSet.prototype._updateUngrouped = function () { - var ungrouped = this.groups[UNGROUPED]; - var background = this.groups[BACKGROUND]; - var item, itemId; + Range.prototype._pointerToDate = function (pointer) { + var conversion; + var direction = this.options.direction; - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; + validateDirection(direction); - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - item.parent && item.parent.remove(item); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - group && group.add(item) || item.hide(); - } - } - } + if (direction == 'horizontal') { + return this.body.util.toTime(pointer.x).valueOf(); } else { - // create a group holding all (unfiltered) items - if (!ungrouped) { - var id = null; - var data = null; - ungrouped = new Group(id, data, this); - this.groups[UNGROUPED] = ungrouped; - - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - ungrouped.add(item); - } - } - - ungrouped.show(); - } + var height = this.body.domProps.center.height; + conversion = this.conversion(height); + return pointer.y / conversion.scale + conversion.offset; } }; /** - * Get the element for the labelset - * @return {HTMLElement} labelSet + * Get the pointer location relative to the location of the dom element + * @param {{x: Number, y: Number}} touch + * @param {Element} element HTML DOM element + * @return {{x: Number, y: Number}} pointer + * @private */ - ItemSet.prototype.getLabelSet = function () { - return this.dom.labelSet; - }; + function getPointer(touch, element) { + return { + x: touch.x - util.getAbsoluteLeft(element), + y: touch.y - util.getAbsoluteTop(element) + }; + } /** - * Set items - * @param {vis.DataSet | null} items + * Zoom the range the given scale in or out. Start and end date will + * be adjusted, and the timeline will be redrawn. You can optionally give a + * date around which to zoom. + * For example, try scale = 0.9 or 1.1 + * @param {Number} scale Scaling factor. Values above 1 will zoom out, + * values below 1 will zoom in. + * @param {Number} [center] Value representing a date around which will + * be zoomed. */ - ItemSet.prototype.setItems = function (items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); + Range.prototype.zoom = function (scale, center, delta) { + // if centerDate is not provided, take it half between start Date and end Date + if (center == null) { + center = (this.start + this.end) / 2; } - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); + // calculate new start and end + var newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale; + var newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale; - // update the group holding all ungrouped items - this._updateUngrouped(); + // snapping times away from hidden zones + this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + newStart = safeStart; + newEnd = safeEnd; } - this.body.emitter.emit('_change', { queue: true }); + this.setRange(newStart, newEnd, false, true); + + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default }; /** - * Get the current items - * @returns {vis.DataSet | null} + * Move the range with a given delta to the left or right. Start and end + * value will be adjusted. For example, try delta = 0.1 or -0.1 + * @param {Number} delta Moving amount. Positive value will move right, + * negative value will move left */ - ItemSet.prototype.getItems = function () { - return this.itemsData; + Range.prototype.move = function (delta) { + // zoom start Date and end Date relative to the centerDate + var diff = this.end - this.start; + + // apply new values + var newStart = this.start + diff * delta; + var newEnd = this.end + diff * delta; + + // TODO: reckon with min and max range + + this.start = newStart; + this.end = newEnd; }; /** - * Set groups - * @param {vis.DataSet} groups + * Move the range to a new center point + * @param {Number} moveTo New center point of the range */ - ItemSet.prototype.setGroups = function (groups) { - var me = this, - ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.off(event, callback); - }); - - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } + Range.prototype.moveTo = function (moveTo) { + var center = (this.start + this.end) / 2; - // replace the dataset - if (!groups) { - this.groupsData = null; - } else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + var diff = center - moveTo; - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); + // calculate new start and end + var newStart = this.start - diff; + var newEnd = this.end - diff; - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } + this.setRange(newStart, newEnd); + }; - // update the group holding all ungrouped items - this._updateUngrouped(); + module.exports = Range; - // update the order of all items in each group - this._order(); +/***/ }, +/* 28 */ +/***/ function(module, exports) { - this.body.emitter.emit('_change', { queue: true }); - }; + "use strict"; /** - * Get the current groups - * @returns {vis.DataSet | null} groups + * Prototype for visual components + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] + * @param {Object} [options] */ - ItemSet.prototype.getGroups = function () { - return this.groupsData; - }; + function Component(body, options) { + this.options = null; + this.props = null; + } /** - * Remove an item by its id - * @param {String | Number} id + * Set options for the component. The new options will be merged into the + * current options. + * @param {Object} options */ - ItemSet.prototype.removeItem = function (id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(); - - if (item) { - // confirm deletion - this.options.onRemove(item, function (item) { - if (item) { - // remove by id here, it is possible that an item has no id defined - // itself, so better not delete by the item itself - dataset.remove(id); - } - }); + Component.prototype.setOptions = function (options) { + if (options) { + util.extend(this.options, options); } }; /** - * Get the time of an item based on it's data and options.type - * @param {Object} itemData - * @returns {string} Returns the type - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - ItemSet.prototype._getType = function (itemData) { - return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); + Component.prototype.redraw = function () { + // should be implemented by the component + return false; }; /** - * Get the group id for an item - * @param {Object} itemData - * @returns {string} Returns the groupId - * @private + * Destroy the component. Cleanup DOM and event listeners */ - ItemSet.prototype._getGroupId = function (itemData) { - var type = this._getType(itemData); - if (type == 'background' && itemData.group == undefined) { - return BACKGROUND; - } else { - return this.groupsData ? itemData.group : UNGROUPED; - } + Component.prototype.destroy = function () { + // should be implemented by the component }; /** - * Handle updated items - * @param {Number[]} ids + * Test whether the component is resized since the last time _isResized() was + * called. + * @return {Boolean} Returns true if the component is resized * @protected */ - ItemSet.prototype._onUpdate = function (ids) { - var me = this; + Component.prototype._isResized = function () { + var resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height; - ids.forEach((function (id) { - var itemData = me.itemsData.get(id, me.itemOptions); - var item = me.items[id]; - var type = me._getType(itemData); + this.props._previousWidth = this.props.width; + this.props._previousHeight = this.props.height; - var constructor = ItemSet.types[type]; - var selected; + return resized; + }; - if (item) { - // update item - if (!constructor || !(item instanceof constructor)) { - // item type has changed, delete the item and recreate it - selected = item.selected; // preserve selection of this item - me._removeItem(item); - item = null; - } else { - me._updateItem(item, itemData); - } - } + module.exports = Component; - if (!item) { - // create item - if (constructor) { - item = new constructor(itemData, me.conversion, me.options); - item.id = id; // TODO: not so nice setting id afterwards - me._addItem(item); - if (selected) { - this.selection.push(id); - item.select(); - } - } else if (type == 'rangeoverflow') { - // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day - throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + '.vis-item.vis-range .vis-item-content {overflow: visible;}'); - } else { - throw new TypeError('Unknown item type "' + type + '"'); - } - } - }).bind(this)); +/***/ }, +/* 29 */ +/***/ function(module, exports) { - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change', { queue: true }); - }; + "use strict"; /** - * Handle added items - * @param {Number[]} ids - * @protected + * used in Core to convert the options into a volatile variable + * + * @param {function} moment + * @param {Object} body + * @param {Array | Object} hiddenDates */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; + exports.convertHiddenOptions = function (moment, body, hiddenDates) { + if (hiddenDates && !Array.isArray(hiddenDates)) { + return exports.convertHiddenOptions(moment, body, [hiddenDates]); + } - /** - * Handle removed items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onRemove = function (ids) { - var count = 0; - var me = this; - ids.forEach(function (id) { - var item = me.items[id]; - if (item) { - count++; - me._removeItem(item); + body.hiddenDates = []; + if (hiddenDates) { + if (Array.isArray(hiddenDates) == true) { + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat === undefined) { + var dateItem = {}; + dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); + dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); + body.hiddenDates.push(dateItem); + } + } + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time } - }); - - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change', { queue: true }); } }; /** - * Update the order of item in all groups - * @private - */ - ItemSet.prototype._order = function () { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); - }; - - /** - * Handle updated groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onUpdateGroups = function (ids) { - this._onAddGroups(ids); - }; - - /** - * Handle changed groups (added or updated) - * @param {Number[]} ids - * @private + * create new entrees for the repeating hidden dates + * @param {function} moment + * @param {Object} body + * @param {Array | Object} hiddenDates */ - ItemSet.prototype._onAddGroups = function (ids) { - var me = this; + exports.updateHiddenDates = function (moment, body, hiddenDates) { + if (hiddenDates && !Array.isArray(hiddenDates)) { + return exports.updateHiddenDates(moment, body, [hiddenDates]); + } - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; + if (hiddenDates && body.domProps.centerContainer.width !== undefined) { + exports.convertHiddenOptions(moment, body, hiddenDates); - if (!group) { - // check for reserved ids - if (id == UNGROUPED || id == BACKGROUND) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } + var start = moment(body.range.start); + var end = moment(body.range.end); - var groupOptions = Object.create(me.options); - util.extend(groupOptions, { - height: null - }); + var totalRange = body.range.end - body.range.start; + var pixelTime = totalRange / body.domProps.centerContainer.width; - group = new Group(id, groupData, me); - me.groups[id] = group; + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat !== undefined) { + var startDate = moment(hiddenDates[i].start); + var endDate = moment(hiddenDates[i].end); - // add items with this groupId to the new group - for (var itemId in me.items) { - if (me.items.hasOwnProperty(itemId)) { - var item = me.items[itemId]; - if (item.data.group == id) { - group.add(item); - } + if (startDate._d == "Invalid Date") { + throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); + } + if (endDate._d == "Invalid Date") { + throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); } - } - group.order(); - group.show(); - } else { - // update group - group.setData(groupData); - } - }); + var duration = endDate - startDate; + if (duration >= 4 * pixelTime) { - this.body.emitter.emit('_change', { queue: true }); - }; + var offset = 0; + var runUntil = end.clone(); + switch (hiddenDates[i].repeat) { + case "daily": + // case of time + if (startDate.day() != endDate.day()) { + offset = 1; + } + startDate.dayOfYear(start.dayOfYear()); + startDate.year(start.year()); + startDate.subtract(7, 'days'); - /** - * Handle removed groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onRemoveGroups = function (ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; + endDate.dayOfYear(start.dayOfYear()); + endDate.year(start.year()); + endDate.subtract(7 - offset, 'days'); - if (group) { - group.hide(); - delete groups[id]; - } - }); + runUntil.add(1, 'weeks'); + break; + case "weekly": + var dayOffset = endDate.diff(startDate, 'days'); + var day = startDate.day(); - this.markDirty(); + // set the start date to the range.start + startDate.date(start.date()); + startDate.month(start.month()); + startDate.year(start.year()); + endDate = startDate.clone(); - this.body.emitter.emit('_change', { queue: true }); - }; + // force + startDate.day(day); + endDate.day(day); + endDate.add(dayOffset, 'days'); - /** - * Reorder the groups if needed - * @return {boolean} changed - * @private - */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); + startDate.subtract(1, 'weeks'); + endDate.subtract(1, 'weeks'); - var changed = !util.equalArray(groupIds, this.groupIds); - if (changed) { - // hide all groups, removes them from the DOM - var groups = this.groups; - groupIds.forEach(function (groupId) { - groups[groupId].hide(); - }); + runUntil.add(1, 'weeks'); + break; + case "monthly": + if (startDate.month() != endDate.month()) { + offset = 1; + } + startDate.month(start.month()); + startDate.year(start.year()); + startDate.subtract(1, 'months'); - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); + endDate.month(start.month()); + endDate.year(start.year()); + endDate.subtract(1, 'months'); + endDate.add(offset, 'months'); - this.groupIds = groupIds; - } + runUntil.add(1, 'months'); + break; + case "yearly": + if (startDate.year() != endDate.year()) { + offset = 1; + } + startDate.year(start.year()); + startDate.subtract(1, 'years'); + endDate.year(start.year()); + endDate.subtract(1, 'years'); + endDate.add(offset, 'years'); - return changed; - } else { - return false; + runUntil.add(1, 'years'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + while (startDate < runUntil) { + body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); + switch (hiddenDates[i].repeat) { + case "daily": + startDate.add(1, 'days'); + endDate.add(1, 'days'); + break; + case "weekly": + startDate.add(1, 'weeks'); + endDate.add(1, 'weeks'); + break; + case "monthly": + startDate.add(1, 'months'); + endDate.add(1, 'months'); + break; + case "yearly": + startDate.add(1, 'y'); + endDate.add(1, 'y'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + } + body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); + } + } + } + // remove duplicates, merge where possible + exports.removeDuplicates(body); + // ensure the new positions are not on hidden dates + var startHidden = exports.isHidden(body.range.start, body.hiddenDates); + var endHidden = exports.isHidden(body.range.end, body.hiddenDates); + var rangeStart = body.range.start; + var rangeEnd = body.range.end; + if (startHidden.hidden == true) { + rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1; + } + if (endHidden.hidden == true) { + rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1; + } + if (startHidden.hidden == true || endHidden.hidden == true) { + body.range._applyRange(rangeStart, rangeEnd); + } } }; /** - * Add a new item - * @param {Item} item - * @private - */ - ItemSet.prototype._addItem = function (item) { - this.items[item.id] = item; - - // add to group - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); - }; - - /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private + * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. + * Scales with N^2 + * @param body */ - ItemSet.prototype._updateItem = function (item, itemData) { - var oldGroupId = item.data.group; - var oldSubGroupId = item.data.subgroup; + exports.removeDuplicates = function (body) { + var hiddenDates = body.hiddenDates; + var safeDates = []; + for (var i = 0; i < hiddenDates.length; i++) { + for (var j = 0; j < hiddenDates.length; j++) { + if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { + // j inside i + if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[j].remove = true; + } + // j start inside i + else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { + hiddenDates[i].end = hiddenDates[j].end; + hiddenDates[j].remove = true; + } + // j end inside i + else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[i].start = hiddenDates[j].start; + hiddenDates[j].remove = true; + } + } + } + } - // update the items data (will redraw the item when displayed) - item.setData(itemData); + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].remove !== true) { + safeDates.push(hiddenDates[i]); + } + } - // update group - if (oldGroupId != item.data.group || oldSubGroupId != item.data.subgroup) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); + body.hiddenDates = safeDates; + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time + }; - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); + exports.printDates = function (dates) { + for (var i = 0; i < dates.length; i++) { + console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); } }; /** - * Delete an item from the ItemSet: remove it from the DOM, from the map - * with items, and from the map with visible items, and from the selection - * @param {Item} item - * @private + * Used in TimeStep to avoid the hidden times. + * @param {function} moment + * @param {TimeStep} timeStep + * @param previousTime */ - ItemSet.prototype._removeItem = function (item) { - // remove from DOM - item.hide(); - - // remove from items - delete this.items[item.id]; + exports.stepOverHiddenDates = function (moment, timeStep, previousTime) { + var stepInHidden = false; + var currentValue = timeStep.current.valueOf(); + for (var i = 0; i < timeStep.hiddenDates.length; i++) { + var startDate = timeStep.hiddenDates[i].start; + var endDate = timeStep.hiddenDates[i].end; + if (currentValue >= startDate && currentValue < endDate) { + stepInHidden = true; + break; + } + } - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); + if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { + var prevValue = moment(previousTime); + var newValue = moment(endDate); + //check if the next step should be major + if (prevValue.year() != newValue.year()) { + timeStep.switchedYear = true; + } else if (prevValue.month() != newValue.month()) { + timeStep.switchedMonth = true; + } else if (prevValue.dayOfYear() != newValue.dayOfYear()) { + timeStep.switchedDay = true; + } - // remove from group - item.parent && item.parent.remove(item); + timeStep.current = newValue; + } }; + ///** + // * Used in TimeStep to avoid the hidden times. + // * @param timeStep + // * @param previousTime + // */ + //exports.checkFirstStep = function(timeStep) { + // var stepInHidden = false; + // var currentValue = timeStep.current.valueOf(); + // for (var i = 0; i < timeStep.hiddenDates.length; i++) { + // var startDate = timeStep.hiddenDates[i].start; + // var endDate = timeStep.hiddenDates[i].end; + // if (currentValue >= startDate && currentValue < endDate) { + // stepInHidden = true; + // break; + // } + // } + // + // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { + // var newValue = moment(endDate); + // timeStep.current = newValue.toDate(); + // } + //}; + /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} - * @private + * replaces the Core toScreen methods + * @param Core + * @param time + * @param width + * @returns {number} */ - ItemSet.prototype._constructByEndArray = function (array) { - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof RangeItem) { - endArray.push(array[i]); + exports.toScreen = function (Core, time, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return (time.valueOf() - conversion.offset) * conversion.scale; + } else { + var hidden = exports.isHidden(time, Core.body.hiddenDates); + if (hidden.hidden == true) { + time = hidden.startDate; } + + var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time); + + var conversion = Core.range.conversion(width, duration); + return (time.valueOf() - conversion.offset) * conversion.scale; } - return endArray; }; /** - * Register the clicked item on touch, before dragStart is initiated. - * - * dragStart is initiated from a mousemove event, AFTER the mouse/touch is - * already moving. Therefore, the mouse/touch can sometimes be above an other - * DOM element than the item itself. - * - * @param {Event} event - * @private + * Replaces the core toTime methods + * @param body + * @param range + * @param x + * @param width + * @returns {Date} */ - ItemSet.prototype._onTouch = function (event) { - // store the touched item, used in _onDragStart - this.touchParams.item = this.itemFromTarget(event); - this.touchParams.dragLeftItem = event.target.dragLeftItem || false; - this.touchParams.dragRightItem = event.target.dragRightItem || false; - this.touchParams.itemProps = null; + exports.toTime = function (Core, x, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return new Date(x / conversion.scale + conversion.offset); + } else { + var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + var totalDuration = Core.range.end - Core.range.start - hiddenDuration; + var partialDuration = totalDuration * x / width; + var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); + + var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); + return newTime; + } }; /** - * Given an group id, returns the index it has. + * Support function * - * @param {Number} groupID - * @private + * @param hiddenDates + * @param range + * @returns {number} */ - ItemSet.prototype._getGroupIndex = function (groupId) { - for (var i = 0; i < this.groupIds.length; i++) { - if (groupId == this.groupIds[i]) return i; + exports.getHiddenDurationBetween = function (hiddenDates, start, end) { + var duration = 0; + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= start && endDate < end) { + duration += endDate - startDate; + } } + return duration; }; /** - * Start dragging the selected events - * @param {Event} event - * @private + * Support function + * @param moment + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} */ - ItemSet.prototype._onDragStart = function (event) { - var item = this.touchParams.item || null; - var me = this; - var props; + exports.correctTimeForHidden = function (moment, hiddenDates, range, time) { + time = moment(time).toDate().valueOf(); + time -= exports.getHiddenDurationBefore(moment, hiddenDates, range, time); + return time; + }; - if (item && (item.selected || this.options.itemsAlwaysDraggable)) { + exports.getHiddenDurationBefore = function (moment, hiddenDates, range, time) { + var timeOffset = 0; + time = moment(time).toDate().valueOf(); - if (!this.options.editable.updateTime && !this.options.editable.updateGroup && !item.editable) { - return; + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + if (time >= endDate) { + timeOffset += endDate - startDate; + } } + } + return timeOffset; + }; - // override options.editable - if (item.editable === false) { - return; + /** + * sum the duration from start to finish, including the hidden duration, + * until the required amount has been reached, return the accumulated hidden duration + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} + */ + exports.getAccumulatedHiddenDuration = function (hiddenDates, range, requiredDuration) { + var hiddenDuration = 0; + var duration = 0; + var previousPoint = range.start; + //exports.printDates(hiddenDates) + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + duration += startDate - previousPoint; + previousPoint = endDate; + if (duration >= requiredDuration) { + break; + } else { + hiddenDuration += endDate - startDate; + } } + } - var dragLeftItem = this.touchParams.dragLeftItem; - var dragRightItem = this.touchParams.dragRightItem; - - if (dragLeftItem) { - props = { - item: dragLeftItem, - initialX: event.center.x, - dragLeft: true, - data: this._cloneItemData(item.data) - }; - - this.touchParams.itemProps = [props]; - } else if (dragRightItem) { - props = { - item: dragRightItem, - initialX: event.center.x, - dragRight: true, - data: this._cloneItemData(item.data) - }; + return hiddenDuration; + }; - this.touchParams.itemProps = [props]; + /** + * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true + * @param hiddenDates + * @param time + * @param direction + * @param correctionEnabled + * @returns {*} + */ + exports.snapAwayFromHidden = function (hiddenDates, time, direction, correctionEnabled) { + var isHidden = exports.isHidden(time, hiddenDates); + if (isHidden.hidden == true) { + if (direction < 0) { + if (correctionEnabled == true) { + return isHidden.startDate - (isHidden.endDate - time) - 1; + } else { + return isHidden.startDate - 1; + } } else { - this.touchParams.selectedItem = item; - - var baseGroupIndex = this._getGroupIndex(item.data.group); - - var itemsToDrag = this.options.itemsAlwaysDraggable && !item.selected ? [item.id] : this.getSelection(); - - this.touchParams.itemProps = itemsToDrag.map((function (id) { - var item = me.items[id]; - var groupIndex = me._getGroupIndex(item.data.group); - return { - item: item, - initialX: event.center.x, - groupOffset: baseGroupIndex - groupIndex, - data: this._cloneItemData(item.data) - }; - }).bind(this)); + if (correctionEnabled == true) { + return isHidden.endDate + (time - isHidden.startDate) + 1; + } else { + return isHidden.endDate + 1; + } } - - event.stopPropagation(); - } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) { - // create a new range item when dragging with ctrl key down - this._onDragStartAddItem(event); + } else { + return time; } }; /** - * Start creating a new range item by dragging. - * @param {Event} event - * @private + * Check if a time is hidden + * + * @param time + * @param hiddenDates + * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} */ - ItemSet.prototype._onDragStartAddItem = function (event) { - var snap = this.options.snap || null; - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.center.x - xAbs - 10; // minus 10 to compensate for the drag starting as soon as you've moved 10px - var time = this.body.util.toTime(x); - var scale = this.body.util.getScale(); - var step = this.body.util.getStep(); - var start = snap ? snap(time, scale, step) : time; - var end = start; + exports.isHidden = function (time, hiddenDates) { + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; - var itemData = { - type: 'range', - start: start, - end: end, - content: 'new item' - }; + if (time >= startDate && time < endDate) { + // if the start is entering a hidden zone + return { hidden: true, startDate: startDate, endDate: endDate }; + break; + } + } + return { hidden: false, startDate: startDate, endDate: endDate }; + }; - var id = util.randomUUID(); - itemData[this.itemsData._fieldId] = id; +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { - var group = this.groupFromTarget(event); - if (group) { - itemData.group = group.groupId; - } + 'use strict'; - var newItem = new RangeItem(itemData, this.conversion, this.options); - newItem.id = id; // TODO: not so nice setting id afterwards - newItem.data = this._cloneItemData(itemData); - this._addItem(newItem); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - var props = { - item: newItem, - dragRight: true, - initialX: event.center.x, - data: newItem.data - }; - this.touchParams.itemProps = [props]; + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(22); + var hammerUtil = __webpack_require__(25); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var Range = __webpack_require__(27); + var ItemSet = __webpack_require__(31); + var TimeAxis = __webpack_require__(41); + var Activator = __webpack_require__(42); + var DateUtil = __webpack_require__(29); + var CustomTime = __webpack_require__(44); - event.stopPropagation(); - }; + /** + * Create a timeline visualization + * @constructor + */ + function Core() {} + + // turn Core into an event emitter + Emitter(Core.prototype); /** - * Drag selected items - * @param {Event} event - * @private + * Create the main DOM for the Core: a root panel containing left, right, + * top, bottom, content, and background panel. + * @param {Element} container The container element where the Core will + * be attached. + * @protected */ - ItemSet.prototype._onDrag = function (event) { - if (this.touchParams.itemProps) { - event.stopPropagation(); + Core.prototype._create = function (container) { + this.dom = {}; - var me = this; - var snap = this.options.snap || null; - var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; - var scale = this.body.util.getScale(); - var step = this.body.util.getStep(); + this.dom.container = container; - //only calculate the new group for the item that's actually dragged - var selectedItem = this.touchParams.selectedItem; - var updateGroupAllowed = me.options.editable.updateGroup; - var newGroupBase = null; - if (updateGroupAllowed && selectedItem) { - if (selectedItem.data.group != undefined) { - // drag from one group to another - var group = me.groupFromTarget(event); - if (group) { - //we know the offset for all items, so the new group for all items - //will be relative to this one. - newGroupBase = this._getGroupIndex(group.groupId); - } + this.dom.root = document.createElement('div'); + this.dom.background = document.createElement('div'); + this.dom.backgroundVertical = document.createElement('div'); + this.dom.backgroundHorizontal = document.createElement('div'); + this.dom.centerContainer = document.createElement('div'); + this.dom.leftContainer = document.createElement('div'); + this.dom.rightContainer = document.createElement('div'); + this.dom.center = document.createElement('div'); + this.dom.left = document.createElement('div'); + this.dom.right = document.createElement('div'); + this.dom.top = document.createElement('div'); + this.dom.bottom = document.createElement('div'); + this.dom.shadowTop = document.createElement('div'); + this.dom.shadowBottom = document.createElement('div'); + this.dom.shadowTopLeft = document.createElement('div'); + this.dom.shadowBottomLeft = document.createElement('div'); + this.dom.shadowTopRight = document.createElement('div'); + this.dom.shadowBottomRight = document.createElement('div'); + + this.dom.root.className = 'vis-timeline'; + this.dom.background.className = 'vis-panel vis-background'; + this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical'; + this.dom.backgroundHorizontal.className = 'vis-panel vis-background vis-horizontal'; + this.dom.centerContainer.className = 'vis-panel vis-center'; + this.dom.leftContainer.className = 'vis-panel vis-left'; + this.dom.rightContainer.className = 'vis-panel vis-right'; + this.dom.top.className = 'vis-panel vis-top'; + this.dom.bottom.className = 'vis-panel vis-bottom'; + this.dom.left.className = 'vis-content'; + this.dom.center.className = 'vis-content'; + this.dom.right.className = 'vis-content'; + this.dom.shadowTop.className = 'vis-shadow vis-top'; + this.dom.shadowBottom.className = 'vis-shadow vis-bottom'; + this.dom.shadowTopLeft.className = 'vis-shadow vis-top'; + this.dom.shadowBottomLeft.className = 'vis-shadow vis-bottom'; + this.dom.shadowTopRight.className = 'vis-shadow vis-top'; + this.dom.shadowBottomRight.className = 'vis-shadow vis-bottom'; + + this.dom.root.appendChild(this.dom.background); + this.dom.root.appendChild(this.dom.backgroundVertical); + this.dom.root.appendChild(this.dom.backgroundHorizontal); + this.dom.root.appendChild(this.dom.centerContainer); + this.dom.root.appendChild(this.dom.leftContainer); + this.dom.root.appendChild(this.dom.rightContainer); + this.dom.root.appendChild(this.dom.top); + this.dom.root.appendChild(this.dom.bottom); + + this.dom.centerContainer.appendChild(this.dom.center); + this.dom.leftContainer.appendChild(this.dom.left); + this.dom.rightContainer.appendChild(this.dom.right); + + this.dom.centerContainer.appendChild(this.dom.shadowTop); + this.dom.centerContainer.appendChild(this.dom.shadowBottom); + this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); + this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); + this.dom.rightContainer.appendChild(this.dom.shadowTopRight); + this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); + + this.on('rangechange', function () { + if (this.initialDrawDone === true) { + this._redraw(); // this allows overriding the _redraw method + } + }.bind(this)); + this.on('touch', this._onTouch.bind(this)); + this.on('pan', this._onDrag.bind(this)); + + var me = this; + this.on('_change', function (properties) { + if (properties && properties.queue == true) { + // redraw once on next tick + if (!me._redrawTimer) { + me._redrawTimer = setTimeout(function () { + me._redrawTimer = null; + me._redraw(); + }, 0); } + } else { + // redraw immediately + me._redraw(); } + }); - // move - this.touchParams.itemProps.forEach((function (props) { - var current = me.body.util.toTime(event.center.x - xOffset); - var initial = me.body.util.toTime(props.initialX - xOffset); - var offset = current - initial; // ms + // create event listeners for all interesting events, these events will be + // emitted via emitter + this.hammer = new Hammer(this.dom.root); + var pinchRecognizer = this.hammer.get('pinch').set({ enable: true }); + hammerUtil.disablePreventDefaultVertically(pinchRecognizer); + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); + this.listeners = {}; - var itemData = this._cloneItemData(props.item.data); // clone the data - if (props.item.editable === false) { - return; + var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend' + // TODO: cleanup + //'touch', 'pinch', + //'tap', 'doubletap', 'hold', + //'dragstart', 'drag', 'dragend', + //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox + ]; + events.forEach(function (type) { + var listener = function listener(event) { + if (me.isActive()) { + me.emit(type, event); } + }; + me.hammer.on(type, listener); + me.listeners[type] = listener; + }); - var updateTimeAllowed = me.options.editable.updateTime || props.item.editable === true; + // emulate a touch event (emitted before the start of a pan, pinch, tap, or press) + hammerUtil.onTouch(this.hammer, function (event) { + me.emit('touch', event); + }.bind(this)); - if (updateTimeAllowed) { - if (props.dragLeft) { - // drag left side of a range item - if (itemData.start != undefined) { - var initialStart = util.convert(props.data.start, 'Date'); - var start = new Date(initialStart.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - } - } else if (props.dragRight) { - // drag right side of a range item - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var end = new Date(initialEnd.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.end = snap ? snap(end, scale, step) : end; - } - } else { - // drag both start and end - if (itemData.start != undefined) { - var initialStart = util.convert(props.data.start, 'Date').valueOf(); - var start = new Date(initialStart + offset); + // emulate a release event (emitted after a pan, pinch, tap, or press) + hammerUtil.onRelease(this.hammer, function (event) { + me.emit('release', event); + }.bind(this)); - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var duration = initialEnd.valueOf() - initialStart.valueOf(); + function onMouseWheel(event) { + if (me.isActive()) { + me.emit('mousewheel', event); + } + } + this.dom.root.addEventListener('mousewheel', onMouseWheel); + this.dom.root.addEventListener('DOMMouseScroll', onMouseWheel); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - itemData.end = new Date(itemData.start.valueOf() + duration); - } else { - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - } - } + // size properties of each of the panels + this.props = { + root: {}, + background: {}, + centerContainer: {}, + leftContainer: {}, + rightContainer: {}, + center: {}, + left: {}, + right: {}, + top: {}, + bottom: {}, + border: {}, + scrollTop: 0, + scrollTopMin: 0 + }; + + this.customTimes = []; + + // store state information needed for touch events + this.touch = {}; + + this.redrawCount = 0; + this.initialDrawDone = false; + + // attach the root panel to the provided container + if (!container) throw new Error('No container provided'); + container.appendChild(this.dom.root); + }; + + /** + * Set options. Options will be passed to all components loaded in the Timeline. + * @param {Object} [options] + * {String} orientation + * Vertical orientation for the Timeline, + * can be 'bottom' (default) or 'top'. + * {String | Number} width + * Width for the timeline, a number in pixels or + * a css string like '1000px' or '75%'. '100%' by default. + * {String | Number} height + * Fixed height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. If undefined, + * The Timeline will automatically size such that + * its contents fit. + * {String | Number} minHeight + * Minimum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {String | Number} maxHeight + * Maximum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {Number | Date | String} start + * Start date for the visible window + * {Number | Date | String} end + * End date for the visible window + */ + Core.prototype.setOptions = function (options) { + if (options) { + // copy the known options + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment', 'throttleRedraw']; + util.selectiveExtend(fields, this.options, options); + + this.options.orientation = { item: undefined, axis: undefined }; + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation = { + item: options.orientation, + axis: options.orientation + }; + } else if (_typeof(options.orientation) === 'object') { + if ('item' in options.orientation) { + this.options.orientation.item = options.orientation.item; + } + if ('axis' in options.orientation) { + this.options.orientation.axis = options.orientation.axis; } } + } - var updateGroupAllowed = me.options.editable.updateGroup || props.item.editable === true; + if (this.options.orientation.axis === 'both') { + if (!this.timeAxis2) { + var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body); + timeAxis2.setOptions = function (options) { + var _options = options ? util.extend({}, options) : {}; + _options.orientation = 'top'; // override the orientation option, always top + TimeAxis.prototype.setOptions.call(timeAxis2, _options); + }; + this.components.push(timeAxis2); + } + } else { + if (this.timeAxis2) { + var index = this.components.indexOf(this.timeAxis2); + if (index !== -1) { + this.components.splice(index, 1); + } + this.timeAxis2.destroy(); + this.timeAxis2 = null; + } + } - if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) { - if (itemData.group != undefined) { - var newOffset = newGroupBase - props.groupOffset; + // if the graph2d's drawPoints is a function delegate the callback to the onRender property + if (typeof options.drawPoints == 'function') { + options.drawPoints = { + onRender: options.drawPoints + }; + } - //make sure we stay in bounds - newOffset = Math.max(0, newOffset); - newOffset = Math.min(me.groupIds.length - 1, newOffset); + if ('hiddenDates' in this.options) { + DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates); + } - itemData.group = me.groupIds[newOffset]; + if ('clickToUse' in options) { + if (options.clickToUse) { + if (!this.activator) { + this.activator = new Activator(this.dom.root); + } + } else { + if (this.activator) { + this.activator.destroy(); + delete this.activator; } } + } - // confirm moving the item - itemData = this._cloneItemData(itemData); // convert start and end to the correct type - me.options.onMoving(itemData, (function (itemData) { - if (itemData) { - props.item.setData(this._cloneItemData(itemData, 'Date')); - } - }).bind(this)); - }).bind(this)); + if ('showCustomTime' in options) { + throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); + } - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change'); + // enable/disable autoResize + this._initAutoResize(); } - }; - /** - * Move an item to another group - * @param {Item} item - * @param {String | Number} groupId - * @private - */ - ItemSet.prototype._moveToGroup = function (item, groupId) { - var group = this.groups[groupId]; - if (group && group.groupId != item.data.group) { - var oldGroup = item.parent; - oldGroup.remove(item); - oldGroup.order(); - group.add(item); - group.order(); + // propagate options to all components + this.components.forEach(function (component) { + return component.setOptions(options); + }); - item.data.group = group.groupId; + // enable/disable configure + if ('configure' in options) { + if (!this.configurator) { + this.configurator = this._createConfigurator(); + } + + this.configurator.setOptions(options.configure); + + // collect the settings of all components, and pass them to the configuration system + var appliedOptions = util.deepExtend({}, this.options); + this.components.forEach(function (component) { + util.deepExtend(appliedOptions, component.options); + }); + this.configurator.setModuleOptions({ global: appliedOptions }); + } + + // override redraw with a throttled version + if (!this._origRedraw) { + this._origRedraw = this._redraw.bind(this); + this._redraw = util.throttle(this._origRedraw, this.options.throttleRedraw); + } else { + // Not the initial run: redraw everything + this._redraw(); } }; /** - * End of dragging selected items - * @param {Event} event - * @private + * Returns true when the Timeline is active. + * @returns {boolean} */ - ItemSet.prototype._onDragEnd = function (event) { - if (this.touchParams.itemProps) { - event.stopPropagation(); - - var me = this; - var dataset = this.itemsData.getDataSet(); - var itemProps = this.touchParams.itemProps; - this.touchParams.itemProps = null; + Core.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; - itemProps.forEach((function (props) { - var id = props.item.id; - var exists = me.itemsData.get(id, me.itemOptions) != null; + /** + * Destroy the Core, clean up all DOM elements and event listeners. + */ + Core.prototype.destroy = function () { + // unbind datasets + this.setItems(null); + this.setGroups(null); - if (!exists) { - // add a new item - me.options.onAdd(props.item.data, function (itemData) { - me._removeItem(props.item); // remove temporary item - if (itemData) { - me.itemsData.getDataSet().add(itemData); - } + // remove all event listeners + this.off(); - // force re-stacking of all items next redraw - me.stackDirty = true; - me.body.emitter.emit('_change'); - }); - } else { - // update existing item - var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type - me.options.onMove(itemData, function (itemData) { - if (itemData) { - // apply changes - itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) - dataset.update(itemData); - } else { - // restore original values - props.item.setData(props.data); + // stop checking for changed size + this._stopAutoResize(); - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('_change'); - } - }); - } - }).bind(this)); + // remove from DOM + if (this.dom.root.parentNode) { + this.dom.root.parentNode.removeChild(this.dom.root); } - }; - - ItemSet.prototype._onGroupDragStart = function (event) { - if (this.options.groupEditable.order) { - this.groupTouchParams.group = this.groupFromTarget(event); + this.dom = null; - if (this.groupTouchParams.group) { - event.stopPropagation(); + // remove Activator + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } - this.groupTouchParams.originalOrder = this.groupsData.getIds({ - order: this.options.groupOrder - }); + // cleanup hammer touch events + for (var event in this.listeners) { + if (this.listeners.hasOwnProperty(event)) { + delete this.listeners[event]; } } - }; + this.listeners = null; + this.hammer = null; - ItemSet.prototype._onGroupDrag = function (event) { - if (this.options.groupEditable.order && this.groupTouchParams.group) { - event.stopPropagation(); + // give all components the opportunity to cleanup + this.components.forEach(function (component) { + return component.destroy(); + }); - // drag from one group to another - var group = this.groupFromTarget(event); + this.body = null; + }; - // try to avoid toggling when groups differ in height - if (group && group.height != this.groupTouchParams.group.height) { - var movingUp = group.top < this.groupTouchParams.group.top; - var clientY = event.center ? event.center.y : event.clientY; - var targetGroupTop = util.getAbsoluteTop(group.dom.foreground); - var draggedGroupHeight = this.groupTouchParams.group.height; - if (movingUp) { - // skip swapping the groups when the dragged group is not below clientY afterwards - if (targetGroupTop + draggedGroupHeight < clientY) { - return; - } - } else { - var targetGroupHeight = group.height; - // skip swapping the groups when the dragged group is not below clientY afterwards - if (targetGroupTop + targetGroupHeight - draggedGroupHeight > clientY) { - return; - } - } - } - - if (group && group != this.groupTouchParams.group) { - var groupsData = this.groupsData; - var targetGroup = groupsData.get(group.groupId); - var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); - - // switch groups - if (draggedGroup && targetGroup) { - this.options.groupOrderSwap(draggedGroup, targetGroup, this.groupsData); - this.groupsData.update(draggedGroup); - this.groupsData.update(targetGroup); - } - - // fetch current order of groups - var newOrder = this.groupsData.getIds({ - order: this.options.groupOrder - }); - - // in case of changes since _onGroupDragStart - if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) { - var groupsData = this.groupsData; - var origOrder = this.groupTouchParams.originalOrder; - var draggedId = this.groupTouchParams.group.groupId; - var numGroups = Math.min(origOrder.length, newOrder.length); - var curPos = 0; - var newOffset = 0; - var orgOffset = 0; - while (curPos < numGroups) { - // as long as the groups are where they should be step down along the groups order - while (curPos + newOffset < numGroups && curPos + orgOffset < numGroups && newOrder[curPos + newOffset] == origOrder[curPos + orgOffset]) { - curPos++; - } - - // all ok - if (curPos + newOffset >= numGroups) { - break; - } - - // not all ok - // if dragged group was move upwards everything below should have an offset - if (newOrder[curPos + newOffset] == draggedId) { - newOffset = 1; - continue; - } - // if dragged group was move downwards everything above should have an offset - else if (origOrder[curPos + orgOffset] == draggedId) { - orgOffset = 1; - continue; - } - // found a group (apart from dragged group) that has the wrong position -> switch with the - // group at the position where other one should be, fix index arrays and continue - else { - var slippedPosition = newOrder.indexOf(origOrder[curPos + orgOffset]); - var switchGroup = groupsData.get(newOrder[curPos + newOffset]); - var shouldBeGroup = groupsData.get(origOrder[curPos + orgOffset]); - this.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData); - groupsData.update(switchGroup); - groupsData.update(shouldBeGroup); - - var switchGroupId = newOrder[curPos + newOffset]; - newOrder[curPos + newOffset] = origOrder[curPos + orgOffset]; - newOrder[slippedPosition] = switchGroupId; + /** + * Set a custom time bar + * @param {Date} time + * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted. + */ + Core.prototype.setCustomTime = function (time, id) { + var customTimes = this.customTimes.filter(function (component) { + return id === component.options.id; + }); - curPos++; - } - } - } - } + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); } - }; - - ItemSet.prototype._onGroupDragEnd = function (event) { - if (this.options.groupEditable.order && this.groupTouchParams.group) { - event.stopPropagation(); - - // update existing group - var me = this; - var id = me.groupTouchParams.group.groupId; - var dataset = me.groupsData.getDataSet(); - var groupData = util.extend({}, dataset.get(id)); // clone the data - me.options.onMoveGroup(groupData, function (groupData) { - if (groupData) { - // apply changes - groupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined) - dataset.update(groupData); - } else { - - // fetch current order of groups - var newOrder = dataset.getIds({ - order: me.options.groupOrder - }); - - // restore original order - if (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) { - var origOrder = me.groupTouchParams.originalOrder; - var numGroups = Math.min(origOrder.length, newOrder.length); - var curPos = 0; - while (curPos < numGroups) { - // as long as the groups are where they should be step down along the groups order - while (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) { - curPos++; - } - - // all ok - if (curPos >= numGroups) { - break; - } - - // found a group that has the wrong position -> switch with the - // group at the position where other one should be, fix index arrays and continue - var slippedPosition = newOrder.indexOf(origOrder[curPos]); - var switchGroup = dataset.get(newOrder[curPos]); - var shouldBeGroup = dataset.get(origOrder[curPos]); - me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset); - groupsData.update(switchGroup); - groupsData.update(shouldBeGroup); - - var switchGroupId = newOrder[curPos]; - newOrder[curPos] = origOrder[curPos]; - newOrder[slippedPosition] = switchGroupId; - - curPos++; - } - } - } - }); - me.body.emitter.emit('groupDragged', { groupId: id }); + if (customTimes.length > 0) { + customTimes[0].setCustomTime(time); } }; /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private + * Retrieve the current custom time. + * @param {number} [id=undefined] Id of the custom time bar. + * @return {Date | undefined} customTime */ - ItemSet.prototype._onSelectItem = function (event) { - if (!this.options.selectable) return; - - var ctrlKey = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey); - var shiftKey = event.srcEvent && event.srcEvent.shiftKey; - if (ctrlKey || shiftKey) { - this._onMultiSelectItem(event); - return; - } - - var oldSelection = this.getSelection(); - - var item = this.itemFromTarget(event); - var selection = item ? [item.id] : []; - this.setSelection(selection); - - var newSelection = this.getSelection(); + Core.prototype.getCustomTime = function (id) { + var customTimes = this.customTimes.filter(function (component) { + return component.options.id === id; + }); - // emit a select event, - // except when old selection is empty and new selection is still empty - if (newSelection.length > 0 || oldSelection.length > 0) { - this.body.emitter.emit('select', { - items: newSelection, - event: event - }); + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); } + return customTimes[0].getCustomTime(); }; /** - * Handle creation and updates of an item on double tap - * @param event - * @private + * Set a custom title for the custom time bar. + * @param {String} [title] Custom title + * @param {number} [id=undefined] Id of the custom time bar. */ - ItemSet.prototype._onAddItem = function (event) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; - - var me = this; - var snap = this.options.snap || null; - var item = this.itemFromTarget(event); - - if (item) { - // update item - - // execute async handler to update the item (or cancel it) - var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset - this.options.onUpdate(itemData, function (itemData) { - if (itemData) { - me.itemsData.getDataSet().update(itemData); - } - }); - } else { - // add item - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.center.x - xAbs; - var start = this.body.util.toTime(x); - var scale = this.body.util.getScale(); - var step = this.body.util.getStep(); - - var newItemData = { - start: snap ? snap(start, scale, step) : start, - content: 'new item' - }; - - // when default type is a range, add a default end date to the new item - if (this.options.type === 'range') { - var end = this.body.util.toTime(x + this.props.width / 5); - newItemData.end = snap ? snap(end, scale, step) : end; - } - - newItemData[this.itemsData._fieldId] = util.randomUUID(); - - var group = this.groupFromTarget(event); - if (group) { - newItemData.group = group.groupId; - } + Core.prototype.setCustomTimeTitle = function (title, id) { + var customTimes = this.customTimes.filter(function (component) { + return component.options.id === id; + }); - // execute async handler to customize (or cancel) adding an item - newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type - this.options.onAdd(newItemData, function (item) { - if (item) { - me.itemsData.getDataSet().add(item); - // TODO: need to trigger a redraw? - } - }); + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + } + if (customTimes.length > 0) { + return customTimes[0].setCustomTitle(title); } }; /** - * Handle selecting/deselecting multiple items when holding an item + * Retrieve meta information from an event. + * Should be overridden by classes extending Core * @param {Event} event - * @private + * @return {Object} An object with related information. */ - ItemSet.prototype._onMultiSelectItem = function (event) { - if (!this.options.selectable) return; - - var item = this.itemFromTarget(event); - - if (item) { - // multi select items (if allowed) - - var selection = this.options.multiselect ? this.getSelection() // take current selection - : []; // deselect current selection - - var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false; - - if (shiftKey && this.options.multiselect) { - // select all items between the old selection and the tapped item - var itemGroup = this.itemsData.get(item.id).group; - - // when filtering get the group of the last selected item - var lastSelectedGroup = undefined; - if (this.options.multiselectPerGroup) { - if (selection.length > 0) { - lastSelectedGroup = this.itemsData.get(selection[0]).group; - } - } - - // determine the selection range - if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) { - selection.push(item.id); - } - var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); - - if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) { - // select all items within the selection range - selection = []; - for (var id in this.items) { - if (this.items.hasOwnProperty(id)) { - var _item = this.items[id]; - var start = _item.data.start; - var end = _item.data.end !== undefined ? _item.data.end : start; - - if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) { - selection.push(_item.id); // do not use id but item.id, id itself is stringified - } - } - } - } - } else { - // add/remove this item from the current selection - var index = selection.indexOf(item.id); - if (index == -1) { - // item is not yet selected -> select it - selection.push(item.id); - } else { - // item is already selected -> deselect it - selection.splice(index, 1); - } - } - - this.setSelection(selection); - - this.body.emitter.emit('select', { - items: this.getSelection(), - event: event - }); - } + Core.prototype.getEventProperties = function (event) { + return { event: event }; }; /** - * Calculate the time range of a list of items - * @param {Array.} itemsData - * @return {{min: Date, max: Date}} Returns the range of the provided items - * @private + * Add custom vertical bar + * @param {Date | String | Number} [time] A Date, unix timestamp, or + * ISO date string. Time point where + * the new bar should be placed. + * If not provided, `new Date()` will + * be used. + * @param {Number | String} [id=undefined] Id of the new bar. Optional + * @return {Number | String} Returns the id of the new bar */ - ItemSet._getItemRange = function (itemsData) { - var max = null; - var min = null; - - itemsData.forEach(function (data) { - if (min == null || data.start < min) { - min = data.start; - } + Core.prototype.addCustomTime = function (time, id) { + var timestamp = time !== undefined ? util.convert(time, 'Date').valueOf() : new Date(); - if (data.end != undefined) { - if (max == null || data.end > max) { - max = data.end; - } - } else { - if (max == null || data.start > max) { - max = data.start; - } - } + var exists = this.customTimes.some(function (customTime) { + return customTime.options.id === id; }); + if (exists) { + throw new Error('A custom time with id ' + JSON.stringify(id) + ' already exists'); + } - return { - min: min, - max: max - }; - }; + var customTime = new CustomTime(this.body, util.extend({}, this.options, { + time: timestamp, + id: id + })); - /** - * Find an item from an event target: - * searches for the attribute 'timeline-item' in the event target's element tree - * @param {Event} event - * @return {Item | null} item - */ - ItemSet.prototype.itemFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-item')) { - return target['timeline-item']; - } - target = target.parentNode; - } + this.customTimes.push(customTime); + this.components.push(customTime); + this._redraw(); - return null; + return id; }; /** - * Find the Group from an event target: - * searches for the attribute 'timeline-group' in the event target's element tree - * @param {Event} event - * @return {Group | null} group + * Remove previously added custom bar + * @param {int} id ID of the custom bar to be removed + * @return {boolean} True if the bar exists and is removed, false otherwise */ - ItemSet.prototype.groupFromTarget = function (event) { - var clientY = event.center ? event.center.y : event.clientY; - for (var i = 0; i < this.groupIds.length; i++) { - var groupId = this.groupIds[i]; - var group = this.groups[groupId]; - var foreground = group.dom.foreground; - var top = util.getAbsoluteTop(foreground); - if (clientY > top && clientY < top + foreground.offsetHeight) { - return group; - } + Core.prototype.removeCustomTime = function (id) { + var customTimes = this.customTimes.filter(function (bar) { + return bar.options.id === id; + }); - if (this.options.orientation.item === 'top') { - if (i === this.groupIds.length - 1 && clientY > top) { - return group; - } - } else { - if (i === 0 && clientY < top + foreground.offset) { - return group; - } - } + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); } - return null; + customTimes.forEach(function (customTime) { + this.customTimes.splice(this.customTimes.indexOf(customTime), 1); + this.components.splice(this.components.indexOf(customTime), 1); + customTime.destroy(); + }.bind(this)); }; /** - * Find the ItemSet from an event target: - * searches for the attribute 'timeline-itemset' in the event target's element tree - * @param {Event} event - * @return {ItemSet | null} item + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - ItemSet.itemSetFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; - } - - return null; + Core.prototype.getVisibleItems = function () { + return this.itemSet && this.itemSet.getVisibleItems() || []; }; /** - * Clone the data of an item, and "normalize" it: convert the start and end date - * to the type (Date, Moment, ...) configured in the DataSet. If not configured, - * start and end are converted to Date. - * @param {Object} itemData, typically `item.data` - * @param {string} [type] Optional Date type. If not provided, the type from the DataSet is taken - * @return {Object} The cloned object - * @private + * Set Core window such that it fits all items + * @param {Object} [options] Available options: + * `animation: boolean | {duration: number, easingFunction: string}` + * If true (default), the range is animated + * smoothly to the new window. An object can be + * provided to specify duration and easing function. + * Default duration is 500 ms, and default easing + * function is 'easeInOutQuad'. */ - ItemSet.prototype._cloneItemData = function (itemData, type) { - var clone = util.extend({}, itemData); + Core.prototype.fit = function (options) { + var range = this.getDataRange(); - if (!type) { - // convert start and end date to the type (Date, Moment, ...) configured in the DataSet - type = this.itemsData.getDataSet()._options.type; + // skip range set if there is no min and max date + if (range.min === null && range.max === null) { + return; } - if (clone.start != undefined) { - clone.start = util.convert(clone.start, type && type.start || 'Date'); - } - if (clone.end != undefined) { - clone.end = util.convert(clone.end, type && type.end || 'Date'); - } + // apply a margin of 1% left and right of the data + var interval = range.max - range.min; + var min = new Date(range.min.valueOf() - interval * 0.01); + var max = new Date(range.max.valueOf() + interval * 0.01); - return clone; + var animation = options && options.animation !== undefined ? options.animation : true; + this.range.setRange(min, max, animation); }; - module.exports = ItemSet; - -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var moment = __webpack_require__(2); - var DateUtil = __webpack_require__(26); - var util = __webpack_require__(1); + /** + * Calculate the data range of the items start and end dates + * @returns {{min: Date | null, max: Date | null}} + * @protected + */ + Core.prototype.getDataRange = function () { + // must be implemented by Timeline and Graph2d + throw new Error('Cannot invoke abstract method getDataRange'); + }; /** - * @constructor TimeStep - * The class TimeStep is an iterator for dates. You provide a start date and an - * end date. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. + * Set the visible window. Both parameters are optional, you can change only + * start or only end. Syntax: * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. + * TimeLine.setWindow(start, end) + * TimeLine.setWindow(start, end, options) + * TimeLine.setWindow(range) * - * Version: 1.2 + * Where start and end can be a Date, number, or string, and range is an + * object with properties start and end. * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * @param {Date | Number | String | Object} [start] Start date of visible window + * @param {Date | Number | String} [end] End date of visible window + * @param {Object} [options] Available options: + * `animation: boolean | {duration: number, easingFunction: string}` + * If true (default), the range is animated + * smoothly to the new window. An object can be + * provided to specify duration and easing function. + * Default duration is 500 ms, and default easing + * function is 'easeInOutQuad'. */ - function TimeStep(start, end, minimumStep, hiddenDates) { - this.moment = moment; - - // variables - this.current = this.moment(); - this._start = this.moment(); - this._end = this.moment(); - - this.autoScale = true; - this.scale = 'day'; - this.step = 1; - - // initialize the range - this.setRange(start, end, minimumStep); - - // hidden Dates options - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - if (Array.isArray(hiddenDates)) { - this.hiddenDates = hiddenDates; - } else if (hiddenDates != undefined) { - this.hiddenDates = [hiddenDates]; + Core.prototype.setWindow = function (start, end, options) { + var animation; + if (arguments.length == 1) { + var range = arguments[0]; + animation = range.animation !== undefined ? range.animation : true; + this.range.setRange(range.start, range.end, animation); } else { - this.hiddenDates = []; + animation = options && options.animation !== undefined ? options.animation : true; + this.range.setRange(start, end, animation); } + }; - this.format = TimeStep.FORMAT; // default formatting - } + /** + * Move the window such that given time is centered on screen. + * @param {Date | Number | String} time + * @param {Object} [options] Available options: + * `animation: boolean | {duration: number, easingFunction: string}` + * If true (default), the range is animated + * smoothly to the new window. An object can be + * provided to specify duration and easing function. + * Default duration is 500 ms, and default easing + * function is 'easeInOutQuad'. + */ + Core.prototype.moveTo = function (time, options) { + var interval = this.range.end - this.range.start; + var t = util.convert(time, 'Date').valueOf(); - // Time formatting - TimeStep.FORMAT = { - minorLabels: { - millisecond: 'SSS', - second: 's', - minute: 'HH:mm', - hour: 'HH:mm', - weekday: 'ddd D', - day: 'D', - month: 'MMM', - year: 'YYYY' - }, - majorLabels: { - millisecond: 'HH:mm:ss', - second: 'D MMMM HH:mm', - minute: 'ddd D MMMM', - hour: 'ddd D MMMM', - weekday: 'MMMM YYYY', - day: 'MMMM YYYY', - month: 'YYYY', - year: '' - } + var start = t - interval / 2; + var end = t + interval / 2; + var animation = options && options.animation !== undefined ? options.animation : true; + + this.range.setRange(start, end, animation); }; /** - * Set custom constructor function for moment. Can be used to set dates - * to UTC or to set a utcOffset. - * @param {function} moment + * Get the visible window + * @return {{start: Date, end: Date}} Visible range */ - TimeStep.prototype.setMoment = function (moment) { - this.moment = moment; - - // update the date properties, can have a new utcOffset - this.current = this.moment(this.current); - this._start = this.moment(this._start); - this._end = this.moment(this._end); + Core.prototype.getWindow = function () { + var range = this.range.getRange(); + return { + start: new Date(range.start), + end: new Date(range.end) + }; }; /** - * Set custom formatting for the minor an major labels of the TimeStep. - * Both `minorLabels` and `majorLabels` are an Object with properties: - * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'. - * @param {{minorLabels: Object, majorLabels: Object}} format + * Force a redraw. Can be overridden by implementations of Core + * + * Note: this function will be overridden on construction with a trottled version */ - TimeStep.prototype.setFormat = function (format) { - var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); - this.format = util.deepExtend(defaultFormat, format); + Core.prototype.redraw = function () { + this._redraw(); }; /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Date} [start] The start date and time. - * @param {Date} [end] The end date and time. - * @param {int} [minimumStep] Optional. Minimum step size in milliseconds + * Redraw for internal use. Redraws all components. See also the public + * method redraw. + * @protected */ - TimeStep.prototype.setRange = function (start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw "No legal start or end date in method setRange"; + Core.prototype._redraw = function () { + this.redrawCount++; + var resized = false; + var options = this.options; + var props = this.props; + var dom = this.dom; + + if (!dom || !dom.container || dom.container.clientWidth == 0) return; // when destroyed, or invisible + + DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + + // update class names + if (options.orientation == 'top') { + util.addClassName(dom.root, 'vis-top'); + util.removeClassName(dom.root, 'vis-bottom'); + } else { + util.removeClassName(dom.root, 'vis-top'); + util.addClassName(dom.root, 'vis-bottom'); } - this._start = start != undefined ? this.moment(start.valueOf()) : new Date(); - this._end = end != undefined ? this.moment(end.valueOf()) : new Date(); + // update root width and height options + dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); + dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); + dom.root.style.width = util.option.asSize(options.width, ''); - if (this.autoScale) { - this.setMinimumStep(minimumStep); + // calculate border widths + props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; + props.border.right = props.border.left; + props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; + props.border.bottom = props.border.top; + var borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight; + var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + + // workaround for a bug in IE: the clientWidth of an element with + // a height:0px and overflow:hidden is not calculated and always has value 0 + if (dom.centerContainer.clientHeight === 0) { + props.border.left = props.border.top; + props.border.right = props.border.left; + } + if (dom.root.clientHeight === 0) { + borderRootWidth = borderRootHeight; } - }; - /** - * Set the range iterator to the start date. - */ - TimeStep.prototype.start = function () { - this.current = this._start.clone(); - this.roundToMinor(); - }; + // calculate the heights. If any of the side panels is empty, we set the height to + // minus the border width, such that the border will be invisible + props.center.height = dom.center.offsetHeight; + props.left.height = dom.left.offsetHeight; + props.right.height = dom.right.offsetHeight; + props.top.height = dom.top.clientHeight || -props.border.top; + props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date - */ - TimeStep.prototype.roundToMinor = function () { - // round to floor - // IMPORTANT: we have no breaks in this switch! (this is no bug) - // noinspection FallThroughInSwitchStatementJS - switch (this.scale) { - case 'year': - this.current.year(this.step * Math.floor(this.current.year() / this.step)); - this.current.month(0); - case 'month': - this.current.date(1); - case 'day': // intentional fall through - case 'weekday': - this.current.hours(0); - case 'hour': - this.current.minutes(0); - case 'minute': - this.current.seconds(0); - case 'second': - this.current.milliseconds(0); - //case 'millisecond': // nothing to do for milliseconds + // TODO: compensate borders when any of the panels is empty. + + // apply auto height + // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) + var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); + var autoHeight = props.top.height + contentHeight + props.bottom.height + borderRootHeight + props.border.top + props.border.bottom; + dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); + + // calculate heights of the content panels + props.root.height = dom.root.offsetHeight; + props.background.height = props.root.height - borderRootHeight; + var containerHeight = props.root.height - props.top.height - props.bottom.height - borderRootHeight; + props.centerContainer.height = containerHeight; + props.leftContainer.height = containerHeight; + props.rightContainer.height = props.leftContainer.height; + + // calculate the widths of the panels + props.root.width = dom.root.offsetWidth; + props.background.width = props.root.width - borderRootWidth; + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.leftContainer.width = props.left.width; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + props.rightContainer.width = props.right.width; + var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; + props.center.width = centerWidth; + props.centerContainer.width = centerWidth; + props.top.width = centerWidth; + props.bottom.width = centerWidth; + + // resize the panels + dom.background.style.height = props.background.height + 'px'; + dom.backgroundVertical.style.height = props.background.height + 'px'; + dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; + dom.centerContainer.style.height = props.centerContainer.height + 'px'; + dom.leftContainer.style.height = props.leftContainer.height + 'px'; + dom.rightContainer.style.height = props.rightContainer.height + 'px'; + + dom.background.style.width = props.background.width + 'px'; + dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; + dom.backgroundHorizontal.style.width = props.background.width + 'px'; + dom.centerContainer.style.width = props.center.width + 'px'; + dom.top.style.width = props.top.width + 'px'; + dom.bottom.style.width = props.bottom.width + 'px'; + + // reposition the panels + dom.background.style.left = '0'; + dom.background.style.top = '0'; + dom.backgroundVertical.style.left = props.left.width + props.border.left + 'px'; + dom.backgroundVertical.style.top = '0'; + dom.backgroundHorizontal.style.left = '0'; + dom.backgroundHorizontal.style.top = props.top.height + 'px'; + dom.centerContainer.style.left = props.left.width + 'px'; + dom.centerContainer.style.top = props.top.height + 'px'; + dom.leftContainer.style.left = '0'; + dom.leftContainer.style.top = props.top.height + 'px'; + dom.rightContainer.style.left = props.left.width + props.center.width + 'px'; + dom.rightContainer.style.top = props.top.height + 'px'; + dom.top.style.left = props.left.width + 'px'; + dom.top.style.top = '0'; + dom.bottom.style.left = props.left.width + 'px'; + dom.bottom.style.top = props.top.height + props.centerContainer.height + 'px'; + + // update the scrollTop, feasible range for the offset can be changed + // when the height of the Core or of the contents of the center changed + this._updateScrollTop(); + + // reposition the scrollable contents + var offset = this.props.scrollTop; + if (options.orientation.item != 'top') { + offset += Math.max(this.props.centerContainer.height - this.props.center.height - this.props.border.top - this.props.border.bottom, 0); } + dom.center.style.left = '0'; + dom.center.style.top = offset + 'px'; + dom.left.style.left = '0'; + dom.left.style.top = offset + 'px'; + dom.right.style.left = '0'; + dom.right.style.top = offset + 'px'; - if (this.step != 1) { - // round down to the first minor value that is a multiple of the current step size - switch (this.scale) { - case 'millisecond': - this.current.subtract(this.current.milliseconds() % this.step, 'milliseconds');break; - case 'second': - this.current.subtract(this.current.seconds() % this.step, 'seconds');break; - case 'minute': - this.current.subtract(this.current.minutes() % this.step, 'minutes');break; - case 'hour': - this.current.subtract(this.current.hours() % this.step, 'hours');break; - case 'weekday': // intentional fall through - case 'day': - this.current.subtract((this.current.date() - 1) % this.step, 'day');break; - case 'month': - this.current.subtract(this.current.month() % this.step, 'month');break; - case 'year': - this.current.subtract(this.current.year() % this.step, 'year');break; - default: - break; + // show shadows when vertical scrolling is available + var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; + var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; + dom.shadowTop.style.visibility = visibilityTop; + dom.shadowBottom.style.visibility = visibilityBottom; + dom.shadowTopLeft.style.visibility = visibilityTop; + dom.shadowBottomLeft.style.visibility = visibilityBottom; + dom.shadowTopRight.style.visibility = visibilityTop; + dom.shadowBottomRight.style.visibility = visibilityBottom; + + // enable/disable vertical panning + var contentsOverflow = this.props.center.height > this.props.centerContainer.height; + this.hammer.get('pan').set({ + direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL + }); + + // redraw all components + this.components.forEach(function (component) { + resized = component.redraw() || resized; + }); + var MAX_REDRAW = 5; + if (resized) { + if (this.redrawCount < MAX_REDRAW) { + this.body.emitter.emit('_change'); + return; + } else { + console.log('WARNING: infinite loop in redraw?'); } + } else { + this.redrawCount = 0; } + this.initialDrawDone = true; + + //Emit public 'changed' event for UI updates, see issue #1592 + this.body.emitter.emit("changed"); }; - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - TimeStep.prototype.hasNext = function () { - return this.current.valueOf() <= this._end.valueOf(); + // TODO: deprecated since version 1.1.0, remove some day + Core.prototype.repaint = function () { + throw new Error('Function repaint is deprecated. Use redraw instead.'); }; /** - * Do the next step + * Set a current time. This can be used for example to ensure that a client's + * time is synchronized with a shared server time. + * Only applicable when option `showCurrentTime` is true. + * @param {Date | String | Number} time A Date, unix timestamp, or + * ISO date string. */ - TimeStep.prototype.next = function () { - var prev = this.current.valueOf(); - - // Two cases, needed to prevent issues with switching daylight savings - // (end of March and end of October) - if (this.current.month() < 6) { - switch (this.scale) { - case 'millisecond': - this.current.add(this.step, 'millisecond');break; - case 'second': - this.current.add(this.step, 'second');break; - case 'minute': - this.current.add(this.step, 'minute');break; - case 'hour': - this.current.add(this.step, 'hour'); - // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) - // TODO: is this still needed now we use the function of moment.js? - this.current.subtract(this.current.hours() % this.step, 'hour'); - break; - case 'weekday': // intentional fall through - case 'day': - this.current.add(this.step, 'day');break; - case 'month': - this.current.add(this.step, 'month');break; - case 'year': - this.current.add(this.step, 'year');break; - default: - break; - } - } else { - switch (this.scale) { - case 'millisecond': - this.current.add(this.step, 'millisecond');break; - case 'second': - this.current.add(this.step, 'second');break; - case 'minute': - this.current.add(this.step, 'minute');break; - case 'hour': - this.current.add(this.step, 'hour');break; - case 'weekday': // intentional fall through - case 'day': - this.current.add(this.step, 'day');break; - case 'month': - this.current.add(this.step, 'month');break; - case 'year': - this.current.add(this.step, 'year');break; - default: - break; - } + Core.prototype.setCurrentTime = function (time) { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); } - if (this.step != 1) { - // round down to the correct major value - switch (this.scale) { - case 'millisecond': - if (this.current.milliseconds() < this.step) this.current.milliseconds(0);break; - case 'second': - if (this.current.seconds() < this.step) this.current.seconds(0);break; - case 'minute': - if (this.current.minutes() < this.step) this.current.minutes(0);break; - case 'hour': - if (this.current.hours() < this.step) this.current.hours(0);break; - case 'weekday': // intentional fall through - case 'day': - if (this.current.date() < this.step + 1) this.current.date(1);break; - case 'month': - if (this.current.month() < this.step) this.current.month(0);break; - case 'year': - break; // nothing to do for year - default: - break; - } - } + this.currentTime.setCurrentTime(time); + }; - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = this._end.clone(); + /** + * Get the current time. + * Only applicable when option `showCurrentTime` is true. + * @return {Date} Returns the current time. + */ + Core.prototype.getCurrentTime = function () { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); } - DateUtil.stepOverHiddenDates(this.moment, this, prev); + return this.currentTime.getCurrentTime(); }; /** - * Get the current datetime - * @return {Moment} current The current date + * Convert a position on screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x + * @protected */ - TimeStep.prototype.getCurrent = function () { - return this.current; + // TODO: move this function to Range + Core.prototype._toTime = function (x) { + return DateUtil.toTime(this, x, this.props.center.width); }; /** - * Set a custom scale. Autoscaling will be disabled. - * For example setScale('minute', 5) will result - * in minor steps of 5 minutes, and major steps of an hour. - * - * @param {{scale: string, step: number}} params - * An object containing two properties: - * - A string 'scale'. Choose from 'millisecond', 'second', - * 'minute', 'hour', 'weekday', 'day', 'month', 'year'. - * - A number 'step'. A step size, by default 1. - * Choose for example 1, 2, 5, or 10. + * Convert a position on the global screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x + * @protected */ - TimeStep.prototype.setScale = function (params) { - if (params && typeof params.scale == 'string') { - this.scale = params.scale; - this.step = params.step > 0 ? params.step : 1; - this.autoScale = false; - } + // TODO: move this function to Range + Core.prototype._toGlobalTime = function (x) { + return DateUtil.toTime(this, x, this.props.root.width); + //var conversion = this.range.conversion(this.props.root.width); + //return new Date(x / conversion.scale + conversion.offset); }; /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true + * Convert a datetime (Date object) into a position on the screen + * @param {Date} time A date + * @return {int} x The position on the screen in pixels which corresponds + * with the given date. + * @protected */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; + // TODO: move this function to Range + Core.prototype._toScreen = function (time) { + return DateUtil.toScreen(this, time, this.props.center.width); }; /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - TimeStep.prototype.setMinimumStep = function (minimumStep) { - if (minimumStep == undefined) { - return; - } - - //var b = asc + ds; - - var stepYear = 1000 * 60 * 60 * 24 * 30 * 12; - var stepMonth = 1000 * 60 * 60 * 24 * 30; - var stepDay = 1000 * 60 * 60 * 24; - var stepHour = 1000 * 60 * 60; - var stepMinute = 1000 * 60; - var stepSecond = 1000; - var stepMillisecond = 1; + * Convert a datetime (Date object) into a position on the root + * This is used to get the pixel density estimate for the screen, not the center panel + * @param {Date} time A date + * @return {int} x The position on root in pixels which corresponds + * with the given date. + * @protected + */ + // TODO: move this function to Range + Core.prototype._toGlobalScreen = function (time) { + return DateUtil.toScreen(this, time, this.props.root.width); + //var conversion = this.range.conversion(this.props.root.width); + //return (time.valueOf() - conversion.offset) * conversion.scale; + }; - // find the smallest step that is larger than the provided minimumStep - if (stepYear * 1000 > minimumStep) { - this.scale = 'year';this.step = 1000; - } - if (stepYear * 500 > minimumStep) { - this.scale = 'year';this.step = 500; - } - if (stepYear * 100 > minimumStep) { - this.scale = 'year';this.step = 100; - } - if (stepYear * 50 > minimumStep) { - this.scale = 'year';this.step = 50; - } - if (stepYear * 10 > minimumStep) { - this.scale = 'year';this.step = 10; - } - if (stepYear * 5 > minimumStep) { - this.scale = 'year';this.step = 5; - } - if (stepYear > minimumStep) { - this.scale = 'year';this.step = 1; - } - if (stepMonth * 3 > minimumStep) { - this.scale = 'month';this.step = 3; - } - if (stepMonth > minimumStep) { - this.scale = 'month';this.step = 1; - } - if (stepDay * 5 > minimumStep) { - this.scale = 'day';this.step = 5; - } - if (stepDay * 2 > minimumStep) { - this.scale = 'day';this.step = 2; - } - if (stepDay > minimumStep) { - this.scale = 'day';this.step = 1; - } - if (stepDay / 2 > minimumStep) { - this.scale = 'weekday';this.step = 1; - } - if (stepHour * 4 > minimumStep) { - this.scale = 'hour';this.step = 4; - } - if (stepHour > minimumStep) { - this.scale = 'hour';this.step = 1; - } - if (stepMinute * 15 > minimumStep) { - this.scale = 'minute';this.step = 15; - } - if (stepMinute * 10 > minimumStep) { - this.scale = 'minute';this.step = 10; - } - if (stepMinute * 5 > minimumStep) { - this.scale = 'minute';this.step = 5; - } - if (stepMinute > minimumStep) { - this.scale = 'minute';this.step = 1; - } - if (stepSecond * 15 > minimumStep) { - this.scale = 'second';this.step = 15; - } - if (stepSecond * 10 > minimumStep) { - this.scale = 'second';this.step = 10; - } - if (stepSecond * 5 > minimumStep) { - this.scale = 'second';this.step = 5; - } - if (stepSecond > minimumStep) { - this.scale = 'second';this.step = 1; - } - if (stepMillisecond * 200 > minimumStep) { - this.scale = 'millisecond';this.step = 200; - } - if (stepMillisecond * 100 > minimumStep) { - this.scale = 'millisecond';this.step = 100; - } - if (stepMillisecond * 50 > minimumStep) { - this.scale = 'millisecond';this.step = 50; - } - if (stepMillisecond * 10 > minimumStep) { - this.scale = 'millisecond';this.step = 10; - } - if (stepMillisecond * 5 > minimumStep) { - this.scale = 'millisecond';this.step = 5; - } - if (stepMillisecond > minimumStep) { - this.scale = 'millisecond';this.step = 1; + /** + * Initialize watching when option autoResize is true + * @private + */ + Core.prototype._initAutoResize = function () { + if (this.options.autoResize == true) { + this._startAutoResize(); + } else { + this._stopAutoResize(); } }; /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * Static function - * @param {Date} date the date to be snapped. - * @param {string} scale Current scale, can be 'millisecond', 'second', - * 'minute', 'hour', 'weekday, 'day', 'month', 'year'. - * @param {number} step Current step (1, 2, 4, 5, ... - * @return {Date} snappedDate + * Watch for changes in the size of the container. On resize, the Panel will + * automatically redraw itself. + * @private */ - TimeStep.snap = function (date, scale, step) { - var clone = moment(date); + Core.prototype._startAutoResize = function () { + var me = this; - if (scale == 'year') { - var year = clone.year() + Math.round(clone.month() / 12); - clone.year(Math.round(year / step) * step); - clone.month(0); - clone.date(0); - clone.hours(0); - clone.minutes(0); - clone.seconds(0); - clone.milliseconds(0); - } else if (scale == 'month') { - if (clone.date() > 15) { - clone.date(1); - clone.add(1, 'month'); - // important: first set Date to 1, after that change the month. - } else { - clone.date(1); - } + this._stopAutoResize(); - clone.hours(0); - clone.minutes(0); - clone.seconds(0); - clone.milliseconds(0); - } else if (scale == 'day') { - //noinspection FallthroughInSwitchStatementJS - switch (step) { - case 5: - case 2: - clone.hours(Math.round(clone.hours() / 24) * 24);break; - default: - clone.hours(Math.round(clone.hours() / 12) * 12);break; - } - clone.minutes(0); - clone.seconds(0); - clone.milliseconds(0); - } else if (scale == 'weekday') { - //noinspection FallthroughInSwitchStatementJS - switch (step) { - case 5: - case 2: - clone.hours(Math.round(clone.hours() / 12) * 12);break; - default: - clone.hours(Math.round(clone.hours() / 6) * 6);break; - } - clone.minutes(0); - clone.seconds(0); - clone.milliseconds(0); - } else if (scale == 'hour') { - switch (step) { - case 4: - clone.minutes(Math.round(clone.minutes() / 60) * 60);break; - default: - clone.minutes(Math.round(clone.minutes() / 30) * 30);break; - } - clone.seconds(0); - clone.milliseconds(0); - } else if (scale == 'minute') { - //noinspection FallthroughInSwitchStatementJS - switch (step) { - case 15: - case 10: - clone.minutes(Math.round(clone.minutes() / 5) * 5); - clone.seconds(0); - break; - case 5: - clone.seconds(Math.round(clone.seconds() / 60) * 60);break; - default: - clone.seconds(Math.round(clone.seconds() / 30) * 30);break; + this._onResize = function () { + if (me.options.autoResize != true) { + // stop watching when the option autoResize is changed to false + me._stopAutoResize(); + return; } - clone.milliseconds(0); - } else if (scale == 'second') { - //noinspection FallthroughInSwitchStatementJS - switch (step) { - case 15: - case 10: - clone.seconds(Math.round(clone.seconds() / 5) * 5); - clone.milliseconds(0); - break; - case 5: - clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000);break; - default: - clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500);break; + + if (me.dom.root) { + // check whether the frame is resized + // Note: we compare offsetWidth here, not clientWidth. For some reason, + // IE does not restore the clientWidth from 0 to the actual width after + // changing the timeline's container display style from none to visible + if (me.dom.root.offsetWidth != me.props.lastWidth || me.dom.root.offsetHeight != me.props.lastHeight) { + me.props.lastWidth = me.dom.root.offsetWidth; + me.props.lastHeight = me.dom.root.offsetHeight; + + me.body.emitter.emit('_change'); + } } - } else if (scale == 'millisecond') { - var _step = step > 5 ? step / 2 : 1; - clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step); + }; + + // add event listener to window resize + util.addEventListener(window, 'resize', this._onResize); + + //Prevent initial unnecessary redraw + if (me.dom.root) { + me.props.lastWidth = me.dom.root.offsetWidth; + me.props.lastHeight = me.dom.root.offsetHeight; } - return clone; + this.watchTimer = setInterval(this._onResize, 1000); }; /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Stop watching for a resize of the frame. + * @private */ - TimeStep.prototype.isMajor = function () { - if (this.switchedYear == true) { - this.switchedYear = false; - switch (this.scale) { - case 'year': - case 'month': - case 'weekday': - case 'day': - case 'hour': - case 'minute': - case 'second': - case 'millisecond': - return true; - default: - return false; - } - } else if (this.switchedMonth == true) { - this.switchedMonth = false; - switch (this.scale) { - case 'weekday': - case 'day': - case 'hour': - case 'minute': - case 'second': - case 'millisecond': - return true; - default: - return false; - } - } else if (this.switchedDay == true) { - this.switchedDay = false; - switch (this.scale) { - case 'millisecond': - case 'second': - case 'minute': - case 'hour': - return true; - default: - return false; - } + Core.prototype._stopAutoResize = function () { + if (this.watchTimer) { + clearInterval(this.watchTimer); + this.watchTimer = undefined; } - var date = this.moment(this.current); - switch (this.scale) { - case 'millisecond': - return date.milliseconds() == 0; - case 'second': - return date.seconds() == 0; - case 'minute': - return date.hours() == 0 && date.minutes() == 0; - case 'hour': - return date.hours() == 0; - case 'weekday': // intentional fall through - case 'day': - return date.date() == 1; - case 'month': - return date.month() == 0; - case 'year': - return false; - default: - return false; + // remove event listener on window.resize + if (this._onResize) { + util.removeEventListener(window, 'resize', this._onResize); + this._onResize = null; } }; /** - * Returns formatted text for the minor axislabel, depending on the current - * date and the scale. For example when scale is MINUTE, the current time is - * formatted as "hh:mm". - * @param {Date} [date] custom date. if not provided, current date is taken + * Start moving the timeline vertically + * @param {Event} event + * @private */ - TimeStep.prototype.getLabelMinor = function (date) { - if (date == undefined) { - date = this.current; - } - - var format = this.format.minorLabels[this.scale]; - return format && format.length > 0 ? this.moment(date).format(format) : ''; + Core.prototype._onTouch = function (event) { + this.touch.allowDragging = true; + this.touch.initialScrollTop = this.props.scrollTop; }; /** - * Returns formatted text for the major axis label, depending on the current - * date and the scale. For example when scale is MINUTE, the major scale is - * hours, and the hour will be formatted as "hh". - * @param {Date} [date] custom date. if not provided, current date is taken + * Start moving the timeline vertically + * @param {Event} event + * @private */ - TimeStep.prototype.getLabelMajor = function (date) { - if (date == undefined) { - date = this.current; - } - - var format = this.format.majorLabels[this.scale]; - return format && format.length > 0 ? this.moment(date).format(format) : ''; + Core.prototype._onPinch = function (event) { + this.touch.allowDragging = false; }; - TimeStep.prototype.getClassName = function () { - var _moment = this.moment; - var m = this.moment(this.current); - var current = m.locale ? m.locale('en') : m.lang('en'); // old versions of moment have .lang() function - var step = this.step; + /** + * Move the timeline vertically + * @param {Event} event + * @private + */ + Core.prototype._onDrag = function (event) { + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.touch.allowDragging) return; - function even(value) { - return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; - } + var delta = event.deltaY; - function today(date) { - if (date.isSame(new Date(), 'day')) { - return ' vis-today'; - } - if (date.isSame(_moment().add(1, 'day'), 'day')) { - return ' vis-tomorrow'; - } - if (date.isSame(_moment().add(-1, 'day'), 'day')) { - return ' vis-yesterday'; - } - return ''; - } + var oldScrollTop = this._getScrollTop(); + var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); - function currentWeek(date) { - return date.isSame(new Date(), 'week') ? ' vis-current-week' : ''; + if (newScrollTop != oldScrollTop) { + this.emit("verticalDrag"); } + }; - function currentMonth(date) { - return date.isSame(new Date(), 'month') ? ' vis-current-month' : ''; - } + /** + * Apply a scrollTop + * @param {Number} scrollTop + * @returns {Number} scrollTop Returns the applied scrollTop + * @private + */ + Core.prototype._setScrollTop = function (scrollTop) { + this.props.scrollTop = scrollTop; + this._updateScrollTop(); + return this.props.scrollTop; + }; - function currentYear(date) { - return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; + /** + * Update the current scrollTop when the height of the containers has been changed + * @returns {Number} scrollTop Returns the applied scrollTop + * @private + */ + Core.prototype._updateScrollTop = function () { + // recalculate the scrollTopMin + var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero + if (scrollTopMin != this.props.scrollTopMin) { + // in case of bottom orientation, change the scrollTop such that the contents + // do not move relative to the time axis at the bottom + if (this.options.orientation.item != 'top') { + this.props.scrollTop += scrollTopMin - this.props.scrollTopMin; + } + this.props.scrollTopMin = scrollTopMin; } - switch (this.scale) { - case 'millisecond': - return even(current.milliseconds()).trim(); - - case 'second': - return even(current.seconds()).trim(); - - case 'minute': - return even(current.minutes()).trim(); - - case 'hour': - var hours = current.hours(); - if (this.step == 4) { - hours = hours + '-h' + (hours + 4); - } - return 'vis-h' + hours + today(current) + even(current.hours()); - - case 'weekday': - return 'vis-' + current.format('dddd').toLowerCase() + today(current) + currentWeek(current) + even(current.date()); - - case 'day': - var day = current.date(); - var month = current.format('MMMM').toLowerCase(); - return 'vis-day' + day + ' vis-' + month + currentMonth(current) + even(day - 1); + // limit the scrollTop to the feasible scroll range + if (this.props.scrollTop > 0) this.props.scrollTop = 0; + if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; - case 'month': - return 'vis-' + current.format('MMMM').toLowerCase() + currentMonth(current) + even(current.month()); + return this.props.scrollTop; + }; - case 'year': - var year = current.year(); - return 'vis-year' + year + currentYear(current) + even(year); + /** + * Get the current scrollTop + * @returns {number} scrollTop + * @private + */ + Core.prototype._getScrollTop = function () { + return this.props.scrollTop; + }; - default: - return ''; - } + /** + * Load a configurator + * @return {Object} + * @private + */ + Core.prototype._createConfigurator = function () { + throw new Error('Cannot invoke abstract method _createConfigurator'); }; - module.exports = TimeStep; + module.exports = Core; /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var Hammer = __webpack_require__(22); var util = __webpack_require__(1); - var stack = __webpack_require__(31); - var RangeItem = __webpack_require__(32); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var TimeStep = __webpack_require__(32); + var Component = __webpack_require__(28); + var Group = __webpack_require__(33); + var BackgroundGroup = __webpack_require__(37); + var BoxItem = __webpack_require__(38); + var PointItem = __webpack_require__(39); + var RangeItem = __webpack_require__(35); + var BackgroundItem = __webpack_require__(40); + + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + var BACKGROUND = '__background__'; // reserved group id for background items without group /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet + * An ItemSet holds a set of items and ranges which can be displayed in a + * range. The width is determined by the parent of the ItemSet, and the height + * is determined by the size of the items. + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See ItemSet.setOptions for the available options. + * @constructor ItemSet + * @extends Component */ - function Group(groupId, data, itemSet) { - this.groupId = groupId; - this.subgroups = {}; - this.subgroupIndex = 0; - this.subgroupOrderer = data && data.subgroupOrder; - this.itemSet = itemSet; - - this.dom = {}; - this.props = { - label: { - width: 0, - height: 0 - } - }; - this.className = null; + function ItemSet(body, options) { + this.body = body; - this.items = {}; // items filtered by groupId of this group - this.visibleItems = []; // items currently visible in window - this.orderedItems = { - byStart: [], - byEnd: [] + this.defaultOptions = { + type: null, // 'box', 'point', 'range', 'background' + orientation: { + item: 'bottom' // item orientation: 'top' or 'bottom' + }, + align: 'auto', // alignment of box items + stack: true, + groupOrderSwap: function groupOrderSwap(fromGroup, toGroup, groups) { + var targetOrder = toGroup.order; + toGroup.order = fromGroup.order; + fromGroup.order = targetOrder; + }, + groupOrder: 'order', + + selectable: true, + multiselect: false, + itemsAlwaysDraggable: false, + + editable: { + updateTime: false, + updateGroup: false, + add: false, + remove: false + }, + + groupEditable: { + order: false, + add: false, + remove: false + }, + + snap: TimeStep.snap, + + onAdd: function onAdd(item, callback) { + callback(item); + }, + onUpdate: function onUpdate(item, callback) { + callback(item); + }, + onMove: function onMove(item, callback) { + callback(item); + }, + onRemove: function onRemove(item, callback) { + callback(item); + }, + onMoving: function onMoving(item, callback) { + callback(item); + }, + onAddGroup: function onAddGroup(item, callback) { + callback(item); + }, + onMoveGroup: function onMoveGroup(item, callback) { + callback(item); + }, + onRemoveGroup: function onRemoveGroup(item, callback) { + callback(item); + }, + + margin: { + item: { + horizontal: 10, + vertical: 10 + }, + axis: 20 + } }; - this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. + + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); + + // options for getting items from the DataSet with the correct type + this.itemOptions = { + type: { start: 'Date', end: 'Date' } + }; + + this.conversion = { + toScreen: body.util.toScreen, + toTime: body.util.toTime + }; + this.dom = {}; + this.props = {}; + this.hammer = null; + var me = this; - this.itemSet.body.emitter.on("checkRangedItems", function () { - me.checkRangedItems = true; - }); + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet + + // listeners for the DataSet of the items + this.itemListeners = { + 'add': function add(event, params, senderId) { + me._onAdd(params.items); + }, + 'update': function update(event, params, senderId) { + me._onUpdate(params.items); + }, + 'remove': function remove(event, params, senderId) { + me._onRemove(params.items); + } + }; + + // listeners for the DataSet of the groups + this.groupListeners = { + 'add': function add(event, params, senderId) { + me._onAddGroups(params.items); + }, + 'update': function update(event, params, senderId) { + me._onUpdateGroups(params.items); + }, + 'remove': function remove(event, params, senderId) { + me._onRemoveGroups(params.items); + } + }; + + this.items = {}; // object with an Item for every data item + this.groups = {}; // Group object for every group + this.groupIds = []; + + this.selection = []; // list with the ids of all selected nodes + this.stackDirty = true; // if true, all items will be restacked on next redraw + + this.touchParams = {}; // stores properties while dragging + this.groupTouchParams = {}; + // create the HTML DOM this._create(); - this.setData(data); + this.setOptions(options); } + ItemSet.prototype = new Component(); + + // available item types will be registered here + ItemSet.types = { + background: BackgroundItem, + box: BoxItem, + range: RangeItem, + point: PointItem + }; + /** - * Create DOM elements for the group - * @private + * Create the HTML DOM for the ItemSet */ - Group.prototype._create = function () { - var label = document.createElement('div'); - if (this.itemSet.options.groupEditable.order) { - label.className = 'vis-label draggable'; - } else { - label.className = 'vis-label'; - } - this.dom.label = label; + ItemSet.prototype._create = function () { + var frame = document.createElement('div'); + frame.className = 'vis-itemset'; + frame['timeline-itemset'] = this; + this.dom.frame = frame; - var inner = document.createElement('div'); - inner.className = 'vis-inner'; - label.appendChild(inner); - this.dom.inner = inner; + // create background panel + var background = document.createElement('div'); + background.className = 'vis-background'; + frame.appendChild(background); + this.dom.background = background; + // create foreground panel var foreground = document.createElement('div'); - foreground.className = 'vis-group'; - foreground['timeline-group'] = this; + foreground.className = 'vis-foreground'; + frame.appendChild(foreground); this.dom.foreground = foreground; - this.dom.background = document.createElement('div'); - this.dom.background.className = 'vis-group'; + // create axis panel + var axis = document.createElement('div'); + axis.className = 'vis-axis'; + this.dom.axis = axis; - this.dom.axis = document.createElement('div'); - this.dom.axis.className = 'vis-group'; + // create labelset + var labelSet = document.createElement('div'); + labelSet.className = 'vis-labelset'; + this.dom.labelSet = labelSet; - // create a hidden marker to detect when the Timelines container is attached - // to the DOM, or the style of a parent of the Timeline is changed from - // display:none is changed to visible. - this.dom.marker = document.createElement('div'); - this.dom.marker.style.visibility = 'hidden'; - this.dom.marker.innerHTML = '?'; - this.dom.background.appendChild(this.dom.marker); - }; + // create ungrouped Group + this._updateUngrouped(); - /** - * Set the group data for this group - * @param {Object} data Group data, can contain properties content and className - */ - Group.prototype.setData = function (data) { - // update contents - var content; - if (this.itemSet.options && this.itemSet.options.groupTemplate) { - content = this.itemSet.options.groupTemplate(data); - } else { - content = data && data.content; - } + // create background Group + var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); + backgroundGroup.show(); + this.groups[BACKGROUND] = backgroundGroup; - if (content instanceof Element) { - this.dom.inner.appendChild(content); - while (this.dom.inner.firstChild) { - this.dom.inner.removeChild(this.dom.inner.firstChild); + // attach event listeners + // Note: we bind to the centerContainer for the case where the height + // of the center container is larger than of the ItemSet, so we + // can click in the empty area to create a new item or deselect an item. + this.hammer = new Hammer(this.body.dom.centerContainer); + + // drag items when selected + this.hammer.on('hammer.input', function (event) { + if (event.isFirst) { + this._onTouch(event); } - this.dom.inner.appendChild(content); - } else if (content !== undefined && content !== null) { - this.dom.inner.innerHTML = content; - } else { - this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null - } + }.bind(this)); + this.hammer.on('panstart', this._onDragStart.bind(this)); + this.hammer.on('panmove', this._onDrag.bind(this)); + this.hammer.on('panend', this._onDragEnd.bind(this)); + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); - // update title - this.dom.label.title = data && data.title || ''; + // single select (or unselect) when tapping an item + this.hammer.on('tap', this._onSelectItem.bind(this)); - if (!this.dom.inner.firstChild) { - util.addClassName(this.dom.inner, 'vis-hidden'); - } else { - util.removeClassName(this.dom.inner, 'vis-hidden'); - } + // multi select when holding mouse/touch, or on ctrl+click + this.hammer.on('press', this._onMultiSelectItem.bind(this)); - // update className - var className = data && data.className || null; - if (className != this.className) { - if (this.className) { - util.removeClassName(this.dom.label, this.className); - util.removeClassName(this.dom.foreground, this.className); - util.removeClassName(this.dom.background, this.className); - util.removeClassName(this.dom.axis, this.className); - } - util.addClassName(this.dom.label, className); - util.addClassName(this.dom.foreground, className); - util.addClassName(this.dom.background, className); - util.addClassName(this.dom.axis, className); - this.className = className; - } + // add item on doubletap + this.hammer.on('doubletap', this._onAddItem.bind(this)); - // update style - if (this.style) { - util.removeCssText(this.dom.label, this.style); - this.style = null; - } - if (data && data.style) { - util.addCssText(this.dom.label, data.style); - this.style = data.style; - } - }; + this.groupHammer = new Hammer(this.body.dom.leftContainer); + this.groupHammer.on('panstart', this._onGroupDragStart.bind(this)); + this.groupHammer.on('panmove', this._onGroupDrag.bind(this)); + this.groupHammer.on('panend', this._onGroupDragEnd.bind(this)); + this.groupHammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); - /** - * Get the width of the group label - * @return {number} width - */ - Group.prototype.getLabelWidth = function () { - return this.props.label.width; + // attach to the DOM + this.show(); }; /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * Set options for the ItemSet. Existing options will be extended/overwritten. + * @param {Object} [options] The following options are available: + * {String} type + * Default type for the items. Choose from 'box' + * (default), 'point', 'range', or 'background'. + * The default style can be overwritten by + * individual items. + * {String} align + * Alignment for the items, only applicable for + * BoxItem. Choose 'center' (default), 'left', or + * 'right'. + * {String} orientation.item + * Orientation of the item set. Choose 'top' or + * 'bottom' (default). + * {Function} groupOrder + * A sorting function for ordering groups + * {Boolean} stack + * If true (default), items will be stacked on + * top of each other. + * {Number} margin.axis + * Margin between the axis and the items in pixels. + * Default is 20. + * {Number} margin.item.horizontal + * Horizontal margin between items in pixels. + * Default is 10. + * {Number} margin.item.vertical + * Vertical Margin between items in pixels. + * Default is 10. + * {Number} margin.item + * Margin between items in pixels in both horizontal + * and vertical direction. Default is 10. + * {Number} margin + * Set margin for both axis and items in pixels. + * {Boolean} selectable + * If true (default), items can be selected. + * {Boolean} multiselect + * If true, multiple items can be selected. + * False by default. + * {Boolean} editable + * Set all editable options to true or false + * {Boolean} editable.updateTime + * Allow dragging an item to an other moment in time + * {Boolean} editable.updateGroup + * Allow dragging an item to an other group + * {Boolean} editable.add + * Allow creating new items on double tap + * {Boolean} editable.remove + * Allow removing items by clicking the delete button + * top right of a selected item. + * {Function(item: Item, callback: Function)} onAdd + * Callback function triggered when an item is about to be added: + * when the user double taps an empty space in the Timeline. + * {Function(item: Item, callback: Function)} onUpdate + * Callback function fired when an item is about to be updated. + * This function typically has to show a dialog where the user + * change the item. If not implemented, nothing happens. + * {Function(item: Item, callback: Function)} onMove + * Fired when an item has been moved. If not implemented, + * the move action will be accepted. + * {Function(item: Item, callback: Function)} onRemove + * Fired when an item is about to be deleted. + * If not implemented, the item will be always removed. */ - Group.prototype.redraw = function (range, margin, restack) { - var resized = false; - - // force recalculation of the height of the items when the marker height changed - // (due to the Timeline being attached to the DOM or changed from display:none to visible) - var markerHeight = this.dom.marker.clientHeight; - if (markerHeight != this.lastMarkerHeight) { - this.lastMarkerHeight = markerHeight; - - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); - - restack = true; - } - - // recalculate the height of the subgroups - this._calculateSubGroupHeights(); - - // reposition visible items vertically - if (typeof this.itemSet.options.order === 'function') { - // a custom order function + ItemSet.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + var fields = ['type', 'align', 'order', 'stack', 'selectable', 'multiselect', 'itemsAlwaysDraggable', 'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'hide', 'snap', 'groupOrderSwap']; + util.selectiveExtend(fields, this.options, options); - if (restack) { - // brute force restack of all items + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom'; + } else if (_typeof(options.orientation) === 'object' && 'item' in options.orientation) { + this.options.orientation.item = options.orientation.item; + } + } - // show all items - var me = this; - var limitSize = false; - util.forEach(this.items, function (item) { - if (!item.displayed) { - item.redraw(); - me.visibleItems.push(item); + if ('margin' in options) { + if (typeof options.margin === 'number') { + this.options.margin.axis = options.margin; + this.options.margin.item.horizontal = options.margin; + this.options.margin.item.vertical = options.margin; + } else if (_typeof(options.margin) === 'object') { + util.selectiveExtend(['axis'], this.options.margin, options.margin); + if ('item' in options.margin) { + if (typeof options.margin.item === 'number') { + this.options.margin.item.horizontal = options.margin.item; + this.options.margin.item.vertical = options.margin.item; + } else if (_typeof(options.margin.item) === 'object') { + util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); + } } - item.repositionX(limitSize); - }); - - // order all items and force a restacking - var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) { - return me.itemSet.options.order(a.data, b.data); - }); - stack.stack(customOrderedItems, margin, true /* restack=true */); + } } - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - } else { - // no custom order function, lazy stacking - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - - if (this.itemSet.options.stack) { - // TODO: ugly way to access options... - stack.stack(this.visibleItems, margin, restack); - } else { - // no stacking - stack.nostack(this.visibleItems, margin, this.subgroups); + if ('editable' in options) { + if (typeof options.editable === 'boolean') { + this.options.editable.updateTime = options.editable; + this.options.editable.updateGroup = options.editable; + this.options.editable.add = options.editable; + this.options.editable.remove = options.editable; + } else if (_typeof(options.editable) === 'object') { + util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); + } } - } - // recalculate the height of the group - var height = this._calculateHeight(margin); + if ('groupEditable' in options) { + if (typeof options.groupEditable === 'boolean') { + this.options.groupEditable.order = options.groupEditable; + this.options.groupEditable.add = options.groupEditable; + this.options.groupEditable.remove = options.groupEditable; + } else if (_typeof(options.groupEditable) === 'object') { + util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable); + } + } - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.left = foreground.offsetLeft; - this.width = foreground.offsetWidth; - resized = util.updateProperty(this, 'height', height) || resized; + // callback functions + var addCallback = function (name) { + var fn = options[name]; + if (fn) { + if (!(fn instanceof Function)) { + throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); + } + this.options[name] = fn; + } + }.bind(this); + ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving', 'onAddGroup', 'onMoveGroup', 'onRemoveGroup'].forEach(addCallback); - // recalculate size of label - resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; - resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; + // force the itemSet to refresh: options like orientation and margins may be changed + this.markDirty(); + } + }; - // apply new height - this.dom.background.style.height = height + 'px'; - this.dom.foreground.style.height = height + 'px'; - this.dom.label.style.height = height + 'px'; + /** + * Mark the ItemSet dirty so it will refresh everything with next redraw. + * Optionally, all items can be marked as dirty and be refreshed. + * @param {{refreshItems: boolean}} [options] + */ + ItemSet.prototype.markDirty = function (options) { + this.groupIds = []; + this.stackDirty = true; - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); + if (options && options.refreshItems) { + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); } - - return resized; }; /** - * recalculate the height of the subgroups - * @private + * Destroy the ItemSet */ - Group.prototype._calculateSubGroupHeights = function () { - if (Object.keys(this.subgroups).length > 0) { - var me = this; + ItemSet.prototype.destroy = function () { + this.hide(); + this.setItems(null); + this.setGroups(null); - this.resetSubgroups(); + this.hammer = null; - util.forEach(this.visibleItems, function (item) { - if (item.data.subgroup !== undefined) { - me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height); - me.subgroups[item.data.subgroup].visible = true; - } - }); - } + this.body = null; + this.conversion = null; }; /** - * recalculate the height of the group - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @returns {number} Returns the height - * @private + * Hide the component from the DOM */ - Group.prototype._calculateHeight = function (margin) { - // recalculate the height of the group - var height; - var visibleItems = this.visibleItems; - if (visibleItems.length > 0) { - var min = visibleItems[0].top; - var max = visibleItems[0].top + visibleItems[0].height; - util.forEach(visibleItems, function (item) { - min = Math.min(min, item.top); - max = Math.max(max, item.top + item.height); - }); - if (min > margin.axis) { - // there is an empty gap between the lowest item and the axis - var offset = min - margin.axis; - max -= offset; - util.forEach(visibleItems, function (item) { - item.top -= offset; - }); - } - height = max + margin.item.vertical / 2; - } else { - height = 0; - } - height = Math.max(height, this.props.label.height); - - return height; - }; - - /** - * Show this group: attach to the DOM - */ - Group.prototype.show = function () { - if (!this.dom.label.parentNode) { - this.itemSet.dom.labelSet.appendChild(this.dom.label); - } - - if (!this.dom.foreground.parentNode) { - this.itemSet.dom.foreground.appendChild(this.dom.foreground); + ItemSet.prototype.hide = function () { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); + // remove the axis with dots + if (this.dom.axis.parentNode) { + this.dom.axis.parentNode.removeChild(this.dom.axis); } - if (!this.dom.axis.parentNode) { - this.itemSet.dom.axis.appendChild(this.dom.axis); + // remove the labelset containing all group labels + if (this.dom.labelSet.parentNode) { + this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); } }; /** - * Hide this group: remove from the DOM + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - Group.prototype.hide = function () { - var label = this.dom.label; - if (label.parentNode) { - label.parentNode.removeChild(label); - } - - var foreground = this.dom.foreground; - if (foreground.parentNode) { - foreground.parentNode.removeChild(foreground); + ItemSet.prototype.show = function () { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); } - var background = this.dom.background; - if (background.parentNode) { - background.parentNode.removeChild(background); + // show axis with dots + if (!this.dom.axis.parentNode) { + this.body.dom.backgroundVertical.appendChild(this.dom.axis); } - var axis = this.dom.axis; - if (axis.parentNode) { - axis.parentNode.removeChild(axis); + // show labelset containing labels + if (!this.dom.labelSet.parentNode) { + this.body.dom.left.appendChild(this.dom.labelSet); } }; /** - * Add an item to the group - * @param {Item} item + * Set selected items by their id. Replaces the current selection + * Unknown id's are silently ignored. + * @param {string[] | string} [ids] An array with zero or more id's of the items to be + * selected, or a single item id. If ids is undefined + * or an empty array, all items will be unselected. */ - Group.prototype.add = function (item) { - this.items[item.id] = item; - item.setParent(this); + ItemSet.prototype.setSelection = function (ids) { + var i, ii, id, item; - // add to - if (item.data.subgroup !== undefined) { - if (this.subgroups[item.data.subgroup] === undefined) { - this.subgroups[item.data.subgroup] = { height: 0, visible: false, index: this.subgroupIndex, items: [] }; - this.subgroupIndex++; - } - this.subgroups[item.data.subgroup].items.push(item); - } - this.orderSubgroups(); + if (ids == undefined) ids = []; + if (!Array.isArray(ids)) ids = [ids]; - if (this.visibleItems.indexOf(item) == -1) { - var range = this.itemSet.body.range; // TODO: not nice accessing the range like this - this._checkIfVisible(item, this.visibleItems, range); + // unselect currently selected items + for (i = 0, ii = this.selection.length; i < ii; i++) { + id = this.selection[i]; + item = this.items[id]; + if (item) item.unselect(); } - }; - - Group.prototype.orderSubgroups = function () { - if (this.subgroupOrderer !== undefined) { - var sortArray = []; - if (typeof this.subgroupOrderer == 'string') { - for (var subgroup in this.subgroups) { - sortArray.push({ subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer] }); - } - sortArray.sort(function (a, b) { - return a.sortField - b.sortField; - }); - } else if (typeof this.subgroupOrderer == 'function') { - for (var subgroup in this.subgroups) { - sortArray.push(this.subgroups[subgroup].items[0].data); - } - sortArray.sort(this.subgroupOrderer); - } - if (sortArray.length > 0) { - for (var i = 0; i < sortArray.length; i++) { - this.subgroups[sortArray[i].subgroup].index = i; - } + // select items + this.selection = []; + for (i = 0, ii = ids.length; i < ii; i++) { + id = ids[i]; + item = this.items[id]; + if (item) { + this.selection.push(id); + item.select(); } } }; - Group.prototype.resetSubgroups = function () { - for (var subgroup in this.subgroups) { - if (this.subgroups.hasOwnProperty(subgroup)) { - this.subgroups[subgroup].visible = false; - } - } + /** + * Get the selected items by their id + * @return {Array} ids The ids of the selected items + */ + ItemSet.prototype.getSelection = function () { + return this.selection.concat([]); }; /** - * Remove an item from the group - * @param {Item} item + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - Group.prototype.remove = function (item) { - delete this.items[item.id]; - item.setParent(null); + ItemSet.prototype.getVisibleItems = function () { + var range = this.body.range.getRange(); + var left = this.body.util.toScreen(range.start); + var right = this.body.util.toScreen(range.end); - // remove from visible items - var index = this.visibleItems.indexOf(item); - if (index != -1) this.visibleItems.splice(index, 1); + var ids = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var rawVisibleItems = group.visibleItems; - if (item.data.subgroup !== undefined) { - var subgroup = this.subgroups[item.data.subgroup]; - if (subgroup) { - var itemIndex = subgroup.items.indexOf(item); - subgroup.items.splice(itemIndex, 1); - if (!subgroup.items.length) { - delete this.subgroups[item.data.subgroup]; - this.subgroupIndex--; + // filter the "raw" set with visibleItems into a set which is really + // visible by pixels + for (var i = 0; i < rawVisibleItems.length; i++) { + var item = rawVisibleItems[i]; + // TODO: also check whether visible vertically + if (item.left < right && item.left + item.width > left) { + ids.push(item.id); + } } - this.orderSubgroups(); } } - }; - /** - * Remove an item from the corresponding DataSet - * @param {Item} item - */ - Group.prototype.removeFromDataSet = function (item) { - this.itemSet.removeItem(item.id); + return ids; }; /** - * Reorder the items + * Deselect a selected item + * @param {String | Number} id + * @private */ - Group.prototype.order = function () { - var array = util.toArray(this.items); - var startArray = []; - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i].data.end !== undefined) { - endArray.push(array[i]); + ItemSet.prototype._deselect = function (id) { + var selection = this.selection; + for (var i = 0, ii = selection.length; i < ii; i++) { + if (selection[i] == id) { + // non-strict comparison! + selection.splice(i, 1); + break; } - startArray.push(array[i]); } - this.orderedItems = { - byStart: startArray, - byEnd: endArray - }; - - stack.orderByStart(this.orderedItems.byStart); - stack.orderByEnd(this.orderedItems.byEnd); }; /** - * Update the visible items - * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date - * @param {Item[]} visibleItems The previously visible items. - * @param {{start: number, end: number}} range Visible range - * @return {Item[]} visibleItems The new visible items. - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Group.prototype._updateVisibleItems = function (orderedItems, oldVisibleItems, range) { - var visibleItems = []; - var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems - var interval = (range.end - range.start) / 4; - var lowerBound = range.start - interval; - var upperBound = range.end + interval; - var item, i; + ItemSet.prototype.redraw = function () { + var margin = this.options.margin, + range = this.body.range, + asSize = util.option.asSize, + options = this.options, + orientation = options.orientation.item, + resized = false, + frame = this.dom.frame; - // this function is used to do the binary search. - var searchFunction = function searchFunction(value) { - if (value < lowerBound) { - return -1; - } else if (value <= upperBound) { - return 0; - } else { - return 1; - } - }; + // recalculate absolute position (before redrawing groups) + this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; + this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; - // first check if the items that were in view previously are still in view. - // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! - // also cleans up invisible items. - if (oldVisibleItems.length > 0) { - for (i = 0; i < oldVisibleItems.length; i++) { - this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); - } - } + // update class name + frame.className = 'vis-itemset'; - // we do a binary search for the items that have only start values. - var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data', 'start'); + // reorder the groups (if needed) + resized = this._orderGroups() || resized; - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. - this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { - return item.data.start < lowerBound || item.data.start > upperBound; + // check whether zoomed (in that case we need to re-stack everything) + // TODO: would be nicer to get this as a trigger from Range + var visibleInterval = range.end - range.start; + var zoomed = visibleInterval != this.lastVisibleInterval || this.props.width != this.props.lastWidth; + if (zoomed) this.stackDirty = true; + this.lastVisibleInterval = visibleInterval; + this.props.lastWidth = this.props.width; + + var restack = this.stackDirty; + var firstGroup = this._firstGroup(); + var firstMargin = { + item: margin.item, + axis: margin.axis + }; + var nonFirstMargin = { + item: margin.item, + axis: margin.item.vertical / 2 + }; + var height = 0; + var minHeight = margin.axis + margin.item.vertical; + + // redraw the background group + this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); + + // redraw all regular groups + util.forEach(this.groups, function (group) { + var groupMargin = group == firstGroup ? firstMargin : nonFirstMargin; + var groupResized = group.redraw(range, groupMargin, restack); + resized = groupResized || resized; + height += group.height; }); + height = Math.max(height, minHeight); + this.stackDirty = false; - // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. - // We therefore have to brute force check all items in the byEnd list - if (this.checkRangedItems == true) { - this.checkRangedItems = false; - for (i = 0; i < orderedItems.byEnd.length; i++) { - this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); - } - } else { - // we do a binary search for the items that have defined end times. - var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data', 'end'); + // update frame height + frame.style.height = asSize(height); - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. - this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { - return item.data.end < lowerBound || item.data.end > upperBound; - }); - } + // calculate actual size + this.props.width = frame.offsetWidth; + this.props.height = height; - // finally, we reposition all the visible items. - for (i = 0; i < visibleItems.length; i++) { - item = visibleItems[i]; - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - } + // reposition axis + this.dom.axis.style.top = asSize(orientation == 'top' ? this.body.domProps.top.height + this.body.domProps.border.top : this.body.domProps.top.height + this.body.domProps.centerContainer.height); + this.dom.axis.style.left = '0'; - // debug - //console.log("new line") - //if (this.groupId == null) { - // for (i = 0; i < orderedItems.byStart.length; i++) { - // item = orderedItems.byStart[i].data; - // console.log('start',i,initialPosByStart, item.start.valueOf(), item.content, item.start >= lowerBound && item.start <= upperBound,i == initialPosByStart ? "<------------------- HEREEEE" : "") - // } - // for (i = 0; i < orderedItems.byEnd.length; i++) { - // item = orderedItems.byEnd[i].data; - // console.log('rangeEnd',i,initialPosByEnd, item.end.valueOf(), item.content, item.end >= range.start && item.end <= range.end,i == initialPosByEnd ? "<------------------- HEREEEE" : "") - // } - //} + // check if this component is resized + resized = this._isResized() || resized; - return visibleItems; + return resized; }; - Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { - var item; - var i; + /** + * Get the first group, aligned with the axis + * @return {Group | null} firstGroup + * @private + */ + ItemSet.prototype._firstGroup = function () { + var firstGroupIndex = this.options.orientation.item == 'top' ? 0 : this.groupIds.length - 1; + var firstGroupId = this.groupIds[firstGroupIndex]; + var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; - if (initialPos != -1) { - for (i = initialPos; i >= 0; i--) { - item = items[i]; - if (breakCondition(item)) { - break; - } else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); + return firstGroup || null; + }; + + /** + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. + * @protected + */ + ItemSet.prototype._updateUngrouped = function () { + var ungrouped = this.groups[UNGROUPED]; + var background = this.groups[BACKGROUND]; + var item, itemId; + + if (this.groupsData) { + // remove the group holding all ungrouped items + if (ungrouped) { + ungrouped.hide(); + delete this.groups[UNGROUPED]; + + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + item.parent && item.parent.remove(item); + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + group && group.add(item) || item.hide(); } } } + } else { + // create a group holding all (unfiltered) items + if (!ungrouped) { + var id = null; + var data = null; + ungrouped = new Group(id, data, this); + this.groups[UNGROUPED] = ungrouped; - for (i = initialPos + 1; i < items.length; i++) { - item = items[i]; - if (breakCondition(item)) { - break; - } else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + ungrouped.add(item); } } + + ungrouped.show(); } } }; /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * Get the element for the labelset + * @return {HTMLElement} labelSet */ - Group.prototype._checkIfVisible = function (item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - visibleItems.push(item); - } else { - if (item.displayed) item.hide(); - } + ItemSet.prototype.getLabelSet = function () { + return this.dom.labelSet; }; /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * Set items + * @param {vis.DataSet | null} items */ - Group.prototype._checkIfVisibleWithReference = function (item, visibleItems, visibleItemsLookup, range) { - if (item.isVisible(range)) { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } + ItemSet.prototype.setItems = function (items) { + var me = this, + ids, + oldItemsData = this.itemsData; + + // replace the dataset + if (!items) { + this.itemsData = null; + } else if (items instanceof DataSet || items instanceof DataView) { + this.itemsData = items; } else { - if (item.displayed) item.hide(); + throw new TypeError('Data must be an instance of DataSet or DataView'); } - }; - module.exports = Group; + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); -/***/ }, -/* 31 */ -/***/ function(module, exports) { + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } - // Utility functions for ordering and stacking of items - 'use strict'; + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); - var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); + + // update the group holding all ungrouped items + this._updateUngrouped(); + } + + this.body.emitter.emit('_change', { queue: true }); + }; /** - * Order items by their start data - * @param {Item[]} items + * Get the current items + * @returns {vis.DataSet | null} */ - exports.orderByStart = function (items) { - items.sort(function (a, b) { - return a.data.start - b.data.start; - }); + ItemSet.prototype.getItems = function () { + return this.itemsData; }; /** - * Order items by their end date. If they have no end date, their start date - * is used. - * @param {Item[]} items + * Set groups + * @param {vis.DataSet} groups */ - exports.orderByEnd = function (items) { - items.sort(function (a, b) { - var aTime = 'end' in a.data ? a.data.end : a.data.start, - bTime = 'end' in b.data ? b.data.end : b.data.start; - - return aTime - bTime; - }); - }; + ItemSet.prototype.setGroups = function (groups) { + var me = this, + ids; - /** - * Adjust vertical positions of the items such that they don't overlap each - * other. - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {boolean} [force=false] - * If true, all items will be repositioned. If false (default), only - * items having a top===null will be re-stacked - */ - exports.stack = function (items, margin, force) { - var i, iMax; + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.off(event, callback); + }); - if (force) { - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - items[i].top = null; - } + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw } - // calculate new, non-overlapping positions - for (i = 0, iMax = items.length; i < iMax; i++) { - var item = items[i]; - if (item.stack && item.top === null) { - // initialize top position - item.top = margin.axis; + // replace the dataset + if (!groups) { + this.groupsData = null; + } else if (groups instanceof DataSet || groups instanceof DataView) { + this.groupsData = groups; + } else { + throw new TypeError('Data must be an instance of DataSet or DataView'); + } - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var j = 0, jj = items.length; j < jj; j++) { - var other = items[j]; - if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item)) { - collidingItem = other; - break; - } - } + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - if (collidingItem != null) { - // There is a collision. Reposition the items above the colliding element - item.top = collidingItem.top + collidingItem.height + margin.item.vertical; - } - } while (collidingItem); - } + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); } + + // update the group holding all ungrouped items + this._updateUngrouped(); + + // update the order of all items in each group + this._order(); + + this.body.emitter.emit('_change', { queue: true }); }; /** - * Adjust vertical positions of the items without stacking them - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. + * Get the current groups + * @returns {vis.DataSet | null} groups */ - exports.nostack = function (items, margin, subgroups) { - var i, iMax, newTop; + ItemSet.prototype.getGroups = function () { + return this.groupsData; + }; - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - if (items[i].data.subgroup !== undefined) { - newTop = margin.axis; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } + /** + * Remove an item by its id + * @param {String | Number} id + */ + ItemSet.prototype.removeItem = function (id) { + var item = this.itemsData.get(id), + dataset = this.itemsData.getDataSet(); + + if (item) { + // confirm deletion + this.options.onRemove(item, function (item) { + if (item) { + // remove by id here, it is possible that an item has no id defined + // itself, so better not delete by the item itself + dataset.remove(id); } - items[i].top = newTop; - } else { - items[i].top = margin.axis; - } + }); } }; /** - * Test if the two provided items collide - * The items must have parameters left, width, top, and height. - * @param {Item} a The first item - * @param {Item} b The second item - * @param {{horizontal: number, vertical: number}} margin - * An object containing a horizontal and vertical - * minimum required margin. - * @return {boolean} true if a and b collide, else false + * Get the time of an item based on it's data and options.type + * @param {Object} itemData + * @returns {string} Returns the type + * @private */ - exports.collision = function (a, b, margin) { - return a.left - margin.horizontal + EPSILON < b.left + b.width && a.left + a.width + margin.horizontal - EPSILON > b.left && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; + ItemSet.prototype._getType = function (itemData) { + return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); }; -/***/ }, -/* 32 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var Hammer = __webpack_require__(20); - var Item = __webpack_require__(33); + /** + * Get the group id for an item + * @param {Object} itemData + * @returns {string} Returns the groupId + * @private + */ + ItemSet.prototype._getGroupId = function (itemData) { + var type = this._getType(itemData); + if (type == 'background' && itemData.group == undefined) { + return BACKGROUND; + } else { + return this.groupsData ? itemData.group : UNGROUPED; + } + }; /** - * @constructor RangeItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options + * Handle updated items + * @param {Number[]} ids + * @protected */ - function RangeItem(data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true + ItemSet.prototype._onUpdate = function (ids) { + var me = this; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); + ids.forEach(function (id) { + var itemData = me.itemsData.get(id, me.itemOptions); + var item = me.items[id]; + var type = me._getType(itemData); + + var constructor = ItemSet.types[type]; + var selected; + + if (item) { + // update item + if (!constructor || !(item instanceof constructor)) { + // item type has changed, delete the item and recreate it + selected = item.selected; // preserve selection of this item + me._removeItem(item); + item = null; + } else { + me._updateItem(item, itemData); + } } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); + + if (!item) { + // create item + if (constructor) { + item = new constructor(itemData, me.conversion, me.options); + item.id = id; // TODO: not so nice setting id afterwards + me._addItem(item); + if (selected) { + this.selection.push(id); + item.select(); + } + } else if (type == 'rangeoverflow') { + // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day + throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + '.vis-item.vis-range .vis-item-content {overflow: visible;}'); + } else { + throw new TypeError('Unknown item type "' + type + '"'); + } } - } + }.bind(this)); - Item.call(this, data, conversion, options); - } + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('_change', { queue: true }); + }; - RangeItem.prototype = new Item(null, null, null); + /** + * Handle added items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - RangeItem.prototype.baseClassName = 'vis-item vis-range'; + /** + * Handle removed items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onRemove = function (ids) { + var count = 0; + var me = this; + ids.forEach(function (id) { + var item = me.items[id]; + if (item) { + count++; + me._removeItem(item); + } + }); + + if (count) { + // update order + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('_change', { queue: true }); + } + }; /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Update the order of item in all groups + * @private */ - RangeItem.prototype.isVisible = function (range) { - // determine visibility - return this.data.start < range.end && this.data.end > range.start; + ItemSet.prototype._order = function () { + // reorder the items in all groups + // TODO: optimization: only reorder groups affected by the changed items + util.forEach(this.groups, function (group) { + group.order(); + }); }; /** - * Repaint the item + * Handle updated groups + * @param {Number[]} ids + * @private */ - RangeItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + ItemSet.prototype._onUpdateGroups = function (ids) { + this._onAddGroups(ids); + }; - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() + /** + * Handle changed groups (added or updated) + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onAddGroups = function (ids) { + var me = this; - // frame box (to prevent the item contents from overflowing - dom.frame = document.createElement('div'); - dom.frame.className = 'vis-item-overflow'; - dom.box.appendChild(dom.frame); + ids.forEach(function (id) { + var groupData = me.groupsData.get(id); + var group = me.groups[id]; - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'vis-item-content'; - dom.frame.appendChild(dom.content); + if (!group) { + // check for reserved ids + if (id == UNGROUPED || id == BACKGROUND) { + throw new Error('Illegal group id. ' + id + ' is a reserved id.'); + } - // attach this item as attribute - dom.box['timeline-item'] = this; + var groupOptions = Object.create(me.options); + util.extend(groupOptions, { + height: null + }); - this.dirty = true; - } + group = new Group(id, groupData, me); + me.groups[id] = group; - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); + // add items with this groupId to the new group + for (var itemId in me.items) { + if (me.items.hasOwnProperty(itemId)) { + var item = me.items[itemId]; + if (item.data.group == id) { + group.add(item); + } + } + } + + group.order(); + group.show(); + } else { + // update group + group.setData(groupData); } - foreground.appendChild(dom.box); - } - this.displayed = 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) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); + this.body.emitter.emit('_change', { queue: true }); + }; - var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; + /** + * Handle removed groups + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onRemoveGroups = function (ids) { + var groups = this.groups; + ids.forEach(function (id) { + var group = groups[id]; - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); - dom.box.className = this.baseClassName + className; + if (group) { + group.hide(); + delete groups[id]; + } + }); - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden'; + this.markDirty(); - // recalculate size - // turn off max-width to be able to calculate the real width - // this causes an extra browser repaint/reflow, but so be it - this.dom.content.style.maxWidth = 'none'; - this.props.content.width = this.dom.content.offsetWidth; - this.height = this.dom.box.offsetHeight; - this.dom.content.style.maxWidth = ''; + this.body.emitter.emit('_change', { queue: true }); + }; - this.dirty = false; - } + /** + * Reorder the groups if needed + * @return {boolean} changed + * @private + */ + ItemSet.prototype._orderGroups = function () { + if (this.groupsData) { + // reorder the groups + var groupIds = this.groupsData.getIds({ + order: this.options.groupOrder + }); - this._repaintDeleteButton(dom.box); - this._repaintDragLeft(); - this._repaintDragRight(); + var changed = !util.equalArray(groupIds, this.groupIds); + if (changed) { + // hide all groups, removes them from the DOM + var groups = this.groups; + groupIds.forEach(function (groupId) { + groups[groupId].hide(); + }); + + // show the groups again, attach them to the DOM in correct order + groupIds.forEach(function (groupId) { + groups[groupId].show(); + }); + + this.groupIds = groupIds; + } + + return changed; + } else { + return false; + } }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Add a new item + * @param {Item} item + * @private */ - RangeItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); - } + ItemSet.prototype._addItem = function (item) { + this.items[item.id] = item; + + // add to group + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (group) group.add(item); }; /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed + * Update an existing item + * @param {Item} item + * @param {Object} itemData + * @private */ - RangeItem.prototype.hide = function () { - if (this.displayed) { - var box = this.dom.box; + ItemSet.prototype._updateItem = function (item, itemData) { + var oldGroupId = item.data.group; + var oldSubGroupId = item.data.subgroup; - if (box.parentNode) { - box.parentNode.removeChild(box); - } + // update the items data (will redraw the item when displayed) + item.setData(itemData); - this.displayed = false; + // update group + if (oldGroupId != item.data.group || oldSubGroupId != item.data.subgroup) { + var oldGroup = this.groups[oldGroupId]; + if (oldGroup) oldGroup.remove(item); + + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (group) group.add(item); } }; /** - * Reposition the item horizontally - * @param {boolean} [limitSize=true] If true (default), the width of the range - * item will be limited, as the browser cannot - * display very wide divs. This means though - * that the applied left and width may - * not correspond to the ranges start and end - * @Override + * Delete an item from the ItemSet: remove it from the DOM, from the map + * with items, and from the map with visible items, and from the selection + * @param {Item} item + * @private */ - RangeItem.prototype.repositionX = function (limitSize) { - var parentWidth = this.parent.width; - var start = this.conversion.toScreen(this.data.start); - var end = this.conversion.toScreen(this.data.end); - var contentLeft; - var contentWidth; + ItemSet.prototype._removeItem = function (item) { + // remove from DOM + item.hide(); - // limit the width of the range, as browsers cannot draw very wide divs - if (limitSize === undefined || limitSize === true) { - if (start < -parentWidth) { - start = -parentWidth; - } - if (end > 2 * parentWidth) { - end = 2 * parentWidth; - } - } - var boxWidth = Math.max(end - start, 1); - - if (this.overflow) { - this.left = start; - this.width = boxWidth + this.props.content.width; - contentWidth = this.props.content.width; - - // Note: The calculation of width is an optimistic calculation, giving - // a width which will not change when moving the Timeline - // So no re-stacking needed, which is nicer for the eye; - } else { - this.left = start; - this.width = boxWidth; - contentWidth = Math.min(end - start, this.props.content.width); - } - - this.dom.box.style.left = this.left + 'px'; - this.dom.box.style.width = boxWidth + 'px'; - - switch (this.options.align) { - case 'left': - this.dom.content.style.left = '0'; - break; - - case 'right': - this.dom.content.style.left = Math.max(boxWidth - contentWidth, 0) + 'px'; - break; + // remove from items + delete this.items[item.id]; - case 'center': - this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; - break; + // remove from selection + var index = this.selection.indexOf(item.id); + if (index != -1) this.selection.splice(index, 1); - default: - // 'auto' - // when range exceeds left of the window, position the contents at the left of the visible area - if (this.overflow) { - if (end > 0) { - contentLeft = Math.max(-start, 0); - } else { - contentLeft = -contentWidth; // ensure it's not visible anymore - } - } else { - if (start < 0) { - contentLeft = -start; - } else { - contentLeft = 0; - } - } - this.dom.content.style.left = contentLeft + 'px'; - } + // remove from group + item.parent && item.parent.remove(item); }; /** - * Reposition the item vertically - * @Override + * Create an array containing all items being a range (having an end date) + * @param array + * @returns {Array} + * @private */ - RangeItem.prototype.repositionY = function () { - var orientation = this.options.orientation.item; - var box = this.dom.box; + ItemSet.prototype._constructByEndArray = function (array) { + var endArray = []; - if (orientation == 'top') { - box.style.top = this.top + 'px'; - } else { - box.style.top = this.parent.height - this.top - this.height + 'px'; + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof RangeItem) { + endArray.push(array[i]); + } } + return endArray; }; /** - * Repaint a drag area on the left side of the range when the range is selected - * @protected + * Register the clicked item on touch, before dragStart is initiated. + * + * dragStart is initiated from a mousemove event, AFTER the mouse/touch is + * already moving. Therefore, the mouse/touch can sometimes be above an other + * DOM element than the item itself. + * + * @param {Event} event + * @private */ - RangeItem.prototype._repaintDragLeft = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { - // create and show drag area - var dragLeft = document.createElement('div'); - dragLeft.className = 'vis-drag-left'; - dragLeft.dragLeftItem = this; + ItemSet.prototype._onTouch = function (event) { + // store the touched item, used in _onDragStart + this.touchParams.item = this.itemFromTarget(event); + this.touchParams.dragLeftItem = event.target.dragLeftItem || false; + this.touchParams.dragRightItem = event.target.dragRightItem || false; + this.touchParams.itemProps = null; + }; - this.dom.box.appendChild(dragLeft); - this.dom.dragLeft = dragLeft; - } else if (!this.selected && this.dom.dragLeft) { - // delete drag area - if (this.dom.dragLeft.parentNode) { - this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); - } - this.dom.dragLeft = null; + /** + * Given an group id, returns the index it has. + * + * @param {Number} groupID + * @private + */ + ItemSet.prototype._getGroupIndex = function (groupId) { + for (var i = 0; i < this.groupIds.length; i++) { + if (groupId == this.groupIds[i]) return i; } }; /** - * Repaint a drag area on the right side of the range when the range is selected - * @protected + * Start dragging the selected events + * @param {Event} event + * @private */ - RangeItem.prototype._repaintDragRight = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { - // create and show drag area - var dragRight = document.createElement('div'); - dragRight.className = 'vis-drag-right'; - dragRight.dragRightItem = this; + ItemSet.prototype._onDragStart = function (event) { + var item = this.touchParams.item || null; + var me = this; + var props; - this.dom.box.appendChild(dragRight); - this.dom.dragRight = dragRight; - } else if (!this.selected && this.dom.dragRight) { - // delete drag area - if (this.dom.dragRight.parentNode) { - this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); - } - this.dom.dragRight = null; - } - }; + if (item && (item.selected || this.options.itemsAlwaysDraggable)) { - module.exports = RangeItem; + if (!this.options.editable.updateTime && !this.options.editable.updateGroup && !item.editable) { + return; + } -/***/ }, -/* 33 */ -/***/ function(module, exports, __webpack_require__) { + // override options.editable + if (item.editable === false) { + return; + } - 'use strict'; + var dragLeftItem = this.touchParams.dragLeftItem; + var dragRightItem = this.touchParams.dragRightItem; - var Hammer = __webpack_require__(20); - var util = __webpack_require__(1); + if (dragLeftItem) { + props = { + item: dragLeftItem, + initialX: event.center.x, + dragLeft: true, + data: this._cloneItemData(item.data) + }; - /** - * @constructor Item - * @param {Object} data Object containing (optional) parameters type, - * start, end, content, group, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} options Configuration options - * // TODO: describe available options - */ - function Item(data, conversion, options) { - this.id = null; - this.parent = null; - this.data = data; - this.dom = null; - this.conversion = conversion || {}; - this.options = options || {}; + this.touchParams.itemProps = [props]; + } else if (dragRightItem) { + props = { + item: dragRightItem, + initialX: event.center.x, + dragRight: true, + data: this._cloneItemData(item.data) + }; - this.selected = false; - this.displayed = false; - this.dirty = true; + this.touchParams.itemProps = [props]; + } else { + this.touchParams.selectedItem = item; - this.top = null; - this.left = null; - this.width = null; - this.height = null; + var baseGroupIndex = this._getGroupIndex(item.data.group); - this.editable = null; - if (this.data && this.data.hasOwnProperty('editable') && typeof this.data.editable === 'boolean') { - this.editable = data.editable; - } - } + var itemsToDrag = this.options.itemsAlwaysDraggable && !item.selected ? [item.id] : this.getSelection(); - Item.prototype.stack = true; + this.touchParams.itemProps = itemsToDrag.map(function (id) { + var item = me.items[id]; + var groupIndex = me._getGroupIndex(item.data.group); + return { + item: item, + initialX: event.center.x, + groupOffset: baseGroupIndex - groupIndex, + data: this._cloneItemData(item.data) + }; + }.bind(this)); + } - /** - * Select current item - */ - Item.prototype.select = function () { - this.selected = true; - this.dirty = true; - if (this.displayed) this.redraw(); + event.stopPropagation(); + } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) { + // create a new range item when dragging with ctrl key down + this._onDragStartAddItem(event); + } }; /** - * Unselect current item + * Start creating a new range item by dragging. + * @param {Event} event + * @private */ - Item.prototype.unselect = function () { - this.selected = false; - this.dirty = true; - if (this.displayed) this.redraw(); - }; + ItemSet.prototype._onDragStartAddItem = function (event) { + var snap = this.options.snap || null; + var xAbs = util.getAbsoluteLeft(this.dom.frame); + var x = event.center.x - xAbs - 10; // minus 10 to compensate for the drag starting as soon as you've moved 10px + var time = this.body.util.toTime(x); + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); + var start = snap ? snap(time, scale, step) : time; + var end = start; - /** - * 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) { - var groupChanged = data.group != undefined && this.data.group != data.group; - if (groupChanged) { - this.parent.itemSet._moveToGroup(this, data.group); - } + var itemData = { + type: 'range', + start: start, + end: end, + content: 'new item' + }; - if (data.hasOwnProperty('editable') && typeof data.editable === 'boolean') { - this.editable = data.editable; + var id = util.randomUUID(); + itemData[this.itemsData._fieldId] = id; + + var group = this.groupFromTarget(event); + if (group) { + itemData.group = group.groupId; } - this.data = data; - this.dirty = true; - if (this.displayed) this.redraw(); - }; + var newItem = new RangeItem(itemData, this.conversion, this.options); + newItem.id = id; // TODO: not so nice setting id afterwards + newItem.data = this._cloneItemData(itemData); + this._addItem(newItem); - /** - * Set a parent for the item - * @param {ItemSet | Group} parent - */ - Item.prototype.setParent = function (parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); - } - } else { - this.parent = parent; - } - }; + var props = { + item: newItem, + dragRight: true, + initialX: event.center.x, + data: newItem.data + }; + this.touchParams.itemProps = [props]; - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - Item.prototype.isVisible = function (range) { - // Should be implemented by Item implementations - return false; + event.stopPropagation(); }; /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed + * Drag selected items + * @param {Event} event + * @private */ - Item.prototype.show = function () { - return false; - }; + ItemSet.prototype._onDrag = function (event) { + if (this.touchParams.itemProps) { + event.stopPropagation(); - /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed - */ - Item.prototype.hide = function () { - return false; - }; + var me = this; + var snap = this.options.snap || null; + var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); - /** - * Repaint the item - */ - Item.prototype.redraw = function () { - // should be implemented by the item - }; + //only calculate the new group for the item that's actually dragged + var selectedItem = this.touchParams.selectedItem; + var updateGroupAllowed = me.options.editable.updateGroup; + var newGroupBase = null; + if (updateGroupAllowed && selectedItem) { + if (selectedItem.data.group != undefined) { + // drag from one group to another + var group = me.groupFromTarget(event); + if (group) { + //we know the offset for all items, so the new group for all items + //will be relative to this one. + newGroupBase = this._getGroupIndex(group.groupId); + } + } + } - /** - * Reposition the Item horizontally - */ - Item.prototype.repositionX = function () { - // should be implemented by the item - }; + // move + this.touchParams.itemProps.forEach(function (props) { + var current = me.body.util.toTime(event.center.x - xOffset); + var initial = me.body.util.toTime(props.initialX - xOffset); + var offset = current - initial; // ms - /** - * Reposition the Item vertically - */ - Item.prototype.repositionY = function () { - // should be implemented by the item - }; + var itemData = this._cloneItemData(props.item.data); // clone the data + if (props.item.editable === false) { + return; + } - /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected - */ - Item.prototype._repaintDeleteButton = function (anchor) { - var editable = (this.options.editable.remove || this.data.editable === true) && this.data.editable !== false; + var updateTimeAllowed = me.options.editable.updateTime || props.item.editable === true; - if (this.selected && editable && !this.dom.deleteButton) { - // create and show button - var me = this; + if (updateTimeAllowed) { + if (props.dragLeft) { + // drag left side of a range item + if (itemData.start != undefined) { + var initialStart = util.convert(props.data.start, 'Date'); + var start = new Date(initialStart.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + } + } else if (props.dragRight) { + // drag right side of a range item + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var end = new Date(initialEnd.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.end = snap ? snap(end, scale, step) : end; + } + } else { + // drag both start and end + if (itemData.start != undefined) { + var initialStart = util.convert(props.data.start, 'Date').valueOf(); + var start = new Date(initialStart + offset); - var deleteButton = document.createElement('div'); - deleteButton.className = 'vis-delete'; - deleteButton.title = 'Delete this item'; + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var duration = initialEnd.valueOf() - initialStart.valueOf(); - // TODO: be able to destroy the delete button - new Hammer(deleteButton).on('tap', function (event) { - event.stopPropagation(); - me.parent.removeFromDataSet(me); - }); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + itemData.end = new Date(itemData.start.valueOf() + duration); + } else { + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + } + } + } + } - anchor.appendChild(deleteButton); - this.dom.deleteButton = deleteButton; - } else if (!this.selected && this.dom.deleteButton) { - // remove button - if (this.dom.deleteButton.parentNode) { - this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); - } - this.dom.deleteButton = null; - } - }; + var updateGroupAllowed = me.options.editable.updateGroup || props.item.editable === true; - /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private - */ - Item.prototype._updateContents = function (element) { - var content; - if (this.options.template) { - var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset - content = this.options.template(itemData); - } else { - content = this.data.content; - } + if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) { + if (itemData.group != undefined) { + var newOffset = newGroupBase - props.groupOffset; - var changed = this._contentToString(this.content) !== this._contentToString(content); - if (changed) { - // only replace the content when changed - if (content instanceof Element) { - element.innerHTML = ''; - element.appendChild(content); - } else if (content != undefined) { - element.innerHTML = content; - } else { - if (!(this.data.type == 'background' && this.data.content === undefined)) { - throw new Error('Property "content" missing in item ' + this.id); + //make sure we stay in bounds + newOffset = Math.max(0, newOffset); + newOffset = Math.min(me.groupIds.length - 1, newOffset); + + itemData.group = me.groupIds[newOffset]; + } } - } - this.content = content; + // confirm moving the item + itemData = this._cloneItemData(itemData); // convert start and end to the correct type + me.options.onMoving(itemData, function (itemData) { + if (itemData) { + props.item.setData(this._cloneItemData(itemData, 'Date')); + } + }.bind(this)); + }.bind(this)); + + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('_change'); } }; /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents + * Move an item to another group + * @param {Item} item + * @param {String | Number} groupId * @private */ - Item.prototype._updateTitle = function (element) { - if (this.data.title != null) { - element.title = this.data.title || ''; - } else { - element.removeAttribute('vis-title'); + ItemSet.prototype._moveToGroup = function (item, groupId) { + var group = this.groups[groupId]; + if (group && group.groupId != item.data.group) { + var oldGroup = item.parent; + oldGroup.remove(item); + oldGroup.order(); + group.add(item); + group.order(); + + item.data.group = group.groupId; } }; /** - * Process dataAttributes timeline option and set as data- attributes on dom.content - * @param {Element} element HTML element to which the attributes will be attached + * End of dragging selected items + * @param {Event} event * @private */ - Item.prototype._updateDataAttributes = function (element) { - if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - var attributes = []; + ItemSet.prototype._onDragEnd = function (event) { + if (this.touchParams.itemProps) { + event.stopPropagation(); - if (Array.isArray(this.options.dataAttributes)) { - attributes = this.options.dataAttributes; - } else if (this.options.dataAttributes == 'all') { - attributes = Object.keys(this.data); - } else { - return; - } + var me = this; + var dataset = this.itemsData.getDataSet(); + var itemProps = this.touchParams.itemProps; + this.touchParams.itemProps = null; - for (var i = 0; i < attributes.length; i++) { - var name = attributes[i]; - var value = this.data[name]; + itemProps.forEach(function (props) { + var id = props.item.id; + var exists = me.itemsData.get(id, me.itemOptions) != null; - if (value != null) { - element.setAttribute('data-' + name, value); - } else { - element.removeAttribute('data-' + name); - } - } - } - }; + if (!exists) { + // add a new item + me.options.onAdd(props.item.data, function (itemData) { + me._removeItem(props.item); // remove temporary item + if (itemData) { + me.itemsData.getDataSet().add(itemData); + } - /** - * Update custom styles of the element - * @param element - * @private - */ - Item.prototype._updateStyle = function (element) { - // remove old styles - if (this.style) { - util.removeCssText(element, this.style); - this.style = null; - } + // force re-stacking of all items next redraw + me.stackDirty = true; + me.body.emitter.emit('_change'); + }); + } else { + // update existing item + var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type + me.options.onMove(itemData, function (itemData) { + if (itemData) { + // apply changes + itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) + dataset.update(itemData); + } else { + // restore original values + props.item.setData(props.data); - // append new styles - if (this.data.style) { - util.addCssText(element, this.data.style); - this.style = this.data.style; + me.stackDirty = true; // force re-stacking of all items next redraw + me.body.emitter.emit('_change'); + } + }); + } + }.bind(this)); } }; - /** - * Stringify the items contents - * @param {string | Element | undefined} content - * @returns {string | undefined} - * @private - */ - Item.prototype._contentToString = function (content) { - if (typeof content === 'string') return content; - if (content && 'outerHTML' in content) return content.outerHTML; - return content; - }; + ItemSet.prototype._onGroupDragStart = function (event) { + if (this.options.groupEditable.order) { + this.groupTouchParams.group = this.groupFromTarget(event); - /** - * Return the width of the item left from its start date - * @return {number} - */ - Item.prototype.getWidthLeft = function () { - return 0; - }; + if (this.groupTouchParams.group) { + event.stopPropagation(); - /** - * Return the width of the item right from the max of its start and end date - * @return {number} - */ - Item.prototype.getWidthRight = function () { - return 0; + this.groupTouchParams.originalOrder = this.groupsData.getIds({ + order: this.options.groupOrder + }); + } + } }; - module.exports = Item; - -/***/ }, -/* 34 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var util = __webpack_require__(1); - var Group = __webpack_require__(30); + ItemSet.prototype._onGroupDrag = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); - /** - * @constructor BackgroundGroup - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet - */ - function BackgroundGroup(groupId, data, itemSet) { - Group.call(this, groupId, data, itemSet); + // drag from one group to another + var group = this.groupFromTarget(event); - this.width = 0; - this.height = 0; - this.top = 0; - this.left = 0; - } + // try to avoid toggling when groups differ in height + if (group && group.height != this.groupTouchParams.group.height) { + var movingUp = group.top < this.groupTouchParams.group.top; + var clientY = event.center ? event.center.y : event.clientY; + var targetGroupTop = util.getAbsoluteTop(group.dom.foreground); + var draggedGroupHeight = this.groupTouchParams.group.height; + if (movingUp) { + // skip swapping the groups when the dragged group is not below clientY afterwards + if (targetGroupTop + draggedGroupHeight < clientY) { + return; + } + } else { + var targetGroupHeight = group.height; + // skip swapping the groups when the dragged group is not below clientY afterwards + if (targetGroupTop + targetGroupHeight - draggedGroupHeight > clientY) { + return; + } + } + } - BackgroundGroup.prototype = Object.create(Group.prototype); + if (group && group != this.groupTouchParams.group) { + var groupsData = this.groupsData; + var targetGroup = groupsData.get(group.groupId); + var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); - /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized - */ - BackgroundGroup.prototype.redraw = function (range, margin, restack) { - var resized = false; + // switch groups + if (draggedGroup && targetGroup) { + this.options.groupOrderSwap(draggedGroup, targetGroup, this.groupsData); + this.groupsData.update(draggedGroup); + this.groupsData.update(targetGroup); + } - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + // fetch current order of groups + var newOrder = this.groupsData.getIds({ + order: this.options.groupOrder + }); - // calculate actual size - this.width = this.dom.background.offsetWidth; + // in case of changes since _onGroupDragStart + if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) { + var groupsData = this.groupsData; + var origOrder = this.groupTouchParams.originalOrder; + var draggedId = this.groupTouchParams.group.groupId; + var numGroups = Math.min(origOrder.length, newOrder.length); + var curPos = 0; + var newOffset = 0; + var orgOffset = 0; + while (curPos < numGroups) { + // as long as the groups are where they should be step down along the groups order + while (curPos + newOffset < numGroups && curPos + orgOffset < numGroups && newOrder[curPos + newOffset] == origOrder[curPos + orgOffset]) { + curPos++; + } - // apply new height (just always zero for BackgroundGroup - this.dom.background.style.height = '0'; + // all ok + if (curPos + newOffset >= numGroups) { + break; + } - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); - } + // not all ok + // if dragged group was move upwards everything below should have an offset + if (newOrder[curPos + newOffset] == draggedId) { + newOffset = 1; + continue; + } + // if dragged group was move downwards everything above should have an offset + else if (origOrder[curPos + orgOffset] == draggedId) { + orgOffset = 1; + continue; + } + // found a group (apart from dragged group) that has the wrong position -> switch with the + // group at the position where other one should be, fix index arrays and continue + else { + var slippedPosition = newOrder.indexOf(origOrder[curPos + orgOffset]); + var switchGroup = groupsData.get(newOrder[curPos + newOffset]); + var shouldBeGroup = groupsData.get(origOrder[curPos + orgOffset]); + this.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData); + groupsData.update(switchGroup); + groupsData.update(shouldBeGroup); - return resized; - }; + var switchGroupId = newOrder[curPos + newOffset]; + newOrder[curPos + newOffset] = origOrder[curPos + orgOffset]; + newOrder[slippedPosition] = switchGroupId; - /** - * Show this group: attach to the DOM - */ - BackgroundGroup.prototype.show = function () { - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); + curPos++; + } + } + } + } } }; - module.exports = BackgroundGroup; + ItemSet.prototype._onGroupDragEnd = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); -/***/ }, -/* 35 */ -/***/ function(module, exports, __webpack_require__) { + // update existing group + var me = this; + var id = me.groupTouchParams.group.groupId; + var dataset = me.groupsData.getDataSet(); + var groupData = util.extend({}, dataset.get(id)); // clone the data + me.options.onMoveGroup(groupData, function (groupData) { + if (groupData) { + // apply changes + groupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined) + dataset.update(groupData); + } else { - 'use strict'; + // fetch current order of groups + var newOrder = dataset.getIds({ + order: me.options.groupOrder + }); - var Item = __webpack_require__(33); - var util = __webpack_require__(1); + // restore original order + if (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) { + var origOrder = me.groupTouchParams.originalOrder; + var numGroups = Math.min(origOrder.length, newOrder.length); + var curPos = 0; + while (curPos < numGroups) { + // as long as the groups are where they should be step down along the groups order + while (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) { + curPos++; + } - /** - * @constructor BoxItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function BoxItem(data, conversion, options) { - this.props = { - dot: { - width: 0, - height: 0 - }, - line: { - width: 0, - height: 0 - } - }; + // all ok + if (curPos >= numGroups) { + break; + } - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } - } + // found a group that has the wrong position -> switch with the + // group at the position where other one should be, fix index arrays and continue + var slippedPosition = newOrder.indexOf(origOrder[curPos]); + var switchGroup = dataset.get(newOrder[curPos]); + var shouldBeGroup = dataset.get(origOrder[curPos]); + me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset); + groupsData.update(switchGroup); + groupsData.update(shouldBeGroup); - Item.call(this, data, conversion, options); - } + var switchGroupId = newOrder[curPos]; + newOrder[curPos] = origOrder[curPos]; + newOrder[slippedPosition] = switchGroupId; - BoxItem.prototype = new Item(null, null, null); + curPos++; + } + } + } + }); - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - BoxItem.prototype.isVisible = function (range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return this.data.start > range.start - interval && this.data.start < range.end + interval; + me.body.emitter.emit('groupDragged', { groupId: id }); + } }; /** - * Repaint the item + * Handle selecting/deselecting an item when tapping it + * @param {Event} event + * @private */ - BoxItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // create main box - dom.box = document.createElement('DIV'); + ItemSet.prototype._onSelectItem = function (event) { + if (!this.options.selectable) return; - // contents box (inside the background box). used for making margins - dom.content = document.createElement('DIV'); - dom.content.className = 'vis-item-content'; - dom.box.appendChild(dom.content); + var ctrlKey = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey); + var shiftKey = event.srcEvent && event.srcEvent.shiftKey; + if (ctrlKey || shiftKey) { + this._onMultiSelectItem(event); + return; + } - // line to axis - dom.line = document.createElement('DIV'); - dom.line.className = 'vis-line'; + var oldSelection = this.getSelection(); - // dot on axis - dom.dot = document.createElement('DIV'); - dom.dot.className = 'vis-dot'; + var item = this.itemFromTarget(event); + var selection = item ? [item.id] : []; + this.setSelection(selection); - // attach this item as attribute - dom.box['timeline-item'] = this; + var newSelection = this.getSelection(); - this.dirty = true; + // emit a select event, + // except when old selection is empty and new selection is still empty + if (newSelection.length > 0 || oldSelection.length > 0) { + this.body.emitter.emit('select', { + items: newSelection, + event: event + }); } + }; - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); - foreground.appendChild(dom.box); - } - if (!dom.line.parentNode) { - var background = this.parent.dom.background; - if (!background) throw new Error('Cannot redraw item: parent has no background container element'); - background.appendChild(dom.line); - } - if (!dom.dot.parentNode) { - var axis = this.parent.dom.axis; - if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); - axis.appendChild(dom.dot); - } - this.displayed = true; + /** + * Handle creation and updates of an item on double tap + * @param event + * @private + */ + ItemSet.prototype._onAddItem = function (event) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; - // 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) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); + var me = this; + var snap = this.options.snap || null; + var item = this.itemFromTarget(event); - var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; + if (item) { + // update item - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); - dom.box.className = 'vis-item vis-box' + className; - dom.line.className = 'vis-item vis-line' + className; - dom.dot.className = 'vis-item vis-dot' + className; + // execute async handler to update the item (or cancel it) + var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset + this.options.onUpdate(itemData, function (itemData) { + if (itemData) { + me.itemsData.getDataSet().update(itemData); + } + }); + } else { + // add item + var xAbs = util.getAbsoluteLeft(this.dom.frame); + var x = event.center.x - xAbs; + var start = this.body.util.toTime(x); + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); - // recalculate size - this.props.dot.height = dom.dot.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.line.width = dom.line.offsetWidth; - this.width = dom.box.offsetWidth; - this.height = dom.box.offsetHeight; + var newItemData = { + start: snap ? snap(start, scale, step) : start, + content: 'new item' + }; - this.dirty = false; - } + // when default type is a range, add a default end date to the new item + if (this.options.type === 'range') { + var end = this.body.util.toTime(x + this.props.width / 5); + newItemData.end = snap ? snap(end, scale, step) : end; + } - this._repaintDeleteButton(dom.box); - }; + newItemData[this.itemsData._fieldId] = util.randomUUID(); - /** - * Show the item in the DOM (when not already displayed). The items DOM will - * be created when needed. - */ - BoxItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); + var group = this.groupFromTarget(event); + if (group) { + newItemData.group = group.groupId; + } + + // execute async handler to customize (or cancel) adding an item + newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type + this.options.onAdd(newItemData, function (item) { + if (item) { + me.itemsData.getDataSet().add(item); + // TODO: need to trigger a redraw? + } + }); } }; /** - * Hide the item from the DOM (when visible) + * Handle selecting/deselecting multiple items when holding an item + * @param {Event} event + * @private */ - BoxItem.prototype.hide = function () { - if (this.displayed) { - var dom = this.dom; + ItemSet.prototype._onMultiSelectItem = function (event) { + if (!this.options.selectable) return; - if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); - if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); - if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); + var item = this.itemFromTarget(event); - this.displayed = false; - } - }; + if (item) { + // multi select items (if allowed) - /** - * Reposition the item horizontally - * @Override - */ - BoxItem.prototype.repositionX = function () { - var start = this.conversion.toScreen(this.data.start); - var align = this.options.align; - var left; + var selection = this.options.multiselect ? this.getSelection() // take current selection + : []; // deselect current selection - // calculate left position of the box - if (align == 'right') { - this.left = start - this.width; - } else if (align == 'left') { - this.left = start; - } else { - // default or 'center' - this.left = start - this.width / 2; - } + var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false; - // reposition box - this.dom.box.style.left = this.left + 'px'; + if (shiftKey && this.options.multiselect) { + // select all items between the old selection and the tapped item + var itemGroup = this.itemsData.get(item.id).group; - // reposition line - this.dom.line.style.left = start - this.props.line.width / 2 + 'px'; + // when filtering get the group of the last selected item + var lastSelectedGroup = undefined; + if (this.options.multiselectPerGroup) { + if (selection.length > 0) { + lastSelectedGroup = this.itemsData.get(selection[0]).group; + } + } - // reposition dot - this.dom.dot.style.left = start - this.props.dot.width / 2 + 'px'; - }; + // determine the selection range + if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) { + selection.push(item.id); + } + var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); - /** - * Reposition the item vertically - * @Override - */ - BoxItem.prototype.repositionY = function () { - var orientation = this.options.orientation.item; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; + if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) { + // select all items within the selection range + selection = []; + for (var id in this.items) { + if (this.items.hasOwnProperty(id)) { + var _item = this.items[id]; + var start = _item.data.start; + var end = _item.data.end !== undefined ? _item.data.end : start; - if (orientation == 'top') { - box.style.top = (this.top || 0) + 'px'; + if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) { + selection.push(_item.id); // do not use id but item.id, id itself is stringified + } + } + } + } + } else { + // add/remove this item from the current selection + var index = selection.indexOf(item.id); + if (index == -1) { + // item is not yet selected -> select it + selection.push(item.id); + } else { + // item is already selected -> deselect it + selection.splice(index, 1); + } + } - line.style.top = '0'; - line.style.height = this.parent.top + this.top + 1 + 'px'; - line.style.bottom = ''; - } else { - // orientation 'bottom' - var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty - var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; + this.setSelection(selection); - box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; - line.style.top = itemSetHeight - lineHeight + 'px'; - line.style.bottom = '0'; + this.body.emitter.emit('select', { + items: this.getSelection(), + event: event + }); } - - dot.style.top = -this.props.dot.height / 2 + 'px'; }; /** - * Return the width of the item left from its start date - * @return {number} + * Calculate the time range of a list of items + * @param {Array.} itemsData + * @return {{min: Date, max: Date}} Returns the range of the provided items + * @private */ - BoxItem.prototype.getWidthLeft = function () { - return this.width / 2; - }; + ItemSet._getItemRange = function (itemsData) { + var max = null; + var min = null; - /** - * Return the width of the item right from its start date - * @return {number} - */ - BoxItem.prototype.getWidthRight = function () { - return this.width / 2; - }; + itemsData.forEach(function (data) { + if (min == null || data.start < min) { + min = data.start; + } - module.exports = BoxItem; + if (data.end != undefined) { + if (max == null || data.end > max) { + max = data.end; + } + } else { + if (max == null || data.start > max) { + max = data.start; + } + } + }); -/***/ }, -/* 36 */ -/***/ function(module, exports, __webpack_require__) { + return { + min: min, + max: max + }; + }; - 'use strict'; + /** + * Find an item from an event target: + * searches for the attribute 'timeline-item' in the event target's element tree + * @param {Event} event + * @return {Item | null} item + */ + ItemSet.prototype.itemFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-item')) { + return target['timeline-item']; + } + target = target.parentNode; + } - var Item = __webpack_require__(33); + return null; + }; /** - * @constructor PointItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options + * Find the Group from an event target: + * searches for the attribute 'timeline-group' in the event target's element tree + * @param {Event} event + * @return {Group | null} group */ - function PointItem(data, conversion, options) { - this.props = { - dot: { - top: 0, - width: 0, - height: 0 - }, - content: { - height: 0, - marginLeft: 0 + ItemSet.prototype.groupFromTarget = function (event) { + var clientY = event.center ? event.center.y : event.clientY; + for (var i = 0; i < this.groupIds.length; i++) { + var groupId = this.groupIds[i]; + var group = this.groups[groupId]; + var foreground = group.dom.foreground; + var top = util.getAbsoluteTop(foreground); + if (clientY > top && clientY < top + foreground.offsetHeight) { + return group; } - }; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); + if (this.options.orientation.item === 'top') { + if (i === this.groupIds.length - 1 && clientY > top) { + return group; + } + } else { + if (i === 0 && clientY < top + foreground.offset) { + return group; + } } } - Item.call(this, data, conversion, options); - } - - PointItem.prototype = new Item(null, null, null); + return null; + }; /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Find the ItemSet from an event target: + * searches for the attribute 'timeline-itemset' in the event target's element tree + * @param {Event} event + * @return {ItemSet | null} item */ - PointItem.prototype.isVisible = function (range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return this.data.start > range.start - interval && this.data.start < range.end + interval; + ItemSet.itemSetFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-itemset')) { + return target['timeline-itemset']; + } + target = target.parentNode; + } + + return null; }; /** - * Repaint the item + * Clone the data of an item, and "normalize" it: convert the start and end date + * to the type (Date, Moment, ...) configured in the DataSet. If not configured, + * start and end are converted to Date. + * @param {Object} itemData, typically `item.data` + * @param {string} [type] Optional Date type. If not provided, the type from the DataSet is taken + * @return {Object} The cloned object + * @private */ - PointItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.point = document.createElement('div'); - // className is updated in redraw() - - // contents box, right from the dot - dom.content = document.createElement('div'); - dom.content.className = 'vis-item-content'; - dom.point.appendChild(dom.content); - - // dot at start - dom.dot = document.createElement('div'); - dom.point.appendChild(dom.dot); - - // attach this item as attribute - dom.point['timeline-item'] = this; + ItemSet.prototype._cloneItemData = function (itemData, type) { + var clone = util.extend({}, itemData); - this.dirty = true; + if (!type) { + // convert start and end date to the type (Date, Moment, ...) configured in the DataSet + type = this.itemsData.getDataSet()._options.type; } - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); + if (clone.start != undefined) { + clone.start = util.convert(clone.start, type && type.start || 'Date'); } - if (!dom.point.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); - } - foreground.appendChild(dom.point); + if (clone.end != undefined) { + clone.end = util.convert(clone.end, type && type.end || 'Date'); } - this.displayed = 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) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.point); - this._updateDataAttributes(this.dom.point); - this._updateStyle(this.dom.point); + return clone; + }; - var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; + module.exports = ItemSet; - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); - dom.point.className = 'vis-item vis-point' + className; - dom.dot.className = 'vis-item vis-dot' + className; +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { - // recalculate size of dot and contents - this.props.dot.width = dom.dot.offsetWidth; - this.props.dot.height = dom.dot.offsetHeight; - this.props.content.height = dom.content.offsetHeight; + 'use strict'; - // resize contents - dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; - //dom.content.style.marginRight = ... + 'px'; // TODO: margin right + var moment = __webpack_require__(2); + var DateUtil = __webpack_require__(29); + var util = __webpack_require__(1); - // recalculate size - this.width = dom.point.offsetWidth; - this.height = dom.point.offsetHeight; + /** + * @constructor TimeStep + * The class TimeStep is an iterator for dates. You provide a start date and an + * end date. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + */ + function TimeStep(start, end, minimumStep, hiddenDates) { + this.moment = moment; - // reposition the dot - dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; - dom.dot.style.left = this.props.dot.width / 2 + 'px'; + // variables + this.current = this.moment(); + this._start = this.moment(); + this._end = this.moment(); - this.dirty = false; + this.autoScale = true; + this.scale = 'day'; + this.step = 1; + + // initialize the range + this.setRange(start, end, minimumStep); + + // hidden Dates options + this.switchedDay = false; + this.switchedMonth = false; + this.switchedYear = false; + if (Array.isArray(hiddenDates)) { + this.hiddenDates = hiddenDates; + } else if (hiddenDates != undefined) { + this.hiddenDates = [hiddenDates]; + } else { + this.hiddenDates = []; } - this._repaintDeleteButton(dom.point); - }; + this.format = TimeStep.FORMAT; // default formatting + } - /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. - */ - PointItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); + // Time formatting + TimeStep.FORMAT = { + minorLabels: { + millisecond: 'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + month: 'MMM', + year: 'YYYY' + }, + majorLabels: { + millisecond: 'HH:mm:ss', + second: 'D MMMM HH:mm', + minute: 'ddd D MMMM', + hour: 'ddd D MMMM', + weekday: 'MMMM YYYY', + day: 'MMMM YYYY', + month: 'YYYY', + year: '' } }; /** - * Hide the item from the DOM (when visible) + * Set custom constructor function for moment. Can be used to set dates + * to UTC or to set a utcOffset. + * @param {function} moment */ - PointItem.prototype.hide = function () { - if (this.displayed) { - if (this.dom.point.parentNode) { - this.dom.point.parentNode.removeChild(this.dom.point); - } + TimeStep.prototype.setMoment = function (moment) { + this.moment = moment; - this.displayed = false; - } + // update the date properties, can have a new utcOffset + this.current = this.moment(this.current); + this._start = this.moment(this._start); + this._end = this.moment(this._end); }; /** - * Reposition the item horizontally - * @Override + * Set custom formatting for the minor an major labels of the TimeStep. + * Both `minorLabels` and `majorLabels` are an Object with properties: + * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'. + * @param {{minorLabels: Object, majorLabels: Object}} format */ - PointItem.prototype.repositionX = function () { - var start = this.conversion.toScreen(this.data.start); - - this.left = start - this.props.dot.width; - - // reposition point - this.dom.point.style.left = this.left + 'px'; + TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); }; /** - * Reposition the item vertically - * @Override + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Date} [start] The start date and time. + * @param {Date} [end] The end date and time. + * @param {int} [minimumStep] Optional. Minimum step size in milliseconds */ - PointItem.prototype.repositionY = function () { - var orientation = this.options.orientation.item; - var point = this.dom.point; + TimeStep.prototype.setRange = function (start, end, minimumStep) { + if (!(start instanceof Date) || !(end instanceof Date)) { + throw "No legal start or end date in method setRange"; + } - if (orientation == 'top') { - point.style.top = this.top + 'px'; - } else { - point.style.top = this.parent.height - this.top - this.height + 'px'; + this._start = start != undefined ? this.moment(start.valueOf()) : new Date(); + this._end = end != undefined ? this.moment(end.valueOf()) : new Date(); + + if (this.autoScale) { + this.setMinimumStep(minimumStep); } }; /** - * Return the width of the item left from its start date - * @return {number} + * Set the range iterator to the start date. */ - PointItem.prototype.getWidthLeft = function () { - return this.props.dot.width; + TimeStep.prototype.start = function () { + this.current = this._start.clone(); + this.roundToMinor(); }; /** - * Return the width of the item right from its start date - * @return {number} + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - PointItem.prototype.getWidthRight = function () { - return this.width - this.props.dot.width; - }; - - module.exports = PointItem; - -/***/ }, -/* 37 */ -/***/ function(module, exports, __webpack_require__) { + TimeStep.prototype.roundToMinor = function () { + // round to floor + // IMPORTANT: we have no breaks in this switch! (this is no bug) + // noinspection FallThroughInSwitchStatementJS + switch (this.scale) { + case 'year': + this.current.year(this.step * Math.floor(this.current.year() / this.step)); + this.current.month(0); + case 'month': + this.current.date(1); + case 'day': // intentional fall through + case 'weekday': + this.current.hours(0); + case 'hour': + this.current.minutes(0); + case 'minute': + this.current.seconds(0); + case 'second': + this.current.milliseconds(0); + //case 'millisecond': // nothing to do for milliseconds + } - 'use strict'; + if (this.step != 1) { + // round down to the first minor value that is a multiple of the current step size + switch (this.scale) { + case 'millisecond': + this.current.subtract(this.current.milliseconds() % this.step, 'milliseconds');break; + case 'second': + this.current.subtract(this.current.seconds() % this.step, 'seconds');break; + case 'minute': + this.current.subtract(this.current.minutes() % this.step, 'minutes');break; + case 'hour': + this.current.subtract(this.current.hours() % this.step, 'hours');break; + case 'weekday': // intentional fall through + case 'day': + this.current.subtract((this.current.date() - 1) % this.step, 'day');break; + case 'month': + this.current.subtract(this.current.month() % this.step, 'month');break; + case 'year': + this.current.subtract(this.current.year() % this.step, 'year');break; + default: + break; + } + } + }; - var Hammer = __webpack_require__(20); - var Item = __webpack_require__(33); - var BackgroundGroup = __webpack_require__(34); - var RangeItem = __webpack_require__(32); + /** + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date + */ + TimeStep.prototype.hasNext = function () { + return this.current.valueOf() <= this._end.valueOf(); + }; /** - * @constructor BackgroundItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options + * Do the next step */ - // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation - function BackgroundItem(data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true + TimeStep.prototype.next = function () { + var prev = this.current.valueOf(); - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); + // Two cases, needed to prevent issues with switching daylight savings + // (end of March and end of October) + if (this.current.month() < 6) { + switch (this.scale) { + case 'millisecond': + this.current.add(this.step, 'millisecond');break; + case 'second': + this.current.add(this.step, 'second');break; + case 'minute': + this.current.add(this.step, 'minute');break; + case 'hour': + this.current.add(this.step, 'hour'); + // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) + // TODO: is this still needed now we use the function of moment.js? + this.current.subtract(this.current.hours() % this.step, 'hour'); + break; + case 'weekday': // intentional fall through + case 'day': + this.current.add(this.step, 'day');break; + case 'month': + this.current.add(this.step, 'month');break; + case 'year': + this.current.add(this.step, 'year');break; + default: + break; } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); + } else { + switch (this.scale) { + case 'millisecond': + this.current.add(this.step, 'millisecond');break; + case 'second': + this.current.add(this.step, 'second');break; + case 'minute': + this.current.add(this.step, 'minute');break; + case 'hour': + this.current.add(this.step, 'hour');break; + case 'weekday': // intentional fall through + case 'day': + this.current.add(this.step, 'day');break; + case 'month': + this.current.add(this.step, 'month');break; + case 'year': + this.current.add(this.step, 'year');break; + default: + break; } } - Item.call(this, data, conversion, options); - } + if (this.step != 1) { + // round down to the correct major value + switch (this.scale) { + case 'millisecond': + if (this.current.milliseconds() < this.step) this.current.milliseconds(0);break; + case 'second': + if (this.current.seconds() < this.step) this.current.seconds(0);break; + case 'minute': + if (this.current.minutes() < this.step) this.current.minutes(0);break; + case 'hour': + if (this.current.hours() < this.step) this.current.hours(0);break; + case 'weekday': // intentional fall through + case 'day': + if (this.current.date() < this.step + 1) this.current.date(1);break; + case 'month': + if (this.current.month() < this.step) this.current.month(0);break; + case 'year': + break; // nothing to do for year + default: + break; + } + } - BackgroundItem.prototype = new Item(null, null, null); + // safety mechanism: if current time is still unchanged, move to the end + if (this.current.valueOf() == prev) { + this.current = this._end.clone(); + } - BackgroundItem.prototype.baseClassName = 'vis-item vis-background'; - BackgroundItem.prototype.stack = false; + DateUtil.stepOverHiddenDates(this.moment, this, prev); + }; /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Get the current datetime + * @return {Moment} current The current date */ - BackgroundItem.prototype.isVisible = function (range) { - // determine visibility - return this.data.start < range.end && this.data.end > range.start; + TimeStep.prototype.getCurrent = function () { + return this.current; }; /** - * Repaint the item + * Set a custom scale. Autoscaling will be disabled. + * For example setScale('minute', 5) will result + * in minor steps of 5 minutes, and major steps of an hour. + * + * @param {{scale: string, step: number}} params + * An object containing two properties: + * - A string 'scale'. Choose from 'millisecond', 'second', + * 'minute', 'hour', 'weekday', 'day', 'month', 'year'. + * - A number 'step'. A step size, by default 1. + * Choose for example 1, 2, 5, or 10. */ - BackgroundItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + TimeStep.prototype.setScale = function (params) { + if (params && typeof params.scale == 'string') { + this.scale = params.scale; + this.step = params.step > 0 ? params.step : 1; + this.autoScale = false; + } + }; - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() + /** + * Enable or disable autoscaling + * @param {boolean} enable If true, autoascaling is set true + */ + TimeStep.prototype.setAutoScale = function (enable) { + this.autoScale = enable; + }; - // frame box (to prevent the item contents from overflowing - dom.frame = document.createElement('div'); - dom.frame.className = 'vis-item-overflow'; - dom.box.appendChild(dom.frame); + /** + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds + */ + TimeStep.prototype.setMinimumStep = function (minimumStep) { + if (minimumStep == undefined) { + return; + } - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'vis-item-content'; - dom.frame.appendChild(dom.content); + //var b = asc + ds; - // Note: we do NOT attach this item as attribute to the DOM, - // such that background items cannot be selected - //dom.box['timeline-item'] = this; + var stepYear = 1000 * 60 * 60 * 24 * 30 * 12; + var stepMonth = 1000 * 60 * 60 * 24 * 30; + var stepDay = 1000 * 60 * 60 * 24; + var stepHour = 1000 * 60 * 60; + var stepMinute = 1000 * 60; + var stepSecond = 1000; + var stepMillisecond = 1; - this.dirty = true; + // find the smallest step that is larger than the provided minimumStep + if (stepYear * 1000 > minimumStep) { + this.scale = 'year';this.step = 1000; } - - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); + if (stepYear * 500 > minimumStep) { + this.scale = 'year';this.step = 500; } - if (!dom.box.parentNode) { - var background = this.parent.dom.background; - if (!background) { - throw new Error('Cannot redraw item: parent has no background container element'); - } - background.appendChild(dom.box); + if (stepYear * 100 > minimumStep) { + this.scale = 'year';this.step = 100; } - this.displayed = 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) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.content); - this._updateDataAttributes(this.dom.content); - this._updateStyle(this.dom.box); - - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : ''); - dom.box.className = this.baseClassName + className; + if (stepYear * 50 > minimumStep) { + this.scale = 'year';this.step = 50; + } + if (stepYear * 10 > minimumStep) { + this.scale = 'year';this.step = 10; + } + if (stepYear * 5 > minimumStep) { + this.scale = 'year';this.step = 5; + } + if (stepYear > minimumStep) { + this.scale = 'year';this.step = 1; + } + if (stepMonth * 3 > minimumStep) { + this.scale = 'month';this.step = 3; + } + if (stepMonth > minimumStep) { + this.scale = 'month';this.step = 1; + } + if (stepDay * 5 > minimumStep) { + this.scale = 'day';this.step = 5; + } + if (stepDay * 2 > minimumStep) { + this.scale = 'day';this.step = 2; + } + if (stepDay > minimumStep) { + this.scale = 'day';this.step = 1; + } + if (stepDay / 2 > minimumStep) { + this.scale = 'weekday';this.step = 1; + } + if (stepHour * 4 > minimumStep) { + this.scale = 'hour';this.step = 4; + } + if (stepHour > minimumStep) { + this.scale = 'hour';this.step = 1; + } + if (stepMinute * 15 > minimumStep) { + this.scale = 'minute';this.step = 15; + } + if (stepMinute * 10 > minimumStep) { + this.scale = 'minute';this.step = 10; + } + if (stepMinute * 5 > minimumStep) { + this.scale = 'minute';this.step = 5; + } + if (stepMinute > minimumStep) { + this.scale = 'minute';this.step = 1; + } + if (stepSecond * 15 > minimumStep) { + this.scale = 'second';this.step = 15; + } + if (stepSecond * 10 > minimumStep) { + this.scale = 'second';this.step = 10; + } + if (stepSecond * 5 > minimumStep) { + this.scale = 'second';this.step = 5; + } + if (stepSecond > minimumStep) { + this.scale = 'second';this.step = 1; + } + if (stepMillisecond * 200 > minimumStep) { + this.scale = 'millisecond';this.step = 200; + } + if (stepMillisecond * 100 > minimumStep) { + this.scale = 'millisecond';this.step = 100; + } + if (stepMillisecond * 50 > minimumStep) { + this.scale = 'millisecond';this.step = 50; + } + if (stepMillisecond * 10 > minimumStep) { + this.scale = 'millisecond';this.step = 10; + } + if (stepMillisecond * 5 > minimumStep) { + this.scale = 'millisecond';this.step = 5; + } + if (stepMillisecond > minimumStep) { + this.scale = 'millisecond';this.step = 1; + } + }; - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + /** + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * Static function + * @param {Date} date the date to be snapped. + * @param {string} scale Current scale, can be 'millisecond', 'second', + * 'minute', 'hour', 'weekday, 'day', 'month', 'year'. + * @param {number} step Current step (1, 2, 4, 5, ... + * @return {Date} snappedDate + */ + TimeStep.snap = function (date, scale, step) { + var clone = moment(date); - // recalculate size - this.props.content.width = this.dom.content.offsetWidth; - this.height = 0; // set height zero, so this item will be ignored when stacking items + if (scale == 'year') { + var year = clone.year() + Math.round(clone.month() / 12); + clone.year(Math.round(year / step) * step); + clone.month(0); + clone.date(0); + clone.hours(0); + clone.minutes(0); + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'month') { + if (clone.date() > 15) { + clone.date(1); + clone.add(1, 'month'); + // important: first set Date to 1, after that change the month. + } else { + clone.date(1); + } - this.dirty = false; + clone.hours(0); + clone.minutes(0); + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'day') { + //noinspection FallthroughInSwitchStatementJS + switch (step) { + case 5: + case 2: + clone.hours(Math.round(clone.hours() / 24) * 24);break; + default: + clone.hours(Math.round(clone.hours() / 12) * 12);break; + } + clone.minutes(0); + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'weekday') { + //noinspection FallthroughInSwitchStatementJS + switch (step) { + case 5: + case 2: + clone.hours(Math.round(clone.hours() / 12) * 12);break; + default: + clone.hours(Math.round(clone.hours() / 6) * 6);break; + } + clone.minutes(0); + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'hour') { + switch (step) { + case 4: + clone.minutes(Math.round(clone.minutes() / 60) * 60);break; + default: + clone.minutes(Math.round(clone.minutes() / 30) * 30);break; + } + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'minute') { + //noinspection FallthroughInSwitchStatementJS + switch (step) { + case 15: + case 10: + clone.minutes(Math.round(clone.minutes() / 5) * 5); + clone.seconds(0); + break; + case 5: + clone.seconds(Math.round(clone.seconds() / 60) * 60);break; + default: + clone.seconds(Math.round(clone.seconds() / 30) * 30);break; + } + clone.milliseconds(0); + } else if (scale == 'second') { + //noinspection FallthroughInSwitchStatementJS + switch (step) { + case 15: + case 10: + clone.seconds(Math.round(clone.seconds() / 5) * 5); + clone.milliseconds(0); + break; + case 5: + clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000);break; + default: + clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500);break; + } + } else if (scale == 'millisecond') { + var _step = step > 5 ? step / 2 : 1; + clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step); } + + return clone; }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. */ - BackgroundItem.prototype.show = RangeItem.prototype.show; + TimeStep.prototype.isMajor = function () { + if (this.switchedYear == true) { + this.switchedYear = false; + switch (this.scale) { + case 'year': + case 'month': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } else if (this.switchedMonth == true) { + this.switchedMonth = false; + switch (this.scale) { + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } else if (this.switchedDay == true) { + this.switchedDay = false; + switch (this.scale) { + case 'millisecond': + case 'second': + case 'minute': + case 'hour': + return true; + default: + return false; + } + } - /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed - */ - BackgroundItem.prototype.hide = RangeItem.prototype.hide; + var date = this.moment(this.current); + switch (this.scale) { + case 'millisecond': + return date.milliseconds() == 0; + case 'second': + return date.seconds() == 0; + case 'minute': + return date.hours() == 0 && date.minutes() == 0; + case 'hour': + return date.hours() == 0; + case 'weekday': // intentional fall through + case 'day': + return date.date() == 1; + case 'month': + return date.month() == 0; + case 'year': + return false; + default: + return false; + } + }; /** - * Reposition the item horizontally - * @Override + * Returns formatted text for the minor axislabel, depending on the current + * date and the scale. For example when scale is MINUTE, the current time is + * formatted as "hh:mm". + * @param {Date} [date] custom date. if not provided, current date is taken */ - BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; + TimeStep.prototype.getLabelMinor = function (date) { + if (date == undefined) { + date = this.current; + } + + var format = this.format.minorLabels[this.scale]; + return format && format.length > 0 ? this.moment(date).format(format) : ''; + }; /** - * Reposition the item vertically - * @Override + * Returns formatted text for the major axis label, depending on the current + * date and the scale. For example when scale is MINUTE, the major scale is + * hours, and the hour will be formatted as "hh". + * @param {Date} [date] custom date. if not provided, current date is taken */ - BackgroundItem.prototype.repositionY = function (margin) { - var onTop = this.options.orientation.item === 'top'; - this.dom.content.style.top = onTop ? '' : '0'; - this.dom.content.style.bottom = onTop ? '0' : ''; - var height; + TimeStep.prototype.getLabelMajor = function (date) { + if (date == undefined) { + date = this.current; + } - // special positioning for subgroups - if (this.data.subgroup !== undefined) { - // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset + var format = this.format.majorLabels[this.scale]; + return format && format.length > 0 ? this.moment(date).format(format) : ''; + }; - var itemSubgroup = this.data.subgroup; - var subgroups = this.parent.subgroups; - var subgroupIndex = subgroups[itemSubgroup].index; - // if the orientation is top, we need to take the difference in height into account. - if (onTop == true) { - // the first subgroup will have to account for the distance from the top to the first item. - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - height += subgroupIndex == 0 ? margin.axis - 0.5 * margin.item.vertical : 0; - var newTop = this.parent.top; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroupIndex) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } + TimeStep.prototype.getClassName = function () { + var _moment = this.moment; + var m = this.moment(this.current); + var current = m.locale ? m.locale('en') : m.lang('en'); // old versions of moment have .lang() function + var step = this.step; - // the others will have to be offset downwards with this same distance. - newTop += subgroupIndex != 0 ? margin.axis - 0.5 * margin.item.vertical : 0; - this.dom.box.style.top = newTop + 'px'; - this.dom.box.style.bottom = ''; + function even(value) { + return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; + } + + function today(date) { + if (date.isSame(new Date(), 'day')) { + return ' vis-today'; } - // and when the orientation is bottom: - else { - var newTop = this.parent.top; - var totalHeight = 0; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true) { - var newHeight = subgroups[subgroup].height + margin.item.vertical; - totalHeight += newHeight; - if (subgroups[subgroup].index > subgroupIndex) { - newTop += newHeight; - } - } - } - } - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - this.dom.box.style.top = this.parent.height - totalHeight + newTop + 'px'; - this.dom.box.style.bottom = ''; - } + if (date.isSame(_moment().add(1, 'day'), 'day')) { + return ' vis-tomorrow'; + } + if (date.isSame(_moment().add(-1, 'day'), 'day')) { + return ' vis-yesterday'; + } + return ''; } - // and in the case of no subgroups: - else { - // we want backgrounds with groups to only show in groups. - if (this.parent instanceof BackgroundGroup) { - // if the item is not in a group: - height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height); - this.dom.box.style.top = onTop ? '0' : ''; - this.dom.box.style.bottom = onTop ? '' : '0'; - } else { - height = this.parent.height; - // same alignment for items when orientation is top or bottom - this.dom.box.style.top = this.parent.top + 'px'; - this.dom.box.style.bottom = ''; + + function currentWeek(date) { + return date.isSame(new Date(), 'week') ? ' vis-current-week' : ''; + } + + function currentMonth(date) { + return date.isSame(new Date(), 'month') ? ' vis-current-month' : ''; + } + + function currentYear(date) { + return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; + } + + switch (this.scale) { + case 'millisecond': + return even(current.milliseconds()).trim(); + + case 'second': + return even(current.seconds()).trim(); + + case 'minute': + return even(current.minutes()).trim(); + + case 'hour': + var hours = current.hours(); + if (this.step == 4) { + hours = hours + '-h' + (hours + 4); } - } - this.dom.box.style.height = height + 'px'; + return 'vis-h' + hours + today(current) + even(current.hours()); + + case 'weekday': + return 'vis-' + current.format('dddd').toLowerCase() + today(current) + currentWeek(current) + even(current.date()); + + case 'day': + var day = current.date(); + var month = current.format('MMMM').toLowerCase(); + return 'vis-day' + day + ' vis-' + month + currentMonth(current) + even(day - 1); + + case 'month': + return 'vis-' + current.format('MMMM').toLowerCase() + currentMonth(current) + even(current.month()); + + case 'year': + var year = current.year(); + return 'vis-year' + year + currentYear(current) + even(year); + + default: + return ''; + } }; - module.exports = BackgroundItem; + module.exports = TimeStep; /***/ }, -/* 38 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var util = __webpack_require__(1); - var Component = __webpack_require__(25); - var TimeStep = __webpack_require__(29); - var DateUtil = __webpack_require__(26); - var moment = __webpack_require__(2); + var stack = __webpack_require__(34); + var RangeItem = __webpack_require__(35); /** - * A horizontal time axis - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See TimeAxis.setOptions for the available - * options. - * @constructor TimeAxis - * @extends Component + * @constructor Group + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - function TimeAxis(body, options) { - this.dom = { - foreground: null, - lines: [], - majorTexts: [], - minorTexts: [], - redundant: { - lines: [], - majorTexts: [], - minorTexts: [] - } - }; + function Group(groupId, data, itemSet) { + this.groupId = groupId; + this.subgroups = {}; + this.subgroupIndex = 0; + this.subgroupOrderer = data && data.subgroupOrder; + this.itemSet = itemSet; + + this.dom = {}; this.props = { - range: { - start: 0, - end: 0, - minimumStep: 0 - }, - lineTop: 0 + label: { + width: 0, + height: 0 + } }; + this.className = null; - this.defaultOptions = { - orientation: { - axis: 'bottom' - }, // axis orientation: 'top' or 'bottom' - showMinorLabels: true, - showMajorLabels: true, - maxMinorChars: 7, - format: TimeStep.FORMAT, - moment: moment, - timeAxis: null + this.items = {}; // items filtered by groupId of this group + this.visibleItems = []; // items currently visible in window + this.orderedItems = { + byStart: [], + byEnd: [] }; - this.options = util.extend({}, this.defaultOptions); - - this.body = body; + this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. + var me = this; + this.itemSet.body.emitter.on("checkRangedItems", function () { + me.checkRangedItems = true; + }); - // create the HTML DOM this._create(); - this.setOptions(options); + this.setData(data); } - TimeAxis.prototype = new Component(); - /** - * Set options for the TimeAxis. - * Parameters will be merged in current options. - * @param {Object} options Available options: - * {string} [orientation.axis] - * {boolean} [showMinorLabels] - * {boolean} [showMajorLabels] + * Create DOM elements for the group + * @private */ - TimeAxis.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showMinorLabels', 'showMajorLabels', 'maxMinorChars', 'hiddenDates', 'timeAxis', 'moment'], this.options, options); - - // deep copy the format options - util.selectiveDeepExtend(['format'], this.options, options); + Group.prototype._create = function () { + var label = document.createElement('div'); + if (this.itemSet.options.groupEditable.order) { + label.className = 'vis-label draggable'; + } else { + label.className = 'vis-label'; + } + this.dom.label = label; - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation.axis = options.orientation; - } else if (typeof options.orientation === 'object' && 'axis' in options.orientation) { - this.options.orientation.axis = options.orientation.axis; - } - } + var inner = document.createElement('div'); + inner.className = 'vis-inner'; + label.appendChild(inner); + this.dom.inner = inner; - // apply locale to moment.js - // TODO: not so nice, this is applied globally to moment.js - if ('locale' in options) { - if (typeof moment.locale === 'function') { - // moment.js 2.8.1+ - moment.locale(options.locale); - } else { - moment.lang(options.locale); - } - } - } - }; + var foreground = document.createElement('div'); + foreground.className = 'vis-group'; + foreground['timeline-group'] = this; + this.dom.foreground = foreground; - /** - * Create the HTML DOM for the TimeAxis - */ - TimeAxis.prototype._create = function () { - this.dom.foreground = document.createElement('div'); this.dom.background = document.createElement('div'); + this.dom.background.className = 'vis-group'; - this.dom.foreground.className = 'vis-time-axis vis-foreground'; - this.dom.background.className = 'vis-time-axis vis-background'; + this.dom.axis = document.createElement('div'); + this.dom.axis.className = 'vis-group'; + + // create a hidden marker to detect when the Timelines container is attached + // to the DOM, or the style of a parent of the Timeline is changed from + // display:none is changed to visible. + this.dom.marker = document.createElement('div'); + this.dom.marker.style.visibility = 'hidden'; + this.dom.marker.innerHTML = '?'; + this.dom.background.appendChild(this.dom.marker); }; /** - * Destroy the TimeAxis + * Set the group data for this group + * @param {Object} data Group data, can contain properties content and className */ - TimeAxis.prototype.destroy = function () { - // remove from DOM - if (this.dom.foreground.parentNode) { - this.dom.foreground.parentNode.removeChild(this.dom.foreground); + Group.prototype.setData = function (data) { + // update contents + var content; + if (this.itemSet.options && this.itemSet.options.groupTemplate) { + content = this.itemSet.options.groupTemplate(data); + } else { + content = data && data.content; } - if (this.dom.background.parentNode) { - this.dom.background.parentNode.removeChild(this.dom.background); + + if (content instanceof Element) { + this.dom.inner.appendChild(content); + while (this.dom.inner.firstChild) { + this.dom.inner.removeChild(this.dom.inner.firstChild); + } + this.dom.inner.appendChild(content); + } else if (content !== undefined && content !== null) { + this.dom.inner.innerHTML = content; + } else { + this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null } - this.body = null; + // update title + this.dom.label.title = data && data.title || ''; + + if (!this.dom.inner.firstChild) { + util.addClassName(this.dom.inner, 'vis-hidden'); + } else { + util.removeClassName(this.dom.inner, 'vis-hidden'); + } + + // update className + var className = data && data.className || null; + if (className != this.className) { + if (this.className) { + util.removeClassName(this.dom.label, this.className); + util.removeClassName(this.dom.foreground, this.className); + util.removeClassName(this.dom.background, this.className); + util.removeClassName(this.dom.axis, this.className); + } + util.addClassName(this.dom.label, className); + util.addClassName(this.dom.foreground, className); + util.addClassName(this.dom.background, className); + util.addClassName(this.dom.axis, className); + this.className = className; + } + + // update style + if (this.style) { + util.removeCssText(this.dom.label, this.style); + this.style = null; + } + if (data && data.style) { + util.addCssText(this.dom.label, data.style); + this.style = data.style; + } }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Get the width of the group label + * @return {number} width */ - TimeAxis.prototype.redraw = function () { - var props = this.props; - var foreground = this.dom.foreground; - var background = this.dom.background; + Group.prototype.getLabelWidth = function () { + return this.props.label.width; + }; - // determine the correct parent DOM element (depending on option orientation) - var parent = this.options.orientation.axis == 'top' ? this.body.dom.top : this.body.dom.bottom; - var parentChanged = foreground.parentNode !== parent; + /** + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [restack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized + */ + Group.prototype.redraw = function (range, margin, restack) { + var resized = false; - // calculate character width and height - this._calculateCharSize(); + // force recalculation of the height of the items when the marker height changed + // (due to the Timeline being attached to the DOM or changed from display:none to visible) + var markerHeight = this.dom.marker.clientHeight; + if (markerHeight != this.lastMarkerHeight) { + this.lastMarkerHeight = markerHeight; - // TODO: recalculate sizes only needed when parent is resized or options is changed - var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none'; - var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none'; + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - props.height = props.minorLabelHeight + props.majorLabelHeight; - props.width = foreground.offsetWidth; + restack = true; + } - props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); - props.minorLineWidth = 1; // TODO: really calculate width - props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; - props.majorLineWidth = 1; // TODO: really calculate width + // recalculate the height of the subgroups + this._calculateSubGroupHeights(); - // take foreground and background offline while updating (is almost twice as fast) - var foregroundNextSibling = foreground.nextSibling; - var backgroundNextSibling = background.nextSibling; - foreground.parentNode && foreground.parentNode.removeChild(foreground); - background.parentNode && background.parentNode.removeChild(background); + // reposition visible items vertically + if (typeof this.itemSet.options.order === 'function') { + // a custom order function - foreground.style.height = this.props.height + 'px'; + if (restack) { + // brute force restack of all items - this._repaintLabels(); + // show all items + var me = this; + var limitSize = false; + util.forEach(this.items, function (item) { + if (!item.displayed) { + item.redraw(); + me.visibleItems.push(item); + } + item.repositionX(limitSize); + }); - // put DOM online again (at the same place) - if (foregroundNextSibling) { - parent.insertBefore(foreground, foregroundNextSibling); + // order all items and force a restacking + var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) { + return me.itemSet.options.order(a.data, b.data); + }); + stack.stack(customOrderedItems, margin, true /* restack=true */); + } + + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); } else { - parent.appendChild(foreground); + // no custom order function, lazy stacking + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + + if (this.itemSet.options.stack) { + // TODO: ugly way to access options... + stack.stack(this.visibleItems, margin, restack); + } else { + // no stacking + stack.nostack(this.visibleItems, margin, this.subgroups); + } } - if (backgroundNextSibling) { - this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); - } else { - this.body.dom.backgroundVertical.appendChild(background); + + // recalculate the height of the group + var height = this._calculateHeight(margin); + + // calculate actual size and position + var foreground = this.dom.foreground; + this.top = foreground.offsetTop; + this.left = foreground.offsetLeft; + this.width = foreground.offsetWidth; + resized = util.updateProperty(this, 'height', height) || resized; + + // recalculate size of label + resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; + resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; + + // apply new height + this.dom.background.style.height = height + 'px'; + this.dom.foreground.style.height = height + 'px'; + this.dom.label.style.height = height + 'px'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); } - return this._isResized() || parentChanged; + return resized; }; /** - * Repaint major and minor text labels and vertical grid lines + * recalculate the height of the subgroups * @private */ - TimeAxis.prototype._repaintLabels = function () { - var orientation = this.options.orientation.axis; + Group.prototype._calculateSubGroupHeights = function () { + if (Object.keys(this.subgroups).length > 0) { + var me = this; - // calculate range and step (step such that we have space for 7 characters per label) - var start = util.convert(this.body.range.start, 'Number'); - var end = util.convert(this.body.range.end, 'Number'); - var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf(); - var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize); - minimumStep -= this.body.util.toTime(0).valueOf(); + this.resetSubgroups(); - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); - step.setMoment(this.options.moment); - if (this.options.format) { - step.setFormat(this.options.format); + util.forEach(this.visibleItems, function (item) { + if (item.data.subgroup !== undefined) { + me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height); + me.subgroups[item.data.subgroup].visible = true; + } + }); } - if (this.options.timeAxis) { - step.setScale(this.options.timeAxis); + }; + + /** + * recalculate the height of the group + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @returns {number} Returns the height + * @private + */ + Group.prototype._calculateHeight = function (margin) { + // recalculate the height of the group + var height; + var visibleItems = this.visibleItems; + if (visibleItems.length > 0) { + var min = visibleItems[0].top; + var max = visibleItems[0].top + visibleItems[0].height; + util.forEach(visibleItems, function (item) { + min = Math.min(min, item.top); + max = Math.max(max, item.top + item.height); + }); + if (min > margin.axis) { + // there is an empty gap between the lowest item and the axis + var offset = min - margin.axis; + max -= offset; + util.forEach(visibleItems, function (item) { + item.top -= offset; + }); + } + height = max + margin.item.vertical / 2; + } else { + height = 0; } - this.step = step; + height = Math.max(height, this.props.label.height); - // Move all DOM elements to a "redundant" list, where they - // can be picked for re-use, and clear the lists with lines and texts. - // At the end of the function _repaintLabels, left over elements will be cleaned up - var dom = this.dom; - dom.redundant.lines = dom.lines; - dom.redundant.majorTexts = dom.majorTexts; - dom.redundant.minorTexts = dom.minorTexts; - dom.lines = []; - dom.majorTexts = []; - dom.minorTexts = []; + return height; + }; - var current; - var next; - var x; - var xNext; - var isMajor, nextIsMajor; - var width = 0, - prevWidth; - var line; - var labelMinor; - var xFirstMajorLabel = undefined; - var count = 0; - var MAX = 1000; - var className; + /** + * Show this group: attach to the DOM + */ + Group.prototype.show = function () { + if (!this.dom.label.parentNode) { + this.itemSet.dom.labelSet.appendChild(this.dom.label); + } - step.start(); - next = step.getCurrent(); - xNext = this.body.util.toScreen(next); - while (step.hasNext() && count < MAX) { - count++; + if (!this.dom.foreground.parentNode) { + this.itemSet.dom.foreground.appendChild(this.dom.foreground); + } - isMajor = step.isMajor(); - className = step.getClassName(); - labelMinor = step.getLabelMinor(); + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } - current = next; - x = xNext; + if (!this.dom.axis.parentNode) { + this.itemSet.dom.axis.appendChild(this.dom.axis); + } + }; - step.next(); - next = step.getCurrent(); - nextIsMajor = step.isMajor(); - xNext = this.body.util.toScreen(next); + /** + * Hide this group: remove from the DOM + */ + Group.prototype.hide = function () { + var label = this.dom.label; + if (label.parentNode) { + label.parentNode.removeChild(label); + } - prevWidth = width; - width = xNext - x; - var showMinorGrid = width >= prevWidth * 0.4; // prevent displaying of the 31th of the month on a scale of 5 days + var foreground = this.dom.foreground; + if (foreground.parentNode) { + foreground.parentNode.removeChild(foreground); + } - if (this.options.showMinorLabels && showMinorGrid) { - var label = this._repaintMinorText(x, labelMinor, orientation, className); - label.style.width = width + 'px'; // set width to prevent overflow - } + var background = this.dom.background; + if (background.parentNode) { + background.parentNode.removeChild(background); + } - if (isMajor && this.options.showMajorLabels) { - if (x > 0) { - if (xFirstMajorLabel == undefined) { - xFirstMajorLabel = x; - } - label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className); - } - line = this._repaintMajorLine(x, width, orientation, className); - } else { - // minor line - if (showMinorGrid) { - line = this._repaintMinorLine(x, width, orientation, className); - } else { - if (line) { - // adjust the width of the previous grid - line.style.width = parseInt(line.style.width) + width + 'px'; - } - } + var axis = this.dom.axis; + if (axis.parentNode) { + axis.parentNode.removeChild(axis); + } + }; + + /** + * Add an item to the group + * @param {Item} item + */ + Group.prototype.add = function (item) { + this.items[item.id] = item; + item.setParent(this); + + // add to + if (item.data.subgroup !== undefined) { + if (this.subgroups[item.data.subgroup] === undefined) { + this.subgroups[item.data.subgroup] = { height: 0, visible: false, index: this.subgroupIndex, items: [] }; + this.subgroupIndex++; } + this.subgroups[item.data.subgroup].items.push(item); } + this.orderSubgroups(); - if (count === MAX && !warnedForOverflow) { - console.warn('Something is wrong with the Timeline scale. Limited drawing of grid lines to ' + MAX + ' lines.'); - warnedForOverflow = true; + if (this.visibleItems.indexOf(item) == -1) { + var range = this.itemSet.body.range; // TODO: not nice accessing the range like this + this._checkIfVisible(item, this.visibleItems, range); } + }; - // create a major label on the left when needed - if (this.options.showMajorLabels) { - var leftTime = this.body.util.toTime(0), - leftText = step.getLabelMajor(leftTime), - widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation + Group.prototype.orderSubgroups = function () { + if (this.subgroupOrderer !== undefined) { + var sortArray = []; + if (typeof this.subgroupOrderer == 'string') { + for (var subgroup in this.subgroups) { + sortArray.push({ subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer] }); + } + sortArray.sort(function (a, b) { + return a.sortField - b.sortField; + }); + } else if (typeof this.subgroupOrderer == 'function') { + for (var subgroup in this.subgroups) { + sortArray.push(this.subgroups[subgroup].items[0].data); + } + sortArray.sort(this.subgroupOrderer); + } - if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { - this._repaintMajorText(0, leftText, orientation, className); + if (sortArray.length > 0) { + for (var i = 0; i < sortArray.length; i++) { + this.subgroups[sortArray[i].subgroup].index = i; + } } } + }; - // Cleanup leftover DOM elements from the redundant list - util.forEach(this.dom.redundant, function (arr) { - while (arr.length) { - var elem = arr.pop(); - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } + Group.prototype.resetSubgroups = function () { + for (var subgroup in this.subgroups) { + if (this.subgroups.hasOwnProperty(subgroup)) { + this.subgroups[subgroup].visible = false; } - }); + } }; /** - * Create a minor label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the HTML element of the created label - * @private + * Remove an item from the group + * @param {Item} item */ - TimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) { - // reuse redundant label - var label = this.dom.redundant.minorTexts.shift(); - - if (!label) { - // create new label - var content = document.createTextNode(''); - label = document.createElement('div'); - label.appendChild(content); - this.dom.foreground.appendChild(label); - } - this.dom.minorTexts.push(label); + Group.prototype.remove = function (item) { + delete this.items[item.id]; + item.setParent(null); - label.childNodes[0].nodeValue = text; + // remove from visible items + var index = this.visibleItems.indexOf(item); + if (index != -1) this.visibleItems.splice(index, 1); - label.style.top = orientation == 'top' ? this.props.majorLabelHeight + 'px' : '0'; - label.style.left = x + 'px'; - label.className = 'vis-text vis-minor ' + className; - //label.title = title; // TODO: this is a heavy operation + if (item.data.subgroup !== undefined) { + var subgroup = this.subgroups[item.data.subgroup]; + if (subgroup) { + var itemIndex = subgroup.items.indexOf(item); + subgroup.items.splice(itemIndex, 1); + if (!subgroup.items.length) { + delete this.subgroups[item.data.subgroup]; + this.subgroupIndex--; + } + this.orderSubgroups(); + } + } + }; - return label; + /** + * Remove an item from the corresponding DataSet + * @param {Item} item + */ + Group.prototype.removeFromDataSet = function (item) { + this.itemSet.removeItem(item.id); }; /** - * Create a Major label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the HTML element of the created label - * @private + * Reorder the items */ - TimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) { - // reuse redundant label - var label = this.dom.redundant.majorTexts.shift(); + Group.prototype.order = function () { + var array = util.toArray(this.items); + var startArray = []; + var endArray = []; - if (!label) { - // create label - var content = document.createTextNode(text); - label = document.createElement('div'); - label.appendChild(content); - this.dom.foreground.appendChild(label); + for (var i = 0; i < array.length; i++) { + if (array[i].data.end !== undefined) { + endArray.push(array[i]); + } + startArray.push(array[i]); } - this.dom.majorTexts.push(label); - - label.childNodes[0].nodeValue = text; - label.className = 'vis-text vis-major ' + className; - //label.title = title; // TODO: this is a heavy operation - - label.style.top = orientation == 'top' ? '0' : this.props.minorLabelHeight + 'px'; - label.style.left = x + 'px'; + this.orderedItems = { + byStart: startArray, + byEnd: endArray + }; - return label; + stack.orderByStart(this.orderedItems.byStart); + stack.orderByEnd(this.orderedItems.byEnd); }; /** - * Create a minor line for the axis at position x - * @param {Number} x - * @param {Number} width - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the created line + * Update the visible items + * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date + * @param {Item[]} visibleItems The previously visible items. + * @param {{start: number, end: number}} range Visible range + * @return {Item[]} visibleItems The new visible items. * @private */ - TimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) { - // reuse redundant line - var line = this.dom.redundant.lines.shift(); - if (!line) { - // create vertical line - line = document.createElement('div'); - this.dom.background.appendChild(line); + Group.prototype._updateVisibleItems = function (orderedItems, oldVisibleItems, range) { + var visibleItems = []; + var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems + var interval = (range.end - range.start) / 4; + var lowerBound = range.start - interval; + var upperBound = range.end + interval; + var item, i; + + // this function is used to do the binary search. + var searchFunction = function searchFunction(value) { + if (value < lowerBound) { + return -1; + } else if (value <= upperBound) { + return 0; + } else { + return 1; + } + }; + + // first check if the items that were in view previously are still in view. + // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! + // also cleans up invisible items. + if (oldVisibleItems.length > 0) { + for (i = 0; i < oldVisibleItems.length; i++) { + this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); + } } - this.dom.lines.push(line); - var props = this.props; - if (orientation == 'top') { - line.style.top = props.majorLabelHeight + 'px'; + // we do a binary search for the items that have only start values. + var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data', 'start'); + + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. + this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { + return item.data.start < lowerBound || item.data.start > upperBound; + }); + + // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. + // We therefore have to brute force check all items in the byEnd list + if (this.checkRangedItems == true) { + this.checkRangedItems = false; + for (i = 0; i < orderedItems.byEnd.length; i++) { + this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); + } } else { - line.style.top = this.body.domProps.top.height + 'px'; + // we do a binary search for the items that have defined end times. + var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data', 'end'); + + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. + this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { + return item.data.end < lowerBound || item.data.end > upperBound; + }); } - line.style.height = props.minorLineHeight + 'px'; - line.style.left = x - props.minorLineWidth / 2 + 'px'; - line.style.width = width + 'px'; - line.className = 'vis-grid vis-vertical vis-minor ' + className; + // finally, we reposition all the visible items. + for (i = 0; i < visibleItems.length; i++) { + item = visibleItems[i]; + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); + } - return line; + // debug + //console.log("new line") + //if (this.groupId == null) { + // for (i = 0; i < orderedItems.byStart.length; i++) { + // item = orderedItems.byStart[i].data; + // console.log('start',i,initialPosByStart, item.start.valueOf(), item.content, item.start >= lowerBound && item.start <= upperBound,i == initialPosByStart ? "<------------------- HEREEEE" : "") + // } + // for (i = 0; i < orderedItems.byEnd.length; i++) { + // item = orderedItems.byEnd[i].data; + // console.log('rangeEnd',i,initialPosByEnd, item.end.valueOf(), item.content, item.end >= range.start && item.end <= range.end,i == initialPosByEnd ? "<------------------- HEREEEE" : "") + // } + //} + + return visibleItems; + }; + + Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { + var item; + var i; + + if (initialPos != -1) { + for (i = initialPos; i >= 0; i--) { + item = items[i]; + if (breakCondition(item)) { + break; + } else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } + } + } + + for (i = initialPos + 1; i < items.length; i++) { + item = items[i]; + if (breakCondition(item)) { + break; + } else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } + } + } + } }; /** - * Create a Major line for the axis at position x - * @param {Number} x - * @param {Number} width - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the created line + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range * @private */ - TimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) { - // reuse redundant line - var line = this.dom.redundant.lines.shift(); - if (!line) { - // create vertical line - line = document.createElement('div'); - this.dom.background.appendChild(line); - } - this.dom.lines.push(line); - - var props = this.props; - if (orientation == 'top') { - line.style.top = '0'; + Group.prototype._checkIfVisible = function (item, visibleItems, range) { + if (item.isVisible(range)) { + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); + visibleItems.push(item); } else { - line.style.top = this.body.domProps.top.height + 'px'; + if (item.displayed) item.hide(); } - line.style.left = x - props.majorLineWidth / 2 + 'px'; - line.style.height = props.majorLineHeight + 'px'; - line.style.width = width + 'px'; - - line.className = 'vis-grid vis-vertical vis-major ' + className; - - return line; }; /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range * @private */ - TimeAxis.prototype._calculateCharSize = function () { - // Note: We calculate char size with every redraw. Size may change, for - // example when any of the timelines parents had display:none for example. - - // determine the char width and height on the minor axis - if (!this.dom.measureCharMinor) { - this.dom.measureCharMinor = document.createElement('DIV'); - this.dom.measureCharMinor.className = 'vis-text vis-minor vis-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; - - // determine the char width and height on the major axis - if (!this.dom.measureCharMajor) { - this.dom.measureCharMajor = document.createElement('DIV'); - this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure'; - this.dom.measureCharMajor.style.position = 'absolute'; - - this.dom.measureCharMajor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMajor); + Group.prototype._checkIfVisibleWithReference = function (item, visibleItems, visibleItemsLookup, range) { + if (item.isVisible(range)) { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } + } else { + if (item.displayed) item.hide(); } - this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight; - this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth; }; - var warnedForOverflow = false; - - module.exports = TimeAxis; + module.exports = Group; /***/ }, -/* 39 */ -/***/ function(module, exports, __webpack_require__) { +/* 34 */ +/***/ function(module, exports) { 'use strict'; - var keycharm = __webpack_require__(40); - var Emitter = __webpack_require__(12); - var Hammer = __webpack_require__(20); - var util = __webpack_require__(1); + // Utility functions for ordering and stacking of items + var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors /** - * Turn an element into an clickToUse element. - * When not active, the element has a transparent overlay. When the overlay is - * clicked, the mode is changed to active. - * When active, the element is displayed with a blue border around it, and - * the interactive contents of the element can be used. When clicked outside - * the element, the elements mode is changed to inactive. - * @param {Element} container - * @constructor + * Order items by their start data + * @param {Item[]} items */ - function Activator(container) { - this.active = false; + exports.orderByStart = function (items) { + items.sort(function (a, b) { + return a.data.start - b.data.start; + }); + }; - this.dom = { - container: container - }; + /** + * Order items by their end date. If they have no end date, their start date + * is used. + * @param {Item[]} items + */ + exports.orderByEnd = function (items) { + items.sort(function (a, b) { + var aTime = 'end' in a.data ? a.data.end : a.data.start, + bTime = 'end' in b.data ? b.data.end : b.data.start; - this.dom.overlay = document.createElement('div'); - this.dom.overlay.className = 'vis-overlay'; + return aTime - bTime; + }); + }; - this.dom.container.appendChild(this.dom.overlay); + /** + * Adjust vertical positions of the items such that they don't overlap each + * other. + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. + * @param {boolean} [force=false] + * If true, all items will be repositioned. If false (default), only + * items having a top===null will be re-stacked + */ + exports.stack = function (items, margin, force) { + var i, iMax; - this.hammer = Hammer(this.dom.overlay); - this.hammer.on('tap', this._onTapOverlay.bind(this)); + if (force) { + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + items[i].top = null; + } + } - // block all touch events (except tap) - var me = this; - var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend']; - events.forEach(function (event) { - me.hammer.on(event, function (event) { - event.stopPropagation(); - }); - }); + // calculate new, non-overlapping positions + for (i = 0, iMax = items.length; i < iMax; i++) { + var item = items[i]; + if (item.stack && item.top === null) { + // initialize top position + item.top = margin.axis; - // attach a click event to the window, in order to deactivate when clicking outside the timeline - if (document && document.body) { - this.onClick = function (event) { - if (!_hasParent(event.target, container)) { - me.deactivate(); - } - }; - document.body.addEventListener('click', this.onClick); - } + do { + // TODO: optimize checking for overlap. when there is a gap without items, + // you only need to check for items from the next item on, not from zero + var collidingItem = null; + for (var j = 0, jj = items.length; j < jj; j++) { + var other = items[j]; + if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item)) { + collidingItem = other; + break; + } + } - if (this.keycharm !== undefined) { - this.keycharm.destroy(); + if (collidingItem != null) { + // There is a collision. Reposition the items above the colliding element + item.top = collidingItem.top + collidingItem.height + margin.item.vertical; + } + } while (collidingItem); + } } - this.keycharm = keycharm(); - - // keycharm listener only bounded when active) - this.escListener = this.deactivate.bind(this); - } - - // turn into an event emitter - Emitter(Activator.prototype); - - // The currently active activator - Activator.current = null; + }; /** - * Destroy the activator. Cleans up all created DOM and event listeners + * Adjust vertical positions of the items without stacking them + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. */ - Activator.prototype.destroy = function () { - this.deactivate(); - - // remove dom - this.dom.overlay.parentNode.removeChild(this.dom.overlay); + exports.nostack = function (items, margin, subgroups) { + var i, iMax, newTop; - // remove global event listener - if (this.onClick) { - document.body.removeEventListener('click', this.onClick); + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + if (items[i].data.subgroup !== undefined) { + newTop = margin.axis; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { + newTop += subgroups[subgroup].height + margin.item.vertical; + } + } + } + items[i].top = newTop; + } else { + items[i].top = margin.axis; + } } - - // cleanup hammer instances - this.hammer.destroy(); - this.hammer = null; - // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) }; /** - * Activate the element - * Overlay is hidden, element is decorated with a blue shadow border + * Test if the two provided items collide + * The items must have parameters left, width, top, and height. + * @param {Item} a The first item + * @param {Item} b The second item + * @param {{horizontal: number, vertical: number}} margin + * An object containing a horizontal and vertical + * minimum required margin. + * @return {boolean} true if a and b collide, else false */ - Activator.prototype.activate = function () { - // we allow only one active activator at a time - if (Activator.current) { - Activator.current.deactivate(); - } - Activator.current = this; - - this.active = true; - this.dom.overlay.style.display = 'none'; - util.addClassName(this.dom.container, 'vis-active'); - - this.emit('change'); - this.emit('activate'); - - // ugly hack: bind ESC after emitting the events, as the Network rebinds all - // keyboard events on a 'change' event - this.keycharm.bind('esc', this.escListener); + exports.collision = function (a, b, margin) { + return a.left - margin.horizontal + EPSILON < b.left + b.width && a.left + a.width + margin.horizontal - EPSILON > b.left && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; }; - /** - * Deactivate the element - * Overlay is displayed on top of the element - */ - Activator.prototype.deactivate = function () { - this.active = false; - this.dom.overlay.style.display = ''; - util.removeClassName(this.dom.container, 'vis-active'); - this.keycharm.unbind('esc', this.escListener); +/***/ }, +/* 35 */ +/***/ function(module, exports, __webpack_require__) { - this.emit('change'); - this.emit('deactivate'); - }; + 'use strict'; - /** - * Handle a tap event: activate the container - * @param event - * @private - */ - Activator.prototype._onTapOverlay = function (event) { - // activate the container - this.activate(); - event.stopPropagation(); - }; + var Hammer = __webpack_require__(22); + var Item = __webpack_require__(36); /** - * Test whether the element has the requested parent element somewhere in - * its chain of parent nodes. - * @param {HTMLElement} element - * @param {HTMLElement} parent - * @returns {boolean} Returns true when the parent is found somewhere in the - * chain of parent nodes. - * @private + * @constructor RangeItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options */ - function _hasParent(element, parent) { - while (element) { - if (element === parent) { - return true; + function RangeItem(data, conversion, options) { + this.props = { + content: { + width: 0 + } + }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); + } + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); } - element = element.parentNode; } - return false; + + Item.call(this, data, conversion, options); } - module.exports = Activator; + RangeItem.prototype = new Item(null, null, null); -/***/ }, -/* 40 */ -/***/ function(module, exports, __webpack_require__) { + RangeItem.prototype.baseClassName = 'vis-item vis-range'; - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; /** - * Created by Alex on 11/6/2014. + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ + RangeItem.prototype.isVisible = function (range) { + // determine visibility + return this.data.start < range.end && this.data.end > range.start; + }; - // https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60 - // if the module has no dependencies, the above pattern can be simplified to - (function (root, factory) { - if (true) { - // AMD. Register as an anonymous module. - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.keycharm = factory(); - } - }(this, function () { - - function keycharm(options) { - var preventDefault = options && options.preventDefault || false; - - var container = options && options.container || window; + /** + * Repaint the item + */ + RangeItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var _exportFunctions = {}; - var _bound = {keydown:{}, keyup:{}}; - var _keys = {}; - var i; + // background box + dom.box = document.createElement('div'); + // className is updated in redraw() - // a - z - for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};} - // A - Z - for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};} - // 0 - 9 - for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};} - // F1 - F12 - for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};} - // num0 - num9 - for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};} + // frame box (to prevent the item contents from overflowing + dom.frame = document.createElement('div'); + dom.frame.className = 'vis-item-overflow'; + dom.box.appendChild(dom.frame); - // numpad misc - _keys['num*'] = {code:106, shift: false}; - _keys['num+'] = {code:107, shift: false}; - _keys['num-'] = {code:109, shift: false}; - _keys['num/'] = {code:111, shift: false}; - _keys['num.'] = {code:110, shift: false}; - // arrows - _keys['left'] = {code:37, shift: false}; - _keys['up'] = {code:38, shift: false}; - _keys['right'] = {code:39, shift: false}; - _keys['down'] = {code:40, shift: false}; - // extra keys - _keys['space'] = {code:32, shift: false}; - _keys['enter'] = {code:13, shift: false}; - _keys['shift'] = {code:16, shift: undefined}; - _keys['esc'] = {code:27, shift: false}; - _keys['backspace'] = {code:8, shift: false}; - _keys['tab'] = {code:9, shift: false}; - _keys['ctrl'] = {code:17, shift: false}; - _keys['alt'] = {code:18, shift: false}; - _keys['delete'] = {code:46, shift: false}; - _keys['pageup'] = {code:33, shift: false}; - _keys['pagedown'] = {code:34, shift: false}; - // symbols - _keys['='] = {code:187, shift: false}; - _keys['-'] = {code:189, shift: false}; - _keys[']'] = {code:221, shift: false}; - _keys['['] = {code:219, shift: false}; + // contents box + dom.content = document.createElement('div'); + dom.content.className = 'vis-item-content'; + dom.frame.appendChild(dom.content); + // attach this item as attribute + dom.box['timeline-item'] = this; + this.dirty = true; + } - var down = function(event) {handleEvent(event,'keydown');}; - var up = function(event) {handleEvent(event,'keyup');}; + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) { + throw new Error('Cannot redraw item: parent has no foreground container element'); + } + foreground.appendChild(dom.box); + } + this.displayed = true; - // handle the actualy bound key with the event - var handleEvent = function(event,type) { - if (_bound[type][event.keyCode] !== undefined) { - var bound = _bound[type][event.keyCode]; - for (var i = 0; i < bound.length; i++) { - if (bound[i].shift === undefined) { - bound[i].fn(event); - } - else if (bound[i].shift == true && event.shiftKey == true) { - bound[i].fn(event); - } - else if (bound[i].shift == false && event.shiftKey == false) { - bound[i].fn(event); - } - } + // 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) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.box); + this._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); - if (preventDefault == true) { - event.preventDefault(); - } - } - }; + var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; - // bind a key to a callback - _exportFunctions.bind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; - } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); - } - if (_bound[type][_keys[key].code] === undefined) { - _bound[type][_keys[key].code] = []; - } - _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift}); - }; + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + dom.box.className = this.baseClassName + className; + // determine from css whether this box has overflow + this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden'; - // bind all keys to a call back (demo purposes) - _exportFunctions.bindAll = function(callback, type) { - if (type === undefined) { - type = 'keydown'; - } - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - _exportFunctions.bind(key,callback,type); - } - } - }; + // recalculate size + // turn off max-width to be able to calculate the real width + // this causes an extra browser repaint/reflow, but so be it + this.dom.content.style.maxWidth = 'none'; + this.props.content.width = this.dom.content.offsetWidth; + this.height = this.dom.box.offsetHeight; + this.dom.content.style.maxWidth = ''; - // get the key label from an event - _exportFunctions.getKey = function(event) { - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) { - return key; - } - else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) { - return key; - } - else if (event.keyCode == _keys[key].code && key == 'shift') { - return key; - } - } - } - return "unknown key, currently not supported"; - }; + this.dirty = false; + } - // unbind either a specific callback from a key or all of them (by leaving callback undefined) - _exportFunctions.unbind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; - } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); - } - if (callback !== undefined) { - var newBindings = []; - var bound = _bound[type][_keys[key].code]; - if (bound !== undefined) { - for (var i = 0; i < bound.length; i++) { - if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) { - newBindings.push(_bound[type][_keys[key].code][i]); - } - } - } - _bound[type][_keys[key].code] = newBindings; - } - else { - _bound[type][_keys[key].code] = []; - } - }; + this._repaintDeleteButton(dom.box); + this._repaintDragLeft(); + this._repaintDragRight(); + }; - // reset all bound variables. - _exportFunctions.reset = function() { - _bound = {keydown:{}, keyup:{}}; - }; + /** + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. + */ + RangeItem.prototype.show = function () { + if (!this.displayed) { + this.redraw(); + } + }; - // unbind all listeners and reset all variables. - _exportFunctions.destroy = function() { - _bound = {keydown:{}, keyup:{}}; - container.removeEventListener('keydown', down, true); - container.removeEventListener('keyup', up, true); - }; + /** + * Hide the item from the DOM (when visible) + * @return {Boolean} changed + */ + RangeItem.prototype.hide = function () { + if (this.displayed) { + var box = this.dom.box; - // create listeners. - container.addEventListener('keydown',down,true); - container.addEventListener('keyup',up,true); + if (box.parentNode) { + box.parentNode.removeChild(box); + } - // return the public functions. - return _exportFunctions; + this.displayed = false; } + }; - return keycharm; - })); + /** + * Reposition the item horizontally + * @param {boolean} [limitSize=true] If true (default), the width of the range + * item will be limited, as the browser cannot + * display very wide divs. This means though + * that the applied left and width may + * not correspond to the ranges start and end + * @Override + */ + RangeItem.prototype.repositionX = function (limitSize) { + var parentWidth = this.parent.width; + var start = this.conversion.toScreen(this.data.start); + var end = this.conversion.toScreen(this.data.end); + var contentLeft; + var contentWidth; + // limit the width of the range, as browsers cannot draw very wide divs + if (limitSize === undefined || limitSize === true) { + if (start < -parentWidth) { + start = -parentWidth; + } + if (end > 2 * parentWidth) { + end = 2 * parentWidth; + } + } + var boxWidth = Math.max(end - start, 1); + if (this.overflow) { + this.left = start; + this.width = boxWidth + this.props.content.width; + contentWidth = this.props.content.width; + // Note: The calculation of width is an optimistic calculation, giving + // a width which will not change when moving the Timeline + // So no re-stacking needed, which is nicer for the eye; + } else { + this.left = start; + this.width = boxWidth; + contentWidth = Math.min(end - start, this.props.content.width); + } -/***/ }, -/* 41 */ -/***/ function(module, exports, __webpack_require__) { + this.dom.box.style.left = this.left + 'px'; + this.dom.box.style.width = boxWidth + 'px'; - 'use strict'; + switch (this.options.align) { + case 'left': + this.dom.content.style.left = '0'; + break; - var Hammer = __webpack_require__(20); - var util = __webpack_require__(1); - var Component = __webpack_require__(25); - var moment = __webpack_require__(2); - var locales = __webpack_require__(42); + case 'right': + this.dom.content.style.left = Math.max(boxWidth - contentWidth, 0) + 'px'; + break; - /** - * A custom time bar - * @param {{range: Range, dom: Object}} body - * @param {Object} [options] Available parameters: - * {number | string} id - * {string} locales - * {string} locale - * @constructor CustomTime - * @extends Component - */ + case 'center': + this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; + break; - function CustomTime(body, options) { - this.body = body; + default: + // 'auto' + // when range exceeds left of the window, position the contents at the left of the visible area + if (this.overflow) { + if (end > 0) { + contentLeft = Math.max(-start, 0); + } else { + contentLeft = -contentWidth; // ensure it's not visible anymore + } + } else { + if (start < 0) { + contentLeft = -start; + } else { + contentLeft = 0; + } + } + this.dom.content.style.left = contentLeft + 'px'; + } + }; - // default options - this.defaultOptions = { - moment: moment, - locales: locales, - locale: 'en', - id: undefined, - title: undefined - }; - this.options = util.extend({}, this.defaultOptions); + /** + * Reposition the item vertically + * @Override + */ + RangeItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var box = this.dom.box; - if (options && options.time) { - this.customTime = options.time; + if (orientation == 'top') { + box.style.top = this.top + 'px'; } else { - this.customTime = new Date(); + box.style.top = this.parent.height - this.top - this.height + 'px'; } + }; - this.eventParams = {}; // stores state parameters while dragging the bar - - this.setOptions(options); - - // create the DOM - this._create(); - } + /** + * Repaint a drag area on the left side of the range when the range is selected + * @protected + */ + RangeItem.prototype._repaintDragLeft = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { + // create and show drag area + var dragLeft = document.createElement('div'); + dragLeft.className = 'vis-drag-left'; + dragLeft.dragLeftItem = this; - CustomTime.prototype = new Component(); + this.dom.box.appendChild(dragLeft); + this.dom.dragLeft = dragLeft; + } else if (!this.selected && this.dom.dragLeft) { + // delete drag area + if (this.dom.dragLeft.parentNode) { + this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); + } + this.dom.dragLeft = null; + } + }; /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {number | string} id - * {string} locales - * {string} locale + * Repaint a drag area on the right side of the range when the range is selected + * @protected */ - CustomTime.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options); + RangeItem.prototype._repaintDragRight = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { + // create and show drag area + var dragRight = document.createElement('div'); + dragRight.className = 'vis-drag-right'; + dragRight.dragRightItem = this; + + this.dom.box.appendChild(dragRight); + this.dom.dragRight = dragRight; + } else if (!this.selected && this.dom.dragRight) { + // delete drag area + if (this.dom.dragRight.parentNode) { + this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); + } + this.dom.dragRight = null; } }; + module.exports = RangeItem; + +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var Hammer = __webpack_require__(22); + var util = __webpack_require__(1); + /** - * Create the DOM for the custom time - * @private + * @constructor Item + * @param {Object} data Object containing (optional) parameters type, + * start, end, content, group, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} options Configuration options + * // TODO: describe available options */ - CustomTime.prototype._create = function () { - var bar = document.createElement('div'); - bar['custom-time'] = this; - bar.className = 'vis-custom-time ' + (this.options.id || ''); - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; + function Item(data, conversion, options) { + this.id = null; + this.parent = null; + this.data = data; + this.dom = null; + this.conversion = conversion || {}; + this.options = options || {}; - var drag = document.createElement('div'); - drag.style.position = 'relative'; - drag.style.top = '0px'; - drag.style.left = '-10px'; - drag.style.height = '100%'; - drag.style.width = '20px'; - bar.appendChild(drag); + this.selected = false; + this.displayed = false; + this.dirty = true; - // attach event listeners - this.hammer = new Hammer(drag); - this.hammer.on('panstart', this._onDragStart.bind(this)); - this.hammer.on('panmove', this._onDrag.bind(this)); - this.hammer.on('panend', this._onDragEnd.bind(this)); - this.hammer.get('pan').set({ threshold: 5, direction: 30 }); // 30 is ALL_DIRECTIONS in hammer. - }; + this.top = null; + this.left = null; + this.width = null; + this.height = null; + + this.editable = null; + if (this.data && this.data.hasOwnProperty('editable') && typeof this.data.editable === 'boolean') { + this.editable = data.editable; + } + } + + Item.prototype.stack = true; /** - * Destroy the CustomTime bar + * Select current item */ - CustomTime.prototype.destroy = function () { - this.hide(); - - this.hammer.destroy(); - this.hammer = null; + Item.prototype.select = function () { + this.selected = true; + this.dirty = true; + if (this.displayed) this.redraw(); + }; - this.body = null; + /** + * Unselect current item + */ + Item.prototype.unselect = function () { + this.selected = false; + this.dirty = true; + if (this.displayed) this.redraw(); }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * 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 */ - CustomTime.prototype.redraw = function () { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); + Item.prototype.setData = function (data) { + var groupChanged = data.group != undefined && this.data.group != data.group; + if (groupChanged) { + this.parent.itemSet._moveToGroup(this, data.group); } - var x = this.body.util.toScreen(this.customTime); - - var locale = this.options.locales[this.options.locale]; - if (!locale) { - if (!this.warned) { - console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline.html#Localization'); - this.warned = true; - } - locale = this.options.locales['en']; // fall back on english when not available + if (data.hasOwnProperty('editable') && typeof data.editable === 'boolean') { + this.editable = data.editable; } - var title = this.options.title; - // To hide the title completely use empty string ''. - if (title === undefined) { - title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); - } + this.data = data; + this.dirty = true; + if (this.displayed) this.redraw(); + }; - this.bar.style.left = x + 'px'; - this.bar.title = title; + /** + * Set a parent for the item + * @param {ItemSet | Group} parent + */ + Item.prototype.setParent = function (parent) { + if (this.displayed) { + this.hide(); + this.parent = parent; + if (this.parent) { + this.show(); + } + } else { + this.parent = parent; + } + }; + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + Item.prototype.isVisible = function (range) { + // Should be implemented by Item implementations return false; }; /** - * Remove the CustomTime from the DOM + * Show the Item in the DOM (when not already visible) + * @return {Boolean} changed */ - CustomTime.prototype.hide = function () { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } + Item.prototype.show = function () { + return false; }; /** - * Set custom time. - * @param {Date | number | string} time + * Hide the Item from the DOM (when visible) + * @return {Boolean} changed */ - CustomTime.prototype.setCustomTime = function (time) { - this.customTime = util.convert(time, 'Date'); - this.redraw(); + Item.prototype.hide = function () { + return false; }; /** - * Retrieve the current custom time. - * @return {Date} customTime + * Repaint the item */ - CustomTime.prototype.getCustomTime = function () { - return new Date(this.customTime.valueOf()); + Item.prototype.redraw = function () { + // should be implemented by the item }; /** - * Set custom title. - * @param {Date | number | string} title - */ - CustomTime.prototype.setCustomTitle = function (title) { - this.options.title = title; + * Reposition the Item horizontally + */ + Item.prototype.repositionX = function () { + // should be implemented by the item }; /** - * Start moving horizontally - * @param {Event} event - * @private + * Reposition the Item vertically */ - CustomTime.prototype._onDragStart = function (event) { - this.eventParams.dragging = true; - this.eventParams.customTime = this.customTime; - - event.stopPropagation(); + Item.prototype.repositionY = function () { + // should be implemented by the item }; /** - * Perform moving operating. - * @param {Event} event - * @private + * Repaint a delete button on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected */ - CustomTime.prototype._onDrag = function (event) { - if (!this.eventParams.dragging) return; + Item.prototype._repaintDeleteButton = function (anchor) { + var editable = (this.options.editable.remove || this.data.editable === true) && this.data.editable !== false; - var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX; - var time = this.body.util.toTime(x); + if (this.selected && editable && !this.dom.deleteButton) { + // create and show button + var me = this; - this.setCustomTime(time); + var deleteButton = document.createElement('div'); + deleteButton.className = 'vis-delete'; + deleteButton.title = 'Delete this item'; - // fire a timechange event - this.body.emitter.emit('timechange', { - id: this.options.id, - time: new Date(this.customTime.valueOf()) - }); + // TODO: be able to destroy the delete button + new Hammer(deleteButton).on('tap', function (event) { + event.stopPropagation(); + me.parent.removeFromDataSet(me); + }); - event.stopPropagation(); + anchor.appendChild(deleteButton); + this.dom.deleteButton = deleteButton; + } else if (!this.selected && this.dom.deleteButton) { + // remove button + if (this.dom.deleteButton.parentNode) { + this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); + } + this.dom.deleteButton = null; + } }; /** - * Stop moving operating. - * @param {Event} event + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents * @private */ - CustomTime.prototype._onDragEnd = function (event) { - if (!this.eventParams.dragging) return; + Item.prototype._updateContents = function (element) { + var content; + if (this.options.template) { + var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset + content = this.options.template(itemData); + } else { + content = this.data.content; + } - // fire a timechanged event - this.body.emitter.emit('timechanged', { - id: this.options.id, - time: new Date(this.customTime.valueOf()) - }); + var changed = this._contentToString(this.content) !== this._contentToString(content); + if (changed) { + // only replace the content when changed + if (content instanceof Element) { + element.innerHTML = ''; + element.appendChild(content); + } else if (content != undefined) { + element.innerHTML = content; + } else { + if (!(this.data.type == 'background' && this.data.content === undefined)) { + throw new Error('Property "content" missing in item ' + this.id); + } + } - event.stopPropagation(); + this.content = content; + } }; /** - * Find a custom time from an event target: - * searches for the attribute 'custom-time' in the event target's element tree - * @param {Event} event - * @return {CustomTime | null} customTime + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private */ - CustomTime.customTimeFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('custom-time')) { - return target['custom-time']; - } - target = target.parentNode; + Item.prototype._updateTitle = function (element) { + if (this.data.title != null) { + element.title = this.data.title || ''; + } else { + element.removeAttribute('vis-title'); } + }; - return null; + /** + * 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) { + var attributes = []; + + if (Array.isArray(this.options.dataAttributes)) { + attributes = this.options.dataAttributes; + } else if (this.options.dataAttributes == 'all') { + attributes = Object.keys(this.data); + } else { + return; + } + + for (var i = 0; i < attributes.length; i++) { + var name = attributes[i]; + var value = this.data[name]; + + if (value != null) { + element.setAttribute('data-' + name, value); + } else { + element.removeAttribute('data-' + name); + } + } + } }; - module.exports = CustomTime; + /** + * Update custom styles of the element + * @param element + * @private + */ + Item.prototype._updateStyle = function (element) { + // remove old styles + if (this.style) { + util.removeCssText(element, this.style); + this.style = null; + } -/***/ }, -/* 42 */ -/***/ function(module, exports) { + // append new styles + if (this.data.style) { + util.addCssText(element, this.data.style); + this.style = this.data.style; + } + }; - // English - 'use strict'; + /** + * Stringify the items contents + * @param {string | Element | undefined} content + * @returns {string | undefined} + * @private + */ + Item.prototype._contentToString = function (content) { + if (typeof content === 'string') return content; + if (content && 'outerHTML' in content) return content.outerHTML; + return content; + }; - exports['en'] = { - current: 'current', - time: 'time' + /** + * Return the width of the item left from its start date + * @return {number} + */ + Item.prototype.getWidthLeft = function () { + return 0; }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - // Dutch - exports['nl'] = { - current: 'huidige', - time: 'tijd' + /** + * Return the width of the item right from the max of its start and end date + * @return {number} + */ + Item.prototype.getWidthRight = function () { + return 0; }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; + + module.exports = Item; /***/ }, -/* 43 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var util = __webpack_require__(1); - var Component = __webpack_require__(25); - var moment = __webpack_require__(2); - var locales = __webpack_require__(42); + var Group = __webpack_require__(33); /** - * A current time bar - * @param {{range: Range, dom: Object, domProps: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCurrentTime] - * @constructor CurrentTime - * @extends Component + * @constructor BackgroundGroup + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - function CurrentTime(body, options) { - this.body = body; - - // default options - this.defaultOptions = { - showCurrentTime: true, - - moment: moment, - locales: locales, - locale: 'en' - }; - this.options = util.extend({}, this.defaultOptions); - this.offset = 0; - - this._create(); + function BackgroundGroup(groupId, data, itemSet) { + Group.call(this, groupId, data, itemSet); - this.setOptions(options); + this.width = 0; + this.height = 0; + this.top = 0; + this.left = 0; } - CurrentTime.prototype = new Component(); + BackgroundGroup.prototype = Object.create(Group.prototype); /** - * Create the HTML DOM for the current time bar - * @private - */ - CurrentTime.prototype._create = function () { - var bar = document.createElement('div'); - bar.className = 'vis-current-time'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [restack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized + */ + BackgroundGroup.prototype.redraw = function (range, margin, restack) { + var resized = false; - this.bar = bar; + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + + // calculate actual size + this.width = this.dom.background.offsetWidth; + + // apply new height (just always zero for BackgroundGroup + this.dom.background.style.height = '0'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); + } + + return resized; }; /** - * Destroy the CurrentTime bar + * Show this group: attach to the DOM */ - CurrentTime.prototype.destroy = function () { - this.options.showCurrentTime = false; - this.redraw(); // will remove the bar from the DOM and stop refreshing - - this.body = null; + BackgroundGroup.prototype.show = function () { + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } }; + module.exports = BackgroundGroup; + +/***/ }, +/* 38 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var Item = __webpack_require__(36); + var util = __webpack_require__(1); + /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCurrentTime] + * @constructor BoxItem + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options */ - CurrentTime.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCurrentTime', 'moment', 'locale', 'locales'], this.options, options); + function BoxItem(data, conversion, options) { + this.props = { + dot: { + width: 0, + height: 0 + }, + line: { + width: 0, + height: 0 + } + }; + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } } + + Item.call(this, data, conversion, options); + } + + BoxItem.prototype = new Item(null, null, null); + + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + BoxItem.prototype.isVisible = function (range) { + // determine visibility + // TODO: account for the real width of the item. Right now we just add 1/4 to the window + var interval = (range.end - range.start) / 4; + return this.data.start > range.start - interval && this.data.start < range.end + interval; }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Repaint the item */ - CurrentTime.prototype.redraw = function () { - if (this.options.showCurrentTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); + BoxItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - this.start(); - } + // create main box + dom.box = document.createElement('DIV'); - var now = this.options.moment(new Date().valueOf() + this.offset); - var x = this.body.util.toScreen(now); + // contents box (inside the background box). used for making margins + dom.content = document.createElement('DIV'); + dom.content.className = 'vis-item-content'; + dom.box.appendChild(dom.content); - var locale = this.options.locales[this.options.locale]; - if (!locale) { - if (!this.warned) { - console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); - this.warned = true; - } - locale = this.options.locales['en']; // fall back on english when not available - } - var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); + // line to axis + dom.line = document.createElement('DIV'); + dom.line.className = 'vis-line'; - this.bar.style.left = x + 'px'; - this.bar.title = title; - } else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - this.stop(); + // dot on axis + dom.dot = document.createElement('DIV'); + dom.dot.className = 'vis-dot'; + + // attach this item as attribute + dom.box['timeline-item'] = this; + + this.dirty = true; } - return false; + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); + foreground.appendChild(dom.box); + } + if (!dom.line.parentNode) { + var background = this.parent.dom.background; + if (!background) throw new Error('Cannot redraw item: parent has no background container element'); + background.appendChild(dom.line); + } + if (!dom.dot.parentNode) { + var axis = this.parent.dom.axis; + if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); + axis.appendChild(dom.dot); + } + this.displayed = 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) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.box); + this._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); + + var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; + + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + dom.box.className = 'vis-item vis-box' + className; + dom.line.className = 'vis-item vis-line' + className; + dom.dot.className = 'vis-item vis-dot' + className; + + // recalculate size + this.props.dot.height = dom.dot.offsetHeight; + this.props.dot.width = dom.dot.offsetWidth; + this.props.line.width = dom.line.offsetWidth; + this.width = dom.box.offsetWidth; + this.height = dom.box.offsetHeight; + + this.dirty = false; + } + + this._repaintDeleteButton(dom.box); }; /** - * Start auto refreshing the current time bar + * Show the item in the DOM (when not already displayed). The items DOM will + * be created when needed. */ - CurrentTime.prototype.start = function () { - var me = this; - - function update() { - me.stop(); + BoxItem.prototype.show = function () { + if (!this.displayed) { + this.redraw(); + } + }; - // determine interval to refresh - var scale = me.body.range.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; + /** + * Hide the item from the DOM (when visible) + */ + BoxItem.prototype.hide = function () { + if (this.displayed) { + var dom = this.dom; - me.redraw(); - me.body.emitter.emit('currentTimeTick'); + if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); + if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); + if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); - // start a renderTimer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); + this.displayed = false; } + }; - update(); + /** + * Reposition the item horizontally + * @Override + */ + BoxItem.prototype.repositionX = function () { + var start = this.conversion.toScreen(this.data.start); + var align = this.options.align; + + // calculate left position of the box + if (align == 'right') { + this.left = start - this.width; + + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start - this.props.line.width + 'px'; + this.dom.dot.style.left = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; + } else if (align == 'left') { + this.left = start; + + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start + 'px'; + this.dom.dot.style.left = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; + } else { + // default or 'center' + this.left = start - this.width / 2; + + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start - this.props.line.width / 2 + 'px'; + this.dom.dot.style.left = start - this.props.dot.width / 2 + 'px'; + } }; /** - * Stop auto refreshing the current time bar + * Reposition the item vertically + * @Override */ - CurrentTime.prototype.stop = function () { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - delete this.currentTimeTimer; + BoxItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var box = this.dom.box; + var line = this.dom.line; + var dot = this.dom.dot; + + if (orientation == 'top') { + box.style.top = (this.top || 0) + 'px'; + + line.style.top = '0'; + line.style.height = this.parent.top + this.top + 1 + 'px'; + line.style.bottom = ''; + } else { + // orientation 'bottom' + var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty + var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; + + box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; + line.style.top = itemSetHeight - lineHeight + 'px'; + line.style.bottom = '0'; } + + dot.style.top = -this.props.dot.height / 2 + 'px'; }; /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. + * Return the width of the item left from its start date + * @return {number} */ - CurrentTime.prototype.setCurrentTime = function (time) { - var t = util.convert(time, 'Date').valueOf(); - var now = new Date().valueOf(); - this.offset = t - now; - this.redraw(); + BoxItem.prototype.getWidthLeft = function () { + return this.width / 2; }; /** - * Get the current time. - * @return {Date} Returns the current time. + * Return the width of the item right from its start date + * @return {number} */ - CurrentTime.prototype.getCurrentTime = function () { - return new Date(new Date().valueOf() + this.offset); + BoxItem.prototype.getWidthRight = function () { + return this.width / 2; }; - module.exports = CurrentTime; + module.exports = BoxItem; /***/ }, -/* 44 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { - value: true - }); + var Item = __webpack_require__(36); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + /** + * @constructor PointItem + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options + */ + function PointItem(data, conversion, options) { + this.props = { + dot: { + top: 0, + width: 0, + height: 0 + }, + content: { + height: 0, + marginLeft: 0 + } + }; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } + } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + Item.call(this, data, conversion, options); + } - var _ColorPicker = __webpack_require__(45); + PointItem.prototype = new Item(null, null, null); - var _ColorPicker2 = _interopRequireDefault(_ColorPicker); + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + PointItem.prototype.isVisible = function (range) { + // determine visibility + // TODO: account for the real width of the item. Right now we just add 1/4 to the window + var interval = (range.end - range.start) / 4; + return this.data.start > range.start - interval && this.data.start < range.end + interval; + }; /** - * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options. - * Boolean options are recognised as Boolean - * Number options should be written as array: [default value, min value, max value, stepsize] - * Colors should be written as array: ['color', '#ffffff'] - * Strings with should be written as array: [option1, option2, option3, ..] - * - * The options are matched with their counterparts in each of the modules and the values used in the configuration are - * - * @param parentModule | the location where parentModule.setOptions() can be called - * @param defaultContainer | the default container of the module - * @param configureOptions | the fully configured and predefined options set found in allOptions.js - * @param pixelRatio | canvas pixel ratio + * Repaint the item */ - var util = __webpack_require__(1); + PointItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var Configurator = (function () { - function Configurator(parentModule, defaultContainer, configureOptions) { - var pixelRatio = arguments.length <= 3 || arguments[3] === undefined ? 1 : arguments[3]; + // background box + dom.point = document.createElement('div'); + // className is updated in redraw() - _classCallCheck(this, Configurator); + // contents box, right from the dot + dom.content = document.createElement('div'); + dom.content.className = 'vis-item-content'; + dom.point.appendChild(dom.content); - this.parent = parentModule; - this.changedOptions = []; - this.container = defaultContainer; - this.allowCreation = false; + // dot at start + dom.dot = document.createElement('div'); + dom.point.appendChild(dom.dot); - this.options = {}; - this.initialized = false; - this.popupCounter = 0; - this.defaultOptions = { - enabled: false, - filter: true, - container: undefined, - showButton: true - }; - util.extend(this.options, this.defaultOptions); + // attach this item as attribute + dom.point['timeline-item'] = this; - this.configureOptions = configureOptions; - this.moduleOptions = {}; - this.domElements = []; - this.popupDiv = {}; - this.popupLimit = 5; - this.popupHistory = {}; - this.colorPicker = new _ColorPicker2['default'](pixelRatio); - this.wrapper = undefined; + this.dirty = true; } - /** - * refresh all options. - * Because all modules parse their options by themselves, we just use their options. We copy them here. - * - * @param options - */ - - _createClass(Configurator, [{ - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - // reset the popup history because the indices may have been changed. - this.popupHistory = {}; - this._removePopup(); + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.point.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) { + throw new Error('Cannot redraw item: parent has no foreground container element'); + } + foreground.appendChild(dom.point); + } + this.displayed = true; - var enabled = true; - if (typeof options === 'string') { - this.options.filter = options; - } else if (options instanceof Array) { - this.options.filter = options.join(); - } else if (typeof options === 'object') { - if (options.container !== undefined) { - this.options.container = options.container; - } - if (options.filter !== undefined) { - this.options.filter = options.filter; - } - if (options.showButton !== undefined) { - this.options.showButton = options.showButton; - } - if (options.enabled !== undefined) { - enabled = options.enabled; - } - } else if (typeof options === 'boolean') { - this.options.filter = true; - enabled = options; - } else if (typeof options === 'function') { - this.options.filter = options; - enabled = true; - } - if (this.options.filter === false) { - enabled = false; - } + // 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) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.point); + this._updateDataAttributes(this.dom.point); + this._updateStyle(this.dom.point); - this.options.enabled = enabled; - } - this._clean(); - } - }, { - key: 'setModuleOptions', - value: function setModuleOptions(moduleOptions) { - this.moduleOptions = moduleOptions; - if (this.options.enabled === true) { - this._clean(); - if (this.options.container !== undefined) { - this.container = this.options.container; - } - this._create(); - } - } + var editable = (this.options.editable.updateTime || this.options.editable.updateGroup || this.editable === true) && this.editable !== false; - /** - * Create all DOM elements - * @private - */ - }, { - key: '_create', - value: function _create() { - var _this = this; + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + dom.point.className = 'vis-item vis-point' + className; + dom.dot.className = 'vis-item vis-dot' + className; - this._clean(); - this.changedOptions = []; + // recalculate size of dot and contents + this.props.dot.width = dom.dot.offsetWidth; + this.props.dot.height = dom.dot.offsetHeight; + this.props.content.height = dom.content.offsetHeight; - var filter = this.options.filter; - var counter = 0; - var show = false; - for (var option in this.configureOptions) { - if (this.configureOptions.hasOwnProperty(option)) { - this.allowCreation = false; - show = false; - if (typeof filter === 'function') { - show = filter(option, []); - show = show || this._handleObject(this.configureOptions[option], [option], true); - } else if (filter === true || filter.indexOf(option) !== -1) { - show = true; - } - - if (show !== false) { - this.allowCreation = true; + // resize contents + dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; + //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - // linebreak between categories - if (counter > 0) { - this._makeItem([]); - } - // a header for the category - this._makeHeader(option); + // recalculate size + this.width = dom.point.offsetWidth; + this.height = dom.point.offsetHeight; - // get the sub options - this._handleObject(this.configureOptions[option], [option]); - } - counter++; - } - } + // reposition the dot + dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; + dom.dot.style.left = this.props.dot.width / 2 + 'px'; - if (this.options.showButton === true) { - (function () { - var generateButton = document.createElement('div'); - generateButton.className = 'vis-configuration vis-config-button'; - generateButton.innerHTML = 'generate options'; - generateButton.onclick = function () { - _this._printOptions(); - }; - generateButton.onmouseover = function () { - generateButton.className = 'vis-configuration vis-config-button hover'; - }; - generateButton.onmouseout = function () { - generateButton.className = 'vis-configuration vis-config-button'; - }; + this.dirty = false; + } - _this.optionsContainer = document.createElement('div'); - _this.optionsContainer.className = 'vis-configuration vis-config-option-container'; + this._repaintDeleteButton(dom.point); + }; - _this.domElements.push(_this.optionsContainer); - _this.domElements.push(generateButton); - })(); - } + /** + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. + */ + PointItem.prototype.show = function () { + if (!this.displayed) { + this.redraw(); + } + }; - this._push(); - //~ this.colorPicker.insertTo(this.container); + /** + * Hide the item from the DOM (when visible) + */ + PointItem.prototype.hide = function () { + if (this.displayed) { + if (this.dom.point.parentNode) { + this.dom.point.parentNode.removeChild(this.dom.point); } - /** - * draw all DOM elements on the screen - * @private - */ - }, { - key: '_push', - value: function _push() { - this.wrapper = document.createElement('div'); - this.wrapper.className = 'vis-configuration-wrapper'; - this.container.appendChild(this.wrapper); - for (var i = 0; i < this.domElements.length; i++) { - this.wrapper.appendChild(this.domElements[i]); - } + this.displayed = false; + } + }; - this._showPopupIfNeeded(); - } + /** + * Reposition the item horizontally + * @Override + */ + PointItem.prototype.repositionX = function () { + var start = this.conversion.toScreen(this.data.start); - /** - * delete all DOM elements - * @private - */ - }, { - key: '_clean', - value: function _clean() { - for (var i = 0; i < this.domElements.length; i++) { - this.wrapper.removeChild(this.domElements[i]); - } + this.left = start - this.props.dot.width; - if (this.wrapper !== undefined) { - this.container.removeChild(this.wrapper); - this.wrapper = undefined; - } - this.domElements = []; + // reposition point + this.dom.point.style.left = this.left + 'px'; + }; - this._removePopup(); - } + /** + * Reposition the item vertically + * @Override + */ + PointItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var point = this.dom.point; - /** - * get the value from the actualOptions if it exists - * @param {array} path | where to look for the actual option - * @returns {*} - * @private - */ - }, { - key: '_getValue', - value: function _getValue(path) { - var base = this.moduleOptions; - for (var i = 0; i < path.length; i++) { - if (base[path[i]] !== undefined) { - base = base[path[i]]; - } else { - base = undefined; - break; - } - } - return base; - } + if (orientation == 'top') { + point.style.top = this.top + 'px'; + } else { + point.style.top = this.parent.height - this.top - this.height + 'px'; + } + }; - /** - * all option elements are wrapped in an item - * @param path - * @param domElements - * @private - */ - }, { - key: '_makeItem', - value: function _makeItem(path) { - var _arguments = arguments, - _this2 = this; + /** + * Return the width of the item left from its start date + * @return {number} + */ + PointItem.prototype.getWidthLeft = function () { + return this.props.dot.width; + }; - if (this.allowCreation === true) { - var _len, domElements, _key; + /** + * Return the width of the item right from its start date + * @return {number} + */ + PointItem.prototype.getWidthRight = function () { + return this.width - this.props.dot.width; + }; - var _ret2 = (function () { - var item = document.createElement('div'); - item.className = 'vis-configuration vis-config-item vis-config-s' + path.length; + module.exports = PointItem; - for (_len = _arguments.length, domElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - domElements[_key - 1] = _arguments[_key]; - } +/***/ }, +/* 40 */ +/***/ function(module, exports, __webpack_require__) { - domElements.forEach(function (element) { - item.appendChild(element); - }); - _this2.domElements.push(item); - return { - v: _this2.domElements.length - }; - })(); + 'use strict'; - if (typeof _ret2 === 'object') return _ret2.v; - } - return 0; - } + var Hammer = __webpack_require__(22); + var Item = __webpack_require__(36); + var BackgroundGroup = __webpack_require__(37); + var RangeItem = __webpack_require__(35); - /** - * header for major subjects - * @param name - * @private - */ - }, { - key: '_makeHeader', - value: function _makeHeader(name) { - var div = document.createElement('div'); - div.className = 'vis-configuration vis-config-header'; - div.innerHTML = name; - this._makeItem([], div); + /** + * @constructor BackgroundItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options + */ + // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation + function BackgroundItem(data, conversion, options) { + this.props = { + content: { + width: 0 } + }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true - /** - * make a label, if it is an object label, it gets different styling. - * @param name - * @param path - * @param objectLabel - * @returns {HTMLElement} - * @private - */ - }, { - key: '_makeLabel', - value: function _makeLabel(name, path) { - var objectLabel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - - var div = document.createElement('div'); - div.className = 'vis-configuration vis-config-label vis-config-s' + path.length; - if (objectLabel === true) { - div.innerHTML = '' + name + ':'; - } else { - div.innerHTML = name + ':'; - } - return div; + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); + } + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); } + } - /** - * make a dropdown list for multiple possible string optoins - * @param arr - * @param value - * @param path - * @private - */ - }, { - key: '_makeDropdown', - value: function _makeDropdown(arr, value, path) { - var select = document.createElement('select'); - select.className = 'vis-configuration vis-config-select'; - var selectedValue = 0; - if (value !== undefined) { - if (arr.indexOf(value) !== -1) { - selectedValue = arr.indexOf(value); - } - } + Item.call(this, data, conversion, options); + } - for (var i = 0; i < arr.length; i++) { - var option = document.createElement('option'); - option.value = arr[i]; - if (i === selectedValue) { - option.selected = 'selected'; - } - option.innerHTML = arr[i]; - select.appendChild(option); - } + BackgroundItem.prototype = new Item(null, null, null); - var me = this; - select.onchange = function () { - me._update(this.value, path); - }; + BackgroundItem.prototype.baseClassName = 'vis-item vis-background'; + BackgroundItem.prototype.stack = false; - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, select); - } + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + BackgroundItem.prototype.isVisible = function (range) { + // determine visibility + return this.data.start < range.end && this.data.end > range.start; + }; - /** - * make a range object for numeric options - * @param arr - * @param value - * @param path - * @private - */ - }, { - key: '_makeRange', - value: function _makeRange(arr, value, path) { - var defaultValue = arr[0]; - var min = arr[1]; - var max = arr[2]; - var step = arr[3]; - var range = document.createElement('input'); - range.className = 'vis-configuration vis-config-range'; - try { - range.type = 'range'; // not supported on IE9 - range.min = min; - range.max = max; - } catch (err) {} - range.step = step; + /** + * Repaint the item + */ + BackgroundItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - // set up the popup settings in case they are needed. - var popupString = ''; - var popupValue = 0; + // background box + dom.box = document.createElement('div'); + // className is updated in redraw() - if (value !== undefined) { - var factor = 1.20; - if (value < 0 && value * factor < min) { - range.min = Math.ceil(value * factor); - popupValue = range.min; - popupString = 'range increased'; - } else if (value / factor < min) { - range.min = Math.ceil(value / factor); - popupValue = range.min; - popupString = 'range increased'; - } - if (value * factor > max && max !== 1) { - range.max = Math.ceil(value * factor); - popupValue = range.max; - popupString = 'range increased'; - } - range.value = value; - } else { - range.value = defaultValue; - } + // frame box (to prevent the item contents from overflowing + dom.frame = document.createElement('div'); + dom.frame.className = 'vis-item-overflow'; + dom.box.appendChild(dom.frame); - var input = document.createElement('input'); - input.className = 'vis-configuration vis-config-rangeinput'; - input.value = range.value; + // contents box + dom.content = document.createElement('div'); + dom.content.className = 'vis-item-content'; + dom.frame.appendChild(dom.content); - var me = this; - range.onchange = function () { - input.value = this.value;me._update(Number(this.value), path); - }; - range.oninput = function () { - input.value = this.value; - }; + // Note: we do NOT attach this item as attribute to the DOM, + // such that background items cannot be selected + //dom.box['timeline-item'] = this; - var label = this._makeLabel(path[path.length - 1], path); - var itemIndex = this._makeItem(path, label, range, input); + this.dirty = true; + } - // if a popup is needed AND it has not been shown for this value, show it. - if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) { - this.popupHistory[itemIndex] = popupValue; - this._setupPopup(popupString, itemIndex); - } + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var background = this.parent.dom.background; + if (!background) { + throw new Error('Cannot redraw item: parent has no background container element'); } + background.appendChild(dom.box); + } + this.displayed = true; - /** - * prepare the popup - * @param string - * @param index - * @private - */ - }, { - key: '_setupPopup', - value: function _setupPopup(string, index) { - var _this3 = this; + // 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) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.content); + this._updateDataAttributes(this.dom.content); + this._updateStyle(this.dom.box); - if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) { - var div = document.createElement("div"); - div.id = "vis-configuration-popup"; - div.className = "vis-configuration-popup"; - div.innerHTML = string; - div.onclick = function () { - _this3._removePopup(); - }; - this.popupCounter += 1; - this.popupDiv = { html: div, index: index }; - } - } + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : ''); + dom.box.className = this.baseClassName + className; - /** - * remove the popup from the dom - * @private - */ - }, { - key: '_removePopup', - value: function _removePopup() { - if (this.popupDiv.html !== undefined) { - this.popupDiv.html.parentNode.removeChild(this.popupDiv.html); - clearTimeout(this.popupDiv.hideTimeout); - clearTimeout(this.popupDiv.deleteTimeout); - this.popupDiv = {}; - } - } + // determine from css whether this box has overflow + this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; - /** - * Show the popup if it is needed. - * @private - */ - }, { - key: '_showPopupIfNeeded', - value: function _showPopupIfNeeded() { - var _this4 = this; + // recalculate size + this.props.content.width = this.dom.content.offsetWidth; + this.height = 0; // set height zero, so this item will be ignored when stacking items - if (this.popupDiv.html !== undefined) { - var correspondingElement = this.domElements[this.popupDiv.index]; - var rect = correspondingElement.getBoundingClientRect(); - this.popupDiv.html.style.left = rect.left + "px"; - this.popupDiv.html.style.top = rect.top - 30 + "px"; // 30 is the height; - document.body.appendChild(this.popupDiv.html); - this.popupDiv.hideTimeout = setTimeout(function () { - _this4.popupDiv.html.style.opacity = 0; - }, 1500); - this.popupDiv.deleteTimeout = setTimeout(function () { - _this4._removePopup(); - }, 1800); - } - } + this.dirty = false; + } + }; - /** - * make a checkbox for boolean options. - * @param defaultValue - * @param value - * @param path - * @private - */ - }, { - key: '_makeCheckbox', - value: function _makeCheckbox(defaultValue, value, path) { - var checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.className = 'vis-configuration vis-config-checkbox'; - checkbox.checked = defaultValue; - if (value !== undefined) { - checkbox.checked = value; - if (value !== defaultValue) { - if (typeof defaultValue === 'object') { - if (value !== defaultValue.enabled) { - this.changedOptions.push({ path: path, value: value }); - } - } else { - this.changedOptions.push({ path: path, value: value }); - } - } - } + /** + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. + */ + BackgroundItem.prototype.show = RangeItem.prototype.show; - var me = this; - checkbox.onchange = function () { - me._update(this.checked, path); - }; + /** + * Hide the item from the DOM (when visible) + * @return {Boolean} changed + */ + BackgroundItem.prototype.hide = RangeItem.prototype.hide; - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, checkbox); - } + /** + * Reposition the item horizontally + * @Override + */ + BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; - /** - * make a text input field for string options. - * @param defaultValue - * @param value - * @param path - * @private - */ - }, { - key: '_makeTextInput', - value: function _makeTextInput(defaultValue, value, path) { - var checkbox = document.createElement('input'); - checkbox.type = 'text'; - checkbox.className = 'vis-configuration vis-config-text'; - checkbox.value = value; - if (value !== defaultValue) { - this.changedOptions.push({ path: path, value: value }); + /** + * Reposition the item vertically + * @Override + */ + BackgroundItem.prototype.repositionY = function (margin) { + var onTop = this.options.orientation.item === 'top'; + this.dom.content.style.top = onTop ? '' : '0'; + this.dom.content.style.bottom = onTop ? '0' : ''; + var height; + + // special positioning for subgroups + if (this.data.subgroup !== undefined) { + // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset + + var itemSubgroup = this.data.subgroup; + var subgroups = this.parent.subgroups; + var subgroupIndex = subgroups[itemSubgroup].index; + // if the orientation is top, we need to take the difference in height into account. + if (onTop == true) { + // the first subgroup will have to account for the distance from the top to the first item. + height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; + height += subgroupIndex == 0 ? margin.axis - 0.5 * margin.item.vertical : 0; + var newTop = this.parent.top; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroupIndex) { + newTop += subgroups[subgroup].height + margin.item.vertical; + } + } } - var me = this; - checkbox.onchange = function () { - me._update(this.value, path); - }; + // the others will have to be offset downwards with this same distance. + newTop += subgroupIndex != 0 ? margin.axis - 0.5 * margin.item.vertical : 0; + this.dom.box.style.top = newTop + 'px'; + this.dom.box.style.bottom = ''; + } + // and when the orientation is bottom: + else { + var newTop = this.parent.top; + var totalHeight = 0; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true) { + var newHeight = subgroups[subgroup].height + margin.item.vertical; + totalHeight += newHeight; + if (subgroups[subgroup].index > subgroupIndex) { + newTop += newHeight; + } + } + } + } + height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; + this.dom.box.style.top = this.parent.height - totalHeight + newTop + 'px'; + this.dom.box.style.bottom = ''; + } + } + // and in the case of no subgroups: + else { + // we want backgrounds with groups to only show in groups. + if (this.parent instanceof BackgroundGroup) { + // if the item is not in a group: + height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height); + this.dom.box.style.top = onTop ? '0' : ''; + this.dom.box.style.bottom = onTop ? '' : '0'; + } else { + height = this.parent.height; + // same alignment for items when orientation is top or bottom + this.dom.box.style.top = this.parent.top + 'px'; + this.dom.box.style.bottom = ''; + } + } + this.dom.box.style.height = height + 'px'; + }; - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, checkbox); + module.exports = BackgroundItem; + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var util = __webpack_require__(1); + var Component = __webpack_require__(28); + var TimeStep = __webpack_require__(32); + var DateUtil = __webpack_require__(29); + var moment = __webpack_require__(2); + + /** + * A horizontal time axis + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See TimeAxis.setOptions for the available + * options. + * @constructor TimeAxis + * @extends Component + */ + function TimeAxis(body, options) { + this.dom = { + foreground: null, + lines: [], + majorTexts: [], + minorTexts: [], + redundant: { + lines: [], + majorTexts: [], + minorTexts: [] } + }; + this.props = { + range: { + start: 0, + end: 0, + minimumStep: 0 + }, + lineTop: 0 + }; - /** - * make a color field with a color picker for color fields - * @param arr - * @param value - * @param path - * @private - */ - }, { - key: '_makeColorField', - value: function _makeColorField(arr, value, path) { - var _this5 = this; + this.defaultOptions = { + orientation: { + axis: 'bottom' + }, // axis orientation: 'top' or 'bottom' + showMinorLabels: true, + showMajorLabels: true, + maxMinorChars: 7, + format: TimeStep.FORMAT, + moment: moment, + timeAxis: null + }; + this.options = util.extend({}, this.defaultOptions); - var defaultColor = arr[1]; - var div = document.createElement('div'); - value = value === undefined ? defaultColor : value; + this.body = body; - if (value !== 'none') { - div.className = 'vis-configuration vis-config-colorBlock'; - div.style.backgroundColor = value; + // create the HTML DOM + this._create(); + + this.setOptions(options); + } + + TimeAxis.prototype = new Component(); + + /** + * Set options for the TimeAxis. + * Parameters will be merged in current options. + * @param {Object} options Available options: + * {string} [orientation.axis] + * {boolean} [showMinorLabels] + * {boolean} [showMajorLabels] + */ + TimeAxis.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showMinorLabels', 'showMajorLabels', 'maxMinorChars', 'hiddenDates', 'timeAxis', 'moment'], this.options, options); + + // deep copy the format options + util.selectiveDeepExtend(['format'], this.options, options); + + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation.axis = options.orientation; + } else if (_typeof(options.orientation) === 'object' && 'axis' in options.orientation) { + this.options.orientation.axis = options.orientation.axis; + } + } + + // apply locale to moment.js + // TODO: not so nice, this is applied globally to moment.js + if ('locale' in options) { + if (typeof moment.locale === 'function') { + // moment.js 2.8.1+ + moment.locale(options.locale); } else { - div.className = 'vis-configuration vis-config-colorBlock none'; + moment.lang(options.locale); } + } + } + }; - value = value === undefined ? defaultColor : value; - div.onclick = function () { - _this5._showColorPicker(value, div, path); - }; + /** + * Create the HTML DOM for the TimeAxis + */ + TimeAxis.prototype._create = function () { + this.dom.foreground = document.createElement('div'); + this.dom.background = document.createElement('div'); - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, div); - } + this.dom.foreground.className = 'vis-time-axis vis-foreground'; + this.dom.background.className = 'vis-time-axis vis-background'; + }; - /** - * used by the color buttons to call the color picker. - * @param event - * @param value - * @param div - * @param path - * @private - */ - }, { - key: '_showColorPicker', - value: function _showColorPicker(value, div, path) { - var _this6 = this; + /** + * Destroy the TimeAxis + */ + TimeAxis.prototype.destroy = function () { + // remove from DOM + if (this.dom.foreground.parentNode) { + this.dom.foreground.parentNode.removeChild(this.dom.foreground); + } + if (this.dom.background.parentNode) { + this.dom.background.parentNode.removeChild(this.dom.background); + } - // clear the callback from this div - div.onclick = function () {}; + this.body = null; + }; - this.colorPicker.insertTo(div); - this.colorPicker.show(); + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + TimeAxis.prototype.redraw = function () { + var props = this.props; + var foreground = this.dom.foreground; + var background = this.dom.background; - this.colorPicker.setColor(value); - this.colorPicker.setUpdateCallback(function (color) { - var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')'; - div.style.backgroundColor = colorString; - _this6._update(colorString, path); - }); + // determine the correct parent DOM element (depending on option orientation) + var parent = this.options.orientation.axis == 'top' ? this.body.dom.top : this.body.dom.bottom; + var parentChanged = foreground.parentNode !== parent; - // on close of the colorpicker, restore the callback. - this.colorPicker.setCloseCallback(function () { - div.onclick = function () { - _this6._showColorPicker(value, div, path); - }; - }); - } + // calculate character width and height + this._calculateCharSize(); - /** - * parse an object and draw the correct items - * @param obj - * @param path - * @private - */ - }, { - key: '_handleObject', - value: function _handleObject(obj) { - var path = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; - var checkOnly = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + // TODO: recalculate sizes only needed when parent is resized or options is changed + var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none'; + var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none'; - var show = false; - var filter = this.options.filter; - var visibleInSet = false; - for (var subObj in obj) { - if (obj.hasOwnProperty(subObj)) { - show = true; - var item = obj[subObj]; - var newPath = util.copyAndExtendArray(path, subObj); - if (typeof filter === 'function') { - show = filter(subObj, path); + // determine the width and height of the elemens for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + props.height = props.minorLabelHeight + props.majorLabelHeight; + props.width = foreground.offsetWidth; - // if needed we must go deeper into the object. - if (show === false) { - if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) { - this.allowCreation = false; - show = this._handleObject(item, newPath, true); - this.allowCreation = checkOnly === false; - } - } - } + props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); + props.minorLineWidth = 1; // TODO: really calculate width + props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; + props.majorLineWidth = 1; // TODO: really calculate width - if (show !== false) { - visibleInSet = true; - var value = this._getValue(newPath); + // take foreground and background offline while updating (is almost twice as fast) + var foregroundNextSibling = foreground.nextSibling; + var backgroundNextSibling = background.nextSibling; + foreground.parentNode && foreground.parentNode.removeChild(foreground); + background.parentNode && background.parentNode.removeChild(background); - if (item instanceof Array) { - this._handleArray(item, value, newPath); - } else if (typeof item === 'string') { - this._makeTextInput(item, value, newPath); - } else if (typeof item === 'boolean') { - this._makeCheckbox(item, value, newPath); - } else if (item instanceof Object) { - // collapse the physics options that are not enabled - var draw = true; - if (path.indexOf('physics') !== -1) { - if (this.moduleOptions.physics.solver !== subObj) { - draw = false; - } - } + foreground.style.height = this.props.height + 'px'; - if (draw === true) { - // initially collapse options with an disabled enabled option. - if (item.enabled !== undefined) { - var enabledPath = util.copyAndExtendArray(newPath, 'enabled'); - var enabledValue = this._getValue(enabledPath); - if (enabledValue === true) { - var label = this._makeLabel(subObj, newPath, true); - this._makeItem(newPath, label); - visibleInSet = this._handleObject(item, newPath) || visibleInSet; - } else { - this._makeCheckbox(item, enabledValue, newPath); - } - } else { - var label = this._makeLabel(subObj, newPath, true); - this._makeItem(newPath, label); - visibleInSet = this._handleObject(item, newPath) || visibleInSet; - } - } - } else { - console.error('dont know how to handle', item, subObj, newPath); - } - } - } - } - return visibleInSet; + this._repaintLabels(); + + // put DOM online again (at the same place) + if (foregroundNextSibling) { + parent.insertBefore(foreground, foregroundNextSibling); + } else { + parent.appendChild(foreground); + } + if (backgroundNextSibling) { + this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); + } else { + this.body.dom.backgroundVertical.appendChild(background); + } + + return this._isResized() || parentChanged; + }; + + /** + * Repaint major and minor text labels and vertical grid lines + * @private + */ + TimeAxis.prototype._repaintLabels = function () { + var orientation = this.options.orientation.axis; + + // calculate range and step (step such that we have space for 7 characters per label) + var start = util.convert(this.body.range.start, 'Number'); + var end = util.convert(this.body.range.end, 'Number'); + var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf(); + var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize); + minimumStep -= this.body.util.toTime(0).valueOf(); + + var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); + step.setMoment(this.options.moment); + if (this.options.format) { + step.setFormat(this.options.format); + } + if (this.options.timeAxis) { + step.setScale(this.options.timeAxis); + } + this.step = step; + + // Move all DOM elements to a "redundant" list, where they + // can be picked for re-use, and clear the lists with lines and texts. + // At the end of the function _repaintLabels, left over elements will be cleaned up + var dom = this.dom; + dom.redundant.lines = dom.lines; + dom.redundant.majorTexts = dom.majorTexts; + dom.redundant.minorTexts = dom.minorTexts; + dom.lines = []; + dom.majorTexts = []; + dom.minorTexts = []; + + var current; + var next; + var x; + var xNext; + var isMajor, nextIsMajor; + var width = 0, + prevWidth; + var line; + var labelMinor; + var xFirstMajorLabel = undefined; + var count = 0; + var MAX = 1000; + var className; + + step.start(); + next = step.getCurrent(); + xNext = this.body.util.toScreen(next); + while (step.hasNext() && count < MAX) { + count++; + + isMajor = step.isMajor(); + className = step.getClassName(); + labelMinor = step.getLabelMinor(); + + current = next; + x = xNext; + + step.next(); + next = step.getCurrent(); + nextIsMajor = step.isMajor(); + xNext = this.body.util.toScreen(next); + + prevWidth = width; + width = xNext - x; + var showMinorGrid = width >= prevWidth * 0.4; // prevent displaying of the 31th of the month on a scale of 5 days + + if (this.options.showMinorLabels && showMinorGrid) { + var label = this._repaintMinorText(x, labelMinor, orientation, className); + label.style.width = width + 'px'; // set width to prevent overflow } - /** - * handle the array type of option - * @param optionName - * @param arr - * @param value - * @param path - * @private - */ - }, { - key: '_handleArray', - value: function _handleArray(arr, value, path) { - if (typeof arr[0] === 'string' && arr[0] === 'color') { - this._makeColorField(arr, value, path); - if (arr[1] !== value) { - this.changedOptions.push({ path: path, value: value }); - } - } else if (typeof arr[0] === 'string') { - this._makeDropdown(arr, value, path); - if (arr[0] !== value) { - this.changedOptions.push({ path: path, value: value }); + if (isMajor && this.options.showMajorLabels) { + if (x > 0) { + if (xFirstMajorLabel == undefined) { + xFirstMajorLabel = x; } - } else if (typeof arr[0] === 'number') { - this._makeRange(arr, value, path); - if (arr[0] !== value) { - this.changedOptions.push({ path: path, value: Number(value) }); + label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className); + } + line = this._repaintMajorLine(x, width, orientation, className); + } else { + // minor line + if (showMinorGrid) { + line = this._repaintMinorLine(x, width, orientation, className); + } else { + if (line) { + // adjust the width of the previous grid + line.style.width = parseInt(line.style.width) + width + 'px'; } } } + } - /** - * called to update the network with the new settings. - * @param value - * @param path - * @private - */ - }, { - key: '_update', - value: function _update(value, path) { - var options = this._constructOptions(value, path); + if (count === MAX && !warnedForOverflow) { + console.warn('Something is wrong with the Timeline scale. Limited drawing of grid lines to ' + MAX + ' lines.'); + warnedForOverflow = true; + } - if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) { - this.parent.body.emitter.emit("configChange", options); + // create a major label on the left when needed + if (this.options.showMajorLabels) { + var leftTime = this.body.util.toTime(0), + leftText = step.getLabelMajor(leftTime), + widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation + + if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { + this._repaintMajorText(0, leftText, orientation, className); + } + } + + // Cleanup leftover DOM elements from the redundant list + util.forEach(this.dom.redundant, function (arr) { + while (arr.length) { + var elem = arr.pop(); + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); } - this.initialized = true; - this.parent.setOptions(options); } - }, { - key: '_constructOptions', - value: function _constructOptions(value, path) { - var optionsObj = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; + }); + }; - var pointer = optionsObj; + /** + * Create a minor label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the HTML element of the created label + * @private + */ + TimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) { + // reuse redundant label + var label = this.dom.redundant.minorTexts.shift(); - // when dropdown boxes can be string or boolean, we typecast it into correct types - value = value === 'true' ? true : value; - value = value === 'false' ? false : value; + if (!label) { + // create new label + var content = document.createTextNode(''); + label = document.createElement('div'); + label.appendChild(content); + this.dom.foreground.appendChild(label); + } + this.dom.minorTexts.push(label); - for (var i = 0; i < path.length; i++) { - if (path[i] !== 'global') { - if (pointer[path[i]] === undefined) { - pointer[path[i]] = {}; - } - if (i !== path.length - 1) { - pointer = pointer[path[i]]; - } else { - pointer[path[i]] = value; - } - } - } - return optionsObj; - } - }, { - key: '_printOptions', - value: function _printOptions() { - var options = this.getOptions(); - this.optionsContainer.innerHTML = '
var options = ' + JSON.stringify(options, null, 2) + '
'; - } - }, { - key: 'getOptions', - value: function getOptions() { - var options = {}; - for (var i = 0; i < this.changedOptions.length; i++) { - this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options); + label.childNodes[0].nodeValue = text; + + label.style.top = orientation == 'top' ? this.props.majorLabelHeight + 'px' : '0'; + label.style.left = x + 'px'; + label.className = 'vis-text vis-minor ' + className; + //label.title = title; // TODO: this is a heavy operation + + return label; + }; + + /** + * Create a Major label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the HTML element of the created label + * @private + */ + TimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) { + // reuse redundant label + var label = this.dom.redundant.majorTexts.shift(); + + if (!label) { + // create label + var content = document.createTextNode(text); + label = document.createElement('div'); + label.appendChild(content); + this.dom.foreground.appendChild(label); + } + this.dom.majorTexts.push(label); + + label.childNodes[0].nodeValue = text; + label.className = 'vis-text vis-major ' + className; + //label.title = title; // TODO: this is a heavy operation + + label.style.top = orientation == 'top' ? '0' : this.props.minorLabelHeight + 'px'; + label.style.left = x + 'px'; + + return label; + }; + + /** + * Create a minor line for the axis at position x + * @param {Number} x + * @param {Number} width + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the created line + * @private + */ + TimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) { + // reuse redundant line + var line = this.dom.redundant.lines.shift(); + if (!line) { + // create vertical line + line = document.createElement('div'); + this.dom.background.appendChild(line); + } + this.dom.lines.push(line); + + var props = this.props; + if (orientation == 'top') { + line.style.top = props.majorLabelHeight + 'px'; + } else { + line.style.top = this.body.domProps.top.height + 'px'; + } + line.style.height = props.minorLineHeight + 'px'; + line.style.left = x - props.minorLineWidth / 2 + 'px'; + line.style.width = width + 'px'; + + line.className = 'vis-grid vis-vertical vis-minor ' + className; + + return line; + }; + + /** + * Create a Major line for the axis at position x + * @param {Number} x + * @param {Number} width + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the created line + * @private + */ + TimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) { + // reuse redundant line + var line = this.dom.redundant.lines.shift(); + if (!line) { + // create vertical line + line = document.createElement('div'); + this.dom.background.appendChild(line); + } + this.dom.lines.push(line); + + var props = this.props; + if (orientation == 'top') { + line.style.top = '0'; + } else { + line.style.top = this.body.domProps.top.height + 'px'; + } + line.style.left = x - props.majorLineWidth / 2 + 'px'; + line.style.height = props.majorLineHeight + 'px'; + line.style.width = width + 'px'; + + line.className = 'vis-grid vis-vertical vis-major ' + className; + + return line; + }; + + /** + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private + */ + TimeAxis.prototype._calculateCharSize = function () { + // Note: We calculate char size with every redraw. Size may change, for + // example when any of the timelines parents had display:none for example. + + // determine the char width and height on the minor axis + if (!this.dom.measureCharMinor) { + this.dom.measureCharMinor = document.createElement('DIV'); + this.dom.measureCharMinor.className = 'vis-text vis-minor vis-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; + + // determine the char width and height on the major axis + if (!this.dom.measureCharMajor) { + this.dom.measureCharMajor = document.createElement('DIV'); + this.dom.measureCharMajor.className = 'vis-text vis-major vis-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; + }; + + var warnedForOverflow = false; + + module.exports = TimeAxis; + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var keycharm = __webpack_require__(43); + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(22); + var util = __webpack_require__(1); + + /** + * Turn an element into an clickToUse element. + * When not active, the element has a transparent overlay. When the overlay is + * clicked, the mode is changed to active. + * When active, the element is displayed with a blue border around it, and + * the interactive contents of the element can be used. When clicked outside + * the element, the elements mode is changed to inactive. + * @param {Element} container + * @constructor + */ + function Activator(container) { + this.active = false; + + this.dom = { + container: container + }; + + this.dom.overlay = document.createElement('div'); + this.dom.overlay.className = 'vis-overlay'; + + this.dom.container.appendChild(this.dom.overlay); + + this.hammer = Hammer(this.dom.overlay); + this.hammer.on('tap', this._onTapOverlay.bind(this)); + + // block all touch events (except tap) + var me = this; + var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend']; + events.forEach(function (event) { + me.hammer.on(event, function (event) { + event.stopPropagation(); + }); + }); + + // attach a click event to the window, in order to deactivate when clicking outside the timeline + if (document && document.body) { + this.onClick = function (event) { + if (!_hasParent(event.target, container)) { + me.deactivate(); } - return options; - } - }]); + }; + document.body.addEventListener('click', this.onClick); + } - return Configurator; - })(); + if (this.keycharm !== undefined) { + this.keycharm.destroy(); + } + this.keycharm = keycharm(); - exports['default'] = Configurator; - module.exports = exports['default']; + // keycharm listener only bounded when active) + this.escListener = this.deactivate.bind(this); + } + + // turn into an event emitter + Emitter(Activator.prototype); + + // The currently active activator + Activator.current = null; + + /** + * Destroy the activator. Cleans up all created DOM and event listeners + */ + Activator.prototype.destroy = function () { + this.deactivate(); + + // remove dom + this.dom.overlay.parentNode.removeChild(this.dom.overlay); + + // remove global event listener + if (this.onClick) { + document.body.removeEventListener('click', this.onClick); + } + + // cleanup hammer instances + this.hammer.destroy(); + this.hammer = null; + // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) + }; + + /** + * Activate the element + * Overlay is hidden, element is decorated with a blue shadow border + */ + Activator.prototype.activate = function () { + // we allow only one active activator at a time + if (Activator.current) { + Activator.current.deactivate(); + } + Activator.current = this; -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { + this.active = true; + this.dom.overlay.style.display = 'none'; + util.addClassName(this.dom.container, 'vis-active'); - 'use strict'; + this.emit('change'); + this.emit('activate'); - Object.defineProperty(exports, '__esModule', { - value: true - }); + // ugly hack: bind ESC after emitting the events, as the Network rebinds all + // keyboard events on a 'change' event + this.keycharm.bind('esc', this.escListener); + }; - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + /** + * Deactivate the element + * Overlay is displayed on top of the element + */ + Activator.prototype.deactivate = function () { + this.active = false; + this.dom.overlay.style.display = ''; + util.removeClassName(this.dom.container, 'vis-active'); + this.keycharm.unbind('esc', this.escListener); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + this.emit('change'); + this.emit('deactivate'); + }; - var Hammer = __webpack_require__(20); - var hammerUtil = __webpack_require__(24); - var util = __webpack_require__(1); + /** + * Handle a tap event: activate the container + * @param event + * @private + */ + Activator.prototype._onTapOverlay = function (event) { + // activate the container + this.activate(); + event.stopPropagation(); + }; - var ColorPicker = (function () { - function ColorPicker() { - var pixelRatio = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0]; + /** + * Test whether the element has the requested parent element somewhere in + * its chain of parent nodes. + * @param {HTMLElement} element + * @param {HTMLElement} parent + * @returns {boolean} Returns true when the parent is found somewhere in the + * chain of parent nodes. + * @private + */ + function _hasParent(element, parent) { + while (element) { + if (element === parent) { + return true; + } + element = element.parentNode; + } + return false; + } - _classCallCheck(this, ColorPicker); + module.exports = Activator; - this.pixelRatio = pixelRatio; - this.generated = false; - this.centerCoordinates = { x: 289 / 2, y: 289 / 2 }; - this.r = 289 * 0.49; - this.color = { r: 255, g: 255, b: 255, a: 1.0 }; - this.hueCircle = undefined; - this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 }; - this.previousColor = undefined; - this.applied = false; +/***/ }, +/* 43 */ +/***/ function(module, exports, __webpack_require__) { - // bound by - this.updateCallback = function () {}; - this.closeCallback = function () {}; + var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; + /** + * Created by Alex on 11/6/2014. + */ - // create all DOM elements - this._create(); + // https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60 + // if the module has no dependencies, the above pattern can be simplified to + (function (root, factory) { + if (true) { + // AMD. Register as an anonymous module. + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.keycharm = factory(); } + }(this, function () { - /** - * this inserts the colorPicker into a div from the DOM - * @param container - */ - - _createClass(ColorPicker, [{ - key: 'insertTo', - value: function insertTo(container) { - if (this.hammer !== undefined) { - this.hammer.destroy(); - this.hammer = undefined; - } - this.container = container; - this.container.appendChild(this.frame); - this._bindHammer(); + function keycharm(options) { + var preventDefault = options && options.preventDefault || false; - this._setSize(); - } + var container = options && options.container || window; - /** - * the callback is executed on apply and save. Bind it to the application - * @param callback - */ - }, { - key: 'setUpdateCallback', - value: function setUpdateCallback(callback) { - if (typeof callback === 'function') { - this.updateCallback = callback; - } else { - throw new Error("Function attempted to set as colorPicker update callback is not a function."); - } - } + var _exportFunctions = {}; + var _bound = {keydown:{}, keyup:{}}; + var _keys = {}; + var i; - /** - * the callback is executed on apply and save. Bind it to the application - * @param callback - */ - }, { - key: 'setCloseCallback', - value: function setCloseCallback(callback) { - if (typeof callback === 'function') { - this.closeCallback = callback; - } else { - throw new Error("Function attempted to set as colorPicker closing callback is not a function."); - } - } - }, { - key: '_isColorString', - value: function _isColorString(color) { - var htmlColors = { black: '#000000', navy: '#000080', darkblue: '#00008B', mediumblue: '#0000CD', blue: '#0000FF', darkgreen: '#006400', green: '#008000', teal: '#008080', darkcyan: '#008B8B', deepskyblue: '#00BFFF', darkturquoise: '#00CED1', mediumspringgreen: '#00FA9A', lime: '#00FF00', springgreen: '#00FF7F', aqua: '#00FFFF', cyan: '#00FFFF', midnightblue: '#191970', dodgerblue: '#1E90FF', lightseagreen: '#20B2AA', forestgreen: '#228B22', seagreen: '#2E8B57', darkslategray: '#2F4F4F', limegreen: '#32CD32', mediumseagreen: '#3CB371', turquoise: '#40E0D0', royalblue: '#4169E1', steelblue: '#4682B4', darkslateblue: '#483D8B', mediumturquoise: '#48D1CC', indigo: '#4B0082', darkolivegreen: '#556B2F', cadetblue: '#5F9EA0', cornflowerblue: '#6495ED', mediumaquamarine: '#66CDAA', dimgray: '#696969', slateblue: '#6A5ACD', olivedrab: '#6B8E23', slategray: '#708090', lightslategray: '#778899', mediumslateblue: '#7B68EE', lawngreen: '#7CFC00', chartreuse: '#7FFF00', aquamarine: '#7FFFD4', maroon: '#800000', purple: '#800080', olive: '#808000', gray: '#808080', skyblue: '#87CEEB', lightskyblue: '#87CEFA', blueviolet: '#8A2BE2', darkred: '#8B0000', darkmagenta: '#8B008B', saddlebrown: '#8B4513', darkseagreen: '#8FBC8F', lightgreen: '#90EE90', mediumpurple: '#9370D8', darkviolet: '#9400D3', palegreen: '#98FB98', darkorchid: '#9932CC', yellowgreen: '#9ACD32', sienna: '#A0522D', brown: '#A52A2A', darkgray: '#A9A9A9', lightblue: '#ADD8E6', greenyellow: '#ADFF2F', paleturquoise: '#AFEEEE', lightsteelblue: '#B0C4DE', powderblue: '#B0E0E6', firebrick: '#B22222', darkgoldenrod: '#B8860B', mediumorchid: '#BA55D3', rosybrown: '#BC8F8F', darkkhaki: '#BDB76B', silver: '#C0C0C0', mediumvioletred: '#C71585', indianred: '#CD5C5C', peru: '#CD853F', chocolate: '#D2691E', tan: '#D2B48C', lightgrey: '#D3D3D3', palevioletred: '#D87093', thistle: '#D8BFD8', orchid: '#DA70D6', goldenrod: '#DAA520', crimson: '#DC143C', gainsboro: '#DCDCDC', plum: '#DDA0DD', burlywood: '#DEB887', lightcyan: '#E0FFFF', lavender: '#E6E6FA', darksalmon: '#E9967A', violet: '#EE82EE', palegoldenrod: '#EEE8AA', lightcoral: '#F08080', khaki: '#F0E68C', aliceblue: '#F0F8FF', honeydew: '#F0FFF0', azure: '#F0FFFF', sandybrown: '#F4A460', wheat: '#F5DEB3', beige: '#F5F5DC', whitesmoke: '#F5F5F5', mintcream: '#F5FFFA', ghostwhite: '#F8F8FF', salmon: '#FA8072', antiquewhite: '#FAEBD7', linen: '#FAF0E6', lightgoldenrodyellow: '#FAFAD2', oldlace: '#FDF5E6', red: '#FF0000', fuchsia: '#FF00FF', magenta: '#FF00FF', deeppink: '#FF1493', orangered: '#FF4500', tomato: '#FF6347', hotpink: '#FF69B4', coral: '#FF7F50', darkorange: '#FF8C00', lightsalmon: '#FFA07A', orange: '#FFA500', lightpink: '#FFB6C1', pink: '#FFC0CB', gold: '#FFD700', peachpuff: '#FFDAB9', navajowhite: '#FFDEAD', moccasin: '#FFE4B5', bisque: '#FFE4C4', mistyrose: '#FFE4E1', blanchedalmond: '#FFEBCD', papayawhip: '#FFEFD5', lavenderblush: '#FFF0F5', seashell: '#FFF5EE', cornsilk: '#FFF8DC', lemonchiffon: '#FFFACD', floralwhite: '#FFFAF0', snow: '#FFFAFA', yellow: '#FFFF00', lightyellow: '#FFFFE0', ivory: '#FFFFF0', white: '#FFFFFF' }; - if (typeof color === 'string') { - return htmlColors[color]; - } - } + // a - z + for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};} + // A - Z + for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};} + // 0 - 9 + for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};} + // F1 - F12 + for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};} + // num0 - num9 + for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};} - /** - * Set the color of the colorPicker - * Supported formats: - * 'red' --> HTML color string - * '#ffffff' --> hex string - * 'rbg(255,255,255)' --> rgb string - * 'rgba(255,255,255,1.0)' --> rgba string - * {r:255,g:255,b:255} --> rgb object - * {r:255,g:255,b:255,a:1.0} --> rgba object - * @param color - * @param setInitial - */ - }, { - key: 'setColor', - value: function setColor(color) { - var setInitial = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + // numpad misc + _keys['num*'] = {code:106, shift: false}; + _keys['num+'] = {code:107, shift: false}; + _keys['num-'] = {code:109, shift: false}; + _keys['num/'] = {code:111, shift: false}; + _keys['num.'] = {code:110, shift: false}; + // arrows + _keys['left'] = {code:37, shift: false}; + _keys['up'] = {code:38, shift: false}; + _keys['right'] = {code:39, shift: false}; + _keys['down'] = {code:40, shift: false}; + // extra keys + _keys['space'] = {code:32, shift: false}; + _keys['enter'] = {code:13, shift: false}; + _keys['shift'] = {code:16, shift: undefined}; + _keys['esc'] = {code:27, shift: false}; + _keys['backspace'] = {code:8, shift: false}; + _keys['tab'] = {code:9, shift: false}; + _keys['ctrl'] = {code:17, shift: false}; + _keys['alt'] = {code:18, shift: false}; + _keys['delete'] = {code:46, shift: false}; + _keys['pageup'] = {code:33, shift: false}; + _keys['pagedown'] = {code:34, shift: false}; + // symbols + _keys['='] = {code:187, shift: false}; + _keys['-'] = {code:189, shift: false}; + _keys[']'] = {code:221, shift: false}; + _keys['['] = {code:219, shift: false}; - if (color === 'none') { - return; - } - var rgba = undefined; - // if a html color shorthand is used, convert to hex - var htmlColor = this._isColorString(color); - if (htmlColor !== undefined) { - color = htmlColor; - } + var down = function(event) {handleEvent(event,'keydown');}; + var up = function(event) {handleEvent(event,'keyup');}; - // check format - if (util.isString(color) === true) { - if (util.isValidRGB(color) === true) { - var rgbaArray = color.substr(4).substr(0, color.length - 5).split(','); - rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 }; - } else if (util.isValidRGBA(color) === true) { - var rgbaArray = color.substr(5).substr(0, color.length - 6).split(','); - rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: rgbaArray[3] }; - } else if (util.isValidHex(color) === true) { - var rgbObj = util.hexToRGB(color); - rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 }; - } - } else { - if (color instanceof Object) { - if (color.r !== undefined && color.g !== undefined && color.b !== undefined) { - var alpha = color.a !== undefined ? color.a : '1.0'; - rgba = { r: color.r, g: color.g, b: color.b, a: alpha }; + // handle the actualy bound key with the event + var handleEvent = function(event,type) { + if (_bound[type][event.keyCode] !== undefined) { + var bound = _bound[type][event.keyCode]; + for (var i = 0; i < bound.length; i++) { + if (bound[i].shift === undefined) { + bound[i].fn(event); + } + else if (bound[i].shift == true && event.shiftKey == true) { + bound[i].fn(event); + } + else if (bound[i].shift == false && event.shiftKey == false) { + bound[i].fn(event); } } - } - // set color - if (rgba === undefined) { - throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: " + JSON.stringify(color)); - } else { - this._setColor(rgba, setInitial); + if (preventDefault == true) { + event.preventDefault(); + } } - } + }; - /** - * this shows the color picker. - * The hue circle is constructed once and stored. - */ - }, { - key: 'show', - value: function show() { - if (this.closeCallback !== undefined) { - this.closeCallback(); - this.closeCallback = undefined; + // bind a key to a callback + _exportFunctions.bind = function(key, callback, type) { + if (type === undefined) { + type = 'keydown'; } - - this.applied = false; - this.frame.style.display = 'block'; - this._generateHueCircle(); - } - - // ------------------------------------------ PRIVATE ----------------------------- // - - /** - * Hide the picker. Is called by the cancel button. - * Optional boolean to store the previous color for easy access later on. - * @param storePrevious - * @private - */ - }, { - key: '_hide', - value: function _hide() { - var _this = this; - - var storePrevious = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; - - // store the previous color for next time; - if (storePrevious === true) { - this.previousColor = util.extend({}, this.color); + if (_keys[key] === undefined) { + throw new Error("unsupported key: " + key); } - - if (this.applied === true) { - this.updateCallback(this.initialColor); + if (_bound[type][_keys[key].code] === undefined) { + _bound[type][_keys[key].code] = []; } + _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift}); + }; - this.frame.style.display = 'none'; - // call the closing callback, restoring the onclick method. - // this is in a setTimeout because it will trigger the show again before the click is done. - setTimeout(function () { - if (_this.closeCallback !== undefined) { - _this.closeCallback(); - _this.closeCallback = undefined; + // bind all keys to a call back (demo purposes) + _exportFunctions.bindAll = function(callback, type) { + if (type === undefined) { + type = 'keydown'; + } + for (var key in _keys) { + if (_keys.hasOwnProperty(key)) { + _exportFunctions.bind(key,callback,type); } - }, 0); - } - - /** - * bound to the save button. Saves and hides. - * @private - */ - }, { - key: '_save', - value: function _save() { - this.updateCallback(this.color); - this.applied = false; - this._hide(); - } - - /** - * Bound to apply button. Saves but does not close. Is undone by the cancel button. - * @private - */ - }, { - key: '_apply', - value: function _apply() { - this.applied = true; - this.updateCallback(this.color); - this._updatePicker(this.color); - } - - /** - * load the color from the previous session. - * @private - */ - }, { - key: '_loadLast', - value: function _loadLast() { - if (this.previousColor !== undefined) { - this.setColor(this.previousColor, false); - } else { - alert("There is no last color to load..."); } - } - - /** - * set the color, place the picker - * @param rgba - * @param setInitial - * @private - */ - }, { - key: '_setColor', - value: function _setColor(rgba) { - var setInitial = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + }; - // store the initial color - if (setInitial === true) { - this.initialColor = util.extend({}, rgba); + // get the key label from an event + _exportFunctions.getKey = function(event) { + for (var key in _keys) { + if (_keys.hasOwnProperty(key)) { + if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) { + return key; + } + else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) { + return key; + } + else if (event.keyCode == _keys[key].code && key == 'shift') { + return key; + } + } } + return "unknown key, currently not supported"; + }; - this.color = rgba; - var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - - var angleConvert = 2 * Math.PI; - var radius = this.r * hsv.s; - var x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h); - var y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h); - - this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px'; - this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - - this._updatePicker(rgba); - } - - /** - * bound to opacity control - * @param value - * @private - */ - }, { - key: '_setOpacity', - value: function _setOpacity(value) { - this.color.a = value / 100; - this._updatePicker(this.color); - } - - /** - * bound to brightness control - * @param value - * @private - */ - }, { - key: '_setBrightness', - value: function _setBrightness(value) { - var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); - hsv.v = value / 100; - var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); - rgba['a'] = this.color.a; - this.color = rgba; - this._updatePicker(); - } - - /** - * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing. - * @param rgba - * @private - */ - }, { - key: '_updatePicker', - value: function _updatePicker() { - var rgba = arguments.length <= 0 || arguments[0] === undefined ? this.color : arguments[0]; - - var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - var ctx = this.colorPickerCanvas.getContext('2d'); - if (this.pixelRation === undefined) { - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + // unbind either a specific callback from a key or all of them (by leaving callback undefined) + _exportFunctions.unbind = function(key, callback, type) { + if (type === undefined) { + type = 'keydown'; } - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + if (_keys[key] === undefined) { + throw new Error("unsupported key: " + key); + } + if (callback !== undefined) { + var newBindings = []; + var bound = _bound[type][_keys[key].code]; + if (bound !== undefined) { + for (var i = 0; i < bound.length; i++) { + if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) { + newBindings.push(_bound[type][_keys[key].code][i]); + } + } + } + _bound[type][_keys[key].code] = newBindings; + } + else { + _bound[type][_keys[key].code] = []; + } + }; - // clear the canvas - var w = this.colorPickerCanvas.clientWidth; - var h = this.colorPickerCanvas.clientHeight; - ctx.clearRect(0, 0, w, h); + // reset all bound variables. + _exportFunctions.reset = function() { + _bound = {keydown:{}, keyup:{}}; + }; - ctx.putImageData(this.hueCircle, 0, 0); - ctx.fillStyle = 'rgba(0,0,0,' + (1 - hsv.v) + ')'; - ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); - ctx.fill(); + // unbind all listeners and reset all variables. + _exportFunctions.destroy = function() { + _bound = {keydown:{}, keyup:{}}; + container.removeEventListener('keydown', down, true); + container.removeEventListener('keyup', up, true); + }; - this.brightnessRange.value = 100 * hsv.v; - this.opacityRange.value = 100 * rgba.a; + // create listeners. + container.addEventListener('keydown',down,true); + container.addEventListener('keyup',up,true); - this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; - this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; - } + // return the public functions. + return _exportFunctions; + } - /** - * used by create to set the size of the canvas. - * @private - */ - }, { - key: '_setSize', - value: function _setSize() { - this.colorPickerCanvas.style.width = '100%'; - this.colorPickerCanvas.style.height = '100%'; + return keycharm; + })); - this.colorPickerCanvas.width = 289 * this.pixelRatio; - this.colorPickerCanvas.height = 289 * this.pixelRatio; - } - /** - * create all dom elements - * TODO: cleanup, lots of similar dom elements - * @private - */ - }, { - key: '_create', - value: function _create() { - this.frame = document.createElement('div'); - this.frame.className = 'vis-color-picker'; - this.colorPickerDiv = document.createElement('div'); - this.colorPickerSelector = document.createElement('div'); - this.colorPickerSelector.className = 'vis-selector'; - this.colorPickerDiv.appendChild(this.colorPickerSelector); - this.colorPickerCanvas = document.createElement('canvas'); - this.colorPickerDiv.appendChild(this.colorPickerCanvas); +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { - if (!this.colorPickerCanvas.getContext) { - var noCanvas = document.createElement('DIV'); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold'; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.colorPickerCanvas.appendChild(noCanvas); - } else { - var ctx = this.colorPickerCanvas.getContext("2d"); - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + 'use strict'; - this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - } + var Hammer = __webpack_require__(22); + var util = __webpack_require__(1); + var Component = __webpack_require__(28); + var moment = __webpack_require__(2); + var locales = __webpack_require__(45); - this.colorPickerDiv.className = 'vis-color'; + /** + * A custom time bar + * @param {{range: Range, dom: Object}} body + * @param {Object} [options] Available parameters: + * {number | string} id + * {string} locales + * {string} locale + * @constructor CustomTime + * @extends Component + */ - this.opacityDiv = document.createElement('div'); - this.opacityDiv.className = 'vis-opacity'; + function CustomTime(body, options) { + this.body = body; - this.brightnessDiv = document.createElement('div'); - this.brightnessDiv.className = 'vis-brightness'; + // default options + this.defaultOptions = { + moment: moment, + locales: locales, + locale: 'en', + id: undefined, + title: undefined + }; + this.options = util.extend({}, this.defaultOptions); - this.arrowDiv = document.createElement('div'); - this.arrowDiv.className = 'vis-arrow'; + if (options && options.time) { + this.customTime = options.time; + } else { + this.customTime = new Date(); + } - this.opacityRange = document.createElement('input'); - try { - this.opacityRange.type = 'range'; // Not supported on IE9 - this.opacityRange.min = '0'; - this.opacityRange.max = '100'; - } catch (err) {} - this.opacityRange.value = '100'; - this.opacityRange.className = 'vis-range'; + this.eventParams = {}; // stores state parameters while dragging the bar - this.brightnessRange = document.createElement('input'); - try { - this.brightnessRange.type = 'range'; // Not supported on IE9 - this.brightnessRange.min = '0'; - this.brightnessRange.max = '100'; - } catch (err) {} - this.brightnessRange.value = '100'; - this.brightnessRange.className = 'vis-range'; + this.setOptions(options); - this.opacityDiv.appendChild(this.opacityRange); - this.brightnessDiv.appendChild(this.brightnessRange); + // create the DOM + this._create(); + } - var me = this; - this.opacityRange.onchange = function () { - me._setOpacity(this.value); - }; - this.opacityRange.oninput = function () { - me._setOpacity(this.value); - }; - this.brightnessRange.onchange = function () { - me._setBrightness(this.value); - }; - this.brightnessRange.oninput = function () { - me._setBrightness(this.value); - }; + CustomTime.prototype = new Component(); - this.brightnessLabel = document.createElement("div"); - this.brightnessLabel.className = "vis-label vis-brightness"; - this.brightnessLabel.innerHTML = 'brightness:'; + /** + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {number | string} id + * {string} locales + * {string} locale + */ + CustomTime.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options); + } + }; - this.opacityLabel = document.createElement("div"); - this.opacityLabel.className = "vis-label vis-opacity"; - this.opacityLabel.innerHTML = 'opacity:'; + /** + * Create the DOM for the custom time + * @private + */ + CustomTime.prototype._create = function () { + var bar = document.createElement('div'); + bar['custom-time'] = this; + bar.className = 'vis-custom-time ' + (this.options.id || ''); + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; + this.bar = bar; - this.newColorDiv = document.createElement("div"); - this.newColorDiv.className = "vis-new-color"; - this.newColorDiv.innerHTML = 'new'; + var drag = document.createElement('div'); + drag.style.position = 'relative'; + drag.style.top = '0px'; + drag.style.left = '-10px'; + drag.style.height = '100%'; + drag.style.width = '20px'; + bar.appendChild(drag); - this.initialColorDiv = document.createElement("div"); - this.initialColorDiv.className = "vis-initial-color"; - this.initialColorDiv.innerHTML = 'initial'; + // attach event listeners + this.hammer = new Hammer(drag); + this.hammer.on('panstart', this._onDragStart.bind(this)); + this.hammer.on('panmove', this._onDrag.bind(this)); + this.hammer.on('panend', this._onDragEnd.bind(this)); + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); + }; - this.cancelButton = document.createElement("div"); - this.cancelButton.className = "vis-button vis-cancel"; - this.cancelButton.innerHTML = 'cancel'; - this.cancelButton.onclick = this._hide.bind(this, false); + /** + * Destroy the CustomTime bar + */ + CustomTime.prototype.destroy = function () { + this.hide(); - this.applyButton = document.createElement("div"); - this.applyButton.className = "vis-button vis-apply"; - this.applyButton.innerHTML = 'apply'; - this.applyButton.onclick = this._apply.bind(this); + this.hammer.destroy(); + this.hammer = null; - this.saveButton = document.createElement("div"); - this.saveButton.className = "vis-button vis-save"; - this.saveButton.innerHTML = 'save'; - this.saveButton.onclick = this._save.bind(this); + this.body = null; + }; - this.loadButton = document.createElement("div"); - this.loadButton.className = "vis-button vis-load"; - this.loadButton.innerHTML = 'load last'; - this.loadButton.onclick = this._loadLast.bind(this); + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CustomTime.prototype.redraw = function () { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); + } - this.frame.appendChild(this.colorPickerDiv); - this.frame.appendChild(this.arrowDiv); - this.frame.appendChild(this.brightnessLabel); - this.frame.appendChild(this.brightnessDiv); - this.frame.appendChild(this.opacityLabel); - this.frame.appendChild(this.opacityDiv); - this.frame.appendChild(this.newColorDiv); - this.frame.appendChild(this.initialColorDiv); + var x = this.body.util.toScreen(this.customTime); - this.frame.appendChild(this.cancelButton); - this.frame.appendChild(this.applyButton); - this.frame.appendChild(this.saveButton); - this.frame.appendChild(this.loadButton); + var locale = this.options.locales[this.options.locale]; + if (!locale) { + if (!this.warned) { + console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline.html#Localization'); + this.warned = true; } + locale = this.options.locales['en']; // fall back on english when not available + } - /** - * bind hammer to the color picker - * @private - */ - }, { - key: '_bindHammer', - value: function _bindHammer() { - var _this2 = this; + var title = this.options.title; + // To hide the title completely use empty string ''. + if (title === undefined) { + title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); + } - this.drag = {}; - this.pinch = {}; - this.hammer = new Hammer(this.colorPickerCanvas); - this.hammer.get('pinch').set({ enable: true }); + this.bar.style.left = x + 'px'; + this.bar.title = title; - hammerUtil.onTouch(this.hammer, function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('tap', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panstart', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panmove', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panend', function (event) { - _this2._moveSelector(event); - }); - } + return false; + }; - /** - * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown. - * @private - */ - }, { - key: '_generateHueCircle', - value: function _generateHueCircle() { - if (this.generated === false) { - var ctx = this.colorPickerCanvas.getContext('2d'); - if (this.pixelRation === undefined) { - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - } - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + /** + * Remove the CustomTime from the DOM + */ + CustomTime.prototype.hide = function () { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + }; - // clear the canvas - var w = this.colorPickerCanvas.clientWidth; - var h = this.colorPickerCanvas.clientHeight; - ctx.clearRect(0, 0, w, h); + /** + * Set custom time. + * @param {Date | number | string} time + */ + CustomTime.prototype.setCustomTime = function (time) { + this.customTime = util.convert(time, 'Date'); + this.redraw(); + }; - // draw hue circle - var x = undefined, - y = undefined, - hue = undefined, - sat = undefined; - this.centerCoordinates = { x: w * 0.5, y: h * 0.5 }; - this.r = 0.49 * w; - var angleConvert = 2 * Math.PI / 360; - var hfac = 1 / 360; - var sfac = 1 / this.r; - var rgb = undefined; - for (hue = 0; hue < 360; hue++) { - for (sat = 0; sat < this.r; sat++) { - x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue); - y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue); - rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1); - ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')'; - ctx.fillRect(x - 0.5, y - 0.5, 2, 2); - } - } - ctx.strokeStyle = 'rgba(0,0,0,1)'; - ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); - ctx.stroke(); + /** + * Retrieve the current custom time. + * @return {Date} customTime + */ + CustomTime.prototype.getCustomTime = function () { + return new Date(this.customTime.valueOf()); + }; - this.hueCircle = ctx.getImageData(0, 0, w, h); - } - this.generated = true; - } + /** + * Set custom title. + * @param {Date | number | string} title + */ + CustomTime.prototype.setCustomTitle = function (title) { + this.options.title = title; + }; - /** - * move the selector. This is called by hammer functions. - * - * @param event - * @private - */ - }, { - key: '_moveSelector', - value: function _moveSelector(event) { - var rect = this.colorPickerDiv.getBoundingClientRect(); - var left = event.center.x - rect.left; - var top = event.center.y - rect.top; + /** + * Start moving horizontally + * @param {Event} event + * @private + */ + CustomTime.prototype._onDragStart = function (event) { + this.eventParams.dragging = true; + this.eventParams.customTime = this.customTime; - var centerY = 0.5 * this.colorPickerDiv.clientHeight; - var centerX = 0.5 * this.colorPickerDiv.clientWidth; + event.stopPropagation(); + }; - var x = left - centerX; - var y = top - centerY; + /** + * Perform moving operating. + * @param {Event} event + * @private + */ + CustomTime.prototype._onDrag = function (event) { + if (!this.eventParams.dragging) return; - var angle = Math.atan2(x, y); - var radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX); + var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX; + var time = this.body.util.toTime(x); - var newTop = Math.cos(angle) * radius + centerY; - var newLeft = Math.sin(angle) * radius + centerX; + this.setCustomTime(time); - this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px'; + // fire a timechange event + this.body.emitter.emit('timechange', { + id: this.options.id, + time: new Date(this.customTime.valueOf()) + }); - // set color - var h = angle / (2 * Math.PI); - h = h < 0 ? h + 1 : h; - var s = radius / this.r; - var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); - hsv.h = h; - hsv.s = s; - var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); - rgba['a'] = this.color.a; - this.color = rgba; + event.stopPropagation(); + }; - // update previews - this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; - this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; + /** + * Stop moving operating. + * @param {Event} event + * @private + */ + CustomTime.prototype._onDragEnd = function (event) { + if (!this.eventParams.dragging) return; + + // fire a timechanged event + this.body.emitter.emit('timechanged', { + id: this.options.id, + time: new Date(this.customTime.valueOf()) + }); + + event.stopPropagation(); + }; + + /** + * Find a custom time from an event target: + * searches for the attribute 'custom-time' in the event target's element tree + * @param {Event} event + * @return {CustomTime | null} customTime + */ + CustomTime.customTimeFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('custom-time')) { + return target['custom-time']; } - }]); + target = target.parentNode; + } - return ColorPicker; - })(); + return null; + }; - exports['default'] = ColorPicker; - module.exports = exports['default']; + module.exports = CustomTime; /***/ }, -/* 46 */ -/***/ function(module, exports, __webpack_require__) { +/* 45 */ +/***/ function(module, exports) { 'use strict'; - Object.defineProperty(exports, '__esModule', { - value: true - }); + // English + exports['en'] = { + current: 'current', + time: 'time' + }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; + + // Dutch + exports['nl'] = { + current: 'huidige', + time: 'tijd' + }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + 'use strict'; var util = __webpack_require__(1); + var Component = __webpack_require__(28); + var moment = __webpack_require__(2); + var locales = __webpack_require__(45); - var errorFound = false; - var allOptions = undefined; - var printStyle = 'background: #FFeeee; color: #dd0000'; /** - * Used to validate options. + * A current time bar + * @param {{range: Range, dom: Object, domProps: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCurrentTime] + * @constructor CurrentTime + * @extends Component */ + function CurrentTime(body, options) { + this.body = body; - var Validator = (function () { - function Validator() { - _classCallCheck(this, Validator); - } + // default options + this.defaultOptions = { + showCurrentTime: true, - /** - * Main function to be called - * @param options - * @param subObject - * @returns {boolean} - */ + moment: moment, + locales: locales, + locale: 'en' + }; + this.options = util.extend({}, this.defaultOptions); + this.offset = 0; - _createClass(Validator, null, [{ - key: 'validate', - value: function validate(options, referenceOptions, subObject) { - errorFound = false; - allOptions = referenceOptions; - var usedOptions = referenceOptions; - if (subObject !== undefined) { - usedOptions = referenceOptions[subObject]; - } - Validator.parse(options, usedOptions, []); - return errorFound; - } + this._create(); - /** - * Will traverse an object recursively and check every value - * @param options - * @param referenceOptions - * @param path - */ - }, { - key: 'parse', - value: function parse(options, referenceOptions, path) { - for (var option in options) { - if (options.hasOwnProperty(option)) { - Validator.check(option, options, referenceOptions, path); - } - } - } + this.setOptions(options); + } + + CurrentTime.prototype = new Component(); + + /** + * Create the HTML DOM for the current time bar + * @private + */ + CurrentTime.prototype._create = function () { + var bar = document.createElement('div'); + bar.className = 'vis-current-time'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; - /** - * Check every value. If the value is an object, call the parse function on that object. - * @param option - * @param options - * @param referenceOptions - * @param path - */ - }, { - key: 'check', - value: function check(option, options, referenceOptions, path) { - if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) { - Validator.getSuggestion(option, referenceOptions, path); - } else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) { - // __any__ is a wildcard. Any value is accepted and will be further analysed by reference. - if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) { - // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object. - Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path); - } else { - Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path); - } - } else { - // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field. - if (referenceOptions[option].__type__ !== undefined) { - // if this should be an object, we check if the correct type has been supplied to account for shorthand options. - Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path); - } else { - Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path); - } - } - } + this.bar = bar; + }; - /** - * - * @param {String} option | the option property - * @param {Object} options | The supplied options object - * @param {Object} referenceOptions | The reference options containing all options and their allowed formats - * @param {String} referenceOption | Usually this is the same as option, except when handling an __any__ tag. - * @param {String} refOptionType | This is the type object from the reference options - * @param {Array} path | where in the object is the option - */ - }, { - key: 'checkFields', - value: function checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) { - var optionType = Validator.getType(options[option]); - var refOptionType = refOptionObj[optionType]; - if (refOptionType !== undefined) { - // if the type is correct, we check if it is supposed to be one of a few select values - if (Validator.getType(refOptionType) === 'array') { - if (refOptionType.indexOf(options[option]) === -1) { - console.log('%cInvalid option detected in "' + option + '".' + ' Allowed values are:' + Validator.print(refOptionType) + ' not "' + options[option] + '". ' + Validator.printLocation(path, option), printStyle); - errorFound = true; - } else if (optionType === 'object' && referenceOption !== "__any__") { - path = util.copyAndExtendArray(path, option); - Validator.parse(options[option], referenceOptions[referenceOption], path); - } - } else if (optionType === 'object' && referenceOption !== "__any__") { - path = util.copyAndExtendArray(path, option); - Validator.parse(options[option], referenceOptions[referenceOption], path); - } - } else if (refOptionObj['any'] === undefined) { - // type of the field is incorrect and the field cannot be any - console.log('%cInvalid type received for "' + option + '". Expected: ' + Validator.print(Object.keys(refOptionObj)) + '. Received [' + optionType + '] "' + options[option] + '"' + Validator.printLocation(path, option), printStyle); - errorFound = true; - } - } - }, { - key: 'getType', - value: function getType(object) { - var type = typeof object; + /** + * Destroy the CurrentTime bar + */ + CurrentTime.prototype.destroy = function () { + this.options.showCurrentTime = false; + this.redraw(); // will remove the bar from the DOM and stop refreshing - if (type === 'object') { - if (object === null) { - return 'null'; - } - if (object instanceof Boolean) { - return 'boolean'; - } - if (object instanceof Number) { - return 'number'; - } - if (object instanceof String) { - return 'string'; - } - if (Array.isArray(object)) { - return 'array'; - } - if (object instanceof Date) { - return 'date'; - } - if (object.nodeType !== undefined) { - return 'dom'; - } - if (object._isAMomentObject === true) { - return 'moment'; - } - return 'object'; - } else if (type === 'number') { - return 'number'; - } else if (type === 'boolean') { - return 'boolean'; - } else if (type === 'string') { - return 'string'; - } else if (type === undefined) { - return 'undefined'; - } - return type; - } - }, { - key: 'getSuggestion', - value: function getSuggestion(option, options, path) { - var localSearch = Validator.findInOptions(option, options, path, false); - var globalSearch = Validator.findInOptions(option, allOptions, [], true); + this.body = null; + }; - var localSearchThreshold = 8; - var globalSearchThreshold = 4; + /** + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCurrentTime] + */ + CurrentTime.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showCurrentTime', 'moment', 'locale', 'locales'], this.options, options); + } + }; - if (localSearch.indexMatch !== undefined) { - console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was incomplete? Did you mean: "' + localSearch.indexMatch + '"?\n\n', printStyle); - } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) { - console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, ''), printStyle); - } else if (localSearch.distance <= localSearchThreshold) { - console.log('%cUnknown option detected: "' + option + '". Did you mean "' + localSearch.closestMatch + '"?' + Validator.printLocation(localSearch.path, option), printStyle); - } else { - console.log('%cUnknown option detected: "' + option + '". Did you mean one of these: ' + Validator.print(Object.keys(options)) + Validator.printLocation(path, option), printStyle); + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CurrentTime.prototype.redraw = function () { + if (this.options.showCurrentTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } + parent.appendChild(this.bar); - errorFound = true; + this.start(); } - /** - * traverse the options in search for a match. - * @param option - * @param options - * @param path - * @param recursive - * @returns {{closestMatch: string, path: Array, distance: number}} - */ - }, { - key: 'findInOptions', - value: function findInOptions(option, options, path) { - var recursive = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; + var now = this.options.moment(new Date().valueOf() + this.offset); + var x = this.body.util.toScreen(now); - var min = 1e9; - var closestMatch = ''; - var closestMatchPath = []; - var lowerCaseOption = option.toLowerCase(); - var indexMatch = undefined; - for (var op in options) { - var distance = undefined; - if (options[op].__type__ !== undefined && recursive === true) { - var result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path, op)); - if (min > result.distance) { - closestMatch = result.closestMatch; - closestMatchPath = result.path; - min = result.distance; - indexMatch = result.indexMatch; - } - } else { - if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) { - indexMatch = op; - } - distance = Validator.levenshteinDistance(option, op); - if (min > distance) { - closestMatch = op; - closestMatchPath = util.copyArray(path); - min = distance; - } - } + var locale = this.options.locales[this.options.locale]; + if (!locale) { + if (!this.warned) { + console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); + this.warned = true; } - return { closestMatch: closestMatch, path: closestMatchPath, distance: min, indexMatch: indexMatch }; + locale = this.options.locales['en']; // fall back on english when not available } - }, { - key: 'printLocation', - value: function printLocation(path, option) { - var prefix = arguments.length <= 2 || arguments[2] === undefined ? 'Problem value found at: \n' : arguments[2]; + var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); - var str = '\n\n' + prefix + 'options = {\n'; - for (var i = 0; i < path.length; i++) { - for (var j = 0; j < i + 1; j++) { - str += ' '; - } - str += path[i] + ': {\n'; - } - for (var j = 0; j < path.length + 1; j++) { - str += ' '; - } - str += option + '\n'; - for (var i = 0; i < path.length + 1; i++) { - for (var j = 0; j < path.length - i; j++) { - str += ' '; - } - str += '}\n'; - } - return str + '\n\n'; - } - }, { - key: 'print', - value: function print(options) { - return JSON.stringify(options).replace(/(\")|(\[)|(\])|(,"__type__")/g, "").replace(/(\,)/g, ', '); + this.bar.style.left = x + 'px'; + this.bar.title = title; + } else { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } + this.stop(); + } - // Compute the edit distance between the two given strings - // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript - /* - Copyright (c) 2011 Andrei Mackenzie - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - }, { - key: 'levenshteinDistance', - value: function levenshteinDistance(a, b) { - if (a.length === 0) return b.length; - if (b.length === 0) return a.length; + return false; + }; - var matrix = []; + /** + * Start auto refreshing the current time bar + */ + CurrentTime.prototype.start = function () { + var me = this; - // increment along the first column of each row - var i; - for (i = 0; i <= b.length; i++) { - matrix[i] = [i]; - } + function update() { + me.stop(); - // increment each column in the first row - var j; - for (j = 0; j <= a.length; j++) { - matrix[0][j] = j; - } + // determine interval to refresh + var scale = me.body.range.conversion(me.body.domProps.center.width).scale; + var interval = 1 / scale / 10; + if (interval < 30) interval = 30; + if (interval > 1000) interval = 1000; - // Fill in the rest of the matrix - for (i = 1; i <= b.length; i++) { - for (j = 1; j <= a.length; j++) { - if (b.charAt(i - 1) == a.charAt(j - 1)) { - matrix[i][j] = matrix[i - 1][j - 1]; - } else { - matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution - Math.min(matrix[i][j - 1] + 1, // insertion - matrix[i - 1][j] + 1)); // deletion - } - } - } + me.redraw(); + me.body.emitter.emit('currentTimeTick'); - return matrix[b.length][a.length]; - } - }]); + // start a renderTimer to adjust for the new time + me.currentTimeTimer = setTimeout(update, interval); + } - return Validator; - })(); + update(); + }; - exports['default'] = Validator; - exports.printStyle = printStyle; + /** + * Stop auto refreshing the current time bar + */ + CurrentTime.prototype.stop = function () { + if (this.currentTimeTimer !== undefined) { + clearTimeout(this.currentTimeTimer); + delete this.currentTimeTimer; + } + }; + + /** + * Set a current time. This can be used for example to ensure that a client's + * time is synchronized with a shared server time. + * @param {Date | String | Number} time A Date, unix timestamp, or + * ISO date string. + */ + CurrentTime.prototype.setCurrentTime = function (time) { + var t = util.convert(time, 'Date').valueOf(); + var now = new Date().valueOf(); + this.offset = t - now; + this.redraw(); + }; + + /** + * Get the current time. + * @return {Date} Returns the current time. + */ + CurrentTime.prototype.getCurrentTime = function () { + return new Date(new Date().valueOf() + this.offset); + }; + + module.exports = CurrentTime; /***/ }, /* 47 */ /***/ function(module, exports) { + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); /** * This object contains all possible options. It will check if the types are correct, if required if the option is one * of the allowed values. @@ -23955,11 +24142,6 @@ return /******/ (function(modules) { // webpackBootstrap * __any__ means that the name of the property does not matter. * __type__ is a required field for all objects and contains the allowed types of all objects */ - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); var string = 'string'; var boolean = 'boolean'; var number = 'number'; @@ -24191,22 +24373,30 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _Configurator = __webpack_require__(20); + + var _Configurator2 = _interopRequireDefault(_Configurator); + + var _Validator = __webpack_require__(26); + + var _Validator2 = _interopRequireDefault(_Validator); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + var Emitter = __webpack_require__(12); - var Hammer = __webpack_require__(20); + var Hammer = __webpack_require__(22); var moment = __webpack_require__(2); var util = __webpack_require__(1); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); - var Range = __webpack_require__(23); - var Core = __webpack_require__(27); - var TimeAxis = __webpack_require__(38); - var CurrentTime = __webpack_require__(43); - var CustomTime = __webpack_require__(41); + var Range = __webpack_require__(27); + var Core = __webpack_require__(30); + var TimeAxis = __webpack_require__(41); + var CurrentTime = __webpack_require__(46); + var CustomTime = __webpack_require__(44); var LineGraph = __webpack_require__(49); - var Configurator = __webpack_require__(44); - var Validator = __webpack_require__(46)['default']; - var printStyle = __webpack_require__(46).printStyle; + var printStyle = __webpack_require__(26).printStyle; var allOptions = __webpack_require__(57).allOptions; var configureOptions = __webpack_require__(57).configureOptions; @@ -24326,7 +24516,7 @@ return /******/ (function(modules) { // webpackBootstrap Graph2d.prototype.setOptions = function (options) { // validate options - var errorFound = Validator.validate(options, allOptions); + var errorFound = _Validator2.default.validate(options, allOptions); if (errorFound === true) { console.log('%cErrors have been found in the supplied options object.', printStyle); } @@ -24520,7 +24710,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ Graph2d.prototype._createConfigurator = function () { - return new Configurator(this, this.dom.container, configureOptions); + return new _Configurator2.default(this, this.dom.container, configureOptions); }; module.exports = Graph2d; @@ -24531,11 +24721,13 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var util = __webpack_require__(1); var DOMutil = __webpack_require__(7); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); - var Component = __webpack_require__(25); + var Component = __webpack_require__(28); var DataAxis = __webpack_require__(50); var GraphGroup = __webpack_require__(52); var Legend = __webpack_require__(56); @@ -24707,7 +24899,7 @@ return /******/ (function(modules) { // webpackBootstrap util.mergeOptions(this.options, options, 'legend'); if (options.interpolation) { - if (typeof options.interpolation == 'object') { + if (_typeof(options.interpolation) == 'object') { if (options.interpolation.parametrization) { if (options.interpolation.parametrization == 'uniform') { this.options.interpolation.alpha = 0; @@ -25563,7 +25755,7 @@ return /******/ (function(modules) { // webpackBootstrap var util = __webpack_require__(1); var DOMutil = __webpack_require__(7); - var Component = __webpack_require__(25); + var Component = __webpack_require__(28); var DataScale = __webpack_require__(51); /** * A horizontal time axis @@ -26119,12 +26311,12 @@ return /******/ (function(modules) { // webpackBootstrap /* 51 */ /***/ function(module, exports) { + 'use strict'; + /** * Created by ludo on 25-1-16. */ - 'use strict'; - function DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight) { var zeroAlign = arguments.length <= 6 || arguments[6] === undefined ? false : arguments[6]; var formattingFunction = arguments.length <= 7 || arguments[7] === undefined ? false : arguments[7]; @@ -26184,7 +26376,7 @@ return /******/ (function(modules) { // webpackBootstrap var range = this._end - this._start; this.scale = this.containerHeight / range; var minimumStepValue = this.majorCharHeight / this.scale; - var orderOfMagnitude = Math.round(Math.log(range) / Math.LN10); + var orderOfMagnitude = range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0; this.minorStepIdx = -1; this.magnitudefactor = Math.pow(10, orderOfMagnitude); @@ -26363,6 +26555,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var util = __webpack_require__(1); var DOMutil = __webpack_require__(7); var Bars = __webpack_require__(53); @@ -26444,7 +26638,7 @@ return /******/ (function(modules) { // webpackBootstrap util.mergeOptions(this.options, options, 'shaded'); if (options.interpolation) { - if (typeof options.interpolation == 'object') { + if (_typeof(options.interpolation) == 'object') { if (options.interpolation.parametrization) { if (options.interpolation.parametrization == 'uniform') { this.options.interpolation.alpha = 0; @@ -26785,6 +26979,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + var DOMutil = __webpack_require__(7); function Points(groupId, options) {} @@ -26808,7 +27004,7 @@ return /******/ (function(modules) { // webpackBootstrap DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label); } else { var callbackResult = callback(dataset[i], group); // result might be true, false or an object - if (callbackResult === true || typeof callbackResult === 'object') { + if (callbackResult === true || (typeof callbackResult === 'undefined' ? 'undefined' : _typeof(callbackResult)) === 'object') { DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label); } } @@ -27153,7 +27349,7 @@ return /******/ (function(modules) { // webpackBootstrap var util = __webpack_require__(1); var DOMutil = __webpack_require__(7); - var Component = __webpack_require__(25); + var Component = __webpack_require__(28); /** * Legend for Graph2d @@ -27368,6 +27564,11 @@ return /******/ (function(modules) { // webpackBootstrap /* 57 */ /***/ function(module, exports) { + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); /** * This object contains all possible options. It will check if the types are correct, if required if the option is one * of the allowed values. @@ -27375,11 +27576,6 @@ return /******/ (function(modules) { // webpackBootstrap * __any__ means that the name of the property does not matter. * __type__ is a required field for all objects and contains the allowed types of all objects */ - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); var string = 'string'; var boolean = 'boolean'; var number = 'number'; @@ -27654,72 +27850,87 @@ return /******/ (function(modules) { // webpackBootstrap /* 58 */ /***/ function(module, exports, __webpack_require__) { - // Load custom shapes into CanvasRenderingContext2D 'use strict'; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Images = __webpack_require__(59); + + var _Images2 = _interopRequireDefault(_Images); + + var _Groups = __webpack_require__(60); - var _modulesGroups = __webpack_require__(59); + var _Groups2 = _interopRequireDefault(_Groups); - var _modulesGroups2 = _interopRequireDefault(_modulesGroups); + var _NodesHandler = __webpack_require__(61); - var _modulesNodesHandler = __webpack_require__(60); + var _NodesHandler2 = _interopRequireDefault(_NodesHandler); - var _modulesNodesHandler2 = _interopRequireDefault(_modulesNodesHandler); + var _EdgesHandler = __webpack_require__(81); - var _modulesEdgesHandler = __webpack_require__(80); + var _EdgesHandler2 = _interopRequireDefault(_EdgesHandler); - var _modulesEdgesHandler2 = _interopRequireDefault(_modulesEdgesHandler); + var _PhysicsEngine = __webpack_require__(90); - var _modulesPhysicsEngine = __webpack_require__(89); + var _PhysicsEngine2 = _interopRequireDefault(_PhysicsEngine); - var _modulesPhysicsEngine2 = _interopRequireDefault(_modulesPhysicsEngine); + var _Clustering = __webpack_require__(99); - var _modulesClustering = __webpack_require__(98); + var _Clustering2 = _interopRequireDefault(_Clustering); - var _modulesClustering2 = _interopRequireDefault(_modulesClustering); + var _CanvasRenderer = __webpack_require__(102); - var _modulesCanvasRenderer = __webpack_require__(101); + var _CanvasRenderer2 = _interopRequireDefault(_CanvasRenderer); - var _modulesCanvasRenderer2 = _interopRequireDefault(_modulesCanvasRenderer); + var _Canvas = __webpack_require__(103); - var _modulesCanvas = __webpack_require__(102); + var _Canvas2 = _interopRequireDefault(_Canvas); - var _modulesCanvas2 = _interopRequireDefault(_modulesCanvas); + var _View = __webpack_require__(104); - var _modulesView = __webpack_require__(103); + var _View2 = _interopRequireDefault(_View); - var _modulesView2 = _interopRequireDefault(_modulesView); + var _InteractionHandler = __webpack_require__(105); - var _modulesInteractionHandler = __webpack_require__(104); + var _InteractionHandler2 = _interopRequireDefault(_InteractionHandler); - var _modulesInteractionHandler2 = _interopRequireDefault(_modulesInteractionHandler); + var _SelectionHandler = __webpack_require__(108); - var _modulesSelectionHandler = __webpack_require__(107); + var _SelectionHandler2 = _interopRequireDefault(_SelectionHandler); - var _modulesSelectionHandler2 = _interopRequireDefault(_modulesSelectionHandler); + var _LayoutEngine = __webpack_require__(109); - var _modulesLayoutEngine = __webpack_require__(108); + var _LayoutEngine2 = _interopRequireDefault(_LayoutEngine); - var _modulesLayoutEngine2 = _interopRequireDefault(_modulesLayoutEngine); + var _ManipulationSystem = __webpack_require__(110); - var _modulesManipulationSystem = __webpack_require__(109); + var _ManipulationSystem2 = _interopRequireDefault(_ManipulationSystem); - var _modulesManipulationSystem2 = _interopRequireDefault(_modulesManipulationSystem); + var _Configurator = __webpack_require__(20); - var _sharedConfigurator = __webpack_require__(44); + var _Configurator2 = _interopRequireDefault(_Configurator); - var _sharedConfigurator2 = _interopRequireDefault(_sharedConfigurator); + var _Validator = __webpack_require__(26); - var _sharedValidator = __webpack_require__(46); + var _Validator2 = _interopRequireDefault(_Validator); - var _sharedValidator2 = _interopRequireDefault(_sharedValidator); + var _options = __webpack_require__(111); - var _optionsJs = __webpack_require__(110); + var _KamadaKawai = __webpack_require__(112); - var _modulesKamadaKawaiJs = __webpack_require__(111); + var _KamadaKawai2 = _interopRequireDefault(_KamadaKawai); - var _modulesKamadaKawaiJs2 = _interopRequireDefault(_modulesKamadaKawaiJs); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + // Load custom shapes into CanvasRenderingContext2D + __webpack_require__(114); + + var Emitter = __webpack_require__(12); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var dotparser = __webpack_require__(115); + var gephiParser = __webpack_require__(116); + var Activator = __webpack_require__(42); + var locales = __webpack_require__(117); /** * @constructor Network @@ -27732,19 +27943,6 @@ return /******/ (function(modules) { // webpackBootstrap * {Array} edges * @param {Object} options Options */ - __webpack_require__(113); - - var Emitter = __webpack_require__(12); - var Hammer = __webpack_require__(20); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(8); - var DataView = __webpack_require__(10); - var dotparser = __webpack_require__(114); - var gephiParser = __webpack_require__(115); - var Images = __webpack_require__(116); - var Activator = __webpack_require__(39); - var locales = __webpack_require__(117); - function Network(container, data, options) { var _this = this; @@ -27808,24 +28006,24 @@ return /******/ (function(modules) { // webpackBootstrap this.bindEventListeners(); // setting up all modules - this.images = new Images(function () { + this.images = new _Images2.default(function () { return _this.body.emitter.emit("_requestRedraw"); }); // object with images - this.groups = new _modulesGroups2['default'](); // object with groups - this.canvas = new _modulesCanvas2['default'](this.body); // DOM handler - this.selectionHandler = new _modulesSelectionHandler2['default'](this.body, this.canvas); // Selection handler - this.interactionHandler = new _modulesInteractionHandler2['default'](this.body, this.canvas, this.selectionHandler); // Interaction handler handles all the hammer bindings (that are bound by canvas), key - this.view = new _modulesView2['default'](this.body, this.canvas); // camera handler, does animations and zooms - this.renderer = new _modulesCanvasRenderer2['default'](this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into - this.physics = new _modulesPhysicsEngine2['default'](this.body); // physics engine, does all the simulations - this.layoutEngine = new _modulesLayoutEngine2['default'](this.body); // layout engine for inital layout and hierarchical layout - this.clustering = new _modulesClustering2['default'](this.body); // clustering api - this.manipulation = new _modulesManipulationSystem2['default'](this.body, this.canvas, this.selectionHandler); // data manipulation system - - this.nodesHandler = new _modulesNodesHandler2['default'](this.body, this.images, this.groups, this.layoutEngine); // Handle adding, deleting and updating of nodes as well as global options - this.edgesHandler = new _modulesEdgesHandler2['default'](this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options - - this.body.modules["kamadaKawai"] = new _modulesKamadaKawaiJs2['default'](this.body, 150, 0.05); // Layouting algorithm. + this.groups = new _Groups2.default(); // object with groups + this.canvas = new _Canvas2.default(this.body); // DOM handler + this.selectionHandler = new _SelectionHandler2.default(this.body, this.canvas); // Selection handler + this.interactionHandler = new _InteractionHandler2.default(this.body, this.canvas, this.selectionHandler); // Interaction handler handles all the hammer bindings (that are bound by canvas), key + this.view = new _View2.default(this.body, this.canvas); // camera handler, does animations and zooms + this.renderer = new _CanvasRenderer2.default(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into + this.physics = new _PhysicsEngine2.default(this.body); // physics engine, does all the simulations + this.layoutEngine = new _LayoutEngine2.default(this.body); // layout engine for inital layout and hierarchical layout + this.clustering = new _Clustering2.default(this.body); // clustering api + this.manipulation = new _ManipulationSystem2.default(this.body, this.canvas, this.selectionHandler); // data manipulation system + + this.nodesHandler = new _NodesHandler2.default(this.body, this.images, this.groups, this.layoutEngine); // Handle adding, deleting and updating of nodes as well as global options + this.edgesHandler = new _EdgesHandler2.default(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options + + this.body.modules["kamadaKawai"] = new _KamadaKawai2.default(this.body, 150, 0.05); // Layouting algorithm. this.body.modules["clustering"] = this.clustering; // create the DOM elements @@ -27849,9 +28047,9 @@ return /******/ (function(modules) { // webpackBootstrap var _this2 = this; if (options !== undefined) { - var errorFound = _sharedValidator2['default'].validate(options, _optionsJs.allOptions); + var errorFound = _Validator2.default.validate(options, _options.allOptions); if (errorFound === true) { - console.log('%cErrors have been found in the supplied options object.', _sharedValidator.printStyle); + console.log('%cErrors have been found in the supplied options object.', _Validator.printStyle); } // copy the global fields over @@ -27884,7 +28082,7 @@ return /******/ (function(modules) { // webpackBootstrap if ('configure' in options) { if (!this.configurator) { - this.configurator = new _sharedConfigurator2['default'](this, this.body.container, _optionsJs.configureOptions, this.canvas.pixelRatio); + this.configurator = new _Configurator2.default(this, this.body.container, _options.configureOptions, this.canvas.pixelRatio); } this.configurator.setOptions(options.configure); @@ -28285,6 +28483,136 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, /* 59 */ +/***/ function(module, exports) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + /** + * @class Images + * This class loads images and keeps them stored. + */ + + var Images = function () { + function Images(callback) { + _classCallCheck(this, Images); + + this.images = {}; + this.imageBroken = {}; + this.callback = callback; + } + + /** + * @param {string} url The Url to cache the image as + * @return {Image} imageToLoadBrokenUrlOn The image object + */ + + + _createClass(Images, [{ + key: "_addImageToCache", + value: function _addImageToCache(url, imageToCache) { + // IE11 fix -- thanks dponch! + if (imageToCache.width === 0) { + document.body.appendChild(imageToCache); + imageToCache.width = imageToCache.offsetWidth; + imageToCache.height = imageToCache.offsetHeight; + document.body.removeChild(imageToCache); + } + + this.images[url] = imageToCache; + } + + /** + * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image + * @param {string} brokenUrl Url the broken image to try and load + * @return {Image} imageToLoadBrokenUrlOn The image object + */ + + }, { + key: "_tryloadBrokenUrl", + value: function _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) { + var _this = this; + + //If any of the parameters aren't specified then exit the function because nothing constructive can be done + if (url === undefined || brokenUrl === undefined || imageToLoadBrokenUrlOn === undefined) return; + + //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl + imageToLoadBrokenUrlOn.onerror = function () { + console.error("Could not load brokenImage:", brokenUrl); + //Add an empty image to the cache so that when subsequent load calls are made for the url we don't try load the image and broken image again + _this._addImageToCache(url, new Image()); + }; + + //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image + imageToLoadBrokenUrlOn.src = brokenUrl; + } + + /** + * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked + */ + + }, { + key: "_redrawWithImage", + value: function _redrawWithImage(imageToRedrawWith) { + if (this.callback) { + this.callback(imageToRedrawWith); + } + } + + /** + * @param {string} url Url of the image + * @param {string} brokenUrl Url of an image to use if the url image is not found + * @return {Image} img The image object + */ + + }, { + key: "load", + value: function load(url, brokenUrl, id) { + var _this2 = this; + + //Try and get the image from the cache, if successful then return the cached image + var cachedImage = this.images[url]; + if (cachedImage) return cachedImage; + + //Create a new image + var img = new Image(); + + //Subscribe to the event that is raised if the image loads successfully + img.onload = function () { + //Add the image to the cache and then request a redraw + _this2._addImageToCache(url, img); + _this2._redrawWithImage(img); + }; + + //Subscribe to the event that is raised if the image fails to load + img.onerror = function () { + console.error("Could not load image:", url); + //Try and load the image specified by the brokenUrl using + _this2._tryloadBrokenUrl(url, brokenUrl, img); + }; + + //Set the source of the image to the url, this is actuall what kicks off the loading of the image + img.src = url; + + //Return the new image + return img; + } + }]); + + return Images; + }(); + + exports.default = Images; + +/***/ }, +/* 60 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -28293,7 +28621,7 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -28304,7 +28632,7 @@ return /******/ (function(modules) { // webpackBootstrap * This class can store groups and options specific for groups. */ - var Groups = (function () { + var Groups = function () { function Groups() { _classCallCheck(this, Groups); @@ -28365,6 +28693,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Clear all groups */ + }, { key: "clear", value: function clear() { @@ -28378,6 +28707,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {*} groupname Can be a number, string, Date, etc. * @return {Object} group The created group, containing all group options */ + }, { key: "get", value: function get(groupname) { @@ -28392,10 +28722,10 @@ return /******/ (function(modules) { // webpackBootstrap this.groups[groupname] = group; } else { // create new group - var index = this.defaultIndex % this.defaultGroups.length; + var _index = this.defaultIndex % this.defaultGroups.length; this.defaultIndex++; group = {}; - group.color = this.defaultGroups[index]; + group.color = this.defaultGroups[_index]; this.groups[groupname] = group; } } @@ -28410,6 +28740,7 @@ return /******/ (function(modules) { // webpackBootstrap * backgroundColor, etc. * @return {Object} group The created group object */ + }, { key: "add", value: function add(groupName, style) { @@ -28420,40 +28751,39 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Groups; - })(); + }(); - exports["default"] = Groups; - module.exports = exports["default"]; + exports.default = Groups; /***/ }, -/* 60 */ +/* 61 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Node = __webpack_require__(62); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _Node2 = _interopRequireDefault(_Node); - var _componentsNode = __webpack_require__(61); + var _Label = __webpack_require__(63); - var _componentsNode2 = _interopRequireDefault(_componentsNode); + var _Label2 = _interopRequireDefault(_Label); - var _componentsSharedLabel = __webpack_require__(62); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); - var NodesHandler = (function () { + var NodesHandler = function () { function NodesHandler(body, images, groups, layoutEngine) { var _this = this; @@ -28507,7 +28837,7 @@ return /******/ (function(modules) { // webpackBootstrap background: 'none', strokeWidth: 0, // px strokeColor: '#ffffff', - align: 'horizontal' + align: 'center' }, group: undefined, hidden: false, @@ -28591,7 +28921,7 @@ return /******/ (function(modules) { // webpackBootstrap key: 'setOptions', value: function setOptions(options) { if (options !== undefined) { - _componentsNode2['default'].parseOptions(this.options, options); + _Node2.default.parseOptions(this.options, options); // update the shape in all nodes if (options.shape !== undefined) { @@ -28604,20 +28934,20 @@ return /******/ (function(modules) { // webpackBootstrap // update the font in all nodes if (options.font !== undefined) { - _componentsSharedLabel2['default'].parseOptions(this.options.font, options); - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - this.body.nodes[nodeId].updateLabelModule(); - this.body.nodes[nodeId]._reset(); + _Label2.default.parseOptions(this.options.font, options); + for (var _nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId)) { + this.body.nodes[_nodeId].updateLabelModule(); + this.body.nodes[_nodeId]._reset(); } } } // update the shape size in all nodes if (options.size !== undefined) { - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - this.body.nodes[nodeId]._reset(); + for (var _nodeId2 in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId2)) { + this.body.nodes[_nodeId2]._reset(); } } } @@ -28634,6 +28964,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Array | DataSet | DataView} nodes The data containing the nodes. * @private */ + }, { key: 'setData', value: function setData(nodes) { @@ -28688,12 +29019,13 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'add', value: function add(ids) { var doNotEmit = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - var id = undefined; + var id = void 0; var newNodes = []; for (var i = 0; i < ids.length; i++) { id = ids[i]; @@ -28715,6 +29047,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'update', value: function update(ids, changedData) { @@ -28746,6 +29079,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'remove', value: function remove(ids) { @@ -28764,10 +29098,11 @@ return /******/ (function(modules) { // webpackBootstrap * @param properties * @param constructorClass */ + }, { key: 'create', value: function create(properties) { - var constructorClass = arguments.length <= 1 || arguments[1] === undefined ? _componentsNode2['default'] : arguments[1]; + var constructorClass = arguments.length <= 1 || arguments[1] === undefined ? _Node2.default : arguments[1]; return new constructorClass(properties, this.body, this.images, this.groups, this.options); } @@ -28798,6 +29133,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param ids --> optional, can be array of nodeIds, can be string * @returns {{}} */ + }, { key: 'getPositions', value: function getPositions(ids) { @@ -28812,14 +29148,14 @@ return /******/ (function(modules) { // webpackBootstrap } } else { if (this.body.nodes[ids] !== undefined) { - var node = this.body.nodes[ids]; - dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) }; + var _node = this.body.nodes[ids]; + dataArray[ids] = { x: Math.round(_node.x), y: Math.round(_node.y) }; } } } else { - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var node = this.body.nodes[this.body.nodeIndices[i]]; - dataArray[this.body.nodeIndices[i]] = { x: Math.round(node.x), y: Math.round(node.y) }; + for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { + var _node2 = this.body.nodes[this.body.nodeIndices[_i]]; + dataArray[this.body.nodeIndices[_i]] = { x: Math.round(_node2.x), y: Math.round(_node2.y) }; } } return dataArray; @@ -28828,6 +29164,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Load the XY positions of the nodes into the dataset. */ + }, { key: 'storePositions', value: function storePositions() { @@ -28851,6 +29188,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeId * @returns {j|*} */ + }, { key: 'getBoundingBox', value: function getBoundingBox(nodeId) { @@ -28864,6 +29202,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeId * @returns {Array} */ + }, { key: 'getConnectedNodes', value: function getConnectedNodes(nodeId) { @@ -28896,6 +29235,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeId * @returns {*} */ + }, { key: 'getConnectedEdges', value: function getConnectedEdges(nodeId) { @@ -28917,6 +29257,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param Number x * @param Number y */ + }, { key: 'moveNode', value: function moveNode(nodeId, x, y) { @@ -28935,90 +29276,89 @@ return /******/ (function(modules) { // webpackBootstrap }]); return NodesHandler; - })(); + }(); - exports['default'] = NodesHandler; - module.exports = exports['default']; + exports.default = NodesHandler; /***/ }, -/* 61 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Label = __webpack_require__(63); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _Label2 = _interopRequireDefault(_Label); - var _sharedLabel = __webpack_require__(62); + var _Box = __webpack_require__(64); - var _sharedLabel2 = _interopRequireDefault(_sharedLabel); + var _Box2 = _interopRequireDefault(_Box); - var _nodesShapesBox = __webpack_require__(63); + var _Circle = __webpack_require__(66); - var _nodesShapesBox2 = _interopRequireDefault(_nodesShapesBox); + var _Circle2 = _interopRequireDefault(_Circle); - var _nodesShapesCircle = __webpack_require__(65); + var _CircularImage = __webpack_require__(68); - var _nodesShapesCircle2 = _interopRequireDefault(_nodesShapesCircle); + var _CircularImage2 = _interopRequireDefault(_CircularImage); - var _nodesShapesCircularImage = __webpack_require__(67); + var _Database = __webpack_require__(69); - var _nodesShapesCircularImage2 = _interopRequireDefault(_nodesShapesCircularImage); + var _Database2 = _interopRequireDefault(_Database); - var _nodesShapesDatabase = __webpack_require__(68); + var _Diamond = __webpack_require__(70); - var _nodesShapesDatabase2 = _interopRequireDefault(_nodesShapesDatabase); + var _Diamond2 = _interopRequireDefault(_Diamond); - var _nodesShapesDiamond = __webpack_require__(69); + var _Dot = __webpack_require__(72); - var _nodesShapesDiamond2 = _interopRequireDefault(_nodesShapesDiamond); + var _Dot2 = _interopRequireDefault(_Dot); - var _nodesShapesDot = __webpack_require__(71); + var _Ellipse = __webpack_require__(73); - var _nodesShapesDot2 = _interopRequireDefault(_nodesShapesDot); + var _Ellipse2 = _interopRequireDefault(_Ellipse); - var _nodesShapesEllipse = __webpack_require__(72); + var _Icon = __webpack_require__(74); - var _nodesShapesEllipse2 = _interopRequireDefault(_nodesShapesEllipse); + var _Icon2 = _interopRequireDefault(_Icon); - var _nodesShapesIcon = __webpack_require__(73); + var _Image = __webpack_require__(75); - var _nodesShapesIcon2 = _interopRequireDefault(_nodesShapesIcon); + var _Image2 = _interopRequireDefault(_Image); - var _nodesShapesImage = __webpack_require__(74); + var _Square = __webpack_require__(76); - var _nodesShapesImage2 = _interopRequireDefault(_nodesShapesImage); + var _Square2 = _interopRequireDefault(_Square); - var _nodesShapesSquare = __webpack_require__(75); + var _Star = __webpack_require__(77); - var _nodesShapesSquare2 = _interopRequireDefault(_nodesShapesSquare); + var _Star2 = _interopRequireDefault(_Star); - var _nodesShapesStar = __webpack_require__(76); + var _Text = __webpack_require__(78); - var _nodesShapesStar2 = _interopRequireDefault(_nodesShapesStar); + var _Text2 = _interopRequireDefault(_Text); - var _nodesShapesText = __webpack_require__(77); + var _Triangle = __webpack_require__(79); - var _nodesShapesText2 = _interopRequireDefault(_nodesShapesText); + var _Triangle2 = _interopRequireDefault(_Triangle); - var _nodesShapesTriangle = __webpack_require__(78); + var _TriangleDown = __webpack_require__(80); - var _nodesShapesTriangle2 = _interopRequireDefault(_nodesShapesTriangle); + var _TriangleDown2 = _interopRequireDefault(_TriangleDown); - var _nodesShapesTriangleDown = __webpack_require__(79); + var _Validator = __webpack_require__(26); - var _nodesShapesTriangleDown2 = _interopRequireDefault(_nodesShapesTriangleDown); + var _Validator2 = _interopRequireDefault(_Validator); - var _sharedValidator = __webpack_require__(46); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _sharedValidator2 = _interopRequireDefault(_sharedValidator); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); @@ -29048,7 +29388,7 @@ return /******/ (function(modules) { // webpackBootstrap * */ - var Node = (function () { + var Node = function () { function Node(options, body, imagelist, grouplist, globalOptions) { _classCallCheck(this, Node); @@ -29072,7 +29412,7 @@ return /******/ (function(modules) { // webpackBootstrap this.selected = false; this.hover = false; - this.labelModule = new _sharedLabel2['default'](this.body, this.options); + this.labelModule = new _Label2.default(this.body, this.options, false /* Not edge label */); this.setOptions(options); } @@ -29081,6 +29421,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Edge} edge */ + _createClass(Node, [{ key: 'attachEdge', value: function attachEdge(edge) { @@ -29093,6 +29434,7 @@ return /******/ (function(modules) { // webpackBootstrap * Detach a edge from the node * @param {Edge} edge */ + }, { key: 'detachEdge', value: function detachEdge(edge) { @@ -29107,6 +29449,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} options an object with options * @param {Object} constants and object with default, global options */ + }, { key: 'setOptions', value: function setOptions(options) { @@ -29183,6 +29526,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param allowDeletion * @param globalOptions */ + }, { key: 'updateLabelModule', value: function updateLabelModule() { @@ -29203,49 +29547,49 @@ return /******/ (function(modules) { // webpackBootstrap // choose draw method depending on the shape switch (this.options.shape) { case 'box': - this.shape = new _nodesShapesBox2['default'](this.options, this.body, this.labelModule); + this.shape = new _Box2.default(this.options, this.body, this.labelModule); break; case 'circle': - this.shape = new _nodesShapesCircle2['default'](this.options, this.body, this.labelModule); + this.shape = new _Circle2.default(this.options, this.body, this.labelModule); break; case 'circularImage': - this.shape = new _nodesShapesCircularImage2['default'](this.options, this.body, this.labelModule, this.imageObj); + this.shape = new _CircularImage2.default(this.options, this.body, this.labelModule, this.imageObj); break; case 'database': - this.shape = new _nodesShapesDatabase2['default'](this.options, this.body, this.labelModule); + this.shape = new _Database2.default(this.options, this.body, this.labelModule); break; case 'diamond': - this.shape = new _nodesShapesDiamond2['default'](this.options, this.body, this.labelModule); + this.shape = new _Diamond2.default(this.options, this.body, this.labelModule); break; case 'dot': - this.shape = new _nodesShapesDot2['default'](this.options, this.body, this.labelModule); + this.shape = new _Dot2.default(this.options, this.body, this.labelModule); break; case 'ellipse': - this.shape = new _nodesShapesEllipse2['default'](this.options, this.body, this.labelModule); + this.shape = new _Ellipse2.default(this.options, this.body, this.labelModule); break; case 'icon': - this.shape = new _nodesShapesIcon2['default'](this.options, this.body, this.labelModule); + this.shape = new _Icon2.default(this.options, this.body, this.labelModule); break; case 'image': - this.shape = new _nodesShapesImage2['default'](this.options, this.body, this.labelModule, this.imageObj); + this.shape = new _Image2.default(this.options, this.body, this.labelModule, this.imageObj); break; case 'square': - this.shape = new _nodesShapesSquare2['default'](this.options, this.body, this.labelModule); + this.shape = new _Square2.default(this.options, this.body, this.labelModule); break; case 'star': - this.shape = new _nodesShapesStar2['default'](this.options, this.body, this.labelModule); + this.shape = new _Star2.default(this.options, this.body, this.labelModule); break; case 'text': - this.shape = new _nodesShapesText2['default'](this.options, this.body, this.labelModule); + this.shape = new _Text2.default(this.options, this.body, this.labelModule); break; case 'triangle': - this.shape = new _nodesShapesTriangle2['default'](this.options, this.body, this.labelModule); + this.shape = new _Triangle2.default(this.options, this.body, this.labelModule); break; case 'triangleDown': - this.shape = new _nodesShapesTriangleDown2['default'](this.options, this.body, this.labelModule); + this.shape = new _TriangleDown2.default(this.options, this.body, this.labelModule); break; default: - this.shape = new _nodesShapesEllipse2['default'](this.options, this.body, this.labelModule); + this.shape = new _Ellipse2.default(this.options, this.body, this.labelModule); break; } } @@ -29255,6 +29599,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * select this node */ + }, { key: 'select', value: function select() { @@ -29265,6 +29610,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * unselect this node */ + }, { key: 'unselect', value: function unselect() { @@ -29276,6 +29622,7 @@ return /******/ (function(modules) { // webpackBootstrap * Reset the calculated size of the node, forces it to recalculate its size * @private */ + }, { key: '_reset', value: function _reset() { @@ -29288,6 +29635,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {string} title The title of the node, or undefined when no title * has been set. */ + }, { key: 'getTitle', value: function getTitle() { @@ -29300,6 +29648,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number} angle Angle in radians * @returns {number} distance Distance to the border in pixels */ + }, { key: 'distanceToBorder', value: function distanceToBorder(ctx, angle) { @@ -29310,6 +29659,7 @@ return /******/ (function(modules) { // webpackBootstrap * Check if this node has a fixed x and y position * @return {boolean} true if fixed, false if not */ + }, { key: 'isFixed', value: function isFixed() { @@ -29320,6 +29670,7 @@ return /******/ (function(modules) { // webpackBootstrap * check if this node is selecte * @return {boolean} selected True if node is selected, else false */ + }, { key: 'isSelected', value: function isSelected() { @@ -29330,6 +29681,7 @@ return /******/ (function(modules) { // webpackBootstrap * Retrieve the value of the node. Can be undefined * @return {Number} value */ + }, { key: 'getValue', value: function getValue() { @@ -29342,6 +29694,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number} min * @param {Number} max */ + }, { key: 'setValueRange', value: function setValueRange(min, max, total) { @@ -29366,6 +29719,7 @@ return /******/ (function(modules) { // webpackBootstrap * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); * @param {CanvasRenderingContext2D} ctx */ + }, { key: 'draw', value: function draw(ctx) { @@ -29375,6 +29729,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Update the bounding box of the shape */ + }, { key: 'updateBoundingBox', value: function updateBoundingBox(ctx) { @@ -29386,6 +29741,7 @@ return /******/ (function(modules) { // webpackBootstrap * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); * @param {CanvasRenderingContext2D} ctx */ + }, { key: 'resize', value: function resize(ctx) { @@ -29397,6 +29753,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} obj an object with parameters left, top, right, bottom * @return {boolean} True if location is located on node */ + }, { key: 'isOverlappingWith', value: function isOverlappingWith(obj) { @@ -29408,6 +29765,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} obj an object with parameters left, top, right, bottom * @return {boolean} True if location is located on node */ + }, { key: 'isBoundingBoxOverlappingWith', value: function isBoundingBoxOverlappingWith(obj) { @@ -29450,7 +29808,7 @@ return /******/ (function(modules) { // webpackBootstrap // handle the font options if (newOptions.font !== undefined && newOptions.font !== null) { - _sharedLabel2['default'].parseOptions(parentOptions.font, newOptions); + _Label2.default.parseOptions(parentOptions.font, newOptions); } else if (allowDeletion === true && newOptions.font === null) { parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options } @@ -29463,31 +29821,34 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Node; - })(); + }(); - exports['default'] = Node; - module.exports = exports['default']; + exports.default = Node; /***/ }, -/* 62 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var Label = (function () { + var Label = function () { function Label(body, options) { + var edgelabel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + _classCallCheck(this, Label); this.body = body; @@ -29497,6 +29858,7 @@ return /******/ (function(modules) { // webpackBootstrap this.fontOptions = {}; this.setOptions(options); this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 }; // could be cached + this.isEdgeLabel = edgelabel; } _createClass(Label, [{ @@ -29518,7 +29880,7 @@ return /******/ (function(modules) { // webpackBootstrap Label.parseOptions(this.fontOptions, options, allowDeletion); if (typeof options.font === 'string') { this.baseSize = this.fontOptions.size; - } else if (typeof options.font === 'object') { + } else if (_typeof(options.font) === 'object') { if (options.font.size !== undefined) { this.baseSize = options.font.size; } @@ -29528,6 +29890,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'draw', + /** * Main function. This is called from anything that wants to draw a label. * @param ctx @@ -29560,6 +29923,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {CanvasRenderingContext2D} ctx * @private */ + }, { key: '_drawBackground', value: function _drawBackground(ctx) { @@ -29568,19 +29932,23 @@ return /******/ (function(modules) { // webpackBootstrap var lineMargin = 2; - switch (this.fontOptions.align) { - case 'middle': - ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height); - break; - case 'top': - ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height); - break; - case 'bottom': - ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height); - break; - default: - ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); - break; + if (this.isEdgeLabel) { + switch (this.fontOptions.align) { + case 'middle': + ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height); + break; + case 'top': + ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height); + break; + case 'bottom': + ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height); + break; + default: + ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); + break; + } + } else { + ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); } } } @@ -29592,6 +29960,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param baseline * @private */ + }, { key: '_drawText', value: function _drawText(ctx, selected, x, y) { @@ -29608,22 +29977,29 @@ return /******/ (function(modules) { // webpackBootstrap var _getColor2 = this._getColor(viewFontSize); - var _getColor22 = _slicedToArray(_getColor2, 2); + var _getColor3 = _slicedToArray(_getColor2, 2); + + var fontColor = _getColor3[0]; + var strokeColor = _getColor3[1]; - var fontColor = _getColor22[0]; - var strokeColor = _getColor22[1]; // configure context for drawing the text var _setAlignment2 = this._setAlignment(ctx, x, yLine, baseline); - var _setAlignment22 = _slicedToArray(_setAlignment2, 2); + var _setAlignment3 = _slicedToArray(_setAlignment2, 2); - x = _setAlignment22[0]; - yLine = _setAlignment22[1]; + x = _setAlignment3[0]; + yLine = _setAlignment3[1]; ctx.font = (selected && this.nodeOptions.labelHighlightBold ? 'bold ' : '') + fontSize + "px " + this.fontOptions.face; ctx.fillStyle = fontColor; - ctx.textAlign = 'center'; + // When the textAlign property is 'left', make label left-justified + if (!this.isEdgeLabel && this.fontOptions.align === 'left') { + ctx.textAlign = this.fontOptions.align; + x = x - 0.5 * this.size.width; // Shift label 1/2-distance to the left + } else { + ctx.textAlign = 'center'; + } // set the strokeWidth if (this.fontOptions.strokeWidth > 0) { @@ -29646,7 +30022,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function _setAlignment(ctx, x, yLine, baseline) { // check for label alignment (for edges) // TODO: make alignment for nodes - if (this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) { + if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) { x = 0; yLine = 0; @@ -29675,6 +30051,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*[]} * @private */ + }, { key: '_getColor', value: function _getColor(viewFontSize) { @@ -29694,6 +30071,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param selected * @returns {{width: number, height: number}} */ + }, { key: 'getTextSize', value: function getTextSize(ctx) { @@ -29715,6 +30093,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param y * @param baseline */ + }, { key: 'calculateLabelSize', value: function calculateLabelSize(ctx, selected) { @@ -29745,6 +30124,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_processLabel', value: function _processLabel(ctx, selected) { @@ -29776,7 +30156,7 @@ return /******/ (function(modules) { // webpackBootstrap parentOptions.size = newOptionsArray[0].replace("px", ''); parentOptions.face = newOptionsArray[1]; parentOptions.color = newOptionsArray[2]; - } else if (typeof newOptions.font === 'object') { + } else if (_typeof(newOptions.font) === 'object') { util.fillIfDefined(parentOptions, newOptions.font, allowDeletion); } parentOptions.size = Number(parentOptions.size); @@ -29784,42 +30164,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Label; - })(); + }(); - exports['default'] = Label; - module.exports = exports['default']; + exports.default = Label; /***/ }, -/* 63 */ +/* 64 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Box = (function (_NodeBase) { + var Box = function (_NodeBase) { _inherits(Box, _NodeBase); function Box(options, body, labelModule) { _classCallCheck(this, Box); - _get(Object.getPrototypeOf(Box.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Box).call(this, options, body, labelModule)); } _createClass(Box, [{ @@ -29899,13 +30278,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Box; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = Box; - module.exports = exports['default']; + exports.default = Box; /***/ }, -/* 64 */ +/* 65 */ /***/ function(module, exports) { "use strict"; @@ -29914,11 +30292,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var NodeBase = (function () { + var NodeBase = function () { function NodeBase(options, body, labelModule) { _classCallCheck(this, NodeBase); @@ -29996,42 +30374,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return NodeBase; - })(); + }(); - exports["default"] = NodeBase; - module.exports = exports["default"]; + exports.default = NodeBase; /***/ }, -/* 65 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _CircleImageBase2 = __webpack_require__(67); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilCircleImageBase = __webpack_require__(66); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Circle = (function (_CircleImageBase) { + var Circle = function (_CircleImageBase) { _inherits(Circle, _CircleImageBase); function Circle(options, body, labelModule) { _classCallCheck(this, Circle); - _get(Object.getPrototypeOf(Circle.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Circle).call(this, options, body, labelModule)); } _createClass(Circle, [{ @@ -30082,44 +30459,45 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Circle; - })(_utilCircleImageBase2['default']); + }(_CircleImageBase3.default); - exports['default'] = Circle; - module.exports = exports['default']; + exports.default = Circle; /***/ }, -/* 66 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var CircleImageBase = (function (_NodeBase) { + var CircleImageBase = function (_NodeBase) { _inherits(CircleImageBase, _NodeBase); function CircleImageBase(options, body, labelModule) { _classCallCheck(this, CircleImageBase); - _get(Object.getPrototypeOf(CircleImageBase.prototype), 'constructor', this).call(this, options, body, labelModule); - this.labelOffset = 0; - this.imageLoaded = false; + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CircleImageBase).call(this, options, body, labelModule)); + + _this.labelOffset = 0; + _this.imageLoaded = false; + return _this; } _createClass(CircleImageBase, [{ @@ -30137,6 +30515,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_resizeImage', value: function _resizeImage() { @@ -30281,44 +30660,45 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CircleImageBase; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = CircleImageBase; - module.exports = exports['default']; + exports.default = CircleImageBase; /***/ }, -/* 67 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _CircleImageBase2 = __webpack_require__(67); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilCircleImageBase = __webpack_require__(66); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var CircularImage = (function (_CircleImageBase) { + var CircularImage = function (_CircleImageBase) { _inherits(CircularImage, _CircleImageBase); function CircularImage(options, body, labelModule, imageObj) { _classCallCheck(this, CircularImage); - _get(Object.getPrototypeOf(CircularImage.prototype), 'constructor', this).call(this, options, body, labelModule); - this.imageObj = imageObj; - this._swapToImageResizeWhenImageLoaded = true; + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(CircularImage).call(this, options, body, labelModule)); + + _this.imageObj = imageObj; + _this._swapToImageResizeWhenImageLoaded = true; + return _this; } _createClass(CircularImage, [{ @@ -30387,42 +30767,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CircularImage; - })(_utilCircleImageBase2['default']); + }(_CircleImageBase3.default); - exports['default'] = CircularImage; - module.exports = exports['default']; + exports.default = CircularImage; /***/ }, -/* 68 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Database = (function (_NodeBase) { + var Database = function (_NodeBase) { _inherits(Database, _NodeBase); function Database(options, body, labelModule) { _classCallCheck(this, Database); - _get(Object.getPrototypeOf(Database.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Database).call(this, options, body, labelModule)); } _createClass(Database, [{ @@ -30497,42 +30876,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Database; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = Database; - module.exports = exports['default']; + exports.default = Database; /***/ }, -/* 69 */ +/* 70 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Diamond = (function (_ShapeBase) { + var Diamond = function (_ShapeBase) { _inherits(Diamond, _ShapeBase); function Diamond(options, body, labelModule) { _classCallCheck(this, Diamond); - _get(Object.getPrototypeOf(Diamond.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Diamond).call(this, options, body, labelModule)); } _createClass(Diamond, [{ @@ -30553,42 +30931,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Diamond; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = Diamond; - module.exports = exports['default']; + exports.default = Diamond; /***/ }, -/* 70 */ +/* 71 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var ShapeBase = (function (_NodeBase) { + var ShapeBase = function (_NodeBase) { _inherits(ShapeBase, _NodeBase); function ShapeBase(options, body, labelModule) { _classCallCheck(this, ShapeBase); - _get(Object.getPrototypeOf(ShapeBase.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(ShapeBase).call(this, options, body, labelModule)); } _createClass(ShapeBase, [{ @@ -30661,42 +31038,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return ShapeBase; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = ShapeBase; - module.exports = exports['default']; + exports.default = ShapeBase; /***/ }, -/* 71 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Dot = (function (_ShapeBase) { + var Dot = function (_ShapeBase) { _inherits(Dot, _ShapeBase); function Dot(options, body, labelModule) { _classCallCheck(this, Dot); - _get(Object.getPrototypeOf(Dot.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Dot).call(this, options, body, labelModule)); } _createClass(Dot, [{ @@ -30718,42 +31094,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Dot; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = Dot; - module.exports = exports['default']; + exports.default = Dot; /***/ }, -/* 72 */ +/* 73 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Ellipse = (function (_NodeBase) { + var Ellipse = function (_NodeBase) { _inherits(Ellipse, _NodeBase); function Ellipse(options, body, labelModule) { _classCallCheck(this, Ellipse); - _get(Object.getPrototypeOf(Ellipse.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Ellipse).call(this, options, body, labelModule)); } _createClass(Ellipse, [{ @@ -30837,42 +31212,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Ellipse; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = Ellipse; - module.exports = exports['default']; + exports.default = Ellipse; /***/ }, -/* 73 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Icon = (function (_NodeBase) { + var Icon = function (_NodeBase) { _inherits(Icon, _NodeBase); function Icon(options, body, labelModule) { _classCallCheck(this, Icon); - _get(Object.getPrototypeOf(Icon.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Icon).call(this, options, body, labelModule)); } _createClass(Icon, [{ @@ -30952,43 +31326,44 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Icon; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = Icon; - module.exports = exports['default']; + exports.default = Icon; /***/ }, -/* 74 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _CircleImageBase2 = __webpack_require__(67); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilCircleImageBase = __webpack_require__(66); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilCircleImageBase2 = _interopRequireDefault(_utilCircleImageBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Image = (function (_CircleImageBase) { + var Image = function (_CircleImageBase) { _inherits(Image, _CircleImageBase); function Image(options, body, labelModule, imageObj) { _classCallCheck(this, Image); - _get(Object.getPrototypeOf(Image.prototype), 'constructor', this).call(this, options, body, labelModule); - this.imageObj = imageObj; + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Image).call(this, options, body, labelModule)); + + _this.imageObj = imageObj; + return _this; } _createClass(Image, [{ @@ -31068,42 +31443,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Image; - })(_utilCircleImageBase2['default']); + }(_CircleImageBase3.default); - exports['default'] = Image; - module.exports = exports['default']; + exports.default = Image; /***/ }, -/* 75 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Square = (function (_ShapeBase) { + var Square = function (_ShapeBase) { _inherits(Square, _ShapeBase); function Square(options, body, labelModule) { _classCallCheck(this, Square); - _get(Object.getPrototypeOf(Square.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Square).call(this, options, body, labelModule)); } _createClass(Square, [{ @@ -31124,42 +31498,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Square; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = Square; - module.exports = exports['default']; + exports.default = Square; /***/ }, -/* 76 */ +/* 77 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Star = (function (_ShapeBase) { + var Star = function (_ShapeBase) { _inherits(Star, _ShapeBase); function Star(options, body, labelModule) { _classCallCheck(this, Star); - _get(Object.getPrototypeOf(Star.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Star).call(this, options, body, labelModule)); } _createClass(Star, [{ @@ -31180,42 +31553,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Star; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = Star; - module.exports = exports['default']; + exports.default = Star; /***/ }, -/* 77 */ +/* 78 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _NodeBase2 = __webpack_require__(65); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilNodeBase = __webpack_require__(64); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilNodeBase2 = _interopRequireDefault(_utilNodeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Text = (function (_NodeBase) { + var Text = function (_NodeBase) { _inherits(Text, _NodeBase); function Text(options, body, labelModule) { _classCallCheck(this, Text); - _get(Object.getPrototypeOf(Text.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Text).call(this, options, body, labelModule)); } _createClass(Text, [{ @@ -31266,42 +31638,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Text; - })(_utilNodeBase2['default']); + }(_NodeBase3.default); - exports['default'] = Text; - module.exports = exports['default']; + exports.default = Text; /***/ }, -/* 78 */ +/* 79 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var Triangle = (function (_ShapeBase) { + var Triangle = function (_ShapeBase) { _inherits(Triangle, _ShapeBase); function Triangle(options, body, labelModule) { _classCallCheck(this, Triangle); - _get(Object.getPrototypeOf(Triangle.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(Triangle).call(this, options, body, labelModule)); } _createClass(Triangle, [{ @@ -31322,42 +31693,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Triangle; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = Triangle; - module.exports = exports['default']; + exports.default = Triangle; /***/ }, -/* 79 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _ShapeBase2 = __webpack_require__(71); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilShapeBase = __webpack_require__(70); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilShapeBase2 = _interopRequireDefault(_utilShapeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var TriangleDown = (function (_ShapeBase) { + var TriangleDown = function (_ShapeBase) { _inherits(TriangleDown, _ShapeBase); function TriangleDown(options, body, labelModule) { _classCallCheck(this, TriangleDown); - _get(Object.getPrototypeOf(TriangleDown.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(TriangleDown).call(this, options, body, labelModule)); } _createClass(TriangleDown, [{ @@ -31378,40 +31748,39 @@ return /******/ (function(modules) { // webpackBootstrap }]); return TriangleDown; - })(_utilShapeBase2['default']); + }(_ShapeBase3.default); - exports['default'] = TriangleDown; - module.exports = exports['default']; + exports.default = TriangleDown; /***/ }, -/* 80 */ +/* 81 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Edge = __webpack_require__(82); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _Edge2 = _interopRequireDefault(_Edge); - var _componentsEdge = __webpack_require__(81); + var _Label = __webpack_require__(63); - var _componentsEdge2 = _interopRequireDefault(_componentsEdge); + var _Label2 = _interopRequireDefault(_Label); - var _componentsSharedLabel = __webpack_require__(62); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); var DataSet = __webpack_require__(8); var DataView = __webpack_require__(10); - var EdgesHandler = (function () { + var EdgesHandler = function () { function EdgesHandler(body, images, groups) { var _this = this; @@ -31574,7 +31943,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function setOptions(options) { if (options !== undefined) { // use the parser from the Edge class to fill in all shorthand notations - _componentsEdge2['default'].parseOptions(this.options, options); + _Edge2.default.parseOptions(this.options, options); // handle multiple input cases for color if (options.color !== undefined) { @@ -31594,10 +31963,10 @@ return /******/ (function(modules) { // webpackBootstrap // update fonts in all edges if (options.font !== undefined) { // use the parser from the Label class to fill in all shorthand notations - _componentsSharedLabel2['default'].parseOptions(this.options.font, options); - for (var edgeId in this.body.edges) { - if (this.body.edges.hasOwnProperty(edgeId)) { - this.body.edges[edgeId].updateLabelModule(); + _Label2.default.parseOptions(this.options.font, options); + for (var _edgeId in this.body.edges) { + if (this.body.edges.hasOwnProperty(_edgeId)) { + this.body.edges[_edgeId].updateLabelModule(); } } } @@ -31615,6 +31984,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private * @private */ + }, { key: 'setData', value: function setData(edges) { @@ -31668,6 +32038,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'add', value: function add(ids) { @@ -31698,6 +32069,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'update', value: function update(ids) { @@ -31732,6 +32104,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} ids * @private */ + }, { key: 'remove', value: function remove(ids) { @@ -31766,7 +32139,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'create', value: function create(properties) { - return new _componentsEdge2['default'](properties, this.body, this.options); + return new _Edge2.default(properties, this.body, this.options); } }, { key: 'markAllEdgesAsDirty', @@ -31780,6 +32153,7 @@ return /******/ (function(modules) { // webpackBootstrap * Reconnect all edges * @private */ + }, { key: 'reconnectEdges', value: function reconnectEdges() { @@ -31820,46 +32194,49 @@ return /******/ (function(modules) { // webpackBootstrap }]); return EdgesHandler; - })(); + }(); - exports['default'] = EdgesHandler; - module.exports = exports['default']; + exports.default = EdgesHandler; /***/ }, -/* 81 */ +/* 82 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + var _Label = __webpack_require__(63); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Label2 = _interopRequireDefault(_Label); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _CubicBezierEdge = __webpack_require__(83); - var _sharedLabel = __webpack_require__(62); + var _CubicBezierEdge2 = _interopRequireDefault(_CubicBezierEdge); - var _sharedLabel2 = _interopRequireDefault(_sharedLabel); + var _BezierEdgeDynamic = __webpack_require__(87); - var _edgesCubicBezierEdge = __webpack_require__(82); + var _BezierEdgeDynamic2 = _interopRequireDefault(_BezierEdgeDynamic); - var _edgesCubicBezierEdge2 = _interopRequireDefault(_edgesCubicBezierEdge); + var _BezierEdgeStatic = __webpack_require__(88); - var _edgesBezierEdgeDynamic = __webpack_require__(86); + var _BezierEdgeStatic2 = _interopRequireDefault(_BezierEdgeStatic); - var _edgesBezierEdgeDynamic2 = _interopRequireDefault(_edgesBezierEdgeDynamic); + var _StraightEdge = __webpack_require__(89); - var _edgesBezierEdgeStatic = __webpack_require__(87); + var _StraightEdge2 = _interopRequireDefault(_StraightEdge); - var _edgesBezierEdgeStatic2 = _interopRequireDefault(_edgesBezierEdgeStatic); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _edgesStraightEdge = __webpack_require__(88); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _edgesStraightEdge2 = _interopRequireDefault(_edgesStraightEdge); + var util = __webpack_require__(1); /** * @class Edge @@ -31876,9 +32253,8 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} constants An object with default values for * example for the color */ - var util = __webpack_require__(1); - var Edge = (function () { + var Edge = function () { function Edge(options, body, globalOptions) { _classCallCheck(this, Edge); @@ -31908,7 +32284,7 @@ return /******/ (function(modules) { // webpackBootstrap this.connected = false; - this.labelModule = new _sharedLabel2['default'](this.body, this.options); + this.labelModule = new _Label2.default(this.body, this.options, true /* It's an edge label */); this.setOptions(options); } @@ -31919,6 +32295,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param doNotEmit */ + _createClass(Edge, [{ key: 'setOptions', value: function setOptions(options) { @@ -31966,6 +32343,7 @@ return /******/ (function(modules) { // webpackBootstrap key: 'updateLabelModule', // set the object back to the global options + /** * update the options in the label module */ @@ -31980,6 +32358,7 @@ return /******/ (function(modules) { // webpackBootstrap * update the edge type, set the options * @returns {boolean} */ + }, { key: 'updateEdgeType', value: function updateEdgeType() { @@ -31987,16 +32366,16 @@ return /******/ (function(modules) { // webpackBootstrap var changeInType = true; var smooth = this.options.smooth; if (this.edgeType !== undefined) { - if (this.edgeType instanceof _edgesBezierEdgeDynamic2['default'] && smooth.enabled === true && smooth.type === 'dynamic') { + if (this.edgeType instanceof _BezierEdgeDynamic2.default && smooth.enabled === true && smooth.type === 'dynamic') { changeInType = false; } - if (this.edgeType instanceof _edgesCubicBezierEdge2['default'] && smooth.enabled === true && smooth.type === 'cubicBezier') { + if (this.edgeType instanceof _CubicBezierEdge2.default && smooth.enabled === true && smooth.type === 'cubicBezier') { changeInType = false; } - if (this.edgeType instanceof _edgesBezierEdgeStatic2['default'] && smooth.enabled === true && smooth.type !== 'dynamic' && smooth.type !== 'cubicBezier') { + if (this.edgeType instanceof _BezierEdgeStatic2.default && smooth.enabled === true && smooth.type !== 'dynamic' && smooth.type !== 'cubicBezier') { changeInType = false; } - if (this.edgeType instanceof _edgesStraightEdge2['default'] && smooth.enabled === false) { + if (this.edgeType instanceof _StraightEdge2.default && smooth.enabled === false) { changeInType = false; } @@ -32009,14 +32388,14 @@ return /******/ (function(modules) { // webpackBootstrap if (this.options.smooth.enabled === true) { if (this.options.smooth.type === 'dynamic') { dataChanged = true; - this.edgeType = new _edgesBezierEdgeDynamic2['default'](this.options, this.body, this.labelModule); + this.edgeType = new _BezierEdgeDynamic2.default(this.options, this.body, this.labelModule); } else if (this.options.smooth.type === 'cubicBezier') { - this.edgeType = new _edgesCubicBezierEdge2['default'](this.options, this.body, this.labelModule); + this.edgeType = new _CubicBezierEdge2.default(this.options, this.body, this.labelModule); } else { - this.edgeType = new _edgesBezierEdgeStatic2['default'](this.options, this.body, this.labelModule); + this.edgeType = new _BezierEdgeStatic2.default(this.options, this.body, this.labelModule); } } else { - this.edgeType = new _edgesStraightEdge2['default'](this.options, this.body, this.labelModule); + this.edgeType = new _StraightEdge2.default(this.options, this.body, this.labelModule); } } else { // if nothing changes, we just set the options. @@ -32029,6 +32408,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Connect an edge to its nodes */ + }, { key: 'connect', value: function connect() { @@ -32056,6 +32436,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Disconnect an edge from its nodes */ + }, { key: 'disconnect', value: function disconnect() { @@ -32076,6 +32457,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {string} title The title of the edge, or undefined when no title * has been set. */ + }, { key: 'getTitle', value: function getTitle() { @@ -32086,6 +32468,7 @@ return /******/ (function(modules) { // webpackBootstrap * check if this node is selecte * @return {boolean} selected True if node is selected, else false */ + }, { key: 'isSelected', value: function isSelected() { @@ -32096,6 +32479,7 @@ return /******/ (function(modules) { // webpackBootstrap * Retrieve the value of the edge. Can be undefined * @return {Number} value */ + }, { key: 'getValue', value: function getValue() { @@ -32109,6 +32493,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number} max * @param total */ + }, { key: 'setValueRange', value: function setValueRange(min, max, total) { @@ -32150,6 +32535,7 @@ return /******/ (function(modules) { // webpackBootstrap * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); * @param {CanvasRenderingContext2D} ctx */ + }, { key: 'draw', value: function draw(ctx) { @@ -32240,6 +32626,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} obj an object with parameters left, top * @return {boolean} True if location is located on the edge */ + }, { key: 'isOverlappingWith', value: function isOverlappingWith(obj) { @@ -32265,6 +32652,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {CanvasRenderingContext2D} ctx * @private */ + }, { key: '_rotateForLabelAlignment', value: function _rotateForLabelAlignment(ctx) { @@ -32289,6 +32677,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Object} point * @private */ + }, { key: '_pointOnCircle', value: function _pointOnCircle(x, y, radius, percentage) { @@ -32313,6 +32702,7 @@ return /******/ (function(modules) { // webpackBootstrap * cleans all required things on delete * @returns {*} */ + }, { key: 'cleanup', value: function cleanup() { @@ -32364,7 +32754,7 @@ return /******/ (function(modules) { // webpackBootstrap if (arrows.indexOf("from") != -1) { parentOptions.arrows.from.enabled = true; } - } else if (typeof newOptions.arrows === 'object') { + } else if (_typeof(newOptions.arrows) === 'object') { util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to', allowDeletion, globalOptions.arrows); util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', allowDeletion, globalOptions.arrows); util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from', allowDeletion, globalOptions.arrows); @@ -32412,7 +32802,7 @@ return /******/ (function(modules) { // webpackBootstrap // handle the font settings if (newOptions.font !== undefined && newOptions.font !== null) { - _sharedLabel2['default'].parseOptions(parentOptions.font, newOptions); + _Label2.default.parseOptions(parentOptions.font, newOptions); } else if (allowDeletion === true && newOptions.font === null) { parentOptions.font = util.bridgeObject(globalOptions.font); } @@ -32420,44 +32810,43 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Edge; - })(); + }(); - exports['default'] = Edge; - module.exports = exports['default']; + exports.default = Edge; /***/ }, -/* 82 */ +/* 83 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _CubicBezierEdgeBase2 = __webpack_require__(84); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _CubicBezierEdgeBase3 = _interopRequireDefault(_CubicBezierEdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilCubicBezierEdgeBase = __webpack_require__(83); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilCubicBezierEdgeBase2 = _interopRequireDefault(_utilCubicBezierEdgeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var CubicBezierEdge = (function (_CubicBezierEdgeBase) { + var CubicBezierEdge = function (_CubicBezierEdgeBase) { _inherits(CubicBezierEdge, _CubicBezierEdgeBase); function CubicBezierEdge(options, body, labelModule) { _classCallCheck(this, CubicBezierEdge); - _get(Object.getPrototypeOf(CubicBezierEdge.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(CubicBezierEdge).call(this, options, body, labelModule)); } /** @@ -32466,6 +32855,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(CubicBezierEdge, [{ key: '_line', value: function _line(ctx, viaNodes) { @@ -32494,10 +32884,10 @@ return /******/ (function(modules) { // webpackBootstrap var dx = this.from.x - this.to.x; var dy = this.from.y - this.to.y; - var x1 = undefined, - y1 = undefined, - x2 = undefined, - y2 = undefined; + var x1 = void 0, + y1 = void 0, + x2 = void 0, + y2 = void 0; var roundness = this.options.smooth.roundness; // horizontal if x > y or if direction is forced or if direction is horizontal @@ -32545,15 +32935,16 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @private */ + }, { key: 'getPoint', value: function getPoint(percentage) { var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? this._getViaCoordinates() : arguments[1]; - var _ref32 = _slicedToArray(_ref3, 2); + var _ref4 = _slicedToArray(_ref3, 2); - var via1 = _ref32[0]; - var via2 = _ref32[1]; + var via1 = _ref4[0]; + var via2 = _ref4[1]; var t = percentage; var vec = []; @@ -32569,42 +32960,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CubicBezierEdge; - })(_utilCubicBezierEdgeBase2['default']); + }(_CubicBezierEdgeBase3.default); - exports['default'] = CubicBezierEdge; - module.exports = exports['default']; + exports.default = CubicBezierEdge; /***/ }, -/* 83 */ +/* 84 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _BezierEdgeBase2 = __webpack_require__(85); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _BezierEdgeBase2 = __webpack_require__(84); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var CubicBezierEdgeBase = (function (_BezierEdgeBase) { + var CubicBezierEdgeBase = function (_BezierEdgeBase) { _inherits(CubicBezierEdgeBase, _BezierEdgeBase); function CubicBezierEdgeBase(options, body, labelModule) { _classCallCheck(this, CubicBezierEdgeBase); - _get(Object.getPrototypeOf(CubicBezierEdgeBase.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(CubicBezierEdgeBase).call(this, options, body, labelModule)); } /** @@ -32621,16 +33011,17 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(CubicBezierEdgeBase, [{ key: '_getDistanceToBezierEdge', value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) { // x3,y3 is the point var minDistance = 1e9; - var distance = undefined; - var i = undefined, - t = undefined, - x = undefined, - y = undefined; + var distance = void 0; + var i = void 0, + t = void 0, + x = void 0, + y = void 0; var lastX = x1; var lastY = y1; var vec = [0, 0, 0, 0]; @@ -32655,42 +33046,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CubicBezierEdgeBase; - })(_BezierEdgeBase3['default']); + }(_BezierEdgeBase3.default); - exports['default'] = CubicBezierEdgeBase; - module.exports = exports['default']; + exports.default = CubicBezierEdgeBase; /***/ }, -/* 84 */ +/* 85 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _EdgeBase2 = __webpack_require__(86); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _EdgeBase2 = __webpack_require__(85); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var BezierEdgeBase = (function (_EdgeBase) { + var BezierEdgeBase = function (_EdgeBase) { _inherits(BezierEdgeBase, _EdgeBase); function BezierEdgeBase(options, body, labelModule) { _classCallCheck(this, BezierEdgeBase); - _get(Object.getPrototypeOf(BezierEdgeBase.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(BezierEdgeBase).call(this, options, body, labelModule)); } /** @@ -32707,6 +33097,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param viaNode */ + _createClass(BezierEdgeBase, [{ key: '_findBorderPositionBezier', value: function _findBorderPositionBezier(nearNode, ctx) { @@ -32769,16 +33160,17 @@ return /******/ (function(modules) { // webpackBootstrap * @param {number} y3 point to check y * @private */ + }, { key: '_getDistanceToBezierEdge', value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) { // x3,y3 is the point var minDistance = 1e9; - var distance = undefined; - var i = undefined, - t = undefined, - x = undefined, - y = undefined; + var distance = void 0; + var i = void 0, + t = void 0, + x = void 0, + y = void 0; var lastX = x1; var lastY = y1; for (i = 1; i < 10; i++) { @@ -32798,30 +33190,29 @@ return /******/ (function(modules) { // webpackBootstrap }]); return BezierEdgeBase; - })(_EdgeBase3['default']); + }(_EdgeBase3.default); - exports['default'] = BezierEdgeBase; - module.exports = exports['default']; + exports.default = BezierEdgeBase; /***/ }, -/* 85 */ +/* 86 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var EdgeBase = (function () { + var EdgeBase = function () { function EdgeBase(options, body, labelModule) { _classCallCheck(this, EdgeBase); @@ -32864,6 +33255,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {CanvasRenderingContext2D} ctx * @private */ + }, { key: 'drawLine', value: function drawLine(ctx, selected, hover, viaNode) { @@ -32886,11 +33278,11 @@ return /******/ (function(modules) { // webpackBootstrap } else { var _getCircleData2 = this._getCircleData(ctx); - var _getCircleData22 = _slicedToArray(_getCircleData2, 3); + var _getCircleData3 = _slicedToArray(_getCircleData2, 3); - var x = _getCircleData22[0]; - var y = _getCircleData22[1]; - var radius = _getCircleData22[2]; + var x = _getCircleData3[0]; + var y = _getCircleData3[1]; + var radius = _getCircleData3[2]; this._circle(ctx, x, y, radius); } @@ -32917,13 +33309,13 @@ return /******/ (function(modules) { // webpackBootstrap // draw line this._line(ctx, viaNode); } else { - var _getCircleData3 = this._getCircleData(ctx); + var _getCircleData4 = this._getCircleData(ctx); - var _getCircleData32 = _slicedToArray(_getCircleData3, 3); + var _getCircleData5 = _slicedToArray(_getCircleData4, 3); - var x = _getCircleData32[0]; - var y = _getCircleData32[1]; - var radius = _getCircleData32[2]; + var x = _getCircleData5[0]; + var y = _getCircleData5[1]; + var radius = _getCircleData5[2]; this._circle(ctx, x, y, radius); } @@ -32938,15 +33330,15 @@ return /******/ (function(modules) { // webpackBootstrap // draw line ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern); } else { - var _getCircleData4 = this._getCircleData(ctx); + var _getCircleData6 = this._getCircleData(ctx); - var _getCircleData42 = _slicedToArray(_getCircleData4, 3); + var _getCircleData7 = _slicedToArray(_getCircleData6, 3); - var x = _getCircleData42[0]; - var y = _getCircleData42[1]; - var radius = _getCircleData42[2]; + var _x = _getCircleData7[0]; + var _y = _getCircleData7[1]; + var _radius = _getCircleData7[2]; - this._circle(ctx, x, y, radius); + this._circle(ctx, _x, _y, _radius); } // draw shadow if enabled this.enableShadow(ctx); @@ -32975,13 +33367,14 @@ return /******/ (function(modules) { // webpackBootstrap from = this._findBorderPosition(this.from, ctx); to = this._findBorderPosition(this.to, ctx); } else { - var _getCircleData5 = this._getCircleData(ctx); + var _getCircleData8 = this._getCircleData(ctx); + + var _getCircleData9 = _slicedToArray(_getCircleData8, 3); - var _getCircleData52 = _slicedToArray(_getCircleData5, 3); + var x = _getCircleData9[0]; + var y = _getCircleData9[1]; + var radius = _getCircleData9[2]; - var x = _getCircleData52[0]; - var y = _getCircleData52[1]; - var radius = _getCircleData52[2]; from = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); to = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.6, high: 0.8, direction: 1 }); @@ -32991,8 +33384,8 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_getCircleData', value: function _getCircleData(ctx) { - var x = undefined, - y = undefined; + var x = void 0, + y = void 0; var node = this.from; var radius = this.options.selfReferenceSize; @@ -33022,6 +33415,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Object} point * @private */ + }, { key: '_pointOnCircle', value: function _pointOnCircle(x, y, radius, percentage) { @@ -33040,6 +33434,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} * @private */ + }, { key: '_findBorderPositionCircle', value: function _findBorderPositionCircle(node, ctx, options) { @@ -33052,11 +33447,11 @@ return /******/ (function(modules) { // webpackBootstrap var maxIterations = 10; var iteration = 0; var radius = this.options.selfReferenceSize; - var pos = undefined, - angle = undefined, - distanceToBorder = undefined, - distanceToPoint = undefined, - difference = undefined; + var pos = void 0, + angle = void 0, + distanceToBorder = void 0, + distanceToPoint = void 0, + difference = void 0; var threshold = 0.05; var middle = (low + high) * 0.5; @@ -33097,6 +33492,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Number} width * @private */ + }, { key: 'getLineWidth', value: function getLineWidth(selected, hover) { @@ -33118,8 +33514,8 @@ return /******/ (function(modules) { // webpackBootstrap // when this is a loop edge, just use the 'from' method if (colorOptions.inherit === 'both' && this.from.id !== this.to.id) { var grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y); - var fromColor = undefined, - toColor = undefined; + var fromColor = void 0, + toColor = void 0; fromColor = this.from.options.color.highlight.border; toColor = this.to.options.color.highlight.border; @@ -33176,6 +33572,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number} radius * @private */ + }, { key: '_circle', value: function _circle(ctx, x, y, radius) { @@ -33203,6 +33600,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {number} y3 * @private */ + }, { key: 'getDistanceToEdge', value: function getDistanceToEdge(x1, y1, x2, y2, x3, y3, via) { @@ -33211,13 +33609,13 @@ return /******/ (function(modules) { // webpackBootstrap if (this.from != this.to) { returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via); } else { - var _getCircleData6 = this._getCircleData(); + var _getCircleData10 = this._getCircleData(); - var _getCircleData62 = _slicedToArray(_getCircleData6, 3); + var _getCircleData11 = _slicedToArray(_getCircleData10, 3); - var x = _getCircleData62[0]; - var y = _getCircleData62[1]; - var radius = _getCircleData62[2]; + var x = _getCircleData11[0]; + var y = _getCircleData11[1]; + var radius = _getCircleData11[2]; var dx = x - x3; var dy = y - y3; @@ -33264,16 +33662,17 @@ return /******/ (function(modules) { // webpackBootstrap * @param position * @param viaNode */ + }, { key: 'getArrowData', value: function getArrowData(ctx, position, viaNode, selected, hover) { // set lets - var angle = undefined; - var arrowPoint = undefined; - var node1 = undefined; - var node2 = undefined; - var guideOffset = undefined; - var scaleFactor = undefined; + var angle = void 0; + var arrowPoint = void 0; + var node1 = void 0; + var node2 = void 0; + var guideOffset = void 0; + var scaleFactor = void 0; var lineWidth = this.getLineWidth(selected, hover); if (position === 'from') { @@ -33309,13 +33708,16 @@ return /******/ (function(modules) { // webpackBootstrap arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow. } } else { - var _getCircleData7 = this._getCircleData(ctx); + // draw circle - var _getCircleData72 = _slicedToArray(_getCircleData7, 3); + var _getCircleData12 = this._getCircleData(ctx); + + var _getCircleData13 = _slicedToArray(_getCircleData12, 3); + + var x = _getCircleData13[0]; + var y = _getCircleData13[1]; + var radius = _getCircleData13[2]; - var x = _getCircleData72[0]; - var y = _getCircleData72[1]; - var radius = _getCircleData72[2]; if (position === 'from') { arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); @@ -33345,6 +33747,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param hover * @param arrowData */ + }, { key: 'drawArrowHead', value: function drawArrowHead(ctx, selected, hover, arrowData) { @@ -33385,15 +33788,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return EdgeBase; - })(); - - exports['default'] = EdgeBase; - module.exports = exports['default']; + }(); - // draw circle + exports.default = EdgeBase; /***/ }, -/* 86 */ +/* 87 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -33402,34 +33802,37 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _BezierEdgeBase2 = __webpack_require__(85); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilBezierEdgeBase = __webpack_require__(84); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var BezierEdgeDynamic = (function (_BezierEdgeBase) { + var BezierEdgeDynamic = function (_BezierEdgeBase) { _inherits(BezierEdgeDynamic, _BezierEdgeBase); function BezierEdgeDynamic(options, body, labelModule) { - var _this = this; - _classCallCheck(this, BezierEdgeDynamic); + // --> this calls the setOptions below + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(BezierEdgeDynamic).call(this, options, body, labelModule)); //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked. - _get(Object.getPrototypeOf(BezierEdgeDynamic.prototype), "constructor", this).call(this, options, body, labelModule); // --> this calls the setOptions below - this._boundFunction = function () { + + + _this._boundFunction = function () { _this.positionBezierNode(); }; - this.body.emitter.on("_repositionBezierNodes", this._boundFunction); + _this.body.emitter.on("_repositionBezierNodes", _this._boundFunction); + return _this; } _createClass(BezierEdgeDynamic, [{ @@ -33478,6 +33881,7 @@ return /******/ (function(modules) { // webpackBootstrap * remove the support nodes * @returns {boolean} */ + }, { key: "cleanup", value: function cleanup() { @@ -33497,6 +33901,7 @@ return /******/ (function(modules) { // webpackBootstrap * The changed data is not called, if needed, it is returned by the main edge constructor. * @private */ + }, { key: "setupSupportNode", value: function setupSupportNode() { @@ -33531,6 +33936,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {CanvasRenderingContext2D} ctx * @private */ + }, { key: "_line", value: function _line(ctx, viaNode) { @@ -33561,6 +33967,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @private */ + }, { key: "getPoint", value: function getPoint(percentage) { @@ -33586,42 +33993,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return BezierEdgeDynamic; - })(_utilBezierEdgeBase2["default"]); + }(_BezierEdgeBase3.default); - exports["default"] = BezierEdgeDynamic; - module.exports = exports["default"]; + exports.default = BezierEdgeDynamic; /***/ }, -/* 87 */ +/* 88 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _BezierEdgeBase2 = __webpack_require__(85); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilBezierEdgeBase = __webpack_require__(84); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var BezierEdgeStatic = (function (_BezierEdgeBase) { + var BezierEdgeStatic = function (_BezierEdgeBase) { _inherits(BezierEdgeStatic, _BezierEdgeBase); function BezierEdgeStatic(options, body, labelModule) { _classCallCheck(this, BezierEdgeStatic); - _get(Object.getPrototypeOf(BezierEdgeStatic.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(BezierEdgeStatic).call(this, options, body, labelModule)); } /** @@ -33630,6 +34036,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(BezierEdgeStatic, [{ key: '_line', value: function _line(ctx, viaNode) { @@ -33659,6 +34066,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: undefined, y: undefined}} * @private */ + }, { key: '_getViaCoordinates', value: function _getViaCoordinates() { @@ -33758,14 +34166,14 @@ return /******/ (function(modules) { // webpackBootstrap } else if (type === 'curvedCCW') { dx = this.to.x - this.from.x; dy = this.from.y - this.to.y; - var radius = Math.sqrt(dx * dx + dy * dy); - var pi = Math.PI; + var _radius = Math.sqrt(dx * dx + dy * dy); + var _pi = Math.PI; - var originalAngle = Math.atan2(dy, dx); - var myAngle = (originalAngle + (-factor * 0.5 + 0.5) * pi) % (2 * pi); + var _originalAngle = Math.atan2(dy, dx); + var _myAngle = (_originalAngle + (-factor * 0.5 + 0.5) * _pi) % (2 * _pi); - xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle); - yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle); + xVia = this.from.x + (factor * 0.5 + 0.5) * _radius * Math.sin(_myAngle); + yVia = this.from.y + (factor * 0.5 + 0.5) * _radius * Math.cos(_myAngle); } else { // continuous if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { @@ -33838,6 +34246,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @private */ + }, { key: 'getPoint', value: function getPoint(percentage) { @@ -33852,42 +34261,41 @@ return /******/ (function(modules) { // webpackBootstrap }]); return BezierEdgeStatic; - })(_utilBezierEdgeBase2['default']); + }(_BezierEdgeBase3.default); - exports['default'] = BezierEdgeStatic; - module.exports = exports['default']; + exports.default = BezierEdgeStatic; /***/ }, -/* 88 */ +/* 89 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _EdgeBase2 = __webpack_require__(86); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _utilEdgeBase = __webpack_require__(85); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _utilEdgeBase2 = _interopRequireDefault(_utilEdgeBase); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var StraightEdge = (function (_EdgeBase) { + var StraightEdge = function (_EdgeBase) { _inherits(StraightEdge, _EdgeBase); function StraightEdge(options, body, labelModule) { _classCallCheck(this, StraightEdge); - _get(Object.getPrototypeOf(StraightEdge.prototype), 'constructor', this).call(this, options, body, labelModule); + return _possibleConstructorReturn(this, Object.getPrototypeOf(StraightEdge).call(this, options, body, labelModule)); } /** @@ -33896,6 +34304,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(StraightEdge, [{ key: '_line', value: function _line(ctx) { @@ -33921,6 +34330,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @private */ + }, { key: 'getPoint', value: function getPoint(percentage) { @@ -33961,62 +34371,61 @@ return /******/ (function(modules) { // webpackBootstrap }]); return StraightEdge; - })(_utilEdgeBase2['default']); + }(_EdgeBase3.default); - exports['default'] = StraightEdge; - module.exports = exports['default']; + exports.default = StraightEdge; /***/ }, -/* 89 */ +/* 90 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _BarnesHutSolver = __webpack_require__(91); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _BarnesHutSolver2 = _interopRequireDefault(_BarnesHutSolver); - var _componentsPhysicsBarnesHutSolver = __webpack_require__(90); + var _RepulsionSolver = __webpack_require__(92); - var _componentsPhysicsBarnesHutSolver2 = _interopRequireDefault(_componentsPhysicsBarnesHutSolver); + var _RepulsionSolver2 = _interopRequireDefault(_RepulsionSolver); - var _componentsPhysicsRepulsionSolver = __webpack_require__(91); + var _HierarchicalRepulsionSolver = __webpack_require__(93); - var _componentsPhysicsRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsRepulsionSolver); + var _HierarchicalRepulsionSolver2 = _interopRequireDefault(_HierarchicalRepulsionSolver); - var _componentsPhysicsHierarchicalRepulsionSolver = __webpack_require__(92); + var _SpringSolver = __webpack_require__(94); - var _componentsPhysicsHierarchicalRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsHierarchicalRepulsionSolver); + var _SpringSolver2 = _interopRequireDefault(_SpringSolver); - var _componentsPhysicsSpringSolver = __webpack_require__(93); + var _HierarchicalSpringSolver = __webpack_require__(95); - var _componentsPhysicsSpringSolver2 = _interopRequireDefault(_componentsPhysicsSpringSolver); + var _HierarchicalSpringSolver2 = _interopRequireDefault(_HierarchicalSpringSolver); - var _componentsPhysicsHierarchicalSpringSolver = __webpack_require__(94); + var _CentralGravitySolver = __webpack_require__(96); - var _componentsPhysicsHierarchicalSpringSolver2 = _interopRequireDefault(_componentsPhysicsHierarchicalSpringSolver); + var _CentralGravitySolver2 = _interopRequireDefault(_CentralGravitySolver); - var _componentsPhysicsCentralGravitySolver = __webpack_require__(95); + var _FA2BasedRepulsionSolver = __webpack_require__(97); - var _componentsPhysicsCentralGravitySolver2 = _interopRequireDefault(_componentsPhysicsCentralGravitySolver); + var _FA2BasedRepulsionSolver2 = _interopRequireDefault(_FA2BasedRepulsionSolver); - var _componentsPhysicsFA2BasedRepulsionSolver = __webpack_require__(96); + var _FA2BasedCentralGravitySolver = __webpack_require__(98); - var _componentsPhysicsFA2BasedRepulsionSolver2 = _interopRequireDefault(_componentsPhysicsFA2BasedRepulsionSolver); + var _FA2BasedCentralGravitySolver2 = _interopRequireDefault(_FA2BasedCentralGravitySolver); - var _componentsPhysicsFA2BasedCentralGravitySolver = __webpack_require__(97); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _componentsPhysicsFA2BasedCentralGravitySolver2 = _interopRequireDefault(_componentsPhysicsFA2BasedCentralGravitySolver); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var PhysicsEngine = (function () { + var PhysicsEngine = function () { function PhysicsEngine(body) { _classCallCheck(this, PhysicsEngine); @@ -34148,6 +34557,7 @@ return /******/ (function(modules) { // webpackBootstrap * set the physics options * @param options */ + }, { key: 'setOptions', value: function setOptions(options) { @@ -34180,31 +34590,32 @@ return /******/ (function(modules) { // webpackBootstrap /** * configure the engine. */ + }, { key: 'init', value: function init() { var options; if (this.options.solver === 'forceAtlas2Based') { options = this.options.forceAtlas2Based; - this.nodesSolver = new _componentsPhysicsFA2BasedRepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _componentsPhysicsSpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _componentsPhysicsFA2BasedCentralGravitySolver2['default'](this.body, this.physicsBody, options); + this.nodesSolver = new _FA2BasedRepulsionSolver2.default(this.body, this.physicsBody, options); + this.edgesSolver = new _SpringSolver2.default(this.body, this.physicsBody, options); + this.gravitySolver = new _FA2BasedCentralGravitySolver2.default(this.body, this.physicsBody, options); } else if (this.options.solver === 'repulsion') { options = this.options.repulsion; - this.nodesSolver = new _componentsPhysicsRepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _componentsPhysicsSpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _componentsPhysicsCentralGravitySolver2['default'](this.body, this.physicsBody, options); + this.nodesSolver = new _RepulsionSolver2.default(this.body, this.physicsBody, options); + this.edgesSolver = new _SpringSolver2.default(this.body, this.physicsBody, options); + this.gravitySolver = new _CentralGravitySolver2.default(this.body, this.physicsBody, options); } else if (this.options.solver === 'hierarchicalRepulsion') { options = this.options.hierarchicalRepulsion; - this.nodesSolver = new _componentsPhysicsHierarchicalRepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _componentsPhysicsHierarchicalSpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _componentsPhysicsCentralGravitySolver2['default'](this.body, this.physicsBody, options); + this.nodesSolver = new _HierarchicalRepulsionSolver2.default(this.body, this.physicsBody, options); + this.edgesSolver = new _HierarchicalSpringSolver2.default(this.body, this.physicsBody, options); + this.gravitySolver = new _CentralGravitySolver2.default(this.body, this.physicsBody, options); } else { // barnesHut options = this.options.barnesHut; - this.nodesSolver = new _componentsPhysicsBarnesHutSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _componentsPhysicsSpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _componentsPhysicsCentralGravitySolver2['default'](this.body, this.physicsBody, options); + this.nodesSolver = new _BarnesHutSolver2.default(this.body, this.physicsBody, options); + this.edgesSolver = new _SpringSolver2.default(this.body, this.physicsBody, options); + this.gravitySolver = new _CentralGravitySolver2.default(this.body, this.physicsBody, options); } this.modelOptions = options; @@ -34213,6 +34624,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * initialize the engine */ + }, { key: 'initPhysics', value: function initPhysics() { @@ -34234,6 +34646,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Start the simulation */ + }, { key: 'startSimulation', value: function startSimulation() { @@ -34258,6 +34671,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Stop the simulation, force stabilization. */ + }, { key: 'stopSimulation', value: function stopSimulation() { @@ -34280,6 +34694,7 @@ return /******/ (function(modules) { // webpackBootstrap * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized. * */ + }, { key: 'simulationStep', value: function simulationStep() { @@ -34305,6 +34720,7 @@ return /******/ (function(modules) { // webpackBootstrap * trigger the stabilized event. * @private */ + }, { key: '_emitStabilized', value: function _emitStabilized() { @@ -34326,6 +34742,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'physicsTick', value: function physicsTick() { @@ -34404,6 +34821,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'updatePhysicsData', value: function updatePhysicsData() { @@ -34433,19 +34851,19 @@ return /******/ (function(modules) { // webpackBootstrap // get the velocity and the forces vector for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) { - var nodeId = this.physicsBody.physicsNodeIndices[i]; - this.physicsBody.forces[nodeId] = { x: 0, y: 0 }; + var _nodeId = this.physicsBody.physicsNodeIndices[i]; + this.physicsBody.forces[_nodeId] = { x: 0, y: 0 }; // forces can be reset because they are recalculated. Velocities have to persist. - if (this.physicsBody.velocities[nodeId] === undefined) { - this.physicsBody.velocities[nodeId] = { x: 0, y: 0 }; + if (this.physicsBody.velocities[_nodeId] === undefined) { + this.physicsBody.velocities[_nodeId] = { x: 0, y: 0 }; } } // clean deleted nodes from the velocity vector - for (var nodeId in this.physicsBody.velocities) { - if (nodes[nodeId] === undefined) { - delete this.physicsBody.velocities[nodeId]; + for (var _nodeId2 in this.physicsBody.velocities) { + if (nodes[_nodeId2] === undefined) { + delete this.physicsBody.velocities[_nodeId2]; } } } @@ -34453,6 +34871,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized. */ + }, { key: 'revert', value: function revert() { @@ -34482,12 +34901,13 @@ return /******/ (function(modules) { // webpackBootstrap /** * This compares the reference state to the current state */ + }, { key: '_evaluateStepQuality', value: function _evaluateStepQuality() { - var dx = undefined, - dy = undefined, - dpos = undefined; + var dx = void 0, + dy = void 0, + dpos = void 0; var nodes = this.body.nodes; var reference = this.referenceState; var posThreshold = 0.3; @@ -34511,6 +34931,7 @@ return /******/ (function(modules) { // webpackBootstrap * move the nodes one timestep and check if they are stabilized * @returns {boolean} */ + }, { key: 'moveNodes', value: function moveNodes() { @@ -34543,6 +34964,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_performStep', value: function _performStep(nodeId, maxVelocity) { @@ -34583,6 +35005,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * calculate the forces for one physics iteration. */ + }, { key: 'calculateForces', value: function calculateForces() { @@ -34597,6 +35020,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_freezeNodes', value: function _freezeNodes() { @@ -34617,6 +35041,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_restoreFrozenNodes', value: function _restoreFrozenNodes() { @@ -34635,6 +35060,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Find a stable position for all nodes */ + }, { key: 'stabilize', value: function stabilize() { @@ -34683,6 +35109,7 @@ return /******/ (function(modules) { // webpackBootstrap * One batch of stabilization * @private */ + }, { key: '_stabilizationBatch', value: function _stabilizationBatch() { @@ -34710,6 +35137,7 @@ return /******/ (function(modules) { // webpackBootstrap * Wrap up the stabilization, fit and emit the events. * @private */ + }, { key: '_finalizeStabilization', value: function _finalizeStabilization() { @@ -34764,13 +35192,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return PhysicsEngine; - })(); + }(); - exports['default'] = PhysicsEngine; - module.exports = exports['default']; + exports.default = PhysicsEngine; /***/ }, -/* 90 */ +/* 91 */ /***/ function(module, exports) { "use strict"; @@ -34779,11 +35206,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var BarnesHutSolver = (function () { + var BarnesHutSolver = function () { function BarnesHutSolver(body, physicsBody, options) { _classCallCheck(this, BarnesHutSolver); @@ -34817,11 +35244,12 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: "solve", value: function solve() { if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) { - var node = undefined; + var node = void 0; var nodes = this.body.nodes; var nodeIndices = this.physicsBody.physicsNodeIndices; var nodeCount = nodeIndices.length; @@ -34854,14 +35282,15 @@ return /******/ (function(modules) { // webpackBootstrap * @param node * @private */ + }, { key: "_getForceContribution", value: function _getForceContribution(parentBranch, node) { // we get no force contribution from an empty region if (parentBranch.childrenCount > 0) { - var dx = undefined, - dy = undefined, - distance = undefined; + var dx = void 0, + dy = void 0, + distance = void 0; // get the distance from the center of mass to the node. dx = parentBranch.centerOfMass.x - node.x; @@ -34901,6 +35330,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param parentBranch * @private */ + }, { key: "_calculateForces", value: function _calculateForces(distance, dx, dy, node, parentBranch) { @@ -34930,10 +35360,11 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeIndices * @private */ + }, { key: "_formBarnesHutTree", value: function _formBarnesHutTree(nodes, nodeIndices) { - var node = undefined; + var node = void 0; var nodeCount = nodeIndices.length; var minX = nodes[nodeIndices[0]].x; @@ -34997,8 +35428,8 @@ return /******/ (function(modules) { // webpackBootstrap this._splitBranch(barnesHutTree.root); // place the nodes one by one recursively - for (var i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; + for (var _i = 0; _i < nodeCount; _i++) { + node = nodes[nodeIndices[_i]]; if (node.options.mass > 0) { this._placeInTree(barnesHutTree.root, node); } @@ -35015,6 +35446,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param node * @private */ + }, { key: "_updateBranchMass", value: function _updateBranchMass(parentBranch, node) { @@ -35040,6 +35472,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param skipMassUpdate * @private */ + }, { key: "_placeInTree", value: function _placeInTree(parentBranch, node, skipMassUpdate) { @@ -35077,6 +35510,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param region * @private */ + }, { key: "_placeInRegion", value: function _placeInRegion(parentBranch, node, region) { @@ -35113,6 +35547,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param parentBranch * @private */ + }, { key: "_splitBranch", value: function _splitBranch(parentBranch) { @@ -35146,13 +35581,14 @@ return /******/ (function(modules) { // webpackBootstrap * @param parentRange * @private */ + }, { key: "_insertRegion", value: function _insertRegion(parentBranch, region) { - var minX = undefined, - maxX = undefined, - minY = undefined, - maxY = undefined; + var minX = void 0, + maxX = void 0, + minY = void 0, + maxY = void 0; var childSize = 0.5 * parentBranch.size; switch (region) { case "NW": @@ -35203,6 +35639,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param color * @private */ + }, { key: "_debug", value: function _debug(ctx, color) { @@ -35222,6 +35659,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param color * @private */ + }, { key: "_drawBranch", value: function _drawBranch(branch, ctx, color) { @@ -35266,13 +35704,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return BarnesHutSolver; - })(); + }(); - exports["default"] = BarnesHutSolver; - module.exports = exports["default"]; + exports.default = BarnesHutSolver; /***/ }, -/* 91 */ +/* 92 */ /***/ function(module, exports) { "use strict"; @@ -35281,11 +35718,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var RepulsionSolver = (function () { + var RepulsionSolver = function () { function RepulsionSolver(body, physicsBody, options) { _classCallCheck(this, RepulsionSolver); @@ -35299,13 +35736,13 @@ return /******/ (function(modules) { // webpackBootstrap value: function setOptions(options) { this.options = options; } - /** * Calculate the forces the nodes apply on each other based on a repulsion field. * This field is linearly approximated. * * @private */ + }, { key: "solve", value: function solve() { @@ -35361,13 +35798,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return RepulsionSolver; - })(); + }(); - exports["default"] = RepulsionSolver; - module.exports = exports["default"]; + exports.default = RepulsionSolver; /***/ }, -/* 92 */ +/* 93 */ /***/ function(module, exports) { "use strict"; @@ -35376,11 +35812,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var HierarchicalRepulsionSolver = (function () { + var HierarchicalRepulsionSolver = function () { function HierarchicalRepulsionSolver(body, physicsBody, options) { _classCallCheck(this, HierarchicalRepulsionSolver); @@ -35401,6 +35837,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: "solve", value: function solve() { @@ -35452,13 +35889,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return HierarchicalRepulsionSolver; - })(); + }(); - exports["default"] = HierarchicalRepulsionSolver; - module.exports = exports["default"]; + exports.default = HierarchicalRepulsionSolver; /***/ }, -/* 93 */ +/* 94 */ /***/ function(module, exports) { "use strict"; @@ -35467,11 +35903,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var SpringSolver = (function () { + var SpringSolver = function () { function SpringSolver(body, physicsBody, options) { _classCallCheck(this, SpringSolver); @@ -35491,16 +35927,17 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: "solve", value: function solve() { - var edgeLength = undefined, - edge = undefined; + var edgeLength = void 0, + edge = void 0; var edgeIndices = this.physicsBody.physicsEdgeIndices; var edges = this.body.edges; - var node1 = undefined, - node2 = undefined, - node3 = undefined; + var node1 = void 0, + node2 = void 0, + node3 = void 0; // forces caused by the edges, modelled as springs for (var i = 0; i < edgeIndices.length; i++) { @@ -35535,6 +35972,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param edgeLength * @private */ + }, { key: "_calculateSpringForce", value: function _calculateSpringForce(node1, node2, edgeLength) { @@ -35562,13 +36000,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return SpringSolver; - })(); + }(); - exports["default"] = SpringSolver; - module.exports = exports["default"]; + exports.default = SpringSolver; /***/ }, -/* 94 */ +/* 95 */ /***/ function(module, exports) { "use strict"; @@ -35577,11 +36014,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var HierarchicalSpringSolver = (function () { + var HierarchicalSpringSolver = function () { function HierarchicalSpringSolver(body, physicsBody, options) { _classCallCheck(this, HierarchicalSpringSolver); @@ -35601,6 +36038,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: "solve", value: function solve() { @@ -35621,8 +36059,8 @@ return /******/ (function(modules) { // webpackBootstrap } // forces caused by the edges, modelled as springs - for (var i = 0; i < edgeIndices.length; i++) { - edge = edges[edgeIndices[i]]; + for (var _i = 0; _i < edgeIndices.length; _i++) { + edge = edges[edgeIndices[_i]]; if (edge.connected === true) { edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length; @@ -35662,42 +36100,41 @@ return /******/ (function(modules) { // webpackBootstrap // normalize spring forces var springForce = 1; var springFx, springFy; - for (var i = 0; i < nodeIndices.length; i++) { - var nodeId = nodeIndices[i]; - springFx = Math.min(springForce, Math.max(-springForce, forces[nodeId].springFx)); - springFy = Math.min(springForce, Math.max(-springForce, forces[nodeId].springFy)); + for (var _i2 = 0; _i2 < nodeIndices.length; _i2++) { + var _nodeId = nodeIndices[_i2]; + springFx = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFx)); + springFy = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFy)); - forces[nodeId].x += springFx; - forces[nodeId].y += springFy; + forces[_nodeId].x += springFx; + forces[_nodeId].y += springFy; } // retain energy balance var totalFx = 0; var totalFy = 0; - for (var i = 0; i < nodeIndices.length; i++) { - var nodeId = nodeIndices[i]; - totalFx += forces[nodeId].x; - totalFy += forces[nodeId].y; + for (var _i3 = 0; _i3 < nodeIndices.length; _i3++) { + var _nodeId2 = nodeIndices[_i3]; + totalFx += forces[_nodeId2].x; + totalFy += forces[_nodeId2].y; } var correctionFx = totalFx / nodeIndices.length; var correctionFy = totalFy / nodeIndices.length; - for (var i = 0; i < nodeIndices.length; i++) { - var nodeId = nodeIndices[i]; - forces[nodeId].x -= correctionFx; - forces[nodeId].y -= correctionFy; + for (var _i4 = 0; _i4 < nodeIndices.length; _i4++) { + var _nodeId3 = nodeIndices[_i4]; + forces[_nodeId3].x -= correctionFx; + forces[_nodeId3].y -= correctionFy; } } }]); return HierarchicalSpringSolver; - })(); + }(); - exports["default"] = HierarchicalSpringSolver; - module.exports = exports["default"]; + exports.default = HierarchicalSpringSolver; /***/ }, -/* 95 */ +/* 96 */ /***/ function(module, exports) { "use strict"; @@ -35706,11 +36143,11 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var CentralGravitySolver = (function () { + var CentralGravitySolver = function () { function CentralGravitySolver(body, physicsBody, options) { _classCallCheck(this, CentralGravitySolver); @@ -35727,10 +36164,10 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: "solve", value: function solve() { - var dx = undefined, - dy = undefined, - distance = undefined, - node = undefined; + var dx = void 0, + dy = void 0, + distance = void 0, + node = void 0; var nodes = this.body.nodes; var nodeIndices = this.physicsBody.physicsNodeIndices; var forces = this.physicsBody.forces; @@ -35750,6 +36187,7 @@ return /******/ (function(modules) { // webpackBootstrap * Calculate the forces based on the distance. * @private */ + }, { key: "_calculateForces", value: function _calculateForces(distance, dx, dy, forces, node) { @@ -35760,13 +36198,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CentralGravitySolver; - })(); + }(); - exports["default"] = CentralGravitySolver; - module.exports = exports["default"]; + exports.default = CentralGravitySolver; /***/ }, -/* 96 */ +/* 97 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -35775,27 +36212,27 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + var _BarnesHutSolver2 = __webpack_require__(91); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - - var _BarnesHutSolver2 = __webpack_require__(90); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var ForceAtlas2BasedRepulsionSolver = (function (_BarnesHutSolver) { + var ForceAtlas2BasedRepulsionSolver = function (_BarnesHutSolver) { _inherits(ForceAtlas2BasedRepulsionSolver, _BarnesHutSolver); function ForceAtlas2BasedRepulsionSolver(body, physicsBody, options) { _classCallCheck(this, ForceAtlas2BasedRepulsionSolver); - _get(Object.getPrototypeOf(ForceAtlas2BasedRepulsionSolver.prototype), "constructor", this).call(this, body, physicsBody, options); + return _possibleConstructorReturn(this, Object.getPrototypeOf(ForceAtlas2BasedRepulsionSolver).call(this, body, physicsBody, options)); } /** @@ -35809,6 +36246,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(ForceAtlas2BasedRepulsionSolver, [{ key: "_calculateForces", value: function _calculateForces(distance, dx, dy, node, parentBranch) { @@ -35834,13 +36272,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return ForceAtlas2BasedRepulsionSolver; - })(_BarnesHutSolver3["default"]); + }(_BarnesHutSolver3.default); - exports["default"] = ForceAtlas2BasedRepulsionSolver; - module.exports = exports["default"]; + exports.default = ForceAtlas2BasedRepulsionSolver; /***/ }, -/* 97 */ +/* 98 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -35849,27 +36286,27 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _CentralGravitySolver2 = __webpack_require__(96); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _CentralGravitySolver2 = __webpack_require__(95); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var ForceAtlas2BasedCentralGravitySolver = (function (_CentralGravitySolver) { + var ForceAtlas2BasedCentralGravitySolver = function (_CentralGravitySolver) { _inherits(ForceAtlas2BasedCentralGravitySolver, _CentralGravitySolver); function ForceAtlas2BasedCentralGravitySolver(body, physicsBody, options) { _classCallCheck(this, ForceAtlas2BasedCentralGravitySolver); - _get(Object.getPrototypeOf(ForceAtlas2BasedCentralGravitySolver.prototype), "constructor", this).call(this, body, physicsBody, options); + return _possibleConstructorReturn(this, Object.getPrototypeOf(ForceAtlas2BasedCentralGravitySolver).call(this, body, physicsBody, options)); } /** @@ -35877,6 +36314,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(ForceAtlas2BasedCentralGravitySolver, [{ key: "_calculateForces", value: function _calculateForces(distance, dx, dy, forces, node) { @@ -35890,38 +36328,39 @@ return /******/ (function(modules) { // webpackBootstrap }]); return ForceAtlas2BasedCentralGravitySolver; - })(_CentralGravitySolver3["default"]); + }(_CentralGravitySolver3.default); - exports["default"] = ForceAtlas2BasedCentralGravitySolver; - module.exports = exports["default"]; + exports.default = ForceAtlas2BasedCentralGravitySolver; /***/ }, -/* 98 */ +/* 99 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - - var _NetworkUtil = __webpack_require__(99); + var _NetworkUtil = __webpack_require__(100); var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); - var _componentsNodesCluster = __webpack_require__(100); + var _Cluster = __webpack_require__(101); + + var _Cluster2 = _interopRequireDefault(_Cluster); - var _componentsNodesCluster2 = _interopRequireDefault(_componentsNodesCluster); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var ClusterEngine = (function () { + var ClusterEngine = function () { function ClusterEngine(body) { var _this = this; @@ -35951,12 +36390,13 @@ return /******/ (function(modules) { // webpackBootstrap * @param hubsize * @param options */ + }, { key: 'clusterByHubsize', value: function clusterByHubsize(hubsize, options) { if (hubsize === undefined) { hubsize = this._getHubSize(); - } else if (typeof hubsize === "object") { + } else if ((typeof hubsize === 'undefined' ? 'undefined' : _typeof(hubsize)) === "object") { options = this._checkOptions(hubsize); hubsize = this._getHubSize(); } @@ -35969,8 +36409,8 @@ return /******/ (function(modules) { // webpackBootstrap } } - for (var i = 0; i < nodesToCluster.length; i++) { - this.clusterByConnection(nodesToCluster[i], options, true); + for (var _i = 0; _i < nodesToCluster.length; _i++) { + this.clusterByConnection(nodesToCluster[_i], options, true); } this.body.emitter.emit('_dataChanged'); @@ -35981,6 +36421,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options * @param refreshData */ + }, { key: 'cluster', value: function cluster() { @@ -36001,13 +36442,13 @@ return /******/ (function(modules) { // webpackBootstrap for (var i = 0; i < this.body.nodeIndices.length; i++) { var nodeId = this.body.nodeIndices[i]; var node = this.body.nodes[nodeId]; - var clonedOptions = _NetworkUtil2['default'].cloneOptions(node); + var clonedOptions = _NetworkUtil2.default.cloneOptions(node); if (options.joinCondition(clonedOptions) === true) { childNodesObj[nodeId] = this.body.nodes[nodeId]; // collect the nodes that will be in the cluster - for (var _i = 0; _i < node.edges.length; _i++) { - var edge = node.edges[_i]; + for (var _i2 = 0; _i2 < node.edges.length; _i2++) { + var edge = node.edges[_i2]; if (this.clusteredEdges[edge.id] === undefined) { childEdgesObj[edge.id] = edge; } @@ -36024,6 +36465,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options * @param refreshData */ + }, { key: 'clusterByEdgeCount', value: function clusterByEdgeCount(edgeCount, options) { @@ -36032,11 +36474,11 @@ return /******/ (function(modules) { // webpackBootstrap options = this._checkOptions(options); var clusters = []; var usedNodes = {}; - var edge = undefined, - edges = undefined, - node = undefined, - nodeId = undefined, - relevantEdgeCount = undefined; + var edge = void 0, + edges = void 0, + node = void 0, + nodeId = void 0, + relevantEdgeCount = void 0; // collect the nodes that will be in the cluster for (var i = 0; i < this.body.nodeIndices.length; i++) { var childNodesObj = {}; @@ -36061,8 +36503,8 @@ return /******/ (function(modules) { // webpackBootstrap // this node qualifies, we collect its neighbours to start the clustering process. if (relevantEdgeCount === edgeCount) { var gatheringSuccessful = true; - for (var j = 0; j < edges.length; j++) { - edge = edges[j]; + for (var _j = 0; _j < edges.length; _j++) { + edge = edges[_j]; var childNodeId = this._getConnectedId(edge, nodeId); // add the nodes to the list by the join condition. if (options.joinCondition === undefined) { @@ -36071,7 +36513,7 @@ return /******/ (function(modules) { // webpackBootstrap childNodesObj[childNodeId] = this.body.nodes[childNodeId]; usedNodes[nodeId] = true; } else { - var clonedOptions = _NetworkUtil2['default'].cloneOptions(this.body.nodes[nodeId]); + var clonedOptions = _NetworkUtil2.default.cloneOptions(this.body.nodes[nodeId]); if (options.joinCondition(clonedOptions) === true) { childEdgesObj[edge.id] = edge; childNodesObj[nodeId] = this.body.nodes[nodeId]; @@ -36092,8 +36534,8 @@ return /******/ (function(modules) { // webpackBootstrap } } - for (var i = 0; i < clusters.length; i++) { - this._cluster(clusters[i].nodes, clusters[i].edges, options, false); + for (var _i3 = 0; _i3 < clusters.length; _i3++) { + this._cluster(clusters[_i3].nodes, clusters[_i3].edges, options, false); } if (refreshData === true) { @@ -36106,6 +36548,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options * @param refreshData */ + }, { key: 'clusterOutliers', value: function clusterOutliers(options) { @@ -36119,6 +36562,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options * @param refreshData */ + }, { key: 'clusterBridges', value: function clusterBridges(options) { @@ -36133,6 +36577,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options * @param refreshData */ + }, { key: 'clusterByConnection', value: function clusterByConnection(nodeId, options) { @@ -36163,7 +36608,7 @@ return /******/ (function(modules) { // webpackBootstrap var childNodesObj = {}; var childEdgesObj = {}; var parentNodeId = node.id; - var parentClonedOptions = _NetworkUtil2['default'].cloneOptions(node); + var parentClonedOptions = _NetworkUtil2.default.cloneOptions(node); childNodesObj[parentNodeId] = node; // collect the nodes that will be in the cluster @@ -36180,7 +36625,7 @@ return /******/ (function(modules) { // webpackBootstrap childNodesObj[childNodeId] = this.body.nodes[childNodeId]; } else { // clone the options and insert some additional parameters that could be interesting. - var childClonedOptions = _NetworkUtil2['default'].cloneOptions(this.body.nodes[childNodeId]); + var childClonedOptions = _NetworkUtil2.default.cloneOptions(this.body.nodes[childNodeId]); if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) { childEdgesObj[edge.id] = edge; childNodesObj[childNodeId] = this.body.nodes[childNodeId]; @@ -36207,15 +36652,16 @@ return /******/ (function(modules) { // webpackBootstrap * @param clusterEdgeProperties * @private */ + }, { key: '_createClusterEdges', value: function _createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) { - var edge = undefined, - childNodeId = undefined, - childNode = undefined, - toId = undefined, - fromId = undefined, - otherNodeId = undefined; + var edge = void 0, + childNodeId = void 0, + childNode = void 0, + toId = void 0, + fromId = void 0, + otherNodeId = void 0; // loop over all child nodes and their edges to find edges going out of the cluster // these edges will be replaced by clusterEdges. @@ -36257,16 +36703,16 @@ return /******/ (function(modules) { // webpackBootstrap // here we actually create the replacement edges. We could not do this in the loop above as the creation process // would add an edge to the edges array we are iterating over. - for (var j = 0; j < createEdges.length; j++) { - var _edge = createEdges[j].edge; + for (var _j2 = 0; _j2 < createEdges.length; _j2++) { + var _edge = createEdges[_j2].edge; // copy the options of the edge we will replace - var clonedOptions = _NetworkUtil2['default'].cloneOptions(_edge, 'edge'); + var clonedOptions = _NetworkUtil2.default.cloneOptions(_edge, 'edge'); // make sure the properties of clusterEdges are superimposed on it util.deepExtend(clonedOptions, clusterEdgeProperties); // set up the edge - clonedOptions.from = createEdges[j].fromId; - clonedOptions.to = createEdges[j].toId; + clonedOptions.from = createEdges[_j2].fromId; + clonedOptions.to = createEdges[_j2].toId; clonedOptions.id = 'clusterEdge:' + util.randomUUID(); //clonedOptions.id = '(cf: ' + createEdges[j].fromId + " to: " + createEdges[j].toId + ")" + Math.random(); @@ -36291,6 +36737,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} * @private */ + }, { key: '_checkOptions', value: function _checkOptions() { @@ -36314,6 +36761,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Boolean} refreshData | when true, do not wrap up * @private */ + }, { key: '_cluster', value: function _cluster(childNodesObj, childEdgesObj, options) { @@ -36339,9 +36787,9 @@ return /******/ (function(modules) { // webpackBootstrap if (options.processProperties !== undefined) { // get the childNode options var childNodesOptions = []; - for (var nodeId in childNodesObj) { - if (childNodesObj.hasOwnProperty(nodeId)) { - var clonedOptions = _NetworkUtil2['default'].cloneOptions(childNodesObj[nodeId]); + for (var _nodeId in childNodesObj) { + if (childNodesObj.hasOwnProperty(_nodeId)) { + var clonedOptions = _NetworkUtil2.default.cloneOptions(childNodesObj[_nodeId]); childNodesOptions.push(clonedOptions); } } @@ -36352,8 +36800,8 @@ return /******/ (function(modules) { // webpackBootstrap if (childEdgesObj.hasOwnProperty(edgeId)) { // these cluster edges will be removed on creation of the cluster. if (edgeId.substr(0, 12) !== "clusterEdge:") { - var clonedOptions = _NetworkUtil2['default'].cloneOptions(childEdgesObj[edgeId], 'edge'); - childEdgesOptions.push(clonedOptions); + var _clonedOptions = _NetworkUtil2.default.cloneOptions(childEdgesObj[edgeId], 'edge'); + childEdgesOptions.push(_clonedOptions); } } } @@ -36391,7 +36839,7 @@ return /******/ (function(modules) { // webpackBootstrap clusterNodeProperties.id = clusterId; // create the clusterNode - var clusterNode = this.body.functions.createNode(clusterNodeProperties, _componentsNodesCluster2['default']); + var clusterNode = this.body.functions.createNode(clusterNodeProperties, _Cluster2.default); clusterNode.isCluster = true; clusterNode.containedNodes = childNodesObj; clusterNode.containedEdges = childEdgesObj; @@ -36405,10 +36853,10 @@ return /******/ (function(modules) { // webpackBootstrap this._createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties); // disable the childEdges - for (var edgeId in childEdgesObj) { - if (childEdgesObj.hasOwnProperty(edgeId)) { - if (this.body.edges[edgeId] !== undefined) { - var edge = this.body.edges[edgeId]; + for (var _edgeId in childEdgesObj) { + if (childEdgesObj.hasOwnProperty(_edgeId)) { + if (this.body.edges[_edgeId] !== undefined) { + var edge = this.body.edges[_edgeId]; // cache the options before changing this._backupEdgeOptions(edge); // disable physics and hide the edge @@ -36418,10 +36866,10 @@ return /******/ (function(modules) { // webpackBootstrap } // disable the childNodes - for (var nodeId in childNodesObj) { - if (childNodesObj.hasOwnProperty(nodeId)) { - this.clusteredNodes[nodeId] = { clusterId: clusterNodeProperties.id, node: this.body.nodes[nodeId] }; - this.body.nodes[nodeId].setOptions({ hidden: true, physics: false }); + for (var _nodeId2 in childNodesObj) { + if (childNodesObj.hasOwnProperty(_nodeId2)) { + this.clusteredNodes[_nodeId2] = { clusterId: clusterNodeProperties.id, node: this.body.nodes[_nodeId2] }; + this.body.nodes[_nodeId2].setOptions({ hidden: true, physics: false }); } } @@ -36455,6 +36903,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeId * @returns {*} */ + }, { key: 'isCluster', value: function isCluster(nodeId) { @@ -36472,6 +36921,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @private */ + }, { key: '_getClusterPosition', value: function _getClusterPosition(childNodesObj) { @@ -36480,7 +36930,7 @@ return /******/ (function(modules) { // webpackBootstrap var maxX = childNodesObj[childKeys[0]].x; var minY = childNodesObj[childKeys[0]].y; var maxY = childNodesObj[childKeys[0]].y; - var node = undefined; + var node = void 0; for (var i = 1; i < childKeys.length; i++) { node = childNodesObj[childKeys[i]]; minX = node.x < minX ? node.x : minX; @@ -36497,6 +36947,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {String} clusterNodeId | the ID of the cluster node * @param {Boolean} refreshData | wrap up afterwards if not true */ + }, { key: 'openCluster', value: function openCluster(clusterNodeId, options) { @@ -36529,45 +36980,45 @@ return /******/ (function(modules) { // webpackBootstrap } var newPositions = options.releaseFunction(clusterPosition, positions); - for (var nodeId in containedNodes) { - if (containedNodes.hasOwnProperty(nodeId)) { - var containedNode = this.body.nodes[nodeId]; - if (newPositions[nodeId] !== undefined) { - containedNode.x = newPositions[nodeId].x === undefined ? clusterNode.x : newPositions[nodeId].x; - containedNode.y = newPositions[nodeId].y === undefined ? clusterNode.y : newPositions[nodeId].y; + for (var _nodeId3 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId3)) { + var _containedNode = this.body.nodes[_nodeId3]; + if (newPositions[_nodeId3] !== undefined) { + _containedNode.x = newPositions[_nodeId3].x === undefined ? clusterNode.x : newPositions[_nodeId3].x; + _containedNode.y = newPositions[_nodeId3].y === undefined ? clusterNode.y : newPositions[_nodeId3].y; } } } } else { // copy the position from the cluster - for (var nodeId in containedNodes) { - if (containedNodes.hasOwnProperty(nodeId)) { - var containedNode = this.body.nodes[nodeId]; - containedNode = containedNodes[nodeId]; + for (var _nodeId4 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId4)) { + var _containedNode2 = this.body.nodes[_nodeId4]; + _containedNode2 = containedNodes[_nodeId4]; // inherit position - if (containedNode.options.fixed.x === false) { - containedNode.x = clusterNode.x; + if (_containedNode2.options.fixed.x === false) { + _containedNode2.x = clusterNode.x; } - if (containedNode.options.fixed.y === false) { - containedNode.y = clusterNode.y; + if (_containedNode2.options.fixed.y === false) { + _containedNode2.y = clusterNode.y; } } } } // release nodes - for (var nodeId in containedNodes) { - if (containedNodes.hasOwnProperty(nodeId)) { - var containedNode = this.body.nodes[nodeId]; + for (var _nodeId5 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId5)) { + var _containedNode3 = this.body.nodes[_nodeId5]; // inherit speed - containedNode.vx = clusterNode.vx; - containedNode.vy = clusterNode.vy; + _containedNode3.vx = clusterNode.vx; + _containedNode3.vy = clusterNode.vy; // we use these methods to avoid re-instantiating the shape, which happens with setOptions. - containedNode.setOptions({ hidden: false, physics: true }); + _containedNode3.setOptions({ hidden: false, physics: true }); - delete this.clusteredNodes[nodeId]; + delete this.clusteredNodes[_nodeId5]; } } @@ -36578,8 +37029,8 @@ return /******/ (function(modules) { // webpackBootstrap } // actually handling the deleting. - for (var i = 0; i < edgesToBeDeleted.length; i++) { - var edge = edgesToBeDeleted[i]; + for (var _i4 = 0; _i4 < edgesToBeDeleted.length; _i4++) { + var edge = edgesToBeDeleted[_i4]; var otherNodeId = this._getConnectedId(edge, clusterNodeId); // if the other node is in another cluster, we transfer ownership of this edge to the other cluster @@ -36604,7 +37055,7 @@ return /******/ (function(modules) { // webpackBootstrap } // clone the options and apply the cluster options to them - var clonedOptions = _NetworkUtil2['default'].cloneOptions(transferEdge, 'edge'); + var clonedOptions = _NetworkUtil2.default.cloneOptions(transferEdge, 'edge'); util.deepExtend(clonedOptions, otherCluster.clusterEdgeProperties); // apply the edge specific options to it. @@ -36664,6 +37115,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeId * @returns {Array} */ + }, { key: 'findNode', value: function findNode(nodeId) { @@ -36689,6 +37141,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} * @private */ + }, { key: '_getConnectedId', value: function _getConnectedId(edge, nodeId) { @@ -36707,6 +37160,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_getHubSize', value: function _getHubSize() { @@ -36742,13 +37196,12 @@ return /******/ (function(modules) { // webpackBootstrap }]); return ClusterEngine; - })(); + }(); - exports['default'] = ClusterEngine; - module.exports = exports['default']; + exports.default = ClusterEngine; /***/ }, -/* 99 */ +/* 100 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -36757,13 +37210,13 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var NetworkUtil = (function () { + var NetworkUtil = function () { function NetworkUtil() { _classCallCheck(this, NetworkUtil); } @@ -36772,6 +37225,7 @@ return /******/ (function(modules) { // webpackBootstrap * Find the center position of the network considering the bounding boxes */ + _createClass(NetworkUtil, null, [{ key: "getRange", value: function getRange(allNodes) { @@ -36809,6 +37263,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Find the center position of the network */ + }, { key: "getRangeCore", value: function getRangeCore(allNodes) { @@ -36847,6 +37302,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; * @returns {{x: number, y: number}} */ + }, { key: "findCenter", value: function findCenter(range) { @@ -36860,6 +37316,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param type * @returns {{}} */ + }, { key: "cloneOptions", value: function cloneOptions(item, type) { @@ -36877,69 +37334,68 @@ return /******/ (function(modules) { // webpackBootstrap }]); return NetworkUtil; - })(); + }(); - exports["default"] = NetworkUtil; - module.exports = exports["default"]; + exports.default = NetworkUtil; /***/ }, -/* 100 */ +/* 101 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + var _Node2 = __webpack_require__(62); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _Node3 = _interopRequireDefault(_Node2); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var _Node2 = __webpack_require__(61); + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - var _Node3 = _interopRequireDefault(_Node2); + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * */ - var Cluster = (function (_Node) { + var Cluster = function (_Node) { _inherits(Cluster, _Node); function Cluster(options, body, imagelist, grouplist, globalOptions) { _classCallCheck(this, Cluster); - _get(Object.getPrototypeOf(Cluster.prototype), 'constructor', this).call(this, options, body, imagelist, grouplist, globalOptions); + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Cluster).call(this, options, body, imagelist, grouplist, globalOptions)); - this.isCluster = true; - this.containedNodes = {}; - this.containedEdges = {}; + _this.isCluster = true; + _this.containedNodes = {}; + _this.containedEdges = {}; + return _this; } return Cluster; - })(_Node3['default']); + }(_Node3.default); - exports['default'] = Cluster; - module.exports = exports['default']; + exports.default = Cluster; /***/ }, -/* 101 */ +/* 102 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } if (typeof window !== 'undefined') { window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; @@ -36947,7 +37403,7 @@ return /******/ (function(modules) { // webpackBootstrap var util = __webpack_require__(1); - var CanvasRenderer = (function () { + var CanvasRenderer = function () { function CanvasRenderer(body, canvas) { _classCallCheck(this, CanvasRenderer); @@ -37068,6 +37524,7 @@ return /******/ (function(modules) { // webpackBootstrap * Redraw the network with the current data * chart will be resized too. */ + }, { key: 'redraw', value: function redraw() { @@ -37080,6 +37537,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param hidden | used to get the first estimate of the node sizes. only the nodes are drawn after which they are quickly drawn over. * @private */ + }, { key: '_requestRedraw', value: function _requestRedraw() { @@ -37166,6 +37624,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Boolean} [alwaysShow] * @private */ + }, { key: '_resizeNodes', value: function _resizeNodes() { @@ -37179,7 +37638,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.scale(this.body.view.scale, this.body.view.scale); var nodes = this.body.nodes; - var node = undefined; + var node = void 0; // resize all nodes for (var nodeId in nodes) { @@ -37201,6 +37660,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Boolean} [alwaysShow] * @private */ + }, { key: '_drawNodes', value: function _drawNodes(ctx) { @@ -37208,7 +37668,7 @@ return /******/ (function(modules) { // webpackBootstrap var nodes = this.body.nodes; var nodeIndices = this.body.nodeIndices; - var node = undefined; + var node = void 0; var selected = []; var margin = 20; var topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin }); @@ -37236,8 +37696,8 @@ return /******/ (function(modules) { // webpackBootstrap } // draw the selected nodes on top - for (var i = 0; i < selected.length; i++) { - node = nodes[selected[i]]; + for (var _i = 0; _i < selected.length; _i++) { + node = nodes[selected[_i]]; node.draw(ctx); } } @@ -37248,12 +37708,13 @@ return /******/ (function(modules) { // webpackBootstrap * @param {CanvasRenderingContext2D} ctx * @private */ + }, { key: '_drawEdges', value: function _drawEdges(ctx) { var edges = this.body.edges; var edgeIndices = this.body.edgeIndices; - var edge = undefined; + var edge = void 0; for (var i = 0; i < edgeIndices.length; i++) { edge = edges[edgeIndices[i]]; @@ -37268,6 +37729,7 @@ return /******/ (function(modules) { // webpackBootstrap * some implementations (safari and IE9) did not support requestAnimationFrame * @private */ + }, { key: '_determineBrowserMethod', value: function _determineBrowserMethod() { @@ -37290,27 +37752,26 @@ return /******/ (function(modules) { // webpackBootstrap }]); return CanvasRenderer; - })(); + }(); - exports['default'] = CanvasRenderer; - module.exports = exports['default']; + exports.default = CanvasRenderer; /***/ }, -/* 102 */ +/* 103 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var Hammer = __webpack_require__(20); - var hammerUtil = __webpack_require__(24); + var Hammer = __webpack_require__(22); + var hammerUtil = __webpack_require__(25); var util = __webpack_require__(1); @@ -37322,7 +37783,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ - var Canvas = (function () { + var Canvas = function () { function Canvas(body) { _classCallCheck(this, Canvas); @@ -37331,6 +37792,7 @@ return /******/ (function(modules) { // webpackBootstrap this.resizeTimer = undefined; this.resizeFunction = this._onResize.bind(this); this.cameraState = {}; + this.initialized = false; this.options = {}; this.defaultOptions = { @@ -37408,21 +37870,28 @@ return /******/ (function(modules) { // webpackBootstrap * Get and store the cameraState * @private */ + }, { key: '_getCameraState', value: function _getCameraState() { var pixelRatio = arguments.length <= 0 || arguments[0] === undefined ? this.pixelRatio : arguments[0]; - this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio; - this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio; - this.cameraState.scale = this.body.view.scale; - this.cameraState.position = this.DOMtoCanvas({ x: 0.5 * this.frame.canvas.width / pixelRatio, y: 0.5 * this.frame.canvas.height / pixelRatio }); + if (this.initialized === true) { + this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio; + this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio; + this.cameraState.scale = this.body.view.scale; + this.cameraState.position = this.DOMtoCanvas({ + x: 0.5 * this.frame.canvas.width / pixelRatio, + y: 0.5 * this.frame.canvas.height / pixelRatio + }); + } } /** * Set the cameraState * @private */ + }, { key: '_setCameraState', value: function _setCameraState() { @@ -37473,6 +37942,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Create the HTML */ + }, { key: '_create', value: function _create() { @@ -37520,6 +37990,7 @@ return /******/ (function(modules) { // webpackBootstrap * This function binds hammer, it can be repeated over and over due to the uniqueness check. * @private */ + }, { key: '_bindHammer', value: function _bindHammer() { @@ -37535,7 +38006,7 @@ return /******/ (function(modules) { // webpackBootstrap this.hammer = new Hammer(this.frame.canvas); this.hammer.get('pinch').set({ enable: true }); // enable to get better response, todo: test on mobile. - this.hammer.get('pan').set({ threshold: 5, direction: 30 }); // 30 is ALL_DIRECTIONS in hammer. + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_ALL }); hammerUtil.onTouch(this.hammer, function (event) { _this3.body.eventListeners.onTouch(event); @@ -37590,6 +38061,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {string} height Height in pixels or percentage (for example '400px' * or '30%') */ + }, { key: 'setSize', value: function setSize() { @@ -37655,11 +38127,14 @@ return /******/ (function(modules) { // webpackBootstrap this._setCameraState(); } + // set initialized so the get and set camera will work from now on. + this.initialized = true; return emitEvent; } }, { key: '_XconvertDOMtoCanvas', + /** * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) @@ -37678,6 +38153,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_XconvertCanvasToDOM', value: function _XconvertCanvasToDOM(x) { @@ -37691,6 +38167,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_YconvertDOMtoCanvas', value: function _YconvertDOMtoCanvas(y) { @@ -37704,6 +38181,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_YconvertCanvasToDOM', value: function _YconvertCanvasToDOM(y) { @@ -37716,6 +38194,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @constructor */ + }, { key: 'canvasToDOM', value: function canvasToDOM(pos) { @@ -37728,6 +38207,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{x: number, y: number}} * @constructor */ + }, { key: 'DOMtoCanvas', value: function DOMtoCanvas(pos) { @@ -37736,34 +38216,33 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Canvas; - })(); + }(); - exports['default'] = Canvas; - module.exports = exports['default']; + exports.default = Canvas; /***/ }, -/* 103 */ +/* 104 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NetworkUtil = __webpack_require__(100); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); - var _NetworkUtil = __webpack_require__(99); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var View = (function () { + var View = function () { function View(body, canvas) { var _this = this; @@ -37805,14 +38284,15 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} Options * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; */ + }, { key: 'fit', value: function fit() { var options = arguments.length <= 0 || arguments[0] === undefined ? { nodes: [] } : arguments[0]; var initialZoom = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - var range = undefined; - var zoomLevel = undefined; + var range = void 0; + var zoomLevel = void 0; if (options.nodes === undefined || options.nodes.length === 0) { options.nodes = this.body.nodeIndices; } @@ -37833,7 +38313,7 @@ return /******/ (function(modules) { // webpackBootstrap return; } - range = _NetworkUtil2['default'].getRange(this.body.nodes, options.nodes); + range = _NetworkUtil2.default.getRange(this.body.nodes, options.nodes); var numberOfNodes = this.body.nodeIndices.length; zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. @@ -37843,7 +38323,7 @@ return /******/ (function(modules) { // webpackBootstrap zoomLevel *= factor; } else { this.body.emitter.emit("_resizeNodes"); - range = _NetworkUtil2['default'].getRange(this.body.nodes, options.nodes); + range = _NetworkUtil2.default.getRange(this.body.nodes, options.nodes); var xDistance = Math.abs(range.maxX - range.minX) * 1.1; var yDistance = Math.abs(range.maxY - range.minY) * 1.1; @@ -37860,7 +38340,7 @@ return /******/ (function(modules) { // webpackBootstrap zoomLevel = 1.0; } - var center = _NetworkUtil2['default'].findCenter(range); + var center = _NetworkUtil2.default.findCenter(range); var animationOptions = { position: center, scale: zoomLevel, animation: options.animation }; this.moveTo(animationOptions); } @@ -37873,6 +38353,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number} nodeId * @param {Number} [options] */ + }, { key: 'focus', value: function focus(nodeId) { @@ -37896,6 +38377,7 @@ return /******/ (function(modules) { // webpackBootstrap * | options.position = {x:Number, y:Number} // position to move to * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to */ + }, { key: 'moveTo', value: function moveTo(options) { @@ -37948,6 +38430,7 @@ return /******/ (function(modules) { // webpackBootstrap * // easeInQuart, easeOutQuart, easeInOutQuart, * // easeInQuint, easeOutQuint, easeInOutQuint */ + }, { key: 'animateView', value: function animateView(options) { @@ -38009,6 +38492,7 @@ return /******/ (function(modules) { // webpackBootstrap * used to animate smoothly by hijacking the redraw function. * @private */ + }, { key: '_lockedRedraw', value: function _lockedRedraw() { @@ -38041,6 +38525,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param easingTime * @private */ + }, { key: '_transitionRedraw', value: function _transitionRedraw() { @@ -38081,45 +38566,44 @@ return /******/ (function(modules) { // webpackBootstrap }]); return View; - })(); + }(); - exports['default'] = View; - module.exports = exports['default']; + exports.default = View; /***/ }, -/* 104 */ +/* 105 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _NavigationHandler = __webpack_require__(106); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _NavigationHandler2 = _interopRequireDefault(_NavigationHandler); - var _componentsNavigationHandler = __webpack_require__(105); + var _Popup = __webpack_require__(107); - var _componentsNavigationHandler2 = _interopRequireDefault(_componentsNavigationHandler); + var _Popup2 = _interopRequireDefault(_Popup); - var _componentsPopup = __webpack_require__(106); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var _componentsPopup2 = _interopRequireDefault(_componentsPopup); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var InteractionHandler = (function () { + var InteractionHandler = function () { function InteractionHandler(body, canvas, selectionHandler) { _classCallCheck(this, InteractionHandler); this.body = body; this.canvas = canvas; this.selectionHandler = selectionHandler; - this.navigationHandler = new _componentsNavigationHandler2['default'](body, canvas); + this.navigationHandler = new _NavigationHandler2.default(body, canvas); // bind the events from hammer to functions in this object this.body.eventListeners.onTap = this.onTap.bind(this); @@ -38201,6 +38685,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {{x: Number, y: Number}} pointer * @private */ + }, { key: 'getPointer', value: function getPointer(touch) { @@ -38215,6 +38700,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: 'onTouch', value: function onTouch(event) { @@ -38231,6 +38717,7 @@ return /******/ (function(modules) { // webpackBootstrap * handle tap/click event: select/unselect a node * @private */ + }, { key: 'onTap', value: function onTap(event) { @@ -38245,6 +38732,7 @@ return /******/ (function(modules) { // webpackBootstrap * handle doubletap event * @private */ + }, { key: 'onDoubleTap', value: function onDoubleTap(event) { @@ -38256,6 +38744,7 @@ return /******/ (function(modules) { // webpackBootstrap * handle long tap event: multi select nodes * @private */ + }, { key: 'onHold', value: function onHold(event) { @@ -38273,6 +38762,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'onRelease', value: function onRelease(event) { @@ -38295,6 +38785,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param pointer * @param add */ + }, { key: 'checkSelectionChanges', value: function checkSelectionChanges(pointer, event) { @@ -38303,7 +38794,7 @@ return /******/ (function(modules) { // webpackBootstrap var previouslySelectedEdgeCount = this.selectionHandler._getSelectedEdgeCount(); var previouslySelectedNodeCount = this.selectionHandler._getSelectedNodeCount(); var previousSelection = this.selectionHandler.getSelection(); - var selected = undefined; + var selected = void 0; if (add === true) { selected = this.selectionHandler.selectAdditionalOnPoint(pointer); } else { @@ -38365,6 +38856,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{nodesChanged: boolean, edgesChanged: boolean}} * @private */ + }, { key: '_determineIfDifferent', value: function _determineIfDifferent(previousSelection, currentSelection) { @@ -38376,18 +38868,18 @@ return /******/ (function(modules) { // webpackBootstrap nodesChanged = true; } } - for (var i = 0; i < currentSelection.nodes.length; i++) { - if (previousSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { + for (var _i = 0; _i < currentSelection.nodes.length; _i++) { + if (previousSelection.nodes.indexOf(previousSelection.nodes[_i]) === -1) { nodesChanged = true; } } - for (var i = 0; i < previousSelection.edges.length; i++) { - if (currentSelection.edges.indexOf(previousSelection.edges[i]) === -1) { + for (var _i2 = 0; _i2 < previousSelection.edges.length; _i2++) { + if (currentSelection.edges.indexOf(previousSelection.edges[_i2]) === -1) { edgesChanged = true; } } - for (var i = 0; i < currentSelection.edges.length; i++) { - if (previousSelection.edges.indexOf(previousSelection.edges[i]) === -1) { + for (var _i3 = 0; _i3 < currentSelection.edges.length; _i3++) { + if (previousSelection.edges.indexOf(previousSelection.edges[_i3]) === -1) { edgesChanged = true; } } @@ -38401,6 +38893,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'onDragStart', value: function onDragStart(event) { @@ -38460,6 +38953,7 @@ return /******/ (function(modules) { // webpackBootstrap * handle drag event * @private */ + }, { key: 'onDrag', value: function onDrag(event) { @@ -38522,6 +39016,7 @@ return /******/ (function(modules) { // webpackBootstrap * handle drag start event * @private */ + }, { key: 'onDragEnd', value: function onDragEnd(event) { @@ -38546,6 +39041,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: 'onPinch', value: function onPinch(event) { @@ -38568,6 +39064,7 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Number} appliedScale scale is limited within the boundaries * @private */ + }, { key: 'zoom', value: function zoom(scale, pointer) { @@ -38619,6 +39116,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {MouseEvent} event * @private */ + }, { key: 'onMouseWheel', value: function onMouseWheel(event) { @@ -38665,6 +39163,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Event} event * @private */ + }, { key: 'onMouseMove', value: function onMouseMove(event) { @@ -38726,6 +39225,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {{x:Number, y:Number}} pointer * @private */ + }, { key: '_checkShowPopup', value: function _checkShowPopup(pointer) { @@ -38747,7 +39247,7 @@ return /******/ (function(modules) { // webpackBootstrap // search the nodes for overlap, select the top one in case of multiple nodes var nodeIndices = this.body.nodeIndices; var nodes = this.body.nodes; - var node = undefined; + var node = void 0; var overlappingNodes = []; for (var i = 0; i < nodeIndices.length; i++) { node = nodes[nodeIndices[i]]; @@ -38770,13 +39270,13 @@ return /******/ (function(modules) { // webpackBootstrap // search the edges for overlap var edgeIndices = this.body.edgeIndices; var edges = this.body.edges; - var edge = undefined; + var edge = void 0; var overlappingEdges = []; - for (var i = 0; i < edgeIndices.length; i++) { - edge = edges[edgeIndices[i]]; + for (var _i4 = 0; _i4 < edgeIndices.length; _i4++) { + edge = edges[edgeIndices[_i4]]; if (edge.isOverlappingWith(pointerObj) === true) { if (edge.connected === true && edge.getTitle() !== undefined) { - overlappingEdges.push(edgeIndices[i]); + overlappingEdges.push(edgeIndices[_i4]); } } } @@ -38791,7 +39291,7 @@ return /******/ (function(modules) { // webpackBootstrap // show popup message window if (this.popupObj.id !== previousPopupObjId) { if (this.popup === undefined) { - this.popup = new _componentsPopup2['default'](this.canvas.frame); + this.popup = new _Popup2.default(this.canvas.frame); } this.popup.popupTargetType = popupType; @@ -38819,6 +39319,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {{x:Number, y:Number}} pointer * @private */ + }, { key: '_checkHidePopup', value: function _checkHidePopup(pointer) { @@ -38853,31 +39354,30 @@ return /******/ (function(modules) { // webpackBootstrap }]); return InteractionHandler; - })(); + }(); - exports['default'] = InteractionHandler; - module.exports = exports['default']; + exports.default = InteractionHandler; /***/ }, -/* 105 */ +/* 106 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var Hammer = __webpack_require__(20); - var hammerUtil = __webpack_require__(24); - var keycharm = __webpack_require__(40); + var Hammer = __webpack_require__(22); + var hammerUtil = __webpack_require__(25); + var keycharm = __webpack_require__(43); - var NavigationHandler = (function () { + var NavigationHandler = function () { function NavigationHandler(body, canvas) { var _this = this; @@ -38955,6 +39455,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'loadNavigationElements', value: function loadNavigationElements() { @@ -39019,6 +39520,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_fit', value: function _fit() { @@ -39034,6 +39536,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_stopMovement', value: function _stopMovement() { @@ -39081,6 +39584,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * bind all keys using keycharm. */ + }, { key: 'configureKeyboardBindings', value: function configureKeyboardBindings() { @@ -39179,15 +39683,24 @@ return /******/ (function(modules) { // webpackBootstrap }]); return NavigationHandler; - })(); + }(); - exports['default'] = NavigationHandler; - module.exports = exports['default']; + exports.default = NavigationHandler; /***/ }, -/* 106 */ +/* 107 */ /***/ function(module, exports) { + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * Popup is a class to create a popup window with some text * @param {Element} container The container object. @@ -39197,17 +39710,8 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} [style] An object containing borderColor, * backgroundColor, etc. */ - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - - var Popup = (function () { + var Popup = function () { function Popup(container) { _classCallCheck(this, Popup); @@ -39229,6 +39733,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {number} y Vertical position of the popup window */ + _createClass(Popup, [{ key: 'setPosition', value: function setPosition(x, y) { @@ -39240,6 +39745,7 @@ return /******/ (function(modules) { // webpackBootstrap * Set the content for the popup window. This can be HTML code or text. * @param {string | Element} content */ + }, { key: 'setText', value: function setText(content) { @@ -39255,6 +39761,7 @@ return /******/ (function(modules) { // webpackBootstrap * Show the popup window * @param {boolean} [doShow] Show or hide the window */ + }, { key: 'show', value: function show(doShow) { @@ -39296,6 +39803,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Hide the popup window */ + }, { key: 'hide', value: function hide() { @@ -39305,30 +39813,37 @@ return /******/ (function(modules) { // webpackBootstrap }]); return Popup; - })(); + }(); - exports['default'] = Popup; - module.exports = exports['default']; + exports.default = Popup; /***/ }, -/* 107 */ +/* 108 */ /***/ function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + var _Node = __webpack_require__(62); + + var _Node2 = _interopRequireDefault(_Node); + + var _Edge = __webpack_require__(82); + + var _Edge2 = _interopRequireDefault(_Edge); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var Node = __webpack_require__(61); - var Edge = __webpack_require__(81); var util = __webpack_require__(1); - var SelectionHandler = (function () { + var SelectionHandler = function () { function SelectionHandler(body, canvas) { var _this = this; @@ -39354,7 +39869,7 @@ return /******/ (function(modules) { // webpackBootstrap } _createClass(SelectionHandler, [{ - key: "setOptions", + key: 'setOptions', value: function setOptions(options) { if (options !== undefined) { var fields = ['multiselect', 'hoverConnectedEdges', 'selectable', 'selectConnectedEdges']; @@ -39368,8 +39883,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} pointer * @private */ + }, { - key: "selectOnPoint", + key: 'selectOnPoint', value: function selectOnPoint(pointer) { var selected = false; if (this.options.selectable === true) { @@ -39386,7 +39902,7 @@ return /******/ (function(modules) { // webpackBootstrap return selected; } }, { - key: "selectAdditionalOnPoint", + key: 'selectAdditionalOnPoint', value: function selectAdditionalOnPoint(pointer) { var selectionChanged = false; if (this.options.selectable === true) { @@ -39406,11 +39922,11 @@ return /******/ (function(modules) { // webpackBootstrap return selectionChanged; } }, { - key: "_generateClickEvent", + key: '_generateClickEvent', value: function _generateClickEvent(eventType, event, pointer, oldSelection) { var emptySelection = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4]; - var properties = undefined; + var properties = void 0; if (emptySelection === true) { properties = { nodes: [], edges: [] }; } else { @@ -39428,12 +39944,12 @@ return /******/ (function(modules) { // webpackBootstrap this.body.emitter.emit(eventType, properties); } }, { - key: "selectObject", + key: 'selectObject', value: function selectObject(obj) { var highlightEdges = arguments.length <= 1 || arguments[1] === undefined ? this.options.selectConnectedEdges : arguments[1]; if (obj !== undefined) { - if (obj instanceof Node) { + if (obj instanceof _Node2.default) { if (highlightEdges === true) { this._selectConnectedEdges(obj); } @@ -39445,7 +39961,7 @@ return /******/ (function(modules) { // webpackBootstrap return false; } }, { - key: "deselectObject", + key: 'deselectObject', value: function deselectObject(obj) { if (obj.isSelected() === true) { obj.selected = false; @@ -39459,8 +39975,9 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Number[]} An array with id's of the overlapping nodes * @private */ + }, { - key: "_getAllNodesOverlappingWith", + key: '_getAllNodesOverlappingWith', value: function _getAllNodesOverlappingWith(object) { var overlappingNodes = []; var nodes = this.body.nodes; @@ -39480,8 +39997,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{left: number, top: number, right: number, bottom: number}} * @private */ + }, { - key: "_pointerToPositionObject", + key: '_pointerToPositionObject', value: function _pointerToPositionObject(pointer) { var canvasPos = this.canvas.DOMtoCanvas(pointer); return { @@ -39498,8 +40016,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {{x: Number, y: Number}} pointer * @return {Node | undefined} node */ + }, { - key: "getNodeAt", + key: 'getNodeAt', value: function getNodeAt(pointer) { var returnNode = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; @@ -39525,8 +40044,9 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Number[]} An array with id's of the overlapping nodes * @private */ + }, { - key: "_getEdgesOverlappingWith", + key: '_getEdgesOverlappingWith', value: function _getEdgesOverlappingWith(object, overlappingEdges) { var edges = this.body.edges; for (var i = 0; i < this.body.edgeIndices.length; i++) { @@ -39543,8 +40063,9 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Number[]} An array with id's of the overlapping nodes * @private */ + }, { - key: "_getAllEdgesOverlappingWith", + key: '_getAllEdgesOverlappingWith', value: function _getAllEdgesOverlappingWith(object) { var overlappingEdges = []; this._getEdgesOverlappingWith(object, overlappingEdges); @@ -39558,8 +40079,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param pointer * @returns {undefined} */ + }, { - key: "getEdgeAt", + key: 'getEdgeAt', value: function getEdgeAt(pointer) { var returnEdge = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; @@ -39583,10 +40105,11 @@ return /******/ (function(modules) { // webpackBootstrap * @param obj * @private */ + }, { - key: "_addToSelection", + key: '_addToSelection', value: function _addToSelection(obj) { - if (obj instanceof Node) { + if (obj instanceof _Node2.default) { this.selectionObj.nodes[obj.id] = obj; } else { this.selectionObj.edges[obj.id] = obj; @@ -39599,10 +40122,11 @@ return /******/ (function(modules) { // webpackBootstrap * @param obj * @private */ + }, { - key: "_addToHover", + key: '_addToHover', value: function _addToHover(obj) { - if (obj instanceof Node) { + if (obj instanceof _Node2.default) { this.hoverObj.nodes[obj.id] = obj; } else { this.hoverObj.edges[obj.id] = obj; @@ -39615,10 +40139,11 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} obj * @private */ + }, { - key: "_removeFromSelection", + key: '_removeFromSelection', value: function _removeFromSelection(obj) { - if (obj instanceof Node) { + if (obj instanceof _Node2.default) { delete this.selectionObj.nodes[obj.id]; this._unselectConnectedEdges(obj); } else { @@ -39629,8 +40154,9 @@ return /******/ (function(modules) { // webpackBootstrap /** * Unselect all. The selectionObj is useful for this. */ + }, { - key: "unselectAll", + key: 'unselectAll', value: function unselectAll() { for (var nodeId in this.selectionObj.nodes) { if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { @@ -39652,8 +40178,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { - key: "_getSelectedNodeCount", + key: '_getSelectedNodeCount', value: function _getSelectedNodeCount() { var count = 0; for (var nodeId in this.selectionObj.nodes) { @@ -39670,8 +40197,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { - key: "_getSelectedNode", + key: '_getSelectedNode', value: function _getSelectedNode() { for (var nodeId in this.selectionObj.nodes) { if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { @@ -39687,8 +40215,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { - key: "_getSelectedEdge", + key: '_getSelectedEdge', value: function _getSelectedEdge() { for (var edgeId in this.selectionObj.edges) { if (this.selectionObj.edges.hasOwnProperty(edgeId)) { @@ -39704,8 +40233,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { - key: "_getSelectedEdgeCount", + key: '_getSelectedEdgeCount', value: function _getSelectedEdgeCount() { var count = 0; for (var edgeId in this.selectionObj.edges) { @@ -39722,8 +40252,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { - key: "_getSelectedObjectCount", + key: '_getSelectedObjectCount', value: function _getSelectedObjectCount() { var count = 0; for (var nodeId in this.selectionObj.nodes) { @@ -39745,8 +40276,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {boolean} * @private */ + }, { - key: "_selectionIsEmpty", + key: '_selectionIsEmpty', value: function _selectionIsEmpty() { for (var nodeId in this.selectionObj.nodes) { if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { @@ -39767,8 +40299,9 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {boolean} * @private */ + }, { - key: "_clusterInSelection", + key: '_clusterInSelection', value: function _clusterInSelection() { for (var nodeId in this.selectionObj.nodes) { if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { @@ -39786,8 +40319,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Node} node * @private */ + }, { - key: "_selectConnectedEdges", + key: '_selectConnectedEdges', value: function _selectConnectedEdges(node) { for (var i = 0; i < node.edges.length; i++) { var edge = node.edges[i]; @@ -39802,8 +40336,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Node} node * @private */ + }, { - key: "_hoverConnectedEdges", + key: '_hoverConnectedEdges', value: function _hoverConnectedEdges(node) { for (var i = 0; i < node.edges.length; i++) { var edge = node.edges[i]; @@ -39818,8 +40353,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Node} node * @private */ + }, { - key: "_unselectConnectedEdges", + key: '_unselectConnectedEdges', value: function _unselectConnectedEdges(node) { for (var i = 0; i < node.edges.length; i++) { var edge = node.edges[i]; @@ -39835,12 +40371,13 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Node || Edge} object * @private */ + }, { - key: "blurObject", + key: 'blurObject', value: function blurObject(object) { if (object.hover === true) { object.hover = false; - if (object instanceof Node) { + if (object instanceof _Node2.default) { this.body.emitter.emit("blurNode", { node: object.id }); } else { this.body.emitter.emit("blurEdge", { edge: object.id }); @@ -39855,14 +40392,15 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Node || Edge} object * @private */ + }, { - key: "hoverObject", + key: 'hoverObject', value: function hoverObject(object) { var hoverChanged = false; // remove all node hover highlights for (var nodeId in this.hoverObj.nodes) { if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { - if (object === undefined || object instanceof Node && object.id != nodeId || object instanceof Edge) { + if (object === undefined || object instanceof _Node2.default && object.id != nodeId || object instanceof _Edge2.default) { this.blurObject(this.hoverObj.nodes[nodeId]); delete this.hoverObj.nodes[nodeId]; hoverChanged = true; @@ -39893,13 +40431,13 @@ return /******/ (function(modules) { // webpackBootstrap object.hover = true; this._addToHover(object); hoverChanged = true; - if (object instanceof Node) { + if (object instanceof _Node2.default) { this.body.emitter.emit("hoverNode", { node: object.id }); } else { this.body.emitter.emit("hoverEdge", { edge: object.id }); } } - if (object instanceof Node && this.options.hoverConnectedEdges === true) { + if (object instanceof _Node2.default && this.options.hoverConnectedEdges === true) { this._hoverConnectedEdges(object); } } @@ -39914,8 +40452,9 @@ return /******/ (function(modules) { // webpackBootstrap * retrieve the currently selected objects * @return {{nodes: Array., edges: Array.}} selection */ + }, { - key: "getSelection", + key: 'getSelection', value: function getSelection() { var nodeIds = this.getSelectedNodes(); var edgeIds = this.getSelectedEdges(); @@ -39928,8 +40467,9 @@ return /******/ (function(modules) { // webpackBootstrap * @return {String[]} selection An array with the ids of the * selected nodes. */ + }, { - key: "getSelectedNodes", + key: 'getSelectedNodes', value: function getSelectedNodes() { var idArray = []; if (this.options.selectable === true) { @@ -39948,8 +40488,9 @@ return /******/ (function(modules) { // webpackBootstrap * @return {Array} selection An array with the ids of the * selected nodes. */ + }, { - key: "getSelectedEdges", + key: 'getSelectedEdges', value: function getSelectedEdges() { var idArray = []; if (this.options.selectable === true) { @@ -39967,13 +40508,14 @@ return /******/ (function(modules) { // webpackBootstrap * @param {{nodes: Array., edges: Array.}} Selection * @param {Object} options Options */ + }, { - key: "setSelection", + key: 'setSelection', value: function setSelection(selection) { var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var i = undefined, - id = undefined; + var i = void 0, + id = void 0; if (!selection || !selection.nodes && !selection.edges) throw 'Selection must be an object with nodes and/or edges properties'; // first unselect any selected node, if option is true or undefined @@ -40013,8 +40555,9 @@ return /******/ (function(modules) { // webpackBootstrap * selected nodes. * @param {boolean} [highlightEdges] */ + }, { - key: "selectNodes", + key: 'selectNodes', value: function selectNodes(selection) { var highlightEdges = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; @@ -40028,8 +40571,9 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Number[] | String[]} selection An array with the ids of the * selected nodes. */ + }, { - key: "selectEdges", + key: 'selectEdges', value: function selectEdges(selection) { if (!selection || selection.length === undefined) throw 'Selection must be an array with ids'; @@ -40040,8 +40584,9 @@ return /******/ (function(modules) { // webpackBootstrap * Validate the selection: remove ids of nodes which no longer exist * @private */ + }, { - key: "updateSelection", + key: 'updateSelection', value: function updateSelection() { for (var nodeId in this.selectionObj.nodes) { if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { @@ -40061,36 +40606,37 @@ return /******/ (function(modules) { // webpackBootstrap }]); return SelectionHandler; - })(); + }(); - exports["default"] = SelectionHandler; - module.exports = exports["default"]; + exports.default = SelectionHandler; /***/ }, -/* 108 */ +/* 109 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _NetworkUtil = __webpack_require__(99); + var _NetworkUtil = __webpack_require__(100); var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var util = __webpack_require__(1); - var LayoutEngine = (function () { + var LayoutEngine = function () { function LayoutEngine(body) { _classCallCheck(this, LayoutEngine); @@ -40189,7 +40735,7 @@ return /******/ (function(modules) { // webpackBootstrap }; this.optionsBackup.physics.enabled = this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled; this.optionsBackup.physics.solver = this.optionsBackup.physics.solver || 'barnesHut'; - } else if (typeof allOptions.physics === 'object') { + } else if (_typeof(allOptions.physics) === 'object') { this.optionsBackup.physics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled; this.optionsBackup.physics.solver = allOptions.physics.solver || 'barnesHut'; allOptions.physics.solver = 'hierarchicalRepulsion'; @@ -40271,6 +40817,7 @@ return /******/ (function(modules) { // webpackBootstrap * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we * cluster them first to reduce the amount. */ + }, { key: 'layoutNetwork', value: function layoutNetwork() { @@ -40325,9 +40872,9 @@ return /******/ (function(modules) { // webpackBootstrap // perturb the nodes a little bit to force the physics to kick in var offset = 70; - for (var i = 0; i < this.body.nodeIndices.length; i++) { - this.body.nodes[this.body.nodeIndices[i]].x += (0.5 - this.seededRandom()) * offset; - this.body.nodes[this.body.nodeIndices[i]].y += (0.5 - this.seededRandom()) * offset; + for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { + this.body.nodes[this.body.nodeIndices[_i]].x += (0.5 - this.seededRandom()) * offset; + this.body.nodes[this.body.nodeIndices[_i]].y += (0.5 - this.seededRandom()) * offset; } // uncluster all clusters @@ -40343,11 +40890,12 @@ return /******/ (function(modules) { // webpackBootstrap * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view * @private */ + }, { key: '_shiftToCenter', value: function _shiftToCenter() { - var range = _NetworkUtil2['default'].getRangeCore(this.body.nodes, this.body.nodeIndices); - var center = _NetworkUtil2['default'].findCenter(range); + var range = _NetworkUtil2.default.getRangeCore(this.body.nodes, this.body.nodeIndices); + var center = _NetworkUtil2.default.findCenter(range); for (var i = 0; i < this.body.nodeIndices.length; i++) { this.body.nodes[this.body.nodeIndices[i]].x -= center.x; this.body.nodes[this.body.nodeIndices[i]].y -= center.y; @@ -40382,13 +40930,14 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'setupHierarchicalLayout', value: function setupHierarchicalLayout() { if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) { // get the size of the largest hubs and check if the user has defined a level for a node. - var node = undefined, - nodeId = undefined; + var node = void 0, + nodeId = void 0; var definedLevel = false; var definedPositions = true; var undefinedLevel = false; @@ -40463,6 +41012,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * @private */ + }, { key: '_condenseHierarchy', value: function _condenseHierarchy() { @@ -40551,10 +41101,10 @@ return /******/ (function(modules) { // webpackBootstrap var _getSpaceAroundNode2 = _this2._getSpaceAroundNode(node, branchMap); - var _getSpaceAroundNode22 = _slicedToArray(_getSpaceAroundNode2, 2); + var _getSpaceAroundNode3 = _slicedToArray(_getSpaceAroundNode2, 2); - var minSpaceNode = _getSpaceAroundNode22[0]; - var maxSpaceNode = _getSpaceAroundNode22[1]; + var minSpaceNode = _getSpaceAroundNode3[0]; + var maxSpaceNode = _getSpaceAroundNode3[1]; minSpace = Math.min(minSpaceNode, minSpace); maxSpace = Math.min(maxSpaceNode, maxSpace); @@ -40656,14 +41206,15 @@ return /******/ (function(modules) { // webpackBootstrap var _getBranchBoundary3 = getBranchBoundary(branchNodes2, maxLevel); - var _getBranchBoundary32 = _slicedToArray(_getBranchBoundary3, 4); + var _getBranchBoundary4 = _slicedToArray(_getBranchBoundary3, 4); - var min2 = _getBranchBoundary32[0]; - var max2 = _getBranchBoundary32[1]; - var minSpace2 = _getBranchBoundary32[2]; - var maxSpace2 = _getBranchBoundary32[3]; + var min2 = _getBranchBoundary4[0]; + var max2 = _getBranchBoundary4[1]; + var minSpace2 = _getBranchBoundary4[2]; + var maxSpace2 = _getBranchBoundary4[3]; //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id, getBranchBoundary(branchNodes2, maxLevel), maxLevel); + var diffBranch = Math.abs(max1 - min2); if (diffBranch > _this2.options.hierarchical.nodeSpacing) { var offset = max1 - min2 + _this2.options.hierarchical.nodeSpacing; @@ -40708,9 +41259,9 @@ return /******/ (function(modules) { // webpackBootstrap // differentiated sum of lengths based on only moving one node over one axis var getFx = function getFx(point, edges) { var sum = 0; - for (var i = 0; i < edges.length; i++) { - if (referenceNodes[edges[i].id] !== undefined) { - var a = _this2._getPositionForHierarchy(referenceNodes[edges[i].id]) - point; + for (var _i2 = 0; _i2 < edges.length; _i2++) { + if (referenceNodes[edges[_i2].id] !== undefined) { + var a = _this2._getPositionForHierarchy(referenceNodes[edges[_i2].id]) - point; sum += a / Math.sqrt(a * a + C2); } } @@ -40720,9 +41271,9 @@ return /******/ (function(modules) { // webpackBootstrap // doubly differentiated sum of lengths based on only moving one node over one axis var getDFx = function getDFx(point, edges) { var sum = 0; - for (var i = 0; i < edges.length; i++) { - if (referenceNodes[edges[i].id] !== undefined) { - var a = _this2._getPositionForHierarchy(referenceNodes[edges[i].id]) - point; + for (var _i3 = 0; _i3 < edges.length; _i3++) { + if (referenceNodes[edges[_i3].id] !== undefined) { + var a = _this2._getPositionForHierarchy(referenceNodes[edges[_i3].id]) - point; sum -= C2 * Math.pow(a * a + C2, -1.5); } } @@ -40733,7 +41284,7 @@ return /******/ (function(modules) { // webpackBootstrap var guess = _this2._getPositionForHierarchy(node); // Newton's method for optimization var guessMap = {}; - for (var i = 0; i < iterations; i++) { + for (var _i4 = 0; _i4 < iterations; _i4++) { var fx = getFx(guess, edges); var dfx = getDFx(guess, edges); @@ -40745,7 +41296,7 @@ return /******/ (function(modules) { // webpackBootstrap if (guessMap[guess] !== undefined) { break; } - guessMap[guess] = i; + guessMap[guess] = _i4; } return guess; }; @@ -40762,14 +41313,15 @@ return /******/ (function(modules) { // webpackBootstrap branches[node.id] = branchNodes; } - var _getBranchBoundary4 = getBranchBoundary(branches[node.id]); + var _getBranchBoundary5 = getBranchBoundary(branches[node.id]); - var _getBranchBoundary42 = _slicedToArray(_getBranchBoundary4, 4); + var _getBranchBoundary6 = _slicedToArray(_getBranchBoundary5, 4); + + var minBranch = _getBranchBoundary6[0]; + var maxBranch = _getBranchBoundary6[1]; + var minSpaceBranch = _getBranchBoundary6[2]; + var maxSpaceBranch = _getBranchBoundary6[3]; - var minBranch = _getBranchBoundary42[0]; - var maxBranch = _getBranchBoundary42[1]; - var minSpaceBranch = _getBranchBoundary42[2]; - var maxSpaceBranch = _getBranchBoundary42[3]; var diff = guess - nodePosition; @@ -40794,12 +41346,12 @@ return /******/ (function(modules) { // webpackBootstrap // position node if there is space - var _getSpaceAroundNode3 = _this2._getSpaceAroundNode(node); + var _getSpaceAroundNode4 = _this2._getSpaceAroundNode(node); - var _getSpaceAroundNode32 = _slicedToArray(_getSpaceAroundNode3, 2); + var _getSpaceAroundNode5 = _slicedToArray(_getSpaceAroundNode4, 2); - var minSpace = _getSpaceAroundNode32[0]; - var maxSpace = _getSpaceAroundNode32[1]; + var minSpace = _getSpaceAroundNode5[0]; + var maxSpace = _getSpaceAroundNode5[1]; var diff = guess - nodePosition; // check if we are allowed to move the node: @@ -40905,6 +41457,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*[]} * @private */ + }, { key: '_getSpaceAroundNode', value: function _getSpaceAroundNode(node, map) { @@ -40945,6 +41498,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param node * @private */ + }, { key: '_centerParent', value: function _centerParent(node) { @@ -40959,8 +41513,8 @@ return /******/ (function(modules) { // webpackBootstrap var maxPos = -1e9; var children = this.hierarchicalChildrenReference[parentId]; if (children.length > 0) { - for (var _i = 0; _i < children.length; _i++) { - var childNode = this.body.nodes[children[_i]]; + for (var _i5 = 0; _i5 < children.length; _i5++) { + var childNode = this.body.nodes[children[_i5]]; minPos = Math.min(minPos, this._getPositionForHierarchy(childNode)); maxPos = Math.max(maxPos, this._getPositionForHierarchy(childNode)); } @@ -40968,12 +41522,12 @@ return /******/ (function(modules) { // webpackBootstrap var position = this._getPositionForHierarchy(parentNode); - var _getSpaceAroundNode4 = this._getSpaceAroundNode(parentNode); + var _getSpaceAroundNode6 = this._getSpaceAroundNode(parentNode); - var _getSpaceAroundNode42 = _slicedToArray(_getSpaceAroundNode4, 2); + var _getSpaceAroundNode7 = _slicedToArray(_getSpaceAroundNode6, 2); - var minSpace = _getSpaceAroundNode42[0]; - var maxSpace = _getSpaceAroundNode42[1]; + var minSpace = _getSpaceAroundNode7[0]; + var maxSpace = _getSpaceAroundNode7[1]; var newPosition = 0.5 * (minPos + maxPos); var diff = position - newPosition; @@ -40991,6 +41545,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param {Object} distribution | obtained by the function this._getDistribution() * @private */ + }, { key: '_placeNodesByHierarchy', value: function _placeNodesByHierarchy(distribution) { @@ -41030,6 +41585,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param parentLevel * @private */ + }, { key: '_placeBranchNodes', value: function _placeBranchNodes(parentId, parentLevel) { @@ -41048,19 +41604,19 @@ return /******/ (function(modules) { // webpackBootstrap this._sortNodeArray(childNodes); // position the childNodes - for (var i = 0; i < childNodes.length; i++) { - var childNode = childNodes[i]; + for (var _i6 = 0; _i6 < childNodes.length; _i6++) { + var childNode = childNodes[_i6]; var childNodeLevel = this.hierarchicalLevels[childNode.id]; // check if the child node is below the parent node and if it has already been positioned. if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) { // get the amount of space required for this node. If parent the width is based on the amount of children. - var pos = undefined; + var pos = void 0; // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y - if (i === 0) { + if (_i6 === 0) { pos = this._getPositionForHierarchy(this.body.nodes[parentId]); } else { - pos = this._getPositionForHierarchy(childNodes[i - 1]) + this.options.hierarchical.nodeSpacing; + pos = this._getPositionForHierarchy(childNodes[_i6 - 1]) + this.options.hierarchical.nodeSpacing; } this._setPositionForHierarchy(childNode, pos, childNodeLevel); this._validataPositionAndContinue(childNode, childNodeLevel, pos); @@ -41072,8 +41628,8 @@ return /******/ (function(modules) { // webpackBootstrap // center the parent nodes. var minPos = 1e9; var maxPos = -1e9; - for (var i = 0; i < childNodes.length; i++) { - var childNodeId = childNodes[i].id; + for (var _i7 = 0; _i7 < childNodes.length; _i7++) { + var childNodeId = childNodes[_i7].id; minPos = Math.min(minPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); maxPos = Math.max(maxPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); } @@ -41088,6 +41644,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param pos * @private */ + }, { key: '_validataPositionAndContinue', value: function _validataPositionAndContinue(node, level, pos) { @@ -41114,6 +41671,7 @@ return /******/ (function(modules) { // webpackBootstrap * node properties. * @param idArray */ + }, { key: '_indexArrayToNodes', value: function _indexArrayToNodes(idArray) { @@ -41130,12 +41688,13 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {Object} * @private */ + }, { key: '_getDistribution', value: function _getDistribution() { var distribution = {}; - var nodeId = undefined, - node = undefined; + var nodeId = void 0, + node = void 0; // 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. @@ -41165,6 +41724,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number} * @private */ + }, { key: '_getHubSize', value: function _getHubSize() { @@ -41186,6 +41746,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param hubsize * @private */ + }, { key: '_determineLevelsByHubsize', value: function _determineLevelsByHubsize() { @@ -41224,6 +41785,7 @@ return /******/ (function(modules) { // webpackBootstrap * TODO: release feature * @private */ + }, { key: '_determineLevelsCustomCallback', value: function _determineLevelsCustomCallback() { @@ -41241,7 +41803,7 @@ return /******/ (function(modules) { // webpackBootstrap _this4.hierarchicalLevels[nodeA.id] = minLevel; } - var diff = customCallback(_NetworkUtil2['default'].cloneOptions(nodeA, 'node'), _NetworkUtil2['default'].cloneOptions(nodeB, 'node'), _NetworkUtil2['default'].cloneOptions(edge, 'edge')); + var diff = customCallback(_NetworkUtil2.default.cloneOptions(nodeA, 'node'), _NetworkUtil2.default.cloneOptions(nodeB, 'node'), _NetworkUtil2.default.cloneOptions(edge, 'edge')); _this4.hierarchicalLevels[nodeB.id] = _this4.hierarchicalLevels[nodeA.id] + diff; }; @@ -41256,6 +41818,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param hubsize * @private */ + }, { key: '_determineLevelsDirected', value: function _determineLevelsDirected() { @@ -41282,6 +41845,7 @@ return /******/ (function(modules) { // webpackBootstrap * Small util method to set the minimum levels of the nodes to zero. * @private */ + }, { key: '_setMinLevelToZero', value: function _setMinLevelToZero() { @@ -41296,10 +41860,10 @@ return /******/ (function(modules) { // webpackBootstrap } // subtract the minimum from the set so we have a range starting from 0 - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - if (this.hierarchicalLevels[nodeId] !== undefined) { - this.hierarchicalLevels[nodeId] -= minLevel; + for (var _nodeId2 in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId2)) { + if (this.hierarchicalLevels[_nodeId2] !== undefined) { + this.hierarchicalLevels[_nodeId2] -= minLevel; } } } @@ -41309,6 +41873,7 @@ return /******/ (function(modules) { // webpackBootstrap * Update the bookkeeping of parent and child. * @private */ + }, { key: '_generateMap', value: function _generateMap() { @@ -41338,12 +41903,14 @@ return /******/ (function(modules) { // webpackBootstrap * @param startingNodeId * @private */ + }, { key: '_crawlNetwork', - value: function _crawlNetwork(callback, startingNodeId) { + value: function _crawlNetwork() { var _this7 = this; - if (callback === undefined) callback = function () {}; + var callback = arguments.length <= 0 || arguments[0] === undefined ? function () {} : arguments[0]; + var startingNodeId = arguments[1]; var progress = {}; var treeIndex = 0; @@ -41357,7 +41924,7 @@ return /******/ (function(modules) { // webpackBootstrap } progress[node.id] = true; - var childNode = undefined; + var childNode = void 0; for (var i = 0; i < node.edges.length; i++) { if (node.edges[i].connected === true) { if (node.edges[i].toId === node.id) { @@ -41385,12 +41952,12 @@ return /******/ (function(modules) { // webpackBootstrap } } } else { - var node = this.body.nodes[startingNodeId]; - if (node === undefined) { + var _node = this.body.nodes[startingNodeId]; + if (_node === undefined) { console.error("Node not found:", startingNodeId); return; } - crawler(node); + crawler(_node); } } @@ -41400,6 +41967,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param diff * @private */ + }, { key: '_shiftBlock', value: function _shiftBlock(parentId, diff) { @@ -41422,6 +41990,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {{foundParent, withChild}} * @private */ + }, { key: '_findCommonParent', value: function _findCommonParent(childA, childB) { @@ -41431,20 +42000,20 @@ return /******/ (function(modules) { // webpackBootstrap var iterateParents = function iterateParents(parents, child) { if (_this8.hierarchicalParentReference[child] !== undefined) { for (var i = 0; i < _this8.hierarchicalParentReference[child].length; i++) { - var _parent = _this8.hierarchicalParentReference[child][i]; - parents[_parent] = true; - iterateParents(parents, _parent); + var parent = _this8.hierarchicalParentReference[child][i]; + parents[parent] = true; + iterateParents(parents, parent); } } }; var findParent = function findParent(parents, child) { if (_this8.hierarchicalParentReference[child] !== undefined) { for (var i = 0; i < _this8.hierarchicalParentReference[child].length; i++) { - var _parent2 = _this8.hierarchicalParentReference[child][i]; - if (parents[_parent2] !== undefined) { - return { foundParent: _parent2, withChild: child }; + var parent = _this8.hierarchicalParentReference[child][i]; + if (parents[parent] !== undefined) { + return { foundParent: parent, withChild: child }; } - var branch = findParent(parents, _parent2); + var branch = findParent(parents, parent); if (branch.foundParent !== null) { return branch; } @@ -41464,6 +42033,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param level * @private */ + }, { key: '_setPositionForHierarchy', value: function _setPositionForHierarchy(node, position, level) { @@ -41496,6 +42066,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {number|*} * @private */ + }, { key: '_getPositionForHierarchy', value: function _getPositionForHierarchy(node) { @@ -41511,6 +42082,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodeArray * @private */ + }, { key: '_sortNodeArray', value: function _sortNodeArray(nodeArray) { @@ -41529,28 +42101,27 @@ return /******/ (function(modules) { // webpackBootstrap }]); return LayoutEngine; - })(); + }(); - exports['default'] = LayoutEngine; - module.exports = exports['default']; + exports.default = LayoutEngine; /***/ }, -/* 109 */ +/* 110 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, '__esModule', { + Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var util = __webpack_require__(1); - var Hammer = __webpack_require__(20); - var hammerUtil = __webpack_require__(24); + var Hammer = __webpack_require__(22); + var hammerUtil = __webpack_require__(25); /** * clears the toolbar div element of children @@ -41558,7 +42129,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ - var ManipulationSystem = (function () { + var ManipulationSystem = function () { function ManipulationSystem(body, canvas, selectionHandler) { var _this = this; @@ -41615,6 +42186,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ + _createClass(ManipulationSystem, [{ key: '_restore', value: function _restore() { @@ -41631,6 +42203,7 @@ return /******/ (function(modules) { // webpackBootstrap * Set the Options * @param options */ + }, { key: 'setOptions', value: function setOptions(options, allOptions, globalOptions) { @@ -41666,6 +42239,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'toggleEditMode', value: function toggleEditMode() { @@ -41707,6 +42281,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: 'showManipulatorToolbar', value: function showManipulatorToolbar() { @@ -41787,6 +42362,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Create the toolbar for adding Nodes */ + }, { key: 'addNodeMode', value: function addNodeMode() { @@ -41816,6 +42392,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * call the bound function to handle the editing of the node. The node has to be selected. */ + }, { key: 'editNode', value: function editNode() { @@ -41862,6 +42439,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * create the toolbar to connect nodes */ + }, { key: 'addEdgeMode', value: function addEdgeMode() { @@ -41898,6 +42476,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * create the toolbar to edit edges */ + }, { key: 'editEdgeMode', value: function editEdgeMode() { @@ -41973,6 +42552,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * delete everything in the selection */ + }, { key: 'deleteSelected', value: function deleteSelected() { @@ -42039,6 +42619,7 @@ return /******/ (function(modules) { // webpackBootstrap * draw or remove the DOM * @private */ + }, { key: '_setup', value: function _setup() { @@ -42064,6 +42645,7 @@ return /******/ (function(modules) { // webpackBootstrap * create the div overlays that contain the DOM * @private */ + }, { key: '_createWrappers', value: function _createWrappers() { @@ -42107,6 +42689,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*} * @private */ + }, { key: '_getNewTargetNode', value: function _getNewTargetNode(x, y) { @@ -42128,6 +42711,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Create the edit button */ + }, { key: '_createEditButton', value: function _createEditButton() { @@ -42153,6 +42737,7 @@ return /******/ (function(modules) { // webpackBootstrap * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed. * @private */ + }, { key: '_clean', value: function _clean() { @@ -42185,6 +42770,7 @@ return /******/ (function(modules) { // webpackBootstrap * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up. * @private */ + }, { key: '_cleanManipulatorHammers', value: function _cleanManipulatorHammers() { @@ -42201,6 +42787,7 @@ return /******/ (function(modules) { // webpackBootstrap * Remove all DOM elements created by this module. * @private */ + }, { key: '_removeManipulationDOM', value: function _removeManipulationDOM() { @@ -42234,6 +42821,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param index * @private */ + }, { key: '_createSeperator', value: function _createSeperator() { @@ -42293,6 +42881,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function _createButton(id, className, label) { var labelClassName = arguments.length <= 3 || arguments[3] === undefined ? 'vis-label' : arguments[3]; + this.manipulationDOM[id + 'Div'] = document.createElement('div'); this.manipulationDOM[id + 'Div'].className = className; this.manipulationDOM[id + 'Label'] = document.createElement('div'); @@ -42315,6 +42904,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param newFunction * @private */ + }, { key: '_temporaryBindEvent', value: function _temporaryBindEvent(event, newFunction) { @@ -42328,6 +42918,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param newFunction * @private */ + }, { key: '_temporaryBindUI', value: function _temporaryBindUI(UIfunctionName, newFunction) { @@ -42344,6 +42935,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_unbindTemporaryUIs', value: function _unbindTemporaryUIs() { @@ -42360,6 +42952,7 @@ return /******/ (function(modules) { // webpackBootstrap * Unbind the events created by _temporaryBindEvent * @private */ + }, { key: '_unbindTemporaryEvents', value: function _unbindTemporaryEvents() { @@ -42376,6 +42969,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param domElement * @param funct */ + }, { key: '_bindHammerToDiv', value: function _bindHammerToDiv(domElement, boundFunction) { @@ -42388,6 +42982,7 @@ return /******/ (function(modules) { // webpackBootstrap * Neatly clean up temporary edges and nodes * @private */ + }, { key: '_cleanupTemporaryNodesAndEdges', value: function _cleanupTemporaryNodesAndEdges() { @@ -42402,9 +42997,9 @@ return /******/ (function(modules) { // webpackBootstrap } // _clean temporary nodes - for (var i = 0; i < this.temporaryIds.nodes.length; i++) { - delete this.body.nodes[this.temporaryIds.nodes[i]]; - var indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]); + for (var _i = 0; _i < this.temporaryIds.nodes.length; _i++) { + delete this.body.nodes[this.temporaryIds.nodes[_i]]; + var indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[_i]); if (indexTempNode !== -1) { this.body.nodeIndices.splice(indexTempNode, 1); } @@ -42420,6 +43015,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: '_controlNodeTouch', value: function _controlNodeTouch(event) { @@ -42433,6 +43029,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: '_controlNodeDragStart', value: function _controlNodeDragStart(event) { @@ -42467,6 +43064,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: '_controlNodeDrag', value: function _controlNodeDrag(event) { @@ -42490,6 +43088,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: '_controlNodeDragEnd', value: function _controlNodeDragEnd(event) { @@ -42539,6 +43138,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_handleConnect', value: function _handleConnect(event) { @@ -42602,6 +43202,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param event * @private */ + }, { key: '_finishConnect', value: function _finishConnect(event) { @@ -42648,6 +43249,7 @@ return /******/ (function(modules) { // webpackBootstrap /** * Adds a node on the specified location */ + }, { key: '_performAddNode', value: function _performAddNode(clickData) { @@ -42684,6 +43286,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_performAddEdge', value: function _performAddEdge(sourceNodeId, targetNodeId) { @@ -42715,6 +43318,7 @@ return /******/ (function(modules) { // webpackBootstrap * * @private */ + }, { key: '_performEditEdge', value: function _performEditEdge(sourceNodeId, targetNodeId) { @@ -42746,15 +43350,19 @@ return /******/ (function(modules) { // webpackBootstrap }]); return ManipulationSystem; - })(); + }(); - exports['default'] = ManipulationSystem; - module.exports = exports['default']; + exports.default = ManipulationSystem; /***/ }, -/* 110 */ +/* 111 */ /***/ function(module, exports) { + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); /** * This object contains all possible options. It will check if the types are correct, if required if the option is one * of the allowed values. @@ -42762,11 +43370,6 @@ return /******/ (function(modules) { // webpackBootstrap * __any__ means that the name of the property does not matter. * __type__ is a required field for all objects and contains the allowed types of all objects */ - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); var string = 'string'; var boolean = 'boolean'; var number = 'number'; @@ -43271,27 +43874,27 @@ return /******/ (function(modules) { // webpackBootstrap exports.configureOptions = configureOptions; /***/ }, -/* 111 */ +/* 112 */ /***/ function(module, exports, __webpack_require__) { - // distance finding algorithm "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); + var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // distance finding algorithm - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var _FloydWarshall = __webpack_require__(113); - var _componentsAlgorithmsFloydWarshallJs = __webpack_require__(112); + var _FloydWarshall2 = _interopRequireDefault(_FloydWarshall); - var _componentsAlgorithmsFloydWarshallJs2 = _interopRequireDefault(_componentsAlgorithmsFloydWarshallJs); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * KamadaKawai positions the nodes initially based on @@ -43302,14 +43905,14 @@ return /******/ (function(modules) { // webpackBootstrap * Possible optimizations in the distance calculation can be implemented. */ - var KamadaKawai = (function () { + var KamadaKawai = function () { function KamadaKawai(body, edgeLength, edgeStrength) { _classCallCheck(this, KamadaKawai); this.body = body; this.springLength = edgeLength; this.springConstant = edgeStrength; - this.distanceSolver = new _componentsAlgorithmsFloydWarshallJs2["default"](); + this.distanceSolver = new _FloydWarshall2.default(); } /** @@ -43317,6 +43920,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param options */ + _createClass(KamadaKawai, [{ key: "setOptions", value: function setOptions(options) { @@ -43335,6 +43939,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param nodesArray * @param edgesArray */ + }, { key: "solve", value: function solve(nodesArray, edgesArray) { @@ -43368,12 +43973,12 @@ return /******/ (function(modules) { // webpackBootstrap var _getHighestEnergyNode2 = this._getHighestEnergyNode(ignoreClusters); - var _getHighestEnergyNode22 = _slicedToArray(_getHighestEnergyNode2, 4); + var _getHighestEnergyNode3 = _slicedToArray(_getHighestEnergyNode2, 4); - highE_nodeId = _getHighestEnergyNode22[0]; - maxEnergy = _getHighestEnergyNode22[1]; - dE_dx = _getHighestEnergyNode22[2]; - dE_dy = _getHighestEnergyNode22[3]; + highE_nodeId = _getHighestEnergyNode3[0]; + maxEnergy = _getHighestEnergyNode3[1]; + dE_dx = _getHighestEnergyNode3[2]; + dE_dy = _getHighestEnergyNode3[3]; delta_m = maxEnergy; subIterations = 0; @@ -43383,11 +43988,11 @@ return /******/ (function(modules) { // webpackBootstrap var _getEnergy2 = this._getEnergy(highE_nodeId); - var _getEnergy22 = _slicedToArray(_getEnergy2, 3); + var _getEnergy3 = _slicedToArray(_getEnergy2, 3); - delta_m = _getEnergy22[0]; - dE_dx = _getEnergy22[1]; - dE_dy = _getEnergy22[2]; + delta_m = _getEnergy3[0]; + dE_dx = _getEnergy3[1]; + dE_dy = _getEnergy3[2]; } } } @@ -43397,6 +44002,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*[]} * @private */ + }, { key: "_getHighestEnergyNode", value: function _getHighestEnergyNode(ignoreClusters) { @@ -43411,13 +44017,13 @@ return /******/ (function(modules) { // webpackBootstrap var m = nodesArray[nodeIdx]; // by not evaluating nodes with predefined positions we should only move nodes that have no positions. if (nodes[m].predefinedPosition === false || nodes[m].isCluster === true && ignoreClusters === true || nodes[m].options.fixed.x === true || nodes[m].options.fixed.y === true) { - var _getEnergy3 = this._getEnergy(m); + var _getEnergy4 = this._getEnergy(m); - var _getEnergy32 = _slicedToArray(_getEnergy3, 3); + var _getEnergy5 = _slicedToArray(_getEnergy4, 3); - var delta_m = _getEnergy32[0]; - var dE_dx = _getEnergy32[1]; - var dE_dy = _getEnergy32[2]; + var delta_m = _getEnergy5[0]; + var dE_dx = _getEnergy5[1]; + var dE_dy = _getEnergy5[2]; if (maxEnergy < delta_m) { maxEnergy = delta_m; @@ -43437,6 +44043,7 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {*[]} * @private */ + }, { key: "_getEnergy", value: function _getEnergy(m) { @@ -43470,6 +44077,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param dE_dy * @private */ + }, { key: "_moveNode", value: function _moveNode(m, dE_dx, dE_dy) { @@ -43513,6 +44121,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param D_matrix * @private */ + }, { key: "_createL_matrix", value: function _createL_matrix(D_matrix) { @@ -43533,6 +44142,7 @@ return /******/ (function(modules) { // webpackBootstrap * @param D_matrix * @private */ + }, { key: "_createK_matrix", value: function _createK_matrix(D_matrix) { @@ -43550,30 +44160,29 @@ return /******/ (function(modules) { // webpackBootstrap }]); return KamadaKawai; - })(); + }(); - exports["default"] = KamadaKawai; - module.exports = exports["default"]; + exports.default = KamadaKawai; /***/ }, -/* 112 */ +/* 113 */ /***/ function(module, exports) { - /** - * Created by Alex on 10-Aug-15. - */ - "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var FloydWarshall = (function () { + /** + * Created by Alex on 10-Aug-15. + */ + + var FloydWarshall = function () { function FloydWarshall() { _classCallCheck(this, FloydWarshall); } @@ -43595,8 +44204,8 @@ return /******/ (function(modules) { // webpackBootstrap } // put the weights for the edges in. This assumes unidirectionality. - for (var i = 0; i < edgesArray.length; i++) { - var edge = edges[edgesArray[i]]; + for (var _i = 0; _i < edgesArray.length; _i++) { + var edge = edges[edgesArray[_i]]; // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) { D_matrix[edge.fromId][edge.toId] = 1; @@ -43608,10 +44217,10 @@ return /******/ (function(modules) { // webpackBootstrap // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity. for (var k = 0; k < nodeCount; k++) { - for (var i = 0; i < nodeCount - 1; i++) { - for (var j = i + 1; j < nodeCount; j++) { - D_matrix[nodesArray[i]][nodesArray[j]] = Math.min(D_matrix[nodesArray[i]][nodesArray[j]], D_matrix[nodesArray[i]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[j]]); - D_matrix[nodesArray[j]][nodesArray[i]] = D_matrix[nodesArray[i]][nodesArray[j]]; + for (var _i2 = 0; _i2 < nodeCount - 1; _i2++) { + for (var _j = _i2 + 1; _j < nodeCount; _j++) { + D_matrix[nodesArray[_i2]][nodesArray[_j]] = Math.min(D_matrix[nodesArray[_i2]][nodesArray[_j]], D_matrix[nodesArray[_i2]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[_j]]); + D_matrix[nodesArray[_j]][nodesArray[_i2]] = D_matrix[nodesArray[_i2]][nodesArray[_j]]; } } } @@ -43621,20 +44230,19 @@ return /******/ (function(modules) { // webpackBootstrap }]); return FloydWarshall; - })(); + }(); - exports["default"] = FloydWarshall; - module.exports = exports["default"]; + exports.default = FloydWarshall; /***/ }, -/* 113 */ +/* 114 */ /***/ function(module, exports) { + 'use strict'; + /** * Canvas shapes used by Network */ - 'use strict'; - if (typeof CanvasRenderingContext2D !== 'undefined') { /** @@ -43914,9 +44522,11 @@ return /******/ (function(modules) { // webpackBootstrap } /***/ }, -/* 114 */ +/* 115 */ /***/ function(module, exports) { + 'use strict'; + /** * Parse a text source containing data in DOT language into a JSON object. * The object contains two lists: one with nodes and one with edges. @@ -43930,8 +44540,6 @@ return /******/ (function(modules) { // webpackBootstrap * {Object[]} nodes * {Object[]} edges */ - 'use strict'; - function parseDOT(data) { dot = data; return parseGraph(); @@ -44812,7 +45420,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.DOTToGraph = DOTToGraph; /***/ }, -/* 115 */ +/* 116 */ /***/ function(module, exports) { 'use strict'; @@ -44889,139 +45497,13 @@ return /******/ (function(modules) { // webpackBootstrap exports.parseGephi = parseGephi; -/***/ }, -/* 116 */ -/***/ function(module, exports) { - - /** - * @class Images - * This class loads images and keeps them stored. - */ - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var Images = (function () { - function Images(callback) { - _classCallCheck(this, Images); - - this.images = {}; - this.imageBroken = {}; - this.callback = callback; - } - - /** - * @param {string} url The Url to cache the image as - * @return {Image} imageToLoadBrokenUrlOn The image object - */ - - _createClass(Images, [{ - key: "_addImageToCache", - value: function _addImageToCache(url, imageToCache) { - // IE11 fix -- thanks dponch! - if (imageToCache.width === 0) { - document.body.appendChild(imageToCache); - imageToCache.width = imageToCache.offsetWidth; - imageToCache.height = imageToCache.offsetHeight; - document.body.removeChild(imageToCache); - } - - this.images[url] = imageToCache; - } - - /** - * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image - * @param {string} brokenUrl Url the broken image to try and load - * @return {Image} imageToLoadBrokenUrlOn The image object - */ - }, { - key: "_tryloadBrokenUrl", - value: function _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) { - var _this = this; - - //If any of the parameters aren't specified then exit the function because nothing constructive can be done - if (url === undefined || brokenUrl === undefined || imageToLoadBrokenUrlOn === undefined) return; - - //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl - imageToLoadBrokenUrlOn.onerror = function () { - console.error("Could not load brokenImage:", brokenUrl); - //Add an empty image to the cache so that when subsequent load calls are made for the url we don't try load the image and broken image again - _this._addImageToCache(url, new Image()); - }; - - //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image - imageToLoadBrokenUrlOn.src = brokenUrl; - } - - /** - * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked - */ - }, { - key: "_redrawWithImage", - value: function _redrawWithImage(imageToRedrawWith) { - if (this.callback) { - this.callback(imageToRedrawWith); - } - } - - /** - * @param {string} url Url of the image - * @param {string} brokenUrl Url of an image to use if the url image is not found - * @return {Image} img The image object - */ - }, { - key: "load", - value: function load(url, brokenUrl, id) { - var _this2 = this; - - //Try and get the image from the cache, if successful then return the cached image - var cachedImage = this.images[url]; - if (cachedImage) return cachedImage; - - //Create a new image - var img = new Image(); - - //Subscribe to the event that is raised if the image loads successfully - img.onload = function () { - //Add the image to the cache and then request a redraw - _this2._addImageToCache(url, img); - _this2._redrawWithImage(img); - }; - - //Subscribe to the event that is raised if the image fails to load - img.onerror = function () { - console.error("Could not load image:", url); - //Try and load the image specified by the brokenUrl using - _this2._tryloadBrokenUrl(url, brokenUrl, img); - }; - - //Set the source of the image to the url, this is actuall what kicks off the loading of the image - img.src = url; - - //Return the new image - return img; - } - }]); - - return Images; - })(); - - exports["default"] = Images; - module.exports = exports["default"]; - /***/ }, /* 117 */ /***/ function(module, exports) { - // English 'use strict'; + // English exports['en'] = { edit: 'Edit', del: 'Delete selected', diff --git a/dist/vis.map b/dist/vis.map index 21d08c5d..2398f8f1 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"sources":["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","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","Core","DateUtil","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Images","dotparser","gephiParser","allOptions","convertDot","input","DOTToGraph","convertGephi","options","parseGephi","moment","Hammer","keycharm","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","obj","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","arguments","length","undefined","protoExtend","i","other","extend","selectiveExtend","props","Array","isArray","Error","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteTop","top","addClassName","className","classes","split","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","throttle","fn","wait","timeout","needExecution","throttled","setTimeout","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","target","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","isOk","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","global","utils_hooks__hooks","hookCallback","apply","setHookCallback","prototype","res","hasOwnProp","create_utc__createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","getParsingFlags","_pf","valid__isValid","_isValid","flags","_d","getTime","invalidWeekday","_strict","bigHour","valid__createInvalid","NaN","isUndefined","copyConfig","to","from","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","number","ceil","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","Locale","normalizeLocale","toLowerCase","chooseLocale","names","next","loadLocale","name","oldLocale","locales","globalLocale","_abbr","code","locale_locales__getSetGlobalLocale","values","data","locale_locales__getLocale","defineLocale","abbr","set","addUnitAlias","unit","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","isFunction","Function","makeGetSet","keepTime","get_set__set","get_set__get","mom","isValid","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","pow","addFormatToken","token","padded","ordinal","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","output","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","RegExp","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","localeMonthsParse","monthName","_monthsParse","_longMonthsParse","_shortMonthsParse","months","monthsShort","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","monthsShortRegex","_monthsParseExact","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecateSimple","deprecations","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","configFromString","aspNetJsonRegex","createFromInputFallback","createDate","y","M","ms","getFullYear","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","daysInYear","isLeapYear","getIsLeapYear","firstWeekOffset","dow","doy","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","defaults","currentDateArray","nowValue","now","_useUTC","getUTCMonth","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","w","weekYear","temp","weekdayOverflow","GG","W","E","local__createLocal","_week","gg","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","_meridiem","hour","meridiem","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","day","minute","second","millisecond","createFromConfig","prepareConfig","add","preparse","configFromInput","isUTC","pickBy","moments","args","Duration","duration","years","quarters","quarter","weeks","days","hours","minutes","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","offset","separator","utcOffset","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","round","getTimezoneOffset","getSetOffset","keepLocalTime","localAdjust","matchShortOffset","_changeInProgress","add_subtract__addSubtract","create__createDuration","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","parseFloat","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","moment_calendar__calendar","time","formats","sod","startOf","calendar","localInput","endOf","isBetween","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","delta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","moment_format__toISOString","inputString","defaultFormat","postformat","withoutSuffix","humanize","fromNow","toNow","newLocaleData","isoWeekday","to_type__valueOf","unix","toObject","toJSON","moment_valid__isValid","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","localeWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","localeWeekdays","_weekdays","isFormat","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","localeWeekdaysParse","weekdayName","_weekdaysParse","_minWeekdaysParse","_shortWeekdaysParse","_fullWeekdaysParse","weekdays","weekdaysShort","weekdaysMin","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","getSetDayOfYear","hFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","localeMeridiem","isLower","parseMs","getZoneAbbr","getZoneName","moment__createUnix","moment__createInZone","parseZone","locale_calendar__calendar","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","preParsePostFormat","relative__relativeTime","isFuture","_relativeTime","pastFuture","locale_set__set","_ordinalParseLenient","_ordinalParse","source","lists__get","setter","list","count","out","lists__listMonths","lists__listMonthsShort","lists__listWeekdays","lists__listWeekdaysShort","lists__listWeekdaysMin","duration_abs__abs","mathAbs","duration_add_subtract__addSubtract","duration_add_subtract__add","duration_add_subtract__subtract","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","duration_as__valueOf","makeAs","alias","duration_get__get","makeGetter","substituteTimeAgo","relativeTime","duration_humanize__relativeTime","posNegDuration","thresholds","duration_humanize__getSetRelativeTimeThreshold","threshold","limit","withSuffix","iso_string__toISOString","iso_string__abs","Y","D","asSeconds","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","defaultLocaleMonthsShort","defaultMonthsShortRegex","defaultMonthsRegex","parseTwoDigitYear","getSetYear","prototypeMin","prototypeMax","add_subtract__add","add_subtract__subtract","lang","isoWeekYear","defaultLocaleWeek","getSetDayOfMonth","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","_isPm","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","getSetMinute","getSetSecond","getSetMillisecond","momentPrototype__proto","get","isoWeeks","isoWeeksInYear","isDST","isDSTShifted","zoneAbbr","zoneName","dates","zone","momentPrototype","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultInvalidDate","defaultOrdinal","defaultOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","prototype__proto","firstDayOfYear","firstDayOfWeek","ordinalParse","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","duration_prototype__proto","toIsoString","version","invalid","relativeTimeThreshold","_moment","webpackPolyfill","paths","children","webpackContext","req","resolve","buf","ii","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","n","rnds","random","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","groupTemplate","labelObj","point","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","width","height","rect","_options","_fieldId","fieldId","_type","_subscribers","setOptions","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","ids","firstType","returnType","allowedValues","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","fieldType","exists","types","raw","converted","JSON","stringify","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","context","entry","clearTimeout","_ids","_onEvent","setData","refresh","oldIds","newIds","added","removed","viewOptions","getArguments","defaultFilter","dataSet","updated","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","setArmRotation","setArmLength","eye","dataTable","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","axisColor","gridColor","dataColor","fill","stroke","strokeWidth","dotSizeRatio","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","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","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","getNumberOfColumns","getNumberOfRows","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","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","position","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","setCameraPosition","horizontal","vertical","distance","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","start","getCurrent","end","textAlign","textBaseline","fillText","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","prettyStep","text","xText","yText","zText","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","cross","topSideVisible","zAvg","lineJoin","lineCap","transBottom","dist","sortDepth","aDiff","bDiff","crossproduct","crossProduct","_getStrokeWidth","radius","arc","PI","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","parameters","emit","boundingRect","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","mixin","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","listeners","hasListeners","sub","sum","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","progress","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","log","LN10","step1","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","throttleRedraw","orientation","axis","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","getScale","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","oncontextmenu","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","Configurator","Validator","printStyle","configureOptions","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","focus","itemData","_this","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","show","repositionX","getWidthLeft","getWidthRight","dataset","centerContainer","itemFromTarget","group","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","foreground","labelSet","groupId","pageX","srcEvent","pageY","propagating","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_firstTarget","hammer","events","propagatedHandler","_handled","stopped","stopPropagation","srcStop","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","o","assign","wrapper","pointerType","isFirst","handler","eventType","hammers","idx","exportName","setTimeoutContext","bindFn","invokeArrayArg","arg","each","iterator","message","deprecationMessage","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","str","find","inArray","src","findByKey","uniqueArray","results","prefixed","property","prefix","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","enable","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","angle","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","atan2","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","allow","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","touch","mouse","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","handlers","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","nextKey","dest","merge","MOBILE_REGEX","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","getTouchAction","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","process","reset","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","force","curRecognizer","existing","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","dragging","ease","done","_applyRange","updateHiddenDates","newStart","newEnd","getRange","conversion","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","pointer","pointerDate","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","onTouch","onRelease","offTouch","offRelease","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","runUntil","dayOffset","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","timeOffset","requiredDuration","previousPoint","correctionEnabled","hammerUtil","Activator","onMouseWheel","isActive","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","initialDrawDone","_redrawTimer","scrollTop","scrollTopMin","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","_origRedraw","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","MAX_REDRAW","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","align","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","touchParams","groupTouchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","groupHammer","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","addCallback","dirty","displayed","hide","unselect","select","rawVisibleItems","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","restack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","removeItem","_getType","selected","_removeItem","groupData","groupOptions","oldGroupId","oldSubGroupId","subgroup","oldGroup","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","initialX","dragLeft","_cloneItemData","dragRight","selectedItem","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","ctrlKey","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","updateTimeAllowed","initialStart","initialEnd","newOffset","_moveToGroup","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","shiftKey","oldSelection","newSelection","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemSetFromTarget","minimumStep","autoScale","FORMAT","minorLabels","majorLabels","setMoment","setFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","isMajor","getLabelMinor","getLabelMajor","getClassName","even","today","currentWeek","currentMonth","currentYear","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","byStart","byEnd","checkRangedItems","inner","marker","Element","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","limitSize","customOrderedItems","_updateVisibleItems","nostack","_calculateHeight","offsetTop","repositionY","resetSubgroups","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","itemIndex","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","isVisible","EPSILON","aTime","bTime","iMax","collidingItem","jj","collision","newTop","baseClassName","_updateContents","_updateTitle","_updateDataAttributes","_updateStyle","getComputedStyle","maxWidth","_repaintDeleteButton","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","groupChanged","deleteButton","template","_contentToString","removeAttribute","dataAttributes","attributes","setAttribute","outerHTML","itemSetHeight","marginLeft","onTop","itemSubgroup","totalHeight","newHeight","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","nextIsMajor","prevWidth","labelMinor","xFirstMajorLabel","MAX","showMinorGrid","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","nodeValue","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","display","unbind","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","eventParams","drag","warned","substring","showCurrentTime","currentTimeTimer","_interopRequireDefault","__esModule","default","_classCallCheck","instance","Constructor","defineProperty","_createClass","defineProperties","descriptor","enumerable","configurable","writable","protoProps","staticProps","_ColorPicker","_ColorPicker2","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","_removePopup","_clean","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseover","onmouseout","optionsContainer","_push","_showPopupIfNeeded","path","_arguments","_this2","_len","_key","_ret2","div","objectLabel","selectedValue","_update","_makeLabel","err","popupString","popupValue","oninput","_setupPopup","_this3","html","hideTimeout","deleteTimeout","_this4","correspondingElement","checkbox","checked","_this5","defaultColor","_showColorPicker","_this6","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","getOptions","ColorPicker","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_bindHammer","_setSize","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","rgbObj","alpha","_setColor","_generateHueCircle","storePrevious","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","pinch","_moveSelector","sat","hfac","sfac","fillRect","getImageData","centerY","centerX","newLeft","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","localSearch","findInOptions","globalSearch","localSearchThreshold","globalSearchThreshold","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","matrix","boolean","any","function","null","groupsDraggable","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","Bars","Lines","Points","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","groupCounts","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","stepSize","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","amount","resolved","accumulatedNegative","accumulatedPositive","pointData","groupLabel","_getStackedYRange","xpos","getGroupTemplate","callbackResult","getCallback","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","bp1","bp2","normalization","d1","d2","d3","A","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","nodes","nodeIndices","edges","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","view","bindEventListeners","images","_modulesGroups2","_modulesCanvas2","selectionHandler","_modulesSelectionHandler2","interactionHandler","_modulesInteractionHandler2","_modulesView2","renderer","_modulesCanvasRenderer2","_modulesPhysicsEngine2","layoutEngine","_modulesLayoutEngine2","clustering","_modulesClustering2","manipulation","_modulesManipulationSystem2","nodesHandler","_modulesNodesHandler2","edgesHandler","_modulesEdgesHandler2","_modulesKamadaKawaiJs2","_modulesGroups","_modulesNodesHandler","_modulesEdgesHandler","_modulesPhysicsEngine","_modulesClustering","_modulesCanvasRenderer","_modulesCanvas","_modulesView","_modulesInteractionHandler","_modulesSelectionHandler","_modulesLayoutEngine","_modulesManipulationSystem","_sharedConfigurator","_sharedConfigurator2","_sharedValidator","_sharedValidator2","_optionsJs","_modulesKamadaKawaiJs","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","Groups","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","_componentsNode","_componentsNode2","_componentsSharedLabel","_componentsSharedLabel2","NodesHandler","nodesListeners","borderWidthSelected","brokenImage","fixed","face","strokeColor","image","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shape","shapeProperties","borderDashes","useImageSize","useBorderWithImage","parseOptions","updateShape","updateLabelModule","_reset","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","constructorClass","clearPositions","dataArray","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","_sharedLabel","_sharedLabel2","_nodesShapesBox","_nodesShapesBox2","_nodesShapesCircle","_nodesShapesCircle2","_nodesShapesCircularImage","_nodesShapesCircularImage2","_nodesShapesDatabase","_nodesShapesDatabase2","_nodesShapesDiamond","_nodesShapesDiamond2","_nodesShapesDot","_nodesShapesDot2","_nodesShapesEllipse","_nodesShapesEllipse2","_nodesShapesIcon","_nodesShapesIcon2","_nodesShapesImage","_nodesShapesImage2","_nodesShapesSquare","_nodesShapesSquare2","_nodesShapesStar","_nodesShapesStar2","_nodesShapesText","_nodesShapesText2","_nodesShapesTriangle","_nodesShapesTriangle2","_nodesShapesTriangleDown","_nodesShapesTriangleDown2","Node","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","imageObj","load","distanceToBorder","sizeDiff","fontDiff","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","_slicedToArray","sliceIterator","_arr","_n","_e","_s","Symbol","Label","pointToSelf","fontOptions","yLine","nodeOptions","labelDirty","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","lineMargin","fontSize","_getColor2","_getColor","_getColor22","fontColor","_setAlignment2","_setAlignment","_setAlignment22","lineCount","strokeText","_processLabel","measureText","newOptionsArray","_inherits","subClass","superClass","setPrototypeOf","__proto__","_get","_x","_x2","_x3","_again","receiver","desc","getOwnPropertyDescriptor","getPrototypeOf","_utilNodeBase","_utilNodeBase2","Box","_NodeBase","textSize","getTextSize","selectionLineWidth","roundRect","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","NodeBase","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","_utilCircleImageBase","_utilCircleImageBase2","Circle","_CircleImageBase","diameter","_drawRawCircle","CircleImageBase","labelOffset","imageLoaded","ratio","neutralborderWidth","globalAlpha","can2","ctx2","drawImage","iterations","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","Database","database","_distanceToBorder","_utilShapeBase","_utilShapeBase2","Diamond","_ShapeBase","_resizeShape","_drawShape","ShapeBase","sizeMultiplier","Dot","Ellipse","ellipse","Icon","_icon","iconTextSpacing","Image","Square","Star","Text","Triangle","TriangleDown","_componentsEdge","_componentsEdge2","EdgesHandler","edgesListeners","arrows","scaleFactor","arrowStrikethrough","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","markAllEdgesAsDirty","updateEdgeType","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","cleanup","edgeType","colorDirty","_edgesCubicBezierEdge","_edgesCubicBezierEdge2","_edgesBezierEdgeDynamic","_edgesBezierEdgeDynamic2","_edgesBezierEdgeStatic","_edgesBezierEdgeStatic2","_edgesStraightEdge","_edgesStraightEdge2","Edge","baseWidth","connected","_setInteractionWidths","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","core","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","percentage","colorsDefined","_x4","_x5","_utilCubicBezierEdgeBase","_utilCubicBezierEdgeBase2","CubicBezierEdge","_CubicBezierEdgeBase","viaNodes","via1","via2","bezierCurveTo","x1","y1","x2","y2","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref32","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","via","EdgeBase","getColor","getLineWidth","_drawDashedLine","_drawLine","_line","_getCircleData2","_getCircleData","_getCircleData22","_circle","pattern","lineDashOffset","_getCircleData3","_getCircleData32","dashedLine","_getCircleData4","_getCircleData42","_findBorderPosition","_findBorderPositionCircle","_getCircleData5","_getCircleData52","colorOptions","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","_getCircleData6","_getCircleData62","px","py","something","u","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData7","_getCircleData72","xi","yi","arrowCore","arrow","_utilBezierEdgeBase","_utilBezierEdgeBase2","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","_x6","BezierEdgeStatic","xVia","yVia","pi","originalAngle","myAngle","_utilEdgeBase","_utilEdgeBase2","StraightEdge","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","_componentsPhysicsBarnesHutSolver","_componentsPhysicsBarnesHutSolver2","_componentsPhysicsRepulsionSolver","_componentsPhysicsRepulsionSolver2","_componentsPhysicsHierarchicalRepulsionSolver","_componentsPhysicsHierarchicalRepulsionSolver2","_componentsPhysicsSpringSolver","_componentsPhysicsSpringSolver2","_componentsPhysicsHierarchicalSpringSolver","_componentsPhysicsHierarchicalSpringSolver2","_componentsPhysicsCentralGravitySolver","_componentsPhysicsCentralGravitySolver2","_componentsPhysicsFA2BasedRepulsionSolver","_componentsPhysicsFA2BasedRepulsionSolver2","_componentsPhysicsFA2BasedCentralGravitySolver","_componentsPhysicsFA2BasedCentralGravitySolver2","PhysicsEngine","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","dpos","reference","maxNodeVelocity","averageNodeVelocity","velocityAdaptiveThreshold","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","colorFactor","forceSize","arrowSize","BarnesHutSolver","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","minimumTreeSize","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","steepness","SpringSolver","edgeLength","node3","_calculateSpringForce","springForce","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","_BarnesHutSolver2","_BarnesHutSolver3","ForceAtlas2BasedRepulsionSolver","_BarnesHutSolver","degree","_CentralGravitySolver2","_CentralGravitySolver3","ForceAtlas2BasedCentralGravitySolver","_CentralGravitySolver","_NetworkUtil","_NetworkUtil2","_componentsNodesCluster","_componentsNodesCluster2","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","clusterEdgeProperties","childNode","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","_backupEdgeOptions","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","NetworkUtil","allNodes","specificNodes","amountOfConnections","_Node2","_Node3","Cluster","_Node","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","_componentsNavigationHandler","_componentsNavigationHandler2","_componentsPopup","_componentsPopup2","InteractionHandler","navigationHandler","popup","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent2","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","setPosition","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","getTitle","overlappingEdges","popupTargetType","popupTargetId","setText","_pointerToPositionObject","stillOnObj","overNode","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","Popup","doShow","SelectionHandler","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","_getAllEdgesOverlappingWith","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","MAX_LEVELS","clusterThreshold","startLength","before","clusterBridges","after","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","definedPositions","undefinedLevel","hierarchicalLevels","lastNodeOnLevel","hierarchicalChildrenReference","hierarchicalParentReference","hierarchicalTrees","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTrees","treeSizes","getTreeSizes","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode22","minSpaceNode","maxSpaceNode","getMaxLevel","getCollisionLevel","maxLevel1","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","levels","centerParents","levelNodes","branchShiftCallback","centerParent","diffAbs","branchNodes1","branchNodes2","_getBranchBoundary","_getBranchBoundary2","max1","_getBranchBoundary3","_getBranchBoundary32","min2","minSpace2","diffBranch","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","moveBranch","branchNodes","_getBranchBoundary4","_getBranchBoundary42","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode3","_getSpaceAroundNode32","newPosition","minimizeEdgeLengthBottomUp","shiftBranchesCloserBottomUp","centerAllParents","centerAllParentsBottomUp","useMap","prevNode","prevPos","nextNode","nextPos","parents","parentId","minPos","maxPos","_getSpaceAroundNode4","_getSpaceAroundNode42","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validataPositionAndContinue","parentLevel","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","nodeA","nodeB","_crawlNetwork","minLevel","customCallback","levelByDirection","levelA","_setMinLevelToZero","fillInRelations","startingNodeId","_this7","crawler","tree","childA","childB","_this8","iterateParents","_parent","findParent","_parent2","foundParent","doNotUpdate","ManipulationSystem","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","addNode","addEdge","editEdge","deleteNode","deleteEdge","controlNodeStyle","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","edgeBeingEditedId","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","lastTouch","fromSelect","toSelect","overlappingNodeIds","_performEditEdge","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","_componentsAlgorithmsFloydWarshallJs","_componentsAlgorithmsFloydWarshallJs2","KamadaKawai","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","innerThreshold","maxInnerIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode22","_moveNode","_getEnergy2","_getEnergy","_getEnergy22","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy3","_getEnergy32","x_m","y_m","iIdx","x_i","y_i","denominator","K_matrix","L_matrix","d2E_dx2","d2E_dxdy","d2E_dy2","FloydWarshall","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xl","yl","xr","yr","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","setValue","graphs","attr","getToken","tokenType","TOKENTYPE","NULL","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","maxLength","forEach2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","imageBroken","url","imageToCache","brokenUrl","imageToLoadBrokenUrlOn","onerror","_addImageToCache","imageToRedrawWith","cachedImage","img","onload","_redrawWithImage","_tryloadBrokenUrl","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError"],"mappings":"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","file":"vis.map"} \ No newline at end of file +{"version":3,"sources":["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","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","Core","DateUtil","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Images","dotparser","gephiParser","allOptions","convertDot","input","DOTToGraph","convertGephi","options","parseGephi","moment","Hammer","keycharm","_typeof","Symbol","iterator","obj","constructor","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","arguments","length","undefined","protoExtend","i","other","extend","selectiveExtend","props","Array","isArray","Error","selectiveDeepExtend","TypeError","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteTop","top","addClassName","className","classes","split","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","throttle","fn","wait","timeout","needExecution","throttled","setTimeout","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","target","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","isOk","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","global","utils_hooks__hooks","hookCallback","apply","setHookCallback","prototype","res","hasOwnProp","create_utc__createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","getParsingFlags","_pf","valid__isValid","_isValid","flags","_d","getTime","invalidWeekday","_strict","bigHour","valid__createInvalid","NaN","isUndefined","copyConfig","to","from","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","number","ceil","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecateSimple","name","deprecations","isFunction","Function","isObject","locale_set__set","_config","_ordinalParseLenient","RegExp","_ordinalParse","source","mergeConfigs","parentConfig","childConfig","Locale","set","normalizeLocale","toLowerCase","chooseLocale","names","next","loadLocale","oldLocale","locales","globalLocale","_abbr","code","locale_locales__getSetGlobalLocale","values","data","locale_locales__getLocale","defineLocale","abbr","parentLocale","updateLocale","locale_locales__listLocales","addUnitAlias","unit","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","makeGetSet","keepTime","get_set__set","get_set__get","mom","isValid","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","pow","addFormatToken","token","padded","ordinal","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","output","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","localeMonthsParse","monthName","_monthsParse","_longMonthsParse","_shortMonthsParse","months","monthsShort","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","monthsShortRegex","_monthsParseExact","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","configFromString","aspNetJsonRegex","createFromInputFallback","createDate","y","M","ms","getFullYear","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","daysInYear","isLeapYear","getIsLeapYear","firstWeekOffset","dow","doy","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","defaults","currentDateArray","nowValue","now","_useUTC","getUTCMonth","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","w","weekYear","temp","weekdayOverflow","GG","W","E","local__createLocal","_week","gg","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","_meridiem","hour","meridiem","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","day","minute","second","millisecond","createFromConfig","prepareConfig","add","preparse","configFromInput","isUTC","pickBy","moments","args","Duration","duration","years","quarters","quarter","weeks","days","hours","minutes","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","offset","separator","utcOffset","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","round","getTimezoneOffset","getSetOffset","keepLocalTime","localAdjust","matchShortOffset","_changeInProgress","add_subtract__addSubtract","create__createDuration","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","parseFloat","positiveMomentsDifference","base","isAfter","isBefore","absRound","createAdder","direction","period","dur","tmp","isAdding","moment_calendar__calendar","time","formats","sod","startOf","calendar","localInput","endOf","isBetween","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","delta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","moment_format__toISOString","inputString","defaultFormat","postformat","withoutSuffix","humanize","fromNow","toNow","newLocaleData","isoWeekday","to_type__valueOf","unix","toObject","toJSON","moment_valid__isValid","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","localeWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","localeWeekdays","_weekdays","isFormat","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","localeWeekdaysParse","weekdayName","_weekdaysParse","_minWeekdaysParse","_shortWeekdaysParse","_fullWeekdaysParse","weekdays","weekdaysShort","weekdaysMin","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","getSetDayOfYear","hFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","localeMeridiem","isLower","parseMs","getZoneAbbr","getZoneName","moment__createUnix","moment__createInZone","parseZone","locale_calendar__calendar","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","preParsePostFormat","relative__relativeTime","isFuture","_relativeTime","pastFuture","lists__get","setter","list","count","out","lists__listMonths","lists__listMonthsShort","lists__listWeekdays","lists__listWeekdaysShort","lists__listWeekdaysMin","duration_abs__abs","mathAbs","duration_add_subtract__addSubtract","duration_add_subtract__add","duration_add_subtract__subtract","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","duration_as__valueOf","makeAs","alias","duration_get__get","makeGetter","substituteTimeAgo","relativeTime","duration_humanize__relativeTime","posNegDuration","thresholds","duration_humanize__getSetRelativeTimeThreshold","threshold","limit","withSuffix","iso_string__toISOString","iso_string__abs","Y","D","asSeconds","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","defaultLocaleMonthsShort","defaultMonthsShortRegex","defaultMonthsRegex","parseTwoDigitYear","getSetYear","prototypeMin","prototypeMax","add_subtract__add","add_subtract__subtract","lang","isoWeekYear","defaultLocaleWeek","getSetDayOfMonth","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","_isPm","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","getSetMinute","getSetSecond","getSetMillisecond","momentPrototype__proto","get","isoWeeks","isoWeeksInYear","isDST","isDSTShifted","zoneAbbr","zoneName","dates","zone","momentPrototype","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultInvalidDate","defaultOrdinal","defaultOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","prototype__proto","firstDayOfYear","firstDayOfWeek","ordinalParse","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","duration_prototype__proto","toIsoString","version","invalid","relativeTimeThreshold","_moment","webpackPolyfill","paths","children","webpackContext","req","resolve","buf","ii","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","n","rnds","random","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","groupTemplate","labelObj","point","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","width","height","rect","_options","_fieldId","fieldId","_type","_subscribers","setOptions","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","ids","firstType","returnType","allowedValues","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","fieldType","exists","types","raw","converted","JSON","stringify","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","context","entry","clearTimeout","_ids","_onEvent","setData","refresh","oldIds","newIds","added","removed","viewOptions","getArguments","defaultFilter","dataSet","updated","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","setArmRotation","setArmLength","eye","dataTable","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","axisColor","gridColor","dataColor","fill","stroke","strokeWidth","dotSizeRatio","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","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","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","getNumberOfColumns","getNumberOfRows","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","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","position","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","setCameraPosition","horizontal","vertical","distance","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","start","getCurrent","end","textAlign","textBaseline","fillText","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","prettyStep","text","xText","yText","zText","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","cross","topSideVisible","zAvg","lineJoin","lineCap","transBottom","dist","sortDepth","aDiff","bDiff","crossproduct","crossProduct","_getStrokeWidth","radius","arc","PI","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","parameters","emit","boundingRect","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","mixin","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","listeners","hasListeners","sub","sum","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","progress","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","log","LN10","step1","step2","step5","toPrecision","getStep","_interopRequireDefault","__esModule","default","groups","forthArgument","defaultOptions","autoResize","throttleRedraw","orientation","axis","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","getScale","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","oncontextmenu","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","_Configurator","_Configurator2","_Validator","_Validator2","printStyle","configureOptions","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","focus","itemData","_this","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","show","repositionX","getWidthLeft","getWidthRight","dataset","centerContainer","itemFromTarget","group","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","foreground","labelSet","groupId","pageX","srcEvent","pageY","_classCallCheck","instance","Constructor","defineProperty","_createClass","defineProperties","descriptor","enumerable","configurable","writable","protoProps","staticProps","_ColorPicker","_ColorPicker2","Configurator","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","_removePopup","_clean","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseover","onmouseout","optionsContainer","_push","_showPopupIfNeeded","path","_arguments","_this2","_len","_key","_ret2","div","objectLabel","select","selectedValue","selected","_update","_makeLabel","err","popupString","popupValue","oninput","itemIndex","_setupPopup","_this3","html","hideTimeout","deleteTimeout","_this4","correspondingElement","checkbox","checked","_this5","defaultColor","_showColorPicker","_this6","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","_label","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","pointer","getOptions","hammerUtil","ColorPicker","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","hammer","_bindHammer","_setSize","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","_rgbaArray","rgbObj","alpha","_setColor","display","_generateHueCircle","storePrevious","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","drag","pinch","enable","onTouch","_moveSelector","sat","hfac","sfac","fillRect","getImageData","centerY","centerX","angle","atan2","newTop","newLeft","propagating","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_firstTarget","events","propagatedHandler","_handled","stopped","stopPropagation","srcStop","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","o","assign","pointerType","isFirst","handler","eventType","hammers","idx","exportName","setTimeoutContext","bindFn","invokeArrayArg","arg","each","message","deprecationMessage","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","str","find","inArray","src","findByKey","uniqueArray","results","prefixed","property","prefix","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","allow","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","touch","mouse","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","handlers","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","nextKey","dest","merge","MOBILE_REGEX","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","getTouchAction","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","process","reset","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","force","curRecognizer","existing","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","onRelease","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","Validator","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","localSearch","findInOptions","globalSearch","localSearchThreshold","globalSearchThreshold","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","_j","_j2","matrix","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","dragging","ease","done","_applyRange","updateHiddenDates","newStart","newEnd","getRange","conversion","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","pointerDate","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","runUntil","dayOffset","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","timeOffset","requiredDuration","previousPoint","correctionEnabled","Activator","onMouseWheel","isActive","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","initialDrawDone","_redrawTimer","scrollTop","scrollTopMin","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","_origRedraw","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","contentsOverflow","MAX_REDRAW","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","align","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","touchParams","groupTouchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","groupHammer","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","addCallback","dirty","displayed","hide","unselect","rawVisibleItems","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","restack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","removeItem","_getType","_removeItem","groupData","groupOptions","oldGroupId","oldSubGroupId","subgroup","oldGroup","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","initialX","dragLeft","_cloneItemData","dragRight","selectedItem","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","ctrlKey","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","updateTimeAllowed","initialStart","initialEnd","newOffset","_moveToGroup","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","shiftKey","oldSelection","newSelection","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemSetFromTarget","minimumStep","autoScale","FORMAT","minorLabels","majorLabels","setMoment","setFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","isMajor","getLabelMinor","getLabelMajor","getClassName","even","today","currentWeek","currentMonth","currentYear","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","byStart","byEnd","checkRangedItems","inner","marker","Element","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","limitSize","customOrderedItems","_updateVisibleItems","nostack","_calculateHeight","offsetTop","repositionY","resetSubgroups","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","isVisible","EPSILON","aTime","bTime","iMax","collidingItem","jj","collision","baseClassName","_updateContents","_updateTitle","_updateDataAttributes","_updateStyle","getComputedStyle","maxWidth","_repaintDeleteButton","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","groupChanged","deleteButton","template","_contentToString","removeAttribute","dataAttributes","attributes","setAttribute","outerHTML","itemSetHeight","marginLeft","onTop","itemSubgroup","totalHeight","newHeight","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","nextIsMajor","prevWidth","labelMinor","xFirstMajorLabel","MAX","showMinorGrid","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","nodeValue","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","unbind","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","eventParams","warned","substring","showCurrentTime","currentTimeTimer","boolean","any","function","null","groupsDraggable","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","Bars","Lines","Points","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","groupCounts","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","stepSize","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","amount","resolved","accumulatedNegative","accumulatedPositive","pointData","groupLabel","_getStackedYRange","xpos","getGroupTemplate","callbackResult","getCallback","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","bp1","bp2","normalization","d1","d2","d3","A","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","nodes","nodeIndices","edges","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","view","bindEventListeners","images","_Images2","_Groups2","_Canvas2","selectionHandler","_SelectionHandler2","interactionHandler","_InteractionHandler2","_View2","renderer","_CanvasRenderer2","_PhysicsEngine2","layoutEngine","_LayoutEngine2","clustering","_Clustering2","manipulation","_ManipulationSystem2","nodesHandler","_NodesHandler2","edgesHandler","_EdgesHandler2","_KamadaKawai2","_Images","_Groups","_NodesHandler","_EdgesHandler","_PhysicsEngine","_Clustering","_CanvasRenderer","_Canvas","_View","_InteractionHandler","_SelectionHandler","_LayoutEngine","_ManipulationSystem","_KamadaKawai","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","imageBroken","url","imageToCache","brokenUrl","imageToLoadBrokenUrlOn","onerror","_addImageToCache","Image","imageToRedrawWith","cachedImage","img","onload","_redrawWithImage","_tryloadBrokenUrl","Groups","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","_index","_Node","_Node2","_Label","_Label2","NodesHandler","nodesListeners","borderWidthSelected","brokenImage","fixed","face","strokeColor","image","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shape","shapeProperties","borderDashes","useImageSize","useBorderWithImage","parseOptions","updateShape","updateLabelModule","_reset","_nodeId2","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","constructorClass","clearPositions","dataArray","_node","_node2","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","_Box","_Box2","_Circle","_Circle2","_CircularImage","_CircularImage2","_Database","_Database2","_Diamond","_Diamond2","_Dot","_Dot2","_Ellipse","_Ellipse2","_Icon","_Icon2","_Image","_Image2","_Square","_Square2","_Star","_Star2","_Text","_Text2","_Triangle","_Triangle2","_TriangleDown","_TriangleDown2","Node","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","imageObj","load","distanceToBorder","sizeDiff","fontDiff","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","_slicedToArray","sliceIterator","_arr","_n","_e","_s","Label","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","nodeOptions","labelDirty","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","lineMargin","fontSize","_getColor2","_getColor","_getColor3","fontColor","_setAlignment2","_setAlignment","_setAlignment3","lineCount","strokeText","_processLabel","measureText","newOptionsArray","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","setPrototypeOf","__proto__","_NodeBase2","_NodeBase3","Box","_NodeBase","getPrototypeOf","textSize","getTextSize","selectionLineWidth","roundRect","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","NodeBase","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","_CircleImageBase2","_CircleImageBase3","Circle","_CircleImageBase","diameter","_drawRawCircle","CircleImageBase","labelOffset","imageLoaded","ratio","neutralborderWidth","globalAlpha","can2","ctx2","drawImage","iterations","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","Database","database","_distanceToBorder","_ShapeBase2","_ShapeBase3","Diamond","_ShapeBase","_resizeShape","_drawShape","ShapeBase","sizeMultiplier","Dot","Ellipse","ellipse","Icon","_icon","iconTextSpacing","Square","Star","Text","Triangle","TriangleDown","_Edge","_Edge2","EdgesHandler","edgesListeners","arrows","scaleFactor","arrowStrikethrough","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","markAllEdgesAsDirty","updateEdgeType","_edgeId","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","cleanup","edgeType","colorDirty","_CubicBezierEdge","_CubicBezierEdge2","_BezierEdgeDynamic","_BezierEdgeDynamic2","_BezierEdgeStatic","_BezierEdgeStatic2","_StraightEdge","_StraightEdge2","Edge","baseWidth","connected","_setInteractionWidths","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","core","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","percentage","colorsDefined","_CubicBezierEdgeBase2","_CubicBezierEdgeBase3","CubicBezierEdge","_CubicBezierEdgeBase","viaNodes","via1","via2","bezierCurveTo","x1","y1","x2","y2","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref4","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","via","EdgeBase","getColor","getLineWidth","_drawDashedLine","_drawLine","_line","_getCircleData2","_getCircleData","_getCircleData3","_circle","pattern","lineDashOffset","_getCircleData4","_getCircleData5","dashedLine","_getCircleData6","_getCircleData7","_x","_y","_radius","_findBorderPosition","_findBorderPositionCircle","_getCircleData8","_getCircleData9","colorOptions","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","_getCircleData10","_getCircleData11","px","py","something","u","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData12","_getCircleData13","xi","yi","arrowCore","arrow","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","BezierEdgeStatic","xVia","yVia","pi","originalAngle","myAngle","_pi","_originalAngle","_myAngle","StraightEdge","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","_BarnesHutSolver","_BarnesHutSolver2","_RepulsionSolver","_RepulsionSolver2","_HierarchicalRepulsionSolver","_HierarchicalRepulsionSolver2","_SpringSolver","_SpringSolver2","_HierarchicalSpringSolver","_HierarchicalSpringSolver2","_CentralGravitySolver","_CentralGravitySolver2","_FA2BasedRepulsionSolver","_FA2BasedRepulsionSolver2","_FA2BasedCentralGravitySolver","_FA2BasedCentralGravitySolver2","PhysicsEngine","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","dpos","reference","maxNodeVelocity","averageNodeVelocity","velocityAdaptiveThreshold","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","colorFactor","forceSize","arrowSize","BarnesHutSolver","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","minimumTreeSize","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","steepness","SpringSolver","edgeLength","node3","_calculateSpringForce","springForce","HierarchicalSpringSolver","springFx","springFy","_i2","totalFx","totalFy","_i3","correctionFx","correctionFy","_i4","_nodeId3","CentralGravitySolver","_BarnesHutSolver3","ForceAtlas2BasedRepulsionSolver","degree","_CentralGravitySolver3","ForceAtlas2BasedCentralGravitySolver","_NetworkUtil","_NetworkUtil2","_Cluster","_Cluster2","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","clusterEdgeProperties","childNode","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","_backupEdgeOptions","processProperties","childNodesOptions","childEdgesOptions","_clonedOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","_containedNode","_nodeId4","_containedNode2","_nodeId5","_containedNode3","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","NetworkUtil","allNodes","specificNodes","amountOfConnections","_Node3","Cluster","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","_NavigationHandler","_NavigationHandler2","_Popup","_Popup2","InteractionHandler","navigationHandler","popup","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent2","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","setPosition","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","getTitle","overlappingEdges","popupTargetType","popupTargetId","setText","_pointerToPositionObject","stillOnObj","overNode","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","Popup","doShow","SelectionHandler","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","_getAllEdgesOverlappingWith","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","MAX_LEVELS","clusterThreshold","startLength","before","clusterBridges","after","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","definedPositions","undefinedLevel","hierarchicalLevels","lastNodeOnLevel","hierarchicalChildrenReference","hierarchicalParentReference","hierarchicalTrees","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTrees","treeSizes","getTreeSizes","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode3","minSpaceNode","maxSpaceNode","getMaxLevel","getCollisionLevel","maxLevel1","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","levels","centerParents","levelNodes","branchShiftCallback","centerParent","diffAbs","branchNodes1","branchNodes2","_getBranchBoundary","_getBranchBoundary2","max1","_getBranchBoundary3","_getBranchBoundary4","min2","minSpace2","diffBranch","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","moveBranch","branchNodes","_getBranchBoundary5","_getBranchBoundary6","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode4","_getSpaceAroundNode5","newPosition","minimizeEdgeLengthBottomUp","shiftBranchesCloserBottomUp","centerAllParents","centerAllParentsBottomUp","useMap","prevNode","prevPos","nextNode","nextPos","parents","parentId","minPos","maxPos","_i5","_getSpaceAroundNode6","_getSpaceAroundNode7","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validataPositionAndContinue","parentLevel","_i6","childNodeLevel","_i7","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","nodeA","nodeB","_crawlNetwork","minLevel","customCallback","levelByDirection","levelA","_setMinLevelToZero","fillInRelations","_this7","startingNodeId","crawler","tree","childA","childB","_this8","iterateParents","findParent","foundParent","doNotUpdate","ManipulationSystem","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","addNode","addEdge","editEdge","deleteNode","deleteEdge","controlNodeStyle","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","edgeBeingEditedId","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","lastTouch","fromSelect","toSelect","overlappingNodeIds","_performEditEdge","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","_FloydWarshall","_FloydWarshall2","KamadaKawai","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","innerThreshold","maxInnerIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode3","_moveNode","_getEnergy2","_getEnergy","_getEnergy3","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy4","_getEnergy5","x_m","y_m","iIdx","x_i","y_i","denominator","K_matrix","L_matrix","d2E_dx2","d2E_dxdy","d2E_dy2","FloydWarshall","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xl","yl","xr","yr","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","setValue","graphs","attr","getToken","tokenType","TOKENTYPE","NULL","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","maxLength","forEach2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError"],"mappings":"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","file":"vis.map"} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index d340ccc9..80c38170 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 4.15.0 - * @date 2016-02-23 + * @version 4.15.1 + * @date 2016-03-08 * * @license * Copyright (C) 2011-2016 Almende B.V, http://almende.com @@ -22,24 +22,24 @@ * * Vis.js may be distributed under either license. */ -"use strict";!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(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.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(7),e.DataSet=i(8),e.DataView=i(10),e.Queue=i(9),e.Graph3d=i(11),e.graph3d={Camera:i(15),Filter:i(16),Point2d:i(14),Point3d:i(13),Slider:i(17),StepNumber:i(18)},e.Timeline=i(19),e.Graph2d=i(48),e.timeline={Core:i(27),DateUtil:i(26),Range:i(23),stack:i(31),TimeStep:i(29),components:{items:{Item:i(33),BackgroundItem:i(37),BoxItem:i(35),PointItem:i(36),RangeItem:i(32)},BackgroundGroup:i(34),Component:i(25),CurrentTime:i(43),CustomTime:i(41),DataAxis:i(50),DataScale:i(51),GraphGroup:i(52),Group:i(30),ItemSet:i(28),Legend:i(56),LineGraph:i(49),TimeAxis:i(38)}},e.Network=i(58),e.network={Images:i(116),dotparser:i(114),gephiParser:i(115),allOptions:i(110)},e.network.convertDot=function(t){return e.network.dotparser.DOTToGraph(t)},e.network.convertGephi=function(t,i){return e.network.gephiParser.parseGephi(t,i)},e.moment=i(2),e.Hammer=i(20),e.keycharm=i(40)},function(t,e,i){var o=i(2),n=i(6);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){var i=s.exec(t);if(i)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return n.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!=typeof t[i]&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length<=2||void 0===arguments[2]?!1:arguments[2];for(var n in t)void 0!==i[n]&&("object"!=typeof i[n]?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"==typeof t[n]&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;ii;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var n;if(void 0!==t){if(null===t)return null;if(!i)return t;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){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(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(o.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return n=s.exec(t),n?new Date(Number(n[1])):o(t).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return o(t);if(t instanceof Date)return o(t.valueOf());if(o.isMoment(t))return o(t);if(e.isString(t))return n=s.exec(t),o(n?Number(n[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(o.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return n=s.exec(t),n?new Date(Number(n[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){n=s.exec(t);var r;return r=n?new Date(Number(n[1])).valueOf():new Date(t).valueOf(),"/Date("+r+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var s=/^\/?Date\((\-?\d+)/i;e.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":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var i=[],o=0;oi;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},e.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},e.throttle=function(t,e){var i=null,o=!1;return function n(){i?o=!0:(o=!1,t(),i=setTimeout(function(){i=null,o&&n()},e))}},e.addEventListener=function(t,e,i,o){t.addEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.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},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(e.isString(t)===!0){if(e.isValidRGB(t)===!0){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(e.isValidHex(t)===!0){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t,r=t==o?3:i==o?1:5,a=60*(r-s/(n-o))/360,h=(n-o)/n,d=n;return{h:a,s:h,v:d}};var r={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return Object.keys(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=r.split(t.style.cssText),n=r.split(i),s=e.extend(o,n);t.style.cssText=r.join(s)},e.removeCssText=function(t,e){var i=r.split(t.style.cssText),o=r.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=r.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,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:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==typeof i){for(var o=Object.create(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length<=3||void 0===arguments[3]?!1:arguments[3],arguments.length<=4||void 0===arguments[4]?{}:arguments[4]);if(null===e[i])t[i]=Object.create(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;a>=r&&n>s;){var h=Math.floor((r+a)/2),d=t[h],l=void 0===o?d[i]:d[i][o],u=e(l);if(0==u)return h;-1==u?r=h+1:a=h-1,s++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=1e4,l=0,u=0,c=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:e>t?-1:1};c>=u&&d>l;){if(h=Math.floor(.5*(c+u)),s=t[Math.max(0,h-1)][i],r=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==n(r,e))return h;if(n(s,e)<0&&n(r,e)>0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?u=h+1:c=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return.5>t?2*t*t:-1+(4-2*t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return.5>t?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t}}},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(3)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return qi.apply(null,arguments)}function i(t){qi=t}function o(t){return"[object Array]"===Object.prototype.toString.call(t)}function n(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t,e){var i,o=[];for(i=0;i0)for(i in Zi)o=Zi[i],n=e[o],p(n)||(t[o]=n);return t}function v(t){f(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),Ki===!1&&(Ki=!0,e.updateOffset(this),Ki=!1)}function m(t){return t instanceof v||null!=t&&null!=t._isAMomentObject}function g(t){return 0>t?Math.ceil(t):Math.floor(t)}function y(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=g(e)),i}function b(t,e,i){var o,n=Math.min(t.length,e.length),s=Math.abs(t.length-e.length),r=0;for(o=0;n>o;o++)(i&&t[o]!==e[o]||!i&&y(t[o])!==y(e[o]))&&r++;return r+s}function _(){}function w(t){return t?t.toLowerCase().replace("_","-"):t}function x(t){for(var e,i,o,n,s=0;s0;){if(o=k(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&b(n,i,!0)>=e-1)break;e--}s++}return null}function k(e){var i=null;if(!Ji[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=Xi._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),O(i)}catch(o){}return Ji[e]}function O(t,e){var i;return t&&(i=p(e)?D(t):M(t,e),i&&(Xi=i)),Xi._abbr}function M(t,e){return null!==e?(e.abbr=t,Ji[t]=Ji[t]||new _,Ji[t].set(e),O(t),Ji[t]):(delete Ji[t],null)}function D(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Xi;if(!o(t)){if(e=k(t))return e;t=[t]}return x(t)}function C(t,e){var i=t.toLowerCase();Qi[i]=Qi[i+"s"]=Qi[e]=t}function S(t){return"string"==typeof t?Qi[t]||Qi[t.toLowerCase()]:void 0}function T(t){var e,i,o={};for(i in t)r(t,i)&&(e=S(i),e&&(o[e]=t[i]));return o}function E(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function P(t,i){return function(o){return null!=o?(N(this,t,o),e.updateOffset(this,i),this):I(this,t)}}function I(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function N(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function z(t,e){var i;if("object"==typeof t)for(i in t)this.set(i,t[i]);else if(t=S(t),E(this[t]))return this[t](e);return this}function L(t,e,i){var o=""+Math.abs(t),n=e-o.length,s=t>=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function A(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(io[t]=n),e&&(io[e[0]]=function(){return L(n.apply(this,arguments),e[1],e[2])}),i&&(io[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function R(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function F(t){var e,i,o=t.match($i);for(e=0,i=o.length;i>e;e++)io[o[e]]?o[e]=io[o[e]]:o[e]=R(o[e]);return function(n){var s="";for(e=0;i>e;e++)s+=o[e]instanceof Function?o[e].call(n,t):o[e];return s}}function B(t,e){return t.isValid()?(e=j(e,t.localeData()),eo[e]=eo[e]||F(e),eo[e](t)):t.localeData().invalidDate()}function j(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(to.lastIndex=0;o>=0&&to.test(t);)t=t.replace(to,i),to.lastIndex=0,o-=1;return t}function H(t,e,i){wo[t]=E(e)?e:function(t,o){return t&&i?i:e}}function W(t,e){return r(wo,t)?wo[t](e._strict,e._locale):new RegExp(Y(t))}function Y(t){return G(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function G(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(o=function(t,i){i[e]=y(t)}),i=0;io;o++){if(n=h([2e3,o]),i&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),i||this._monthsParse[o]||(s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[o].test(t))return o;if(i&&"MMM"===e&&this._shortMonthsParse[o].test(t))return o;if(!i&&this._monthsParse[o].test(t))return o}}function Q(t,e){var i;return t.isValid()?"string"==typeof e&&(e=t.localeData().monthsParse(e),"number"!=typeof e)?t:(i=Math.min(t.date(),X(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t):t}function $(t){return null!=t?(Q(this,t),e.updateOffset(this,!0),this):I(this,"Month")}function tt(){return X(this.year(),this.month())}function et(t){return this._monthsParseExact?(r(this,"_monthsRegex")||ot.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex}function it(t){return this._monthsParseExact?(r(this,"_monthsRegex")||ot.call(this),t?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex}function ot(){function t(t,e){return e.length-t.length}var e,i,o=[],n=[],s=[];for(e=0;12>e;e++)i=h([2e3,e]),o.push(this.monthsShort(i,"")),n.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(o.sort(t),n.sort(t),s.sort(t),e=0;12>e;e++)o[e]=G(o[e]),n[e]=G(n[e]),s[e]=G(s[e]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")$","i")}function nt(t){var e,i=t._a;return i&&-2===l(t).overflow&&(e=i[Oo]<0||i[Oo]>11?Oo:i[Mo]<1||i[Mo]>X(i[ko],i[Oo])?Mo:i[Do]<0||i[Do]>24||24===i[Do]&&(0!==i[Co]||0!==i[So]||0!==i[To])?Do:i[Co]<0||i[Co]>59?Co:i[So]<0||i[So]>59?So:i[To]<0||i[To]>999?To:-1,l(t)._overflowDayOfYear&&(ko>e||e>Mo)&&(e=Mo),l(t)._overflowWeeks&&-1===e&&(e=Eo),l(t)._overflowWeekday&&-1===e&&(e=Po),l(t).overflow=e),t}function st(t){e.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function rt(t,e){var i=!0;return a(function(){return i&&(st(t+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),i=!1),e.apply(this,arguments)},e)}function at(t,e){Ro[t]||(st(e),Ro[t]=!0)}function ht(t){var e,i,o,n,s,r,a=t._i,h=Fo.exec(a)||Bo.exec(a);if(h){for(l(t).iso=!0,e=0,i=Ho.length;i>e;e++)if(Ho[e][1].exec(h[1])){n=Ho[e][0],o=Ho[e][2]!==!1;break}if(null==n)return void(t._isValid=!1);if(h[3]){for(e=0,i=Wo.length;i>e;e++)if(Wo[e][1].exec(h[3])){s=(h[2]||" ")+Wo[e][0];break}if(null==s)return void(t._isValid=!1)}if(!o&&null!=s)return void(t._isValid=!1);if(h[4]){if(!jo.exec(h[4]))return void(t._isValid=!1);r="Z"}t._f=n+(s||"")+(r||""),kt(t)}else t._isValid=!1}function dt(t){var i=Yo.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(ht(t),void(t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t))))}function lt(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return 100>t&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function ut(t){var e=new Date(Date.UTC.apply(null,arguments));return 100>t&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function ct(t){return pt(t)?366:365}function pt(t){return t%4===0&&t%100!==0||t%400===0}function ft(){return pt(this.year())}function vt(t,e,i){var o=7+e-i,n=(7+ut(t,0,o).getUTCDay()-e)%7;return-n+o-1}function mt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=vt(t,o,n),d=1+7*(e-1)+a+h;return 0>=d?(s=t-1,r=ct(s)+d):d>ct(t)?(s=t+1,r=d-ct(t)):(s=t,r=d),{year:s,dayOfYear:r}}function gt(t,e,i){var o,n,s=vt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return 1>r?(n=t.year()-1,o=r+yt(n,e,i)):r>yt(t.year(),e,i)?(o=r-yt(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function yt(t,e,i){var o=vt(t,e,i),n=vt(t+1,e,i);return(ct(t)-o+n)/7}function bt(t,e,i){return null!=t?t:null!=e?e:i}function _t(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function wt(t){var e,i,o,n,s=[];if(!t._d){for(o=_t(t),t._w&&null==t._a[Mo]&&null==t._a[Oo]&&xt(t),t._dayOfYear&&(n=bt(t._a[ko],o[ko]),t._dayOfYear>ct(n)&&(l(t)._overflowDayOfYear=!0),i=ut(n,0,t._dayOfYear),t._a[Oo]=i.getUTCMonth(),t._a[Mo]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Do]&&0===t._a[Co]&&0===t._a[So]&&0===t._a[To]&&(t._nextDay=!0,t._a[Do]=0),t._d=(t._useUTC?ut:lt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Do]=24)}}function xt(t){var e,i,o,n,s,r,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(s=1,r=4,i=bt(e.GG,t._a[ko],gt(Pt(),1,4).year),o=bt(e.W,1),n=bt(e.E,1),(1>n||n>7)&&(h=!0)):(s=t._locale._week.dow,r=t._locale._week.doy,i=bt(e.gg,t._a[ko],gt(Pt(),s,r).year),o=bt(e.w,1),null!=e.d?(n=e.d,(0>n||n>6)&&(h=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s),1>o||o>yt(i,s,r)?l(t)._overflowWeeks=!0:null!=h?l(t)._overflowWeekday=!0:(a=mt(i,o,n,s,r),t._a[ko]=a.year,t._dayOfYear=a.dayOfYear)}function kt(t){if(t._f===e.ISO_8601)return void ht(t);t._a=[],l(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=j(t._f,t._locale).match($i)||[],i=0;i0&&l(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),io[s]?(o?l(t).empty=!1:l(t).unusedTokens.push(s),q(s,o,t)):t._strict&&!o&&l(t).unusedTokens.push(s);l(t).charsLeftOver=h-d,a.length>0&&l(t).unusedInput.push(a),l(t).bigHour===!0&&t._a[Do]<=12&&t._a[Do]>0&&(l(t).bigHour=void 0),t._a[Do]=Ot(t._locale,t._a[Do],t._meridiem),wt(t),nt(t)}function Ot(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&12>e&&(e+=12),o||12!==e||(e=0),e):e}function Mt(t){var e,i,o,n,s;if(0===t._f.length)return l(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;ns)&&(o=s,i=e));a(t,i||e)}function Dt(t){if(!t._d){var e=T(t._i);t._a=s([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),wt(t)}}function Ct(t){var e=new v(nt(St(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function St(t){var e=t._i,i=t._f;return t._locale=t._locale||D(t._l),null===e||void 0===i&&""===e?c({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),m(e)?new v(nt(e)):(o(i)?Mt(t):i?kt(t):n(e)?t._d=e:Tt(t),u(t)||(t._d=null),t))}function Tt(t){var i=t._i;void 0===i?t._d=new Date(e.now()):n(i)?t._d=new Date(+i):"string"==typeof i?dt(t):o(i)?(t._a=s(i.slice(0),function(t){return parseInt(t,10)}),wt(t)):"object"==typeof i?Dt(t):"number"==typeof i?t._d=new Date(i):e.createFromInputFallback(t)}function Et(t,e,i,o,n){var s={};return"boolean"==typeof i&&(o=i,i=void 0),s._isAMomentObject=!0,s._useUTC=s._isUTC=n,s._l=i,s._i=t,s._f=e,s._strict=o,Ct(s)}function Pt(t,e,i,o){return Et(t,e,i,o,!1)}function It(t,e){var i,n;if(1===e.length&&o(e[0])&&(e=e[0]),!e.length)return Pt();for(i=e[0],n=1;nt&&(t=-t,i="-"),i+L(~~(t/60),2)+e+L(~~t%60,2)})}function Ft(t,e){var i=(e||"").match(t)||[],o=i[i.length-1]||[],n=(o+"").match(Xo)||["-",0,0],s=+(60*n[1])+y(n[2]);return"+"===n[0]?s:-s}function Bt(t,i){var o,s;return i._isUTC?(o=i.clone(),s=(m(t)||n(t)?+t:+Pt(t))-+o,o._d.setTime(+o._d+s),e.updateOffset(o,!1),o):Pt(t).local()}function jt(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Ht(t,i){var o,n=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Ft(yo,t):Math.abs(t)<16&&(t=60*t),!this._isUTC&&i&&(o=jt(this)),this._offset=t,this._isUTC=!0,null!=o&&this.add(o,"m"),n!==t&&(!i||this._changeInProgress?oe(this,Qt(t-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?n:jt(this):null!=t?this:NaN}function Wt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Yt(t){return this.utcOffset(0,t)}function Gt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(jt(this),"m")),this}function Vt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ft(go,this._i)),this}function Ut(t){return this.isValid()?(t=t?Pt(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function qt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Xt(){if(!p(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=St(t),t._a){var e=t._isUTC?h(t._a):Pt(t._a);this._isDSTShifted=this.isValid()&&b(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Zt(){return this.isValid()?!this._isUTC:!1}function Kt(){return this.isValid()?this._isUTC:!1}function Jt(){return this.isValid()?this._isUTC&&0===this._offset:!1}function Qt(t,e){var i,o,n,s=t,a=null;return At(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(s={},e?s[e]=t:s.milliseconds=t):(a=Zo.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:y(a[Mo])*i,h:y(a[Do])*i,m:y(a[Co])*i,s:y(a[So])*i,ms:y(a[To])*i}):(a=Ko.exec(t))?(i="-"===a[1]?-1:1,s={y:$t(a[2],i),M:$t(a[3],i),d:$t(a[4],i),h:$t(a[5],i),m:$t(a[6],i),s:$t(a[7],i),w:$t(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=ee(Pt(s.from),Pt(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Lt(s),At(t)&&r(t,"_locale")&&(o._locale=t._locale),o}function $t(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function te(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function ee(t,e){var i;return t.isValid()&&e.isValid()?(e=Bt(e,t),t.isBefore(e)?i=te(t,e):(i=te(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ie(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(at(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Qt(i,o),oe(this,n,t),this}}function oe(t,i,o,n){var s=i._milliseconds,r=i._days,a=i._months;t.isValid()&&(n=null==n?!0:n,s&&t._d.setTime(+t._d+s*o),r&&N(t,"Date",I(t,"Date")+r*o),a&&Q(t,I(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function ne(t,e){var i=t||Pt(),o=Bt(i,this).startOf("day"),n=this.diff(o,"days",!0),s=-6>n?"sameElse":-1>n?"lastWeek":0>n?"lastDay":1>n?"sameDay":2>n?"nextDay":7>n?"nextWeek":"sameElse",r=e&&(E(e[s])?e[s]():e[s]);return this.format(r||this.localeData().calendar(s,this,Pt(i)))}function se(){return new v(this)}function re(t,e){var i=m(t)?t:Pt(t);return this.isValid()&&i.isValid()?(e=S(p(e)?"millisecond":e),"millisecond"===e?+this>+i:+i<+this.clone().startOf(e)):!1}function ae(t,e){var i=m(t)?t:Pt(t);return this.isValid()&&i.isValid()?(e=S(p(e)?"millisecond":e),"millisecond"===e?+i>+this:+this.clone().endOf(e)<+i):!1}function he(t,e,i){return this.isAfter(t,i)&&this.isBefore(e,i)}function de(t,e){var i,o=m(t)?t:Pt(t);return this.isValid()&&o.isValid()?(e=S(e||"millisecond"),"millisecond"===e?+this===+o:(i=+o,+this.clone().startOf(e)<=i&&i<=+this.clone().endOf(e))):!1}function le(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function ue(t,e){ -return this.isSame(t,e)||this.isBefore(t,e)}function ce(t,e,i){var o,n,s,r;return this.isValid()?(o=Bt(t,this),o.isValid()?(n=6e4*(o.utcOffset()-this.utcOffset()),e=S(e),"year"===e||"month"===e||"quarter"===e?(r=pe(this,o),"quarter"===e?r/=3:"year"===e&&(r/=12)):(s=this-o,r="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-n)/864e5:"week"===e?(s-n)/6048e5:s),i?r:g(r)):NaN):NaN}function pe(t,e){var i,o,n=12*(e.year()-t.year())+(e.month()-t.month()),s=t.clone().add(n,"months");return 0>e-s?(i=t.clone().add(n-1,"months"),o=(e-s)/(s-i)):(i=t.clone().add(n+1,"months"),o=(e-s)/(i-s)),-(n+o)}function fe(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ve(){var t=this.clone().utc();return 0s&&(e=s),He.call(this,t,e,i,o,n))}function He(t,e,i,o,n){var s=mt(t,e,i,o,n),r=ut(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function We(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Ye(t){return gt(t,this._week.dow,this._week.doy).week}function Ge(){return this._week.dow}function Ve(){return this._week.doy}function Ue(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function qe(t){var e=gt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Xe(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Ze(t,e){return o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function Ke(t){return this._weekdaysShort[t.day()]}function Je(t){return this._weekdaysMin[t.day()]}function Qe(t,e,i){var o,n,s;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;7>o;o++){if(n=Pt([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function $e(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Xe(t,this.localeData()),this.add(t-e,"d")):e}function ti(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function ei(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function ii(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function oi(){return this.hours()%12||12}function ni(t,e){A(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function si(t,e){return e._meridiemParse}function ri(t){return"p"===(t+"").toLowerCase().charAt(0)}function ai(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function hi(t,e){e[To]=y(1e3*("0."+t))}function di(){return this._isUTC?"UTC":""}function li(){return this._isUTC?"Coordinated Universal Time":""}function ui(t){return Pt(1e3*t)}function ci(){return Pt.apply(null,arguments).parseZone()}function pi(t,e,i){var o=this._calendar[t];return E(o)?o.call(e,i):o}function fi(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function vi(){return this._invalidDate}function mi(t){return this._ordinal.replace("%d",t)}function gi(t){return t}function yi(t,e,i,o){var n=this._relativeTime[i];return E(n)?n(t,e,i,o):n.replace(/%d/i,t)}function bi(t,e){var i=this._relativeTime[t>0?"future":"past"];return E(i)?i(e):i.replace(/%s/i,e)}function _i(t){var e,i;for(i in t)e=t[i],E(e)?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function wi(t,e,i,o){var n=D(),s=h().set(o,e);return n[i](s,t)}function xi(t,e,i,o,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return wi(t,e,i,n);var s,r=[];for(s=0;o>s;s++)r[s]=wi(t,s,i,n);return r}function ki(t,e){return xi(t,e,"months",12,"month")}function Oi(t,e){return xi(t,e,"monthsShort",12,"month")}function Mi(t,e){return xi(t,e,"weekdays",7,"day")}function Di(t,e){return xi(t,e,"weekdaysShort",7,"day")}function Ci(t,e){return xi(t,e,"weekdaysMin",7,"day")}function Si(){var t=this._data;return this._milliseconds=wn(this._milliseconds),this._days=wn(this._days),this._months=wn(this._months),t.milliseconds=wn(t.milliseconds),t.seconds=wn(t.seconds),t.minutes=wn(t.minutes),t.hours=wn(t.hours),t.months=wn(t.months),t.years=wn(t.years),this}function Ti(t,e,i,o){var n=Qt(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function Ei(t,e){return Ti(this,t,e,1)}function Pi(t,e){return Ti(this,t,e,-1)}function Ii(t){return 0>t?Math.floor(t):Math.ceil(t)}function Ni(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||0>=s&&0>=r&&0>=a||(s+=864e5*Ii(Li(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=g(s/1e3),h.seconds=t%60,e=g(t/60),h.minutes=e%60,i=g(e/60),h.hours=i%24,r+=g(i/24),n=g(zi(r)),a+=n,r-=Ii(Li(n)),o=g(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function zi(t){return 4800*t/146097}function Li(t){return 146097*t/4800}function Ai(t){var e,i,o=this._milliseconds;if(t=S(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+zi(e),"month"===t?i:i/12;switch(e=this._days+Math.round(Li(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function Ri(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*y(this._months/12)}function Fi(t){return function(){return this.as(t)}}function Bi(t){return t=S(t),this[t+"s"]()}function ji(t){return function(){return this._data[t]}}function Hi(){return g(this.days()/7)}function Wi(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function Yi(t,e,i){var o=Qt(t).abs(),n=Rn(o.as("s")),s=Rn(o.as("m")),r=Rn(o.as("h")),a=Rn(o.as("d")),h=Rn(o.as("M")),d=Rn(o.as("y")),l=n=s&&["m"]||s=r&&["h"]||r=a&&["d"]||a=h&&["M"]||h=d&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=i,Wi.apply(null,l)}function Gi(t,e){return void 0===Fn[t]?!1:void 0===e?Fn[t]:(Fn[t]=e,!0)}function Vi(t){var e=this.localeData(),i=Yi(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Ui(){var t,e,i,o=Bn(this._milliseconds)/1e3,n=Bn(this._days),s=Bn(this._months);t=g(o/60),e=g(t/60),o%=60,t%=60,i=g(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o,c=this.asSeconds();return c?(0>c?"-":"")+"P"+(r?r+"Y":"")+(a?a+"M":"")+(h?h+"D":"")+(d||l||u?"T":"")+(d?d+"H":"")+(l?l+"M":"")+(u?u+"S":""):"P0D"}var qi,Xi,Zi=e.momentProperties=[],Ki=!1,Ji={},Qi={},$i=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,to=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,eo={},io={},oo=/\d/,no=/\d\d/,so=/\d{3}/,ro=/\d{4}/,ao=/[+-]?\d{6}/,ho=/\d\d?/,lo=/\d\d\d\d?/,uo=/\d\d\d\d\d\d?/,co=/\d{1,3}/,po=/\d{1,4}/,fo=/[+-]?\d{1,6}/,vo=/\d+/,mo=/[+-]?\d+/,go=/Z|[+-]\d\d:?\d\d/gi,yo=/Z|[+-]\d\d(?::?\d\d)?/gi,bo=/[+-]?\d+(\.\d{1,3})?/,_o=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,wo={},xo={},ko=0,Oo=1,Mo=2,Do=3,Co=4,So=5,To=6,Eo=7,Po=8;A("M",["MM",2],"Mo",function(){return this.month()+1}),A("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),A("MMMM",0,0,function(t){return this.localeData().months(this,t)}),C("month","M"),H("M",ho),H("MM",ho,no),H("MMM",function(t,e){return e.monthsShortRegex(t)}),H("MMMM",function(t,e){return e.monthsRegex(t)}),V(["M","MM"],function(t,e){e[Oo]=y(t)-1}),V(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[Oo]=n:l(i).invalidMonth=t});var Io=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,No="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),zo="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Lo=_o,Ao=_o,Ro={};e.suppressDeprecationWarnings=!1;var Fo=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Bo=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jo=/Z|[+-]\d\d(?::?\d\d)?/,Ho=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wo=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Yo=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=rt("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+(t._useUTC?" UTC":""))}),A("Y",0,0,function(){var t=this.year();return 9999>=t?""+t:"+"+t}),A(0,["YY",2],0,function(){return this.year()%100}),A(0,["YYYY",4],0,"year"),A(0,["YYYYY",5],0,"year"),A(0,["YYYYYY",6,!0],0,"year"),C("year","y"),H("Y",mo),H("YY",ho,no),H("YYYY",po,ro),H("YYYYY",fo,ao),H("YYYYYY",fo,ao),V(["YYYYY","YYYYYY"],ko),V("YYYY",function(t,i){i[ko]=2===t.length?e.parseTwoDigitYear(t):y(t)}),V("YY",function(t,i){i[ko]=e.parseTwoDigitYear(t)}),V("Y",function(t,e){e[ko]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return y(t)+(y(t)>68?1900:2e3)};var Go=P("FullYear",!1);e.ISO_8601=function(){};var Vo=rt("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Pt.apply(null,arguments);return this.isValid()&&t.isValid()?this>t?this:t:c()}),Uo=rt("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Pt.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:c()}),qo=function(){return Date.now?Date.now():+new Date};Rt("Z",":"),Rt("ZZ",""),H("Z",yo),H("ZZ",yo),V(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Ft(yo,t)});var Xo=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Zo=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,Ko=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Qt.fn=Lt.prototype;var Jo=ie(1,"add"),Qo=ie(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var $o=rt("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});A(0,["gg",2],0,function(){return this.weekYear()%100}),A(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Le("gggg","weekYear"),Le("ggggg","weekYear"),Le("GGGG","isoWeekYear"),Le("GGGGG","isoWeekYear"),C("weekYear","gg"),C("isoWeekYear","GG"),H("G",mo),H("g",mo),H("GG",ho,no),H("gg",ho,no),H("GGGG",po,ro),H("gggg",po,ro),H("GGGGG",fo,ao),H("ggggg",fo,ao),U(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=y(t)}),U(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),A("Q",0,"Qo","quarter"),C("quarter","Q"),H("Q",oo),V("Q",function(t,e){e[Oo]=3*(y(t)-1)}),A("w",["ww",2],"wo","week"),A("W",["WW",2],"Wo","isoWeek"),C("week","w"),C("isoWeek","W"),H("w",ho),H("ww",ho,no),H("W",ho),H("WW",ho,no),U(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=y(t)});var tn={dow:0,doy:6};A("D",["DD",2],"Do","date"),C("date","D"),H("D",ho),H("DD",ho,no),H("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),V(["D","DD"],Mo),V("Do",function(t,e){e[Mo]=y(t.match(ho)[0],10)});var en=P("Date",!0);A("d",0,"do","day"),A("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),A("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),A("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),A("e",0,0,"weekday"),A("E",0,0,"isoWeekday"),C("day","d"),C("weekday","e"),C("isoWeekday","E"),H("d",ho),H("e",ho),H("E",ho),H("dd",_o),H("ddd",_o),H("dddd",_o),U(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:l(i).invalidWeekday=t}),U(["d","e","E"],function(t,e,i,o){e[o]=y(t)});var on="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),nn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),sn="Su_Mo_Tu_We_Th_Fr_Sa".split("_");A("DDD",["DDDD",3],"DDDo","dayOfYear"),C("dayOfYear","DDD"),H("DDD",co),H("DDDD",so),V(["DDD","DDDD"],function(t,e,i){i._dayOfYear=y(t)}),A("H",["HH",2],0,"hour"),A("h",["hh",2],0,oi),A("hmm",0,0,function(){return""+oi.apply(this)+L(this.minutes(),2)}),A("hmmss",0,0,function(){return""+oi.apply(this)+L(this.minutes(),2)+L(this.seconds(),2)}),A("Hmm",0,0,function(){return""+this.hours()+L(this.minutes(),2)}),A("Hmmss",0,0,function(){return""+this.hours()+L(this.minutes(),2)+L(this.seconds(),2)}),ni("a",!0),ni("A",!1),C("hour","h"),H("a",si),H("A",si),H("H",ho),H("h",ho),H("HH",ho,no),H("hh",ho,no),H("hmm",lo),H("hmmss",uo),H("Hmm",lo),H("Hmmss",uo),V(["H","HH"],Do),V(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),V(["h","hh"],function(t,e,i){e[Do]=y(t),l(i).bigHour=!0}),V("hmm",function(t,e,i){var o=t.length-2;e[Do]=y(t.substr(0,o)),e[Co]=y(t.substr(o)),l(i).bigHour=!0}),V("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Do]=y(t.substr(0,o)),e[Co]=y(t.substr(o,2)),e[So]=y(t.substr(n)),l(i).bigHour=!0}),V("Hmm",function(t,e,i){var o=t.length-2;e[Do]=y(t.substr(0,o)),e[Co]=y(t.substr(o))}),V("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Do]=y(t.substr(0,o)),e[Co]=y(t.substr(o,2)),e[So]=y(t.substr(n))});var rn=/[ap]\.?m?\.?/i,an=P("Hours",!0);A("m",["mm",2],0,"minute"),C("minute","m"),H("m",ho),H("mm",ho,no),V(["m","mm"],Co);var hn=P("Minutes",!1);A("s",["ss",2],0,"second"),C("second","s"),H("s",ho),H("ss",ho,no),V(["s","ss"],So);var dn=P("Seconds",!1);A("S",0,0,function(){return~~(this.millisecond()/100)}),A(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),A(0,["SSS",3],0,"millisecond"),A(0,["SSSS",4],0,function(){return 10*this.millisecond()}),A(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),A(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),A(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),A(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),A(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),C("millisecond","ms"),H("S",co,oo),H("SS",co,no),H("SSS",co,so);var ln;for(ln="SSSS";ln.length<=9;ln+="S")H(ln,vo);for(ln="S";ln.length<=9;ln+="S")V(ln,hi);var un=P("Milliseconds",!1);A("z",0,0,"zoneAbbr"),A("zz",0,0,"zoneName");var cn=v.prototype;cn.add=Jo,cn.calendar=ne,cn.clone=se,cn.diff=ce,cn.endOf=Oe,cn.format=me,cn.from=ge,cn.fromNow=ye,cn.to=be,cn.toNow=_e,cn.get=z,cn.invalidAt=Ne,cn.isAfter=re,cn.isBefore=ae,cn.isBetween=he,cn.isSame=de,cn.isSameOrAfter=le,cn.isSameOrBefore=ue,cn.isValid=Pe,cn.lang=$o,cn.locale=we,cn.localeData=xe,cn.max=Uo,cn.min=Vo,cn.parsingFlags=Ie,cn.set=z,cn.startOf=ke,cn.subtract=Qo,cn.toArray=Se,cn.toObject=Te,cn.toDate=Ce,cn.toISOString=ve,cn.toJSON=Ee,cn.toString=fe,cn.unix=De,cn.valueOf=Me,cn.creationData=ze,cn.year=Go,cn.isLeapYear=ft,cn.weekYear=Ae,cn.isoWeekYear=Re,cn.quarter=cn.quarters=We,cn.month=$,cn.daysInMonth=tt,cn.week=cn.weeks=Ue,cn.isoWeek=cn.isoWeeks=qe,cn.weeksInYear=Be,cn.isoWeeksInYear=Fe,cn.date=en,cn.day=cn.days=$e,cn.weekday=ti,cn.isoWeekday=ei,cn.dayOfYear=ii,cn.hour=cn.hours=an,cn.minute=cn.minutes=hn,cn.second=cn.seconds=dn,cn.millisecond=cn.milliseconds=un,cn.utcOffset=Ht,cn.utc=Yt,cn.local=Gt,cn.parseZone=Vt,cn.hasAlignedHourOffset=Ut,cn.isDST=qt,cn.isDSTShifted=Xt,cn.isLocal=Zt,cn.isUtcOffset=Kt,cn.isUtc=Jt,cn.isUTC=Jt,cn.zoneAbbr=di,cn.zoneName=li,cn.dates=rt("dates accessor is deprecated. Use date instead.",en),cn.months=rt("months accessor is deprecated. Use month instead",$),cn.years=rt("years accessor is deprecated. Use year instead",Go),cn.zone=rt("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Wt);var pn=cn,fn={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},vn={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},mn="Invalid date",gn="%d",yn=/\d{1,2}/,bn={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"},_n=_.prototype;_n._calendar=fn,_n.calendar=pi,_n._longDateFormat=vn,_n.longDateFormat=fi,_n._invalidDate=mn,_n.invalidDate=vi,_n._ordinal=gn,_n.ordinal=mi,_n._ordinalParse=yn,_n.preparse=gi,_n.postformat=gi,_n._relativeTime=bn,_n.relativeTime=yi,_n.pastFuture=bi,_n.set=_i,_n.months=Z,_n._months=No,_n.monthsShort=K,_n._monthsShort=zo,_n.monthsParse=J,_n._monthsRegex=Ao,_n.monthsRegex=it,_n._monthsShortRegex=Lo,_n.monthsShortRegex=et,_n.week=Ye,_n._week=tn,_n.firstDayOfYear=Ve,_n.firstDayOfWeek=Ge,_n.weekdays=Ze,_n._weekdays=on,_n.weekdaysMin=Je,_n._weekdaysMin=sn,_n.weekdaysShort=Ke,_n._weekdaysShort=nn,_n.weekdaysParse=Qe,_n.isPM=ri,_n._meridiemParse=rn,_n.meridiem=ai,O("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===y(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=rt("moment.lang is deprecated. Use moment.locale instead.",O),e.langData=rt("moment.langData is deprecated. Use moment.localeData instead.",D);var wn=Math.abs,xn=Fi("ms"),kn=Fi("s"),On=Fi("m"),Mn=Fi("h"),Dn=Fi("d"),Cn=Fi("w"),Sn=Fi("M"),Tn=Fi("y"),En=ji("milliseconds"),Pn=ji("seconds"),In=ji("minutes"),Nn=ji("hours"),zn=ji("days"),Ln=ji("months"),An=ji("years"),Rn=Math.round,Fn={s:45,m:45,h:22,d:26,M:11},Bn=Math.abs,jn=Lt.prototype;jn.abs=Si,jn.add=Ei,jn.subtract=Pi,jn.as=Ai,jn.asMilliseconds=xn,jn.asSeconds=kn,jn.asMinutes=On,jn.asHours=Mn,jn.asDays=Dn,jn.asWeeks=Cn,jn.asMonths=Sn,jn.asYears=Tn,jn.valueOf=Ri,jn._bubble=Ni,jn.get=Bi,jn.milliseconds=En,jn.seconds=Pn,jn.minutes=In,jn.hours=Nn,jn.days=zn,jn.weeks=Hi,jn.months=Ln,jn.years=An,jn.humanize=Vi,jn.toISOString=Ui,jn.toString=Ui,jn.toJSON=Ui,jn.locale=we,jn.localeData=xe,jn.toIsoString=rt("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ui),jn.lang=$o,A("X",0,0,"unix"),A("x",0,0,"valueOf"),H("x",mo),H("X",bo),V("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),V("x",function(t,e,i){i._d=new Date(y(t))}),e.version="2.11.2",i(Pt),e.fn=pn,e.min=Nt,e.max=zt,e.now=qo,e.utc=h,e.unix=ui,e.months=ki,e.isDate=n,e.locale=O,e.invalid=c,e.duration=Qt,e.isMoment=m,e.weekdays=Mi,e.parseZone=ci,e.localeData=D,e.isDuration=At,e.monthsShort=Oi,e.weekdaysMin=Ci,e.defineLocale=M,e.weekdaysShort=Di,e.normalizeUnits=S,e.relativeTimeThreshold=Gi,e.prototype=pn;var Hn=e;return Hn})}).call(e,i(4)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=5},function(t,e){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){16>n&&(e[o+n++]=u[t])});16>n;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:v,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:g+1,d=a-m+(h-g)/1e4;if(0>d&&void 0===t.clockseq&&(r=r+1&16383),(0>d||a>m)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");m=a,g=h,v=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var u=a/4294967296*1e4&268435455;s[n++]=u>>>8&255,s[n++]=255&u,s[n++]=u>>>24&15|16,s[n++]=u>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var c=t.node||f,p=0;6>p;p++)s[n+p]=c[p];return e?e:o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;16>a;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:"undefined"!=typeof e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;16>e;e++)0===(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},c=0;256>c;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var p=r(),f=[1|p[0],p[1],p[2],p[3],p[4],p[5]],v=16383&(p[6]<<8|p[7]),m=0,g=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,function(){return this}())},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?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){0>n&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=Object.keys(this._options.type),o=0,n=i.length;n>o;o++){var s=i[o],r=this._options.type[s];"Date"==r||"ISODate"==r||"ASPDate"==r?this._type[s]="Date":this._type[s]=r}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t),this.setOptions(e)}var n=i(1),s=i(9);o.prototype.setOptions=function(t){t&&void 0!==t.queue&&(t.queue===!1?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=s.extend(this,{replace:["add","update","remove"]})),"object"==typeof t.queue&&this._queue.setOptions(t.queue)))},o.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},o.prototype.subscribe=function(){throw new Error("DataSet.subscribe is deprecated. Use DataSet.on instead.")},o.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},o.prototype.unsubscribe=function(){throw new Error("DataSet.unsubscribe is deprecated. Use DataSet.off instead.")},o.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var o=[];t in this._subscribers&&(o=o.concat(this._subscribers[t])),"*"in this._subscribers&&(o=o.concat(this._subscribers["*"]));for(var n=0,s=o.length;s>n;n++){var r=o[n];r.callback&&r.callback(t,e,i||null)}},o.prototype.add=function(t,e){var i,o=[],n=this;if(Array.isArray(t))for(var s=0,r=t.length;r>s;s++)i=n._addItem(t[s]),o.push(i);else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),o.push(i)}return o.length&&this._trigger("add",{items:o},e),o},o.prototype.update=function(t,e){var i=[],o=[],s=[],r=[],a=this,h=a._fieldId,d=function(t){var e=t[h];if(a._data[e]){var d=n.extend({},a._data[e]);e=a._updateItem(t),o.push(e),r.push(t),s.push(d)}else e=a._addItem(t),i.push(e)};if(Array.isArray(t))for(var l=0,u=t.length;u>l;l++)t[l]instanceof Object?d(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!(t instanceof Object))throw new Error("Unknown dataType");d(t)}if(i.length&&this._trigger("add",{items:i},e),o.length){var c={items:o,oldData:s,data:r};this._trigger("update",c,e)}return i.concat(o)},o.prototype.get=function(t){var e,i,o,s=this,r=n.getType(arguments[0]);"String"==r||"Number"==r?(e=arguments[0],o=arguments[1]):"Array"==r?(i=arguments[0],o=arguments[1]):o=arguments[0];var a;if(o&&o.returnType){var h=["Array","Object"];a=-1==h.indexOf(o.returnType)?"Array":o.returnType}else a="Array";var d,l,u,c,p,f=o&&o.type||this._options.type,v=o&&o.filter,m=[];if(void 0!=e)d=s._getItem(e,f),d&&v&&!v(d)&&(d=null);else if(void 0!=i)for(c=0,p=i.length;p>c;c++)d=s._getItem(i[c],f),v&&!v(d)||m.push(d);else for(l=Object.keys(this._data),c=0,p=l.length;p>c;c++)u=l[c],d=s._getItem(u,f),v&&!v(d)||m.push(d);if(o&&o.order&&void 0==e&&this._sort(m,o.order),o&&o.fields){var g=o.fields;if(void 0!=e)d=this._filterFields(d,g);else for(c=0,p=m.length;p>c;c++)m[c]=this._filterFields(m[c],g)}if("Object"==a){var y,b={};for(c=0,p=m.length;p>c;c++)y=m[c],b[y.id]=y;return b}return void 0!=e?d:m},o.prototype.getIds=function(t){var e,i,o,n,s,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=Object.keys(r),u=[];if(a)if(h){for(s=[],e=0,i=l.length;i>e;e++)o=l[e],n=this._getItem(o,d),a(n)&&s.push(n);for(this._sort(s,h),e=0,i=s.length;i>e;e++)u.push(s[e][this._fieldId])}else for(e=0,i=l.length;i>e;e++)o=l[e],n=this._getItem(o,d),a(n)&&u.push(n[this._fieldId]);else if(h){for(s=[],e=0,i=l.length;i>e;e++)o=l[e],s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;i>e;e++)u.push(s[e][this._fieldId])}else for(e=0,i=l.length;i>e;e++)o=l[e],n=r[o],u.push(n[this._fieldId]);return u},o.prototype.getDataSet=function(){return this},o.prototype.forEach=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=this._data,d=Object.keys(h);if(e&&e.order){var l=this.get(e);for(i=0,o=l.length;o>i;i++)n=l[i],s=n[this._fieldId],t(n,s)}else for(i=0,o=d.length;o>i;i++)s=d[i],n=this._getItem(s,a),r&&!r(n)||t(n,s)},o.prototype.map=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=[],d=this._data,l=Object.keys(d);for(i=0,o=l.length;o>i;i++)n=l[i],s=this._getItem(n,a),r&&!r(s)||h.push(t(s,n));return e&&e.order&&this._sort(h,e.order),h},o.prototype._filterFields=function(t,e){if(!t)return t;var i,o,n={},s=Object.keys(t),r=s.length;if(Array.isArray(e))for(i=0;r>i;i++)o=s[i],-1!=e.indexOf(o)&&(n[o]=t[o]);else for(i=0;r>i;i++)o=s[i],e.hasOwnProperty(o)&&(n[e[o]]=t[o]);return n},o.prototype._sort=function(t,e){if(n.isString(e)){var i=e;t.sort(function(t,e){var o=t[i],n=e[i];return o>n?1:n>o?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},o.prototype.remove=function(t,e){var i,o,n,s=[];if(Array.isArray(t))for(i=0,o=t.length;o>i;i++)n=this._remove(t[i]),null!=n&&s.push(n);else n=this._remove(t), -null!=n&&s.push(n);return s.length&&this._trigger("remove",{items:s},e),s},o.prototype._remove=function(t){if(n.isNumber(t)||n.isString(t)){if(this._data[t])return delete this._data[t],this.length--,t}else if(t instanceof Object){var e=t[this._fieldId];if(void 0!==e&&this._data[e])return delete this._data[e],this.length--,e}return null},o.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this.length=0,this._trigger("remove",{items:e},t),e},o.prototype.max=function(t){var e,i,o=this._data,n=Object.keys(o),s=null,r=null;for(e=0,i=n.length;i>e;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d>r)&&(s=h,r=d)}return s},o.prototype.min=function(t){var e,i,o=this._data,n=Object.keys(o),s=null,r=null;for(e=0,i=n.length;i>e;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||r>d)&&(s=h,r=d)}return s},o.prototype.distinct=function(t){var e,i,o,s=this._data,r=Object.keys(s),a=[],h=this._options.type&&this._options.type[t]||null,d=0;for(e=0,o=r.length;o>e;e++){var l=r[e],u=s[l],c=u[t],p=!1;for(i=0;d>i;i++)if(a[i]==c){p=!0;break}p||void 0===c||(a[d]=c,d++)}if(h)for(e=0,o=a.length;o>e;e++)a[e]=n.convert(a[e],h);return a},o.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=n.randomUUID(),t[this._fieldId]=e;var i,o,s={},r=Object.keys(t);for(i=0,o=r.length;o>i;i++){var a=r[i],h=this._type[a];s[a]=n.convert(t[a],h)}return this._data[e]=s,this.length++,e},o.prototype._getItem=function(t,e){var i,o,s,r,a=this._data[t];if(!a)return null;var h={},d=Object.keys(a);if(e)for(s=0,r=d.length;r>s;s++)i=d[s],o=a[i],h[i]=n.convert(o,e[i]);else for(s=0,r=d.length;r>s;s++)i=d[s],o=a[i],h[i]=o;return h},o.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+JSON.stringify(t)+")");var i=this._data[e];if(!i)throw new Error("Cannot update item: no item with id "+e+" found");for(var o=Object.keys(t),s=0,r=o.length;r>s;s++){var a=o[s],h=this._type[a];i[a]=n.convert(t[a],h)}return e},t.exports=o},function(t,e){function i(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}i.prototype.setOptions=function(t){t&&"undefined"!=typeof t.delay&&(this.delay=t.delay),t&&"undefined"!=typeof t.max&&(this.max=t.max),this._flushIfNeeded()},i.extend=function(t,e){var o=new i(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){o.flush()};var n=[{name:"flush",original:void 0}];if(e&&e.replace)for(var s=0;sthis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},i.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=i},function(t,e,i){function o(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var n=i(1),s=i(8);o.prototype.setData=function(t){var e,i,o,n;if(this._data&&(this._data.off&&this._data.off("*",this.listener),e=Object.keys(this._ids),this._ids={},this.length=0,this._trigger("remove",{items:e})),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}),o=0,n=e.length;n>o;o++)i=e[o],this._ids[i]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){var t,e,i,o=this._data.getIds({filter:this._options&&this._options.filter}),n=Object.keys(this._ids),s={},r=[],a=[];for(e=0,i=o.length;i>e;e++)t=o[e],s[t]=!0,this._ids[t]||(r.push(t),this._ids[t]=!0);for(e=0,i=n.length;i>e;e++)t=n[e],s[t]||(a.push(t),delete this._ids[t]);this.length+=r.length-a.length,r.length&&this._trigger("add",{items:r}),a.length&&this._trigger("remove",{items:a})},o.prototype.get=function(t){var e,i,o,s=this,r=n.getType(arguments[0]);"String"==r||"Number"==r||"Array"==r?(e=arguments[0],i=arguments[1],o=arguments[2]):(i=arguments[0],o=arguments[1]);var a=n.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(t){return s._options.filter(t)&&i.filter(t)});var h=[];return void 0!=e&&h.push(e),h.push(a),h.push(o),this._data&&this._data.get.apply(this._data,h)},o.prototype.getIds=function(t){var e;if(this._data){var i,o=this._options.filter;i=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},o.prototype.map=function(t,e){var i=[];if(this._data){var o,n=this._options.filter;o=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,i=this._data.map(t,{filter:o,order:e&&e.order})}else i=[];return i},o.prototype.getDataSet=function(){for(var t=this;t instanceof o;)t=t._data;return t||null},o.prototype._onEvent=function(t,e,i){var o,n,s,r,a=e&&e.items,h=this._data,d=[],l=[],u=[],c=[];if(a&&h){switch(t){case"add":for(o=0,n=a.length;n>o;o++)s=a[o],r=this.get(s),r&&(this._ids[s]=!0,l.push(s));break;case"update":for(o=0,n=a.length;n>o;o++)s=a[o],r=this.get(s),r?this._ids[s]?(u.push(s),d.push(e.data[o])):(this._ids[s]=!0,l.push(s)):this._ids[s]&&(delete this._ids[s],c.push(s));break;case"remove":for(o=0,n=a.length;n>o;o++)s=a[o],this._ids[s]&&(delete this._ids[s],c.push(s))}this.length+=l.length-c.length,l.length&&this._trigger("add",{items:l},i),u.length&&this._trigger("update",{items:u,data:d},i),c.length&&this._trigger("remove",{items:c},i)}},o.prototype.on=s.prototype.on,o.prototype.off=s.prototype.off,o.prototype._trigger=s.prototype._trigger,o.prototype.subscribe=o.prototype.on,o.prototype.unsubscribe=o.prototype.off,t.exports=o},function(t,e,i){function o(t,e,i){if(!(this instanceof o))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";var n=function(t){return t};this.xValueLabel=n,this.yValueLabel=n,this.zValueLabel=n,this.filterLabel="time",this.legendLabel="value",this.style=o.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 c,this.camera.setArmRotation(1,.5),this.camera.setArmLength(1.7),this.eye=new l(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.axisColor="#4D4D4D",this.gridColor="#D3D3D3",this.dataColor={fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},this.dotSizeRatio=.02,this.create(),this.setOptions(i),e&&this.setData(e)}function n(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function s(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(12),a=i(8),h=i(10),d=i(1),l=i(13),u=i(14),c=i(15),p=i(16),f=i(17),v=i(18);r(o.prototype),o.prototype._setScale=function(){this.scale=new l(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!==o.STYLE.DOTCOLOR&&this.style!==o.STYLE.DOTSIZE&&this.style!==o.STYLE.BARCOLOR&&this.style!==o.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)}},o.prototype.getNumberOfRows=function(t){return t.length},o.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},o.prototype.getDistinctValues=function(t,e){for(var i=[],o=0;ot[o][e]&&(i.min=t[o][e]),i.maxt;t++){var f=(t-c)/(p-c),m=240*f,g=this._hsv2rgb(m,1,1);u.strokeStyle=g,u.beginPath(),u.moveTo(h,r+t),u.lineTo(a,r+t),u.stroke()}u.strokeStyle=this.axisColor,u.strokeRect(h,r,i,s)}if(this.style===o.STYLE.DOTSIZE&&(u.strokeStyle=this.axisColor,u.fillStyle=this.dataColor.fill,u.beginPath(),u.moveTo(h,r),u.lineTo(a,r),u.lineTo(a-i+e,d),u.lineTo(h,d),u.closePath(),u.fill(),u.stroke()),this.style===o.STYLE.DOTCOLOR||this.style===o.STYLE.DOTSIZE){var y=5,b=new v(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,n=this._convert3Dto2D(new l(w,r,this.zMin)),Math.cos(2*_)>0?(m.textAlign="center",m.textBaseline="top",n.y+=b):Math.sin(2*_)<0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(" "+this.xValueLabel(i.getCurrent())+" ",n.x,n.y),i.next()}for(m.lineWidth=1,o=void 0===this.defaultYStep,i=new v(this.yMin,this.yMax,this.yStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,n=this._convert3Dto2D(new l(s,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(m.textAlign="center",m.textBaseline="top",n.y+=b):Math.sin(2*_)>0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(" "+this.yValueLabel(i.getCurrent())+" ",n.x,n.y),i.next();for(m.lineWidth=1,o=void 0===this.defaultZStep,i=new v(this.zMin,this.zMax,this.zStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(s,r,i.getCurrent())),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(t.x-b,t.y),m.stroke(),m.textAlign="right",m.textBaseline="middle",m.fillStyle=this.axisColor,m.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();m.lineWidth=1,t=this._convert3Dto2D(new l(s,r,this.zMin)),e=this._convert3Dto2D(new l(s,r,this.zMax)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke(),m.lineWidth=1,c=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(c.x,c.y),m.lineTo(p.x,p.y),m.stroke(),c=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(c.x,c.y),m.lineTo(p.x,p.y),m.stroke(),m.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke();var x=this.xLabel;x.length>0&&(u=.1/this.scale.y,s=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-u:this.yMax+u,n=this._convert3Dto2D(new l(s,r,this.zMin)),Math.cos(2*_)>0?(m.textAlign="center",m.textBaseline="top"):Math.sin(2*_)<0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(x,n.x,n.y));var k=this.yLabel;k.length>0&&(d=.1/this.scale.x,s=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,n=this._convert3Dto2D(new l(s,r,this.zMin)),Math.cos(2*_)<0?(m.textAlign="center",m.textBaseline="top"):Math.sin(2*_)>0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(k,n.x,n.y));var O=this.zLabel;O.length>0&&(h=30,s=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,n=this._convert3Dto2D(new l(s,r,a)),m.textAlign="right",m.textBaseline="middle",m.fillStyle=this.axisColor,m.fillText(O,n.x-h,n.y))},o.prototype._hsv2rgb=function(t,e,i){var o,n,s,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:o=r,n=h,s=0;break;case 1:o=h,n=r,s=0;break;case 2:o=0,n=r,s=h;break;case 3:o=0,n=h,s=r;break;case 4:o=h,n=0,s=r;break;case 5:o=r,n=0,s=h;break;default:o=0,n=0,s=0}return"RGB("+parseInt(255*o)+","+parseInt(255*n)+","+parseInt(255*s)+")"},o.prototype._redrawDataGrid=function(){var t,e,i,n,s,r,a,h,d,u,c,p,f=this.frame.canvas,v=f.getContext("2d");if(v.lineJoin="round",v.lineCap="round",!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(s=0;s0}else r=!0;r?(p=(t.point.z+e.point.z+i.point.z+n.point.z)/4,d=240*(1-(p-this.zMin)*this.scale.z/this.verticalRatio),u=1,this.showShadow?(c=Math.min(1+x.x/k/2,1),a=this._hsv2rgb(d,u,c),h=a):(c=1,a=this._hsv2rgb(d,u,c),h=this.axisColor)):(a="gray",h=this.axisColor),v.lineWidth=this._getStrokeWidth(t),v.fillStyle=a,v.strokeStyle=h,v.beginPath(),v.moveTo(t.screen.x,t.screen.y),v.lineTo(e.screen.x,e.screen.y),v.lineTo(n.screen.x,n.screen.y),v.lineTo(i.screen.x,i.screen.y),v.closePath(),v.fill(),v.stroke()}}else for(s=0;sc&&(c=0);var p,f,v;this.style===o.STYLE.DOTCOLOR?(p=240*(1-(d.point.value-this.valueMin)*this.scale.value),f=this._hsv2rgb(p,1,1),v=this._hsv2rgb(p,1,.8)):this.style===o.STYLE.DOTSIZE?(f=this.dataColor.fill,v=this.dataColor.stroke):(p=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),f=this._hsv2rgb(p,1,1),v=this._hsv2rgb(p,1,.8)),i.lineWidth=this._getStrokeWidth(d),i.strokeStyle=v,i.fillStyle=f,i.beginPath(),i.arc(d.screen.x,d.screen.y,c,0,2*Math.PI,!0),i.fill(),i.stroke()}}},o.prototype._redrawDataBar=function(){var t,e,i,n,s=this.frame.canvas,r=s.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0){for(t=this.dataPoints[0],o.lineWidth=this._getStrokeWidth(t),o.lineJoin="round",o.lineCap="round",o.strokeStyle=this.dataColor.stroke,o.beginPath(),o.moveTo(t.screen.x,t.screen.y),e=1;e0?1:0>t?-1:0}var o=e[0],n=e[1],s=e[2],r=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),a=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x)),h=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},o.prototype._dataPointFromXY=function(t,e){var i,n=100,s=null,r=null,a=null,h=new u(t,e);if(this.style===o.STYLE.BAR||this.style===o.STYLE.BARCOLOR||this.style===o.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){s=this.dataPoints[i];var d=s.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var c=d[l],p=c.corners,f=[p[0].screen,p[1].screen,p[2].screen],v=[p[2].screen,p[3].screen,p[0].screen];if(this._insideTriangle(h,f)||this._insideTriangle(h,v))return s}}else for(i=0;ib)&&n>b&&(a=b,r=s)}}return r},o.prototype._showTooltip=function(t){var e,i,o;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,o=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",o=document.createElement("div"),o.style.position="absolute",o.style.height="0",o.style.width="0",o.style.border="5px solid #4d4d4d",o.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:o}}),this._hideTooltip(),this.tooltip.dataPoint=t,"function"==typeof this.showTooltip?e.innerHTML=this.showTooltip(t.point):e.innerHTML="
"+this.xLabel+":"+t.point.x+"
"+this.yLabel+":"+t.point.y+"
"+this.zLabel+":"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,a=o.offsetWidth,h=o.offsetHeight,d=t.screen.x-n/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-n),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-s+"px",o.style.left=t.screen.x-a/2+"px",o.style.top=t.screen.y-h/2+"px"},o.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)}}},t.exports=o},function(t,e){function i(t){return t?o(t):void 0}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.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 o,n=0;no;++o)i[o].apply(this,e)}return this},i.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},i.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){function i(t,e,i){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==i?i:0}i.subtract=function(t,e){var o=new i;return o.x=t.x-e.x,o.y=t.y-e.y,o.z=t.z-e.z,o},i.add=function(t,e){var o=new i;return o.x=t.x+e.x,o.y=t.y+e.y,o.z=t.z+e.z,o},i.avg=function(t,e){return new i((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},i.crossProduct=function(t,e){var o=new i;return o.x=t.y*e.z-t.z*e.y,o.y=t.z*e.x-t.x*e.z,o.z=t.x*e.y-t.y*e.x,o},i.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=i},function(t,e){function i(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=i},function(t,e,i){function o(){this.armLocation=new n,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new n,this.cameraRotation=new n(.5*Math.PI,0,0),this.calculateCameraOrientation()}var n=i(13);o.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},o.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()},o.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},o.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},o.prototype.getArmLength=function(){return this.armLength},o.prototype.getCameraLocation=function(){return this.cameraLocation},o.prototype.getCameraRotation=function(){return this.cameraRotation},o.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=o},function(t,e,i){function o(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 n=i(10);o.prototype.isLoaded=function(){return this.loaded},o.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},o.prototype.getLabel=function(){return this.graph.filterLabel},o.prototype.getColumn=function(){return this.column},o.prototype.getSelectedValue=function(){return void 0!==this.index?this.values[this.index]:void 0},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},o.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 o=new n(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(o),this.dataPoints[t]=e}return e},o.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},o.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},o.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},o.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},o.prototype.setIndex=function(t){if(!(to&&(o=0),o>this.values.length-1&&(o=this.values.length-1),o},o.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,o=i+3;return o},o.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,o=this.leftToIndex(i);this.setIndex(o),n.preventDefault()},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",n.removeEventListener(document,"mousemove",this.onmousemove),n.removeEventListener(document,"mouseup",this.onmouseup),n.preventDefault()},t.exports=o},function(t,e){function i(t,e,i,o){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,o)}i.prototype.setRange=function(t,e,i,o){this._start=t?t:0,this._end=e?e:0,this.setStep(i,o)},i.prototype.setStep=function(t,e){void 0===t||0>=t||(void 0!==e&&(this.prettyStep=e),this.prettyStep===!0?this._step=i.calculatePrettyStep(t):this._step=t)},i.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),o=2*Math.pow(10,Math.round(e(t/2))),n=5*Math.pow(10,Math.round(e(t/5))),s=i;return Math.abs(o-t)<=Math.abs(s-t)&&(s=o),Math.abs(n-t)<=Math.abs(s-t)&&(s=n),0>=s&&(s=1),s},i.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},i.prototype.getStep=function(){return this._step},i.prototype.start=function(){this._current=this._start-this._start%this._step},i.prototype.next=function(){this._current+=this._step},i.prototype.end=function(){return this._current>this._end},t.exports=i},function(t,e,i){function o(t,e,i,d){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof r||i instanceof a)&&i instanceof Object){var c=d;d=i,i=c}var f=this;this.defaultOptions={start:null,end:null,autoResize:!0,throttleRedraw:0,orientation:{axis:"bottom",item:"bottom"},moment:n,width:null,height:null,maxHeight:null,minHeight:null},this.options=s.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)},hiddenDates:[],util:{getScale:function(){return f.timeAxis.step.scale},getStep:function(){return f.timeAxis.step.step},toScreen:f._toScreen.bind(f),toGlobalScreen:f._toGlobalScreen.bind(f),toTime:f._toTime.bind(f),toGlobalTime:f._toGlobalTime.bind(f)}},this.range=new h(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.timeAxis2=null,this.components.push(this.timeAxis),this.currentTime=new u(this.body),this.components.push(this.currentTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){f.emit("click",f.getEventProperties(t))}),this.on("doubletap",function(t){f.emit("doubleClick",f.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){f.emit("contextmenu",f.getEventProperties(t))},this.fitDone=!1,this.on("changed",function(){if(null!=this.itemsData&&!f.fitDone)if(f.fitDone=!0,void 0!=f.options.start||void 0!=f.options.end){if(void 0==f.options.start||void 0==f.options.end)var t=f.getItemRange();var e=void 0!=f.options.start?f.options.start:t.min,i=void 0!=f.options.end?f.options.end:t.max;f.setWindow(e,i,{animation:!1})}else f.fit({animation:!1})}),d&&this.setOptions(d),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var n=(i(12),i(20),i(2)),s=i(1),r=i(8),a=i(10),h=i(23),d=i(27),l=i(38),u=i(43),c=i(41),p=i(28),f=i(44),v=i(46)["default"],m=i(46).printStyle,g=i(47).allOptions,y=i(47).configureOptions;o.prototype=new d,o.prototype._createConfigurator=function(){return new f(this,this.dom.container,y)},o.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},o.prototype.setOptions=function(t){var e=v.validate(t,g);if(e===!0&&console.log("%cErrors have been found in the supplied options object.",m),d.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var i=this.itemsData;if(i){var o=this.getSelection();this.setItems(null),this.setItems(i),this.setSelection(o)}}},o.prototype.setItems=function(t){var e;e=t?t instanceof r||t instanceof a?t:new r(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},o.prototype.setGroups=function(t){var e;e=t?t instanceof r||t instanceof a?t:new r(t):null,this.groupsData=e,this.itemSet.setGroups(e)},o.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},o.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},o.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},o.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||n>e)&&(n=e),(null===s||i>s)&&(s=i)}),null!==n&&null!==s){var r=(n+s)/2,a=Math.max(this.range.end-this.range.start,1.1*(s-n)),h=e&&void 0!==e.animation?e.animation:!0;this.range.setRange(r-a/2,r+a/2,h)}}},o.prototype.fit=function(t){var e=t&&void 0!==t.animation?t.animation:!0,i=this.getItemRange();this.range.setRange(i.min,i.max,e)},o.prototype.getItemRange=function(){var t=this,e=this.getDataRange(),i=null!==e.min?e.min.valueOf():null,o=null!==e.max?e.max.valueOf():null,n=null,r=null;if(null!=i&&null!=o){var a,h,d,l,u;!function(){var e=function(t){return s.convert(t.data.start,"Date").valueOf()},c=function(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return s.convert(e,"Date").valueOf()};a=o-i,0>=a&&(a=10),h=a/t.props.center.width,s.forEach(t.itemSet.items,function(t){t.show(),t.repositionX();var s=e(t),a=c(t),d=s-(t.getWidthLeft()+10)*h,l=a+(t.getWidthRight()+10)*h;i>d&&(i=d,n=t),l>o&&(o=l,r=t)}.bind(t)),n&&r&&(d=n.getWidthLeft()+10,l=r.getWidthRight()+10,u=t.props.center.width-d-l,u>0&&(i=e(n)-d*a/u,o=c(r)+l*a/u))}()}return{min:null!=i?new Date(i):null,max:null!=o?new Date(o):null}},o.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=s.convert(i.start,"Date").valueOf(),n=s.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||t>o)&&(t=o),(null===e||n>e)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-s.getAbsoluteLeft(this.dom.centerContainer),n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this.itemSet.itemFromTarget(t),a=this.itemSet.groupFromTarget(t),h=c.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),p=this._toTime(o),f=d?d(p,l,u):p,v=s.getTarget(t),m=null;return null!=r?m="item":null!=h?m="custom-time":s.hasParent(v,this.timeAxis.dom.foreground)?m="axis":this.timeAxis2&&s.hasParent(v,this.timeAxis2.dom.foreground)?m="axis":s.hasParent(v,this.itemSet.dom.labelSet)?m="group-label":s.hasParent(v,this.currentTime.bar)?m="current-time":s.hasParent(v,this.dom.center)&&(m="background"),{event:t,item:r?r.id:null,group:a?a.groupId:null,what:m,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:p,snappedTime:f}},t.exports=o},function(t,e,i){if("undefined"!=typeof window){var o=i(21),n=window.Hammer||i(22);t.exports=o(n,{preventDefault:"mouse"})}else t.exports=function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,i){var o,n,s;!function(i){n=[],o=i,s="function"==typeof o?o.apply(e,n):o,!(void 0!==s&&(t.exports=s))}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation;"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return Array.isArray(t)?(l(t,i[e],i),!0):!1}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ut(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==ft?t.apply(e?e[0]||a:a,e):t}function v(t,e){return t===a?e:t}function m(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function O(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=z(o);e.timeStamp=gt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=R(a,h),P(i,e),e.offsetDirection=A(e.deltaX,e.deltaY);var d=L(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=mt(d.x)>mt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?B(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Et&&s.eventType!==It||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=Nt&&(h>Tt||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=L(h,d,l);o=u.x,n=u.y,i=mt(u.x)>mt(u.y)?u.x:u.y,s=A(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;in;)i+=t[n].clientX,o+=t[n].clientY,n++;return{x:vt(i/e),y:vt(o/e)}}function L(t,e,i){return{x:e/t||0,y:i/t||0}}function A(t,e){return t===e?zt:mt(t)>=mt(e)?0>t?Lt:At:0>e?Rt:Ft}function R(t,e,i){i||(i=Wt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function F(t,e,i){i||(i=Wt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function B(t,e){return F(e[1],e[0],Yt)+F(t[1],t[0],Yt)}function j(t,e){return R(e[0],e[1],Yt)/R(t[0],t[1],Yt)}function H(){this.evEl=Vt,this.evWin=Ut,this.allow=!0,this.pressed=!1,C.apply(this,arguments)}function W(){this.evEl=Zt,this.evWin=Kt,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Qt,this.evWin=$t,this.started=!1,C.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(It|Nt)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=ee,this.targetIds={},C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Et|Pt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Et)for(n=0;na&&(e.push(t),a=e.length-1):n&(It|Nt)&&(i=!0),0>a||(e[a]=t,this.callback(this.manager,n,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i&&e.splice(a,1))}});var Jt={touchstart:Et,touchmove:Pt,touchend:It,touchcancel:Nt},Qt="touchstart",$t="touchstart touchmove touchend touchcancel";c(Y,C,{handler:function(t){var e=Jt[t.type];if(e===Et&&(this.started=!0),this.started){var i=G.call(this,t,e);e&(It|Nt)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Mt,srcEvent:t})}}});var te={touchstart:Et,touchmove:Pt,touchend:It,touchcancel:Nt},ee="touchstart touchmove touchend touchcancel";c(V,C,{handler:function(t){var e=te[t.type],i=U.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Mt,srcEvent:t})}}),c(q,C,{handler:function(t,e,i){var o=i.pointerType==Mt,n=i.pointerType==Ct;if(o)this.mouse.allow=!1;else if(n&&!this.mouse.allow)return;e&(It|Nt)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var ie=O(pt.style,"touchAction"),oe=ie!==a,ne="compute",se="auto",re="manipulation",ae="none",he="pan-x",de="pan-y";X.prototype={set:function(t){t==ne&&(t=this.compute()),oe&&this.manager.element.style&&(this.manager.element.style[ie]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),Z(t.join(" "))},preventDefaults:function(t){if(!oe){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=b(o,ae),s=b(o,de),r=b(o,he);if(n){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}if(!r||!s)return n||s&&i&Bt||r&&i&jt?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var le=1,ue=2,ce=4,pe=8,fe=pe,ve=16,me=32;K.prototype={defaults:{},set:function(t){return ut(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=$(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=$(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=$(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=$(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;pe>o&&e(i.options.event+J(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=pe&&e(i.options.event+J(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=me)},canEmit:function(){for(var t=0;ts?Lt:At,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?zt:0>r?Rt:Ft,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return tt.prototype.attrTest.call(this,t)&&(this.state&ue||!(this.state&ue)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=Q(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(it,tt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ue)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(ot,K,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distancee.time;if(this._input=t,!o||!i||t.eventType&(It|Nt)&&!n)this.reset();else if(t.eventType&Et)this.reset(),this._timer=h(function(){this.state=fe,this.tryEmit()},e.time,this);else if(t.eventType&It)return fe;return me},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===fe&&(t&&t.eventType&It?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=gt(),this.manager.emit(this.options.event,this._input)))}}),c(nt,tt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ue)}}),c(st,tt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Bt|jt,pointers:1},getTouchAction:function(){return et.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Bt|jt)?e=t.overallVelocity:i&Bt?e=t.overallVelocityX:i&jt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&mt(e)>this.options.velocity&&t.eventType&It},emit:function(t){var e=Q(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(rt,K,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distanceu,c=r||null===n?n:h+(n-h)*i,m=r||null===s?s:l+(s-l)*i;g=a._applyRange(c,m),d.updateHiddenDates(a.options.moment,a.body,a.options.hiddenDates),v=v||g,g&&a.body.emitter.emit("rangechange",{start:new Date(a.start),end:new Date(a.end),byUser:o}),r?v&&a.body.emitter.emit("rangechanged",{start:new Date(a.start),end:new Date(a.end),byUser:o}):a.animationTimer=setTimeout(b,20)}};return m()}var g=this._applyRange(n,s);if(d.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),g){var y={start:new Date(this.start),end:new Date(this.end),byUser:o};this.body.emitter.emit("rangechange",y),this.body.emitter.emit("rangechanged",y)}},o.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},o.prototype._applyRange=function(t,e){var i,o=null!=t?r.convert(t,"Date").valueOf():this.start,n=null!=e?r.convert(e,"Date").valueOf():this.end,s=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(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(o>n&&(n=o),null!==a&&a>o&&(i=a-o,o+=i,n+=i,null!=s&&n>s&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=a&&a>o&&(o=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>n-o&&(this.end-this.start===h&&o>this.start&&nd&&(d=0),n-o>d&&(this.end-this.start===d&&othis.end?(o=this.start,n=this.end):(i=n-o-d,o+=i/2,n-=i/2))}var l=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,l},o.prototype.getRange=function(){return{start:this.start,end:this.end}},o.prototype.conversion=function(t,e){return o.conversion(this.start,this.end,t,e)},o.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},o.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&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"))},o.prototype._onDrag=function(t){if(this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;n(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start,s=d.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);o-=s;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*o,h=this.props.touch.start+a,l=this.props.touch.end+a,u=d.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),c=d.snapAwayFromHidden(this.body.hiddenDates,l,this.previousDelta-i,!0);if(u!=h||c!=l)return this.deltaDifference+=i,this.props.touch.start=u,this.props.touch.end=c,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,l);var p=new Date(this.start),f=new Date(this.end);this.body.emitter.emit("rangechange",{start:p,end:f,byUser:!0})}},o.prototype._onDragEnd=function(t){this.props.touch.dragging&&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),byUser:!0}))},o.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&(!this.options.zoomKey||t[this.options.zoomKey])){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 o=s({x:t.clientX,y:t.clientY},this.body.dom.center),n=this._pointerToDate(o);this.zoom(i,n,e)}t.preventDefault()}},o.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},o.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=s(t.center,this.body.dom.center));var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=d.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),r=o-n,a=i-n+(this.props.touch.start-(i-n))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=0>=1-e,this.endToFront=0>=e-1;var l=d.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),u=d.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);l==a&&u==h||(this.props.touch.start=l,this.props.touch.end=u,this.scaleOffset=1-t.scale,a=l,h=u),this.setRange(a,h,!1,!0),this.startToFront=!1,this.endToFront=!0}},o.prototype._isInsideRange=function(t){var e=t.center?t.center.x:t.clientX,i=e-r.getAbsoluteLeft(this.body.dom.centerContainer),o=this.body.util.toTime(i);return o>=this.start&&o<=this.end},o.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(n(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},o.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var o=d.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),s=o-n,r=e-n+(this.start-(e-n))*t,a=e+s+(this.end-(e+s))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var h=d.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),l=d.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);h==r&&l==a||(r=h,a=l),this.setRange(r,a,!1,!0),this.startToFront=!1,this.endToFront=!0},o.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},o.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i;this.setRange(o,n)},t.exports=o},function(t,e,i){i(20);e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch},function(t,e){function i(t,e){this.options=null,this.props=null}i.prototype.setOptions=function(t){t&&util.extend(this.options,t)},i.prototype.redraw=function(){return!1},i.prototype.destroy=function(){},i.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=i},function(t,e){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n=4*a){var c=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(c=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-c,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),v=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(v),l.day(v),l.add(f,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),p.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(c=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(c,"months"),p.add(1,"months");break;case"yearly":d.year()!=l.year()&&(c=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(c,"years"),p.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;p>d;)switch(i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),o[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(i);var m=e.isHidden(i.range.start,i.hiddenDates),g=e.isHidden(i.range.end,i.hiddenDates),y=i.range.start,b=i.range.end;1==m.hidden&&(y=1==i.range.startToFront?m.startDate-1:m.endDate+1),1==g.hidden&&(b=1==i.range.endToFront?g.startDate-1:g.endDate+1),1!=m.hidden&&1!=g.hidden||i.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],o=0;o=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(var o=0;o=r&&a>n){o=!0;break}}if(1==o&&n=e&&i>r&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s=i.start&&a=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r=e.start&&h=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?0>o?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=o&&n>t)return{hidden:!0,startDate:o,endDate:n}}return{hidden:!1,startDate:o,endDate:n}}},function(t,e,i){function o(){}var n=i(12),s=i(20),r=i(24),a=i(1),h=(i(8),i(10),i(23),i(28),i(38)),d=i(39),l=i(26),u=i(41);n(o.prototype),o.prototype._create=function(t){function e(t){i.isActive()&&i.emit("mousewheel",t); -}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.on("rangechange",function(){this.initialDrawDone===!0&&this._redraw()}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("pan",this._onDrag.bind(this));var i=this;this.on("_change",function(t){t&&1==t.queue?i._redrawTimer||(i._redrawTimer=setTimeout(function(){i._redrawTimer=null,i._redraw()},0)):i._redraw()}),this.hammer=new s(this.dom.root),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:30}),this.listeners={};var o=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];if(o.forEach(function(t){var e=function(e){i.isActive()&&i.emit(t,e)};i.hammer.on(t,e),i.listeners[t]=e}),r.onTouch(this.hammer,function(t){i.emit("touch",t)}.bind(this)),r.onRelease(this.hammer,function(t){i.emit("release",t)}.bind(this)),this.dom.root.addEventListener("mousewheel",e),this.dom.root.addEventListener("DOMMouseScroll",e),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},o.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","throttleRedraw"];if(a.selectiveExtend(e,this.options,t),this.options.orientation={item:void 0,axis:void 0},"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"==typeof t.orientation&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new h(this.body);i.setOptions=function(t){var e=t?a.extend({},t):{};e.orientation="top",h.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&l.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new d(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var n=a.deepExtend({},this.options);this.components.forEach(function(t){a.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._origRedraw?this._redraw():(this._origRedraw=this._redraw.bind(this),this._redraw=a.throttle(this._origRedraw,this.options.throttleRedraw))},o.prototype.isActive=function(){return!this.activator||this.activator.active},o.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},o.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+JSON.stringify(e));i.length>0&&i[0].setCustomTime(t)},o.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+JSON.stringify(t));return e[0].getCustomTime()},o.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+JSON.stringify(e));return i.length>0?i[0].setCustomTitle(t):void 0},o.prototype.getEventProperties=function(t){return{event:t}},o.prototype.addCustomTime=function(t,e){var i=void 0!==t?a.convert(t,"Date").valueOf():new Date,o=this.customTimes.some(function(t){return t.options.id===e});if(o)throw new Error("A custom time with id "+JSON.stringify(e)+" already exists");var n=new u(this.body,a.extend({},this.options,{time:i,id:e}));return this.customTimes.push(n),this.components.push(n),this._redraw(),e},o.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+JSON.stringify(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},o.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},o.prototype.fit=function(t){var e=this.getDataRange();if(null!==e.min||null!==e.max){var i=e.max-e.min,o=new Date(e.min.valueOf()-.01*i),n=new Date(e.max.valueOf()+.01*i),s=t&&void 0!==t.animation?t.animation:!0;this.range.setRange(o,n,s)}},o.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},o.prototype.setWindow=function(t,e,i){var o;if(1==arguments.length){var n=arguments[0];o=void 0!==n.animation?n.animation:!0,this.range.setRange(n.start,n.end,o)}else o=i&&void 0!==i.animation?i.animation:!0,this.range.setRange(t,e,o)},o.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,o=a.convert(t,"Date").valueOf(),n=o-i/2,s=o+i/2,r=e&&void 0!==e.animation?e.animation:!0;this.range.setRange(n,s,r)},o.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},o.prototype.redraw=function(){this._redraw()},o.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.container.clientWidth){l.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(a.addClassName(o.root,"vis-top"),a.removeClassName(o.root,"vis-bottom")):(a.removeClassName(o.root,"vis-top"),a.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=a.option.asSize(e.maxHeight,""),o.root.style.minHeight=a.option.asSize(e.minHeight,""),o.root.style.width=a.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var n=o.root.offsetHeight-o.root.clientHeight,s=o.root.offsetWidth-o.root.clientWidth;0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(s=n),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var r=Math.max(i.left.height,i.center.height,i.right.height),h=i.top.height+r+i.bottom.height+n+i.border.top+i.border.bottom;o.root.style.height=a.option.asSize(e.height,h+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-n;var d=i.root.height-i.top.height-i.bottom.height-n;i.centerContainer.height=d,i.leftContainer.height=d,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-s,i.left.width=o.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=o.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var u=i.root.width-i.left.width-i.right.width-s;i.center.width=u,i.centerContainer.width=u,i.top.width=u,i.bottom.width=u,o.background.style.height=i.background.height+"px",o.backgroundVertical.style.height=i.background.height+"px",o.backgroundHorizontal.style.height=i.centerContainer.height+"px",o.centerContainer.style.height=i.centerContainer.height+"px",o.leftContainer.style.height=i.leftContainer.height+"px",o.rightContainer.style.height=i.rightContainer.height+"px",o.background.style.width=i.background.width+"px",o.backgroundVertical.style.width=i.centerContainer.width+"px",o.backgroundHorizontal.style.width=i.background.width+"px",o.centerContainer.style.width=i.center.width+"px",o.top.style.width=i.top.width+"px",o.bottom.style.width=i.bottom.width+"px",o.background.style.left="0",o.background.style.top="0",o.backgroundVertical.style.left=i.left.width+i.border.left+"px",o.backgroundVertical.style.top="0",o.backgroundHorizontal.style.left="0",o.backgroundHorizontal.style.top=i.top.height+"px",o.centerContainer.style.left=i.left.width+"px",o.centerContainer.style.top=i.top.height+"px",o.leftContainer.style.left="0",o.leftContainer.style.top=i.top.height+"px",o.rightContainer.style.left=i.left.width+i.center.width+"px",o.rightContainer.style.top=i.top.height+"px",o.top.style.left=i.left.width+"px",o.top.style.top="0",o.bottom.style.left=i.left.width+"px",o.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var c=this.props.scrollTop;"top"!=e.orientation.item&&(c+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),o.center.style.left="0",o.center.style.top=c+"px",o.left.style.left="0",o.left.style.top=c+"px",o.right.style.left="0",o.right.style.top=c+"px";var p=0==this.props.scrollTop?"hidden":"",f=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=p,o.shadowBottom.style.visibility=f,o.shadowTopLeft.style.visibility=p,o.shadowBottomLeft.style.visibility=f,o.shadowTopRight.style.visibility=p,o.shadowBottomRight.style.visibility=f,this.components.forEach(function(e){t=e.redraw()||t});var v=5;if(t){if(this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTope;e++)o=this.selection[e],n=this.items[o],n&&n.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)o=t[e],n=this.items[o],n&&(this.selection.push(o),n.select())},o.prototype.getSelection=function(){return this.selection.concat([])},o.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),o=[];for(var n in this.groups)if(this.groups.hasOwnProperty(n))for(var s=this.groups[n],r=s.visibleItems,a=0;ae&&o.push(h.id)}return o},o.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;o>i;i++)if(e[i]==t){e.splice(i,1);break}},o.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=s.option.asSize,o=this.options,n=o.orientation.item,r=!1,a=this.dom.frame;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="vis-itemset",r=this._orderGroups()||r;var h=e.end-e.start,d=h!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;d&&(this.stackDirty=!0),this.lastVisibleInterval=h,this.props.lastWidth=this.props.width;var l=this.stackDirty,u=this._firstGroup(),c={item:t.item,axis:t.axis},p={item:t.item,axis:t.item.vertical/2},f=0,v=t.axis+t.item.vertical;return this.groups[g].redraw(e,p,l),s.forEach(this.groups,function(t){var i=t==u?c:p,o=t.redraw(e,i,l);r=o||r,f+=t.height}),f=Math.max(f,v),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==n?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},o.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[m];return i||null},o.prototype._updateUngrouped=function(){var t,e,i=this.groups[m];this.groups[g];if(this.groupsData){if(i){i.hide(),delete this.groups[m];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){var s=null,r=null;i=new l(s,r,this),this.groups[m]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},o.prototype.getLabelSet=function(){return this.dom.labelSet},o.prototype.setItems=function(t){var e,i=this,o=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(o&&(s.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;s.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},o.prototype.getItems=function(){return this.itemsData},o.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(s.forEach(this.groupListeners,function(t,e){i.groupsData.off(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 o=this.id;s.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,o)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},o.prototype.getGroups=function(){return this.groupsData},o.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)})},o.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},o.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?g:this.groupsData?t.group:m},o.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,n=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=e._getType(n),a=o.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,n):(i=s.selected,e._removeItem(s),s=null)),!s){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(n,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.stackDirty=!0,this.body.emitter.emit("_change",{queue:!0})},o.prototype._onAdd=o.prototype._onUpdate,o.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("_change",{queue:!0}))},o.prototype._order=function(){s.forEach(this.groups,function(t){t.order()})},o.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},o.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==m||t==g)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=Object.create(e.options);s.extend(n,{height:null}),o=new l(t,i,e),e.groups[t]=o;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},o.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",{queue:!0})},o.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!s.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},o.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},o.prototype._updateItem=function(t,e){var i=t.data.group,o=t.data.subgroup;if(t.setData(e),i!=t.data.group||o!=t.data.subgroup){var n=this.groups[i];n&&n.remove(t);var s=this._getGroupId(t.data),r=this.groups[s];r&&r.add(t)}},o.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),t.parent&&t.parent.remove(t)},o.prototype._constructByEndArray=function(t){for(var e=[],i=0;in+r)return}else{var a=e.height;if(n+a-r>o)return}}if(e&&e!=this.groupTouchParams.group){var h=this.groupsData,d=h.get(e.groupId),l=h.get(this.groupTouchParams.group.groupId);l&&d&&(this.options.groupOrderSwap(l,d,this.groupsData),this.groupsData.update(l),this.groupsData.update(d));var u=this.groupsData.getIds({order:this.options.groupOrder});if(!s.equalArray(u,this.groupTouchParams.originalOrder))for(var h=this.groupsData,c=this.groupTouchParams.originalOrder,p=this.groupTouchParams.group.groupId,f=Math.min(c.length,u.length),v=0,m=0,g=0;f>v;){for(;f>v+m&&f>v+g&&u[v+m]==c[v+g];)v++;if(v+m>=f)break;if(u[v+m]!=p)if(c[v+g]!=p){var y=u.indexOf(c[v+g]),b=h.get(u[v+m]),_=h.get(c[v+g]);this.options.groupOrderSwap(b,_,h),h.update(b),h.update(_);var w=u[v+m];u[v+m]=c[v+g],u[y]=w,v++}else g=1;else m=1}}}},o.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=s.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!s.equalArray(n,e.groupTouchParams.originalOrder))for(var r=e.groupTouchParams.originalOrder,a=Math.min(r.length,n.length),h=0;a>h;){for(;a>h&&n[h]==r[h];)h++;if(h>=a)break;var d=n.indexOf(r[h]),l=o.get(n[h]),u=o.get(r[h]);e.options.groupOrderSwap(l,u,o),groupsData.update(l),groupsData.update(u);var c=n[h];n[h]=r[h],n[d]=c,h++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},o.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},o.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.options.snap||null,o=this.itemFromTarget(t);if(o){var n=e.itemsData.get(o.id);this.options.onUpdate(n,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var r=s.getAbsoluteLeft(this.dom.frame),a=t.center.x-r,h=this.body.util.toTime(a),d=this.body.util.getScale(),l=this.body.util.getStep(),u={start:i?i(h,d,l):h,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(a+this.props.width/5);u.end=i?i(c,d,l):c}u[this.itemsData._fieldId]=s.randomUUID();var p=this.groupFromTarget(t);p&&(u.group=p.groupId),u=this._cloneItemData(u),this.options.onAdd(u,function(t){t&&e.itemsData.getDataSet().add(t)})}}},o.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[],n=t.srcEvent&&t.srcEvent.shiftKey||!1;if(n&&this.options.multiselect){var s=this.itemsData.get(e.id).group,r=void 0;this.options.multiselectPerGroup&&i.length>0&&(r=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=r&&r!=s||i.push(e.id);var a=o._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||r==s){i=[];for(var h in this.items)if(this.items.hasOwnProperty(h)){var d=this.items[h],l=d.data.start,u=void 0!==d.data.end?d.data.end:l;!(l>=a.min&&u<=a.max)||this.options.multiselectPerGroup&&r!=this.itemsData.get(d.id).group||d instanceof v||i.push(d.id)}}}else{var c=i.indexOf(e.id);-1==c?i.push(e.id):i.splice(c,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},o._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},o.prototype.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},o.prototype.groupFromTarget=function(t){for(var e=t.center?t.center.y:t.clientY,i=0;ia&&ea)return n}else if(0===i&&e0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,s=6e4,r=1e3,a=1;1e3*e>t&&(this.scale="year",this.step=1e3),500*e>t&&(this.scale="year",this.step=500),100*e>t&&(this.scale="year",this.step=100),50*e>t&&(this.scale="year",this.step=50),10*e>t&&(this.scale="year",this.step=10),5*e>t&&(this.scale="year",this.step=5),e>t&&(this.scale="year",this.step=1),3*i>t&&(this.scale="month",this.step=3),i>t&&(this.scale="month",this.step=1),5*o>t&&(this.scale="day",this.step=5),2*o>t&&(this.scale="day",this.step=2),o>t&&(this.scale="day",this.step=1),o/2>t&&(this.scale="weekday",this.step=1),4*n>t&&(this.scale="hour",this.step=4),n>t&&(this.scale="hour",this.step=1),15*s>t&&(this.scale="minute",this.step=15),10*s>t&&(this.scale="minute",this.step=10),5*s>t&&(this.scale="minute",this.step=5),s>t&&(this.scale="minute",this.step=1),15*r>t&&(this.scale="second",this.step=15),10*r>t&&(this.scale="second",this.step=10),5*r>t&&(this.scale="second",this.step=5),r>t&&(this.scale="second",this.step=1),200*a>t&&(this.scale="millisecond",this.step=200),100*a>t&&(this.scale="millisecond",this.step=100),50*a>t&&(this.scale="millisecond",this.step=50),10*a>t&&(this.scale="millisecond",this.step=10),5*a>t&&(this.scale="millisecond",this.step=5),a>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case"year":case"month":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":return 1==t.date();case"month":return 0==t.month();case"year":return!1;default:return!1}},o.prototype.getLabelMinor=function(t){void 0==t&&(t=this.current);var e=this.format.minorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getLabelMajor=function(t){void 0==t&&(t=this.current);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/h%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(s().add(1,"day"),"day")?" vis-tomorrow":t.isSame(s().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}function n(t){return t.isSame(new Date,"year")?" vis-current-year":""}var s=this.moment,r=this.moment(this.current),a=r.locale?r.locale("en"):r.lang("en"),h=this.step;switch(this.scale){case"millisecond":return t(a.milliseconds()).trim();case"second":return t(a.seconds()).trim();case"minute":return t(a.minutes()).trim();case"hour":var d=a.hours();return 4==this.step&&(d=d+"-h"+(d+4)),"vis-h"+d+e(a)+t(a.hours());case"weekday":return"vis-"+a.format("dddd").toLowerCase()+e(a)+i(a)+t(a.date());case"day":var l=a.date(),u=a.format("MMMM").toLowerCase();return"vis-day"+l+" vis-"+u+o(a)+t(l-1);case"month":return"vis-"+a.format("MMMM").toLowerCase()+o(a)+t(a.month());case"year":var c=a.year();return"vis-year"+c+n(a)+t(c);default:return""}},t.exports=o},function(t,e,i){function o(t,e,i){this.groupId=t,this.subgroups={},this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var o=this;this.itemSet.body.emitter.on("checkRangedItems",function(){o.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(1),s=i(31);i(32);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.innerHTML="?",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e;if(e=this.itemSet.options&&this.itemSet.options.groupTemplate?this.itemSet.options.groupTemplate(t):t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else void 0!==e&&null!==e?this.dom.inner.innerHTML=e:this.dom.inner.innerHTML=this.groupId||"";this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?n.removeClassName(this.dom.inner,"vis-hidden"):n.addClassName(this.dom.inner,"vis-hidden");var i=t&&t.className||null;i!=this.className&&(this.className&&(n.removeClassName(this.dom.label,this.className),n.removeClassName(this.dom.foreground,this.className),n.removeClassName(this.dom.background,this.className),n.removeClassName(this.dom.axis,this.className)),n.addClassName(this.dom.label,i),n.addClassName(this.dom.foreground,i),n.addClassName(this.dom.background,i),n.addClassName(this.dom.axis,i),this.className=i),this.style&&(n.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(n.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype.redraw=function(t,e,i){var o=!1,r=this.dom.marker.clientHeight;if(r!=this.lastMarkerHeight&&(this.lastMarkerHeight=r,n.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()}),i=!0),this._calculateSubGroupHeights(),"function"==typeof this.itemSet.options.order){if(i){var a=this,h=!1;n.forEach(this.items,function(t){t.displayed||(t.redraw(),a.visibleItems.push(t)),t.repositionX(h)});var d=this.orderedItems.byStart.slice().sort(function(t,e){return a.itemSet.options.order(t.data,e.data)});s.stack(d,e,!0)}this.visibleItems=this._updateVisibleItems(this.orderedItems,this.visibleItems,t)}else this.visibleItems=this._updateVisibleItems(this.orderedItems,this.visibleItems,t),this.itemSet.options.stack?s.stack(this.visibleItems,e,i):s.nostack(this.visibleItems,e,this.subgroups);var l=this._calculateHeight(e),u=this.dom.foreground;this.top=u.offsetTop,this.left=u.offsetLeft,this.width=u.offsetWidth,o=n.updateProperty(this,"height",l)||o,o=n.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||o,o=n.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||o,this.dom.background.style.height=l+"px",this.dom.foreground.style.height=l+"px",this.dom.label.style.height=l+"px";for(var c=0,p=this.visibleItems.length;p>c;c++){var f=this.visibleItems[c];f.repositionY(e)}return o},o.prototype._calculateSubGroupHeights=function(){if(Object.keys(this.subgroups).length>0){var t=this;this.resetSubgroups(),n.forEach(this.visibleItems,function(e){void 0!==e.data.subgroup&&(t.subgroups[e.data.subgroup].height=Math.max(t.subgroups[e.data.subgroup].height,e.height),t.subgroups[e.data.subgroup].visible=!0)})}},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,s=i[0].top+i[0].height;if(n.forEach(i,function(t){o=Math.min(o,t.top),s=Math.max(s,t.top+t.height)}),o>t.axis){var r=o-t.axis;s-=r,n.forEach(i,function(t){t.top-=r})}e=s+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.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)},o.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 o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1};if(e.length>0)for(s=0;sl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,s=0;sl})}for(s=0;s=0&&(s=e[r],!n(s));r--)void 0===o[s.id]&&(o[s.id]=!0,i.push(s));for(r=t+1;rn;n++)t[n].top=null;for(n=0,s=t.length;s>n;n++){var r=t[n];if(r.stack&&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&&l.stack&&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,i){var o,n,s;for(o=0,n=t.length;n>o;o++)if(void 0!==t[o].data.subgroup){s=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-o.vertical+ie.top}},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=(i(20),i(33));o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-range",o.prototype.isVisible=function(t){return this.data.startt.start},o.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.frame=document.createElement("div"),t.frame.className="vis-item-overflow",t.box.appendChild(t.frame),t.content=document.createElement("div"),t.content.className="vis-item-content",t.frame.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 item: 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),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.options.editable.updateTime||this.options.editable.updateGroup||this.editable===!0)&&this.editable!==!1,o=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(i?" vis-editable":" vis-readonly");t.box.className=this.baseClassName+o,this.overflow="hidden"!==window.getComputedStyle(t.frame).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end);void 0!==t&&t!==!0||(-o>n&&(n=-o),s>2*o&&(s=2*o));var r=Math.max(s-n,1);switch(this.overflow?(this.left=n,this.width=r+this.props.content.width,i=this.props.content.width):(this.left=n,this.width=r,i=Math.min(s-n,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(r-i,0)+"px";break;case"center":this.dom.content.style.left=Math.max((r-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:0>n?-n:0,this.dom.content.style.left=e+"px"}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;"top"==t?e.style.top=this.top+"px":e.style.top=this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,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)},o.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,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=o},function(t,e,i){function o(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,this.editable=null,this.data&&this.data.hasOwnProperty("editable")&&"boolean"==typeof this.data.editable&&(this.editable=t.editable)}var n=i(20),s=i(1);o.prototype.stack=!0,o.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.setData=function(t){var e=void 0!=t.group&&this.data.group!=t.group;e&&this.parent.itemSet._moveToGroup(this,t.group),t.hasOwnProperty("editable")&&"boolean"==typeof t.editable&&(this.editable=t.editable),this.data=t,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},o.prototype.isVisible=function(t){return!1},o.prototype.show=function(){return!1},o.prototype.hide=function(){return!1},o.prototype.redraw=function(){},o.prototype.repositionX=function(){},o.prototype.repositionY=function(){},o.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.remove||this.data.editable===!0)&&this.data.editable!==!1;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");o.className="vis-delete",o.title="Delete this item",new n(o).on("tap",function(t){t.stopPropagation(),i.parent.removeFromDataSet(i)}),t.appendChild(o),this.dom.deleteButton=o}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},o.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;var o=this._contentToString(this.content)!==this._contentToString(e);if(o){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},o.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("vis-title")},o.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;in;n++){var r=this.visibleItems[n];r.repositionY(e)}return o},o.prototype.show=function(){ -this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=o},function(t,e,i){function o(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);n.call(this,t,e,i)}var n=i(33);i(1);o.prototype=new n(null,null,null),o.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},o.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.frame=document.createElement("div"),t.frame.className="vis-item-overflow",t.box.appendChild(t.frame),t.content=document.createElement("div"),t.content.className="vis-item-content",t.frame.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e="top"===this.options.orientation.item;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var o=this.data.subgroup,n=this.parent.subgroups,r=n[o].index;if(1==e){i=this.parent.subgroups[o].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in n)n.hasOwnProperty(h)&&1==n[h].visible&&n[h].indexr&&(a+=l)}i=this.parent.subgroups[o].height+t.item.vertical,this.dom.box.style.top=this.parent.height-d+a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof s?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=o},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:r.FORMAT,moment:h,timeAxis:null},this.options=n.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(1),s=i(25),r=i(29),a=i(26),h=i(2);o.prototype=new s,o.prototype.setOptions=function(t){t&&(n.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment"],this.options,t),n.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"==typeof t.orientation&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof h.locale?h.locale(t.locale):h.lang(t.locale)))},o.prototype._create=function(){this.dom.foreground=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.foreground.className="vis-time-axis vis-foreground",this.dom.background.className="vis-time-axis vis-background"},o.prototype.destroy=function(){this.dom.foreground.parentNode&&this.dom.foreground.parentNode.removeChild(this.dom.foreground),this.dom.background.parentNode&&this.dom.background.parentNode.removeChild(this.dom.background),this.body=null},o.prototype.redraw=function(){var t=this.props,e=this.dom.foreground,i=this.dom.background,o="top"==this.options.orientation.axis?this.body.dom.top:this.body.dom.bottom,n=e.parentNode!==o;this._calculateCharSize();var s=this.options.showMinorLabels&&"none"!==this.options.orientation.axis,r=this.options.showMajorLabels&&"none"!==this.options.orientation.axis;t.minorLabelHeight=s?t.minorCharHeight:0,t.majorLabelHeight=r?t.majorCharHeight:0,t.height=t.minorLabelHeight+t.majorLabelHeight,t.width=e.offsetWidth,t.minorLineHeight=this.body.domProps.root.height-t.majorLabelHeight-("top"==this.options.orientation.axis?this.body.domProps.bottom.height:this.body.domProps.top.height),t.minorLineWidth=1,t.majorLineHeight=t.minorLineHeight+t.majorLabelHeight,t.majorLineWidth=1;var a=e.nextSibling,h=i.nextSibling;return e.parentNode&&e.parentNode.removeChild(e),i.parentNode&&i.parentNode.removeChild(i),e.style.height=this.props.height+"px",this._repaintLabels(),a?o.insertBefore(e,a):o.appendChild(e),h?this.body.dom.backgroundVertical.insertBefore(i,h):this.body.dom.backgroundVertical.appendChild(i),this._isResized()||n},o.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=n.convert(this.body.range.start,"Number"),i=n.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),s=o-a.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);s-=this.body.util.toTime(0).valueOf();var h=new r(new Date(e),new Date(i),s,this.body.hiddenDates);h.setMoment(this.options.moment),this.options.format&&h.setFormat(this.options.format),this.options.timeAxis&&h.setScale(this.options.timeAxis),this.step=h;var l=this.dom;l.redundant.lines=l.lines,l.redundant.majorTexts=l.majorTexts,l.redundant.minorTexts=l.minorTexts,l.lines=[],l.majorTexts=[],l.minorTexts=[];var u,c,p,f,v,m,g,y,b,_,w=0,x=void 0,k=0,O=1e3;for(h.start(),c=h.getCurrent(),f=this.body.util.toScreen(c);h.hasNext()&&O>k;){k++,v=h.isMajor(),_=h.getClassName(),b=h.getLabelMinor(),u=c,p=f,h.next(),c=h.getCurrent(),m=h.isMajor(),f=this.body.util.toScreen(c),g=w,w=f-p;var M=w>=.4*g;if(this.options.showMinorLabels&&M){var D=this._repaintMinorText(p,b,t,_);D.style.width=w+"px"}v&&this.options.showMajorLabels?(p>0&&(void 0==x&&(x=p),D=this._repaintMajorText(p,h.getLabelMajor(),t,_)),y=this._repaintMajorLine(p,w,t,_)):M?y=this._repaintMinorLine(p,w,t,_):y&&(y.style.width=parseInt(y.style.width)+w+"px")}if(k!==O||d||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to "+O+" lines."),d=!0),this.options.showMajorLabels){var C=this.body.util.toTime(0),S=h.getLabelMajor(C),T=S.length*(this.props.majorCharWidth||10)+10;(void 0==x||x>T)&&this._repaintMajorText(0,S,t,_)}n.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},o.prototype._repaintMinorText=function(t,e,i,o){var n=this.dom.redundant.minorTexts.shift();if(!n){var s=document.createTextNode("");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.minorTexts.push(n),n.childNodes[0].nodeValue=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",n.style.left=t+"px",n.className="vis-text vis-minor "+o,n},o.prototype._repaintMajorText=function(t,e,i,o){var n=this.dom.redundant.majorTexts.shift();if(!n){var s=document.createTextNode(e);n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.majorTexts.push(n),n.childNodes[0].nodeValue=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",n.style.left=t+"px",n},o.prototype._repaintMinorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return"top"==i?n.style.top=s.majorLabelHeight+"px":n.style.top=this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",n.style.left=t-s.minorLineWidth/2+"px",n.style.width=e+"px",n.className="vis-grid vis-vertical vis-minor "+o,n},o.prototype._repaintMajorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return"top"==i?n.style.top="0":n.style.top=this.body.domProps.top.height+"px",n.style.left=t-s.majorLineWidth/2+"px",n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n.className="vis-grid vis-vertical vis-major "+o,n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-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="vis-text vis-major vis-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};var d=!1;t.exports=o},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this,i=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];i.forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){n(i.target,t)||e.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function n(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var s=i(40),r=i(12),a=i(20),h=i(1);r(o.prototype),o.current=null,o.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},o.prototype.activate=function(){o.current&&o.current.deactivate(),o.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},o.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},o.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=o},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,s="function"==typeof o?o.apply(e,n):o,!(void 0!==s&&(t.exports=s))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;122>=e;e++)r[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)r[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r["delete"]={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;no&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);this.options.showButton===!0&&!function(){var e=document.createElement("div");e.className="vis-configuration vis-config-button",e.innerHTML="generate options",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className="vis-configuration vis-config-button hover"},e.onmouseout=function(){e.className="vis-configuration vis-config-button"},t.optionsContainer=document.createElement("div"),t.optionsContainer.className="vis-configuration vis-config-option-container",t.domElements.push(t.optionsContainer),t.domElements.push(e)}(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?o-1:0),s=1;o>s;s++)n[s-1]=e[s];return n.forEach(function(t){r.appendChild(t)}),i.domElements.push(r),{v:i.domElements.length}}();if("object"==typeof r)return r.v}return 0}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerHTML=t,this._makeItem([],e)}},{key:"_makeLabel",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,i===!0?o.innerHTML=""+t+":":o.innerHTML=t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;se&&n>e*u?(a.min=Math.ceil(e*u),l=a.min,d="range increased"):n>e/u&&(a.min=Math.ceil(e/u),l=a.min,d="range increased"),e*u>s&&1!==s&&(a.max=Math.ceil(e*u),l=a.max,d="range increased"),a.value=e}else a.value=o;var c=document.createElement("input");c.className="vis-configuration vis-config-rangeinput",c.value=a.value;var p=this;a.onchange=function(){c.value=this.value,p._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),v=this._makeItem(i,f,a,c);""!==d&&this.popupHistory[v]!==l&&(this.popupHistory[v]=l,this._setupPopup(d,v))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCountervar options = "+JSON.stringify(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;es;s++)for(r=0;rp?p+1:p;var f=l/this.r,v=a.RGBToHSV(this.color.r,this.color.g,this.color.b);v.h=p,v.s=f;var m=a.HSVToRGB(v.h,v.s,v.v);m.a=this.color.a,this.color=m,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),t}();e["default"]=h,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;is.distance?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""),h):n.distance<=d?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),h):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print(Object.keys(i))+t.printLocation(o,e),h),r=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],r=1e9,a="",h=[],d=e.toLowerCase(),l=void 0;for(var u in i){var c=void 0;if(void 0!==i[u].__type__&&n===!0){var p=t.findInOptions(e,i[u],s.copyAndExtendArray(o,u));r>p.distance&&(a=p.closestMatch,h=p.path,r=p.distance,l=p.indexMatch)}else-1!==u.toLowerCase().indexOf(d)&&(l=u),c=t.levenshteinDistance(e,u),r>c&&(a=u,h=s.copyArray(o),r=c)}return{closestMatch:a,path:h,distance:r,indexMatch:l}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length<=2||void 0===arguments[2]?"Problem value found at: \n":arguments[2],o="\n\n"+i+"options = {\n",n=0;ns;s++)o+=" ";o+=t[n]+": {\n"}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}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-s.getAbsoluteLeft(this.dom.centerContainer),n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this._toTime(o),a=c.customTimeFromTarget(t),h=s.getTarget(t),d=null;s.hasParent(h,this.timeAxis.dom.foreground)?d="axis":this.timeAxis2&&s.hasParent(h,this.timeAxis2.dom.foreground)?d="axis":s.hasParent(h,this.linegraph.yAxisLeft.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.yAxisRight.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.legendLeft.dom.frame)?d="legend":s.hasParent(h,this.linegraph.legendRight.dom.frame)?d="legend":null!=a?d="custom-time":s.hasParent(h,this.currentTime.bar)?d="current-time":s.hasParent(h,this.dom.center)&&(d="background");var l=[],u=this.linegraph.yAxisLeft,p=this.linegraph.yAxisRight;return u.hidden||l.push(u.screenToValue(n)),p.hidden||l.push(p.screenToValue(n)),{event:t,what:d,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:r,value:l}},o.prototype._createConfigurator=function(){return new f(this,this.dom.container,y)},t.exports=o},function(t,e,i){function o(t,e){this.id=n.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=n.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){ -i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){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=n.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n=i(1),s=i(7),r=i(8),a=i(10),h=i(25),d=i(50),l=i(52),u=i(56),c=i(53),p=i(55),f=i(54),v="__ungrouped__";o.prototype=new h,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-line-graph",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 u(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new u(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))i?-1:1});for(var o=new Array(t.length),s=0;s0){var h={};for(this._getRelevantData(a,h,n,r),this._applySampling(a,h),e=0;e0)switch(t.options.style){case"line":l.hasOwnProperty(a[e])||(l[a[e]]=p.calcPath(h[a[e]],t)),p.draw(l[a[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||f.draw(h[a[e]],t,this.framework);break;case"bar":}}}return s.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,0==o?t[a].y=t[a].orginalY+r.y:t[a].y=t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var s,r,a,h;if(t.length>0)for(r=0;rt?-1:1},u=Math.max(0,n.binarySearchValue(d,i,"x","before",l)),c=Math.min(d.length,n.binarySearchValue(d,o,"x","after",l)+1);0>=c&&(c=d.length);var p=new Array(c-u);for(a=u;c>a;a++)h=s.itemsData[a],p[a-u]=h;e[t[r]]=p}else e[t[r]]=s.itemsData}},o.prototype._applySampling=function(t,e){var i;if(t.length>0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;r>l;l+=s){var u=Math.round(l/s);d[u]=n[l]}e[t[o]]=d.splice(0,Math.round(r/s))}}},o.prototype._getYRanges=function(t,e,i){var o,n,s,r,a=[],h=[];if(t.length>0){for(s=0;s0&&(n=this.groups[t[s]],r.stack===!0&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(n.getItems()):h=h.concat(n.getItems()):i[t[s]]=n.getYRange(o,t[s]));c.getStackedYRange(a,i,t,"__barStackLeft","left"),c.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var u=0;ui?i:a,d=o>d?o:d):(r=!0,h=h>i?i:h,l=o>l?o:l));1==s&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}n=this._toggleAxisVisiblity(s,this.yAxisLeft)||n,n=this._toggleAxisVisiblity(r,this.yAxisRight)||n,1==r&&1==s?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!s,this.yAxisRight.masterAxis=this.yAxisLeft,0==this.yAxisRight.master?(1==r?this.yAxisLeft.lineOffset=this.yAxisRight.width:this.yAxisLeft.lineOffset=0,n=this.yAxisLeft.redraw()||n,n=this.yAxisRight.redraw()||n):n=this.yAxisRight.redraw()||n;for(var p=["__barStackLeft","__barStackRight","__lineStackLeft","__lineStackRight"],u=0;ut?-1:1});for(var a=0;a=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),t.master===!0&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var d=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(d=this.props.titleCharHeight);var l=this.options.icons===!0?Math.max(this.options.iconWidth,d)+this.options.labelOffsetX+15:d+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-l&&this.options.visible===!0?(this.width=this.maxLabelSize+l,this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+l),this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var r=s.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=o,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*n+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize.5*(h.magnitudefactor*h.minorSteps[h.minorStepIdx])?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}i.prototype.setCharHeight=function(t){this.majorCharHeight=t},i.prototype.setHeight=function(t){this.containerHeight=t},i.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=Math.round(Math.log(t)/Math.LN10);this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;0>i&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(n===!0)break}},i.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])===0},i.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},i.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},i.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},i.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},i.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&o-i>u?(s(),d=!1):d=!0}}},i.prototype.convertValue=function(t){return this.containerHeight-(t-this._start)*this.scale},i.prototype.screenToValue=function(t){return(this.containerHeight-t)/this.scale+this._start},t.exports=i},function(t,e,i){function o(t,e,i,o){this.id=e;var s=["sampling","style","sort","yAxisOrientation","barChart","drawPoints","shaded","interpolation","zIndex","excludeFromStacking","excludeFromLegend"];this.options=n.selectiveBridgeObject(s,i),this.usingDefaultStyle=void 0===t.className,this.groupsUsingDefaultStyles=o,this.zeroPosition=0,this.update(t),1==this.usingDefaultStyle&&(this.groupsUsingDefaultStyles[0]+=1),this.itemsData=[],this.visible=void 0===t.visible?!0:t.visible}var n=i(1),s=(i(7),i(53)),r=i(55),a=i(54);o.prototype.setItems=function(t){null!=t?(this.itemsData=t,1==this.options.sort&&n.insertSort(this.itemsData,function(t,e){return t.x>e.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];n.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),n.mergeOptions(this.options,t,"interpolation"),n.mergeOptions(this.options,t,"drawPoints"),n.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==typeof t.interpolation&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible?!0:t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){var h=document.createElementNS("http://www.w3.org/2000/svg","svg");i={svg:h,svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":r.drawIcon(this,o,n,t,e,i);break;case"points":case"point":a.drawIcon(this,o,n,t,e,i);break;case"bar":s.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=i>t?i:t,n=0,"left"===e.options.barChart.align?n-=.5*t:"right"===e.options.barChart.align&&(n+=.5*t)):(o=e.options.barChart.width,n=0,"left"===e.options.barChart.align?n-=.5*e.options.barChart.width:"right"===e.options.barChart.align&&(n+=.5*e.options.barChart.width)),{width:o,offset:n}},o.getStackedYRange=function(t,e,i,n,s){if(t.length>0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){var i=[];return i=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o=e;if(i)for(var n=t.length-2;n>0;n--)o+=t[n][0]+","+t[n][1]+" ";else for(var n=1;nl;l++)e=0==l?t[0]:t[l-1],i=t[l],o=t[l+1],n=d>l+2?t[l+2]:o,s={screen_x:(-e.screen_x+6*i.screen_x+o.screen_x)*h,screen_y:(-e.screen_y+6*i.screen_y+o.screen_y)*h},r={screen_x:(i.screen_x+6*o.screen_x-n.screen_x)*h,screen_y:(i.screen_y+6*o.screen_y-n.screen_y)*h},a.push([s.screen_x,s.screen_y]),a.push([r.screen_x,r.screen_y]),a.push([o.screen_x,o.screen_y]);return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);var o,n,s,r,a,h,d,l,u,c,p,f,v,m,g,y,b,_,w,x=[];x.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var k=t.length,O=0;k-1>O;O++)o=0==O?t[0]:t[O-1],n=t[O],s=t[O+1],r=k>O+2?t[O+2]:s,d=Math.sqrt(Math.pow(o.screen_x-n.screen_x,2)+Math.pow(o.screen_y-n.screen_y,2)),l=Math.sqrt(Math.pow(n.screen_x-s.screen_x,2)+Math.pow(n.screen_y-s.screen_y,2)),u=Math.sqrt(Math.pow(s.screen_x-r.screen_x,2)+Math.pow(s.screen_y-r.screen_y,2)),m=Math.pow(u,i),y=Math.pow(u,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),w=Math.pow(d,i),_=Math.pow(d,2*i),c=2*_+3*w*g+b,p=2*y+3*m*g+b,f=3*w*(w+g),f>0&&(f=1/f),v=3*m*(m+g),v>0&&(v=1/v),a={screen_x:(-b*o.screen_x+c*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+c*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*v,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*v},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;it?-1:1});for(var i=0;i")}this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=Object.keys(this.groups);t.sort(function(t,e){return e>t?-1:1}),s.resetElements(this.svgElements);var e=window.getComputedStyle(this.dom.frame).paddingTop,i=Number(e.replace("px","")),o=i,n=this.options.iconSize,r=.75*this.options.iconSize,a=i+.5*r+3;this.svg.style.width=n+5+i+"px";for(var h=0;h0){var i=this.groupIndex%this.groupsArray.length;this.groupIndex++,e={},e.color=this.groups[this.groupsArray[i]],this.groups[t]=e}else{var i=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,e={},e.color=this.defaultGroups[i],this.groups[t]=e}return e}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e["default"]=r,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;it.left&&this.shape.topt.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],n=["color","font","fixed","shadow"];if(R.selectiveNotDeepExtend(n,t,e,i),R.mergeOptions(t,e,"shadow",i,o),void 0!==e.color&&null!==e.color){var s=R.parseColor(e.color);R.fillIfDefined(t.color,s)}else i===!0&&null===e.color&&(t.color=R.bridgeObject(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),void 0!==e.font&&null!==e.font?a["default"].parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=R.bridgeObject(o.font)),void 0!==e.scaling&&R.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)}}]),t}();e["default"]=F,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var i=0;i=this.nodeOptions.scaling.label.maxVisible&&(r=Number(this.nodeOptions.scaling.label.maxVisible)/this.body.view.scale);var h=this.size.yLine,d=this._getColor(a),l=n(d,2),u=l[0],c=l[1],p=this._setAlignment(t,i,h,s),f=n(p,2);i=f[0],h=f[1],t.font=(e&&this.nodeOptions.labelHighlightBold?"bold ":"")+r+"px "+this.fontOptions.face,t.fillStyle=u,t.textAlign="center",this.fontOptions.strokeWidth>0&&(t.lineWidth=this.fontOptions.strokeWidth,t.strokeStyle=c,t.lineJoin="round");for(var v=0;v0&&t.strokeText(this.lines[v],i,h),t.fillText(this.lines[v],i,h),h+=r}},{key:"_setAlignment",value:function(t,e,i,o){if("horizontal"!==this.fontOptions.align&&this.pointToSelf===!1){e=0,i=0;var n=2;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=2*n):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=2*n):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t){var e=this.fontOptions.color||"#000000",i=this.fontOptions.strokeColor||"#ffffff";if(t<=this.nodeOptions.scaling.label.drawThreshold){var o=Math.max(0,Math.min(1,1-(this.nodeOptions.scaling.label.drawThreshold-t)));e=r.overrideOpacity(e,o),i=r.overrideOpacity(i,o)}return[e,i]}},{key:"getTextSize",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i={width:this._processLabel(t,e),height:this.fontOptions.size*this.lineCount,lineCount:this.lineCount};return i}},{key:"calculateLabelSize",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?0:arguments[2],o=arguments.length<=3||void 0===arguments[3]?0:arguments[3],n=arguments.length<=4||void 0===arguments[4]?"middle":arguments[4];this.labelDirty===!0&&(this.size.width=this._processLabel(t,e)),this.size.height=this.fontOptions.size*this.lineCount,this.size.left=i-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===n&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4),this.labelDirty=!1}},{key:"_processLabel",value:function(t,e){var i=0,o=[""],n=0;if(void 0!==this.nodeOptions.label){o=String(this.nodeOptions.label).split("\n"),n=o.length,t.font=(e&&this.nodeOptions.labelHighlightBold?"bold ":"")+this.fontOptions.size+"px "+this.fontOptions.face,i=t.measureText(o[0]).width;for(var s=1;n>s;s++){var r=t.measureText(o[s]).width;i=r>i?r:i}}return this.lines=o,this.lineCount=n,i}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2];if("string"==typeof e.font){var o=e.font.split(" ");t.size=o[0].replace("px",""),t.face=o[1],t.color=o[2]}else"object"==typeof e.font&&r.fillIfDefined(t,e.font,i);t.size=Number(t.size)}}]),t}();e["default"]=a,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height;var n=this.options.shapeProperties.borderRadius;this.boundingBox.left=this.left-n,this.boundingBox.top=this.top-n,this.boundingBox.bottom=this.top+this.height+n,this.boundingBox.right=this.left+this.width+n}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ithis.imageObj.height?(o=this.imageObj.width/this.imageObj.height,e=2*this.options.size*o||this.imageObj.width,i=2*this.options.size||this.imageObj.height):(o=this.imageObj.width&&this.imageObj.height?this.imageObj.height/this.imageObj.width:1,e=2*this.options.size,i=2*this.options.size*o):(e=this.imageObj.width,i=this.imageObj.height),this.width=e,this.height=i,this.radius=.5*this.width}}},{key:"_drawRawCircle",value:function(t,e,i,o,n,s){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.circle(e,i,s),this.enableShadow(t),t.fill(),this.disableShadow(t),t.save(),h>0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore()}},{key:"_drawImageAtPosition",value:function(t){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t);var e=this.imageObj.width/this.width/this.body.view.scale;if(e>2&&this.options.shapeProperties.interpolation===!0){var i=this.imageObj.width,o=this.imageObj.height,n=document.createElement("canvas");n.width=i,n.height=i;var s=n.getContext("2d");e*=.5,i*=.5,o*=.5,s.drawImage(this.imageObj,0,0,i,o);for(var r=0,a=1;e>2&&4>a;)s.drawImage(n,r,0,i,o,r+i,0,i/2,o/2),r+=i,e*=.5,i*=.5,o*=.5,a+=1;t.drawImage(n,r,0,i,o,this.left,this.top,this.width,this.height)}else t.drawImage(this.imageObj,this.left,this.top,this.width,this.height);this.disableShadow(t)}}},{key:"_drawImageLabel",value:function(t,e,i,o){var n,s=0;if(void 0!==this.height){s=.5*this.height;var r=this.labelModule.getTextSize(t);r.lineCount>=1&&(s+=r.height/2)}n=i+s,this.options.label&&(this.labelOffset=s),this.labelModule.draw(t,e,n,o,"hanging")}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e); -}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),void 0!==this.options.label){var l=n+.5*this.height+3;this.labelModule.draw(t,o,l,s,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+3))}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0){var i=5;this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+i)}}},{key:"_icon",value:function(t,e,i,o){var n=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+n+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t),t.fillText(this.options.icon.code,e,i),this.disableShadow(t)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),t.closePath()}this._drawImageAtPosition(t),this._drawImageLabel(t,e,i,o||n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;ii.shape.height?(r=i.x+.5*i.shape.width,a=i.y-h):(r=i.x+h,a=i.y-.5*i.shape.height),s=this._pointOnCircle(r,a,h,.125),this.labelModule.draw(t,s.x,s.y,n)}}}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=10,i=this.from.x,o=this.from.y,n=this.to.x,s=this.to.y,r=t.left,a=t.top,h=this.edgeType.getDistanceToEdge(i,o,n,s,r,a);return e>h}return!1}},{key:"_rotateForLabelAlignment",value:function(t){var e=this.from.y-this.to.y,i=this.from.x-this.to.x,o=Math.atan2(e,i);(-1>o&&0>i||o>0&&0>i)&&(o+=Math.PI),t.rotate(o)}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],n=["arrowStrikethrough","id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width"];if(m.selectiveDeepExtend(n,t,e,i),m.mergeOptions(t,e,"smooth",i,o),m.mergeOptions(t,e,"shadow",i,o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=Object.create(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),m.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)):i===!0&&null===e.scaling&&(t.scaling=Object.create(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var s=e.arrows.toLowerCase();-1!=s.indexOf("to")&&(t.arrows.to.enabled=!0),-1!=s.indexOf("middle")&&(t.arrows.middle.enabled=!0),-1!=s.indexOf("from")&&(t.arrows.from.enabled=!0)}else{if("object"!=typeof e.arrows)throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+JSON.stringify(e.arrows));m.mergeOptions(t.arrows,e.arrows,"to",i,o.arrows),m.mergeOptions(t.arrows,e.arrows,"middle",i,o.arrows),m.mergeOptions(t.arrows,e.arrows,"from",i,o.arrows)}else i===!0&&null===e.arrows&&(t.arrows=Object.create(o.arrows));if(void 0!==e.color&&null!==e.color)if(t.color=m.deepExtend({},t.color,!0),m.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var r=!1;void 0!==e.color.color&&(t.color.color=e.color.color,r=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,r=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,r=!0),void 0!==e.color.inherit&&(t.color.inherit=e.color.inherit),void 0!==e.color.opacity&&(t.color.opacity=Math.min(1,Math.max(0,e.color.opacity))),void 0===e.color.inherit&&r===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=m.bridgeObject(o.color));void 0!==e.font&&null!==e.font?a["default"].parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=m.bridgeObject(o.font))}}]),t}();e["default"]=g,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function(){function t(t,e){for(var i=0;iMath.abs(e)||this.options.smooth.forceDirection===!0||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var a=arguments.length<=6||void 0===arguments[6]?this._getViaCoordinates():arguments[6],h=r(a,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,s,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?this._getViaCoordinates():arguments[1],i=r(e,2),o=i[0],n=i[1],s=t,a=[];a[0]=Math.pow(1-s,3),a[1]=3*s*Math.pow(1-s,2),a[2]=3*Math.pow(s,2)*(1-s),a[3]=Math.pow(s,3);var h=a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,d=a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y;return{x:h,y:d}}}]),e}(l["default"]);e["default"]=u,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;il;l++)u=.1*l,m[0]=Math.pow(1-u,3),m[1]=3*u*Math.pow(1-u,2),m[2]=3*Math.pow(u,2)*(1-u),m[3]=Math.pow(u,3),c=m[0]*t+m[1]*r.x+m[2]*a.x+m[3]*i,p=m[0]*e+m[1]*r.y+m[2]*a.y+m[3]*o,l>0&&(d=this._getDistanceToLine(f,v,c,p,n,s),h=h>d?d:h),f=c,v=p;return h}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i=l&&h>d;){var v=.5*(l+u);if(i=this.getPoint(v,a),o=Math.atan2(p.y-i.y,p.x-i.x),n=p.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-p.x,2)+Math.pow(i.y-p.y,2)),r=n-s,Math.abs(r)r?f===!1?l=v:u=v:f===!1?u=v:l=v,d++}return i.t=v,i}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r){var a=1e9,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=t,f=e;for(d=1;10>d;d++)l=.1*d,u=Math.pow(1-l,2)*t+2*l*(1-l)*r.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*r.y+Math.pow(l,2)*o,d>0&&(h=this._getDistanceToLine(p,f,u,c,n,s),a=a>h?h:a),p=u,f=c;return a}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var i=0;io.shape.height?(e=o.x+.5*o.shape.width,i=o.y-n):(e=o.x+n,i=o.y-.5*o.shape.height),[e,i,n]}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){for(var o=i.x,n=i.y,s=i.low,r=i.high,a=i.direction,h=10,d=0,l=this.options.selfReferenceSize,u=void 0,c=void 0,p=void 0,f=void 0,v=void 0,m=.05,g=.5*(s+r);r>=s&&h>d&&(g=.5*(s+r),u=this._pointOnCircle(o,n,l,g),c=Math.atan2(t.y-u.y,t.x-u.x),p=t.distanceToBorder(e,c),f=Math.sqrt(Math.pow(u.x-t.x,2)+Math.pow(u.y-t.y,2)),v=p-f,!(Math.abs(v)0?a>0?s=g:r=g:a>0?r=g:s=g,d++;return u.t=g,u}},{key:"getLineWidth",value:function(t,e){return t===!0?Math.max(this.selectionWidth,.3/this.body.view.scale):e===!0?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(t,e,i){var o=this.options.color;if(o.inherit!==!1){if("both"===o.inherit&&this.from.id!==this.to.id){var n=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,a=void 0;return s=this.from.options.color.highlight.border,a=this.to.options.color.highlight.border,this.from.selected===!1&&this.to.selected===!1?(s=r.overrideOpacity(this.from.options.color.border,this.options.color.opacity),a=r.overrideOpacity(this.to.options.color.border,this.options.color.opacity)):this.from.selected===!0&&this.to.selected===!1?a=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(s=this.from.options.color.border),n.addColorStop(0,s),n.addColorStop(1,a),n}this.colorDirty===!0&&("to"===o.inherit?(this.color.highlight=this.to.options.color.highlight.border,this.color.hover=this.to.options.color.hover.border,this.color.color=r.overrideOpacity(this.to.options.color.border,o.opacity)):(this.color.highlight=this.from.options.color.highlight.border,this.color.hover=this.from.options.color.hover.border,this.color.color=r.overrideOpacity(this.from.options.color.border,o.opacity)))}else this.colorDirty===!0&&(this.color.highlight=o.highlight,this.color.hover=o.hover,this.color.color=r.overrideOpacity(o.color,o.opacity));return this.colorDirty=!1,e===!0?this.color.highlight:i===!0?this.color.hover:this.color.color}},{key:"_circle",value:function(t,e,i,o){this.enableShadow(t),t.beginPath(),t.arc(e,i,o,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t)}},{key:"getDistanceToEdge",value:function(t,e,i,o,s,r,a){var h=0;if(this.from!=this.to)h=this._getDistanceToEdge(t,e,i,o,s,r,a);else{var d=this._getCircleData(),l=n(d,3),u=l[0],c=l[1],p=l[2],f=u-s,v=c-r;h=Math.abs(Math.sqrt(f*f+v*v)-p)}return this.labelModule.size.lefts&&this.labelModule.size.topr?0:h}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,h=r*r+a*a,d=((n-t)*r+(s-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"getArrowData",value:function(t,e,i,o,s){var r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=this.getLineWidth(o,s);if("from"===e?(h=this.from,d=this.to,l=.1,u=this.options.arrows.from.scaleFactor):"to"===e?(h=this.to,d=this.from,l=-.1,u=this.options.arrows.to.scaleFactor):(h=this.to,d=this.from,u=this.options.arrows.middle.scaleFactor),h!=d)if("middle"!==e)if(this.options.smooth.enabled===!0){a=this.findBorderPosition(h,t,{via:i});var p=this.getPoint(Math.max(0,Math.min(1,a.t+l)),i);r=Math.atan2(a.y-p.y,a.x-p.x)}else r=Math.atan2(h.y-d.y,h.x-d.x),a=this.findBorderPosition(h,t);else r=Math.atan2(h.y-d.y,h.x-d.x),a=this.getPoint(.5,i);else{var f=this._getCircleData(t),v=n(f,3),m=v[0],g=v[1],y=v[2];"from"===e?(a=this.findBorderPosition(this.from,t,{x:m,y:g,low:.25,high:.6,direction:-1}),r=-2*a.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(a=this.findBorderPosition(this.from,t,{x:m,y:g,low:.6,high:1,direction:1}),r=-2*a.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(a=this._pointOnCircle(m,g,y,.175),r=3.9269908169872414)}var b=15*u+3*c,_=a.x-.9*b*Math.cos(r),w=a.y-.9*b*Math.sin(r),x={x:_,y:w};return{point:a,core:x,angle:r,length:b}}},{key:"drawArrowHead",value:function(t,e,i,o){t.strokeStyle=this.getColor(t,e,i),t.fillStyle=t.strokeStyle,t.lineWidth=this.getLineWidth(e,i),t.arrow(o.point.x,o.point.y,o.angle,o.length),this.enableShadow(t),t.fill(),this.disableShadow(t)}},{key:"enableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor=this.options.shadow.color,t.shadowBlur=this.options.shadow.size,t.shadowOffsetX=this.options.shadow.x,t.shadowOffsetY=this.options.shadow.y)}},{key:"disableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e["default"]=a,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i=this.to.y?this.from.x<=this.to.x?(t=this.from.x+i*s,e=this.from.y-i*s):this.from.x>this.to.x&&(t=this.from.x-i*s,e=this.from.y-i*s):this.from.ythis.to.x&&(t=this.from.x-i*s,e=this.from.y+i*s)),"discrete"===o&&(t=i*s>n?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.x<=this.to.x?(t=this.from.x+i*n,e=this.from.y-i*n):this.from.x>this.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"===o&&(e=i*n>s?this.from.y:e));else if("straightCross"===o)Math.abs(this.from.x-this.to.x)<=Math.abs(this.from.y-this.to.y)?(t=this.from.x,e=this.from.yMath.abs(this.from.y-this.to.y)&&(t=this.from.x=this.to.y?this.from.x<=this.to.x?(t=this.from.x+i*s, -e=this.from.y-i*s,t=this.to.xthis.to.x&&(t=this.from.x-i*s,e=this.from.y-i*s,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*s,e=this.from.y+i*s,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.x<=this.to.x?(t=this.from.x+i*n,e=this.from.y-i*n,e=this.to.y>e?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,e=this.to.y1||this.startedStabilization===!0)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilized===!1){if(this.adaptiveTimestep===!0&&this.adaptiveTimestepEnabled===!0){var t=1.2;this.adaptiveCounter%this.adaptiveInterval===0?(this.timestep=2*this.timestep,this.calculateForces(),this.moveNodes(),this.revert(),this.timestep=.5*this.timestep,this.calculateForces(),this.moveNodes(),this.calculateForces(),this.moveNodes(),this._evaluateStepQuality()===!0?this.timestep=t*this.timestep:this.timestep/ts))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=this.options.maxVelocity?this.options.maxVelocity:1e9,i=0,o=0,n=5,s=0;se?s[t].x>0?e:-e:s[t].x,i.x+=s[t].x*o}else n[t].x=0,s[t].x=0;if(i.options.fixed.y===!1){var h=this.modelOptions.damping*s[t].y,d=(n[t].y-h)/i.options.mass;s[t].y+=d*o,s[t].y=Math.abs(s[t].y)>e?s[t].y>0?e:-e:s[t].y,i.y+=s[t].y*o}else n[t].y=0,s[t].y=0;var l=Math.sqrt(Math.pow(s[t].x,2)+Math.pow(s[t].y,2));return l}},{key:"calculateForces",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve()}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&t[e].x&&t[e].y&&(this.freezeCache[e]={x:t[e].options.fixed.x,y:t[e].options.fixed.y},t[e].options.fixed.x=!0,t[e].options.fixed.y=!0)}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]?this.options.stabilization.iterations:arguments[0];return"number"!=typeof e&&(console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",this.options.stabilization.iterations),e=this.options.stabilization.iterations),0===this.physicsBody.physicsNodeIndices.length?void(this.ready=!0):(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,void setTimeout(function(){return t._stabilizationBatch()},0))}},{key:"_stabilizationBatch",value:function(){this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0);for(var t=0;this.stabilized===!1&&t0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;o>s;s++)t=e[i[s]],t.options.mass>0&&(this._getForceContribution(n.root.children.NW,t),this._getForceContribution(n.root.children.NE,t),this._getForceContribution(n.root.children.SW,t),this._getForceContribution(n.root.children.SE,t))}}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=void 0,o=void 0,n=void 0;i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,n=Math.sqrt(i*i+o*o),n*t.calcSize>this.thetaInversed?this._calculateForces(n,i,o,e,t):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)):t.children.data.id!=e.id&&this._calculateForces(n,i,o,e,t)}}},{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1,e=t),this.overlapAvoidanceFactor<1&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=this.options.gravitationalConstant*n.mass*o.options.mass/Math.pow(t,3),r=e*s,a=i*s;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i=void 0,o=e.length,n=t[e[0]].x,s=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y,h=1;o>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(n>d&&(n=d),d>r&&(r=d),s>l&&(s=l),l>a&&(a=l))}var u=Math.abs(r-n)-Math.abs(a-s);u>0?(s-=.5*u,a+=.5*u):(n+=.5*u,r-=.5*u);var c=1e-5,p=Math.max(c,Math.abs(r-n)),f=.5*p,v=.5*(n+r),m=.5*(s+a),g={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-f,maxX:v+f,minY:m-f,maxY:m+f},size:p,calcSize:1/p,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(g.root);for(var h=0;o>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(g.root,i);return g}},{key:"_updateBranchMass",value:function(t,e){var i=t.mass+e.options.mass,o=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=o,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=o,t.mass=i;var n=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")}},{key:"_placeInRegion",value: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+=this.seededRandom(),e.y+=this.seededRandom()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}}},{key:"_splitBranch",value: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)}},{key:"_insertRegion",value:function(t,e){var i=void 0,o=void 0,n=void 0,s=void 0,r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY,s=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY,s=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY+r,s=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY+r,s=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:n,maxY:s},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value: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()}}]),t}();e["default"]=n,t.exports=e["default"]},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ii&&(s=.5*u>i?1:c*i+p,s/=i,o=t*s,n=e*s,l[r.id].x-=o,l[r.id].y-=n,l[a.id].x+=o,l[a.id].y+=n)}}}]),t}();e["default"]=n,t.exports=e["default"]},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ii?-Math.pow(f*i,2)+Math.pow(f*p,2):0,0===i?i=.01:s/=i,o=t*s,n=e*s,c[r.id].x-=o,c[r.id].y-=n,c[a.id].x+=o,c[a.id].y+=n}}}]),t}();e["default"]=n,t.exports=e["default"]},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i0){var s=n.edges.length+1,r=this.options.centralGravity*s*n.options.mass;o[n.id].x=e*r,o[n.id].y=i*r}}}]),e}(d["default"]);e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i=t&&i.push(n.id)}for(var o=0;o0&&Object.keys(p).length>0&&v===!0&&o.push({nodes:c,edges:p})}}}for(var u=0;uo?r.x:o,n=r.ys?r.y:s;return{x:.5*(i+o),y:.5*(n+s)}}},{key:"openCluster",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!0:arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");if(void 0===this.body.nodes[t])throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(void 0===this.body.nodes[t].containedNodes)return void console.log("The node:"+t+" is not a cluster.");var o=this.body.nodes[t],n=o.containedNodes,s=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var r={},h={x:o.x,y:o.y};for(var d in n)if(n.hasOwnProperty(d)){var u=this.body.nodes[d];r[d]={x:u.x,y:u.y}}var c=e.releaseFunction(h,r);for(var d in n)if(n.hasOwnProperty(d)){var u=this.body.nodes[d];void 0!==c[d]&&(u.x=void 0===c[d].x?o.x:c[d].x,u.y=void 0===c[d].y?o.y:c[d].y)}}else for(var d in n)if(n.hasOwnProperty(d)){var u=this.body.nodes[d];u=n[d],u.options.fixed.x===!1&&(u.x=o.x),u.options.fixed.y===!1&&(u.y=o.y)}for(var d in n)if(n.hasOwnProperty(d)){var u=this.body.nodes[d];u.vx=o.vx,u.vy=o.vy,u.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[d]}for(var p=[],f=0;fo;)e.push(this.body.nodes[t].id),t=this.clusteredNodes[t].clusterId,o++;return e.push(this.body.nodes[t].id),e.reverse(),e}},{key:"_getConnectedId",value:function(t,e){return t.toId!=e?t.toId:t.fromId!=e?t.fromId:t.fromId}},{key:"_getHubSize",value:function(){for(var t=0,e=0,i=0,o=0,n=0;no&&(o=s.edges.length),t+=s.edges.length,e+=Math.pow(s.edges.length,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r),h=Math.floor(t+2*a);return h>o&&(h=o),h}}]),t}();e["default"]=u,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),n0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,t.requiresTimeout===!0?clearTimeout(t.renderTimer):cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];s.selectiveDeepExtend(e,this.options,t)}}},{key:"_startRendering",value:function(){this.renderingActive===!0&&void 0===this.renderTimer&&(this.requiresTimeout===!0?this.renderTimer=window.setTimeout(this._renderStep.bind(this),this.simulationInterval):this.renderTimer=window.requestAnimationFrame(this._renderStep.bind(this)))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this.requiresTimeout===!0?window.setTimeout(function(){t._redraw(!1)},0):window.requestAnimationFrame(function(){t._redraw(!1)}))}},{key:"_redraw",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e=this.canvas.frame.canvas.getContext("2d");0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),t===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&this._drawEdges(e),(this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),t===!0&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){var t=this.canvas.frame.canvas.getContext("2d");void 0===this.pixelRatio&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0),t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=20,a=this.canvas.DOMtoCanvas({x:-r,y:-r}),h=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+r,y:this.canvas.frame.canvas.clientHeight+r}),d={top:a.y,left:a.x,bottom:h.y,right:h.x},l=0;l0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==t.indexOf("%")||-1!==t.indexOf("px"))return t;if(-1===t.indexOf("%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new s(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:30}),r.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new s(this.frame),r.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length<=0||void 0===arguments[0]?this.options.width:arguments[0],e=arguments.length<=1||void 0===arguments[1]?this.options.height:arguments[1];t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.frame.canvas.getContext("2d"),r=this.pixelRatio;return this.pixelRatio=(window.devicePixelRatio||1)/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e?(this._getCameraState(r),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=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,i=!0):(this.frame.canvas.width==Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&this.frame.canvas.height==Math.round(this.frame.canvas.clientHeight*this.pixelRatio)||this._getCameraState(r),this.frame.canvas.width!=Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&(this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),i=!0),this.frame.canvas.height!=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)&&(this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),i=!0)),i===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),i}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e["default"]=h,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=a["default"].getRange(this.body.nodes,t.nodes);var h=this.body.nodeIndices.length;o=12.662/(h+7.4147)+.0964822;var d=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);o*=d}else{this.body.emitter.emit("_resizeNodes"),i=a["default"].getRange(this.body.nodes,t.nodes);var l=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),c=this.canvas.frame.canvas.clientWidth/l,p=this.canvas.frame.canvas.clientHeight/u;o=p>=c?c:p}o>1?o=1:0===o&&(o=1);var f=a["default"].findCenter(i),v={position:f,scale:o,animation:t.animation};this.moveTo(v)}},{key:"focus",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){return void 0===t?void(t={}):(void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),t.animation===!1&&(t.animation={duration:0}),t.animation===!0&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),void this.animateView(t))}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),t.locked===!0&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=t===!0?1:this.easingTime;var e=h.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){ -return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();e["default"]=d,t.exports=e["default"]},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e),this.selectionHandler._generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler._generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=this.selectionHandler._getSelectedEdgeCount(),n=this.selectionHandler._getSelectedNodeCount(),s=this.selectionHandler.getSelection(),r=void 0;r=i===!0?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var a=this.selectionHandler._getSelectedEdgeCount(),h=this.selectionHandler._getSelectedNodeCount(),d=this.selectionHandler.getSelection(),l=this._determineIfDifferent(s,d),u=l.nodesChanged,c=l.edgesChanged,p=!1;h-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,p=!0):u===!0&&h>0?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),p=!0,r=!0):0>h-n&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0),a-o>0&&p===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a>0&&c===!0?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):0>a-o&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0),r===!0&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineIfDifferent",value:function(t,e){for(var i=!1,o=!1,n=0;nt&&(t=1e-5),t>10&&(t=10);var o=void 0;void 0!==this.drag&&this.drag.dragging===!0&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));var n=this.body.view.translation,s=t/i,r=(1-s)*e.x+n.x*s,a=(1-s)*e.y+n.y*s;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},void 0!=o){var h=this.canvas.canvasToDOM(o);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),t>i?this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale}):this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale})}}},{key:"onMouseWheel",value:function(t){if(this.options.zoomView===!0){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),0!==e){var i=this.body.view.scale,o=e/10;0>e&&(o/=1-o),i*=1+o;var n=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(i,n)}t.preventDefault()}}},{key:"onMouseMove",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),o=!1;if(void 0!==this.popup&&(this.popup.hidden===!1&&this._checkHidePopup(i),this.popup.hidden===!1&&(o=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.bindToWindow===!1&&this.options.keyboard.enabled===!0&&this.canvas.frame.focus(),o===!1&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=setTimeout(function(){return e._checkShowPopup(i)},this.options.tooltipDelay))),this.options.hover===!0){var n=this.selectionHandler.getNodeAt(i);void 0===n&&(n=this.selectionHandler.getEdgeAt(i)),this.selectionHandler.hoverObject(n)}}},{key:"_checkShowPopup",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),o={left:e,top:i,right:e,bottom:i},n=void 0===this.popupObj?void 0:this.popupObj.id,s=!1,r="node";if(void 0===this.popupObj){for(var a=this.body.nodeIndices,h=this.body.nodes,l=void 0,u=[],c=0;c0&&(this.popupObj=h[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&s===!1){for(var p=this.body.edgeIndices,f=this.body.edges,v=void 0,m=[],c=0;c0&&(this.popupObj=f[m[m.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new d["default"](this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e),i===!0)){var o=this.selectionHandler.getNodeAt(t);i=o.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));i===!1&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}();e["default"]=u,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)this.boundFunctions.hasOwnProperty(t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){this.body.view.scale*=1+this.options.keyboard.speed.zoom,this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale})}},{key:"_zoomOut",value:function(){this.body.view.scale/=1+this.options.keyboard.speed.zoom,this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale})}},{key:"configureKeyboardBindings",value:function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=a({container:window,preventDefault:!0}):this.keycharm=a({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(this.keycharm.bind("up",function(){t.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){t.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){t.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){t.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){t.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){t.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){t.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){t.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){t.unbindFromRedraw("_zoomOut")},"keyup")))}}]),t}();e["default"]=h,t.exports=e["default"]},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;io&&(s=o-e-this.padding),sn&&(r=n-i-this.padding),r0?e===!0?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,o=0;o0?e===!0?this.body.edges[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_addToSelection",value:function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t}},{key:"_addToHover",value:function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:"_removeFromSelection",value:function(t){t instanceof s?(delete this.selectionObj.nodes[t.id],this._unselectConnectedEdges(t)):delete this.selectionObj.edges[t.id]}},{key:"unselectAll",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].unselect();for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&this.selectionObj.edges[e].unselect();this.selectionObj={nodes:{},edges:{}}}},{key:"_getSelectedNodeCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedNode",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t]}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t]}},{key:"_getSelectedEdgeCount",value:function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedObjectCount",value: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}},{key:"_selectionIsEmpty",value: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}},{key:"_clusterInSelection",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e0&&(this.options.hierarchical.levelSeparation*=-1):this.options.hierarchical.levelSeparation<0&&(this.options.hierarchical.levelSeparation*=-1),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(i===!0)return this.body.emitter.emit("refresh"),d.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={enabled:void 0===this.optionsBackup.physics.enabled?!0:this.optionsBackup.physics.enabled,solver:"hierarchicalRepulsion"},this.optionsBackup.physics.enabled=void 0===this.optionsBackup.physics.enabled?!0:this.optionsBackup.physics.enabled,this.optionsBackup.physics.solver=this.optionsBackup.physics.solver||"barnesHut"):"object"==typeof t.physics?(this.optionsBackup.physics.enabled=void 0===t.physics.enabled?!0:t.physics.enabled,this.optionsBackup.physics.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):t.physics!==!1&&(this.optionsBackup.physics.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var e="horizontal";"RL"!==this.options.hierarchical.direction&&"LR"!==this.options.hierarchical.direction||(e="vertical"),void 0===t.edges?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1}):void 0===t.edges.smooth?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1):"boolean"==typeof t.edges.smooth?(this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:e}):(void 0!==t.edges.smooth.type&&"dynamic"!==t.edges.smooth.type&&(e=t.edges.smooth.type),this.optionsBackup.edges={smooth:void 0===t.edges.smooth.enabled?!0:t.edges.smooth.enabled,type:void 0===t.edges.smooth.type?"dynamic":t.edges.smooth.type,roundness:void 0===t.edges.smooth.roundness?.5:t.edges.smooth.roundness,forceDirection:void 0===t.edges.smooth.forceDirection?!1:t.edges.smooth.forceDirection -},t.edges.smooth={enabled:void 0===t.edges.smooth.enabled?!0:t.edges.smooth.enabled,type:e,roundness:void 0===t.edges.smooth.roundness?.5:t.edges.smooth.roundness,forceDirection:void 0===t.edges.smooth.forceDirection?!1:t.edges.smooth.forceDirection}),this.body.emitter.emit("_forceDisableDynamicCurves",e)}return t}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"positionInitially",value:function(t){if(this.options.hierarchical.enabled!==!0){this.randomSeed=this.initialRandomSeed;for(var e=0;es){for(var r=this.body.nodeIndices.length;this.body.nodeIndices.length>s;){n+=1;var a=this.body.nodeIndices.length;n%3===0?this.body.modules.clustering.clusterBridges():this.body.modules.clustering.clusterOutliers();var h=this.body.nodeIndices.length;if(a==h&&n%3!==0||n>o)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*r)})}this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._shiftToCenter();for(var d=70,e=0;e0){var t=void 0,e=void 0,i=!1,o=!0,n=!1;this.hierarchicalLevels={},this.lastNodeOnLevel={},this.hierarchicalChildrenReference={},this.hierarchicalParentReference={},this.hierarchicalTrees={},this.treeIndex=-1,this.distributionOrdering={},this.distributionIndex={},this.distributionOrderingPresence={};for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0===t.options.x&&void 0===t.options.y&&(o=!1),void 0!==t.options.level?(i=!0,this.hierarchicalLevels[e]=t.options.level):n=!0);if(n===!0&&i===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");n===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():"directed"===this.options.hierarchical.sortMethod?this._determineLevelsDirected():"custom"===this.options.hierarchical.sortMethod&&this._determineLevelsCustomCallback());for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&void 0===this.hierarchicalLevels[s]&&(this.hierarchicalLevels[s]=0);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(){for(var e=a(),i=0;i0)for(var n=0;n=l&&(r=Math.min(u,r),a=Math.max(u,a))}return[r,a,o,n]},l=function w(e){var i=t.hierarchicalLevels[e];if(t.hierarchicalChildrenReference[e]){var o=t.hierarchicalChildrenReference[e];if(o.length>0)for(var n=0;n1)for(var a=0;at.options.hierarchical.nodeSpacing){var c={};c[i.id]=!0;var p={};p[o.id]=!0,h(i,c),h(o,p);var f=u(i,o),v=d(c,f),m=s(v,4),g=(m[0],m[1]),y=(m[2],m[3],d(p,f)),b=s(y,4),_=b[0],w=(b[1],b[2]),x=(b[3],Math.abs(g-_));if(x>t.options.hierarchical.nodeSpacing){var k=g-_+t.options.hierarchical.nodeSpacing;k<-w+t.options.hierarchical.nodeSpacing&&(k=-w+t.options.hierarchical.nodeSpacing),0>k&&(t._shiftBlock(o.id,k),e=!0,n===!0&&t._centerParent(o))}}},v=function(o,n){for(var r=n.id,a=n.edges,l=t.hierarchicalLevels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},p=[],f=0;fr;r++){var a=g(o,i),h=y(o,i),d=40,l=Math.max(-d,Math.min(d,Math.round(a/h)));if(o-=l,void 0!==s[o])break;s[o]=r}return o},_=function(o){var r=t._getPositionForHierarchy(n);if(void 0===i[n.id]){var a={};a[n.id]=!0,h(n,a),i[n.id]=a}var l=d(i[n.id]),u=s(l,4),c=(u[0],u[1],u[2]),p=u[3],f=o-r,v=0;f>0?v=Math.min(f,p-t.options.hierarchical.nodeSpacing):0>f&&(v=-Math.min(-f,c-t.options.hierarchical.nodeSpacing)),0!=v&&(t._shiftBlock(n.id,v),e=!0)},w=function(i){var o=t._getPositionForHierarchy(n),r=t._getSpaceAroundNode(n),a=s(r,2),h=a[0],d=a[1],l=i-o,u=o;l>0?u=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):0>l&&(u=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t._setPositionForHierarchy(n,u,void 0,!0),e=!0)},x=b(o,p);_(x),x=b(o,a),w(x)},m=function(i){var o=Object.keys(t.distributionOrdering);o=o.reverse();for(var n=0;i>n;n++){e=!1;for(var s=0;sn&&(e=!1,p(f,o,!0),e===!0);n++);},y=function(){for(var e in t.body.nodes)t.body.nodes.hasOwnProperty(e)&&t._centerParent(t.body.nodes[e])},b=function(){var e=Object.keys(t.distributionOrdering);e=e.reverse();for(var i=0;i0)for(var d=0;dg&&Math.abs(g)0&&Math.abs(g)0&&(r=this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing),this._setPositionForHierarchy(s,r,e),this._validataPositionAndContinue(s,e,r),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){if(void 0!==this.hierarchicalChildrenReference[t]){for(var i=[],o=0;oe&&void 0===this.positionedNodes[n.id]))return;var r=void 0;r=0===o?this._getPositionForHierarchy(this.body.nodes[t]):this._getPositionForHierarchy(i[o-1])+this.options.hierarchical.nodeSpacing,this._setPositionForHierarchy(n,r,s),this._validataPositionAndContinue(n,s,r)}for(var a=1e9,h=-1e9,o=0;o0&&(e=this._getHubSize(),0!==e);)for(var o in this.body.nodes)if(this.body.nodes.hasOwnProperty(o)){var n=this.body.nodes[o];n.edges.length===e&&this._crawlNetwork(i,o)}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=1e5,i=function(t,e,i){},o=function(o,n,s){var r=t.hierarchicalLevels[o.id];void 0===r&&(t.hierarchicalLevels[o.id]=e);var a=i(h["default"].cloneOptions(o,"node"),h["default"].cloneOptions(n,"node"),h["default"].cloneOptions(s,"edge"));t.hierarchicalLevels[n.id]=t.hierarchicalLevels[o.id]+a};this._crawlNetwork(o),this._setMinLevelToZero()}},{key:"_determineLevelsDirected",value:function(){var t=this,e=1e4,i=function(i,o,n){var s=t.hierarchicalLevels[i.id];void 0===s&&(t.hierarchicalLevels[i.id]=e),n.toId==o.id?t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]+1:t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]-1};this._crawlNetwork(i),this._setMinLevelToZero()}},{key:"_setMinLevelToZero",value:function(){var t=1e9;for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&void 0!==this.hierarchicalLevels[e]&&(t=Math.min(this.hierarchicalLevels[e],t));for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&void 0!==this.hierarchicalLevels[e]&&(this.hierarchicalLevels[e]-=t)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){if(t.hierarchicalLevels[i.id]>t.hierarchicalLevels[e.id]){var o=e.id,n=i.id;void 0===t.hierarchicalChildrenReference[o]&&(t.hierarchicalChildrenReference[o]=[]),t.hierarchicalChildrenReference[o].push(n),void 0===t.hierarchicalParentReference[n]&&(t.hierarchicalParentReference[n]=[]),t.hierarchicalParentReference[n].push(o)}};this._crawlNetwork(e)}},{key:"_crawlNetwork",value:function(t,e){var i=this;void 0===t&&(t=function(){});var o={},n=0,s=function h(e,n){if(void 0===o[e.id]){void 0===i.hierarchicalTrees[e.id]&&(i.hierarchicalTrees[e.id]=n,i.treeIndex=Math.max(n,i.treeIndex)),o[e.id]=!0;for(var s=void 0,r=0;r1&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.sort(function(t,e){return t.x-e.x}):t.sort(function(t,e){return t.y-e.y}))}}]),t}();e["default"]=l,t.exports=e["default"]},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i0&&this.options.deleteNode!==!1?(n===!0&&this._createSeperator(4),this._createDeleteButton(o)):0===t&&this.options.deleteEdge!==!1&&(n===!0&&this._createSeperator(4),this._createDeleteButton(o))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var t=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var e=this.selectionHandler._getSelectedNode();if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(e.isCluster!==!0){var i=s.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",function(){}),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){var t=this;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",this.guiEnabled===!0){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId?!function(){var e=t.body.edges[t.edgeBeingEditedId],i=t._getNewTargetNode(e.from.x,e.from.y),o=t._getNewTargetNode(e.to.x,e.to.y);t.temporaryIds.nodes.push(i.id),t.temporaryIds.nodes.push(o.id),t.body.nodes[i.id]=i,t.body.nodeIndices.push(i.id),t.body.nodes[o.id]=o,t.body.nodeIndices.push(o.id),t._temporaryBindUI("onTouch",t._controlNodeTouch.bind(t)),t._temporaryBindUI("onTap",function(){}),t._temporaryBindUI("onHold",function(){}),t._temporaryBindUI("onDragStart",t._controlNodeDragStart.bind(t)),t._temporaryBindUI("onDrag",t._controlNodeDrag.bind(t)),t._temporaryBindUI("onDragEnd",t._controlNodeDragEnd.bind(t)),t._temporaryBindUI("onMouseMove",function(){}),t._temporaryBindEvent("beforeDrawing",function(t){var n=e.edgeType.findBorderPositions(t);i.selected===!1&&(i.x=n.from.x,i.y=n.from.y),o.selected===!1&&(o.x=n.to.x,o.y=n.to.y)}),t.body.emitter.emit("_redraw")}():this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var t=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),o=void 0;if(e.length>0){for(var n=0;n0&&"function"==typeof this.options.deleteEdge&&(o=this.options.deleteEdge);if("function"==typeof o){var s={nodes:e,edges:i};if(2!==o.length)throw new Error("The function for delete does not support two arguments (data, callback)");o(s,function(e){null!==e&&void 0!==e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=s.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+s.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},s.recursiveDOMDelete(this.editModeDiv);var t=this.options.locales[this.options.locale],e=this._createButton("editMode","vis-button vis-edit vis-edit-mode",t.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(e),this._bindHammerToDiv(e,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(s.recursiveDOMDelete(this.editModeDiv),s.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var t=0;t=0;r--)if(n[r]!==this.selectedControlNode.id){s=this.body.nodes[n[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(s.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,o.to.id):this._performEditEdge(o.from.id,s.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=s.extend({},this.body.view.translation);var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(i.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var o=this._getNewTargetNode(i.x,i.y);this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id);var n=this.body.functions.createEdge({id:"connectionEdge"+s.randomUUID(),from:i.id,to:o.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[n.id]=n,this.body.edgeIndices.push(n.id),this.temporaryIds.nodes.push(o.id),this.temporaryIds.edges.push(n.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(e.x),i.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=void 0;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(n[r])){s=this.body.nodes[n[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(s.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(o,s.id)),this.body.emitter.emit("_redraw")}},{key:"_performAddNode",value:function(t){var e=this,i={id:s.randomUUID(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(t){null!==t&&void 0!==t&&"addNode"===e.inMode&&(e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,o={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(o,function(t){null!==t&&void 0!==t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,o={id:this.edgeBeingEditedId,from:t,to:e};if("function"==typeof this.options.editEdge){if(2!==this.options.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editEdge(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw")):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}();e["default"]=h,t.exports=e["default"]},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="array",r="object",a="dom",h="any",d={configure:{enabled:{"boolean":o},filter:{"boolean":o,string:i,array:s,"function":"function"},container:{dom:a},showButton:{"boolean":o},__type__:{object:r,"boolean":o,string:i,array:s,"function":"function"}},edges:{arrows:{to:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},middle:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},from:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},__type__:{string:["from","to","middle"],object:r}},arrowStrikethrough:{"boolean":o},color:{color:{string:i},highlight:{string:i},hover:{string:i},inherit:{string:["from","to","both"],"boolean":o},opacity:{number:n},__type__:{object:r,string:i}},dashes:{"boolean":o,array:s},font:{color:{string:i},size:{number:n},face:{string:i},background:{string:i},strokeWidth:{number:n},strokeColor:{string:i},align:{string:["horizontal","top","middle","bottom"]},__type__:{object:r,string:i}},hidden:{"boolean":o},hoverWidth:{"function":"function",number:n},label:{string:i,undefined:"undefined"},labelHighlightBold:{"boolean":o},length:{number:n,undefined:"undefined"},physics:{"boolean":o},scaling:{min:{number:n},max:{number:n},label:{enabled:{"boolean":o},min:{number:n},max:{number:n},maxVisible:{number:n},drawThreshold:{number:n},__type__:{object:r,"boolean":o}},customScalingFunction:{"function":"function"},__type__:{object:r}},selectionWidth:{"function":"function",number:n},selfReferenceSize:{number:n},shadow:{enabled:{"boolean":o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:r,"boolean":o}},smooth:{enabled:{"boolean":o},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:n},forceDirection:{string:["horizontal","vertical","none"],"boolean":o},__type__:{object:r,"boolean":o}},title:{string:i,undefined:"undefined"},width:{number:n},value:{number:n,undefined:"undefined"},__type__:{object:r}},groups:{useDefaultGroups:{"boolean":o},__any__:"get from nodes, will be overwritten below",__type__:{object:r}},interaction:{dragNodes:{"boolean":o},dragView:{"boolean":o},hideEdgesOnDrag:{"boolean":o},hideNodesOnDrag:{"boolean":o},hover:{"boolean":o},keyboard:{enabled:{"boolean":o},speed:{x:{number:n},y:{number:n},zoom:{number:n},__type__:{object:r}},bindToWindow:{"boolean":o},__type__:{object:r,"boolean":o}},multiselect:{"boolean":o},navigationButtons:{"boolean":o},selectable:{"boolean":o},selectConnectedEdges:{"boolean":o},hoverConnectedEdges:{"boolean":o},tooltipDelay:{number:n},zoomView:{"boolean":o},__type__:{object:r}},layout:{randomSeed:{undefined:"undefined",number:n},improvedLayout:{"boolean":o},hierarchical:{enabled:{"boolean":o},levelSeparation:{number:n},nodeSpacing:{number:n},treeSpacing:{number:n},blockShifting:{"boolean":o},edgeMinimization:{"boolean":o},parentCentralization:{"boolean":o},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:r,"boolean":o}},__type__:{object:r}},manipulation:{enabled:{"boolean":o},initiallyActive:{"boolean":o},addNode:{"boolean":o,"function":"function"},addEdge:{"boolean":o,"function":"function"},editNode:{"function":"function"},editEdge:{"boolean":o,"function":"function"},deleteNode:{"boolean":o,"function":"function"},deleteEdge:{"boolean":o,"function":"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:r,"boolean":o}},nodes:{borderWidth:{number:n},borderWidthSelected:{number:n,undefined:"undefined"},brokenImage:{string:i,undefined:"undefined"},color:{border:{string:i},background:{string:i},highlight:{border:{string:i},background:{string:i},__type__:{object:r,string:i}},hover:{border:{string:i},background:{string:i},__type__:{object:r,string:i}},__type__:{object:r,string:i}},fixed:{x:{"boolean":o},y:{"boolean":o},__type__:{object:r,"boolean":o}},font:{color:{string:i},size:{number:n},face:{string:i},background:{string:i},strokeWidth:{number:n},strokeColor:{string:i},__type__:{object:r,string:i}},group:{string:i,number:n,undefined:"undefined"},hidden:{"boolean":o},icon:{face:{string:i},code:{string:i},size:{number:n},color:{string:i},__type__:{object:r}},id:{string:i,number:n},image:{string:i,undefined:"undefined"},label:{string:i,undefined:"undefined"},labelHighlightBold:{"boolean":o},level:{number:n,undefined:"undefined"},mass:{number:n},physics:{"boolean":o},scaling:{min:{number:n},max:{number:n},label:{enabled:{"boolean":o},min:{number:n},max:{number:n},maxVisible:{number:n},drawThreshold:{number:n},__type__:{object:r,"boolean":o}},customScalingFunction:{"function":"function"},__type__:{object:r}},shadow:{enabled:{"boolean":o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:r,"boolean":o}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon"]},shapeProperties:{borderDashes:{"boolean":o,array:s},borderRadius:{number:n},interpolation:{"boolean":o},useImageSize:{"boolean":o},useBorderWithImage:{"boolean":o},__type__:{object:r}},size:{number:n},title:{string:i,undefined:"undefined"},value:{number:n,undefined:"undefined"},x:{number:n},y:{number:n},__type__:{object:r}},physics:{enabled:{"boolean":o},barnesHut:{gravitationalConstant:{number:n},centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},damping:{number:n},avoidOverlap:{number:n},__type__:{object:r}},forceAtlas2Based:{gravitationalConstant:{number:n},centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},damping:{number:n},avoidOverlap:{number:n},__type__:{object:r}},repulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:r}},hierarchicalRepulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:r}},maxVelocity:{number:n},minVelocity:{number:n},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{"boolean":o},iterations:{number:n},updateInterval:{number:n},onlyDynamicEdges:{"boolean":o},fit:{"boolean":o},__type__:{object:r,"boolean":o}},timestep:{number:n},adaptiveTimestep:{"boolean":o},__type__:{object:r,"boolean":o}},autoResize:{"boolean":o},clickToUse:{"boolean":o},locale:{string:i},locales:{__any__:{any:h},__type__:{object:r}},height:{string:i},width:{string:i},__type__:{object:r}};d.groups.__any__=d.nodes,d.manipulation.controlNodeStyle=d.nodes;var l={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05]},middle:{enabled:!1,scaleFactor:[1,0,3,.05]},from:{enabled:!1,scaleFactor:[1,0,3,.05]}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]},global:{locale:["en","nl"]}};e.allOptions=d,e.configureOptions=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(){function t(t,e){for(var i=0;in&&h>a;){a+=1;var m=this._getHighestEnergyNode(i),g=s(m,4);for(u=g[0],l=g[1],c=g[2],p=g[3],f=l,v=0;f>r&&d>v;){v+=1,this._moveNode(u,c,p);var y=this._getEnergy(u),b=s(y,3);f=b[0],c=b[1],p=b[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=0,n=e[0],r=0,a=0,h=0;ho&&(o=c,n=d,r=p,a=f)}}return[n,o,r,a]}},{key:"_getEnergy",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=i[t].x,n=i[t].y,s=0,r=0,a=0;ad;d++)for(var s=0;h-1>s;s++)for(var r=s+1;h>r;r++)o[e[s]][e[r]]=Math.min(o[e[s]][e[r]],o[e[s]][e[d]]+o[e[d]][e[r]]),o[e[r]][e[s]]=o[e[s]][e[r]];return o}}]),t}();e["default"]=n,t.exports=e["default"]},function(t,e){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath(),i*=1.15,e+=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e-(r-s)),this.lineTo(t+n,e+s),this.lineTo(t-n,e+s),this.lineTo(t,e-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath(),i*=1.15,e-=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e+(r-s)),this.lineTo(t+n,e-s),this.lineTo(t-n,e-s),this.lineTo(t,e+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath(),i*=.82,e+=.1*i;for(var o=0;10>o;o++){var n=o%2===0?1.3*i:.5*i;this.lineTo(t+n*Math.sin(2*o*Math.PI/10),e-n*Math.cos(2*o*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(t,e,i){this.beginPath(),this.lineTo(t,e+i),this.lineTo(t+i,e),this.lineTo(t,e-i),this.lineTo(t-i,e),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,o,n){var s=Math.PI/180;0>i-2*n&&(n=i/2),0>o-2*n&&(n=o/2),this.beginPath(),this.moveTo(t+n,e),this.lineTo(t+i-n,e),this.arc(t+i-n,e+n,n,270*s,360*s,!1),this.lineTo(t+i,e+o-n),this.arc(t+i-n,e+o-n,n,0,90*s,!1),this.lineTo(t+n,e+o),this.arc(t+n,e+o-n,n,90*s,180*s,!1),this.lineTo(t,e+n),this.arc(t+n,e+n,n,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,o){var n=.5522848,s=i/2*n,r=o/2*n,a=t+i,h=e+o,d=t+i/2,l=e+o/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-s,e,d,e),this.bezierCurveTo(d+s,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+s,h,d,h),this.bezierCurveTo(d-s,h,t,l+r,t,l),this.closePath()},CanvasRenderingContext2D.prototype.database=function(t,e,i,o){var n=1/3,s=i,r=o*n,a=.5522848,h=s/2*a,d=r/2*a,l=t+s,u=e+r,c=t+s/2,p=e+r/2,f=e+(o-r/2),v=e+o;this.beginPath(),this.moveTo(l,p),this.bezierCurveTo(l,p+d,c+h,u,c,u),this.bezierCurveTo(c-h,u,t,p+d,t,p),this.bezierCurveTo(t,p-d,c-h,e,c,e),this.bezierCurveTo(c+h,e,l,p-d,l,p),this.lineTo(l,f),this.bezierCurveTo(l,f+d,c+h,v,c,v),this.bezierCurveTo(c-h,v,t,f+d,t,f),this.lineTo(t,p)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,o){var n=t-o*Math.cos(i),s=e-o*Math.sin(i),r=t-.9*o*Math.cos(i),a=e-.9*o*Math.sin(i),h=n+o/3*Math.cos(i+.5*Math.PI),d=s+o/3*Math.sin(i+.5*Math.PI),l=n+o/3*Math.cos(i-.5*Math.PI),u=s+o/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,u),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,o,n){this.beginPath(),this.moveTo(t,e);for(var s=n.length,r=i-t,a=o-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,u=!0,c=0,p=n[0];d>=.1;)p=n[l++%s],p>d&&(p=d),c=Math.sqrt(p*p/(1+h*h)),c=0>r?-c:c,t+=c,e+=h*c,u===!0?this.lineTo(t,e):this.moveTo(t,e),d-=p,u=!u})},function(t,e){function i(t){return P=t,p()}function o(){I=0,N=P.charAt(0)}function n(){I++,N=P.charAt(I)}function s(){return P.charAt(I+1)}function r(t){return A.test(t)}function a(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function h(t,e,i){for(var o=e.split("."),n=t;o.length;){var s=o.shift();o.length?(n[s]||(n[s]={}),n=n[s]):n[s]=i}}function d(t,e){for(var i,o,n=null,s=[t],r=t;r.parent;)s.push(r.parent),r=r.parent;if(r.nodes)for(i=0,o=r.nodes.length;o>i;i++)if(e.id===r.nodes[i].id){n=r.nodes[i];break}for(n||(n={id:e.id},t.node&&(n.attr=a(n.attr,t.node))),i=s.length-1;i>=0;i--){var h=s[i];h.nodes||(h.nodes=[]),-1===h.nodes.indexOf(n)&&h.nodes.push(n)}e.attr&&(n.attr=a(n.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 u(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=a({},t.edge)),s.attr=a(s.attr||{},n),s}function c(){for(L=T.NULL,z="";" "===N||" "===N||"\n"===N||"\r"===N;)n();do{var t=!1;if("#"===N){for(var e=I-1;" "===P.charAt(e)||" "===P.charAt(e);)e--;if("\n"===P.charAt(e)||""===P.charAt(e)){for(;""!=N&&"\n"!=N;)n();t=!0}}if("/"===N&&"/"===s()){for(;""!=N&&"\n"!=N;)n();t=!0}if("/"===N&&"*"===s()){for(;""!=N;){if("*"===N&&"/"===s()){n(),n();break}n()}t=!0}for(;" "===N||" "===N||"\n"===N||"\r"===N;)n()}while(t);if(""===N)return void(L=T.DELIMITER);var i=N+s();if(E[i])return L=T.DELIMITER,z=i,n(),void n();if(E[N])return L=T.DELIMITER,z=N,void n();if(r(N)||"-"===N){for(z+=N,n();r(N);)z+=N,n();return"false"===z?z=!1:"true"===z?z=!0:isNaN(Number(z))||(z=Number(z)),void(L=T.IDENTIFIER)}if('"'===N){for(n();""!=N&&('"'!=N||'"'===N&&'"'===s());)z+=N,'"'===N&&n(),n();if('"'!=N)throw w('End of string " expected');return n(),void(L=T.IDENTIFIER)}for(L=T.UNKNOWN;""!=N;)z+=N,n();throw new SyntaxError('Syntax error in part "'+x(z,30)+'"')}function p(){var t={};if(o(),c(),"strict"===z&&(t.strict=!0,c()),"graph"!==z&&"digraph"!==z||(t.type=z,c()),L===T.IDENTIFIER&&(t.id=z,c()),"{"!=z)throw w("Angle bracket { expected");if(c(),f(t),"}"!=z)throw w("Angle bracket } expected");if(c(),""!==z)throw w("End of file expected");return c(),delete t.node,delete t.edge,delete t.graph,t}function f(t){for(;""!==z&&"}"!=z;)v(t),";"===z&&c()}function v(t){var e=m(t);if(e)return void b(t,e);var i=g(t);if(!i){if(L!=T.IDENTIFIER)throw w("Identifier expected");var o=z;if(c(),"="===z){if(c(),L!=T.IDENTIFIER)throw w("Identifier expected");t[o]=z,c()}else y(t,o)}}function m(t){var e=null;if("subgraph"===z&&(e={},e.type="subgraph",c(),L===T.IDENTIFIER&&(e.id=z,c())),"{"===z){if(c(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,f(e),"}"!=z)throw w("Angle bracket } expected");c(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function g(t){return"node"===z?(c(),t.node=_(),"node"):"edge"===z?(c(),t.edge=_(),"edge"):"graph"===z?(c(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},o=_();o&&(i.attr=o),d(t,i),b(t,e)}function b(t,e){for(;"->"===z||"--"===z;){var i,o=z;c();var n=m(t);if(n)i=n;else{if(L!=T.IDENTIFIER)throw w("Identifier or subgraph expected");i=z,d(t,{id:i}),c()}var s=_(),r=u(t,e,i,o,s);l(t,r),e=i}}function _(){for(var t=null;"["===z;){for(c(),t={};""!==z&&"]"!=z;){if(L!=T.IDENTIFIER)throw w("Attribute name expected");var e=z;if(c(),"="!=z)throw w("Equal sign = expected");if(c(),L!=T.IDENTIFIER)throw w("Attribute value expected");var i=z;h(t,e,i),c(),","==z&&c()}if("]"!=z)throw w("Bracket ] expected");c()}return t}function w(t){return new SyntaxError(t+', got "'+x(z,30)+'" (char '+I+")")}function x(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function k(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function O(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},P="",I=0,N="",z="",L=T.NULL,A=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=D},function(t,e){function i(t,e){var i=[],o=[],n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==e&&(void 0!==e.fixed&&(n.nodes.fixed=e.fixed),void 0!==e.parseColor&&(n.nodes.parseColor=e.parseColor),void 0!==e.inheritColor&&(n.edges.inheritColor=e.inheritColor));for(var s=t.edges,r=t.nodes,a=0;ai;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var o;if(void 0!==t){if(null===t)return null;if(!i)return t;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){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(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(n.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return o=r.exec(t),o?new Date(Number(o[1])):n(t).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return n(t);if(t instanceof Date)return n(t.valueOf());if(n.isMoment(t))return n(t);if(e.isString(t))return o=r.exec(t),n(o?Number(o[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(n.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return o=r.exec(t),o?new Date(Number(o[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){o=r.exec(t);var s;return s=o?new Date(Number(o[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var r=/^\/?Date\((\-?\d+)/i;e.getType=function(t){var e="undefined"==typeof t?"undefined":o(t);return"object"==e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var i=[],o=0;oi;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},e.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},e.throttle=function(t,e){var i=null,o=!1;return function n(){i?o=!0:(o=!1,t(),i=setTimeout(function(){i=null,o&&n()},e))}},e.addEventListener=function(t,e,i,o){t.addEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.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},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){if(-1!=t.indexOf("rgba"))return t;if(-1!=t.indexOf("rgb")){var o=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"}var o=e.hexToRGB(t);return null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")"},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(e.isString(t)===!0){if(e.isValidRGB(t)===!0){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(e.isValidHex(t)===!0){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t,r=t==o?3:i==o?1:5,a=60*(r-s/(n-o))/360,h=(n-o)/n,d=n;return{h:a,s:h,v:d}};var a={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return Object.keys(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=a.split(t.style.cssText),n=a.split(i),s=e.extend(o,n);t.style.cssText=a.join(s)},e.removeCssText=function(t,e){var i=a.split(t.style.cssText),o=a.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=a.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,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:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==("undefined"==typeof i?"undefined":o(i))){for(var n=Object.create(i),s=0;s0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length<=3||void 0===arguments[3]?!1:arguments[3],arguments.length<=4||void 0===arguments[4]?{}:arguments[4]);if(null===e[i])t[i]=Object.create(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;a>=r&&n>s;){var h=Math.floor((r+a)/2),d=t[h],l=void 0===o?d[i]:d[i][o],c=e(l);if(0==c)return h;-1==c?r=h+1:a=h-1,s++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=1e4,l=0,c=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:e>t?-1:1};u>=c&&d>l;){if(h=Math.floor(.5*(u+c)),s=t[Math.max(0,h-1)][i],r=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==n(r,e))return h;if(n(s,e)<0&&n(r,e)>0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?c=h+1:u=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return.5>t?2*t*t:-1+(4-2*t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return.5>t?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t}}},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(3)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return Qi.apply(null,arguments)}function i(t){Qi=t}function o(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function n(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function s(t,e){var i,o=[];for(i=0;i0)for(i in $i)o=$i[i],n=e[o],p(n)||(t[o]=n);return t}function m(t){f(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),to===!1&&(to=!0,e.updateOffset(this),to=!1)}function v(t){return t instanceof m||null!=t&&null!=t._isAMomentObject}function g(t){return 0>t?Math.ceil(t):Math.floor(t)}function y(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=g(e)),i}function b(t,e,i){var o,n=Math.min(t.length,e.length),s=Math.abs(t.length-e.length),r=0;for(o=0;n>o;o++)(i&&t[o]!==e[o]||!i&&y(t[o])!==y(e[o]))&&r++;return r+s}function _(t){e.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function w(t,e){var i=!0;return a(function(){return i&&(_(t+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),i=!1),e.apply(this,arguments)},e)}function x(t,e){eo[t]||(_(e),eo[t]=!0)}function k(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function O(t){return"[object Object]"===Object.prototype.toString.call(t)}function M(t){var e,i;for(i in t)e=t[i],k(e)?this[i]=e:this["_"+i]=e;this._config=t,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function D(t,e){var i,o=a({},t);for(i in e)r(e,i)&&(O(t[i])&&O(e[i])?(o[i]={},a(o[i],t[i]),a(o[i],e[i])):null!=e[i]?o[i]=e[i]:delete o[i]);return o}function S(t){null!=t&&this.set(t)}function C(t){return t?t.toLowerCase().replace("_","-"):t}function T(t){for(var e,i,o,n,s=0;s0;){if(o=E(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&b(n,i,!0)>=e-1)break;e--}s++}return null}function E(e){var i=null;if(!oo[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=io._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),P(i)}catch(o){}return oo[e]}function P(t,e){var i;return t&&(i=p(e)?z(t):I(t,e),i&&(io=i)),io._abbr}function I(t,e){return null!==e?(e.abbr=t,null!=oo[t]?(x("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),e=D(oo[t]._config,e)):null!=e.parentLocale&&(null!=oo[e.parentLocale]?e=D(oo[e.parentLocale]._config,e):x("parentLocaleUndefined","specified parentLocale is not defined yet")),oo[t]=new S(e),P(t),oo[t]):(delete oo[t],null)}function N(t,e){if(null!=e){var i;null!=oo[t]&&(e=D(oo[t]._config,e)),i=new S(e),i.parentLocale=oo[t],oo[t]=i,P(t)}else null!=oo[t]&&(null!=oo[t].parentLocale?oo[t]=oo[t].parentLocale:null!=oo[t]&&delete oo[t]);return oo[t]}function z(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return io;if(!o(t)){if(e=E(t))return e;t=[t]}return T(t)}function L(){return Object.keys(oo)}function R(t,e){var i=t.toLowerCase();no[i]=no[i+"s"]=no[e]=t}function A(t){return"string"==typeof t?no[t]||no[t.toLowerCase()]:void 0}function B(t){var e,i,o={};for(i in t)r(t,i)&&(e=A(i),e&&(o[e]=t[i]));return o}function F(t,i){return function(o){return null!=o?(H(this,t,o),e.updateOffset(this,i),this):j(this,t)}}function j(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function H(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function W(t,e){var i;if("object"==typeof t)for(i in t)this.set(i,t[i]);else if(t=A(t),k(this[t]))return this[t](e);return this}function Y(t,e,i){var o=""+Math.abs(t),n=e-o.length,s=t>=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function G(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(ho[t]=n),e&&(ho[e[0]]=function(){return Y(n.apply(this,arguments),e[1],e[2])}),i&&(ho[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function V(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function U(t){var e,i,o=t.match(so);for(e=0,i=o.length;i>e;e++)ho[o[e]]?o[e]=ho[o[e]]:o[e]=V(o[e]);return function(n){var s="";for(e=0;i>e;e++)s+=o[e]instanceof Function?o[e].call(n,t):o[e];return s}}function q(t,e){return t.isValid()?(e=X(e,t.localeData()),ao[e]=ao[e]||U(e),ao[e](t)):t.localeData().invalidDate()}function X(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(ro.lastIndex=0;o>=0&&ro.test(t);)t=t.replace(ro,i),ro.lastIndex=0,o-=1;return t}function Z(t,e,i){So[t]=k(e)?e:function(t,o){return t&&i?i:e}}function K(t,e){return r(So,t)?So[t](e._strict,e._locale):new RegExp(J(t))}function J(t){return Q(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function Q(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(o=function(t,i){i[e]=y(t)}),i=0;io;o++){if(n=h([2e3,o]),i&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),i||this._monthsParse[o]||(s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[o].test(t))return o;if(i&&"MMM"===e&&this._shortMonthsParse[o].test(t))return o;if(!i&&this._monthsParse[o].test(t))return o}}function rt(t,e){var i;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=y(e);else if(e=t.localeData().monthsParse(e),"number"!=typeof e)return t;return i=Math.min(t.date(),it(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t}function at(t){return null!=t?(rt(this,t),e.updateOffset(this,!0),this):j(this,"Month")}function ht(){return it(this.year(),this.month())}function dt(t){return this._monthsParseExact?(r(this,"_monthsRegex")||ct.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex}function lt(t){return this._monthsParseExact?(r(this,"_monthsRegex")||ct.call(this),t?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex}function ct(){function t(t,e){return e.length-t.length}var e,i,o=[],n=[],s=[];for(e=0;12>e;e++)i=h([2e3,e]),o.push(this.monthsShort(i,"")),n.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(o.sort(t),n.sort(t),s.sort(t),e=0;12>e;e++)o[e]=Q(o[e]),n[e]=Q(n[e]),s[e]=Q(s[e]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")$","i")}function ut(t){var e,i=t._a;return i&&-2===l(t).overflow&&(e=i[Eo]<0||i[Eo]>11?Eo:i[Po]<1||i[Po]>it(i[To],i[Eo])?Po:i[Io]<0||i[Io]>24||24===i[Io]&&(0!==i[No]||0!==i[zo]||0!==i[Lo])?Io:i[No]<0||i[No]>59?No:i[zo]<0||i[zo]>59?zo:i[Lo]<0||i[Lo]>999?Lo:-1,l(t)._overflowDayOfYear&&(To>e||e>Po)&&(e=Po),l(t)._overflowWeeks&&-1===e&&(e=Ro),l(t)._overflowWeekday&&-1===e&&(e=Ao),l(t).overflow=e),t}function pt(t){var e,i,o,n,s,r,a=t._i,h=Yo.exec(a)||Go.exec(a);if(h){for(l(t).iso=!0,e=0,i=Uo.length;i>e;e++)if(Uo[e][1].exec(h[1])){n=Uo[e][0],o=Uo[e][2]!==!1;break}if(null==n)return void(t._isValid=!1);if(h[3]){for(e=0,i=qo.length;i>e;e++)if(qo[e][1].exec(h[3])){s=(h[2]||" ")+qo[e][0];break}if(null==s)return void(t._isValid=!1)}if(!o&&null!=s)return void(t._isValid=!1);if(h[4]){if(!Vo.exec(h[4]))return void(t._isValid=!1);r="Z"}t._f=n+(s||"")+(r||""),Ct(t)}else t._isValid=!1}function ft(t){var i=Xo.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(pt(t),void(t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t))))}function mt(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return 100>t&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function vt(t){var e=new Date(Date.UTC.apply(null,arguments));return 100>t&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function gt(t){return yt(t)?366:365}function yt(t){return t%4===0&&t%100!==0||t%400===0}function bt(){return yt(this.year())}function _t(t,e,i){var o=7+e-i,n=(7+vt(t,0,o).getUTCDay()-e)%7;return-n+o-1}function wt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=_t(t,o,n),d=1+7*(e-1)+a+h;return 0>=d?(s=t-1,r=gt(s)+d):d>gt(t)?(s=t+1,r=d-gt(t)):(s=t,r=d),{year:s,dayOfYear:r}}function xt(t,e,i){var o,n,s=_t(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return 1>r?(n=t.year()-1,o=r+kt(n,e,i)):r>kt(t.year(),e,i)?(o=r-kt(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function kt(t,e,i){var o=_t(t,e,i),n=_t(t+1,e,i);return(gt(t)-o+n)/7}function Ot(t,e,i){return null!=t?t:null!=e?e:i}function Mt(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function Dt(t){var e,i,o,n,s=[];if(!t._d){for(o=Mt(t),t._w&&null==t._a[Po]&&null==t._a[Eo]&&St(t),t._dayOfYear&&(n=Ot(t._a[To],o[To]),t._dayOfYear>gt(n)&&(l(t)._overflowDayOfYear=!0),i=vt(n,0,t._dayOfYear),t._a[Eo]=i.getUTCMonth(),t._a[Po]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;7>e;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Io]&&0===t._a[No]&&0===t._a[zo]&&0===t._a[Lo]&&(t._nextDay=!0,t._a[Io]=0),t._d=(t._useUTC?vt:mt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Io]=24)}}function St(t){var e,i,o,n,s,r,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(s=1,r=4,i=Ot(e.GG,t._a[To],xt(Rt(),1,4).year),o=Ot(e.W,1),n=Ot(e.E,1),(1>n||n>7)&&(h=!0)):(s=t._locale._week.dow,r=t._locale._week.doy,i=Ot(e.gg,t._a[To],xt(Rt(),s,r).year),o=Ot(e.w,1),null!=e.d?(n=e.d,(0>n||n>6)&&(h=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s),1>o||o>kt(i,s,r)?l(t)._overflowWeeks=!0:null!=h?l(t)._overflowWeekday=!0:(a=wt(i,o,n,s,r),t._a[To]=a.year,t._dayOfYear=a.dayOfYear)}function Ct(t){if(t._f===e.ISO_8601)return void pt(t);t._a=[],l(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=X(t._f,t._locale).match(so)||[],i=0;i0&&l(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),ho[s]?(o?l(t).empty=!1:l(t).unusedTokens.push(s),et(s,o,t)):t._strict&&!o&&l(t).unusedTokens.push(s);l(t).charsLeftOver=h-d,a.length>0&&l(t).unusedInput.push(a),l(t).bigHour===!0&&t._a[Io]<=12&&t._a[Io]>0&&(l(t).bigHour=void 0),t._a[Io]=Tt(t._locale,t._a[Io],t._meridiem),Dt(t),ut(t)}function Tt(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&12>e&&(e+=12),o||12!==e||(e=0),e):e}function Et(t){var e,i,o,n,s;if(0===t._f.length)return l(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;ns)&&(o=s,i=e));a(t,i||e)}function Pt(t){if(!t._d){var e=B(t._i);t._a=s([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),Dt(t)}}function It(t){var e=new m(ut(Nt(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Nt(t){var e=t._i,i=t._f;return t._locale=t._locale||z(t._l),null===e||void 0===i&&""===e?u({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),v(e)?new m(ut(e)):(o(i)?Et(t):i?Ct(t):n(e)?t._d=e:zt(t),c(t)||(t._d=null),t))}function zt(t){var i=t._i;void 0===i?t._d=new Date(e.now()):n(i)?t._d=new Date(+i):"string"==typeof i?ft(t):o(i)?(t._a=s(i.slice(0),function(t){return parseInt(t,10)}),Dt(t)):"object"==typeof i?Pt(t):"number"==typeof i?t._d=new Date(i):e.createFromInputFallback(t)}function Lt(t,e,i,o,n){var s={};return"boolean"==typeof i&&(o=i,i=void 0),s._isAMomentObject=!0,s._useUTC=s._isUTC=n,s._l=i,s._i=t,s._f=e,s._strict=o,It(s)}function Rt(t,e,i,o){return Lt(t,e,i,o,!1)}function At(t,e){var i,n;if(1===e.length&&o(e[0])&&(e=e[0]),!e.length)return Rt();for(i=e[0],n=1;nt&&(t=-t,i="-"),i+Y(~~(t/60),2)+e+Y(~~t%60,2)})}function Yt(t,e){var i=(e||"").match(t)||[],o=i[i.length-1]||[],n=(o+"").match($o)||["-",0,0],s=+(60*n[1])+y(n[2]);return"+"===n[0]?s:-s}function Gt(t,i){var o,s;return i._isUTC?(o=i.clone(),s=(v(t)||n(t)?+t:+Rt(t))-+o,o._d.setTime(+o._d+s),e.updateOffset(o,!1),o):Rt(t).local()}function Vt(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Ut(t,i){var o,n=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Yt(Oo,t):Math.abs(t)<16&&(t=60*t),!this._isUTC&&i&&(o=Vt(this)),this._offset=t,this._isUTC=!0,null!=o&&this.add(o,"m"),n!==t&&(!i||this._changeInProgress?de(this,oe(t-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?n:Vt(this):null!=t?this:NaN}function qt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Xt(t){return this.utcOffset(0,t)}function Zt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Vt(this),"m")),this}function Kt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Yt(ko,this._i)),this}function Jt(t){return this.isValid()?(t=t?Rt(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function Qt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function $t(){if(!p(this._isDSTShifted))return this._isDSTShifted;var t={};if(f(t,this),t=Nt(t),t._a){var e=t._isUTC?h(t._a):Rt(t._a);this._isDSTShifted=this.isValid()&&b(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function te(){return this.isValid()?!this._isUTC:!1}function ee(){return this.isValid()?this._isUTC:!1}function ie(){return this.isValid()?this._isUTC&&0===this._offset:!1}function oe(t,e){var i,o,n,s=t,a=null;return Ht(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(s={},e?s[e]=t:s.milliseconds=t):(a=tn.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:y(a[Po])*i,h:y(a[Io])*i,m:y(a[No])*i,s:y(a[zo])*i,ms:y(a[Lo])*i}):(a=en.exec(t))?(i="-"===a[1]?-1:1,s={y:ne(a[2],i),M:ne(a[3],i),w:ne(a[4],i),d:ne(a[5],i),h:ne(a[6],i),m:ne(a[7],i),s:ne(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=re(Rt(s.from),Rt(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new jt(s),Ht(t)&&r(t,"_locale")&&(o._locale=t._locale),o}function ne(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function se(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function re(t,e){var i;return t.isValid()&&e.isValid()?(e=Gt(e,t),t.isBefore(e)?i=se(t,e):(i=se(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ae(t){ +return 0>t?-1*Math.round(-1*t):Math.round(t)}function he(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(x(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=oe(i,o),de(this,n,t),this}}function de(t,i,o,n){var s=i._milliseconds,r=ae(i._days),a=ae(i._months);t.isValid()&&(n=null==n?!0:n,s&&t._d.setTime(+t._d+s*o),r&&H(t,"Date",j(t,"Date")+r*o),a&&rt(t,j(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function le(t,e){var i=t||Rt(),o=Gt(i,this).startOf("day"),n=this.diff(o,"days",!0),s=-6>n?"sameElse":-1>n?"lastWeek":0>n?"lastDay":1>n?"sameDay":2>n?"nextDay":7>n?"nextWeek":"sameElse",r=e&&(k(e[s])?e[s]():e[s]);return this.format(r||this.localeData().calendar(s,this,Rt(i)))}function ce(){return new m(this)}function ue(t,e){var i=v(t)?t:Rt(t);return this.isValid()&&i.isValid()?(e=A(p(e)?"millisecond":e),"millisecond"===e?+this>+i:+i<+this.clone().startOf(e)):!1}function pe(t,e){var i=v(t)?t:Rt(t);return this.isValid()&&i.isValid()?(e=A(p(e)?"millisecond":e),"millisecond"===e?+i>+this:+this.clone().endOf(e)<+i):!1}function fe(t,e,i){return this.isAfter(t,i)&&this.isBefore(e,i)}function me(t,e){var i,o=v(t)?t:Rt(t);return this.isValid()&&o.isValid()?(e=A(e||"millisecond"),"millisecond"===e?+this===+o:(i=+o,+this.clone().startOf(e)<=i&&i<=+this.clone().endOf(e))):!1}function ve(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function ge(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ye(t,e,i){var o,n,s,r;return this.isValid()?(o=Gt(t,this),o.isValid()?(n=6e4*(o.utcOffset()-this.utcOffset()),e=A(e),"year"===e||"month"===e||"quarter"===e?(r=be(this,o),"quarter"===e?r/=3:"year"===e&&(r/=12)):(s=this-o,r="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-n)/864e5:"week"===e?(s-n)/6048e5:s),i?r:g(r)):NaN):NaN}function be(t,e){var i,o,n=12*(e.year()-t.year())+(e.month()-t.month()),s=t.clone().add(n,"months");return 0>e-s?(i=t.clone().add(n-1,"months"),o=(e-s)/(s-i)):(i=t.clone().add(n+1,"months"),o=(e-s)/(i-s)),-(n+o)}function _e(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function we(){var t=this.clone().utc();return 0s&&(e=s),qe.call(this,t,e,i,o,n))}function qe(t,e,i,o,n){var s=wt(t,e,i,o,n),r=vt(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Xe(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Ze(t){return xt(t,this._week.dow,this._week.doy).week}function Ke(){return this._week.dow}function Je(){return this._week.doy}function Qe(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function $e(t){var e=xt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function ti(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function ei(t,e){return o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function ii(t){return this._weekdaysShort[t.day()]}function oi(t){return this._weekdaysMin[t.day()]}function ni(t,e,i){var o,n,s;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;7>o;o++){if(n=Rt([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function si(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=ti(t,this.localeData()),this.add(t-e,"d")):e}function ri(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function ai(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:NaN}function hi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function di(){return this.hours()%12||12}function li(t,e){G(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function ci(t,e){return e._meridiemParse}function ui(t){return"p"===(t+"").toLowerCase().charAt(0)}function pi(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function fi(t,e){e[Lo]=y(1e3*("0."+t))}function mi(){return this._isUTC?"UTC":""}function vi(){return this._isUTC?"Coordinated Universal Time":""}function gi(t){return Rt(1e3*t)}function yi(){return Rt.apply(null,arguments).parseZone()}function bi(t,e,i){var o=this._calendar[t];return k(o)?o.call(e,i):o}function _i(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function wi(){return this._invalidDate}function xi(t){return this._ordinal.replace("%d",t)}function ki(t){return t}function Oi(t,e,i,o){var n=this._relativeTime[i];return k(n)?n(t,e,i,o):n.replace(/%d/i,t)}function Mi(t,e){var i=this._relativeTime[t>0?"future":"past"];return k(i)?i(e):i.replace(/%s/i,e)}function Di(t,e,i,o){var n=z(),s=h().set(o,e);return n[i](s,t)}function Si(t,e,i,o,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return Di(t,e,i,n);var s,r=[];for(s=0;o>s;s++)r[s]=Di(t,s,i,n);return r}function Ci(t,e){return Si(t,e,"months",12,"month")}function Ti(t,e){return Si(t,e,"monthsShort",12,"month")}function Ei(t,e){return Si(t,e,"weekdays",7,"day")}function Pi(t,e){return Si(t,e,"weekdaysShort",7,"day")}function Ii(t,e){return Si(t,e,"weekdaysMin",7,"day")}function Ni(){var t=this._data;return this._milliseconds=Dn(this._milliseconds),this._days=Dn(this._days),this._months=Dn(this._months),t.milliseconds=Dn(t.milliseconds),t.seconds=Dn(t.seconds),t.minutes=Dn(t.minutes),t.hours=Dn(t.hours),t.months=Dn(t.months),t.years=Dn(t.years),this}function zi(t,e,i,o){var n=oe(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function Li(t,e){return zi(this,t,e,1)}function Ri(t,e){return zi(this,t,e,-1)}function Ai(t){return 0>t?Math.floor(t):Math.ceil(t)}function Bi(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||0>=s&&0>=r&&0>=a||(s+=864e5*Ai(ji(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=g(s/1e3),h.seconds=t%60,e=g(t/60),h.minutes=e%60,i=g(e/60),h.hours=i%24,r+=g(i/24),n=g(Fi(r)),a+=n,r-=Ai(ji(n)),o=g(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function Fi(t){return 4800*t/146097}function ji(t){return 146097*t/4800}function Hi(t){var e,i,o=this._milliseconds;if(t=A(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+Fi(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ji(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function Wi(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*y(this._months/12)}function Yi(t){return function(){return this.as(t)}}function Gi(t){return t=A(t),this[t+"s"]()}function Vi(t){return function(){return this._data[t]}}function Ui(){return g(this.days()/7)}function qi(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function Xi(t,e,i){var o=oe(t).abs(),n=Wn(o.as("s")),s=Wn(o.as("m")),r=Wn(o.as("h")),a=Wn(o.as("d")),h=Wn(o.as("M")),d=Wn(o.as("y")),l=n=s&&["m"]||s=r&&["h"]||r=a&&["d"]||a=h&&["M"]||h=d&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=i,qi.apply(null,l)}function Zi(t,e){return void 0===Yn[t]?!1:void 0===e?Yn[t]:(Yn[t]=e,!0)}function Ki(t){var e=this.localeData(),i=Xi(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Ji(){var t,e,i,o=Gn(this._milliseconds)/1e3,n=Gn(this._days),s=Gn(this._months);t=g(o/60),e=g(t/60),o%=60,t%=60,i=g(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,c=o,u=this.asSeconds();return u?(0>u?"-":"")+"P"+(r?r+"Y":"")+(a?a+"M":"")+(h?h+"D":"")+(d||l||c?"T":"")+(d?d+"H":"")+(l?l+"M":"")+(c?c+"S":""):"P0D"}var Qi,$i=e.momentProperties=[],to=!1,eo={};e.suppressDeprecationWarnings=!1;var io,oo={},no={},so=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ro=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ao={},ho={},lo=/\d/,co=/\d\d/,uo=/\d{3}/,po=/\d{4}/,fo=/[+-]?\d{6}/,mo=/\d\d?/,vo=/\d\d\d\d?/,go=/\d\d\d\d\d\d?/,yo=/\d{1,3}/,bo=/\d{1,4}/,_o=/[+-]?\d{1,6}/,wo=/\d+/,xo=/[+-]?\d+/,ko=/Z|[+-]\d\d:?\d\d/gi,Oo=/Z|[+-]\d\d(?::?\d\d)?/gi,Mo=/[+-]?\d+(\.\d{1,3})?/,Do=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,So={},Co={},To=0,Eo=1,Po=2,Io=3,No=4,zo=5,Lo=6,Ro=7,Ao=8;G("M",["MM",2],"Mo",function(){return this.month()+1}),G("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),G("MMMM",0,0,function(t){return this.localeData().months(this,t)}),R("month","M"),Z("M",mo),Z("MM",mo,co),Z("MMM",function(t,e){return e.monthsShortRegex(t)}),Z("MMMM",function(t,e){return e.monthsRegex(t)}),$(["M","MM"],function(t,e){e[Eo]=y(t)-1}),$(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[Eo]=n:l(i).invalidMonth=t});var Bo=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Fo="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),jo="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ho=Do,Wo=Do,Yo=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Go=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Vo=/Z|[+-]\d\d(?::?\d\d)?/,Uo=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],qo=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Xo=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=w("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+(t._useUTC?" UTC":""))}),G("Y",0,0,function(){var t=this.year();return 9999>=t?""+t:"+"+t}),G(0,["YY",2],0,function(){return this.year()%100}),G(0,["YYYY",4],0,"year"),G(0,["YYYYY",5],0,"year"),G(0,["YYYYYY",6,!0],0,"year"),R("year","y"),Z("Y",xo),Z("YY",mo,co),Z("YYYY",bo,po),Z("YYYYY",_o,fo),Z("YYYYYY",_o,fo),$(["YYYYY","YYYYYY"],To),$("YYYY",function(t,i){i[To]=2===t.length?e.parseTwoDigitYear(t):y(t)}),$("YY",function(t,i){i[To]=e.parseTwoDigitYear(t)}),$("Y",function(t,e){e[To]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return y(t)+(y(t)>68?1900:2e3)};var Zo=F("FullYear",!1);e.ISO_8601=function(){};var Ko=w("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Rt.apply(null,arguments);return this.isValid()&&t.isValid()?this>t?this:t:u()}),Jo=w("moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Rt.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:u()}),Qo=function(){return Date.now?Date.now():+new Date};Wt("Z",":"),Wt("ZZ",""),Z("Z",Oo),Z("ZZ",Oo),$(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Yt(Oo,t)});var $o=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var tn=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,en=/^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/;oe.fn=jt.prototype;var on=he(1,"add"),nn=he(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var sn=w("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),He("gggg","weekYear"),He("ggggg","weekYear"),He("GGGG","isoWeekYear"),He("GGGGG","isoWeekYear"),R("weekYear","gg"),R("isoWeekYear","GG"),Z("G",xo),Z("g",xo),Z("GG",mo,co),Z("gg",mo,co),Z("GGGG",bo,po),Z("gggg",bo,po),Z("GGGGG",_o,fo),Z("ggggg",_o,fo),tt(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=y(t)}),tt(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),G("Q",0,"Qo","quarter"),R("quarter","Q"),Z("Q",lo),$("Q",function(t,e){e[Eo]=3*(y(t)-1)}),G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),R("week","w"),R("isoWeek","W"),Z("w",mo),Z("ww",mo,co),Z("W",mo),Z("WW",mo,co),tt(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=y(t)});var rn={dow:0,doy:6};G("D",["DD",2],"Do","date"),R("date","D"),Z("D",mo),Z("DD",mo,co),Z("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),$(["D","DD"],Po),$("Do",function(t,e){e[Po]=y(t.match(mo)[0],10)});var an=F("Date",!0);G("d",0,"do","day"),G("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),G("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),G("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),R("day","d"),R("weekday","e"),R("isoWeekday","E"),Z("d",mo),Z("e",mo),Z("E",mo),Z("dd",Do),Z("ddd",Do),Z("dddd",Do),tt(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:l(i).invalidWeekday=t}),tt(["d","e","E"],function(t,e,i,o){e[o]=y(t)});var hn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),dn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ln="Su_Mo_Tu_We_Th_Fr_Sa".split("_");G("DDD",["DDDD",3],"DDDo","dayOfYear"),R("dayOfYear","DDD"),Z("DDD",yo),Z("DDDD",uo),$(["DDD","DDDD"],function(t,e,i){i._dayOfYear=y(t)}),G("H",["HH",2],0,"hour"),G("h",["hh",2],0,di),G("hmm",0,0,function(){return""+di.apply(this)+Y(this.minutes(),2)}),G("hmmss",0,0,function(){return""+di.apply(this)+Y(this.minutes(),2)+Y(this.seconds(),2)}),G("Hmm",0,0,function(){return""+this.hours()+Y(this.minutes(),2)}),G("Hmmss",0,0,function(){return""+this.hours()+Y(this.minutes(),2)+Y(this.seconds(),2)}),li("a",!0),li("A",!1),R("hour","h"),Z("a",ci),Z("A",ci),Z("H",mo),Z("h",mo),Z("HH",mo,co),Z("hh",mo,co),Z("hmm",vo),Z("hmmss",go),Z("Hmm",vo),Z("Hmmss",go),$(["H","HH"],Io),$(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),$(["h","hh"],function(t,e,i){e[Io]=y(t),l(i).bigHour=!0}),$("hmm",function(t,e,i){var o=t.length-2;e[Io]=y(t.substr(0,o)),e[No]=y(t.substr(o)),l(i).bigHour=!0}),$("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Io]=y(t.substr(0,o)),e[No]=y(t.substr(o,2)),e[zo]=y(t.substr(n)),l(i).bigHour=!0}),$("Hmm",function(t,e,i){var o=t.length-2;e[Io]=y(t.substr(0,o)),e[No]=y(t.substr(o))}),$("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Io]=y(t.substr(0,o)),e[No]=y(t.substr(o,2)),e[zo]=y(t.substr(n))});var cn=/[ap]\.?m?\.?/i,un=F("Hours",!0);G("m",["mm",2],0,"minute"),R("minute","m"),Z("m",mo),Z("mm",mo,co),$(["m","mm"],No);var pn=F("Minutes",!1);G("s",["ss",2],0,"second"),R("second","s"),Z("s",mo),Z("ss",mo,co),$(["s","ss"],zo);var fn=F("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,function(){return 10*this.millisecond()}),G(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),G(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),G(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),G(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),G(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),R("millisecond","ms"),Z("S",yo,lo),Z("SS",yo,co),Z("SSS",yo,uo);var mn;for(mn="SSSS";mn.length<=9;mn+="S")Z(mn,wo);for(mn="S";mn.length<=9;mn+="S")$(mn,fi);var vn=F("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var gn=m.prototype;gn.add=on,gn.calendar=le,gn.clone=ce,gn.diff=ye,gn.endOf=Ee,gn.format=xe,gn.from=ke,gn.fromNow=Oe,gn.to=Me,gn.toNow=De,gn.get=W,gn.invalidAt=Fe,gn.isAfter=ue,gn.isBefore=pe,gn.isBetween=fe,gn.isSame=me,gn.isSameOrAfter=ve,gn.isSameOrBefore=ge,gn.isValid=Ae,gn.lang=sn,gn.locale=Se,gn.localeData=Ce,gn.max=Jo,gn.min=Ko,gn.parsingFlags=Be,gn.set=W,gn.startOf=Te,gn.subtract=nn,gn.toArray=ze,gn.toObject=Le,gn.toDate=Ne,gn.toISOString=we,gn.toJSON=Re,gn.toString=_e,gn.unix=Ie,gn.valueOf=Pe,gn.creationData=je,gn.year=Zo,gn.isLeapYear=bt,gn.weekYear=We,gn.isoWeekYear=Ye,gn.quarter=gn.quarters=Xe,gn.month=at,gn.daysInMonth=ht,gn.week=gn.weeks=Qe,gn.isoWeek=gn.isoWeeks=$e,gn.weeksInYear=Ve,gn.isoWeeksInYear=Ge,gn.date=an,gn.day=gn.days=si,gn.weekday=ri,gn.isoWeekday=ai,gn.dayOfYear=hi,gn.hour=gn.hours=un,gn.minute=gn.minutes=pn,gn.second=gn.seconds=fn,gn.millisecond=gn.milliseconds=vn,gn.utcOffset=Ut,gn.utc=Xt,gn.local=Zt,gn.parseZone=Kt,gn.hasAlignedHourOffset=Jt,gn.isDST=Qt,gn.isDSTShifted=$t,gn.isLocal=te,gn.isUtcOffset=ee,gn.isUtc=ie,gn.isUTC=ie,gn.zoneAbbr=mi,gn.zoneName=vi,gn.dates=w("dates accessor is deprecated. Use date instead.",an),gn.months=w("months accessor is deprecated. Use month instead",at),gn.years=w("years accessor is deprecated. Use year instead",Zo),gn.zone=w("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",qt);var yn=gn,bn={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},_n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},wn="Invalid date",xn="%d",kn=/\d{1,2}/,On={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"},Mn=S.prototype;Mn._calendar=bn,Mn.calendar=bi,Mn._longDateFormat=_n,Mn.longDateFormat=_i,Mn._invalidDate=wn,Mn.invalidDate=wi,Mn._ordinal=xn,Mn.ordinal=xi,Mn._ordinalParse=kn,Mn.preparse=ki,Mn.postformat=ki,Mn._relativeTime=On,Mn.relativeTime=Oi,Mn.pastFuture=Mi,Mn.set=M,Mn.months=ot,Mn._months=Fo,Mn.monthsShort=nt,Mn._monthsShort=jo,Mn.monthsParse=st,Mn._monthsRegex=Wo,Mn.monthsRegex=lt,Mn._monthsShortRegex=Ho,Mn.monthsShortRegex=dt,Mn.week=Ze,Mn._week=rn,Mn.firstDayOfYear=Je,Mn.firstDayOfWeek=Ke,Mn.weekdays=ei,Mn._weekdays=hn,Mn.weekdaysMin=oi,Mn._weekdaysMin=ln,Mn.weekdaysShort=ii,Mn._weekdaysShort=dn,Mn.weekdaysParse=ni,Mn.isPM=ui,Mn._meridiemParse=cn,Mn.meridiem=pi,P("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===y(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=w("moment.lang is deprecated. Use moment.locale instead.",P),e.langData=w("moment.langData is deprecated. Use moment.localeData instead.",z);var Dn=Math.abs,Sn=Yi("ms"),Cn=Yi("s"),Tn=Yi("m"),En=Yi("h"),Pn=Yi("d"),In=Yi("w"),Nn=Yi("M"),zn=Yi("y"),Ln=Vi("milliseconds"),Rn=Vi("seconds"),An=Vi("minutes"),Bn=Vi("hours"),Fn=Vi("days"),jn=Vi("months"),Hn=Vi("years"),Wn=Math.round,Yn={s:45,m:45,h:22,d:26,M:11},Gn=Math.abs,Vn=jt.prototype;Vn.abs=Ni,Vn.add=Li,Vn.subtract=Ri,Vn.as=Hi,Vn.asMilliseconds=Sn,Vn.asSeconds=Cn,Vn.asMinutes=Tn,Vn.asHours=En,Vn.asDays=Pn,Vn.asWeeks=In,Vn.asMonths=Nn,Vn.asYears=zn,Vn.valueOf=Wi,Vn._bubble=Bi,Vn.get=Gi,Vn.milliseconds=Ln,Vn.seconds=Rn,Vn.minutes=An,Vn.hours=Bn,Vn.days=Fn,Vn.weeks=Ui,Vn.months=jn,Vn.years=Hn,Vn.humanize=Ki,Vn.toISOString=Ji,Vn.toString=Ji,Vn.toJSON=Ji,Vn.locale=Se,Vn.localeData=Ce,Vn.toIsoString=w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ji),Vn.lang=sn,G("X",0,0,"unix"),G("x",0,0,"valueOf"),Z("x",xo),Z("X",Mo),$("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),$("x",function(t,e,i){i._d=new Date(y(t))}),e.version="2.12.0",i(Rt),e.fn=yn,e.min=Bt,e.max=Ft,e.now=Qo,e.utc=h,e.unix=gi,e.months=Ci,e.isDate=n,e.locale=P,e.invalid=u,e.duration=oe,e.isMoment=v,e.weekdays=Ei,e.parseZone=yi,e.localeData=z,e.isDuration=Ht,e.monthsShort=Ti,e.weekdaysMin=Ii,e.defineLocale=I,e.updateLocale=N,e.locales=L,e.weekdaysShort=Pi,e.normalizeUnits=A,e.relativeTimeThreshold=Zi,e.prototype=yn;var Un=e;return Un})}).call(e,i(4)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=5},function(t,e){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){16>n&&(e[o+n++]=c[t])});16>n;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:g+1,d=a-v+(h-g)/1e4;if(0>d&&void 0===t.clockseq&&(r=r+1&16383),(0>d||a>v)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=a,g=h,m=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var c=a/4294967296*1e4&268435455;s[n++]=c>>>8&255,s[n++]=255&c,s[n++]=c>>>24&15|16,s[n++]=c>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var u=t.node||f,p=0;6>p;p++)s[n+p]=u[p];return e?e:o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;16>a;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:"undefined"!=typeof e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;16>e;e++)0===(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],c={},u=0;256>u;u++)l[u]=(u+256).toString(16).substr(1),c[l[u]]=u;var p=r(),f=[1|p[0],p[1],p[2],p[3],p[4],p[5]],m=16383&(p[6]<<8|p[7]),v=0,g=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,function(){return this}())},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?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){0>n&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=Object.keys(this._options.type),o=0,n=i.length;n>o;o++){var s=i[o],r=this._options.type[s];"Date"==r||"ISODate"==r||"ASPDate"==r?this._type[s]="Date":this._type[s]=r}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t),this.setOptions(e)}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},s=i(1),r=i(9);o.prototype.setOptions=function(t){t&&void 0!==t.queue&&(t.queue===!1?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=r.extend(this,{replace:["add","update","remove"]})),"object"===n(t.queue)&&this._queue.setOptions(t.queue)))},o.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},o.prototype.subscribe=function(){throw new Error("DataSet.subscribe is deprecated. Use DataSet.on instead.")},o.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},o.prototype.unsubscribe=function(){throw new Error("DataSet.unsubscribe is deprecated. Use DataSet.off instead.")},o.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var o=[];t in this._subscribers&&(o=o.concat(this._subscribers[t])),"*"in this._subscribers&&(o=o.concat(this._subscribers["*"]));for(var n=0,s=o.length;s>n;n++){var r=o[n];r.callback&&r.callback(t,e,i||null)}},o.prototype.add=function(t,e){var i,o=[],n=this;if(Array.isArray(t))for(var s=0,r=t.length;r>s;s++)i=n._addItem(t[s]),o.push(i);else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),o.push(i)}return o.length&&this._trigger("add",{items:o},e),o},o.prototype.update=function(t,e){var i=[],o=[],n=[],r=[],a=this,h=a._fieldId,d=function(t){var e=t[h];if(a._data[e]){var d=s.extend({},a._data[e]);e=a._updateItem(t),o.push(e),r.push(t),n.push(d)}else e=a._addItem(t),i.push(e)};if(Array.isArray(t))for(var l=0,c=t.length;c>l;l++)t[l]instanceof Object?d(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!(t instanceof Object))throw new Error("Unknown dataType");d(t)}if(i.length&&this._trigger("add",{items:i},e),o.length){var u={items:o,oldData:n,data:r};this._trigger("update",u,e)}return i.concat(o)},o.prototype.get=function(t){var e,i,o,n=this,r=s.getType(arguments[0]);"String"==r||"Number"==r?(e=arguments[0],o=arguments[1]):"Array"==r?(i=arguments[0],o=arguments[1]):o=arguments[0];var a;if(o&&o.returnType){var h=["Array","Object"];a=-1==h.indexOf(o.returnType)?"Array":o.returnType}else a="Array";var d,l,c,u,p,f=o&&o.type||this._options.type,m=o&&o.filter,v=[];if(void 0!=e)d=n._getItem(e,f),d&&m&&!m(d)&&(d=null);else if(void 0!=i)for(u=0,p=i.length;p>u;u++)d=n._getItem(i[u],f),m&&!m(d)||v.push(d);else for(l=Object.keys(this._data),u=0,p=l.length;p>u;u++)c=l[u],d=n._getItem(c,f),m&&!m(d)||v.push(d);if(o&&o.order&&void 0==e&&this._sort(v,o.order),o&&o.fields){var g=o.fields;if(void 0!=e)d=this._filterFields(d,g);else for(u=0,p=v.length;p>u;u++)v[u]=this._filterFields(v[u],g)}if("Object"==a){var y,b={};for(u=0,p=v.length;p>u;u++)y=v[u],b[y.id]=y;return b}return void 0!=e?d:v},o.prototype.getIds=function(t){var e,i,o,n,s,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=Object.keys(r),c=[];if(a)if(h){for(s=[],e=0,i=l.length;i>e;e++)o=l[e],n=this._getItem(o,d),a(n)&&s.push(n);for(this._sort(s,h),e=0,i=s.length;i>e;e++)c.push(s[e][this._fieldId]); +}else for(e=0,i=l.length;i>e;e++)o=l[e],n=this._getItem(o,d),a(n)&&c.push(n[this._fieldId]);else if(h){for(s=[],e=0,i=l.length;i>e;e++)o=l[e],s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;i>e;e++)c.push(s[e][this._fieldId])}else for(e=0,i=l.length;i>e;e++)o=l[e],n=r[o],c.push(n[this._fieldId]);return c},o.prototype.getDataSet=function(){return this},o.prototype.forEach=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=this._data,d=Object.keys(h);if(e&&e.order){var l=this.get(e);for(i=0,o=l.length;o>i;i++)n=l[i],s=n[this._fieldId],t(n,s)}else for(i=0,o=d.length;o>i;i++)s=d[i],n=this._getItem(s,a),r&&!r(n)||t(n,s)},o.prototype.map=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=[],d=this._data,l=Object.keys(d);for(i=0,o=l.length;o>i;i++)n=l[i],s=this._getItem(n,a),r&&!r(s)||h.push(t(s,n));return e&&e.order&&this._sort(h,e.order),h},o.prototype._filterFields=function(t,e){if(!t)return t;var i,o,n={},s=Object.keys(t),r=s.length;if(Array.isArray(e))for(i=0;r>i;i++)o=s[i],-1!=e.indexOf(o)&&(n[o]=t[o]);else for(i=0;r>i;i++)o=s[i],e.hasOwnProperty(o)&&(n[e[o]]=t[o]);return n},o.prototype._sort=function(t,e){if(s.isString(e)){var i=e;t.sort(function(t,e){var o=t[i],n=e[i];return o>n?1:n>o?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},o.prototype.remove=function(t,e){var i,o,n,s=[];if(Array.isArray(t))for(i=0,o=t.length;o>i;i++)n=this._remove(t[i]),null!=n&&s.push(n);else n=this._remove(t),null!=n&&s.push(n);return s.length&&this._trigger("remove",{items:s},e),s},o.prototype._remove=function(t){if(s.isNumber(t)||s.isString(t)){if(this._data[t])return delete this._data[t],this.length--,t}else if(t instanceof Object){var e=t[this._fieldId];if(void 0!==e&&this._data[e])return delete this._data[e],this.length--,e}return null},o.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this.length=0,this._trigger("remove",{items:e},t),e},o.prototype.max=function(t){var e,i,o=this._data,n=Object.keys(o),s=null,r=null;for(e=0,i=n.length;i>e;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d>r)&&(s=h,r=d)}return s},o.prototype.min=function(t){var e,i,o=this._data,n=Object.keys(o),s=null,r=null;for(e=0,i=n.length;i>e;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||r>d)&&(s=h,r=d)}return s},o.prototype.distinct=function(t){var e,i,o,n=this._data,r=Object.keys(n),a=[],h=this._options.type&&this._options.type[t]||null,d=0;for(e=0,o=r.length;o>e;e++){var l=r[e],c=n[l],u=c[t],p=!1;for(i=0;d>i;i++)if(a[i]==u){p=!0;break}p||void 0===u||(a[d]=u,d++)}if(h)for(e=0,o=a.length;o>e;e++)a[e]=s.convert(a[e],h);return a},o.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=s.randomUUID(),t[this._fieldId]=e;var i,o,n={},r=Object.keys(t);for(i=0,o=r.length;o>i;i++){var a=r[i],h=this._type[a];n[a]=s.convert(t[a],h)}return this._data[e]=n,this.length++,e},o.prototype._getItem=function(t,e){var i,o,n,r,a=this._data[t];if(!a)return null;var h={},d=Object.keys(a);if(e)for(n=0,r=d.length;r>n;n++)i=d[n],o=a[i],h[i]=s.convert(o,e[i]);else for(n=0,r=d.length;r>n;n++)i=d[n],o=a[i],h[i]=o;return h},o.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+JSON.stringify(t)+")");var i=this._data[e];if(!i)throw new Error("Cannot update item: no item with id "+e+" found");for(var o=Object.keys(t),n=0,r=o.length;r>n;n++){var a=o[n],h=this._type[a];i[a]=s.convert(t[a],h)}return e},t.exports=o},function(t,e){function i(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}i.prototype.setOptions=function(t){t&&"undefined"!=typeof t.delay&&(this.delay=t.delay),t&&"undefined"!=typeof t.max&&(this.max=t.max),this._flushIfNeeded()},i.extend=function(t,e){var o=new i(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){o.flush()};var n=[{name:"flush",original:void 0}];if(e&&e.replace)for(var s=0;sthis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},i.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=i},function(t,e,i){function o(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var n=i(1),s=i(8);o.prototype.setData=function(t){var e,i,o,n;if(this._data&&(this._data.off&&this._data.off("*",this.listener),e=Object.keys(this._ids),this._ids={},this.length=0,this._trigger("remove",{items:e})),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}),o=0,n=e.length;n>o;o++)i=e[o],this._ids[i]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){var t,e,i,o=this._data.getIds({filter:this._options&&this._options.filter}),n=Object.keys(this._ids),s={},r=[],a=[];for(e=0,i=o.length;i>e;e++)t=o[e],s[t]=!0,this._ids[t]||(r.push(t),this._ids[t]=!0);for(e=0,i=n.length;i>e;e++)t=n[e],s[t]||(a.push(t),delete this._ids[t]);this.length+=r.length-a.length,r.length&&this._trigger("add",{items:r}),a.length&&this._trigger("remove",{items:a})},o.prototype.get=function(t){var e,i,o,s=this,r=n.getType(arguments[0]);"String"==r||"Number"==r||"Array"==r?(e=arguments[0],i=arguments[1],o=arguments[2]):(i=arguments[0],o=arguments[1]);var a=n.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(t){return s._options.filter(t)&&i.filter(t)});var h=[];return void 0!=e&&h.push(e),h.push(a),h.push(o),this._data&&this._data.get.apply(this._data,h)},o.prototype.getIds=function(t){var e;if(this._data){var i,o=this._options.filter;i=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},o.prototype.map=function(t,e){var i=[];if(this._data){var o,n=this._options.filter;o=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,i=this._data.map(t,{filter:o,order:e&&e.order})}else i=[];return i},o.prototype.getDataSet=function(){for(var t=this;t instanceof o;)t=t._data;return t||null},o.prototype._onEvent=function(t,e,i){var o,n,s,r,a=e&&e.items,h=this._data,d=[],l=[],c=[],u=[];if(a&&h){switch(t){case"add":for(o=0,n=a.length;n>o;o++)s=a[o],r=this.get(s),r&&(this._ids[s]=!0,l.push(s));break;case"update":for(o=0,n=a.length;n>o;o++)s=a[o],r=this.get(s),r?this._ids[s]?(c.push(s),d.push(e.data[o])):(this._ids[s]=!0,l.push(s)):this._ids[s]&&(delete this._ids[s],u.push(s));break;case"remove":for(o=0,n=a.length;n>o;o++)s=a[o],this._ids[s]&&(delete this._ids[s],u.push(s))}this.length+=l.length-u.length,l.length&&this._trigger("add",{items:l},i),c.length&&this._trigger("update",{items:c,data:d},i),u.length&&this._trigger("remove",{items:u},i)}},o.prototype.on=s.prototype.on,o.prototype.off=s.prototype.off,o.prototype._trigger=s.prototype._trigger,o.prototype.subscribe=o.prototype.on,o.prototype.unsubscribe=o.prototype.off,t.exports=o},function(t,e,i){function o(t,e,i){if(!(this instanceof o))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";var n=function(t){return t};this.xValueLabel=n,this.yValueLabel=n,this.zValueLabel=n,this.filterLabel="time",this.legendLabel="value",this.style=o.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 p,this.camera.setArmRotation(1,.5),this.camera.setArmLength(1.7),this.eye=new c(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.axisColor="#4D4D4D",this.gridColor="#D3D3D3",this.dataColor={fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},this.dotSizeRatio=.02,this.create(),this.setOptions(i),e&&this.setData(e)}function n(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function s(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},a=i(12),h=i(8),d=i(10),l=i(1),c=i(13),u=i(14),p=i(15),f=i(16),m=i(17),v=i(18);a(o.prototype),o.prototype._setScale=function(){this.scale=new c(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!==o.STYLE.DOTCOLOR&&this.style!==o.STYLE.DOTSIZE&&this.style!==o.STYLE.BARCOLOR&&this.style!==o.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)}},o.prototype.getNumberOfRows=function(t){return t.length},o.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},o.prototype.getDistinctValues=function(t,e){for(var i=[],o=0;ot[o][e]&&(i.min=t[o][e]),i.maxt;t++){var f=(t-u)/(p-u),m=240*f,g=this._hsv2rgb(m,1,1);c.strokeStyle=g,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.axisColor,c.strokeRect(h,r,i,s)}if(this.style===o.STYLE.DOTSIZE&&(c.strokeStyle=this.axisColor,c.fillStyle=this.dataColor.fill,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===o.STYLE.DOTCOLOR||this.style===o.STYLE.DOTSIZE){var y=5,b=new v(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,n=this._convert3Dto2D(new c(w,r,this.zMin)),Math.cos(2*_)>0?(m.textAlign="center",m.textBaseline="top",n.y+=b):Math.sin(2*_)<0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(" "+this.xValueLabel(i.getCurrent())+" ",n.x,n.y),i.next()}for(m.lineWidth=1,o=void 0===this.defaultYStep,i=new v(this.yMin,this.yMax,this.yStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,n=this._convert3Dto2D(new c(s,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(m.textAlign="center",m.textBaseline="top",n.y+=b):Math.sin(2*_)>0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(" "+this.yValueLabel(i.getCurrent())+" ",n.x,n.y),i.next();for(m.lineWidth=1,o=void 0===this.defaultZStep,i=new v(this.zMin,this.zMax,this.zStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new c(s,r,i.getCurrent())),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(t.x-b,t.y),m.stroke(),m.textAlign="right",m.textBaseline="middle",m.fillStyle=this.axisColor,m.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();m.lineWidth=1,t=this._convert3Dto2D(new c(s,r,this.zMin)),e=this._convert3Dto2D(new c(s,r,this.zMax)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke(),m.lineWidth=1,u=this._convert3Dto2D(new c(this.xMin,this.yMin,this.zMin)),p=this._convert3Dto2D(new c(this.xMax,this.yMin,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(u.x,u.y),m.lineTo(p.x,p.y),m.stroke(),u=this._convert3Dto2D(new c(this.xMin,this.yMax,this.zMin)),p=this._convert3Dto2D(new c(this.xMax,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(u.x,u.y),m.lineTo(p.x,p.y),m.stroke(),m.lineWidth=1,t=this._convert3Dto2D(new c(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new c(this.xMin,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke(),t=this._convert3Dto2D(new c(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new c(this.xMax,this.yMax,this.zMin)),m.strokeStyle=this.axisColor,m.beginPath(),m.moveTo(t.x,t.y),m.lineTo(e.x,e.y),m.stroke();var x=this.xLabel;x.length>0&&(l=.1/this.scale.y,s=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-l:this.yMax+l,n=this._convert3Dto2D(new c(s,r,this.zMin)),Math.cos(2*_)>0?(m.textAlign="center",m.textBaseline="top"):Math.sin(2*_)<0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(x,n.x,n.y));var k=this.yLabel;k.length>0&&(d=.1/this.scale.x,s=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,n=this._convert3Dto2D(new c(s,r,this.zMin)),Math.cos(2*_)<0?(m.textAlign="center",m.textBaseline="top"):Math.sin(2*_)>0?(m.textAlign="right",m.textBaseline="middle"):(m.textAlign="left",m.textBaseline="middle"),m.fillStyle=this.axisColor,m.fillText(k,n.x,n.y));var O=this.zLabel;O.length>0&&(h=30,s=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,n=this._convert3Dto2D(new c(s,r,a)),m.textAlign="right",m.textBaseline="middle",m.fillStyle=this.axisColor,m.fillText(O,n.x-h,n.y))},o.prototype._hsv2rgb=function(t,e,i){var o,n,s,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:o=r,n=h,s=0;break;case 1:o=h,n=r,s=0;break;case 2:o=0,n=r,s=h;break;case 3:o=0,n=h,s=r;break;case 4:o=h,n=0,s=r;break;case 5:o=r,n=0,s=h;break;default:o=0,n=0,s=0}return"RGB("+parseInt(255*o)+","+parseInt(255*n)+","+parseInt(255*s)+")"},o.prototype._redrawDataGrid=function(){var t,e,i,n,s,r,a,h,d,l,u,p,f=this.frame.canvas,m=f.getContext("2d");if(m.lineJoin="round",m.lineCap="round",!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(s=0;s0}else r=!0;r?(p=(t.point.z+e.point.z+i.point.z+n.point.z)/4,d=240*(1-(p-this.zMin)*this.scale.z/this.verticalRatio),l=1,this.showShadow?(u=Math.min(1+x.x/k/2,1),a=this._hsv2rgb(d,l,u),h=a):(u=1,a=this._hsv2rgb(d,l,u),h=this.axisColor)):(a="gray",h=this.axisColor),m.lineWidth=this._getStrokeWidth(t),m.fillStyle=a,m.strokeStyle=h,m.beginPath(),m.moveTo(t.screen.x,t.screen.y),m.lineTo(e.screen.x,e.screen.y),m.lineTo(n.screen.x,n.screen.y),m.lineTo(i.screen.x,i.screen.y),m.closePath(),m.fill(),m.stroke()}}else for(s=0;su&&(u=0);var p,f,m;this.style===o.STYLE.DOTCOLOR?(p=240*(1-(d.point.value-this.valueMin)*this.scale.value),f=this._hsv2rgb(p,1,1),m=this._hsv2rgb(p,1,.8)):this.style===o.STYLE.DOTSIZE?(f=this.dataColor.fill,m=this.dataColor.stroke):(p=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),f=this._hsv2rgb(p,1,1),m=this._hsv2rgb(p,1,.8)),i.lineWidth=this._getStrokeWidth(d),i.strokeStyle=m,i.fillStyle=f,i.beginPath(),i.arc(d.screen.x,d.screen.y,u,0,2*Math.PI,!0),i.fill(),i.stroke()}}},o.prototype._redrawDataBar=function(){var t,e,i,n,s=this.frame.canvas,r=s.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0){for(t=this.dataPoints[0],o.lineWidth=this._getStrokeWidth(t),o.lineJoin="round",o.lineCap="round",o.strokeStyle=this.dataColor.stroke,o.beginPath(),o.moveTo(t.screen.x,t.screen.y),e=1;e0?1:0>t?-1:0}var o=e[0],n=e[1],s=e[2],r=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),a=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x)),h=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},o.prototype._dataPointFromXY=function(t,e){var i,n=100,s=null,r=null,a=null,h=new u(t,e);if(this.style===o.STYLE.BAR||this.style===o.STYLE.BARCOLOR||this.style===o.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){s=this.dataPoints[i];var d=s.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var c=d[l],p=c.corners,f=[p[0].screen,p[1].screen,p[2].screen],m=[p[2].screen,p[3].screen,p[0].screen];if(this._insideTriangle(h,f)||this._insideTriangle(h,m))return s}}else for(i=0;ib)&&n>b&&(a=b,r=s)}}return r},o.prototype._showTooltip=function(t){var e,i,o;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,o=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",o=document.createElement("div"),o.style.position="absolute",o.style.height="0",o.style.width="0",o.style.border="5px solid #4d4d4d",o.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:o}}),this._hideTooltip(),this.tooltip.dataPoint=t,"function"==typeof this.showTooltip?e.innerHTML=this.showTooltip(t.point):e.innerHTML="
"+this.xLabel+":"+t.point.x+"
"+this.yLabel+":"+t.point.y+"
"+this.zLabel+":"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,a=o.offsetWidth,h=o.offsetHeight,d=t.screen.x-n/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-n),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-s+"px",o.style.left=t.screen.x-a/2+"px",o.style.top=t.screen.y-h/2+"px"},o.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)}}},t.exports=o},function(t,e){function i(t){return t?o(t):void 0}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.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 o,n=0;no;++o)i[o].apply(this,e)}return this},i.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},i.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){function i(t,e,i){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==i?i:0}i.subtract=function(t,e){var o=new i;return o.x=t.x-e.x,o.y=t.y-e.y,o.z=t.z-e.z,o},i.add=function(t,e){var o=new i;return o.x=t.x+e.x,o.y=t.y+e.y,o.z=t.z+e.z,o},i.avg=function(t,e){return new i((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},i.crossProduct=function(t,e){var o=new i;return o.x=t.y*e.z-t.z*e.y,o.y=t.z*e.x-t.x*e.z,o.z=t.x*e.y-t.y*e.x,o},i.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=i},function(t,e){function i(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=i},function(t,e,i){function o(){this.armLocation=new n,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new n,this.cameraRotation=new n(.5*Math.PI,0,0),this.calculateCameraOrientation()}var n=i(13);o.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},o.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()},o.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},o.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},o.prototype.getArmLength=function(){return this.armLength},o.prototype.getCameraLocation=function(){return this.cameraLocation},o.prototype.getCameraRotation=function(){return this.cameraRotation},o.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=o},function(t,e,i){function o(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 n=i(10);o.prototype.isLoaded=function(){return this.loaded},o.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},o.prototype.getLabel=function(){return this.graph.filterLabel},o.prototype.getColumn=function(){return this.column},o.prototype.getSelectedValue=function(){return void 0!==this.index?this.values[this.index]:void 0},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t]},o.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 o=new n(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(o),this.dataPoints[t]=e}return e},o.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},o.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},o.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},o.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},o.prototype.setIndex=function(t){if(!(to&&(o=0),o>this.values.length-1&&(o=this.values.length-1),o},o.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,o=i+3;return o},o.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,o=this.leftToIndex(i);this.setIndex(o),n.preventDefault()},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",n.removeEventListener(document,"mousemove",this.onmousemove),n.removeEventListener(document,"mouseup",this.onmouseup),n.preventDefault()},t.exports=o},function(t,e){function i(t,e,i,o){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,o)}i.prototype.setRange=function(t,e,i,o){this._start=t?t:0,this._end=e?e:0,this.setStep(i,o)},i.prototype.setStep=function(t,e){void 0===t||0>=t||(void 0!==e&&(this.prettyStep=e),this.prettyStep===!0?this._step=i.calculatePrettyStep(t):this._step=t)},i.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),o=2*Math.pow(10,Math.round(e(t/2))),n=5*Math.pow(10,Math.round(e(t/5))),s=i;return Math.abs(o-t)<=Math.abs(s-t)&&(s=o),Math.abs(n-t)<=Math.abs(s-t)&&(s=n),0>=s&&(s=1),s},i.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},i.prototype.getStep=function(){return this._step},i.prototype.start=function(){this._current=this._start-this._start%this._step},i.prototype.next=function(){this._current+=this._step},i.prototype.end=function(){return this._current>this._end},t.exports=i},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e,i,o){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof c||i instanceof u)&&i instanceof Object){var s=o;o=i,i=s}var r=this;this.defaultOptions={start:null,end:null,autoResize:!0,throttleRedraw:0,orientation:{axis:"bottom",item:"bottom"},moment:d,width:null,height:null,maxHeight:null,minHeight:null},this.options=l.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)},hiddenDates:[],util:{getScale:function(){return r.timeAxis.step.scale},getStep:function(){return r.timeAxis.step.step},toScreen:r._toScreen.bind(r),toGlobalScreen:r._toGlobalScreen.bind(r),toTime:r._toTime.bind(r),toGlobalTime:r._toGlobalTime.bind(r)}},this.range=new p(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new m(this.body),this.timeAxis2=null,this.components.push(this.timeAxis),this.currentTime=new v(this.body),this.components.push(this.currentTime),this.itemSet=new y(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){r.emit("click",r.getEventProperties(t))}),this.on("doubletap",function(t){r.emit("doubleClick",r.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){r.emit("contextmenu",r.getEventProperties(t))},this.fitDone=!1,this.on("changed",function(){if(null!=this.itemsData&&!r.fitDone)if(r.fitDone=!0,void 0!=r.options.start||void 0!=r.options.end){if(void 0==r.options.start||void 0==r.options.end)var t=r.getItemRange();var e=void 0!=r.options.start?r.options.start:t.min,i=void 0!=r.options.end?r.options.end:t.max;r.setWindow(e,i,{animation:!1})}else r.fit({animation:!1})}),o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var s=i(20),r=o(s),a=i(26),h=o(a),d=(i(12),i(22),i(2)),l=i(1),c=i(8),u=i(10),p=i(27),f=i(30),m=i(41),v=i(46),g=i(44),y=i(31),b=i(26).printStyle,_=i(47).allOptions,w=i(47).configureOptions;n.prototype=new f,n.prototype._createConfigurator=function(){return new r["default"](this,this.dom.container,w)},n.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},n.prototype.setOptions=function(t){var e=h["default"].validate(t,_);if(e===!0&&console.log("%cErrors have been found in the supplied options object.",b),f.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var i=this.itemsData;if(i){var o=this.getSelection();this.setItems(null),this.setItems(i),this.setSelection(o)}}},n.prototype.setItems=function(t){var e;e=t?t instanceof c||t instanceof u?t:new c(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},n.prototype.setGroups=function(t){var e;e=t?t instanceof c||t instanceof u?t:new c(t):null,this.groupsData=e,this.itemSet.setGroups(e)},n.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},n.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},n.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},n.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||n>e)&&(n=e),(null===s||i>s)&&(s=i)}),null!==n&&null!==s){var r=(n+s)/2,a=Math.max(this.range.end-this.range.start,1.1*(s-n)),h=e&&void 0!==e.animation?e.animation:!0;this.range.setRange(r-a/2,r+a/2,h)}}},n.prototype.fit=function(t){var e=t&&void 0!==t.animation?t.animation:!0,i=this.getItemRange();this.range.setRange(i.min,i.max,e)},n.prototype.getItemRange=function(){var t=this,e=this.getDataRange(),i=null!==e.min?e.min.valueOf():null,o=null!==e.max?e.max.valueOf():null,n=null,s=null;if(null!=i&&null!=o){var r,a,h,d,c;!function(){var e=function(t){return l.convert(t.data.start,"Date").valueOf()},u=function(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return l.convert(e,"Date").valueOf()};r=o-i,0>=r&&(r=10),a=r/t.props.center.width,l.forEach(t.itemSet.items,function(t){t.show(),t.repositionX();var r=e(t),h=u(t),d=r-(t.getWidthLeft()+10)*a,l=h+(t.getWidthRight()+10)*a;i>d&&(i=d,n=t),l>o&&(o=l,s=t)}.bind(t)),n&&s&&(h=n.getWidthLeft()+10,d=s.getWidthRight()+10,c=t.props.center.width-h-d,c>0&&(i=e(n)-h*r/c,o=u(s)+d*r/c))}()}return{min:null!=i?new Date(i):null,max:null!=o?new Date(o):null}},n.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=l.convert(i.start,"Date").valueOf(),n=l.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||t>o)&&(t=o),(null===e||n>e)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},n.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-l.getAbsoluteLeft(this.dom.centerContainer),n=i-l.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=g.customTimeFromTarget(t),h=this.itemSet.options.snap||null,d=this.body.util.getScale(),c=this.body.util.getStep(),u=this._toTime(o),p=h?h(u,d,c):u,f=l.getTarget(t),m=null;return null!=s?m="item":null!=a?m="custom-time":l.hasParent(f,this.timeAxis.dom.foreground)?m="axis":this.timeAxis2&&l.hasParent(f,this.timeAxis2.dom.foreground)?m="axis":l.hasParent(f,this.itemSet.dom.labelSet)?m="group-label":l.hasParent(f,this.currentTime.bar)?m="current-time":l.hasParent(f,this.dom.center)&&(m="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:m,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:u,snappedTime:p}},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},r=function(){function t(t,e){for(var i=0;i0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);this.options.showButton===!0&&!function(){var e=document.createElement("div");e.className="vis-configuration vis-config-button",e.innerHTML="generate options",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className="vis-configuration vis-config-button hover"},e.onmouseout=function(){e.className="vis-configuration vis-config-button"},t.optionsContainer=document.createElement("div"),t.optionsContainer.className="vis-configuration vis-config-option-container",t.domElements.push(t.optionsContainer),t.domElements.push(e)}(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?o-1:0),r=1;o>r;r++)n[r-1]=e[r];return n.forEach(function(t){s.appendChild(t)}),i.domElements.push(s),{v:i.domElements.length}}();if("object"===("undefined"==typeof a?"undefined":s(a)))return a.v}return 0}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerHTML=t,this._makeItem([],e)}},{key:"_makeLabel",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,i===!0?o.innerHTML=""+t+":":o.innerHTML=t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;se&&n>e*c?(a.min=Math.ceil(e*c),l=a.min,d="range increased"):n>e/c&&(a.min=Math.ceil(e/c),l=a.min,d="range increased"),e*c>s&&1!==s&&(a.max=Math.ceil(e*c),l=a.max,d="range increased"),a.value=e}else a.value=o;var u=document.createElement("input");u.className="vis-configuration vis-config-rangeinput",u.value=a.value;var p=this;a.onchange=function(){u.value=this.value,p._update(Number(this.value),i)},a.oninput=function(){u.value=this.value};var f=this._makeLabel(i[i.length-1],i),m=this._makeItem(i,f,a,u);""!==d&&this.popupHistory[m]!==l&&(this.popupHistory[m]=l,this._setupPopup(d,m))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCountervar options = "+JSON.stringify(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;es;s++)for(r=0;rp?p+1:p;var f=l/this.r,m=a.RGBToHSV(this.color.r,this.color.g,this.color.b);m.h=p,m.s=f;var v=a.HSVToRGB(m.h,m.s,m.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),t}();e["default"]=h},function(t,e,i){if("undefined"!=typeof window){var o=i(23),n=window.Hammer||i(24);t.exports=o(n,{preventDefault:"mouse"})}else t.exports=function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,i){var o,n,s;!function(i){n=[],o=i,s="function"==typeof o?o.apply(e,n):o,!(void 0!==s&&(t.exports=s))}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return Array.isArray(t)?(l(t,i[e],i),!0):!1}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function u(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ct(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==ft?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function O(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=z(o);e.timeStamp=gt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=B(a,h),e.distance=A(a,h),P(i,e),e.offsetDirection=R(e.deltaX,e.deltaY);var d=L(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=vt(d.x)>vt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?F(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Et&&s.eventType!==It||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=Nt&&(h>Tt||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,c=L(h,d,l);o=c.x,n=c.y,i=vt(c.x)>vt(c.y)?c.x:c.y,s=R(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;in;)i+=t[n].clientX,o+=t[n].clientY,n++;return{x:mt(i/e),y:mt(o/e)}}function L(t,e,i){return{x:e/t||0,y:i/t||0}}function R(t,e){return t===e?zt:vt(t)>=vt(e)?0>t?Lt:Rt:0>e?At:Bt}function A(t,e,i){i||(i=Wt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function B(t,e,i){i||(i=Wt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function F(t,e){return B(e[1],e[0],Yt)+B(t[1],t[0],Yt)}function j(t,e){return A(e[0],e[1],Yt)/A(t[0],t[1],Yt)}function H(){this.evEl=Vt,this.evWin=Ut,this.allow=!0,this.pressed=!1,S.apply(this,arguments)}function W(){this.evEl=Zt,this.evWin=Kt,S.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Qt,this.evWin=$t,this.started=!1,S.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(It|Nt)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=ee,this.targetIds={},S.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Et|Pt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Et)for(n=0;na&&(e.push(t),a=e.length-1):n&(It|Nt)&&(i=!0),0>a||(e[a]=t,this.callback(this.manager,n,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i&&e.splice(a,1))}});var Jt={touchstart:Et,touchmove:Pt,touchend:It,touchcancel:Nt},Qt="touchstart",$t="touchstart touchmove touchend touchcancel";u(Y,S,{handler:function(t){var e=Jt[t.type];if(e===Et&&(this.started=!0),this.started){var i=G.call(this,t,e);e&(It|Nt)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Mt,srcEvent:t})}}});var te={touchstart:Et,touchmove:Pt,touchend:It,touchcancel:Nt},ee="touchstart touchmove touchend touchcancel";u(V,S,{handler:function(t){var e=te[t.type],i=U.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Mt,srcEvent:t})}}),u(q,S,{handler:function(t,e,i){var o=i.pointerType==Mt,n=i.pointerType==St;if(o)this.mouse.allow=!1;else if(n&&!this.mouse.allow)return;e&(It|Nt)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var ie=O(pt.style,"touchAction"),oe=ie!==a,ne="compute",se="auto",re="manipulation",ae="none",he="pan-x",de="pan-y";X.prototype={set:function(t){t==ne&&(t=this.compute()),oe&&this.manager.element.style&&(this.manager.element.style[ie]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),Z(t.join(" "))},preventDefaults:function(t){if(!oe){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=b(o,ae),s=b(o,de),r=b(o,he);if(n){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}if(!r||!s)return n||s&&i&Ft||r&&i&jt?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var le=1,ce=2,ue=4,pe=8,fe=pe,me=16,ve=32;K.prototype={defaults:{},set:function(t){return ct(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=$(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=$(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=$(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=$(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;pe>o&&e(i.options.event+J(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=pe&&e(i.options.event+J(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=ve)},canEmit:function(){for(var t=0;ts?Lt:Rt,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?zt:0>r?At:Bt,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return tt.prototype.attrTest.call(this,t)&&(this.state&ce||!(this.state&ce)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=Q(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),u(it,tt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ce)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),u(ot,K,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distancee.time;if(this._input=t,!o||!i||t.eventType&(It|Nt)&&!n)this.reset();else if(t.eventType&Et)this.reset(),this._timer=h(function(){this.state=fe,this.tryEmit()},e.time,this);else if(t.eventType&It)return fe;return ve},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===fe&&(t&&t.eventType&It?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=gt(),this.manager.emit(this.options.event,this._input)))}}),u(nt,tt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ce)}}),u(st,tt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ft|jt,pointers:1},getTouchAction:function(){return et.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ft|jt)?e=t.overallVelocity:i&Ft?e=t.overallVelocityX:i&jt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&vt(e)>this.options.velocity&&t.eventType&It},emit:function(t){var e=Q(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),u(rt,K,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distances.distance?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""),d):n.distance<=r?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),d):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print(Object.keys(i))+t.printLocation(o,e),d),a=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length<=3||void 0===arguments[3]?!1:arguments[3],s=1e9,a="",h=[],d=e.toLowerCase(),l=void 0;for(var c in i){var u=void 0;if(void 0!==i[c].__type__&&n===!0){var p=t.findInOptions(e,i[c],r.copyAndExtendArray(o,c));s>p.distance&&(a=p.closestMatch,h=p.path,s=p.distance,l=p.indexMatch)}else-1!==c.toLowerCase().indexOf(d)&&(l=c),u=t.levenshteinDistance(e,c),s>u&&(a=c,h=r.copyArray(o),s=u)}return{closestMatch:a,path:h,distance:s,indexMatch:l}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length<=2||void 0===arguments[2]?"Problem value found at: \n":arguments[2],o="\n\n"+i+"options = {\n",n=0;ns;s++)o+=" ";o+=t[n]+": {\n"}for(var r=0;ru,a=r||null===n?n:d+(n-d)*i,p=r||null===s?s:c+(s-c)*i;y=h._applyRange(a,p),l.updateHiddenDates(h.options.moment,h.body,h.options.hiddenDates),v=v||y,y&&h.body.emitter.emit("rangechange",{start:new Date(h.start),end:new Date(h.end),byUser:o}),r?v&&h.body.emitter.emit("rangechanged",{start:new Date(h.start),end:new Date(h.end),byUser:o}):h.animationTimer=setTimeout(_,20)}};return g()}var y=this._applyRange(n,s);if(l.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),y){var b={start:new Date(this.start),end:new Date(this.end),byUser:o};this.body.emitter.emit("rangechange",b),this.body.emitter.emit("rangechanged",b)}},o.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},o.prototype._applyRange=function(t,e){var i,o=null!=t?a.convert(t,"Date").valueOf():this.start,n=null!=e?a.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?a.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?a.convert(this.options.min,"Date").valueOf():null;if(isNaN(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(o>n&&(n=o),null!==r&&r>o&&(i=r-o,o+=i,n+=i,null!=s&&n>s&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&r>o&&(o=r)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>n-o&&(this.end-this.start===h&&o>this.start&&nd&&(d=0),n-o>d&&(this.end-this.start===d&&othis.end?(o=this.start,n=this.end):(i=n-o-d,o+=i/2,n-=i/2))}var l=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,l},o.prototype.getRange=function(){return{start:this.start,end:this.end}},o.prototype.conversion=function(t,e){return o.conversion(this.start,this.end,t,e)},o.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},o.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&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"))},o.prototype._onDrag=function(t){if(this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;n(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start,s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);o-=s;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*o,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),u=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||u!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=u,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d);var p=new Date(this.start),f=new Date(this.end);this.body.emitter.emit("rangechange",{start:p,end:f,byUser:!0})}},o.prototype._onDragEnd=function(t){this.props.touch.dragging&&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),byUser:!0}))},o.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&(!this.options.zoomKey||t[this.options.zoomKey])){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 o=s({x:t.clientX,y:t.clientY},this.body.dom.center),n=this._pointerToDate(o);this.zoom(i,n,e)}t.preventDefault()}},o.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},o.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=s(t.center,this.body.dom.center));var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=l.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),r=o-n,a=i-n+(this.props.touch.start-(i-n))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=0>=1-e,this.endToFront=0>=e-1;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);d==a&&c==h||(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.scale,a=d,h=c),this.setRange(a,h,!1,!0),this.startToFront=!1,this.endToFront=!0}},o.prototype._isInsideRange=function(t){var e=t.center?t.center.x:t.clientX,i=e-a.getAbsoluteLeft(this.body.dom.centerContainer),o=this.body.util.toTime(i);return o>=this.start&&o<=this.end},o.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(n(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},o.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var o=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=l.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),s=o-n,r=e-n+(this.start-(e-n))*t,a=e+s+(this.end-(e+s))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);h==r&&d==a||(r=h,a=d),this.setRange(r,a,!1,!0),this.startToFront=!1,this.endToFront=!0},o.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},o.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i;this.setRange(o,n)},t.exports=o},function(t,e){function i(t,e){this.options=null,this.props=null}i.prototype.setOptions=function(t){t&&util.extend(this.options,t)},i.prototype.redraw=function(){return!1},i.prototype.destroy=function(){},i.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=i},function(t,e){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n=4*a){var u=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(u=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-u,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),m=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(m),l.day(m),l.add(f,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),p.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(u=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(u,"months"),p.add(1,"months");break;case"yearly":d.year()!=l.year()&&(u=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(u,"years"),p.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;p>d;)switch(i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),o[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(i);var v=e.isHidden(i.range.start,i.hiddenDates),g=e.isHidden(i.range.end,i.hiddenDates),y=i.range.start,b=i.range.end;1==v.hidden&&(y=1==i.range.startToFront?v.startDate-1:v.endDate+1),1==g.hidden&&(b=1==i.range.endToFront?g.startDate-1:g.endDate+1),1!=v.hidden&&1!=g.hidden||i.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],o=0;o=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(var o=0;o=r&&a>n){o=!0;break}}if(1==o&&n=e&&i>r&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s=i.start&&a=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r=e.start&&h=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?0>o?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=o&&n>t)return{hidden:!0,startDate:o,endDate:n}}return{hidden:!1,startDate:o,endDate:n}}},function(t,e,i){function o(){}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},s=i(12),r=i(22),a=i(25),h=i(1),d=(i(8),i(10),i(27),i(31),i(41)),l=i(42),c=i(29),u=i(44);s(o.prototype),o.prototype._create=function(t){function e(t){i.isActive()&&i.emit("mousewheel",t)}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"), +this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.on("rangechange",function(){this.initialDrawDone===!0&&this._redraw()}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("pan",this._onDrag.bind(this));var i=this;this.on("_change",function(t){t&&1==t.queue?i._redrawTimer||(i._redrawTimer=setTimeout(function(){i._redrawTimer=null,i._redraw()},0)):i._redraw()}),this.hammer=new r(this.dom.root);var o=this.hammer.get("pinch").set({enable:!0});a.disablePreventDefaultVertically(o),this.hammer.get("pan").set({threshold:5,direction:r.DIRECTION_HORIZONTAL}),this.listeners={};var n=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];if(n.forEach(function(t){var e=function(e){i.isActive()&&i.emit(t,e)};i.hammer.on(t,e),i.listeners[t]=e}),a.onTouch(this.hammer,function(t){i.emit("touch",t)}.bind(this)),a.onRelease(this.hammer,function(t){i.emit("release",t)}.bind(this)),this.dom.root.addEventListener("mousewheel",e),this.dom.root.addEventListener("DOMMouseScroll",e),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},o.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","throttleRedraw"];if(h.selectiveExtend(e,this.options,t),this.options.orientation={item:void 0,axis:void 0},"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===n(t.orientation)&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new d(this.body);i.setOptions=function(t){var e=t?h.extend({},t):{};e.orientation="top",d.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&c.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new l(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var s=h.deepExtend({},this.options);this.components.forEach(function(t){h.deepExtend(s,t.options)}),this.configurator.setModuleOptions({global:s})}this._origRedraw?this._redraw():(this._origRedraw=this._redraw.bind(this),this._redraw=h.throttle(this._origRedraw,this.options.throttleRedraw))},o.prototype.isActive=function(){return!this.activator||this.activator.active},o.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},o.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+JSON.stringify(e));i.length>0&&i[0].setCustomTime(t)},o.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+JSON.stringify(t));return e[0].getCustomTime()},o.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+JSON.stringify(e));return i.length>0?i[0].setCustomTitle(t):void 0},o.prototype.getEventProperties=function(t){return{event:t}},o.prototype.addCustomTime=function(t,e){var i=void 0!==t?h.convert(t,"Date").valueOf():new Date,o=this.customTimes.some(function(t){return t.options.id===e});if(o)throw new Error("A custom time with id "+JSON.stringify(e)+" already exists");var n=new u(this.body,h.extend({},this.options,{time:i,id:e}));return this.customTimes.push(n),this.components.push(n),this._redraw(),e},o.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+JSON.stringify(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},o.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},o.prototype.fit=function(t){var e=this.getDataRange();if(null!==e.min||null!==e.max){var i=e.max-e.min,o=new Date(e.min.valueOf()-.01*i),n=new Date(e.max.valueOf()+.01*i),s=t&&void 0!==t.animation?t.animation:!0;this.range.setRange(o,n,s)}},o.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},o.prototype.setWindow=function(t,e,i){var o;if(1==arguments.length){var n=arguments[0];o=void 0!==n.animation?n.animation:!0,this.range.setRange(n.start,n.end,o)}else o=i&&void 0!==i.animation?i.animation:!0,this.range.setRange(t,e,o)},o.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,o=h.convert(t,"Date").valueOf(),n=o-i/2,s=o+i/2,r=e&&void 0!==e.animation?e.animation:!0;this.range.setRange(n,s,r)},o.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},o.prototype.redraw=function(){this._redraw()},o.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.container.clientWidth){c.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(h.addClassName(o.root,"vis-top"),h.removeClassName(o.root,"vis-bottom")):(h.removeClassName(o.root,"vis-top"),h.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=h.option.asSize(e.maxHeight,""),o.root.style.minHeight=h.option.asSize(e.minHeight,""),o.root.style.width=h.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var n=o.root.offsetHeight-o.root.clientHeight,s=o.root.offsetWidth-o.root.clientWidth;0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(s=n),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),d=i.top.height+a+i.bottom.height+n+i.border.top+i.border.bottom;o.root.style.height=h.option.asSize(e.height,d+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-n;var l=i.root.height-i.top.height-i.bottom.height-n;i.centerContainer.height=l,i.leftContainer.height=l,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-s,i.left.width=o.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=o.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var u=i.root.width-i.left.width-i.right.width-s;i.center.width=u,i.centerContainer.width=u,i.top.width=u,i.bottom.width=u,o.background.style.height=i.background.height+"px",o.backgroundVertical.style.height=i.background.height+"px",o.backgroundHorizontal.style.height=i.centerContainer.height+"px",o.centerContainer.style.height=i.centerContainer.height+"px",o.leftContainer.style.height=i.leftContainer.height+"px",o.rightContainer.style.height=i.rightContainer.height+"px",o.background.style.width=i.background.width+"px",o.backgroundVertical.style.width=i.centerContainer.width+"px",o.backgroundHorizontal.style.width=i.background.width+"px",o.centerContainer.style.width=i.center.width+"px",o.top.style.width=i.top.width+"px",o.bottom.style.width=i.bottom.width+"px",o.background.style.left="0",o.background.style.top="0",o.backgroundVertical.style.left=i.left.width+i.border.left+"px",o.backgroundVertical.style.top="0",o.backgroundHorizontal.style.left="0",o.backgroundHorizontal.style.top=i.top.height+"px",o.centerContainer.style.left=i.left.width+"px",o.centerContainer.style.top=i.top.height+"px",o.leftContainer.style.left="0",o.leftContainer.style.top=i.top.height+"px",o.rightContainer.style.left=i.left.width+i.center.width+"px",o.rightContainer.style.top=i.top.height+"px",o.top.style.left=i.left.width+"px",o.top.style.top="0",o.bottom.style.left=i.left.width+"px",o.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var p=this.props.scrollTop;"top"!=e.orientation.item&&(p+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),o.center.style.left="0",o.center.style.top=p+"px",o.left.style.left="0",o.left.style.top=p+"px",o.right.style.left="0",o.right.style.top=p+"px";var f=0==this.props.scrollTop?"hidden":"",m=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=f,o.shadowBottom.style.visibility=m,o.shadowTopLeft.style.visibility=f,o.shadowBottomLeft.style.visibility=m,o.shadowTopRight.style.visibility=f,o.shadowBottomRight.style.visibility=m;var v=this.props.center.height>this.props.centerContainer.height;this.hammer.get("pan").set({direction:v?r.DIRECTION_ALL:r.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});var g=5;if(t){if(this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTope;e++)o=this.selection[e],n=this.items[o],n&&n.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)o=t[e],n=this.items[o],n&&(this.selection.push(o),n.select())},o.prototype.getSelection=function(){return this.selection.concat([])},o.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),o=[];for(var n in this.groups)if(this.groups.hasOwnProperty(n))for(var s=this.groups[n],r=s.visibleItems,a=0;ae&&o.push(h.id)}return o},o.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;o>i;i++)if(e[i]==t){e.splice(i,1);break}},o.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=r.option.asSize,o=this.options,n=o.orientation.item,s=!1,a=this.dom.frame;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="vis-itemset",s=this._orderGroups()||s;var h=e.end-e.start,d=h!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;d&&(this.stackDirty=!0),this.lastVisibleInterval=h,this.props.lastWidth=this.props.width;var l=this.stackDirty,c=this._firstGroup(),u={item:t.item,axis:t.axis},p={item:t.item,axis:t.item.vertical/2},f=0,m=t.axis+t.item.vertical;return this.groups[y].redraw(e,p,l),r.forEach(this.groups,function(t){var i=t==c?u:p,o=t.redraw(e,i,l);s=o||s,f+=t.height}),f=Math.max(f,m),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==n?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",s=this._isResized()||s},o.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[g];return i||null},o.prototype._updateUngrouped=function(){var t,e,i=this.groups[g];this.groups[y];if(this.groupsData){if(i){i.hide(),delete this.groups[g];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){var s=null,r=null;i=new c(s,r,this),this.groups[g]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},o.prototype.getLabelSet=function(){return this.dom.labelSet},o.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof a||t instanceof h))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(r.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;r.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},o.prototype.getItems=function(){return this.itemsData},o.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(r.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof a||t instanceof h))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var o=this.id;r.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,o)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},o.prototype.getGroups=function(){return this.groupsData},o.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)})},o.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},o.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?y:this.groupsData?t.group:g},o.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,n=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=e._getType(n),a=o.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,n):(i=s.selected,e._removeItem(s),s=null)),!s){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(n,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.stackDirty=!0,this.body.emitter.emit("_change",{queue:!0})},o.prototype._onAdd=o.prototype._onUpdate,o.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("_change",{queue:!0}))},o.prototype._order=function(){r.forEach(this.groups,function(t){t.order()})},o.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},o.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==g||t==y)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=Object.create(e.options);r.extend(n,{height:null}),o=new c(t,i,e),e.groups[t]=o;for(var s in e.items)if(e.items.hasOwnProperty(s)){var a=e.items[s];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},o.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",{queue:!0})},o.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!r.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},o.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},o.prototype._updateItem=function(t,e){var i=t.data.group,o=t.data.subgroup;if(t.setData(e),i!=t.data.group||o!=t.data.subgroup){var n=this.groups[i];n&&n.remove(t);var s=this._getGroupId(t.data),r=this.groups[s];r&&r.add(t)}},o.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),t.parent&&t.parent.remove(t)},o.prototype._constructByEndArray=function(t){for(var e=[],i=0;in+s)return}else{var a=e.height;if(n+a-s>o)return}}if(e&&e!=this.groupTouchParams.group){var h=this.groupsData,d=h.get(e.groupId),l=h.get(this.groupTouchParams.group.groupId);l&&d&&(this.options.groupOrderSwap(l,d,this.groupsData),this.groupsData.update(l),this.groupsData.update(d));var c=this.groupsData.getIds({order:this.options.groupOrder});if(!r.equalArray(c,this.groupTouchParams.originalOrder))for(var h=this.groupsData,u=this.groupTouchParams.originalOrder,p=this.groupTouchParams.group.groupId,f=Math.min(u.length,c.length),m=0,v=0,g=0;f>m;){for(;f>m+v&&f>m+g&&c[m+v]==u[m+g];)m++;if(m+v>=f)break;if(c[m+v]!=p)if(u[m+g]!=p){var y=c.indexOf(u[m+g]),b=h.get(c[m+v]),_=h.get(u[m+g]);this.options.groupOrderSwap(b,_,h),h.update(b),h.update(_);var w=c[m+v];c[m+v]=u[m+g],c[y]=w,m++}else g=1;else v=1}}}},o.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=r.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!r.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,a=Math.min(s.length,n.length),h=0;a>h;){for(;a>h&&n[h]==s[h];)h++;if(h>=a)break;var d=n.indexOf(s[h]),l=o.get(n[h]),c=o.get(s[h]);e.options.groupOrderSwap(l,c,o),groupsData.update(l),groupsData.update(c);var u=n[h];n[h]=s[h],n[d]=u,h++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},o.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},o.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.options.snap||null,o=this.itemFromTarget(t);if(o){var n=e.itemsData.get(o.id);this.options.onUpdate(n,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var s=r.getAbsoluteLeft(this.dom.frame),a=t.center.x-s,h=this.body.util.toTime(a),d=this.body.util.getScale(),l=this.body.util.getStep(),c={start:i?i(h,d,l):h,content:"new item"};if("range"===this.options.type){var u=this.body.util.toTime(a+this.props.width/5);c.end=i?i(u,d,l):u}c[this.itemsData._fieldId]=r.randomUUID();var p=this.groupFromTarget(t);p&&(c.group=p.groupId),c=this._cloneItemData(c),this.options.onAdd(c,function(t){t&&e.itemsData.getDataSet().add(t)})}}},o.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[],n=t.srcEvent&&t.srcEvent.shiftKey||!1;if(n&&this.options.multiselect){var s=this.itemsData.get(e.id).group,r=void 0;this.options.multiselectPerGroup&&i.length>0&&(r=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=r&&r!=s||i.push(e.id);var a=o._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||r==s){i=[];for(var h in this.items)if(this.items.hasOwnProperty(h)){var d=this.items[h],l=d.data.start,c=void 0!==d.data.end?d.data.end:l;!(l>=a.min&&c<=a.max)||this.options.multiselectPerGroup&&r!=this.itemsData.get(d.id).group||d instanceof v||i.push(d.id)}}}else{var u=i.indexOf(e.id);-1==u?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},o._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},o.prototype.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},o.prototype.groupFromTarget=function(t){for(var e=t.center?t.center.y:t.clientY,i=0;ia&&ea)return n}else if(0===i&&e0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,s=6e4,r=1e3,a=1;1e3*e>t&&(this.scale="year",this.step=1e3),500*e>t&&(this.scale="year",this.step=500),100*e>t&&(this.scale="year",this.step=100),50*e>t&&(this.scale="year",this.step=50),10*e>t&&(this.scale="year",this.step=10),5*e>t&&(this.scale="year",this.step=5),e>t&&(this.scale="year",this.step=1),3*i>t&&(this.scale="month",this.step=3),i>t&&(this.scale="month",this.step=1),5*o>t&&(this.scale="day",this.step=5),2*o>t&&(this.scale="day",this.step=2),o>t&&(this.scale="day",this.step=1),o/2>t&&(this.scale="weekday",this.step=1),4*n>t&&(this.scale="hour",this.step=4),n>t&&(this.scale="hour",this.step=1),15*s>t&&(this.scale="minute",this.step=15),10*s>t&&(this.scale="minute",this.step=10),5*s>t&&(this.scale="minute",this.step=5),s>t&&(this.scale="minute",this.step=1),15*r>t&&(this.scale="second",this.step=15),10*r>t&&(this.scale="second",this.step=10),5*r>t&&(this.scale="second",this.step=5),r>t&&(this.scale="second",this.step=1),200*a>t&&(this.scale="millisecond",this.step=200),100*a>t&&(this.scale="millisecond",this.step=100),50*a>t&&(this.scale="millisecond",this.step=50),10*a>t&&(this.scale="millisecond",this.step=10),5*a>t&&(this.scale="millisecond",this.step=5),a>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case"year":case"month":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":return 1==t.date();case"month":return 0==t.month();case"year":return!1;default:return!1}},o.prototype.getLabelMinor=function(t){void 0==t&&(t=this.current);var e=this.format.minorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getLabelMajor=function(t){void 0==t&&(t=this.current);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/h%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(s().add(1,"day"),"day")?" vis-tomorrow":t.isSame(s().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}function n(t){return t.isSame(new Date,"year")?" vis-current-year":""}var s=this.moment,r=this.moment(this.current),a=r.locale?r.locale("en"):r.lang("en"),h=this.step;switch(this.scale){case"millisecond":return t(a.milliseconds()).trim();case"second":return t(a.seconds()).trim();case"minute":return t(a.minutes()).trim();case"hour":var d=a.hours();return 4==this.step&&(d=d+"-h"+(d+4)),"vis-h"+d+e(a)+t(a.hours());case"weekday":return"vis-"+a.format("dddd").toLowerCase()+e(a)+i(a)+t(a.date());case"day":var l=a.date(),c=a.format("MMMM").toLowerCase();return"vis-day"+l+" vis-"+c+o(a)+t(l-1);case"month":return"vis-"+a.format("MMMM").toLowerCase()+o(a)+t(a.month());case"year":var u=a.year();return"vis-year"+u+n(a)+t(u);default:return""}},t.exports=o},function(t,e,i){function o(t,e,i){this.groupId=t,this.subgroups={},this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var o=this;this.itemSet.body.emitter.on("checkRangedItems",function(){o.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(1),s=i(34);i(35);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.innerHTML="?",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e;if(e=this.itemSet.options&&this.itemSet.options.groupTemplate?this.itemSet.options.groupTemplate(t):t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else void 0!==e&&null!==e?this.dom.inner.innerHTML=e:this.dom.inner.innerHTML=this.groupId||"";this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?n.removeClassName(this.dom.inner,"vis-hidden"):n.addClassName(this.dom.inner,"vis-hidden");var i=t&&t.className||null;i!=this.className&&(this.className&&(n.removeClassName(this.dom.label,this.className),n.removeClassName(this.dom.foreground,this.className),n.removeClassName(this.dom.background,this.className),n.removeClassName(this.dom.axis,this.className)),n.addClassName(this.dom.label,i),n.addClassName(this.dom.foreground,i),n.addClassName(this.dom.background,i),n.addClassName(this.dom.axis,i),this.className=i),this.style&&(n.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(n.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype.redraw=function(t,e,i){var o=!1,r=this.dom.marker.clientHeight;if(r!=this.lastMarkerHeight&&(this.lastMarkerHeight=r,n.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()}),i=!0),this._calculateSubGroupHeights(),"function"==typeof this.itemSet.options.order){if(i){var a=this,h=!1;n.forEach(this.items,function(t){t.displayed||(t.redraw(),a.visibleItems.push(t)),t.repositionX(h)});var d=this.orderedItems.byStart.slice().sort(function(t,e){return a.itemSet.options.order(t.data,e.data)});s.stack(d,e,!0)}this.visibleItems=this._updateVisibleItems(this.orderedItems,this.visibleItems,t)}else this.visibleItems=this._updateVisibleItems(this.orderedItems,this.visibleItems,t),this.itemSet.options.stack?s.stack(this.visibleItems,e,i):s.nostack(this.visibleItems,e,this.subgroups);var l=this._calculateHeight(e),c=this.dom.foreground;this.top=c.offsetTop,this.left=c.offsetLeft,this.width=c.offsetWidth,o=n.updateProperty(this,"height",l)||o,o=n.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||o,o=n.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||o,this.dom.background.style.height=l+"px",this.dom.foreground.style.height=l+"px",this.dom.label.style.height=l+"px";for(var u=0,p=this.visibleItems.length;p>u;u++){var f=this.visibleItems[u];f.repositionY(e)}return o},o.prototype._calculateSubGroupHeights=function(){if(Object.keys(this.subgroups).length>0){var t=this;this.resetSubgroups(),n.forEach(this.visibleItems,function(e){void 0!==e.data.subgroup&&(t.subgroups[e.data.subgroup].height=Math.max(t.subgroups[e.data.subgroup].height,e.height),t.subgroups[e.data.subgroup].visible=!0)})}},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,s=i[0].top+i[0].height;if(n.forEach(i,function(t){o=Math.min(o,t.top),s=Math.max(s,t.top+t.height)}),o>t.axis){var r=o-t.axis;s-=r,n.forEach(i,function(t){t.top-=r})}e=s+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.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)},o.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 o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1};if(e.length>0)for(s=0;sl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,s=0;sl})}for(s=0;s=0&&(s=e[r],!n(s));r--)void 0===o[s.id]&&(o[s.id]=!0,i.push(s));for(r=t+1;rn;n++)t[n].top=null;for(n=0,s=t.length;s>n;n++){var r=t[n];if(r.stack&&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&&l.stack&&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,i){var o,n,s;for(o=0,n=t.length;n>o;o++)if(void 0!==t[o].data.subgroup){s=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-o.vertical+ie.top}},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=(i(22),i(36));o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-range",o.prototype.isVisible=function(t){return this.data.startt.start},o.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.frame=document.createElement("div"),t.frame.className="vis-item-overflow",t.box.appendChild(t.frame),t.content=document.createElement("div"),t.content.className="vis-item-content",t.frame.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 item: 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),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.options.editable.updateTime||this.options.editable.updateGroup||this.editable===!0)&&this.editable!==!1,o=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(i?" vis-editable":" vis-readonly");t.box.className=this.baseClassName+o,this.overflow="hidden"!==window.getComputedStyle(t.frame).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end);void 0!==t&&t!==!0||(-o>n&&(n=-o),s>2*o&&(s=2*o));var r=Math.max(s-n,1);switch(this.overflow?(this.left=n,this.width=r+this.props.content.width,i=this.props.content.width):(this.left=n,this.width=r,i=Math.min(s-n,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(r-i,0)+"px";break;case"center":this.dom.content.style.left=Math.max((r-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:0>n?-n:0,this.dom.content.style.left=e+"px"}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;"top"==t?e.style.top=this.top+"px":e.style.top=this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,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)},o.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,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=o},function(t,e,i){function o(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,this.editable=null,this.data&&this.data.hasOwnProperty("editable")&&"boolean"==typeof this.data.editable&&(this.editable=t.editable)}var n=i(22),s=i(1);o.prototype.stack=!0,o.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.setData=function(t){var e=void 0!=t.group&&this.data.group!=t.group;e&&this.parent.itemSet._moveToGroup(this,t.group),t.hasOwnProperty("editable")&&"boolean"==typeof t.editable&&(this.editable=t.editable),this.data=t,this.dirty=!0,this.displayed&&this.redraw()},o.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},o.prototype.isVisible=function(t){return!1},o.prototype.show=function(){return!1},o.prototype.hide=function(){return!1},o.prototype.redraw=function(){},o.prototype.repositionX=function(){},o.prototype.repositionY=function(){},o.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.remove||this.data.editable===!0)&&this.data.editable!==!1;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");o.className="vis-delete",o.title="Delete this item",new n(o).on("tap",function(t){t.stopPropagation(),i.parent.removeFromDataSet(i)}),t.appendChild(o),this.dom.deleteButton=o}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},o.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;var o=this._contentToString(this.content)!==this._contentToString(e);if(o){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},o.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("vis-title")},o.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;in;n++){var r=this.visibleItems[n];r.repositionY(e)}return o},o.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=o},function(t,e,i){function o(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);n.call(this,t,e,i)}var n=i(36);i(1);o.prototype=new n(null,null,null),o.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},o.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.frame=document.createElement("div"),t.frame.className="vis-item-overflow",t.box.appendChild(t.frame),t.content=document.createElement("div"),t.content.className="vis-item-content",t.frame.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e="top"===this.options.orientation.item;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var o=this.data.subgroup,n=this.parent.subgroups,r=n[o].index;if(1==e){i=this.parent.subgroups[o].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in n)n.hasOwnProperty(h)&&1==n[h].visible&&n[h].indexr&&(a+=l)}i=this.parent.subgroups[o].height+t.item.vertical,this.dom.box.style.top=this.parent.height-d+a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof s?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=o},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:a.FORMAT,moment:d,timeAxis:null},this.options=s.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},s=i(1),r=i(28),a=i(32),h=i(29),d=i(2);o.prototype=new r,o.prototype.setOptions=function(t){t&&(s.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment"],this.options,t),s.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===n(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof d.locale?d.locale(t.locale):d.lang(t.locale)))},o.prototype._create=function(){this.dom.foreground=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.foreground.className="vis-time-axis vis-foreground",this.dom.background.className="vis-time-axis vis-background"},o.prototype.destroy=function(){this.dom.foreground.parentNode&&this.dom.foreground.parentNode.removeChild(this.dom.foreground),this.dom.background.parentNode&&this.dom.background.parentNode.removeChild(this.dom.background),this.body=null},o.prototype.redraw=function(){var t=this.props,e=this.dom.foreground,i=this.dom.background,o="top"==this.options.orientation.axis?this.body.dom.top:this.body.dom.bottom,n=e.parentNode!==o;this._calculateCharSize();var s=this.options.showMinorLabels&&"none"!==this.options.orientation.axis,r=this.options.showMajorLabels&&"none"!==this.options.orientation.axis;t.minorLabelHeight=s?t.minorCharHeight:0,t.majorLabelHeight=r?t.majorCharHeight:0,t.height=t.minorLabelHeight+t.majorLabelHeight,t.width=e.offsetWidth,t.minorLineHeight=this.body.domProps.root.height-t.majorLabelHeight-("top"==this.options.orientation.axis?this.body.domProps.bottom.height:this.body.domProps.top.height),t.minorLineWidth=1,t.majorLineHeight=t.minorLineHeight+t.majorLabelHeight,t.majorLineWidth=1;var a=e.nextSibling,h=i.nextSibling;return e.parentNode&&e.parentNode.removeChild(e),i.parentNode&&i.parentNode.removeChild(i),e.style.height=this.props.height+"px",this._repaintLabels(),a?o.insertBefore(e,a):o.appendChild(e),h?this.body.dom.backgroundVertical.insertBefore(i,h):this.body.dom.backgroundVertical.appendChild(i),this._isResized()||n},o.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=s.convert(this.body.range.start,"Number"),i=s.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-h.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var r=new a(new Date(e),new Date(i),n,this.body.hiddenDates);r.setMoment(this.options.moment),this.options.format&&r.setFormat(this.options.format),this.options.timeAxis&&r.setScale(this.options.timeAxis),this.step=r;var d=this.dom;d.redundant.lines=d.lines,d.redundant.majorTexts=d.majorTexts,d.redundant.minorTexts=d.minorTexts,d.lines=[],d.majorTexts=[],d.minorTexts=[];var c,u,p,f,m,v,g,y,b,_,w=0,x=void 0,k=0,O=1e3;for(r.start(),u=r.getCurrent(),f=this.body.util.toScreen(u);r.hasNext()&&O>k;){k++,m=r.isMajor(),_=r.getClassName(),b=r.getLabelMinor(),c=u,p=f,r.next(),u=r.getCurrent(),v=r.isMajor(),f=this.body.util.toScreen(u),g=w,w=f-p;var M=w>=.4*g;if(this.options.showMinorLabels&&M){var D=this._repaintMinorText(p,b,t,_);D.style.width=w+"px"}m&&this.options.showMajorLabels?(p>0&&(void 0==x&&(x=p),D=this._repaintMajorText(p,r.getLabelMajor(),t,_)),y=this._repaintMajorLine(p,w,t,_)):M?y=this._repaintMinorLine(p,w,t,_):y&&(y.style.width=parseInt(y.style.width)+w+"px")}if(k!==O||l||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to "+O+" lines."),l=!0),this.options.showMajorLabels){var S=this.body.util.toTime(0),C=r.getLabelMajor(S),T=C.length*(this.props.majorCharWidth||10)+10;(void 0==x||x>T)&&this._repaintMajorText(0,C,t,_)}s.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},o.prototype._repaintMinorText=function(t,e,i,o){var n=this.dom.redundant.minorTexts.shift();if(!n){var s=document.createTextNode("");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.minorTexts.push(n),n.childNodes[0].nodeValue=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",n.style.left=t+"px",n.className="vis-text vis-minor "+o,n},o.prototype._repaintMajorText=function(t,e,i,o){var n=this.dom.redundant.majorTexts.shift();if(!n){var s=document.createTextNode(e);n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.majorTexts.push(n),n.childNodes[0].nodeValue=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",n.style.left=t+"px",n},o.prototype._repaintMinorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return"top"==i?n.style.top=s.majorLabelHeight+"px":n.style.top=this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",n.style.left=t-s.minorLineWidth/2+"px",n.style.width=e+"px",n.className="vis-grid vis-vertical vis-minor "+o,n},o.prototype._repaintMajorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return"top"==i?n.style.top="0":n.style.top=this.body.domProps.top.height+"px",n.style.left=t-s.majorLineWidth/2+"px",n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n.className="vis-grid vis-vertical vis-major "+o,n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-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="vis-text vis-major vis-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};var l=!1;t.exports=o},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this,i=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];i.forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){n(i.target,t)||e.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function n(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var s=i(43),r=i(12),a=i(22),h=i(1);r(o.prototype),o.current=null,o.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},o.prototype.activate=function(){o.current&&o.current.deactivate(),o.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},o.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},o.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=o},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,s="function"==typeof o?o.apply(e,n):o,!(void 0!==s&&(t.exports=s))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;122>=e;e++)r[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)r[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r["delete"]={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;no&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="array",r="date",a="object",h="dom",d="moment",l="any",c={configure:{enabled:{"boolean":o},filter:{"boolean":o,"function":"function"},container:{dom:h},__type__:{object:a,"boolean":o,"function":"function"}},align:{string:i},autoResize:{"boolean":o},throttleRedraw:{number:n},clickToUse:{"boolean":o},dataAttributes:{string:i,array:s},editable:{add:{"boolean":o,undefined:"undefined"},remove:{"boolean":o,undefined:"undefined"},updateGroup:{"boolean":o,undefined:"undefined"},updateTime:{"boolean":o,undefined:"undefined"},__type__:{"boolean":o,object:a}},end:{number:n,date:r,string:i,moment:d},format:{minorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:a}},majorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:a}},__type__:{object:a}},moment:{"function":"function"},groupOrder:{string:i,"function":"function"},groupEditable:{add:{"boolean":o,undefined:"undefined"},remove:{"boolean":o,undefined:"undefined"},order:{"boolean":o,undefined:"undefined"},__type__:{"boolean":o,object:a}},groupOrderSwap:{"function":"function"},height:{string:i,number:n},hiddenDates:{start:{date:r,number:n,string:i,moment:d},end:{date:r,number:n,string:i,moment:d},repeat:{string:i},__type__:{object:a,array:s}},itemsAlwaysDraggable:{"boolean":o},locale:{string:i},locales:{__any__:{any:l},__type__:{object:a}},margin:{axis:{number:n},item:{horizontal:{number:n,undefined:"undefined"},vertical:{number:n,undefined:"undefined"},__type__:{object:a,number:n}},__type__:{object:a,number:n}},max:{date:r,number:n,string:i,moment:d},maxHeight:{number:n,string:i},maxMinorChars:{number:n},min:{date:r,number:n,string:i,moment:d},minHeight:{number:n,string:i},moveable:{"boolean":o},multiselect:{"boolean":o},multiselectPerGroup:{"boolean":o},onAdd:{"function":"function"},onUpdate:{"function":"function"},onMove:{"function":"function"},onMoving:{"function":"function"},onRemove:{"function":"function"},onAddGroup:{"function":"function"},onMoveGroup:{"function":"function"},onRemoveGroup:{"function":"function"},order:{"function":"function"},orientation:{axis:{string:i,undefined:"undefined"},item:{string:i,undefined:"undefined"},__type__:{string:i,object:a}},selectable:{"boolean":o},showCurrentTime:{"boolean":o},showMajorLabels:{"boolean":o},showMinorLabels:{"boolean":o},stack:{"boolean":o},snap:{"function":"function","null":"null"},start:{date:r,number:n,string:i,moment:d},template:{"function":"function"},groupTemplate:{"function":"function"},timeAxis:{scale:{string:i,undefined:"undefined"},step:{number:n,undefined:"undefined"},__type__:{object:a}},type:{string:i},width:{string:i,number:n},zoomable:{"boolean":o},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:n},zoomMin:{number:n},__type__:{object:a}},u={global:{align:["center","left","right"],autoResize:!0,throttleRedraw:[10,0,1e3,10],clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,start:"",type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=c,e.configureOptions=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e,i,o){if(!(Array.isArray(i)||i instanceof c||i instanceof u)&&i instanceof Object){var n=o;o=i,i=n}var s=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:d,width:null,height:null,maxHeight:null,minHeight:null},this.options=l.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)},hiddenDates:[],util:{toScreen:s._toScreen.bind(s),toGlobalScreen:s._toGlobalScreen.bind(s),toTime:s._toTime.bind(s),toGlobalTime:s._toGlobalTime.bind(s)}},this.range=new p(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new m(this.body),this.components.push(this.timeAxis),this.currentTime=new v(this.body),this.components.push(this.currentTime),this.linegraph=new y(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){s.emit("click",s.getEventProperties(t))}),this.on("doubletap",function(t){s.emit("doubleClick",s.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){s.emit("contextmenu",s.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var s=i(20),r=o(s),a=i(26),h=o(a),d=(i(12),i(22),i(2)),l=i(1),c=i(8),u=i(10),p=i(27),f=i(30),m=i(41),v=i(46),g=i(44),y=i(49),b=i(26).printStyle,_=i(57).allOptions,w=i(57).configureOptions;n.prototype=new f, +n.prototype.setOptions=function(t){var e=h["default"].validate(t,_);e===!0&&console.log("%cErrors have been found in the supplied options object.",b),f.prototype.setOptions.call(this,t)},n.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof c||t instanceof u?t:new c(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},n.prototype.setGroups=function(t){var e;e=t?t instanceof c||t instanceof u?t:new c(t):null,this.groupsData=e,this.linegraph.setGroups(e)},n.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+"'"},n.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},n.prototype.getDataRange=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 o=0;os?s:t,e=null==e?s:s>e?s:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},n.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-l.getAbsoluteLeft(this.dom.centerContainer),n=i-l.getAbsoluteTop(this.dom.centerContainer),s=this._toTime(o),r=g.customTimeFromTarget(t),a=l.getTarget(t),h=null;l.hasParent(a,this.timeAxis.dom.foreground)?h="axis":this.timeAxis2&&l.hasParent(a,this.timeAxis2.dom.foreground)?h="axis":l.hasParent(a,this.linegraph.yAxisLeft.dom.frame)?h="data-axis":l.hasParent(a,this.linegraph.yAxisRight.dom.frame)?h="data-axis":l.hasParent(a,this.linegraph.legendLeft.dom.frame)?h="legend":l.hasParent(a,this.linegraph.legendRight.dom.frame)?h="legend":null!=r?h="custom-time":l.hasParent(a,this.currentTime.bar)?h="current-time":l.hasParent(a,this.dom.center)&&(h="background");var d=[],c=this.linegraph.yAxisLeft,u=this.linegraph.yAxisRight;return c.hidden||d.push(c.screenToValue(n)),u.hidden||d.push(u.screenToValue(n)),{event:t,what:h,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:s,value:d}},n.prototype._createConfigurator=function(){return new r["default"](this,this.dom.container,w)},t.exports=n},function(t,e,i){function o(t,e){this.id=s.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=s.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){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=s.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},s=i(1),r=i(7),a=i(8),h=i(10),d=i(28),l=i(50),c=i(52),u=i(56),p=i(53),f=i(55),m=i(54),v="__ungrouped__";o.prototype=new d,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-line-graph",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 l(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new l(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new u(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new u(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))i?-1:1});for(var o=new Array(t.length),n=0;n0){var h={};for(this._getRelevantData(a,h,n,s),this._applySampling(a,h),e=0;e0)switch(t.options.style){case"line":l.hasOwnProperty(a[e])||(l[a[e]]=f.calcPath(h[a[e]],t)),f.draw(l[a[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||m.draw(h[a[e]],t,this.framework);break;case"bar":}}}return r.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,0==o?t[a].y=t[a].orginalY+r.y:t[a].y=t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,r,a,h;if(t.length>0)for(r=0;rt?-1:1},c=Math.max(0,s.binarySearchValue(d,i,"x","before",l)),u=Math.min(d.length,s.binarySearchValue(d,o,"x","after",l)+1);0>=u&&(u=d.length);var p=new Array(u-c);for(a=c;u>a;a++)h=n.itemsData[a],p[a-c]=h;e[t[r]]=p}else e[t[r]]=n.itemsData}},o.prototype._applySampling=function(t,e){var i;if(t.length>0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;r>l;l+=s){var c=Math.round(l/s);d[c]=n[l]}e[t[o]]=d.splice(0,Math.round(r/s))}}},o.prototype._getYRanges=function(t,e,i){var o,n,s,r,a=[],h=[];if(t.length>0){for(s=0;s0&&(n=this.groups[t[s]],r.stack===!0&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(n.getItems()):h=h.concat(n.getItems()):i[t[s]]=n.getYRange(o,t[s]));p.getStackedYRange(a,i,t,"__barStackLeft","left"),p.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var c=0;ci?i:a,d=o>d?o:d):(r=!0,h=h>i?i:h,l=o>l?o:l));1==s&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}n=this._toggleAxisVisiblity(s,this.yAxisLeft)||n,n=this._toggleAxisVisiblity(r,this.yAxisRight)||n,1==r&&1==s?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!s,this.yAxisRight.masterAxis=this.yAxisLeft,0==this.yAxisRight.master?(1==r?this.yAxisLeft.lineOffset=this.yAxisRight.width:this.yAxisLeft.lineOffset=0,n=this.yAxisLeft.redraw()||n,n=this.yAxisRight.redraw()||n):n=this.yAxisRight.redraw()||n;for(var p=["__barStackLeft","__barStackRight","__lineStackLeft","__lineStackRight"],c=0;ct?-1:1});for(var a=0;a=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),t.master===!0&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var d=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(d=this.props.titleCharHeight);var l=this.options.icons===!0?Math.max(this.options.iconWidth,d)+this.options.labelOffsetX+15:d+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-l&&this.options.visible===!0?(this.width=this.maxLabelSize+l,this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+l),this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var r=s.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=o,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*n+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize.5*(h.magnitudefactor*h.minorSteps[h.minorStepIdx])?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}i.prototype.setCharHeight=function(t){this.majorCharHeight=t},i.prototype.setHeight=function(t){this.containerHeight=t},i.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;0>i&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(n===!0)break}},i.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])===0},i.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},i.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},i.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},i.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},i.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&o-i>c?(s(),d=!1):d=!0}}},i.prototype.convertValue=function(t){return this.containerHeight-(t-this._start)*this.scale},i.prototype.screenToValue=function(t){return(this.containerHeight-t)/this.scale+this._start},t.exports=i},function(t,e,i){function o(t,e,i,o){this.id=e;var n=["sampling","style","sort","yAxisOrientation","barChart","drawPoints","shaded","interpolation","zIndex","excludeFromStacking","excludeFromLegend"];this.options=s.selectiveBridgeObject(n,i),this.usingDefaultStyle=void 0===t.className,this.groupsUsingDefaultStyles=o, +this.zeroPosition=0,this.update(t),1==this.usingDefaultStyle&&(this.groupsUsingDefaultStyles[0]+=1),this.itemsData=[],this.visible=void 0===t.visible?!0:t.visible}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},s=i(1),r=(i(7),i(53)),a=i(55),h=i(54);o.prototype.setItems=function(t){null!=t?(this.itemsData=t,1==this.options.sort&&s.insertSort(this.itemsData,function(t,e){return t.x>e.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];s.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),s.mergeOptions(this.options,t,"interpolation"),s.mergeOptions(this.options,t,"drawPoints"),s.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==n(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible?!0:t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){var s=document.createElementNS("http://www.w3.org/2000/svg","svg");i={svg:s,svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":a.drawIcon(this,o,n,t,e,i);break;case"points":case"point":h.drawIcon(this,o,n,t,e,i);break;case"bar":r.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=i>t?i:t,n=0,"left"===e.options.barChart.align?n-=.5*t:"right"===e.options.barChart.align&&(n+=.5*t)):(o=e.options.barChart.width,n=0,"left"===e.options.barChart.align?n-=.5*e.options.barChart.width:"right"===e.options.barChart.align&&(n+=.5*e.options.barChart.width)),{width:o,offset:n}},o.getStackedYRange=function(t,e,i,n,s){if(t.length>0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){var i=[];return i=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var c={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,c,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o=e;if(i)for(var n=t.length-2;n>0;n--)o+=t[n][0]+","+t[n][1]+" ";else for(var n=1;nl;l++)e=0==l?t[0]:t[l-1],i=t[l],o=t[l+1],n=d>l+2?t[l+2]:o,s={screen_x:(-e.screen_x+6*i.screen_x+o.screen_x)*h,screen_y:(-e.screen_y+6*i.screen_y+o.screen_y)*h},r={screen_x:(i.screen_x+6*o.screen_x-n.screen_x)*h,screen_y:(i.screen_y+6*o.screen_y-n.screen_y)*h},a.push([s.screen_x,s.screen_y]),a.push([r.screen_x,r.screen_y]),a.push([o.screen_x,o.screen_y]);return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);var o,n,s,r,a,h,d,l,c,u,p,f,m,v,g,y,b,_,w,x=[];x.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var k=t.length,O=0;k-1>O;O++)o=0==O?t[0]:t[O-1],n=t[O],s=t[O+1],r=k>O+2?t[O+2]:s,d=Math.sqrt(Math.pow(o.screen_x-n.screen_x,2)+Math.pow(o.screen_y-n.screen_y,2)),l=Math.sqrt(Math.pow(n.screen_x-s.screen_x,2)+Math.pow(n.screen_y-s.screen_y,2)),c=Math.sqrt(Math.pow(s.screen_x-r.screen_x,2)+Math.pow(s.screen_y-r.screen_y,2)),v=Math.pow(c,i),y=Math.pow(c,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),w=Math.pow(d,i),_=Math.pow(d,2*i),u=2*_+3*w*g+b,p=2*y+3*v*g+b,f=3*w*(w+g),f>0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+u*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+u*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;it?-1:1});for(var i=0;i")}this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=Object.keys(this.groups);t.sort(function(t,e){return e>t?-1:1}),s.resetElements(this.svgElements);var e=window.getComputedStyle(this.dom.frame).paddingTop,i=Number(e.replace("px","")),o=i,n=this.options.iconSize,r=.75*this.options.iconSize,a=i+.5*r+3;this.svg.style.width=n+5+i+"px";for(var h=0;h0){var i=this.groupIndex%this.groupsArray.length;this.groupIndex++,e={},e.color=this.groups[this.groupsArray[i]],this.groups[t]=e}else{var o=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,e={},e.color=this.defaultGroups[o],this.groups[t]=e}return e}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e["default"]=r},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;it.left&&this.shape.topt.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],n=["color","font","fixed","shadow"];if(A.selectiveNotDeepExtend(n,t,e,i),A.mergeOptions(t,e,"shadow",i,o),void 0!==e.color&&null!==e.color){var s=A.parseColor(e.color);A.fillIfDefined(t.color,s)}else i===!0&&null===e.color&&(t.color=A.bridgeObject(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),void 0!==e.font&&null!==e.font?a["default"].parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=A.bridgeObject(o.font)),void 0!==e.scaling&&A.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)}}]),t}();e["default"]=B},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},r=function(){function t(t,e){for(var i=0;i=this.nodeOptions.scaling.label.maxVisible&&(r=Number(this.nodeOptions.scaling.label.maxVisible)/this.body.view.scale);var h=this.size.yLine,d=this._getColor(a),l=n(d,2),c=l[0],u=l[1],p=this._setAlignment(t,i,h,s),f=n(p,2);i=f[0],h=f[1],t.font=(e&&this.nodeOptions.labelHighlightBold?"bold ":"")+r+"px "+this.fontOptions.face,t.fillStyle=c,this.isEdgeLabel||"left"!==this.fontOptions.align?t.textAlign="center":(t.textAlign=this.fontOptions.align,i-=.5*this.size.width),this.fontOptions.strokeWidth>0&&(t.lineWidth=this.fontOptions.strokeWidth,t.strokeStyle=u,t.lineJoin="round");for(var m=0;m0&&t.strokeText(this.lines[m],i,h),t.fillText(this.lines[m],i,h),h+=r}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&this.pointToSelf===!1){e=0,i=0;var n=2;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=2*n):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=2*n):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t){var e=this.fontOptions.color||"#000000",i=this.fontOptions.strokeColor||"#ffffff";if(t<=this.nodeOptions.scaling.label.drawThreshold){var o=Math.max(0,Math.min(1,1-(this.nodeOptions.scaling.label.drawThreshold-t)));e=a.overrideOpacity(e,o),i=a.overrideOpacity(i,o)}return[e,i]}},{key:"getTextSize",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i={width:this._processLabel(t,e),height:this.fontOptions.size*this.lineCount,lineCount:this.lineCount};return i}},{key:"calculateLabelSize",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?0:arguments[2],o=arguments.length<=3||void 0===arguments[3]?0:arguments[3],n=arguments.length<=4||void 0===arguments[4]?"middle":arguments[4];this.labelDirty===!0&&(this.size.width=this._processLabel(t,e)),this.size.height=this.fontOptions.size*this.lineCount,this.size.left=i-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===n&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4),this.labelDirty=!1}},{key:"_processLabel",value:function(t,e){var i=0,o=[""],n=0;if(void 0!==this.nodeOptions.label){o=String(this.nodeOptions.label).split("\n"),n=o.length,t.font=(e&&this.nodeOptions.labelHighlightBold?"bold ":"")+this.fontOptions.size+"px "+this.fontOptions.face,i=t.measureText(o[0]).width;for(var s=1;n>s;s++){var r=t.measureText(o[s]).width;i=r>i?r:i}}return this.lines=o,this.lineCount=n,i}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2];if("string"==typeof e.font){var o=e.font.split(" ");t.size=o[0].replace("px",""),t.face=o[1],t.color=o[2]}else"object"===s(e.font)&&a.fillIfDefined(t,e.font,i);t.size=Number(t.size)}}]),t}();e["default"]=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height;var n=this.options.shapeProperties.borderRadius;this.boundingBox.left=this.left-n,this.boundingBox.top=this.top-n,this.boundingBox.bottom=this.top+this.height+n,this.boundingBox.right=this.left+this.width+n}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(d["default"]);e["default"]=l},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ithis.imageObj.height?(o=this.imageObj.width/this.imageObj.height,e=2*this.options.size*o||this.imageObj.width,i=2*this.options.size||this.imageObj.height):(o=this.imageObj.width&&this.imageObj.height?this.imageObj.height/this.imageObj.width:1,e=2*this.options.size,i=2*this.options.size*o):(e=this.imageObj.width,i=this.imageObj.height),this.width=e,this.height=i,this.radius=.5*this.width}}},{key:"_drawRawCircle",value:function(t,e,i,o,n,s){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.circle(e,i,s),this.enableShadow(t),t.fill(),this.disableShadow(t),t.save(),h>0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore()}},{key:"_drawImageAtPosition",value:function(t){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t);var e=this.imageObj.width/this.width/this.body.view.scale;if(e>2&&this.options.shapeProperties.interpolation===!0){var i=this.imageObj.width,o=this.imageObj.height,n=document.createElement("canvas");n.width=i,n.height=i;var s=n.getContext("2d");e*=.5,i*=.5,o*=.5,s.drawImage(this.imageObj,0,0,i,o);for(var r=0,a=1;e>2&&4>a;)s.drawImage(n,r,0,i,o,r+i,0,i/2,o/2),r+=i,e*=.5,i*=.5,o*=.5,a+=1;t.drawImage(n,r,0,i,o,this.left,this.top,this.width,this.height)}else t.drawImage(this.imageObj,this.left,this.top,this.width,this.height);this.disableShadow(t)}}},{key:"_drawImageLabel",value:function(t,e,i,o){var n,s=0;if(void 0!==this.height){s=.5*this.height;var r=this.labelModule.getTextSize(t);r.lineCount>=1&&(s+=r.height/2)}n=i+s,this.options.label&&(this.labelOffset=s),this.labelModule.draw(t,e,n,o,"hanging")}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),void 0!==this.options.label){var l=n+.5*this.height+3;this.labelModule.draw(t,o,l,s,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+3))}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),this.updateBoundingBox(e,i,t,o),this.labelModule.draw(t,e,i,o)}},{key:"updateBoundingBox",value:function(t,e,i,o){this.resize(i,o),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0){var i=5;this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+i)}}},{key:"_icon",value:function(t,e,i,o){var n=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+n+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t),t.fillText(this.options.icon.code,e,i),this.disableShadow(t)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i0&&(this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t)),t.restore(),t.closePath()}this._drawImageAtPosition(t),this._drawImageLabel(t,e,i,o||n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;ii.shape.height?(r=i.x+.5*i.shape.width,a=i.y-h):(r=i.x+h,a=i.y-.5*i.shape.height),s=this._pointOnCircle(r,a,h,.125),this.labelModule.draw(t,s.x,s.y,n)}}}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=10,i=this.from.x,o=this.from.y,n=this.to.x,s=this.to.y,r=t.left,a=t.top,h=this.edgeType.getDistanceToEdge(i,o,n,s,r,a);return e>h}return!1}},{key:"_rotateForLabelAlignment",value:function(t){var e=this.from.y-this.to.y,i=this.from.x-this.to.x,o=Math.atan2(e,i);(-1>o&&0>i||o>0&&0>i)&&(o+=Math.PI),t.rotate(o)}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],n=["arrowStrikethrough","id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width"];if(g.selectiveDeepExtend(n,t,e,i),g.mergeOptions(t,e,"smooth",i,o),g.mergeOptions(t,e,"shadow",i,o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=Object.create(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),g.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)):i===!0&&null===e.scaling&&(t.scaling=Object.create(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();-1!=r.indexOf("to")&&(t.arrows.to.enabled=!0),-1!=r.indexOf("middle")&&(t.arrows.middle.enabled=!0),-1!=r.indexOf("from")&&(t.arrows.from.enabled=!0)}else{if("object"!==s(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+JSON.stringify(e.arrows));g.mergeOptions(t.arrows,e.arrows,"to",i,o.arrows),g.mergeOptions(t.arrows,e.arrows,"middle",i,o.arrows),g.mergeOptions(t.arrows,e.arrows,"from",i,o.arrows)}else i===!0&&null===e.arrows&&(t.arrows=Object.create(o.arrows));if(void 0!==e.color&&null!==e.color)if(t.color=g.deepExtend({},t.color,!0),g.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var a=!1;void 0!==e.color.color&&(t.color.color=e.color.color,a=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,a=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,a=!0),void 0!==e.color.inherit&&(t.color.inherit=e.color.inherit),void 0!==e.color.opacity&&(t.color.opacity=Math.min(1,Math.max(0,e.color.opacity))),void 0===e.color.inherit&&a===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=g.bridgeObject(o.color));void 0!==e.font&&null!==e.font?h["default"].parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=g.bridgeObject(o.font))}}]),t}();e["default"]=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=function(){function t(t,e){for(var i=0;iMath.abs(e)||this.options.smooth.forceDirection===!0||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length<=6||void 0===arguments[6]?this._getViaCoordinates():arguments[6],h=a(r,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,s,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?this._getViaCoordinates():arguments[1],i=a(e,2),o=i[0],n=i[1],s=t,r=[];r[0]=Math.pow(1-s,3),r[1]=3*s*Math.pow(1-s,2),r[2]=3*Math.pow(s,2)*(1-s),r[3]=Math.pow(s,3);var h=r[0]*this.fromPoint.x+r[1]*o.x+r[2]*n.x+r[3]*this.toPoint.x,d=r[0]*this.fromPoint.y+r[1]*o.y+r[2]*n.y+r[3]*this.toPoint.y;return{x:h,y:d}}}]),e}(l["default"]);e["default"]=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;il;l++)c=.1*l,v[0]=Math.pow(1-c,3),v[1]=3*c*Math.pow(1-c,2),v[2]=3*Math.pow(c,2)*(1-c),v[3]=Math.pow(c,3),u=v[0]*t+v[1]*r.x+v[2]*a.x+v[3]*i,p=v[0]*e+v[1]*r.y+v[2]*a.y+v[3]*o,l>0&&(d=this._getDistanceToLine(f,m,u,p,n,s),h=h>d?d:h),f=u,m=p;return h}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i=l&&h>d;){var m=.5*(l+c);if(i=this.getPoint(m,a),o=Math.atan2(p.y-i.y,p.x-i.x),n=p.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-p.x,2)+Math.pow(i.y-p.y,2)),r=n-s,Math.abs(r)r?f===!1?l=m:c=m:f===!1?c=m:l=m,d++}return i.t=m,i}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r){var a=1e9,h=void 0,d=void 0,l=void 0,c=void 0,u=void 0,p=t,f=e;for(d=1;10>d;d++)l=.1*d,c=Math.pow(1-l,2)*t+2*l*(1-l)*r.x+Math.pow(l,2)*i,u=Math.pow(1-l,2)*e+2*l*(1-l)*r.y+Math.pow(l,2)*o,d>0&&(h=this._getDistanceToLine(p,f,c,u,n,s),a=a>h?h:a),p=c,f=u;return a}}]),e}(d["default"]);e["default"]=l},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var i=0;io.shape.height?(e=o.x+.5*o.shape.width,i=o.y-n):(e=o.x+n,i=o.y-.5*o.shape.height),[e,i,n]}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){for(var o=i.x,n=i.y,s=i.low,r=i.high,a=i.direction,h=10,d=0,l=this.options.selfReferenceSize,c=void 0,u=void 0,p=void 0,f=void 0,m=void 0,v=.05,g=.5*(s+r);r>=s&&h>d&&(g=.5*(s+r),c=this._pointOnCircle(o,n,l,g),u=Math.atan2(t.y-c.y,t.x-c.x),p=t.distanceToBorder(e,u),f=Math.sqrt(Math.pow(c.x-t.x,2)+Math.pow(c.y-t.y,2)),m=p-f,!(Math.abs(m)0?a>0?s=g:r=g:a>0?r=g:s=g,d++;return c.t=g,c}},{key:"getLineWidth",value:function(t,e){return t===!0?Math.max(this.selectionWidth,.3/this.body.view.scale):e===!0?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(t,e,i){var o=this.options.color;if(o.inherit!==!1){if("both"===o.inherit&&this.from.id!==this.to.id){var n=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,a=void 0;return s=this.from.options.color.highlight.border,a=this.to.options.color.highlight.border,this.from.selected===!1&&this.to.selected===!1?(s=r.overrideOpacity(this.from.options.color.border,this.options.color.opacity),a=r.overrideOpacity(this.to.options.color.border,this.options.color.opacity)):this.from.selected===!0&&this.to.selected===!1?a=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(s=this.from.options.color.border),n.addColorStop(0,s),n.addColorStop(1,a),n}this.colorDirty===!0&&("to"===o.inherit?(this.color.highlight=this.to.options.color.highlight.border,this.color.hover=this.to.options.color.hover.border,this.color.color=r.overrideOpacity(this.to.options.color.border,o.opacity)):(this.color.highlight=this.from.options.color.highlight.border,this.color.hover=this.from.options.color.hover.border,this.color.color=r.overrideOpacity(this.from.options.color.border,o.opacity)))}else this.colorDirty===!0&&(this.color.highlight=o.highlight,this.color.hover=o.hover,this.color.color=r.overrideOpacity(o.color,o.opacity));return this.colorDirty=!1,e===!0?this.color.highlight:i===!0?this.color.hover:this.color.color}},{key:"_circle",value:function(t,e,i,o){this.enableShadow(t),t.beginPath(),t.arc(e,i,o,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t)}},{key:"getDistanceToEdge",value:function(t,e,i,o,s,r,a){var h=0;if(this.from!=this.to)h=this._getDistanceToEdge(t,e,i,o,s,r,a);else{var d=this._getCircleData(),l=n(d,3),c=l[0],u=l[1],p=l[2],f=c-s,m=u-r;h=Math.abs(Math.sqrt(f*f+m*m)-p)}return this.labelModule.size.lefts&&this.labelModule.size.topr?0:h}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,h=r*r+a*a,d=((n-t)*r+(s-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,u=l-n,p=c-s;return Math.sqrt(u*u+p*p)}},{key:"getArrowData",value:function(t,e,i,o,s){var r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,c=void 0,u=this.getLineWidth(o,s);if("from"===e?(h=this.from,d=this.to,l=.1,c=this.options.arrows.from.scaleFactor):"to"===e?(h=this.to,d=this.from,l=-.1,c=this.options.arrows.to.scaleFactor):(h=this.to,d=this.from,c=this.options.arrows.middle.scaleFactor),h!=d)if("middle"!==e)if(this.options.smooth.enabled===!0){a=this.findBorderPosition(h,t,{via:i});var p=this.getPoint(Math.max(0,Math.min(1,a.t+l)),i);r=Math.atan2(a.y-p.y,a.x-p.x)}else r=Math.atan2(h.y-d.y,h.x-d.x),a=this.findBorderPosition(h,t);else r=Math.atan2(h.y-d.y,h.x-d.x),a=this.getPoint(.5,i);else{var f=this._getCircleData(t),m=n(f,3),v=m[0],g=m[1],y=m[2];"from"===e?(a=this.findBorderPosition(this.from,t,{x:v,y:g,low:.25,high:.6,direction:-1}),r=-2*a.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(a=this.findBorderPosition(this.from,t,{x:v,y:g,low:.6,high:1,direction:1}),r=-2*a.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(a=this._pointOnCircle(v,g,y,.175),r=3.9269908169872414)}var b=15*c+3*u,_=a.x-.9*b*Math.cos(r),w=a.y-.9*b*Math.sin(r),x={x:_,y:w};return{point:a,core:x,angle:r,length:b}}},{key:"drawArrowHead",value:function(t,e,i,o){t.strokeStyle=this.getColor(t,e,i),t.fillStyle=t.strokeStyle,t.lineWidth=this.getLineWidth(e,i),t.arrow(o.point.x,o.point.y,o.angle,o.length),this.enableShadow(t),t.fill(),this.disableShadow(t)}},{key:"enableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor=this.options.shadow.color,t.shadowBlur=this.options.shadow.size,t.shadowOffsetX=this.options.shadow.x,t.shadowOffsetY=this.options.shadow.y)}},{key:"disableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e["default"]=a},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var i=0;i=this.to.y?this.from.x<=this.to.x?(t=this.from.x+i*s,e=this.from.y-i*s):this.from.x>this.to.x&&(t=this.from.x-i*s,e=this.from.y-i*s):this.from.ythis.to.x&&(t=this.from.x-i*s,e=this.from.y+i*s)),"discrete"===o&&(t=i*s>n?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.x<=this.to.x?(t=this.from.x+i*n,e=this.from.y-i*n):this.from.x>this.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"===o&&(e=i*n>s?this.from.y:e));else if("straightCross"===o)Math.abs(this.from.x-this.to.x)<=Math.abs(this.from.y-this.to.y)?(t=this.from.x,e=this.from.yMath.abs(this.from.y-this.to.y)&&(t=this.from.x=this.to.y?this.from.x<=this.to.x?(t=this.from.x+i*s,e=this.from.y-i*s,t=this.to.xthis.to.x&&(t=this.from.x-i*s,e=this.from.y-i*s,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*s,e=this.from.y+i*s,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.x<=this.to.x?(t=this.from.x+i*n,e=this.from.y-i*n,e=this.to.y>e?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,e=this.to.y1||this.startedStabilization===!0)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilized===!1){if(this.adaptiveTimestep===!0&&this.adaptiveTimestepEnabled===!0){var t=1.2;this.adaptiveCounter%this.adaptiveInterval===0?(this.timestep=2*this.timestep,this.calculateForces(),this.moveNodes(),this.revert(),this.timestep=.5*this.timestep,this.calculateForces(),this.moveNodes(),this.calculateForces(),this.moveNodes(),this._evaluateStepQuality()===!0?this.timestep=t*this.timestep:this.timestep/ts))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=this.options.maxVelocity?this.options.maxVelocity:1e9,i=0,o=0,n=5,s=0;se?s[t].x>0?e:-e:s[t].x,i.x+=s[t].x*o}else n[t].x=0,s[t].x=0;if(i.options.fixed.y===!1){var h=this.modelOptions.damping*s[t].y,d=(n[t].y-h)/i.options.mass;s[t].y+=d*o,s[t].y=Math.abs(s[t].y)>e?s[t].y>0?e:-e:s[t].y,i.y+=s[t].y*o}else n[t].y=0,s[t].y=0;var l=Math.sqrt(Math.pow(s[t].x,2)+Math.pow(s[t].y,2));return l}},{key:"calculateForces",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve()}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&t[e].x&&t[e].y&&(this.freezeCache[e]={x:t[e].options.fixed.x,y:t[e].options.fixed.y},t[e].options.fixed.x=!0,t[e].options.fixed.y=!0)}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]?this.options.stabilization.iterations:arguments[0];return"number"!=typeof e&&(console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",this.options.stabilization.iterations),e=this.options.stabilization.iterations),0===this.physicsBody.physicsNodeIndices.length?void(this.ready=!0):(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,void setTimeout(function(){return t._stabilizationBatch()},0))}},{key:"_stabilizationBatch",value:function(){this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0);for(var t=0;this.stabilized===!1&&t0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;o>s;s++)t=e[i[s]],t.options.mass>0&&(this._getForceContribution(n.root.children.NW,t),this._getForceContribution(n.root.children.NE,t),this._getForceContribution(n.root.children.SW,t),this._getForceContribution(n.root.children.SE,t))}}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=void 0,o=void 0,n=void 0;i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,n=Math.sqrt(i*i+o*o),n*t.calcSize>this.thetaInversed?this._calculateForces(n,i,o,e,t):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)):t.children.data.id!=e.id&&this._calculateForces(n,i,o,e,t)}}},{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1,e=t),this.overlapAvoidanceFactor<1&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=this.options.gravitationalConstant*n.mass*o.options.mass/Math.pow(t,3),r=e*s,a=i*s;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i=void 0,o=e.length,n=t[e[0]].x,s=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y,h=1;o>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(n>d&&(n=d),d>r&&(r=d),s>l&&(s=l),l>a&&(a=l))}var c=Math.abs(r-n)-Math.abs(a-s);c>0?(s-=.5*c,a+=.5*c):(n+=.5*c,r-=.5*c);var u=1e-5,p=Math.max(u,Math.abs(r-n)),f=.5*p,m=.5*(n+r),v=.5*(s+a),g={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:m-f,maxX:m+f,minY:v-f,maxY:v+f},size:p,calcSize:1/p,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(g.root);for(var y=0;o>y;y++)i=t[e[y]],i.options.mass>0&&this._placeInTree(g.root,i);return g}},{key:"_updateBranchMass",value:function(t,e){var i=t.mass+e.options.mass,o=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=o,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=o,t.mass=i;var n=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")}},{key:"_placeInRegion",value: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+=this.seededRandom(),e.y+=this.seededRandom()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}}},{key:"_splitBranch",value: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)}},{key:"_insertRegion",value:function(t,e){var i=void 0,o=void 0,n=void 0,s=void 0,r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY,s=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY,s=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY+r,s=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY+r,s=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:n,maxY:s},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value: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()}}]),t}();e["default"]=n},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ii&&(s=.5*c>i?1:u*i+p,s/=i,o=t*s,n=e*s,l[r.id].x-=o,l[r.id].y-=n,l[a.id].x+=o,l[a.id].y+=n)}}}]),t}();e["default"]=n},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;ii?-Math.pow(f*i,2)+Math.pow(f*p,2):0,0===i?i=.01:s/=i,o=t*s,n=e*s,u[r.id].x-=o,u[r.id].y-=n,u[a.id].x+=o,u[a.id].y+=n}}}]),t}();e["default"]=n},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i0){var s=n.edges.length+1,r=this.options.centralGravity*s*n.options.mass;o[n.id].x=e*r,o[n.id].y=i*r}}}]),e}(d["default"]);e["default"]=l},function(t,e,i){ +function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},r=function(){function t(t,e){for(var i=0;i=t&&i.push(n.id)}for(var r=0;r0&&Object.keys(p).length>0&&m===!0&&o.push({nodes:u,edges:p})}}}for(var b=0;bo?r.x:o,n=r.ys?r.y:s;return{x:.5*(i+o),y:.5*(n+s)}}},{key:"openCluster",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!0:arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");if(void 0===this.body.nodes[t])throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(void 0===this.body.nodes[t].containedNodes)return void console.log("The node:"+t+" is not a cluster.");var o=this.body.nodes[t],n=o.containedNodes,s=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var r={},a={x:o.x,y:o.y};for(var d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];r[d]={x:l.x,y:l.y}}var u=e.releaseFunction(a,r);for(var p in n)if(n.hasOwnProperty(p)){var f=this.body.nodes[p];void 0!==u[p]&&(f.x=void 0===u[p].x?o.x:u[p].x,f.y=void 0===u[p].y?o.y:u[p].y)}}else for(var m in n)if(n.hasOwnProperty(m)){var v=this.body.nodes[m];v=n[m],v.options.fixed.x===!1&&(v.x=o.x),v.options.fixed.y===!1&&(v.y=o.y)}for(var g in n)if(n.hasOwnProperty(g)){var y=this.body.nodes[g];y.vx=o.vx,y.vy=o.vy,y.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[g]}for(var b=[],_=0;_o;)e.push(this.body.nodes[t].id),t=this.clusteredNodes[t].clusterId,o++;return e.push(this.body.nodes[t].id),e.reverse(),e}},{key:"_getConnectedId",value:function(t,e){return t.toId!=e?t.toId:t.fromId!=e?t.fromId:t.fromId}},{key:"_getHubSize",value:function(){for(var t=0,e=0,i=0,o=0,n=0;no&&(o=s.edges.length),t+=s.edges.length,e+=Math.pow(s.edges.length,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r),h=Math.floor(t+2*a);return h>o&&(h=o),h}}]),t}();e["default"]=u},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),n0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,t.requiresTimeout===!0?clearTimeout(t.renderTimer):cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];s.selectiveDeepExtend(e,this.options,t)}}},{key:"_startRendering",value:function(){this.renderingActive===!0&&void 0===this.renderTimer&&(this.requiresTimeout===!0?this.renderTimer=window.setTimeout(this._renderStep.bind(this),this.simulationInterval):this.renderTimer=window.requestAnimationFrame(this._renderStep.bind(this)))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this.requiresTimeout===!0?window.setTimeout(function(){t._redraw(!1)},0):window.requestAnimationFrame(function(){t._redraw(!1)}))}},{key:"_redraw",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e=this.canvas.frame.canvas.getContext("2d");0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),t===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&this._drawEdges(e),(this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),t===!0&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){var t=this.canvas.frame.canvas.getContext("2d");void 0===this.pixelRatio&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0),t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=20,a=this.canvas.DOMtoCanvas({x:-r,y:-r}),h=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+r,y:this.canvas.frame.canvas.clientHeight+r}),d={top:a.y,left:a.x,bottom:h.y,right:h.x},l=0;l0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==t.indexOf("%")||-1!==t.indexOf("px"))return t;if(-1===t.indexOf("%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new s(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:s.DIRECTION_ALL}),r.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new s(this.frame),r.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length<=0||void 0===arguments[0]?this.options.width:arguments[0],e=arguments.length<=1||void 0===arguments[1]?this.options.height:arguments[1];t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.frame.canvas.getContext("2d"),r=this.pixelRatio;return this.pixelRatio=(window.devicePixelRatio||1)/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e?(this._getCameraState(r),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=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,i=!0):(this.frame.canvas.width==Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&this.frame.canvas.height==Math.round(this.frame.canvas.clientHeight*this.pixelRatio)||this._getCameraState(r),this.frame.canvas.width!=Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&(this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),i=!0),this.frame.canvas.height!=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)&&(this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),i=!0)),i===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e["default"]=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=a["default"].getRange(this.body.nodes,t.nodes);var h=this.body.nodeIndices.length;o=12.662/(h+7.4147)+.0964822;var d=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);o*=d}else{this.body.emitter.emit("_resizeNodes"),i=a["default"].getRange(this.body.nodes,t.nodes);var l=1.1*Math.abs(i.maxX-i.minX),c=1.1*Math.abs(i.maxY-i.minY),u=this.canvas.frame.canvas.clientWidth/l,p=this.canvas.frame.canvas.clientHeight/c;o=p>=u?u:p}o>1?o=1:0===o&&(o=1);var f=a["default"].findCenter(i),m={position:f,scale:o,animation:t.animation};this.moveTo(m)}},{key:"focus",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){return void 0===t?void(t={}):(void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),t.animation===!1&&(t.animation={duration:0}),t.animation===!0&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),void this.animateView(t))}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),t.locked===!0&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={ +x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=t===!0?1:this.easingTime;var e=h.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();e["default"]=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){for(var i=0;i50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e),this.selectionHandler._generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler._generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=this.selectionHandler._getSelectedEdgeCount(),n=this.selectionHandler._getSelectedNodeCount(),s=this.selectionHandler.getSelection(),r=void 0;r=i===!0?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var a=this.selectionHandler._getSelectedEdgeCount(),h=this.selectionHandler._getSelectedNodeCount(),d=this.selectionHandler.getSelection(),l=this._determineIfDifferent(s,d),c=l.nodesChanged,u=l.edgesChanged,p=!1;h-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,p=!0):c===!0&&h>0?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),p=!0,r=!0):0>h-n&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0),a-o>0&&p===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a>0&&u===!0?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):0>a-o&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0),r===!0&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineIfDifferent",value:function(t,e){for(var i=!1,o=!1,n=0;nt&&(t=1e-5),t>10&&(t=10);var o=void 0;void 0!==this.drag&&this.drag.dragging===!0&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));var n=this.body.view.translation,s=t/i,r=(1-s)*e.x+n.x*s,a=(1-s)*e.y+n.y*s;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},void 0!=o){var h=this.canvas.canvasToDOM(o);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),t>i?this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale}):this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale})}}},{key:"onMouseWheel",value:function(t){if(this.options.zoomView===!0){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),0!==e){var i=this.body.view.scale,o=e/10;0>e&&(o/=1-o),i*=1+o;var n=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(i,n)}t.preventDefault()}}},{key:"onMouseMove",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),o=!1;if(void 0!==this.popup&&(this.popup.hidden===!1&&this._checkHidePopup(i),this.popup.hidden===!1&&(o=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.bindToWindow===!1&&this.options.keyboard.enabled===!0&&this.canvas.frame.focus(),o===!1&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=setTimeout(function(){return e._checkShowPopup(i)},this.options.tooltipDelay))),this.options.hover===!0){var n=this.selectionHandler.getNodeAt(i);void 0===n&&(n=this.selectionHandler.getEdgeAt(i)),this.selectionHandler.hoverObject(n)}}},{key:"_checkShowPopup",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),o={left:e,top:i,right:e,bottom:i},n=void 0===this.popupObj?void 0:this.popupObj.id,s=!1,r="node";if(void 0===this.popupObj){for(var a=this.body.nodeIndices,h=this.body.nodes,l=void 0,c=[],u=0;u0&&(this.popupObj=h[c[c.length-1]],s=!0)}if(void 0===this.popupObj&&s===!1){for(var p=this.body.edgeIndices,f=this.body.edges,m=void 0,v=[],g=0;g0&&(this.popupObj=f[v[v.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new d["default"](this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e),i===!0)){var o=this.selectionHandler.getNodeAt(t);i=o.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));i===!1&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}();e["default"]=c},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)this.boundFunctions.hasOwnProperty(t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){this.body.view.scale*=1+this.options.keyboard.speed.zoom,this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale})}},{key:"_zoomOut",value:function(){this.body.view.scale/=1+this.options.keyboard.speed.zoom,this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale})}},{key:"configureKeyboardBindings",value:function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=a({container:window,preventDefault:!0}):this.keycharm=a({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(this.keycharm.bind("up",function(){t.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){t.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){t.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){t.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){t.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){t.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){t.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){t.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){t.unbindFromRedraw("_zoomOut")},"keyup")))}}]),t}();e["default"]=h},function(t,e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;io&&(s=o-e-this.padding),sn&&(r=n-i-this.padding),r0?e===!0?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,o=0;o0?e===!0?this.body.edges[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_addToSelection",value:function(t){t instanceof a["default"]?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t}},{key:"_addToHover",value:function(t){t instanceof a["default"]?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:"_removeFromSelection",value:function(t){t instanceof a["default"]?(delete this.selectionObj.nodes[t.id],this._unselectConnectedEdges(t)):delete this.selectionObj.edges[t.id]}},{key:"unselectAll",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].unselect();for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&this.selectionObj.edges[e].unselect();this.selectionObj={nodes:{},edges:{}}}},{key:"_getSelectedNodeCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedNode",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t]}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t]}},{key:"_getSelectedEdgeCount",value:function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedObjectCount",value: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}},{key:"_selectionIsEmpty",value: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}},{key:"_clusterInSelection",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e0&&(this.options.hierarchical.levelSeparation*=-1):this.options.hierarchical.levelSeparation<0&&(this.options.hierarchical.levelSeparation*=-1),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(i===!0)return this.body.emitter.emit("refresh"),l.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={enabled:void 0===this.optionsBackup.physics.enabled?!0:this.optionsBackup.physics.enabled, +solver:"hierarchicalRepulsion"},this.optionsBackup.physics.enabled=void 0===this.optionsBackup.physics.enabled?!0:this.optionsBackup.physics.enabled,this.optionsBackup.physics.solver=this.optionsBackup.physics.solver||"barnesHut"):"object"===r(t.physics)?(this.optionsBackup.physics.enabled=void 0===t.physics.enabled?!0:t.physics.enabled,this.optionsBackup.physics.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):t.physics!==!1&&(this.optionsBackup.physics.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var e="horizontal";"RL"!==this.options.hierarchical.direction&&"LR"!==this.options.hierarchical.direction||(e="vertical"),void 0===t.edges?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1}):void 0===t.edges.smooth?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1):"boolean"==typeof t.edges.smooth?(this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:e}):(void 0!==t.edges.smooth.type&&"dynamic"!==t.edges.smooth.type&&(e=t.edges.smooth.type),this.optionsBackup.edges={smooth:void 0===t.edges.smooth.enabled?!0:t.edges.smooth.enabled,type:void 0===t.edges.smooth.type?"dynamic":t.edges.smooth.type,roundness:void 0===t.edges.smooth.roundness?.5:t.edges.smooth.roundness,forceDirection:void 0===t.edges.smooth.forceDirection?!1:t.edges.smooth.forceDirection},t.edges.smooth={enabled:void 0===t.edges.smooth.enabled?!0:t.edges.smooth.enabled,type:e,roundness:void 0===t.edges.smooth.roundness?.5:t.edges.smooth.roundness,forceDirection:void 0===t.edges.smooth.forceDirection?!1:t.edges.smooth.forceDirection}),this.body.emitter.emit("_forceDisableDynamicCurves",e)}return t}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"positionInitially",value:function(t){if(this.options.hierarchical.enabled!==!0){this.randomSeed=this.initialRandomSeed;for(var e=0;es){for(var r=this.body.nodeIndices.length;this.body.nodeIndices.length>s;){n+=1;var a=this.body.nodeIndices.length;n%3===0?this.body.modules.clustering.clusterBridges():this.body.modules.clustering.clusterOutliers();var h=this.body.nodeIndices.length;if(a==h&&n%3!==0||n>o)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*r)})}this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._shiftToCenter();for(var d=70,l=0;l0){var t=void 0,e=void 0,i=!1,o=!0,n=!1;this.hierarchicalLevels={},this.lastNodeOnLevel={},this.hierarchicalChildrenReference={},this.hierarchicalParentReference={},this.hierarchicalTrees={},this.treeIndex=-1,this.distributionOrdering={},this.distributionIndex={},this.distributionOrderingPresence={};for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0===t.options.x&&void 0===t.options.y&&(o=!1),void 0!==t.options.level?(i=!0,this.hierarchicalLevels[e]=t.options.level):n=!0);if(n===!0&&i===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");n===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():"directed"===this.options.hierarchical.sortMethod?this._determineLevelsDirected():"custom"===this.options.hierarchical.sortMethod&&this._determineLevelsCustomCallback());for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&void 0===this.hierarchicalLevels[s]&&(this.hierarchicalLevels[s]=0);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(){for(var e=a(),i=0;i0)for(var n=0;n=l&&(r=Math.min(c,r),a=Math.max(c,a))}return[r,a,o,n]},l=function w(e){var i=t.hierarchicalLevels[e];if(t.hierarchicalChildrenReference[e]){var o=t.hierarchicalChildrenReference[e];if(o.length>0)for(var n=0;n1)for(var a=0;at.options.hierarchical.nodeSpacing){var u={};u[i.id]=!0;var p={};p[o.id]=!0,h(i,u),h(o,p);var f=c(i,o),m=d(u,f),v=s(m,4),g=(v[0],v[1]),y=(v[2],v[3],d(p,f)),b=s(y,4),_=b[0],w=(b[1],b[2]),x=(b[3],Math.abs(g-_));if(x>t.options.hierarchical.nodeSpacing){var k=g-_+t.options.hierarchical.nodeSpacing;k<-w+t.options.hierarchical.nodeSpacing&&(k=-w+t.options.hierarchical.nodeSpacing),0>k&&(t._shiftBlock(o.id,k),e=!0,n===!0&&t._centerParent(o))}}},m=function(o,n){for(var r=n.id,a=n.edges,l=t.hierarchicalLevels[n.id],c=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,u={},p=[],f=0;fr;r++){var a=g(o,i),h=y(o,i),d=40,l=Math.max(-d,Math.min(d,Math.round(a/h)));if(o-=l,void 0!==s[o])break;s[o]=r}return o},_=function(o){var r=t._getPositionForHierarchy(n);if(void 0===i[n.id]){var a={};a[n.id]=!0,h(n,a),i[n.id]=a}var l=d(i[n.id]),c=s(l,4),u=(c[0],c[1],c[2]),p=c[3],f=o-r,m=0;f>0?m=Math.min(f,p-t.options.hierarchical.nodeSpacing):0>f&&(m=-Math.min(-f,u-t.options.hierarchical.nodeSpacing)),0!=m&&(t._shiftBlock(n.id,m),e=!0)},w=function(i){var o=t._getPositionForHierarchy(n),r=t._getSpaceAroundNode(n),a=s(r,2),h=a[0],d=a[1],l=i-o,c=o;l>0?c=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):0>l&&(c=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),c!==o&&(t._setPositionForHierarchy(n,c,void 0,!0),e=!0)},x=b(o,p);_(x),x=b(o,a),w(x)},v=function(i){var o=Object.keys(t.distributionOrdering);o=o.reverse();for(var n=0;i>n;n++){e=!1;for(var s=0;sn&&(e=!1,p(f,o,!0),e===!0);n++);},y=function(){for(var e in t.body.nodes)t.body.nodes.hasOwnProperty(e)&&t._centerParent(t.body.nodes[e])},b=function(){var e=Object.keys(t.distributionOrdering);e=e.reverse();for(var i=0;i0)for(var d=0;dg&&Math.abs(g)0&&Math.abs(g)0&&(r=this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing),this._setPositionForHierarchy(s,r,e),this._validataPositionAndContinue(s,e,r),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){if(void 0!==this.hierarchicalChildrenReference[t]){for(var i=[],o=0;oe&&void 0===this.positionedNodes[s.id]))return;var a=void 0;a=0===n?this._getPositionForHierarchy(this.body.nodes[t]):this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing,this._setPositionForHierarchy(s,a,r),this._validataPositionAndContinue(s,r,a)}for(var h=1e9,d=-1e9,l=0;l0&&(e=this._getHubSize(),0!==e);)for(var o in this.body.nodes)if(this.body.nodes.hasOwnProperty(o)){var n=this.body.nodes[o];n.edges.length===e&&this._crawlNetwork(i,o)}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=1e5,i=function(t,e,i){},o=function(o,n,s){var r=t.hierarchicalLevels[o.id];void 0===r&&(t.hierarchicalLevels[o.id]=e);var a=i(d["default"].cloneOptions(o,"node"),d["default"].cloneOptions(n,"node"),d["default"].cloneOptions(s,"edge"));t.hierarchicalLevels[n.id]=t.hierarchicalLevels[o.id]+a};this._crawlNetwork(o),this._setMinLevelToZero()}},{key:"_determineLevelsDirected",value:function(){var t=this,e=1e4,i=function(i,o,n){var s=t.hierarchicalLevels[i.id];void 0===s&&(t.hierarchicalLevels[i.id]=e),n.toId==o.id?t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]+1:t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]-1};this._crawlNetwork(i),this._setMinLevelToZero()}},{key:"_setMinLevelToZero",value:function(){var t=1e9;for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&void 0!==this.hierarchicalLevels[e]&&(t=Math.min(this.hierarchicalLevels[e],t));for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&void 0!==this.hierarchicalLevels[i]&&(this.hierarchicalLevels[i]-=t)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){if(t.hierarchicalLevels[i.id]>t.hierarchicalLevels[e.id]){var o=e.id,n=i.id;void 0===t.hierarchicalChildrenReference[o]&&(t.hierarchicalChildrenReference[o]=[]),t.hierarchicalChildrenReference[o].push(n),void 0===t.hierarchicalParentReference[n]&&(t.hierarchicalParentReference[n]=[]),t.hierarchicalParentReference[n].push(o)}};this._crawlNetwork(e)}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]?function(){}:arguments[0],i=arguments[1],o={},n=0,s=function d(i,n){if(void 0===o[i.id]){void 0===t.hierarchicalTrees[i.id]&&(t.hierarchicalTrees[i.id]=n,t.treeIndex=Math.max(n,t.treeIndex)),o[i.id]=!0;for(var s=void 0,r=0;r1&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.sort(function(t,e){return t.x-e.x}):t.sort(function(t,e){return t.y-e.y}))}}]),t}();e["default"]=c},function(t,e,i){function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i0&&this.options.deleteNode!==!1?(n===!0&&this._createSeperator(4),this._createDeleteButton(o)):0===t&&this.options.deleteEdge!==!1&&(n===!0&&this._createSeperator(4),this._createDeleteButton(o))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var t=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var e=this.selectionHandler._getSelectedNode();if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(e.isCluster!==!0){var i=s.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",function(){}),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){var t=this;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",this.guiEnabled===!0){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId?!function(){var e=t.body.edges[t.edgeBeingEditedId],i=t._getNewTargetNode(e.from.x,e.from.y),o=t._getNewTargetNode(e.to.x,e.to.y);t.temporaryIds.nodes.push(i.id),t.temporaryIds.nodes.push(o.id),t.body.nodes[i.id]=i,t.body.nodeIndices.push(i.id),t.body.nodes[o.id]=o,t.body.nodeIndices.push(o.id),t._temporaryBindUI("onTouch",t._controlNodeTouch.bind(t)),t._temporaryBindUI("onTap",function(){}),t._temporaryBindUI("onHold",function(){}),t._temporaryBindUI("onDragStart",t._controlNodeDragStart.bind(t)),t._temporaryBindUI("onDrag",t._controlNodeDrag.bind(t)),t._temporaryBindUI("onDragEnd",t._controlNodeDragEnd.bind(t)),t._temporaryBindUI("onMouseMove",function(){}),t._temporaryBindEvent("beforeDrawing",function(t){var n=e.edgeType.findBorderPositions(t);i.selected===!1&&(i.x=n.from.x,i.y=n.from.y),o.selected===!1&&(o.x=n.to.x,o.y=n.to.y)}),t.body.emitter.emit("_redraw")}():this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var t=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),o=void 0;if(e.length>0){for(var n=0;n0&&"function"==typeof this.options.deleteEdge&&(o=this.options.deleteEdge);if("function"==typeof o){var s={nodes:e,edges:i};if(2!==o.length)throw new Error("The function for delete does not support two arguments (data, callback)");o(s,function(e){null!==e&&void 0!==e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=s.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+s.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},s.recursiveDOMDelete(this.editModeDiv);var t=this.options.locales[this.options.locale],e=this._createButton("editMode","vis-button vis-edit vis-edit-mode",t.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(e),this._bindHammerToDiv(e,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(s.recursiveDOMDelete(this.editModeDiv),s.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var t=0;t=0;r--)if(n[r]!==this.selectedControlNode.id){s=this.body.nodes[n[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(s.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,o.to.id):this._performEditEdge(o.from.id,s.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=s.extend({},this.body.view.translation);var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(i.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var o=this._getNewTargetNode(i.x,i.y);this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id);var n=this.body.functions.createEdge({id:"connectionEdge"+s.randomUUID(),from:i.id,to:o.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[n.id]=n,this.body.edgeIndices.push(n.id),this.temporaryIds.nodes.push(o.id),this.temporaryIds.edges.push(n.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(e.x),i.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=void 0;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(n[r])){s=this.body.nodes[n[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(s.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(o,s.id)),this.body.emitter.emit("_redraw")}},{key:"_performAddNode",value:function(t){var e=this,i={id:s.randomUUID(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(t){null!==t&&void 0!==t&&"addNode"===e.inMode&&(e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,o={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(o,function(t){null!==t&&void 0!==t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,o={id:this.edgeBeingEditedId,from:t,to:e};if("function"==typeof this.options.editEdge){if(2!==this.options.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editEdge(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw")):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}();e["default"]=h},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="array",r="object",a="dom",h="any",d={configure:{enabled:{"boolean":o},filter:{"boolean":o,string:i,array:s,"function":"function"},container:{dom:a},showButton:{"boolean":o},__type__:{object:r,"boolean":o,string:i,array:s,"function":"function"}},edges:{arrows:{to:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},middle:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},from:{enabled:{"boolean":o},scaleFactor:{number:n},__type__:{object:r,"boolean":o}},__type__:{string:["from","to","middle"],object:r}},arrowStrikethrough:{"boolean":o},color:{color:{string:i},highlight:{string:i},hover:{string:i},inherit:{string:["from","to","both"],"boolean":o},opacity:{number:n},__type__:{object:r,string:i}},dashes:{"boolean":o,array:s},font:{color:{string:i},size:{number:n},face:{string:i},background:{string:i},strokeWidth:{number:n},strokeColor:{string:i},align:{string:["horizontal","top","middle","bottom"]},__type__:{object:r,string:i}},hidden:{"boolean":o},hoverWidth:{"function":"function",number:n},label:{string:i,undefined:"undefined"},labelHighlightBold:{"boolean":o},length:{number:n,undefined:"undefined"},physics:{"boolean":o},scaling:{min:{number:n},max:{number:n},label:{enabled:{"boolean":o},min:{number:n},max:{number:n},maxVisible:{number:n},drawThreshold:{number:n},__type__:{object:r,"boolean":o}},customScalingFunction:{"function":"function"},__type__:{object:r}},selectionWidth:{"function":"function",number:n},selfReferenceSize:{number:n},shadow:{enabled:{"boolean":o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:r,"boolean":o}},smooth:{enabled:{"boolean":o},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:n},forceDirection:{string:["horizontal","vertical","none"],"boolean":o},__type__:{object:r,"boolean":o}},title:{string:i,undefined:"undefined"},width:{number:n},value:{number:n,undefined:"undefined"},__type__:{object:r}},groups:{useDefaultGroups:{"boolean":o},__any__:"get from nodes, will be overwritten below",__type__:{object:r}},interaction:{dragNodes:{"boolean":o},dragView:{"boolean":o},hideEdgesOnDrag:{"boolean":o},hideNodesOnDrag:{"boolean":o},hover:{"boolean":o},keyboard:{enabled:{"boolean":o},speed:{x:{number:n},y:{number:n},zoom:{number:n},__type__:{object:r}},bindToWindow:{"boolean":o},__type__:{object:r,"boolean":o}},multiselect:{"boolean":o},navigationButtons:{"boolean":o},selectable:{"boolean":o},selectConnectedEdges:{"boolean":o},hoverConnectedEdges:{"boolean":o},tooltipDelay:{number:n},zoomView:{"boolean":o},__type__:{object:r}},layout:{randomSeed:{undefined:"undefined",number:n},improvedLayout:{"boolean":o},hierarchical:{enabled:{"boolean":o},levelSeparation:{number:n},nodeSpacing:{number:n},treeSpacing:{number:n},blockShifting:{"boolean":o},edgeMinimization:{"boolean":o},parentCentralization:{"boolean":o},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:r,"boolean":o}},__type__:{object:r}},manipulation:{enabled:{"boolean":o},initiallyActive:{"boolean":o},addNode:{"boolean":o,"function":"function"},addEdge:{"boolean":o,"function":"function"},editNode:{"function":"function"},editEdge:{"boolean":o,"function":"function"},deleteNode:{"boolean":o,"function":"function"},deleteEdge:{"boolean":o,"function":"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:r,"boolean":o}},nodes:{borderWidth:{number:n},borderWidthSelected:{number:n,undefined:"undefined"},brokenImage:{string:i,undefined:"undefined"},color:{border:{string:i},background:{string:i},highlight:{border:{string:i},background:{string:i},__type__:{object:r,string:i}},hover:{border:{string:i},background:{string:i},__type__:{object:r,string:i}},__type__:{object:r,string:i}},fixed:{x:{"boolean":o},y:{"boolean":o},__type__:{object:r,"boolean":o}},font:{color:{string:i},size:{number:n},face:{string:i},background:{string:i},strokeWidth:{number:n},strokeColor:{string:i},__type__:{object:r,string:i}},group:{string:i,number:n,undefined:"undefined"},hidden:{"boolean":o},icon:{face:{string:i},code:{string:i},size:{number:n},color:{string:i},__type__:{object:r}},id:{string:i,number:n},image:{string:i,undefined:"undefined"},label:{string:i,undefined:"undefined"},labelHighlightBold:{"boolean":o},level:{number:n,undefined:"undefined"},mass:{number:n},physics:{"boolean":o},scaling:{min:{number:n},max:{number:n},label:{enabled:{"boolean":o},min:{number:n},max:{number:n},maxVisible:{number:n},drawThreshold:{number:n},__type__:{object:r,"boolean":o}},customScalingFunction:{"function":"function"},__type__:{object:r}},shadow:{enabled:{"boolean":o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:r,"boolean":o}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon"]},shapeProperties:{borderDashes:{"boolean":o,array:s},borderRadius:{number:n},interpolation:{"boolean":o},useImageSize:{"boolean":o},useBorderWithImage:{"boolean":o},__type__:{object:r}},size:{number:n},title:{string:i,undefined:"undefined"},value:{number:n,undefined:"undefined"},x:{number:n},y:{number:n},__type__:{object:r}},physics:{enabled:{"boolean":o},barnesHut:{gravitationalConstant:{number:n},centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},damping:{number:n},avoidOverlap:{number:n},__type__:{object:r}},forceAtlas2Based:{gravitationalConstant:{number:n},centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},damping:{number:n},avoidOverlap:{number:n},__type__:{object:r}},repulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:r}},hierarchicalRepulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:r}},maxVelocity:{number:n},minVelocity:{number:n},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{"boolean":o},iterations:{number:n},updateInterval:{number:n},onlyDynamicEdges:{"boolean":o},fit:{"boolean":o},__type__:{object:r,"boolean":o}},timestep:{number:n},adaptiveTimestep:{"boolean":o},__type__:{object:r,"boolean":o}},autoResize:{"boolean":o},clickToUse:{"boolean":o},locale:{string:i},locales:{__any__:{any:h},__type__:{object:r}},height:{string:i},width:{string:i},__type__:{object:r}};d.groups.__any__=d.nodes,d.manipulation.controlNodeStyle=d.nodes;var l={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05]},middle:{enabled:!1,scaleFactor:[1,0,3,.05]},from:{enabled:!1,scaleFactor:[1,0,3,.05]}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]},global:{locale:["en","nl"]}};e.allOptions=d,e.configureOptions=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{"default":t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(o=(r=a.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(h){n=!0,s=h}finally{try{!o&&a["return"]&&a["return"]()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(){function t(t,e){for(var i=0;in&&h>a;){a+=1;var v=this._getHighestEnergyNode(i),g=s(v,4);for(c=g[0],l=g[1],u=g[2],p=g[3],f=l,m=0;f>r&&d>m;){m+=1,this._moveNode(c,u,p);var y=this._getEnergy(c),b=s(y,3);f=b[0],u=b[1],p=b[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=0,n=e[0],r=0,a=0,h=0;ho&&(o=u,n=d,r=p,a=f)}}return[n,o,r,a]}},{key:"_getEnergy",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=i[t].x,n=i[t].y,s=0,r=0,a=0;al;l++)for(var c=0;d-1>c;c++)for(var u=c+1;d>u;u++)o[e[c]][e[u]]=Math.min(o[e[c]][e[u]],o[e[c]][e[l]]+o[e[l]][e[u]]),o[e[u]][e[c]]=o[e[c]][e[u]];return o}}]),t}();e["default"]=n},function(t,e){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath(),i*=1.15,e+=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e-(r-s)),this.lineTo(t+n,e+s),this.lineTo(t-n,e+s),this.lineTo(t,e-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath(),i*=1.15,e-=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e+(r-s)),this.lineTo(t+n,e-s),this.lineTo(t-n,e-s),this.lineTo(t,e+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath(),i*=.82,e+=.1*i;for(var o=0;10>o;o++){var n=o%2===0?1.3*i:.5*i;this.lineTo(t+n*Math.sin(2*o*Math.PI/10),e-n*Math.cos(2*o*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(t,e,i){this.beginPath(),this.lineTo(t,e+i),this.lineTo(t+i,e),this.lineTo(t,e-i),this.lineTo(t-i,e),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,o,n){var s=Math.PI/180;0>i-2*n&&(n=i/2),0>o-2*n&&(n=o/2),this.beginPath(),this.moveTo(t+n,e),this.lineTo(t+i-n,e),this.arc(t+i-n,e+n,n,270*s,360*s,!1),this.lineTo(t+i,e+o-n),this.arc(t+i-n,e+o-n,n,0,90*s,!1),this.lineTo(t+n,e+o),this.arc(t+n,e+o-n,n,90*s,180*s,!1),this.lineTo(t,e+n),this.arc(t+n,e+n,n,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,o){var n=.5522848,s=i/2*n,r=o/2*n,a=t+i,h=e+o,d=t+i/2,l=e+o/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-s,e,d,e),this.bezierCurveTo(d+s,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+s,h,d,h),this.bezierCurveTo(d-s,h,t,l+r,t,l),this.closePath()},CanvasRenderingContext2D.prototype.database=function(t,e,i,o){var n=1/3,s=i,r=o*n,a=.5522848,h=s/2*a,d=r/2*a,l=t+s,c=e+r,u=t+s/2,p=e+r/2,f=e+(o-r/2),m=e+o;this.beginPath(),this.moveTo(l,p),this.bezierCurveTo(l,p+d,u+h,c,u,c),this.bezierCurveTo(u-h,c,t,p+d,t,p),this.bezierCurveTo(t,p-d,u-h,e,u,e),this.bezierCurveTo(u+h,e,l,p-d,l,p),this.lineTo(l,f),this.bezierCurveTo(l,f+d,u+h,m,u,m),this.bezierCurveTo(u-h,m,t,f+d,t,f),this.lineTo(t,p)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,o){var n=t-o*Math.cos(i),s=e-o*Math.sin(i),r=t-.9*o*Math.cos(i),a=e-.9*o*Math.sin(i),h=n+o/3*Math.cos(i+.5*Math.PI),d=s+o/3*Math.sin(i+.5*Math.PI),l=n+o/3*Math.cos(i-.5*Math.PI),c=s+o/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,o,n){this.beginPath(),this.moveTo(t,e);for(var s=n.length,r=i-t,a=o-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0,u=0,p=n[0];d>=.1;)p=n[l++%s],p>d&&(p=d),u=Math.sqrt(p*p/(1+h*h)),u=0>r?-u:u,t+=u,e+=h*u,c===!0?this.lineTo(t,e):this.moveTo(t,e),d-=p,c=!c})},function(t,e){function i(t){return P=t,p()}function o(){I=0,N=P.charAt(0)}function n(){I++,N=P.charAt(I)}function s(){return P.charAt(I+1)}function r(t){return R.test(t)}function a(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function h(t,e,i){for(var o=e.split("."),n=t;o.length;){var s=o.shift();o.length?(n[s]||(n[s]={}),n=n[s]):n[s]=i}}function d(t,e){for(var i,o,n=null,s=[t],r=t;r.parent;)s.push(r.parent),r=r.parent;if(r.nodes)for(i=0,o=r.nodes.length;o>i;i++)if(e.id===r.nodes[i].id){n=r.nodes[i];break}for(n||(n={id:e.id},t.node&&(n.attr=a(n.attr,t.node))),i=s.length-1;i>=0;i--){var h=s[i];h.nodes||(h.nodes=[]),-1===h.nodes.indexOf(n)&&h.nodes.push(n)}e.attr&&(n.attr=a(n.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,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=a({},t.edge)),s.attr=a(s.attr||{},n),s}function u(){for(L=T.NULL,z="";" "===N||" "===N||"\n"===N||"\r"===N;)n();do{var t=!1;if("#"===N){for(var e=I-1;" "===P.charAt(e)||" "===P.charAt(e);)e--;if("\n"===P.charAt(e)||""===P.charAt(e)){for(;""!=N&&"\n"!=N;)n();t=!0}}if("/"===N&&"/"===s()){for(;""!=N&&"\n"!=N;)n();t=!0}if("/"===N&&"*"===s()){for(;""!=N;){if("*"===N&&"/"===s()){n(),n();break}n()}t=!0}for(;" "===N||" "===N||"\n"===N||"\r"===N;)n()}while(t);if(""===N)return void(L=T.DELIMITER);var i=N+s();if(E[i])return L=T.DELIMITER,z=i,n(),void n();if(E[N])return L=T.DELIMITER,z=N,void n();if(r(N)||"-"===N){for(z+=N,n();r(N);)z+=N,n();return"false"===z?z=!1:"true"===z?z=!0:isNaN(Number(z))||(z=Number(z)),void(L=T.IDENTIFIER)}if('"'===N){for(n();""!=N&&('"'!=N||'"'===N&&'"'===s());)z+=N,'"'===N&&n(),n();if('"'!=N)throw w('End of string " expected');return n(),void(L=T.IDENTIFIER)}for(L=T.UNKNOWN;""!=N;)z+=N,n();throw new SyntaxError('Syntax error in part "'+x(z,30)+'"')}function p(){var t={};if(o(),u(),"strict"===z&&(t.strict=!0,u()),"graph"!==z&&"digraph"!==z||(t.type=z,u()),L===T.IDENTIFIER&&(t.id=z,u()),"{"!=z)throw w("Angle bracket { expected");if(u(),f(t),"}"!=z)throw w("Angle bracket } expected");if(u(),""!==z)throw w("End of file expected");return u(),delete t.node,delete t.edge,delete t.graph,t}function f(t){for(;""!==z&&"}"!=z;)m(t),";"===z&&u()}function m(t){var e=v(t);if(e)return void b(t,e);var i=g(t);if(!i){if(L!=T.IDENTIFIER)throw w("Identifier expected");var o=z;if(u(),"="===z){if(u(),L!=T.IDENTIFIER)throw w("Identifier expected");t[o]=z,u()}else y(t,o)}}function v(t){var e=null;if("subgraph"===z&&(e={},e.type="subgraph",u(),L===T.IDENTIFIER&&(e.id=z,u())),"{"===z){if(u(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,f(e),"}"!=z)throw w("Angle bracket } expected");u(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function g(t){return"node"===z?(u(),t.node=_(),"node"):"edge"===z?(u(),t.edge=_(),"edge"):"graph"===z?(u(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},o=_();o&&(i.attr=o),d(t,i),b(t,e)}function b(t,e){for(;"->"===z||"--"===z;){var i,o=z;u();var n=v(t);if(n)i=n;else{if(L!=T.IDENTIFIER)throw w("Identifier or subgraph expected");i=z,d(t,{id:i}),u()}var s=_(),r=c(t,e,i,o,s);l(t,r),e=i}}function _(){for(var t=null;"["===z;){for(u(),t={};""!==z&&"]"!=z;){if(L!=T.IDENTIFIER)throw w("Attribute name expected");var e=z;if(u(),"="!=z)throw w("Equal sign = expected");if(u(),L!=T.IDENTIFIER)throw w("Attribute value expected");var i=z;h(t,e,i),u(),","==z&&u()}if("]"!=z)throw w("Bracket ] expected");u()}return t}function w(t){return new SyntaxError(t+', got "'+x(z,30)+'" (char '+I+")")}function x(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function k(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function O(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},P="",I=0,N="",z="",L=T.NULL,R=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=D},function(t,e){function i(t,e){var i=[],o=[],n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==e&&(void 0!==e.fixed&&(n.nodes.fixed=e.fixed),void 0!==e.parseColor&&(n.nodes.parseColor=e.parseColor),void 0!==e.inheritColor&&(n.edges.inheritColor=e.inheritColor));for(var s=t.edges,r=t.nodes,a=0;a'#ffffff' This is the color of the stroke assuming the value for stroke is higher than 0. + + font.align + String + 'center' + This can be set to 'left' to make the label left-aligned. Otherwise, + defaults to 'center'. + group String diff --git a/download/vis.zip b/download/vis.zip index 61b18066..8851b080 100644 Binary files a/download/vis.zip and b/download/vis.zip differ diff --git a/examples/network/exampleApplications/disassemblerExample.html b/examples/network/exampleApplications/disassemblerExample.html new file mode 100644 index 00000000..0245999a --- /dev/null +++ b/examples/network/exampleApplications/disassemblerExample.html @@ -0,0 +1,67 @@ + + + + + + + +

Use VisJS to diagram the Control-Flow-Graph (CFG) of a function from +a program you wish to analyze.

+


+ + + diff --git a/examples/network/labels/labelAlignment.html b/examples/network/labels/labelAlignment.html index d302bc84..2397e219 100644 --- a/examples/network/labels/labelAlignment.html +++ b/examples/network/labels/labelAlignment.html @@ -21,7 +21,10 @@ -

Labels of edges can be aligned to edges in various ways.
Label alignment for nodes (top, bottom, left, right, inside) is planned but not in vis yet.

+

Labels of edges can be aligned to edges in various ways.

+

Text-alignment within node labels can be 'left' or 'center', other font alignments not implemented.

+

Label alignment (placement of label "box") for nodes (top, bottom, left, right, inside) is +planned but not in vis yet.

@@ -30,9 +33,10 @@ var nodes = [ {id: 1, label: 'Node 1'}, {id: 2, label: 'Node 2'}, - {id: 3, label: 'Node 3'}, + {id: 3, label: 'Node 3:\nLeft-Aligned', font: {'face': 'Monospace', align: 'left'}}, {id: 4, label: 'Node 4'}, - {id: 5, label: 'Node 5'} + {id: 5, label: 'Node 5\nLeft-Aligned box', shape: 'box', + font: {'face': 'Monospace', align: 'left'}} ]; // create an array with edges diff --git a/images/exampleScreenshots/network/exampleApplications/disassemblerExample.png b/images/exampleScreenshots/network/exampleApplications/disassemblerExample.png new file mode 100644 index 00000000..e16054f8 Binary files /dev/null and b/images/exampleScreenshots/network/exampleApplications/disassemblerExample.png differ diff --git a/index.html b/index.html index aaed9809..f714e8e4 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ - +