From 3b8d3fc37f5ca18eaf9fc29e1a7acc30309a41f2 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 28 Aug 2015 21:16:03 +0200 Subject: [PATCH] Released v4.8.0 --- dist/vis.css | 569 +- dist/vis.js | 30376 ++++++++-------- dist/vis.map | 2 +- dist/vis.min.css | 2 +- dist/vis.min.js | 43 +- docs/data/dataview.html | 2 +- docs/graph2d/index.html | 6 + docs/network/index.html | 6 +- docs/network/layout.html | 2 + docs/network/manipulation.html | 4 +- docs/network/nodes.html | 8 +- docs/network/physics.html | 4 +- docs/timeline/index.html | 84 +- download/vis.zip | Bin 2801872 -> 2826798 bytes .../exampleApplications/lesMiserables.html | 2 +- examples/timeline/groups/groupsEditable.html | 315 + index.html | 10 +- timeline_examples.html | 1 + 18 files changed, 16479 insertions(+), 14957 deletions(-) create mode 100644 examples/timeline/groups/groupsEditable.html diff --git a/dist/vis.css b/dist/vis.css index bca66454..90511f71 100644 --- a/dist/vis.css +++ b/dist/vis.css @@ -20,6 +20,289 @@ width: auto; } +div.vis-configuration { + position:relative; + display:block; + float:left; + font-size:12px; +} + +div.vis-configuration-wrapper { + display:block; + width:700px; +} + + +div.vis-configuration.vis-config-option-container{ + display:block; + width:495px; + background-color: #ffffff; + border:2px solid #f7f8fa; + border-radius:4px; + margin-top:20px; + left:10px; + padding-left:5px; +} + +div.vis-configuration.vis-config-button{ + display:block; + width:495px; + height:25px; + vertical-align: middle; + line-height:25px; + background-color: #f7f8fa; + border:2px solid #ceced0; + border-radius:4px; + margin-top:20px; + left:10px; + padding-left:5px; + cursor: pointer; + margin-bottom:30px; +} + +div.vis-configuration.vis-config-button.hover{ + background-color: #4588e6; + border:2px solid #214373; + color:#ffffff; +} + +div.vis-configuration.vis-config-item{ + display:block; + float:left; + width:495px; + height:25px; + vertical-align: middle; + line-height:25px; +} + + +div.vis-configuration.vis-config-item.vis-config-s2{ + left:10px; + background-color: #f7f8fa; + padding-left:5px; + border-radius:3px; +} +div.vis-configuration.vis-config-item.vis-config-s3{ + left:20px; + background-color: #e4e9f0; + padding-left:5px; + border-radius:3px; +} +div.vis-configuration.vis-config-item.vis-config-s4{ + left:30px; + background-color: #cfd8e6; + padding-left:5px; + border-radius:3px; +} + +div.vis-configuration.vis-config-header{ + font-size:18px; + font-weight: bold; +} + +div.vis-configuration.vis-config-label{ + width:120px; + height:25px; + line-height: 25px; +} + +div.vis-configuration.vis-config-label.vis-config-s3{ + width:110px; +} +div.vis-configuration.vis-config-label.vis-config-s4{ + width:100px; +} + +div.vis-configuration.vis-config-colorBlock{ + top:1px; + width:30px; + height:19px; + border:1px solid #444444; + border-radius:2px; + padding:0px; + margin:0px; + cursor:pointer; +} + +input.vis-configuration.vis-config-checkbox { + left:-5px; +} + + +input.vis-configuration.vis-config-rangeinput{ + position:relative; + top:-5px; + width:60px; + height:13px; + padding:1px; + margin:0; + pointer-events:none; +} + +input.vis-configuration.vis-config-range{ + /*removes default webkit styles*/ + -webkit-appearance: none; + + /*fix for FF unable to apply focus style bug */ + border: 0px solid white; + background-color:rgba(0,0,0,0); + + /*required for proper track sizing in FF*/ + width: 300px; + height:20px; +} +input.vis-configuration.vis-config-range::-webkit-slider-runnable-track { + width: 300px; + height: 5px; + background: #dedede; /* Old browsers */ + background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* IE10+ */ + background: linear-gradient(to bottom, #dedede 0%,#c8c8c8 99%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ + + border: 1px solid #999999; + box-shadow: #aaaaaa 0px 0px 3px 0px; + border-radius: 3px; +} +input.vis-configuration.vis-config-range::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #14334b; + height: 17px; + width: 17px; + border-radius: 50%; + background: #3876c2; /* Old browsers */ + background: -moz-linear-gradient(top, #3876c2 0%, #385380 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3876c2), color-stop(100%,#385380)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #3876c2 0%,#385380 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #3876c2 0%,#385380 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #3876c2 0%,#385380 100%); /* IE10+ */ + background: linear-gradient(to bottom, #3876c2 0%,#385380 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380',GradientType=0 ); /* IE6-9 */ + box-shadow: #111927 0px 0px 1px 0px; + margin-top: -7px; +} +input.vis-configuration.vis-config-range:focus { + outline: none; +} +input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track { + background: #9d9d9d; /* Old browsers */ + background: -moz-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9d9d9d), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* IE10+ */ + background: linear-gradient(to bottom, #9d9d9d 0%,#c8c8c8 99%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ +} + +input.vis-configuration.vis-config-range::-moz-range-track { + width: 300px; + height: 10px; + background: #dedede; /* Old browsers */ + background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* IE10+ */ + background: linear-gradient(to bottom, #dedede 0%,#c8c8c8 99%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ + + border: 1px solid #999999; + box-shadow: #aaaaaa 0px 0px 3px 0px; + border-radius: 3px; +} +input.vis-configuration.vis-config-range::-moz-range-thumb { + border: none; + height: 16px; + width: 16px; + + border-radius: 50%; + background: #385380; +} + +/*hide the outline behind the border*/ +input.vis-configuration.vis-config-range:-moz-focusring{ + outline: 1px solid white; + outline-offset: -1px; +} + +input.vis-configuration.vis-config-range::-ms-track { + width: 300px; + height: 5px; + + /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ + background: transparent; + + /*leave room for the larger thumb to overflow with a transparent border */ + border-color: transparent; + border-width: 6px 0; + + /*remove default tick marks*/ + color: transparent; +} +input.vis-configuration.vis-config-range::-ms-fill-lower { + background: #777; + border-radius: 10px; +} +input.vis-configuration.vis-config-range::-ms-fill-upper { + background: #ddd; + border-radius: 10px; +} +input.vis-configuration.vis-config-range::-ms-thumb { + border: none; + height: 16px; + width: 16px; + border-radius: 50%; + background: #385380; +} +input.vis-configuration.vis-config-range:focus::-ms-fill-lower { + background: #888; +} +input.vis-configuration.vis-config-range:focus::-ms-fill-upper { + background: #ccc; +} + +.vis-configuration-popup { + position: absolute; + background: rgba(57, 76, 89, 0.85); + border: 2px solid #f2faff; + line-height:30px; + height:30px; + width:150px; + text-align:center; + color: #ffffff; + font-size:14px; + border-radius:4px; + -webkit-transition: opacity 0.3s ease-in-out; + -moz-transition: opacity 0.3s ease-in-out; + transition: opacity 0.3s ease-in-out; +} +.vis-configuration-popup:after, .vis-configuration-popup:before { + left: 100%; + top: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.vis-configuration-popup:after { + border-color: rgba(136, 183, 213, 0); + border-left-color: rgba(57, 76, 89, 0.85); + border-width: 8px; + margin-top: -8px; +} +.vis-configuration-popup:before { + border-color: rgba(194, 225, 245, 0); + border-left-color: #f2faff; + border-width: 12px; + margin-top: -12px; +} .vis-timeline { position: relative; @@ -115,6 +398,10 @@ border-bottom: 1px solid #bfbfbf; } +.vis-labelset .vis-label.draggable { + cursor: pointer; +} + .vis-labelset .vis-label:last-child { border-bottom: none; } @@ -750,6 +1037,25 @@ div.network-navigation_wrapper { height: 100%; } */ +div.vis-network-tooltip { + position: absolute; + visibility: hidden; + padding: 5px; + white-space: nowrap; + + font-family: verdana; + font-size:14px; + font-color:#000000; + background-color: #f5f4ed; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + border: 1px solid #808074; + + box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2); + pointer-events: none; +} div.vis-network div.vis-navigation div.vis-button { width:34px; height:34px; @@ -811,269 +1117,6 @@ div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends { bottom:50px; right:15px; } -div.vis-network-tooltip { - position: absolute; - visibility: hidden; - padding: 5px; - white-space: nowrap; - - font-family: verdana; - font-size:14px; - font-color:#000000; - background-color: #f5f4ed; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - border: 1px solid #808074; - - box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2); - pointer-events: none; -} -div.vis-network-configuration { - position:relative; - display:block; - float:left; - font-size:12px; -} - -div.vis-network-configuration-wrapper { - display:block; - width:700px; -} - - -div.vis-network-configuration.vis-option-container{ - display:block; - width:495px; - background-color: #ffffff; - border:2px solid #f7f8fa; - border-radius:4px; - margin-top:20px; - left:10px; - padding-left:5px; -} - -div.vis-network-configuration.button{ - display:block; - width:495px; - height:25px; - vertical-align: middle; - line-height:25px; - background-color: #f7f8fa; - border:2px solid #ceced0; - border-radius:4px; - margin-top:20px; - left:10px; - padding-left:5px; - cursor: pointer; - margin-bottom:30px; -} - -div.vis-network-configuration.button.hover{ - background-color: #4588e6; - border:2px solid #214373; - color:#ffffff; -} - -div.vis-network-configuration.item{ - display:block; - float:left; - width:495px; - height:25px; - vertical-align: middle; - line-height:25px; -} - - -div.vis-network-configuration.item.s2{ - left:10px; - background-color: #f7f8fa; - padding-left:5px; - border-radius:3px; -} -div.vis-network-configuration.item.s3{ - left:20px; - background-color: #e4e9f0; - padding-left:5px; - border-radius:3px; -} -div.vis-network-configuration.item.s4{ - left:30px; - background-color: #cfd8e6; - padding-left:5px; - border-radius:3px; -} - -div.vis-network-configuration.header{ - font-size:18px; - font-weight: bold; -} - -div.vis-network-configuration.label{ - width:120px; - height:25px; - line-height: 25px; -} - -div.vis-network-configuration.label.s3{ - width:110px; -} -div.vis-network-configuration.label.s4{ - width:100px; -} - -div.vis-network-configuration.colorBlock{ - top:1px; - width:30px; - height:19px; - border:1px solid #444444; - border-radius:2px; - padding:0px; - margin:0px; - cursor:pointer; -} - -input.vis-network-configuration.checkbox { - left:-5px; -} - - -input.vis-network-configuration.rangeinput{ - position:relative; - top:-5px; - width:60px; - height:13px; - padding:1px; - margin:0; - pointer-events:none; -} - -input.vis-network-configuration.range{ - /*removes default webkit styles*/ - -webkit-appearance: none; - - /*fix for FF unable to apply focus style bug */ - border: 0px solid white; - background-color:rgba(0,0,0,0); - - /*required for proper track sizing in FF*/ - width: 300px; - height:20px; -} -input.vis-network-configuration.range::-webkit-slider-runnable-track { - width: 300px; - height: 5px; - background: #dedede; /* Old browsers */ - background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* IE10+ */ - background: linear-gradient(to bottom, #dedede 0%,#c8c8c8 99%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ - - border: 1px solid #999999; - box-shadow: #aaaaaa 0px 0px 3px 0px; - border-radius: 3px; -} -input.vis-network-configuration.range::-webkit-slider-thumb { - -webkit-appearance: none; - border: 1px solid #14334b; - height: 17px; - width: 17px; - border-radius: 50%; - background: #3876c2; /* Old browsers */ - background: -moz-linear-gradient(top, #3876c2 0%, #385380 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3876c2), color-stop(100%,#385380)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #3876c2 0%,#385380 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #3876c2 0%,#385380 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #3876c2 0%,#385380 100%); /* IE10+ */ - background: linear-gradient(to bottom, #3876c2 0%,#385380 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380',GradientType=0 ); /* IE6-9 */ - box-shadow: #111927 0px 0px 1px 0px; - margin-top: -7px; -} -input.vis-network-configuration.range:focus { - outline: none; -} -input.vis-network-configuration.range:focus::-webkit-slider-runnable-track { - background: #9d9d9d; /* Old browsers */ - background: -moz-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9d9d9d), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #9d9d9d 0%,#c8c8c8 99%); /* IE10+ */ - background: linear-gradient(to bottom, #9d9d9d 0%,#c8c8c8 99%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ -} - -input.vis-network-configuration.range::-moz-range-track { - width: 300px; - height: 10px; - background: #dedede; /* Old browsers */ - background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, #dedede 0%,#c8c8c8 99%); /* IE10+ */ - background: linear-gradient(to bottom, #dedede 0%,#c8c8c8 99%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */ - - border: 1px solid #999999; - box-shadow: #aaaaaa 0px 0px 3px 0px; - border-radius: 3px; -} -input.vis-network-configuration.range::-moz-range-thumb { - border: none; - height: 16px; - width: 16px; - - border-radius: 50%; - background: #385380; -} - -/*hide the outline behind the border*/ -input.vis-network-configuration.range:-moz-focusring{ - outline: 1px solid white; - outline-offset: -1px; -} - -input.vis-network-configuration.range::-ms-track { - width: 300px; - height: 5px; - - /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */ - background: transparent; - - /*leave room for the larger thumb to overflow with a transparent border */ - border-color: transparent; - border-width: 6px 0; - - /*remove default tick marks*/ - color: transparent; -} -input.vis-network-configuration.range::-ms-fill-lower { - background: #777; - border-radius: 10px; -} -input.vis-network-configuration.range::-ms-fill-upper { - background: #ddd; - border-radius: 10px; -} -input.vis-network-configuration.range::-ms-thumb { - border: none; - height: 16px; - width: 16px; - border-radius: 50%; - background: #385380; -} -input.vis-network-configuration.range:focus::-ms-fill-lower { - background: #888; -} -input.vis-network-configuration.range:focus::-ms-fill-upper { - background: #ccc; -} div.vis-color-picker { position:absolute; diff --git a/dist/vis.js b/dist/vis.js index 44272e7f..f6c1c643 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -4,11 +4,11 @@ * * A dynamic, browser-based visualization library. * - * @version 4.7.0 - * @date 2015-07-27 + * @version 4.8.0 + * @date 2015-08-28 * * @license - * Copyright (C) 2011-2014 Almende B.V, http://almende.com + * Copyright (C) 2011-2015 Almende B.V, http://almende.com * * Vis.js is dual licensed under both * @@ -29,7 +29,7 @@ if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) - define(factory); + define([], factory); else if(typeof exports === 'object') exports["vis"] = factory(); else @@ -84,52 +84,52 @@ return /******/ (function(modules) { // webpackBootstrap // utils 'use strict'; - exports.util = __webpack_require__(7); - exports.DOMutil = __webpack_require__(13); + exports.util = __webpack_require__(1); + exports.DOMutil = __webpack_require__(7); // data - exports.DataSet = __webpack_require__(14); - exports.DataView = __webpack_require__(16); - exports.Queue = __webpack_require__(15); + exports.DataSet = __webpack_require__(8); + exports.DataView = __webpack_require__(10); + exports.Queue = __webpack_require__(9); // Graph3d - exports.Graph3d = __webpack_require__(17); + exports.Graph3d = __webpack_require__(11); exports.graph3d = { - Camera: __webpack_require__(21), - Filter: __webpack_require__(22), - Point2d: __webpack_require__(18), - Point3d: __webpack_require__(20), - Slider: __webpack_require__(23), - StepNumber: __webpack_require__(24) + Camera: __webpack_require__(15), + Filter: __webpack_require__(16), + Point2d: __webpack_require__(14), + Point3d: __webpack_require__(13), + Slider: __webpack_require__(17), + StepNumber: __webpack_require__(18) }; // Timeline - exports.Timeline = __webpack_require__(25); + exports.Timeline = __webpack_require__(19); exports.Graph2d = __webpack_require__(49); exports.timeline = { - DateUtil: __webpack_require__(29), + DateUtil: __webpack_require__(27), DataStep: __webpack_require__(52), - Range: __webpack_require__(26), - stack: __webpack_require__(33), - TimeStep: __webpack_require__(35), + Range: __webpack_require__(24), + stack: __webpack_require__(32), + TimeStep: __webpack_require__(30), components: { items: { - Item: __webpack_require__(2), + Item: __webpack_require__(34), BackgroundItem: __webpack_require__(38), - BoxItem: __webpack_require__(37), - PointItem: __webpack_require__(1), - RangeItem: __webpack_require__(34) + BoxItem: __webpack_require__(36), + PointItem: __webpack_require__(37), + RangeItem: __webpack_require__(33) }, - Component: __webpack_require__(28), + Component: __webpack_require__(26), CurrentTime: __webpack_require__(44), CustomTime: __webpack_require__(42), DataAxis: __webpack_require__(51), GraphGroup: __webpack_require__(53), - Group: __webpack_require__(32), - BackgroundGroup: __webpack_require__(36), - ItemSet: __webpack_require__(31), + Group: __webpack_require__(31), + BackgroundGroup: __webpack_require__(35), + ItemSet: __webpack_require__(29), Legend: __webpack_require__(57), LineGraph: __webpack_require__(50), TimeAxis: __webpack_require__(39) @@ -139,9 +139,9 @@ return /******/ (function(modules) { // webpackBootstrap // Network exports.Network = __webpack_require__(59); exports.network = { - Images: __webpack_require__(114), - dotparser: __webpack_require__(112), - gephiParser: __webpack_require__(113), + Images: __webpack_require__(116), + dotparser: __webpack_require__(114), + gephiParser: __webpack_require__(115), allOptions: __webpack_require__(110) }; exports.network.convertDot = function (input) { @@ -151,5276 +151,3704 @@ return /******/ (function(modules) { // webpackBootstrap return exports.network.gephiParser.parseGephi(input, options); }; - // Deprecated since v3.0.0 - exports.Graph = function () { - throw new Error('Graph is renamed to Network. Please create a graph as new vis.Network(...)'); - }; - // bundled external libraries - exports.moment = __webpack_require__(8); - exports.hammer = __webpack_require__(3); // TODO: deprecate exports.hammer some day - exports.Hammer = __webpack_require__(3); + exports.moment = __webpack_require__(2); + exports.Hammer = __webpack_require__(20); exports.keycharm = __webpack_require__(41); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { + // 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 Item = __webpack_require__(2); + var moment = __webpack_require__(2); + var uuid = __webpack_require__(6); /** - * @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 + * Test whether given object is a number + * @param {*} object + * @return {Boolean} isNumber */ - function PointItem(data, conversion, options) { - this.props = { - dot: { - top: 0, - width: 0, - height: 0 - }, - content: { - height: 0, - marginLeft: 0 - } - }; + exports.isNumber = function (object) { + return object instanceof Number || typeof object == 'number'; + }; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); + /** + * Remove everything in the DOM object + * @param DOMobject + */ + exports.recursiveDOMDelete = function (DOMobject) { + if (DOMobject) { + while (DOMobject.hasChildNodes() === true) { + exports.recursiveDOMDelete(DOMobject.firstChild); + DOMobject.removeChild(DOMobject.firstChild); } } - - Item.call(this, data, conversion, options); - } - - PointItem.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 + * this function gives you a range between 0 and 1 based on the min and max values in the set, the total sum of all values and the current value. + * + * @param min + * @param max + * @param total + * @param value + * @returns {number} */ - 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; + exports.giveRange = function (min, max, total, value) { + if (max == min) { + return 0.5; + } else { + var scale = 1 / (max - min); + return Math.max(0, (value - min) * scale); + } }; /** - * Repaint the item + * Test whether given object is a string + * @param {*} object + * @return {Boolean} isString */ - 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; - - this.dirty = true; - } + exports.isString = function (object) { + return object instanceof String || typeof object == 'string'; + }; - // 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'); + /** + * Test whether given object is a Date, or a String containing a Date + * @param {Date | String} object + * @return {Boolean} isDate + */ + exports.isDate = function (object) { + if (object instanceof Date) { + return true; + } else if (exports.isString(object)) { + // test whether this string contains a date + var match = ASPDateRegex.exec(object); + if (match) { + return true; + } else if (!isNaN(Date.parse(object))) { + return true; } - foreground.appendChild(dom.point); - } - 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); - - 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.point.className = 'vis-item vis-point' + className; - dom.dot.className = 'vis-item vis-dot' + className; - - // 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; - - // resize contents - dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; - //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - - dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; - dom.dot.style.left = this.props.dot.width / 2 + 'px'; - - // recalculate size - this.width = dom.point.offsetWidth; - this.height = dom.point.offsetHeight; - - this.dirty = false; } - this._repaintDeleteButton(dom.point); + return false; }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Create a semi UUID + * source: http://stackoverflow.com/a/105074/1262753 + * @return {String} uuid */ - PointItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); - } + exports.randomUUID = function () { + return uuid.v4(); }; /** - * Hide the item from the DOM (when visible) + * assign all keys of an object that are not nested objects to a certain value (used for color objects). + * @param obj + * @param value */ - PointItem.prototype.hide = function () { - if (this.displayed) { - if (this.dom.point.parentNode) { - this.dom.point.parentNode.removeChild(this.dom.point); + exports.assignAllKeys = function (obj, value) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + if (typeof obj[prop] !== 'object') { + obj[prop] = value; + } } - - this.displayed = false; } }; /** - * Reposition the item horizontally - * @Override + * Fill an object with a possibly partially defined other object. Only copies values if the a object has an object requiring values. + * That means an object is not created on a property if only the b object has it. + * @param obj + * @param value */ - PointItem.prototype.repositionX = function () { - var start = this.conversion.toScreen(this.data.start); - - this.left = start - this.props.dot.width; + exports.fillIfDefined = function (a, b) { + var allowDeletion = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - // reposition point - this.dom.point.style.left = this.left + 'px'; + for (var prop in a) { + if (b[prop] !== undefined) { + 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') { + exports.fillIfDefined(a[prop], b[prop], allowDeletion); + } + } + } + } }; /** - * Reposition the item vertically - * @Override + * Extend object a with the properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Object} a + * @param {... Object} b + * @return {Object} a */ - PointItem.prototype.repositionY = function () { - var orientation = this.options.orientation.item; - var point = this.dom.point; - - if (orientation == 'top') { - point.style.top = this.top + 'px'; - } else { - point.style.top = this.parent.height - this.top - this.height + 'px'; + exports.protoExtend = function (a, b) { + for (var i = 1; i < arguments.length; i++) { + var other = arguments[i]; + for (var prop in other) { + a[prop] = other[prop]; + } } + return a; }; /** - * Return the width of the item left from its start date - * @return {number} + * Extend object a with the properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Object} a + * @param {... Object} b + * @return {Object} a */ - PointItem.prototype.getWidthLeft = function () { - return this.props.dot.width; + exports.extend = function (a, b) { + for (var i = 1; i < arguments.length; i++) { + var other = arguments[i]; + for (var prop in other) { + if (other.hasOwnProperty(prop)) { + a[prop] = other[prop]; + } + } + } + return a; }; /** - * Return the width of the item right from its start date - * @return {number} + * Extend object a with selected properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Array.} props + * @param {Object} a + * @param {Object} b + * @return {Object} a */ - PointItem.prototype.getWidthRight = function () { - return this.width - this.props.dot.width; - }; - - module.exports = PointItem; - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { + exports.selectiveExtend = function (props, a, b) { + if (!Array.isArray(props)) { + throw new Error('Array with property names expected as first argument'); + } - 'use strict'; + for (var i = 2; i < arguments.length; i++) { + var other = arguments[i]; - var Hammer = __webpack_require__(3); - var util = __webpack_require__(7); + for (var p = 0; p < props.length; p++) { + var prop = props[p]; + if (other.hasOwnProperty(prop)) { + a[prop] = other[prop]; + } + } + } + return a; + }; /** - * @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 + * Extend object a with selected properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Array.} props + * @param {Object} a + * @param {Object} b + * @return {Object} a */ - function Item(data, conversion, options) { - this.id = null; - this.parent = null; - this.data = data; - this.dom = null; - this.conversion = conversion || {}; - this.options = options || {}; - - this.selected = false; - this.displayed = false; - this.dirty = true; - - this.top = null; - this.left = null; - this.width = null; - this.height = null; + exports.selectiveDeepExtend = function (props, a, b) { + var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - this.editable = null; - if (this.data && this.data.hasOwnProperty('editable') && typeof this.data.editable === 'boolean') { - this.editable = data.editable; + // TODO: add support for Arrays to deepExtend + if (Array.isArray(b)) { + throw new TypeError('Arrays are not supported by deepExtend'); } - } - - Item.prototype.stack = true; - - /** - * Select current item - */ - Item.prototype.select = function () { - this.selected = true; - this.dirty = true; - if (this.displayed) this.redraw(); + for (var i = 2; i < arguments.length; i++) { + var other = arguments[i]; + for (var p = 0; p < props.length; p++) { + var prop = props[p]; + if (other.hasOwnProperty(prop)) { + if (b[prop] && b[prop].constructor === Object) { + if (a[prop] === undefined) { + a[prop] = {}; + } + if (a[prop].constructor === Object) { + exports.deepExtend(a[prop], b[prop], false, allowDeletion); + } else { + if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { + delete a[prop]; + } else { + a[prop] = b[prop]; + } + } + } else if (Array.isArray(b[prop])) { + throw new TypeError('Arrays are not supported by deepExtend'); + } else { + a[prop] = b[prop]; + } + } + } + } + return a; }; /** - * Unselect current item + * Extend object a with selected properties of object b or a series of objects + * Only properties with defined values are copied + * @param {Array.} props + * @param {Object} a + * @param {Object} b + * @return {Object} a */ - Item.prototype.unselect = function () { - this.selected = false; - this.dirty = true; - if (this.displayed) this.redraw(); - }; + exports.selectiveNotDeepExtend = function (props, a, b) { + var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - /** - * 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); + // TODO: add support for Arrays to deepExtend + if (Array.isArray(b)) { + throw new TypeError('Arrays are not supported by deepExtend'); } - - if (data.hasOwnProperty('editable') && typeof data.editable === 'boolean') { - this.editable = data.editable; + for (var prop in b) { + if (b.hasOwnProperty(prop)) { + if (props.indexOf(prop) == -1) { + if (b[prop] && b[prop].constructor === Object) { + if (a[prop] === undefined) { + a[prop] = {}; + } + if (a[prop].constructor === Object) { + exports.deepExtend(a[prop], b[prop]); + } else { + if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { + delete a[prop]; + } else { + a[prop] = b[prop]; + } + } + } else if (Array.isArray(b[prop])) { + a[prop] = []; + for (var i = 0; i < b[prop].length; i++) { + a[prop].push(b[prop][i]); + } + } else { + a[prop] = b[prop]; + } + } + } } - - this.data = data; - this.dirty = true; - if (this.displayed) this.redraw(); + return a; }; /** - * Set a parent for the item - * @param {ItemSet | Group} parent + * Deep extend an object a with the properties of object b + * @param {Object} a + * @param {Object} b + * @param [Boolean] protoExtend --> optional parameter. If true, the prototype values will also be extended. + * (ie. the options objects that inherit from others will also get the inherited options) + * @param [Boolean] global --> optional parameter. If true, the values of fields that are null will not deleted + * @returns {Object} */ - Item.prototype.setParent = function (parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); + exports.deepExtend = function (a, b, protoExtend, allowDeletion) { + for (var prop in b) { + if (b.hasOwnProperty(prop) || protoExtend === true) { + if (b[prop] && b[prop].constructor === Object) { + if (a[prop] === undefined) { + a[prop] = {}; + } + if (a[prop].constructor === Object) { + exports.deepExtend(a[prop], b[prop], protoExtend); + } else { + if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { + delete a[prop]; + } else { + a[prop] = b[prop]; + } + } + } else if (Array.isArray(b[prop])) { + a[prop] = []; + for (var i = 0; i < b[prop].length; i++) { + a[prop].push(b[prop][i]); + } + } else { + a[prop] = b[prop]; + } } - } else { - this.parent = parent; } + return a; }; /** - * 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 + * Test whether all elements in two arrays are equal. + * @param {Array} a + * @param {Array} b + * @return {boolean} Returns true if both arrays have the same length and same + * elements. */ - Item.prototype.isVisible = function (range) { - // Should be implemented by Item implementations - return false; - }; + exports.equalArray = function (a, b) { + if (a.length != b.length) return false; - /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed - */ - Item.prototype.show = function () { - return false; - }; + for (var i = 0, len = a.length; i < len; i++) { + if (a[i] != b[i]) return false; + } - /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed - */ - Item.prototype.hide = function () { - return false; + return true; }; /** - * Repaint the item - */ - Item.prototype.redraw = function () {}; - - /** - * Reposition the Item horizontally + * Convert an object to another type + * @param {Boolean | Number | String | Date | Moment | Null | undefined} object + * @param {String | undefined} type Name of the type. Available types: + * 'Boolean', 'Number', 'String', + * 'Date', 'Moment', ISODate', 'ASPDate'. + * @return {*} object + * @throws Error */ - Item.prototype.repositionX = function () {}; + exports.convert = function (object, type) { + var match; + + if (object === undefined) { + return undefined; + } + if (object === null) { + return null; + } + + if (!type) { + return object; + } + if (!(typeof type === 'string') && !(type instanceof String)) { + throw new Error('Type must be a string'); + } + + //noinspection FallthroughInSwitchStatementJS + switch (type) { + case 'boolean': + case 'Boolean': + return Boolean(object); + + case 'number': + case 'Number': + return Number(object.valueOf()); + + case 'string': + case 'String': + return String(object); + + case 'Date': + if (exports.isNumber(object)) { + return new Date(object); + } + if (object instanceof Date) { + return new Date(object.valueOf()); + } else if (moment.isMoment(object)) { + return new Date(object.valueOf()); + } + if (exports.isString(object)) { + match = ASPDateRegex.exec(object); + if (match) { + // object is an ASP date + return new Date(Number(match[1])); // parse number + } else { + return moment(object).toDate(); // parse string + } + } else { + throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date'); + } + + case 'Moment': + if (exports.isNumber(object)) { + return moment(object); + } + if (object instanceof Date) { + return moment(object.valueOf()); + } else if (moment.isMoment(object)) { + return moment(object); + } + if (exports.isString(object)) { + match = ASPDateRegex.exec(object); + if (match) { + // object is an ASP date + return moment(Number(match[1])); // parse number + } else { + return moment(object); // parse string + } + } else { + throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date'); + } + + case 'ISODate': + if (exports.isNumber(object)) { + return new Date(object); + } else if (object instanceof Date) { + return object.toISOString(); + } else if (moment.isMoment(object)) { + return object.toDate().toISOString(); + } else if (exports.isString(object)) { + match = ASPDateRegex.exec(object); + if (match) { + // object is an ASP date + return new Date(Number(match[1])).toISOString(); // parse number + } else { + return new Date(object).toISOString(); // parse string + } + } else { + throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ISODate'); + } + + case 'ASPDate': + if (exports.isNumber(object)) { + return '/Date(' + object + ')/'; + } else if (object instanceof Date) { + return '/Date(' + object.valueOf() + ')/'; + } else if (exports.isString(object)) { + match = ASPDateRegex.exec(object); + var value; + if (match) { + // object is an ASP date + value = new Date(Number(match[1])).valueOf(); // parse number + } else { + value = new Date(object).valueOf(); // parse string + } + return '/Date(' + value + ')/'; + } else { + throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ASPDate'); + } + + default: + throw new Error('Unknown type "' + type + '"'); + } + }; + + // parse ASP.Net Date pattern, + // for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/' + // code from http://momentjs.com/ + var ASPDateRegex = /^\/?Date\((\-?\d+)/i; /** - * Reposition the Item vertically + * Get the type of an object, for example exports.getType([]) returns 'Array' + * @param {*} object + * @return {String} type */ - Item.prototype.repositionY = function () {}; + exports.getType = function (object) { + var type = typeof object; + + 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'; + } + 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; + }; /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected + * Used to extend an array and copy it. This is used to propagate paths recursively. + * + * @param arr + * @param newValue + * @returns {Array} */ - Item.prototype._repaintDeleteButton = function (anchor) { - var editable = (this.options.editable.remove || this.data.editable === true) && this.data.editable !== false; + exports.copyAndExtendArray = function (arr, newValue) { + var newArr = []; + for (var i = 0; i < arr.length; i++) { + newArr.push(arr[i]); + } + newArr.push(newValue); + return newArr; + }; - if (this.selected && editable && !this.dom.deleteButton) { - // create and show button - var me = this; + /** + * Used to extend an array and copy it. This is used to propagate paths recursively. + * + * @param arr + * @param newValue + * @returns {Array} + */ + exports.copyArray = function (arr) { + var newArr = []; + for (var i = 0; i < arr.length; i++) { + newArr.push(arr[i]); + } + return newArr; + }; - var deleteButton = document.createElement('div'); - deleteButton.className = 'vis-delete'; - deleteButton.title = 'Delete this item'; + /** + * Retrieve the absolute left value of a DOM element + * @param {Element} elem A dom element, for example a div + * @return {number} left The absolute left position of this element + * in the browser page. + */ + exports.getAbsoluteLeft = function (elem) { + return elem.getBoundingClientRect().left; + }; - // TODO: be able to destroy the delete button - new Hammer(deleteButton).on('tap', function (event) { - event.stopPropagation(); - me.parent.removeFromDataSet(me); - }); + /** + * Retrieve the absolute top value of a DOM element + * @param {Element} elem A dom element, for example a div + * @return {number} top The absolute top position of this element + * in the browser page. + */ + exports.getAbsoluteTop = function (elem) { + return elem.getBoundingClientRect().top; + }; - 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; + /** + * add a className to the given elements style + * @param {Element} elem + * @param {String} className + */ + exports.addClassName = function (elem, className) { + var classes = elem.className.split(' '); + if (classes.indexOf(className) == -1) { + classes.push(className); // add the class to the array + elem.className = classes.join(' '); } }; /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private + * add a className to the given elements style + * @param {Element} elem + * @param {String} className */ - 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; + exports.removeClassName = function (elem, className) { + var classes = elem.className.split(' '); + var index = classes.indexOf(className); + if (index != -1) { + classes.splice(index, 1); // remove the class from the array + elem.className = classes.join(' '); } + }; - 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); + /** + * For each method for both arrays and objects. + * In case of an array, the built-in Array.forEach() is applied. + * In case of an Object, the method loops over all properties of the object. + * @param {Object | Array} object An Object or Array + * @param {function} callback Callback method, called for each item in + * the object or array with three parameters: + * callback(value, index, object) + */ + exports.forEach = function (object, callback) { + var i, len; + if (Array.isArray(object)) { + // array + for (i = 0, len = object.length; i < len; i++) { + callback(object[i], i, object); + } + } else { + // object + for (i in object) { + if (object.hasOwnProperty(i)) { + callback(object[i], i, object); } } + } + }; - this.content = content; + /** + * Convert an object into an array: all objects properties are put into the + * array. The resulting array is unordered. + * @param {Object} object + * @param {Array} array + */ + exports.toArray = function (object) { + var array = []; + + for (var prop in object) { + if (object.hasOwnProperty(prop)) array.push(object[prop]); } + + return array; }; /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private + * Update a property in an object + * @param {Object} object + * @param {String} key + * @param {*} value + * @return {Boolean} changed */ - Item.prototype._updateTitle = function (element) { - if (this.data.title != null) { - element.title = this.data.title || ''; + exports.updateProperty = function (object, key, value) { + if (object[key] !== value) { + object[key] = value; + return true; } else { - element.removeAttribute('vis-title'); + return false; } }; /** - * 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 + * Throttle the given function to be only executed once every `wait` milliseconds + * @param {function} fn + * @param {number} wait Time in milliseconds + * @returns {function} Returns the throttled function */ - Item.prototype._updateDataAttributes = function (element) { - if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - var attributes = []; + exports.throttle = function (fn, wait) { + var timeout = null; + var needExecution = false; - if (Array.isArray(this.options.dataAttributes)) { - attributes = this.options.dataAttributes; - } else if (this.options.dataAttributes == 'all') { - attributes = Object.keys(this.data); + return function throttled() { + if (!timeout) { + needExecution = false; + fn(); + + timeout = setTimeout(function () { + timeout = null; + if (needExecution) { + throttled(); + } + }, wait); } else { - return; + needExecution = true; } + }; + }; - for (var i = 0; i < attributes.length; i++) { - var name = attributes[i]; - var value = this.data[name]; + /** + * Add and event listener. Works for all browsers + * @param {Element} element An html element + * @param {string} action The action, for example "click", + * without the prefix "on" + * @param {function} listener The callback function to be executed + * @param {boolean} [useCapture] + */ + exports.addEventListener = function (element, action, listener, useCapture) { + if (element.addEventListener) { + if (useCapture === undefined) useCapture = false; - if (value != null) { - element.setAttribute('data-' + name, value); - } else { - element.removeAttribute('data-' + name); - } + if (action === 'mousewheel' && navigator.userAgent.indexOf('Firefox') >= 0) { + action = 'DOMMouseScroll'; // For Firefox } + + element.addEventListener(action, listener, useCapture); + } else { + element.attachEvent('on' + action, listener); // IE browsers } }; /** - * Update custom styles of the element - * @param element - * @private + * Remove an event listener from an element + * @param {Element} element An html dom element + * @param {string} action The name of the event, for example "mousedown" + * @param {function} listener The listener function + * @param {boolean} [useCapture] */ - Item.prototype._updateStyle = function (element) { - // remove old styles - if (this.style) { - util.removeCssText(element, this.style); - this.style = null; - } + exports.removeEventListener = function (element, action, listener, useCapture) { + if (element.removeEventListener) { + // non-IE browsers + if (useCapture === undefined) useCapture = false; - // append new styles - if (this.data.style) { - util.addCssText(element, this.data.style); - this.style = this.data.style; + if (action === 'mousewheel' && navigator.userAgent.indexOf('Firefox') >= 0) { + action = 'DOMMouseScroll'; // For Firefox + } + + element.removeEventListener(action, listener, useCapture); + } else { + // IE browsers + element.detachEvent('on' + action, listener); } }; /** - * Stringify the items contents - * @param {string | Element | undefined} content - * @returns {string | undefined} - * @private + * Cancels the event if it is cancelable, without stopping further propagation of the event. */ - Item.prototype._contentToString = function (content) { - if (typeof content === 'string') return content; - if (content && 'outerHTML' in content) return content.outerHTML; - return content; + exports.preventDefault = function (event) { + if (!event) event = window.event; + + if (event.preventDefault) { + event.preventDefault(); // non-IE browsers + } else { + event.returnValue = false; // IE browsers + } }; /** - * Return the width of the item left from its start date - * @return {number} + * Get HTML element which is the target of the event + * @param {Event} event + * @return {Element} target element */ - Item.prototype.getWidthLeft = function () { - return 0; + exports.getTarget = function (event) { + // code from http://www.quirksmode.org/js/events_properties.html + if (!event) { + event = window.event; + } + + var target; + + if (event.target) { + target = event.target; + } else if (event.srcElement) { + target = event.srcElement; + } + + if (target.nodeType != undefined && target.nodeType == 3) { + // defeat Safari bug + target = target.parentNode; + } + + return target; }; /** - * Return the width of the item right from the max of its start and end date - * @return {number} + * Check if given element contains given parent somewhere in the DOM tree + * @param {Element} element + * @param {Element} parent */ - Item.prototype.getWidthRight = function () { - return 0; - }; + exports.hasParent = function (element, parent) { + var e = element; - module.exports = Item; + while (e) { + if (e === parent) { + return true; + } + e = e.parentNode; + } - // should be implemented by the item + return false; + }; - // should be implemented by the item + exports.option = {}; - // should be implemented by the item + /** + * Convert a value into a boolean + * @param {Boolean | function | undefined} value + * @param {Boolean} [defaultValue] + * @returns {Boolean} bool + */ + exports.option.asBoolean = function (value, defaultValue) { + if (typeof value == 'function') { + value = value(); + } -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { + if (value != null) { + return value != false; + } - // Only load hammer.js when in a browser environment - // (loading hammer.js in a node.js environment gives errors) - 'use strict'; + return defaultValue || null; + }; - if (typeof window !== 'undefined') { - var propagating = __webpack_require__(4); - var Hammer = window['Hammer'] || __webpack_require__(5); - module.exports = propagating(Hammer, { - preventDefault: 'mouse' - }); - } else { - module.exports = function () { - throw Error('hammer.js is only available in a browser, not in node.js.'); - }; - } + /** + * Convert a value into a number + * @param {Boolean | function | undefined} value + * @param {Number} [defaultValue] + * @returns {Number} number + */ + exports.option.asNumber = function (value, defaultValue) { + if (typeof value == 'function') { + value = value(); + } -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; - - (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(); + if (value != null) { + return Number(value) || defaultValue || null; } - }(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 - - /** - * 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 - }; - - if (hammer.Manager) { - // This looks like the Hammer constructor. - // Overload the constructors with our own. - var Hammer = hammer; - var PropagatingHammer = function(element, options) { - var o = Object.create(_options); - if (options) Hammer.extend(o, options); - return propagating(new Hammer(element, o), o); - }; - Hammer.extend(PropagatingHammer, Hammer); + return defaultValue || null; + }; - PropagatingHammer.Manager = function (element, options) { - var o = Object.create(_options); - if (options) Hammer.extend(o, options); - return propagating(new Hammer.Manager(element, o), o); - }; + /** + * Convert a value into a string + * @param {String | function | undefined} value + * @param {String} [defaultValue] + * @returns {String} str + */ + exports.option.asString = function (value, defaultValue) { + if (typeof value == 'function') { + value = value(); + } - return PropagatingHammer; - } + if (value != null) { + return String(value); + } - // create a wrapper object which will override the functions - // `on`, `off`, `destroy`, and `emit` of the hammer instance - var wrapper = Object.create(hammer); + return defaultValue || null; + }; - // attach to DOM element - var element = hammer.element; - element.hammer = wrapper; + /** + * Convert a size or location into a string with pixels or a percentage + * @param {String | Number | function | undefined} value + * @param {String} [defaultValue] + * @returns {String} size + */ + exports.option.asSize = function (value, defaultValue) { + if (typeof value == 'function') { + value = value(); + } - // 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; - } - }); + if (exports.isString(value)) { + return value; + } else if (exports.isNumber(value)) { + return value + 'px'; + } else { + return defaultValue || null; + } + }; - /** @type {Object.>} */ - wrapper._handlers = {}; + /** + * Convert a value into a DOM element + * @param {HTMLElement | function | undefined} value + * @param {HTMLElement} [defaultValue] + * @returns {HTMLElement | null} dom + */ + exports.option.asElement = function (value, defaultValue) { + if (typeof value == 'function') { + value = value(); + } - /** - * 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 = []; + return value || defaultValue || null; + }; - // register the static, propagated handler - hammer.on(event, propagatedHandler); - } - _handlers.push(handler); - }); + /** + * http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb + * + * @param {String} hex + * @returns {{r: *, g: *, b: *}} | 255 range + */ + exports.hexToRGB = function (hex) { + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + hex = hex.replace(shorthandRegex, function (m, r, g, b) { + return r + r + g + g + b + b; + }); + var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } : null; + }; - return wrapper; - }; + /** + * This function takes color in hex format or rgb() or rgba() format and overrides the opacity. Returns rgba() string. + * @param color + * @param opacity + * @returns {*} + */ + exports.overrideOpacity = function (color, opacity) { + if (color.indexOf('rgba') != -1) { + return color; + } else if (color.indexOf('rgb') != -1) { + var rgb = color.substr(color.indexOf('(') + 1).replace(')', '').split(','); + return 'rgba(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ',' + opacity + ')'; + } else { + var rgb = exports.hexToRGB(color); + if (rgb == null) { + return color; + } else { + return 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + opacity + ')'; + } + } + }; - /** - * 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; - }) : []; + /** + * + * @param red 0 -- 255 + * @param green 0 -- 255 + * @param blue 0 -- 255 + * @returns {string} + * @constructor + */ + exports.RGBToHex = function (red, green, blue) { + return '#' + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1); + }; - if (_handlers.length > 0) { - wrapper._handlers[event] = _handlers; - } - else { - // remove static, propagated handler - hammer.off(event, propagatedHandler); - delete wrapper._handlers[event]; - } - } + /** + * Parse a color property into an object with border, background, and + * highlight colors + * @param {Object | String} color + * @return {Object} colorObject + */ + exports.parseColor = function (color) { + var c; + if (exports.isString(color) === true) { + if (exports.isValidRGB(color) === true) { + var rgb = color.substr(4).substr(0, color.length - 5).split(',').map(function (value) { + return parseInt(value); }); - - return wrapper; - }; - - /** - * Emit to the event listeners - * @param {string} eventType - * @param {Event} event - */ - wrapper.emit = function(eventType, event) { - _firstTarget = event.target; - hammer.emit(eventType, event); - }; - - wrapper.destroy = function () { - // Detach from DOM element - delete hammer.element.hammer; - - // clear all handlers - wrapper._handlers = {}; - - // call original hammer destroy - hammer.destroy(); - }; - - // split a string with space separated words - function split(events) { - return events.match(/[^ ]+/g); + color = exports.RGBToHex(rgb[0], rgb[1], rgb[2]); } - - /** - * 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 = {}; - } - - if (event.srcEvent._handled[event.type]) { - return; + if (exports.isValidHex(color) === true) { + var hsv = exports.hexToHSV(color); + var lighterColorHSV = { h: hsv.h, s: hsv.s * 0.8, v: Math.min(1, hsv.v * 1.02) }; + var darkerColorHSV = { h: hsv.h, s: Math.min(1, hsv.s * 1.25), v: hsv.v * 0.8 }; + var darkerColorHex = exports.HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v); + var lighterColorHex = exports.HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v); + c = { + background: color, + border: darkerColorHex, + highlight: { + background: lighterColorHex, + border: darkerColorHex + }, + hover: { + background: lighterColorHex, + border: darkerColorHex } - else { - event.srcEvent._handled[event.type] = true; + }; + } else { + c = { + background: color, + border: color, + highlight: { + background: color, + border: color + }, + hover: { + background: color, + border: color } - } - - // attach a stopPropagation function to the event - var stopped = false; - event.stopPropagation = function () { - stopped = true; }; + } + } else { + c = {}; + c.background = color.background || undefined; + c.border = color.border || undefined; - // attach firstTarget property to the event - event.firstTarget = _firstTarget; - - // propagate over all elements (until stopped) - var elem = _firstTarget; - while (elem && !stopped) { - var _handlers = elem.hammer && elem.hammer._handlers[event.type]; - if (_handlers) { - for (var i = 0; i < _handlers.length && !stopped; i++) { - _handlers[i](event); - } - } + if (exports.isString(color.highlight)) { + c.highlight = { + border: color.highlight, + background: color.highlight + }; + } else { + c.highlight = {}; + c.highlight.background = color.highlight && color.highlight.background || undefined; + c.highlight.border = color.highlight && color.highlight.border || undefined; + } - elem = elem.parentNode; - } + if (exports.isString(color.hover)) { + c.hover = { + border: color.hover, + background: color.hover + }; + } else { + c.hover = {}; + c.hover.background = color.hover && color.hover.background || undefined; + c.hover.border = color.hover && color.hover.border || undefined; } + } - return wrapper; - }; - })); + return c; + }; + /** + * http://www.javascripter.net/faq/rgb2hsv.htm + * + * @param red + * @param green + * @param blue + * @returns {*} + * @constructor + */ + exports.RGBToHSV = function (red, green, blue) { + red = red / 255;green = green / 255;blue = blue / 255; + var minRGB = Math.min(red, Math.min(green, blue)); + var maxRGB = Math.max(red, Math.max(green, blue)); -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { + // Black-gray-white + if (minRGB == maxRGB) { + return { h: 0, s: 0, v: minRGB }; + } - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.4 - 2014-09-28 - * http://hammerjs.github.io/ - * - * Copyright (c) 2014 Jorik Tangelder; - * Licensed under the MIT license */ - (function(window, document, exportName, undefined) { - 'use strict'; + // Colors other than black-gray-white: + var d = red == minRGB ? green - blue : blue == minRGB ? red - green : blue - red; + var h = red == minRGB ? 3 : blue == minRGB ? 1 : 5; + var hue = 60 * (h - d / (maxRGB - minRGB)) / 360; + var saturation = (maxRGB - minRGB) / maxRGB; + var value = maxRGB; + return { h: hue, s: saturation, v: value }; + }; - var VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o']; - var TEST_ELEMENT = document.createElement('div'); + var cssUtil = { + // split a string with css styles into an object with key/values + split: function split(cssText) { + var styles = {}; - var TYPE_FUNCTION = 'function'; + cssText.split(';').forEach(function (style) { + if (style.trim() != '') { + var parts = style.split(':'); + var key = parts[0].trim(); + var value = parts[1].trim(); + styles[key] = value; + } + }); - var round = Math.round; - var abs = Math.abs; - var now = Date.now; + return styles; + }, - /** - * 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); - } + // build a css text string from an object with key/values + join: function join(styles) { + return Object.keys(styles).map(function (key) { + return key + ': ' + styles[key]; + }).join('; '); + } + }; /** - * 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} + * Append a string with css styles to an element + * @param {Element} element + * @param {String} cssText */ - function invokeArrayArg(arg, fn, context) { - if (Array.isArray(arg)) { - each(arg, context[fn], context); - return true; - } - return false; - } + exports.addCssText = function (element, cssText) { + var currentStyles = cssUtil.split(element.style.cssText); + var newStyles = cssUtil.split(cssText); + var styles = exports.extend(currentStyles, newStyles); + + element.style.cssText = cssUtil.join(styles); + }; /** - * walk objects and arrays - * @param {Object} obj - * @param {Function} iterator - * @param {Object} context + * Remove a string with css styles from an element + * @param {Element} element + * @param {String} cssText */ - function each(obj, iterator, context) { - var i; + exports.removeCssText = function (element, cssText) { + var styles = cssUtil.split(element.style.cssText); + var removeStyles = cssUtil.split(cssText); - if (!obj) { - return; + for (var key in removeStyles) { + if (removeStyles.hasOwnProperty(key)) { + delete styles[key]; } + } - 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); - } - } - } + element.style.cssText = cssUtil.join(styles); + }; /** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge] - * @returns {Object} dest + * https://gist.github.com/mjijackson/5311256 + * @param h + * @param s + * @param v + * @returns {{r: number, g: number, b: number}} + * @constructor */ - 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++; - } - return dest; - } + exports.HSVToRGB = function (h, s, v) { + var r, g, b; - /** - * 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 merge(dest, src) { - return extend(dest, src, true); - } + var i = Math.floor(h * 6); + var f = h * 6 - i; + var p = v * (1 - s); + var q = v * (1 - f * s); + var t = v * (1 - (1 - f) * s); - /** - * simple class inheritance - * @param {Function} child - * @param {Function} base - * @param {Object} [properties] - */ - function inherit(child, base, properties) { - var baseP = base.prototype, - childP; + switch (i % 6) { + case 0: + r = v, g = t, b = p;break; + case 1: + r = q, g = v, b = p;break; + case 2: + r = p, g = v, b = t;break; + case 3: + r = p, g = q, b = v;break; + case 4: + r = t, g = p, b = v;break; + case 5: + r = v, g = p, b = q;break; + } - childP = child.prototype = Object.create(baseP); - childP.constructor = child; - childP._super = baseP; + return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) }; + }; - if (properties) { - extend(childP, properties); - } - } + exports.HSVToHex = function (h, s, v) { + var rgb = exports.HSVToRGB(h, s, v); + return exports.RGBToHex(rgb.r, rgb.g, rgb.b); + }; - /** - * simple function bind - * @param {Function} fn - * @param {Object} context - * @returns {Function} - */ - function bindFn(fn, context) { - return function boundFn() { - return fn.apply(context, arguments); - }; - } + exports.hexToHSV = function (hex) { + var rgb = exports.hexToRGB(hex); + return exports.RGBToHSV(rgb.r, rgb.g, rgb.b); + }; - /** - * 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; - } + exports.isValidHex = function (hex) { + var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex); + return isOk; + }; + + exports.isValidRGB = function (rgb) { + rgb = rgb.replace(' ', ''); + var isOk = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(rgb); + return isOk; + }; + exports.isValidRGBA = function (rgba) { + rgba = rgba.replace(' ', ''); + var isOk = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(rgba); + return isOk; + }; /** - * use the val2 when val1 is undefined - * @param {*} val1 - * @param {*} val2 + * This recursively redirects the prototype of JSON objects to the referenceObject + * This is used for default options. + * + * @param referenceObject * @returns {*} */ - function ifUndefined(val1, val2) { - return (val1 === undefined) ? val2 : val1; - } + exports.selectiveBridgeObject = function (fields, referenceObject) { + if (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') { + objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]); + } + } + } + return objectTo; + } else { + return null; + } + }; /** - * addEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler + * This recursively redirects the prototype of JSON objects to the referenceObject + * This is used for default options. + * + * @param referenceObject + * @returns {*} */ - function addEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.addEventListener(type, handler, false); - }); - } + exports.bridgeObject = function (referenceObject) { + if (typeof referenceObject == 'object') { + var objectTo = Object.create(referenceObject); + for (var i in referenceObject) { + if (referenceObject.hasOwnProperty(i)) { + if (typeof referenceObject[i] == 'object') { + objectTo[i] = exports.bridgeObject(referenceObject[i]); + } + } + } + return objectTo; + } else { + return null; + } + }; /** - * removeEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler + * this is used to set the options of subobjects in the options object. A requirement of these subobjects + * is that they have an 'enabled' element which is optional for the user but mandatory for the program. + * + * @param [object] mergeTarget | this is either this.options or the options used for the groups. + * @param [object] options | options + * @param [String] option | this is the option key in the options argument + * @private */ - function removeEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.removeEventListener(type, handler, false); - }); - } + exports.mergeOptions = function (mergeTarget, options, option) { + var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - /** - * 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; + if (options[option] === null) { + mergeTarget[option] = undefined; + delete mergeTarget[option]; + } else { + if (options[option] !== undefined) { + if (typeof options[option] === 'boolean') { + mergeTarget[option].enabled = options[option]; + } else { + if (options[option].enabled === undefined) { + mergeTarget[option].enabled = true; } - node = node.parentNode; + for (var prop in options[option]) { + if (options[option].hasOwnProperty(prop)) { + mergeTarget[option][prop] = options[option][prop]; + } + } + } } - return false; - } + } + }; /** - * small indexOf wrapper - * @param {String} str - * @param {String} find - * @returns {Boolean} found + * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses + * this function will then iterate in both directions over this sorted list to find all visible items. + * + * @param {Item[]} orderedItems | Items ordered by start + * @param {function} searchFunction | -1 is lower, 0 is found, 1 is higher + * @param {String} field + * @param {String} field2 + * @returns {number} + * @private */ - function inStr(str, find) { - return str.indexOf(find) > -1; - } + exports.binarySearchCustom = function (orderedItems, searchFunction, field, field2) { + var maxIterations = 10000; + var iteration = 0; + var low = 0; + var high = orderedItems.length - 1; - /** - * split string on whitespace - * @param {String} str - * @returns {Array} words - */ - function splitStr(str) { - return str.trim().split(/\s+/g); - } + while (low <= high && iteration < maxIterations) { + var middle = Math.floor((low + high) / 2); - /** - * 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); + var item = orderedItems[middle]; + var value = field2 === undefined ? item[field] : item[field][field2]; + + var searchResult = searchFunction(value); + if (searchResult == 0) { + // jihaa, found a visible item! + return middle; + } else if (searchResult == -1) { + // it is too small --> increase low + low = middle + 1; } else { - var i = 0; - while (i < src.length) { - if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { - return i; - } - i++; - } - return -1; + // it is too big --> decrease high + high = middle - 1; } - } - /** - * convert array-like objects to real arrays - * @param {Object} obj - * @returns {Array} - */ - function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - } + iteration++; + } + + return -1; + }; /** - * 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}] + * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of + * two values, we return either the one before or the one after, depending on user input + * If it is found, we return the index, else -1. + * + * @param {Array} orderedItems + * @param {{start: number, end: number}} target + * @param {String} field + * @param {String} sidePreference 'before' or 'after' + * @returns {number} + * @private */ - function uniqueArray(src, key, sort) { - var results = []; - var values = []; - var i = 0; + exports.binarySearchValue = function (orderedItems, target, field, sidePreference) { + var maxIterations = 10000; + var iteration = 0; + var low = 0; + var high = orderedItems.length - 1; + var prevValue, value, nextValue, middle; - 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++; - } + while (low <= high && iteration < maxIterations) { + // get a new guess + middle = Math.floor(0.5 * (high + low)); + prevValue = orderedItems[Math.max(0, middle - 1)][field]; + value = orderedItems[middle][field]; + nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field]; - if (sort) { - if (!key) { - results = results.sort(); - } else { - results = results.sort(function sortUniqueArray(a, b) { - return a[key] > b[key]; - }); - } + if (value == target) { + // we found the target + return middle; + } else if (prevValue < target && value > target) { + // target is in between of the previous and the current + return sidePreference == 'before' ? Math.max(0, middle - 1) : middle; + } else if (value < target && nextValue > target) { + // target is in between of the current and the next + return sidePreference == 'before' ? middle : Math.min(orderedItems.length - 1, middle + 1); + } else { + // didnt find the target, we need to change our boundaries. + if (value < target) { + // it is too small --> increase low + low = middle + 1; + } else { + // it is too big --> decrease high + high = middle - 1; + } } + iteration++; + } - return results; - } + // didnt find anything. Return -1. + return -1; + }; - /** - * get the prefixed property - * @param {Object} obj - * @param {String} property - * @returns {String|Undefined} prefixed + /* + * Easing Functions - inspired from http://gizma.com/easing/ + * only considering the t value for the range [0, 1] => [0, 1] + * https://gist.github.com/gre/1650294 */ - function prefixed(obj, property) { - var prefix, prop; - var camelProp = property[0].toUpperCase() + property.slice(1); + exports.easingFunctions = { + // no easing, no acceleration + linear: function linear(t) { + return t; + }, + // accelerating from zero velocity + easeInQuad: function easeInQuad(t) { + return t * t; + }, + // decelerating to zero velocity + easeOutQuad: function easeOutQuad(t) { + return t * (2 - t); + }, + // acceleration until halfway, then deceleration + easeInOutQuad: function easeInOutQuad(t) { + return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t; + }, + // accelerating from zero velocity + easeInCubic: function easeInCubic(t) { + return t * t * t; + }, + // decelerating to zero velocity + easeOutCubic: function easeOutCubic(t) { + return --t * t * t + 1; + }, + // acceleration until halfway, then deceleration + easeInOutCubic: function easeInOutCubic(t) { + return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1; + }, + // accelerating from zero velocity + easeInQuart: function easeInQuart(t) { + return t * t * t * t; + }, + // decelerating to zero velocity + easeOutQuart: function easeOutQuart(t) { + return 1 - --t * t * t * t; + }, + // acceleration until halfway, then deceleration + easeInOutQuart: function easeInOutQuart(t) { + return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t; + }, + // accelerating from zero velocity + easeInQuint: function easeInQuint(t) { + return t * t * t * t * t; + }, + // decelerating to zero velocity + easeOutQuint: function easeOutQuint(t) { + return 1 + --t * t * t * t * t; + }, + // acceleration until halfway, then deceleration + easeInOutQuint: function easeInOutQuint(t) { + return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t; + } + }; - var i = 0; - while (i < VENDOR_PREFIXES.length) { - prefix = VENDOR_PREFIXES[i]; - prop = (prefix) ? prefix + camelProp : property; +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { - if (prop in obj) { - return prop; - } - i++; - } - return undefined; - } + // first check if moment.js is already loaded in the browser window, if so, + // use this instance. Else, load via commonjs. + 'use strict'; - /** - * get a unique id - * @returns {number} uniqueId - */ - var _uniqueId = 1; - function uniqueId() { - return _uniqueId++; - } + module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(3); - /** - * get the window object of an element - * @param {HTMLElement} element - * @returns {DocumentView|Window} - */ - function getWindowForElement(element) { - var doc = element.ownerDocument; - return (doc.defaultView || doc.parentWindow); - } +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { - var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; + /* WEBPACK VAR INJECTION */(function(module) {//! moment.js + //! version : 2.10.6 + //! authors : Tim Wood, Iskren Chernev, Moment.js contributors + //! license : MIT + //! momentjs.com - 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); + (function (global, factory) { + true ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() + }(this, function () { 'use strict'; - var INPUT_TYPE_TOUCH = 'touch'; - var INPUT_TYPE_PEN = 'pen'; - var INPUT_TYPE_MOUSE = 'mouse'; - var INPUT_TYPE_KINECT = 'kinect'; + var hookCallback; - var COMPUTE_INTERVAL = 25; + function utils_hooks__hooks () { + return hookCallback.apply(null, arguments); + } - var INPUT_START = 1; - var INPUT_MOVE = 2; - var INPUT_END = 4; - var INPUT_CANCEL = 8; + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback (callback) { + hookCallback = callback; + } - var DIRECTION_NONE = 1; - var DIRECTION_LEFT = 2; - var DIRECTION_RIGHT = 4; - var DIRECTION_UP = 8; - var DIRECTION_DOWN = 16; + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } - var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; - var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; - var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; + } - var PROPS_XY = ['x', 'y']; - var PROPS_CLIENT_XY = ['clientX', 'clientY']; + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } - /** - * 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; + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } - // 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); + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } } - }; - this.init(); - - } - - Input.prototype = { - /** - * should handle the inputEvent data and trigger the callback - * @virtual - */ - handler: function() { }, + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } - /** - * bind the events - */ - 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); - }, + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } - /** - * unbind the events - */ - 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); + return a; } - }; - /** - * 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; + function create_utc__createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } - 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; + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false + }; } - return new (Type)(manager, inputHandler); - } - /** - * 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)); + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } - input.isFirst = !!isFirst; - input.isFinal = !!isFinal; + function valid__isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + m._isValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated; - if (isFirst) { - manager.session = {}; + if (m._strict) { + m._isValid = m._isValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + } + return m._isValid; } - // source event is the normalized value of the domEvents - // like 'touchstart, mouseup, pointerdown' - input.eventType = eventType; + function valid__createInvalid (flags) { + var m = create_utc__createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } - // compute scale, rotation etc - computeInputData(manager, input); + return m; + } - // emit secret event - manager.emit('hammer.input', input); + var momentProperties = utils_hooks__hooks.momentProperties = []; - manager.recognize(input); - manager.session.prevInput = input; - } + function copyConfig(to, from) { + var i, prop, val; - /** - * 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; + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = getParsingFlags(from); + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } - // store the first input to calculate the distance and direction - if (!session.firstInput) { - session.firstInput = simpleCloneInputData(input); - } + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } - // 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; + return to; } - var firstInput = session.firstInput; - var firstMultiple = session.firstMultiple; - var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; + var updateInProgress = false; - var center = input.center = getCenter(pointers); - input.timeStamp = now(); - input.deltaTime = input.timeStamp - firstInput.timeStamp; + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + utils_hooks__hooks.updateOffset(this); + updateInProgress = false; + } + } - input.angle = getAngle(offsetCenter, center); - input.distance = getDistance(offsetCenter, center); + function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); + } - computeDeltaXY(session, input); - input.offsetDirection = getDirection(input.deltaX, input.deltaY); + function absFloor (number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } - input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; - input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; - computeIntervalInputData(session, input); + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } - // find the correct target - var target = manager.element; - if (hasParent(input.srcEvent.target, target)) { - target = input.srcEvent.target; + return value; } - input.target = target; - } - 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 - }; + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } - offset = session.offsetDelta = { - x: center.x, - y: center.y - }; + function Locale() { } - input.deltaX = prevDelta.x + (center.x - offset.x); - input.deltaY = prevDelta.y + (center.y - offset.y); - } + var locales = {}; + var globalLocale; - /** - * 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; + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } - if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { - var deltaX = last.deltaX - input.deltaX; - var deltaY = last.deltaY - input.deltaY; + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; - 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); + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } - 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; + function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && typeof module !== 'undefined' && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + locale_locales__getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; } - input.velocity = velocity; - input.velocityX = velocityX; - input.velocityY = velocityY; - input.direction = direction; - } + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function locale_locales__getSetGlobalLocale (key, values) { + var data; + if (key) { + if (typeof values === 'undefined') { + data = locale_locales__getLocale(key); + } + else { + data = defineLocale(key, values); + } - /** - * 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++; + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; } - return { - timeStamp: now(), - pointers: pointers, - center: getCenter(pointers), - deltaX: input.deltaX, - deltaY: input.deltaY - }; - } + function defineLocale (name, values) { + if (values !== null) { + values.abbr = name; + locales[name] = locales[name] || new Locale(); + locales[name].set(values); - /** - * 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; + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); - // no need to loop when only one touch - if (pointersLength === 1) { - return { - x: round(pointers[0].clientX), - y: round(pointers[0].clientY) - }; + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } } - var x = 0, y = 0, i = 0; - while (i < pointersLength) { - x += pointers[i].clientX; - y += pointers[i].clientY; - i++; - } + // returns locale data + function locale_locales__getLocale (key) { + var locale; - return { - x: round(x / pointersLength), - y: round(y / pointersLength) - }; - } + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } - /** - * 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 (!key) { + return globalLocale; + } - /** - * 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; - } + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } - if (abs(x) >= abs(y)) { - return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + return chooseLocale(key); } - 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 aliases = {}; + + function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - return Math.sqrt((x * x) + (y * y)); - } + function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : 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; + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; } - 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); - } + function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + get_set__set(this, unit, value); + utils_hooks__hooks.updateOffset(this, keepTime); + return this; + } else { + return get_set__get(this, unit); + } + }; + } - /** - * 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); - } + function get_set__get (mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } - var MOUSE_INPUT_MAP = { - mousedown: INPUT_START, - mousemove: INPUT_MOVE, - mouseup: INPUT_END - }; + function get_set__set (mom, unit, value) { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } - var MOUSE_ELEMENT_EVENTS = 'mousedown'; - var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + // MOMENTS - /** - * Mouse events input - * @constructor - * @extends Input - */ - function MouseInput() { - this.evEl = MOUSE_ELEMENT_EVENTS; - this.evWin = MOUSE_WINDOW_EVENTS; + function getSet (units, value) { + var unit; + if (typeof units === 'object') { + for (unit in units) { + this.set(unit, units[unit]); + } + } else { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + return this[units](value); + } + } + return this; + } - this.allow = true; // used by Input.TouchMouse to disable mouse events - this.pressed = false; // mousedown state + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; + } - Input.apply(this, arguments); - } + var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - inherit(MouseInput, Input, { - /** - * handle mouse events - * @param {Object} ev - */ - handler: function MEhandler(ev) { - var eventType = MOUSE_INPUT_MAP[ev.type]; + var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - // on start we want to have the left mouse button down - if (eventType & INPUT_START && ev.button === 0) { - this.pressed = true; - } + var formatFunctions = {}; - if (eventType & INPUT_MOVE && ev.which !== 1) { - eventType = INPUT_END; + var formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; } + } - // mouse must be down, and mouse events are allowed (see the TouchMouse input) - if (!this.pressed || !this.allow) { - return; + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); } + return input.replace(/\\/g, ''); + } - if (eventType & INPUT_END) { - this.pressed = false; + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } } - this.callback(this.manager, eventType, { - pointers: [ev], - changedPointers: [ev], - pointerType: INPUT_TYPE_MOUSE, - srcEvent: ev - }); + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; } - }); - var POINTER_INPUT_MAP = { - pointerdown: INPUT_START, - pointermove: INPUT_MOVE, - pointerup: INPUT_END, - pointercancel: INPUT_CANCEL, - pointerout: INPUT_CANCEL - }; + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } - // 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 - }; + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - var POINTER_ELEMENT_EVENTS = 'pointerdown'; - var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; + return formatFunctions[format](m); + } - // IE10 has prefixed support, and case-sensitive - if (window.MSPointerEvent) { - POINTER_ELEMENT_EVENTS = 'MSPointerDown'; - POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; - } + function expandFormat(format, locale) { + var i = 5; - /** - * Pointer events input - * @constructor - * @extends Input - */ - function PointerEventInput() { - this.evEl = POINTER_ELEMENT_EVENTS; - this.evWin = POINTER_WINDOW_EVENTS; + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } - Input.apply(this, arguments); + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } - this.store = (this.manager.session.pointerEvents = []); - } + return format; + } - inherit(PointerEventInput, Input, { - /** - * handle mouse events - * @param {Object} ev - */ - handler: function PEhandler(ev) { - var store = this.store; - var removePointer = false; + var match1 = /\d/; // 0 - 9 + var match2 = /\d\d/; // 00 - 99 + var match3 = /\d{3}/; // 000 - 999 + var match4 = /\d{4}/; // 0000 - 9999 + var match6 = /[+-]?\d{6}/; // -999999 - 999999 + var match1to2 = /\d\d?/; // 0 - 99 + var match1to3 = /\d{1,3}/; // 0 - 999 + var match1to4 = /\d{1,4}/; // 0 - 9999 + var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); - var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; - var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; + var matchUnsigned = /\d+/; // 0 - inf + var matchSigned = /[+-]?\d+/; // -inf - inf - var isTouch = (pointerType == INPUT_TYPE_TOUCH); + var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - // get index of the event in the store - var storeIndex = inArray(store, ev.pointerId, 'pointerId'); + var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - // 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; - } + // any word (or two) characters or numbers including two/three word month in arabic. + var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - // it not found, so the pointer hasn't been down (so it's probably a hover) - if (storeIndex < 0) { - return; - } + var regexes = {}; - // update the event in the store - store[storeIndex] = ev; + function isFunction (sth) { + // https://github.com/moment/moment/issues/2325 + return typeof sth === 'function' && + Object.prototype.toString.call(sth) === '[object Function]'; + } - this.callback(this.manager, eventType, { - pointers: store, - changedPointers: [ev], - pointerType: pointerType, - srcEvent: ev - }); - if (removePointer) { - // remove from the store - store.splice(storeIndex, 1); - } + function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; } - }); - 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'; + function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } - /** - * Touch events input - * @constructor - * @extends Input - */ - function SingleTouchInput() { - this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; - this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; - this.started = false; + return regexes[token](config._strict, config._locale); + } - Input.apply(this, arguments); - } + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } - inherit(SingleTouchInput, Input, { - handler: function TEhandler(ev) { - var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; + var tokens = {}; - // should we handle the touch events? - if (type === INPUT_START) { - this.started = true; + function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; } - - if (!this.started) { - return; + if (typeof callback === 'number') { + func = function (input, array) { + array[callback] = toInt(input); + }; } - - var touches = normalizeSingleTouches.call(this, ev, type); - - // when done, reset the started state - if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { - this.started = false; + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; } + } - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev + function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); }); } - }); - - /** - * @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 (type & (INPUT_END | INPUT_CANCEL)) { - all = uniqueArray(all.concat(changed), 'identifier', true); + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } } - return [all, changed]; - } + var YEAR = 0; + var MONTH = 1; + var DATE = 2; + var HOUR = 3; + var MINUTE = 4; + var SECOND = 5; + var MILLISECOND = 6; - var TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL - }; + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } - var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; + // FORMATTING - /** - * Multi-user touch events input - * @constructor - * @extends Input - */ - function TouchInput() { - this.evTarget = TOUCH_TARGET_EVENTS; - this.targetIds = {}; + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); - Input.apply(this, arguments); - } + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); - inherit(TouchInput, Input, { - handler: function MTEhandler(ev) { - var type = TOUCH_INPUT_MAP[ev.type]; - var touches = getTouches.call(this, ev, type); - if (!touches) { - return; - } + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }); + // ALIASES - /** - * @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; + addUnitAlias('month', 'M'); - // 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]; - } + // PARSING - var i, - targetTouches, - changedTouches = toArray(ev.changedTouches), - changedTargetTouches = [], - target = this.target; + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', matchWord); + addRegexToken('MMMM', matchWord); - // get target touches from touches - targetTouches = allTouches.filter(function(touch) { - return hasParent(touch.target, target); + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; }); - // collect touches - if (type === INPUT_START) { - i = 0; - while (i < targetTouches.length) { - targetIds[targetTouches[i].identifier] = true; - i++; + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; } - } + }); - // 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]); - } + // LOCALES - // cleanup removed touches - if (type & (INPUT_END | INPUT_CANCEL)) { - delete targetIds[changedTouches[i].identifier]; - } - i++; + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); + function localeMonths (m) { + return this._months[m.month()]; } - if (!changedTargetTouches.length) { - return; + var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); + function localeMonthsShort (m) { + return this._monthsShort[m.month()]; } - return [ - // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' - uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), - changedTargetTouches - ]; - } + function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; - /** - * 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); + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } - var handler = bindFn(this.handler, this); - this.touch = new TouchInput(this.manager, handler); - this.mouse = new MouseInput(this.manager, handler); - } + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } - 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); + // MOMENTS - // 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; - } + function setMonth (mom, value) { + var dayOfMonth; - // reset the allowMouse when we're done - if (inputEvent & (INPUT_END | INPUT_CANCEL)) { - this.mouse.allow = true; + // 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; + } } - this.callback(manager, inputEvent, inputData); - }, + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } - /** - * remove the event listeners - */ - destroy: function destroy() { - this.touch.destroy(); - this.mouse.destroy(); + function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + utils_hooks__hooks.updateOffset(this, true); + return this; + } else { + return get_set__get(this, 'Month'); + } } - }); - var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); - var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); + } - // 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'; + function checkOverflow (m) { + var overflow; + var a = m._a; - /** - * 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); - } + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; - 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 (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + getParsingFlags(m).overflow = overflow; } - if (NATIVE_TOUCH_ACTION) { - this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + return m; + } + + function warn(msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); } - this.actions = value.toLowerCase().trim(); - }, + } - /** - * just re-set the touchAction value - */ - update: function() { - this.set(this.manager.options.touchAction); - }, + function deprecate(msg, fn) { + var firstTime = true; - /** - * 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 extend(function () { + if (firstTime) { + warn(msg + '\n' + (new Error()).stack); + firstTime = false; } - }); - return cleanTouchActions(actions.join(' ')); - }, + return fn.apply(this, arguments); + }, fn); + } - /** - * 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; + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; } + } - var srcEvent = input.srcEvent; - var direction = input.offsetDirection; + utils_hooks__hooks.suppressDeprecationWarnings = false; - // if the touch action did prevented once this session - if (this.manager.session.prevented) { - srcEvent.preventDefault(); + var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + + var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ]; + + // iso time formats and regexes + var isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ]; + + var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + + // date from iso format + function configFromISO(config) { + var i, l, + string = config._i, + match = from_string__isoRegex.exec(string); + + if (match) { + getParsingFlags(config).iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + config._f = isoDates[i][0]; + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + // match[6] should be 'T' or space + config._f += (match[6] || ' ') + isoTimes[i][0]; + break; + } + } + if (string.match(matchOffset)) { + config._f += 'Z'; + } + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); 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); + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + utils_hooks__hooks.createFromInputFallback(config); + } + } - if (hasNone || - (hasPanY && direction & DIRECTION_HORIZONTAL) || - (hasPanX && direction & DIRECTION_VERTICAL)) { - return this.preventSrc(srcEvent); + utils_hooks__hooks.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); } - }, + ); - /** - * 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(); + function createDate (y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; } - }; - /** - * 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; + function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; } - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); - // pan-x and pan-y can be combined - if (hasPanX && hasPanY) { - return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y; - } + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - // pan-x OR pan-y - if (hasPanX || hasPanY) { - return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + // ALIASES + + addUnitAlias('year', 'y'); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; } - // manipulation - if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { - return TOUCH_ACTION_MANIPULATION; + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; } - return TOUCH_ACTION_AUTO; - } + // HOOKS - /** - * 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; + utils_hooks__hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; - /** - * Recognizer - * Every recognizer needs to extend from this class. - * @constructor - * @param {Object} options - */ - function Recognizer(options) { - this.id = uniqueId(); + // MOMENTS - this.manager = null; - this.options = merge(options || {}, this.defaults); + var getSetYear = makeGetSet('FullYear', false); - // default is enable true - this.options.enable = ifUndefined(this.options.enable, true); + function getIsLeapYear () { + return isLeapYear(this.year()); + } - this.state = STATE_POSSIBLE; + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - this.simultaneous = {}; - this.requireFail = []; - } + // ALIASES - Recognizer.prototype = { - /** - * @virtual - * @type {Object} - */ - defaults: {}, + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); - /** - * set options - * @param {Object} options - * @return {Recognizer} - */ - set: function(options) { - extend(this.options, options); + // PARSING - // also update the touchAction, in case something changed about the directions/enabled state - this.manager && this.manager.touchAction.update(); - return this; - }, + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); - /** - * recognize simultaneous with an other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - recognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { - return this; - } + addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + }); - var simultaneous = this.simultaneous; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (!simultaneous[otherRecognizer.id]) { - simultaneous[otherRecognizer.id] = otherRecognizer; - otherRecognizer.recognizeWith(this); - } - return this; - }, + // HELPERS - /** - * 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; - } + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - delete this.simultaneous[otherRecognizer.id]; - return this; - }, - /** - * 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; + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; } - var requireFail = this.requireFail; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (inArray(requireFail, otherRecognizer) === -1) { - requireFail.push(otherRecognizer); - otherRecognizer.requireFailure(this); + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; } - return this; - }, - /** - * 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; - } + adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - var index = inArray(this.requireFail, otherRecognizer); - if (index > -1) { - this.requireFail.splice(index, 1); - } - return this; - }, + // LOCALES - /** - * has require failures boolean - * @returns {boolean} - */ - hasRequireFailures: function() { - return this.requireFail.length > 0; - }, + function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } - /** - * if the recognizer can recognize simultaneous with an other recognizer - * @param {Recognizer} otherRecognizer - * @returns {Boolean} - */ - canRecognizeWith: function(otherRecognizer) { - return !!this.simultaneous[otherRecognizer.id]; - }, + var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }; - /** - * 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 localeFirstDayOfWeek () { + return this._week.dow; + } - function emit(withState) { - self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input); - } + function localeFirstDayOfYear () { + return this._week.doy; + } - // 'panstart' and 'panmove' - if (state < STATE_ENDED) { - emit(true); - } + // MOMENTS - emit(); // simple 'eventName' events + function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } - // panend and pancancel - if (state >= STATE_ENDED) { - emit(true); - } - }, + function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } - /** - * 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; - }, + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - /** - * 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; - }, + // ALIASES - /** - * 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 = extend({}, inputData); + addUnitAlias('dayOfYear', 'DDD'); - // is is enabled and allow recognizing? - if (!boolOrFn(this.options.enable, [this, inputDataClone])) { - this.reset(); - this.state = STATE_FAILED; - return; - } + // PARSING - // reset when we've reached the end - if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { - this.state = STATE_POSSIBLE; - } + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); - this.state = this.process(inputDataClone); + // HELPERS - // the recognizer has recognized a gesture - // so trigger an event - if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { - this.tryEmit(inputDataClone); + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear; + if (d < firstDayOfWeek) { + d += 7; } - }, - - /** - * 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() { }, + weekday = weekday != null ? 1 * weekday : firstDayOfWeek; - /** - * called when the gesture isn't allowed to recognize - * like when another is being recognized or it is disabled - * @virtual - */ - reset: function() { } - }; + dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday; - /** - * 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 { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; } - return ''; - } - /** - * direction cons to string - * @param {Const} direction - * @returns {String} - */ - 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 ''; - } + // MOMENTS - /** - * get a recognizer by name if it is bound to a manager - * @param {Recognizer|String} otherRecognizer - * @param {Recognizer} recognizer - * @returns {Recognizer} - */ - function getRecognizerByNameIfManager(otherRecognizer, recognizer) { - var manager = recognizer.manager; - if (manager) { - return manager.get(otherRecognizer); + function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); } - return otherRecognizer; - } - - /** - * This recognizer is just used as a base for the simple attribute recognizers. - * @constructor - * @extends Recognizer - */ - 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; - var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); - var isValid = this.attrTest(input); + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } - // 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; + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; } - return STATE_FAILED; + return [now.getFullYear(), now.getMonth(), now.getDate()]; } - }); - /** - * Pan - * Recognized when the pointer is down and moved in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - function PanRecognizer() { - AttrRecognizer.apply(this, arguments); + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; - this.pX = null; - this.pY = null; - } + if (config._d) { + return; + } - inherit(PanRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PanRecognizer - */ - defaults: { - event: 'pan', - threshold: 10, - pointers: 1, - direction: DIRECTION_ALL - }, + currentDate = currentDateArray(config); - 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); + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); } - 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; + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - // 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); + if (config._dayOfYear > daysInYear(yearToUse)) { + getParsingFlags(config)._overflowDayOfYear = true; } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); } - 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))); - }, + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } - emit: function(input) { - this.pX = input.deltaX; - this.pY = input.deltaY; + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } - var direction = directionStr(input.direction); - if (direction) { - this.manager.emit(this.options.event + direction, input); + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; } - this._super.emit.call(this, input); + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } } - }); - /** - * Pinch - * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). - * @constructor - * @extends AttrRecognizer - */ - function PinchRecognizer() { - AttrRecognizer.apply(this, arguments); - } + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; - inherit(PinchRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'pinch', - threshold: 0, - pointers: 2 - }, + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); - }, + weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); + week = defaults(w.w, 1); - emit: function(input) { - this._super.emit.call(this, input); - if (input.scale !== 1) { - var inOut = input.scale < 1 ? 'in' : 'out'; - this.manager.emit(this.options.event + inOut, input); + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; } - }); - /** - * Press - * Recognized when the pointer is down for x ms without any movement. - * @constructor - * @extends Recognizer - */ - function PressRecognizer() { - Recognizer.apply(this, arguments); + utils_hooks__hooks.ISO_8601 = function () {}; - this._timer = null; - this._input = null; - } + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === utils_hooks__hooks.ISO_8601) { + configFromISO(config); + return; + } - inherit(PressRecognizer, Recognizer, { - /** - * @namespace - * @memberof PressRecognizer - */ - defaults: { - event: 'press', - pointers: 1, - time: 500, // minimal time of the pointer to be pressed - threshold: 5 // a minimal movement is ok, but keep it low - }, + config._a = []; + getParsingFlags(config).empty = true; - 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); - } - } - }); - - /** - * Rotate - * Recognized when two or more pointer are moving in a circular motion. - * @constructor - * @extends AttrRecognizer - */ - function RotateRecognizer() { - AttrRecognizer.apply(this, arguments); - } - - inherit(RotateRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof RotateRecognizer - */ - defaults: { - event: 'rotate', - threshold: 0, - pointers: 2 - }, - - 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); - } - }); - - /** - * Swipe - * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - function SwipeRecognizer() { - AttrRecognizer.apply(this, arguments); - } - - inherit(SwipeRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof SwipeRecognizer - */ - defaults: { - event: 'swipe', - threshold: 10, - velocity: 0.65, - 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.velocity; - } else if (direction & DIRECTION_HORIZONTAL) { - velocity = input.velocityX; - } else if (direction & DIRECTION_VERTICAL) { - velocity = input.velocityY; - } - - return this._super.attrTest.call(this, input) && - direction & input.direction && - input.distance > this.options.threshold && - abs(velocity) > this.options.velocity && input.eventType & INPUT_END; - }, - - emit: function(input) { - var direction = directionStr(input.direction); - if (direction) { - this.manager.emit(this.options.event + direction, input); - } - - this.manager.emit(this.options.event, input); - } - }); - - /** - * 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 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; - } - - 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: 2, // a minimal movement is ok, but keep it low - posThreshold: 10 // a multi-tap can be a bit off the initial position - }, - - getTouchAction: function() { - return [TOUCH_ACTION_MANIPULATION]; - }, - - process: function(input) { - var options = this.options; - - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTouchTime = input.deltaTime < options.time; - - this.reset(); - - if ((input.eventType & INPUT_START) && (this.count === 0)) { - return this.failTimeout(); - } - - // 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(); - } - - var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; - var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; - this.pTime = input.timeStamp; - this.pCenter = input.center; + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - if (!validMultiTap || !validInterval) { - this.count = 1; - } else { - this.count += 1; + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; } - - this._input = input; - - // 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; + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); } } - return STATE_FAILED; - }, - - failTimeout: function() { - this._timer = setTimeoutContext(function() { - this.state = STATE_FAILED; - }, this.options.interval, this); - return STATE_FAILED; - }, - - reset: function() { - clearTimeout(this._timer); - }, - - emit: function() { - if (this.state == STATE_RECOGNIZED ) { - this._input.tapCount = this.count; - this.manager.emit(this.options.event, this._input); - } - } - }); - - /** - * Simple way to create an manager with a default set of recognizers. - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ - function Hammer(element, options) { - options = options || {}; - options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); - return new Manager(element, options); - } - - /** - * @const {string} - */ - Hammer.VERSION = '2.0.4'; - - /** - * 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, - - /** - * 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, - - /** - * @type {Boolean} - * @default true - */ - enable: true, - - /** - * 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, - - /** - * force an input class - * @type {Null|Function} - * @default null - */ - inputClass: null, - - /** - * 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] - ], - - /** - * 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', - - /** - * Disable the Windows Phone grippers when pressing an element. - * @type {String} - * @default 'none' - */ - touchSelect: 'none', - - /** - * 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', - - /** - * Specifies whether zooming is enabled. Used by IE10> - * @type {String} - * @default 'none' - */ - contentZooming: 'none', - - /** - * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userDrag: 'none', - - /** - * 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; - - /** - * Manager - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ - function Manager(element, options) { - options = options || {}; - - this.options = merge(options, Hammer.defaults); - this.options.inputTarget = this.options.inputTarget || element; - - this.handlers = {}; - this.session = {}; - this.recognizers = []; - - this.element = element; - this.input = createInputInstance(this); - this.touchAction = new TouchAction(this, this.options.touchAction); - - toggleCssProps(this, true); - - each(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); - } - - Manager.prototype = { - /** - * set options - * @param {Object} options - * @returns {Manager} - */ - set: function(options) { - extend(this.options, options); - - // 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; + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); } - // 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; + // clear _12h flag if hour is <= 12 + if (getParsingFlags(config).bigHour === true && + config._a[HOUR] <= 12 && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; } + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - var i = 0; - while (i < recognizers.length) { - recognizer = recognizers[i]; - - // 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(); - } - - // 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++; - } - }, - - /** - * get a recognizer by its event name. - * @param {Recognizer|String} recognizer - * @returns {Recognizer|Null} - */ - get: function(recognizer) { - if (recognizer instanceof Recognizer) { - return recognizer; - } - - var recognizers = this.recognizers; - for (var i = 0; i < recognizers.length; i++) { - if (recognizers[i].options.event == recognizer) { - return recognizers[i]; - } - } - return null; - }, - - /** - * 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 existing - var existing = this.get(recognizer.options.event); - if (existing) { - this.remove(existing); - } - - this.recognizers.push(recognizer); - recognizer.manager = this; - - this.touchAction.update(); - return recognizer; - }, - - /** - * remove a recognizer by name or instance - * @param {Recognizer|String} recognizer - * @returns {Manager} - */ - remove: function(recognizer) { - if (invokeArrayArg(recognizer, 'remove', this)) { - return this; - } - - var recognizers = this.recognizers; - recognizer = this.get(recognizer); - recognizers.splice(inArray(recognizers, recognizer), 1); - - this.touchAction.update(); - return this; - }, - - /** - * 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; - }, - - /** - * 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].splice(inArray(handlers[event], handler), 1); - } - }); - return this; - }, - - /** - * 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 handlers, so skip it all - var handlers = this.handlers[event] && this.handlers[event].slice(); - if (!handlers || !handlers.length) { - return; - } - - data.type = event; - data.preventDefault = function() { - data.srcEvent.preventDefault(); - }; - - 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; - } - }; - - /** - * add/remove the css properties as defined in manager.options.cssProps - * @param {Manager} manager - * @param {Boolean} add - */ - function toggleCssProps(manager, add) { - var element = manager.element; - each(manager.options.cssProps, function(value, name) { - element.style[prefixed(element.style, name)] = add ? value : ''; - }); - } - - /** - * trigger dom event - * @param {String} event - * @param {Object} data - */ - function triggerDomEvent(event, data) { - var gestureEvent = document.createEvent('Event'); - gestureEvent.initEvent(event, true, true); - gestureEvent.gesture = data; - data.target.dispatchEvent(gestureEvent); - } - - extend(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, - - Manager: Manager, - Input: Input, - TouchAction: TouchAction, - - TouchInput: TouchInput, - MouseInput: MouseInput, - PointerEventInput: PointerEventInput, - TouchMouseInput: TouchMouseInput, - SingleTouchInput: SingleTouchInput, - - Recognizer: Recognizer, - AttrRecognizer: AttrRecognizer, - Tap: TapRecognizer, - Pan: PanRecognizer, - Swipe: SwipeRecognizer, - Pinch: PinchRecognizer, - Rotate: RotateRecognizer, - Press: PressRecognizer, - - on: addEventListeners, - off: removeEventListeners, - each: each, - merge: merge, - extend: extend, - inherit: inherit, - bindFn: bindFn, - prefixed: prefixed - }); - - if ("function" == TYPE_FUNCTION && __webpack_require__(6)) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return Hammer; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof module != 'undefined' && module.exports) { - module.exports = Hammer; - } else { - window[exportName] = Hammer; - } - - })(window, document, 'Hammer'); - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; - - /* WEBPACK VAR INJECTION */}.call(exports, {})) - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - // 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__(8); - var uuid = __webpack_require__(12); - - /** - * Test whether given object is a number - * @param {*} object - * @return {Boolean} isNumber - */ - exports.isNumber = function (object) { - return object instanceof Number || typeof object == 'number'; - }; - - /** - * Remove everything in the DOM object - * @param DOMobject - */ - exports.recursiveDOMDelete = function (DOMobject) { - if (DOMobject) { - while (DOMobject.hasChildNodes() === true) { - exports.recursiveDOMDelete(DOMobject.firstChild); - DOMobject.removeChild(DOMobject.firstChild); - } - } - }; - - /** - * this function gives you a range between 0 and 1 based on the min and max values in the set, the total sum of all values and the current value. - * - * @param min - * @param max - * @param total - * @param value - * @returns {number} - */ - exports.giveRange = function (min, max, total, value) { - if (max == min) { - return 0.5; - } else { - var scale = 1 / (max - min); - return Math.max(0, (value - min) * scale); - } - }; - - /** - * Test whether given object is a string - * @param {*} object - * @return {Boolean} isString - */ - exports.isString = function (object) { - return object instanceof String || typeof object == 'string'; - }; - - /** - * Test whether given object is a Date, or a String containing a Date - * @param {Date | String} object - * @return {Boolean} isDate - */ - exports.isDate = function (object) { - if (object instanceof Date) { - return true; - } else if (exports.isString(object)) { - // test whether this string contains a date - var match = ASPDateRegex.exec(object); - if (match) { - return true; - } else if (!isNaN(Date.parse(object))) { - return true; - } - } - - return false; - }; - - /** - * Create a semi UUID - * source: http://stackoverflow.com/a/105074/1262753 - * @return {String} uuid - */ - exports.randomUUID = function () { - return uuid.v4(); - }; - - /** - * assign all keys of an object that are not nested objects to a certain value (used for color objects). - * @param obj - * @param value - */ - exports.assignAllKeys = function (obj, value) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - if (typeof obj[prop] !== 'object') { - obj[prop] = value; - } - } - } - }; - - /** - * Fill an object with a possibly partially defined other object. Only copies values if the a object has an object requiring values. - * That means an object is not created on a property if only the b object has it. - * @param obj - * @param value - */ - exports.fillIfDefined = function (a, b) { - var allowDeletion = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; - - for (var prop in a) { - if (b[prop] !== undefined) { - 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') { - exports.fillIfDefined(a[prop], b[prop], allowDeletion); - } - } - } - } - }; - - /** - * Extend object a with the properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.protoExtend = function (a, b) { - for (var i = 1; i < arguments.length; i++) { - var other = arguments[i]; - for (var prop in other) { - a[prop] = other[prop]; - } - } - return a; - }; - - /** - * Extend object a with the properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Object} a - * @param {... Object} b - * @return {Object} a - */ - exports.extend = function (a, b) { - for (var i = 1; i < arguments.length; i++) { - var other = arguments[i]; - for (var prop in other) { - if (other.hasOwnProperty(prop)) { - a[prop] = other[prop]; - } - } - } - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {Object} b - * @return {Object} a - */ - exports.selectiveExtend = function (props, a, b) { - if (!Array.isArray(props)) { - throw new Error('Array with property names expected as first argument'); - } - - for (var i = 2; i < arguments.length; i++) { - var other = arguments[i]; - - for (var p = 0; p < props.length; p++) { - var prop = props[p]; - if (other.hasOwnProperty(prop)) { - a[prop] = other[prop]; - } - } - } - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {Object} b - * @return {Object} a - */ - exports.selectiveDeepExtend = function (props, a, b) { - var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - - // TODO: add support for Arrays to deepExtend - if (Array.isArray(b)) { - throw new TypeError('Arrays are not supported by deepExtend'); - } - for (var i = 2; i < arguments.length; i++) { - var other = arguments[i]; - for (var p = 0; p < props.length; p++) { - var prop = props[p]; - if (other.hasOwnProperty(prop)) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop], false, allowDeletion); - } else { - if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { - delete a[prop]; - } else { - a[prop] = b[prop]; - } - } - } else if (Array.isArray(b[prop])) { - throw new TypeError('Arrays are not supported by deepExtend'); - } else { - a[prop] = b[prop]; - } - } - } - } - return a; - }; - - /** - * Extend object a with selected properties of object b or a series of objects - * Only properties with defined values are copied - * @param {Array.} props - * @param {Object} a - * @param {Object} b - * @return {Object} a - */ - exports.selectiveNotDeepExtend = function (props, a, b) { - var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; - - // TODO: add support for Arrays to deepExtend - if (Array.isArray(b)) { - throw new TypeError('Arrays are not supported by deepExtend'); - } - for (var prop in b) { - if (b.hasOwnProperty(prop)) { - if (props.indexOf(prop) == -1) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop]); - } else { - if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { - delete a[prop]; - } else { - a[prop] = b[prop]; - } - } - } else if (Array.isArray(b[prop])) { - a[prop] = []; - for (var i = 0; i < b[prop].length; i++) { - a[prop].push(b[prop][i]); - } - } else { - a[prop] = b[prop]; - } - } - } - } - return a; - }; - - /** - * Deep extend an object a with the properties of object b - * @param {Object} a - * @param {Object} b - * @param [Boolean] protoExtend --> optional parameter. If true, the prototype values will also be extended. - * (ie. the options objects that inherit from others will also get the inherited options) - * @param [Boolean] global --> optional parameter. If true, the values of fields that are null will not deleted - * @returns {Object} - */ - exports.deepExtend = function (a, b, protoExtend, allowDeletion) { - for (var prop in b) { - if (b.hasOwnProperty(prop) || protoExtend === true) { - if (b[prop] && b[prop].constructor === Object) { - if (a[prop] === undefined) { - a[prop] = {}; - } - if (a[prop].constructor === Object) { - exports.deepExtend(a[prop], b[prop], protoExtend); - } else { - if (b[prop] === null && a[prop] !== undefined && allowDeletion === true) { - delete a[prop]; - } else { - a[prop] = b[prop]; - } - } - } else if (Array.isArray(b[prop])) { - a[prop] = []; - for (var i = 0; i < b[prop].length; i++) { - a[prop].push(b[prop][i]); - } - } else { - a[prop] = b[prop]; - } - } - } - return a; - }; - - /** - * Test whether all elements in two arrays are equal. - * @param {Array} a - * @param {Array} b - * @return {boolean} Returns true if both arrays have the same length and same - * elements. - */ - exports.equalArray = function (a, b) { - if (a.length != b.length) return false; - - for (var i = 0, len = a.length; i < len; i++) { - if (a[i] != b[i]) return false; - } - - return true; - }; - - /** - * Convert an object to another type - * @param {Boolean | Number | String | Date | Moment | Null | undefined} object - * @param {String | undefined} type Name of the type. Available types: - * 'Boolean', 'Number', 'String', - * 'Date', 'Moment', ISODate', 'ASPDate'. - * @return {*} object - * @throws Error - */ - exports.convert = function (object, type) { - var match; - - if (object === undefined) { - return undefined; - } - if (object === null) { - return null; - } - - if (!type) { - return object; - } - if (!(typeof type === 'string') && !(type instanceof String)) { - throw new Error('Type must be a string'); - } - - //noinspection FallthroughInSwitchStatementJS - switch (type) { - case 'boolean': - case 'Boolean': - return Boolean(object); - - case 'number': - case 'Number': - return Number(object.valueOf()); - - case 'string': - case 'String': - return String(object); - - case 'Date': - if (exports.isNumber(object)) { - return new Date(object); - } - if (object instanceof Date) { - return new Date(object.valueOf()); - } else if (moment.isMoment(object)) { - return new Date(object.valueOf()); - } - if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return new Date(Number(match[1])); // parse number - } else { - return moment(object).toDate(); // parse string - } - } else { - throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date'); - } - - case 'Moment': - if (exports.isNumber(object)) { - return moment(object); - } - if (object instanceof Date) { - return moment(object.valueOf()); - } else if (moment.isMoment(object)) { - return moment(object); - } - if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return moment(Number(match[1])); // parse number - } else { - return moment(object); // parse string - } - } else { - throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date'); - } - - case 'ISODate': - if (exports.isNumber(object)) { - return new Date(object); - } else if (object instanceof Date) { - return object.toISOString(); - } else if (moment.isMoment(object)) { - return object.toDate().toISOString(); - } else if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - if (match) { - // object is an ASP date - return new Date(Number(match[1])).toISOString(); // parse number - } else { - return new Date(object).toISOString(); // parse string - } - } else { - throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ISODate'); - } - - case 'ASPDate': - if (exports.isNumber(object)) { - return '/Date(' + object + ')/'; - } else if (object instanceof Date) { - return '/Date(' + object.valueOf() + ')/'; - } else if (exports.isString(object)) { - match = ASPDateRegex.exec(object); - var value; - if (match) { - // object is an ASP date - value = new Date(Number(match[1])).valueOf(); // parse number - } else { - value = new Date(object).valueOf(); // parse string - } - return '/Date(' + value + ')/'; - } else { - throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ASPDate'); - } - - default: - throw new Error('Unknown type "' + type + '"'); - } - }; - - // parse ASP.Net Date pattern, - // for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/' - // code from http://momentjs.com/ - var ASPDateRegex = /^\/?Date\((\-?\d+)/i; - - /** - * Get the type of an object, for example exports.getType([]) returns 'Array' - * @param {*} object - * @return {String} type - */ - exports.getType = function (object) { - var type = typeof object; - - 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'; - } - 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; - }; - - /** - * Used to extend an array and copy it. This is used to propagate paths recursively. - * - * @param arr - * @param newValue - * @returns {Array} - */ - exports.copyAndExtendArray = function (arr, newValue) { - var newArr = []; - for (var i = 0; i < arr.length; i++) { - newArr.push(arr[i]); - } - newArr.push(newValue); - return newArr; - }; - - /** - * Used to extend an array and copy it. This is used to propagate paths recursively. - * - * @param arr - * @param newValue - * @returns {Array} - */ - exports.copyArray = function (arr) { - var newArr = []; - for (var i = 0; i < arr.length; i++) { - newArr.push(arr[i]); - } - return newArr; - }; - - /** - * Retrieve the absolute left value of a DOM element - * @param {Element} elem A dom element, for example a div - * @return {number} left The absolute left position of this element - * in the browser page. - */ - exports.getAbsoluteLeft = function (elem) { - return elem.getBoundingClientRect().left; - }; - - /** - * Retrieve the absolute top value of a DOM element - * @param {Element} elem A dom element, for example a div - * @return {number} top The absolute top position of this element - * in the browser page. - */ - exports.getAbsoluteTop = function (elem) { - return elem.getBoundingClientRect().top; - }; - - /** - * add a className to the given elements style - * @param {Element} elem - * @param {String} className - */ - exports.addClassName = function (elem, className) { - var classes = elem.className.split(' '); - if (classes.indexOf(className) == -1) { - classes.push(className); // add the class to the array - elem.className = classes.join(' '); - } - }; - - /** - * add a className to the given elements style - * @param {Element} elem - * @param {String} className - */ - exports.removeClassName = function (elem, className) { - var classes = elem.className.split(' '); - var index = classes.indexOf(className); - if (index != -1) { - classes.splice(index, 1); // remove the class from the array - elem.className = classes.join(' '); - } - }; - - /** - * For each method for both arrays and objects. - * In case of an array, the built-in Array.forEach() is applied. - * In case of an Object, the method loops over all properties of the object. - * @param {Object | Array} object An Object or Array - * @param {function} callback Callback method, called for each item in - * the object or array with three parameters: - * callback(value, index, object) - */ - exports.forEach = function (object, callback) { - var i, len; - if (Array.isArray(object)) { - // array - for (i = 0, len = object.length; i < len; i++) { - callback(object[i], i, object); - } - } else { - // object - for (i in object) { - if (object.hasOwnProperty(i)) { - callback(object[i], i, object); - } - } - } - }; - - /** - * Convert an object into an array: all objects properties are put into the - * array. The resulting array is unordered. - * @param {Object} object - * @param {Array} array - */ - exports.toArray = function (object) { - var array = []; - - for (var prop in object) { - if (object.hasOwnProperty(prop)) array.push(object[prop]); - } - - return array; - }; - - /** - * Update a property in an object - * @param {Object} object - * @param {String} key - * @param {*} value - * @return {Boolean} changed - */ - exports.updateProperty = function (object, key, value) { - if (object[key] !== value) { - object[key] = value; - return true; - } else { - return false; - } - }; - - /** - * Add and event listener. Works for all browsers - * @param {Element} element An html element - * @param {string} action The action, for example "click", - * without the prefix "on" - * @param {function} listener The callback function to be executed - * @param {boolean} [useCapture] - */ - exports.addEventListener = function (element, action, listener, useCapture) { - if (element.addEventListener) { - if (useCapture === undefined) useCapture = false; - - if (action === 'mousewheel' && navigator.userAgent.indexOf('Firefox') >= 0) { - action = 'DOMMouseScroll'; // For Firefox - } - - element.addEventListener(action, listener, useCapture); - } else { - element.attachEvent('on' + action, listener); // IE browsers - } - }; - - /** - * Remove an event listener from an element - * @param {Element} element An html dom element - * @param {string} action The name of the event, for example "mousedown" - * @param {function} listener The listener function - * @param {boolean} [useCapture] - */ - exports.removeEventListener = function (element, action, listener, useCapture) { - if (element.removeEventListener) { - // non-IE browsers - if (useCapture === undefined) useCapture = false; + configFromArray(config); + checkOverflow(config); + } - if (action === 'mousewheel' && navigator.userAgent.indexOf('Firefox') >= 0) { - action = 'DOMMouseScroll'; // For Firefox + + function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } } - element.removeEventListener(action, listener, useCapture); - } else { - // IE browsers - element.detachEvent('on' + action, listener); - } - }; + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, - /** - * Cancels the event if it is cancelable, without stopping further propagation of the event. - */ - exports.preventDefault = function (event) { - if (!event) event = window.event; + scoreToBeat, + i, + currentScore; - if (event.preventDefault) { - event.preventDefault(); // non-IE browsers - } else { - event.returnValue = false; // IE browsers - } - }; + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } - /** - * Get HTML element which is the target of the event - * @param {Event} event - * @return {Element} target element - */ - exports.getTarget = function (event) { - // code from http://www.quirksmode.org/js/events_properties.html - if (!event) { - event = window.event; - } + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); - var target; + if (!valid__isValid(tempConfig)) { + continue; + } - if (event.target) { - target = event.target; - } else if (event.srcElement) { - target = event.srcElement; - } + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; - if (target.nodeType != undefined && target.nodeType == 3) { - // defeat Safari bug - target = target.parentNode; - } + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - return target; - }; + getParsingFlags(tempConfig).score = currentScore; - /** - * Check if given element contains given parent somewhere in the DOM tree - * @param {Element} element - * @param {Element} parent - */ - exports.hasParent = function (element, parent) { - var e = element; + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } - while (e) { - if (e === parent) { - return true; + extend(config, bestMoment || tempConfig); } - e = e.parentNode; - } - - return false; - }; - exports.option = {}; + function configFromObject(config) { + if (config._d) { + return; + } - /** - * Convert a value into a boolean - * @param {Boolean | function | undefined} value - * @param {Boolean} [defaultValue] - * @returns {Boolean} bool - */ - exports.option.asBoolean = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } + var i = normalizeObjectUnits(config._i); + config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond]; - if (value != null) { - return value != false; - } + configFromArray(config); + } - return defaultValue || null; - }; + function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } - /** - * Convert a value into a number - * @param {Boolean | function | undefined} value - * @param {Number} [defaultValue] - * @returns {Number} number - */ - exports.option.asNumber = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } + return res; + } - if (value != null) { - return Number(value) || defaultValue || null; - } + function prepareConfig (config) { + var input = config._i, + format = config._f; - return defaultValue || null; - }; + config._locale = config._locale || locale_locales__getLocale(config._l); - /** - * Convert a value into a string - * @param {String | function | undefined} value - * @param {String} [defaultValue] - * @returns {String} str - */ - exports.option.asString = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } + if (input === null || (format === undefined && input === '')) { + return valid__createInvalid({nullInput: true}); + } - if (value != null) { - return String(value); - } + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } - return defaultValue || null; - }; + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else if (isDate(input)) { + config._d = input; + } else { + configFromInput(config); + } - /** - * Convert a size or location into a string with pixels or a percentage - * @param {String | Number | function | undefined} value - * @param {String} [defaultValue] - * @returns {String} size - */ - exports.option.asSize = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } + return config; + } - if (exports.isString(value)) { - return value; - } else if (exports.isNumber(value)) { - return value + 'px'; - } else { - return defaultValue || null; - } - }; + function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof(input) === 'object') { + configFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + utils_hooks__hooks.createFromInputFallback(config); + } + } - /** - * Convert a value into a DOM element - * @param {HTMLElement | function | undefined} value - * @param {HTMLElement} [defaultValue] - * @returns {HTMLElement | null} dom - */ - exports.option.asElement = function (value, defaultValue) { - if (typeof value == 'function') { - value = value(); - } + function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; - return value || defaultValue || null; - }; + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; - /** - * http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb - * - * @param {String} hex - * @returns {{r: *, g: *, b: *}} | 255 range - */ - exports.hexToRGB = function (hex) { - // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") - var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; - hex = hex.replace(shorthandRegex, function (m, r, g, b) { - return r + r + g + g + b + b; - }); - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result ? { - r: parseInt(result[1], 16), - g: parseInt(result[2], 16), - b: parseInt(result[3], 16) - } : null; - }; + return createFromConfig(c); + } - /** - * This function takes color in hex format or rgb() or rgba() format and overrides the opacity. Returns rgba() string. - * @param color - * @param opacity - * @returns {*} - */ - exports.overrideOpacity = function (color, opacity) { - if (color.indexOf('rgba') != -1) { - return color; - } else if (color.indexOf('rgb') != -1) { - var rgb = color.substr(color.indexOf('(') + 1).replace(')', '').split(','); - return 'rgba(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ',' + opacity + ')'; - } else { - var rgb = exports.hexToRGB(color); - if (rgb == null) { - return color; - } else { - return 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + opacity + ')'; + function local__createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); } - } - }; - /** - * - * @param red 0 -- 255 - * @param green 0 -- 255 - * @param blue 0 -- 255 - * @returns {string} - * @constructor - */ - exports.RGBToHex = function (red, green, blue) { - return '#' + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1); - }; + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other < this ? this : other; + } + ); - /** - * Parse a color property into an object with border, background, and - * highlight colors - * @param {Object | String} color - * @return {Object} colorObject - */ - exports.parseColor = function (color) { - var c; - if (exports.isString(color) === true) { - if (exports.isValidRGB(color) === true) { - var rgb = color.substr(4).substr(0, color.length - 5).split(',').map(function (value) { - return parseInt(value); - }); - color = exports.RGBToHex(rgb[0], rgb[1], rgb[2]); - } - if (exports.isValidHex(color) === true) { - var hsv = exports.hexToHSV(color); - var lighterColorHSV = { h: hsv.h, s: hsv.s * 0.8, v: Math.min(1, hsv.v * 1.02) }; - var darkerColorHSV = { h: hsv.h, s: Math.min(1, hsv.s * 1.25), v: hsv.v * 0.8 }; - var darkerColorHex = exports.HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v); - var lighterColorHex = exports.HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v); - c = { - background: color, - border: darkerColorHex, - highlight: { - background: lighterColorHex, - border: darkerColorHex - }, - hover: { - background: lighterColorHex, - border: darkerColorHex + var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other > this ? this : other; } - }; - } else { - c = { - background: color, - border: color, - highlight: { - background: color, - border: color - }, - hover: { - background: color, - border: color + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; } - }; + if (!moments.length) { + return local__createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; } - } else { - c = {}; - c.background = color.background || undefined; - c.border = color.border || undefined; - if (exports.isString(color.highlight)) { - c.highlight = { - border: color.highlight, - background: color.highlight - }; - } else { - c.highlight = {}; - c.highlight.background = color.highlight && color.highlight.background || undefined; - c.highlight.border = color.highlight && color.highlight.border || undefined; + // TODO: Use [].sort instead? + function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); } - if (exports.isString(color.hover)) { - c.hover = { - border: color.hover, - background: color.hover - }; - } else { - c.hover = {}; - c.hover.background = color.hover && color.hover.background || undefined; - c.hover.border = color.hover && color.hover.border || undefined; + function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); } - } - return c; - }; + function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; - /** - * http://www.javascripter.net/faq/rgb2hsv.htm - * - * @param red - * @param green - * @param blue - * @returns {*} - * @constructor - */ - exports.RGBToHSV = function (red, green, blue) { - red = red / 255;green = green / 255;blue = blue / 255; - var minRGB = Math.min(red, Math.min(green, blue)); - var maxRGB = Math.max(red, Math.max(green, blue)); + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; - // Black-gray-white - if (minRGB == maxRGB) { - return { h: 0, s: 0, v: minRGB }; - } + this._data = {}; - // Colors other than black-gray-white: - var d = red == minRGB ? green - blue : blue == minRGB ? red - green : blue - red; - var h = red == minRGB ? 3 : blue == minRGB ? 1 : 5; - var hue = 60 * (h - d / (maxRGB - minRGB)) / 360; - var saturation = (maxRGB - minRGB) / maxRGB; - var value = maxRGB; - return { h: hue, s: saturation, v: value }; - }; + this._locale = locale_locales__getLocale(); - var cssUtil = { - // split a string with css styles into an object with key/values - split: function split(cssText) { - var styles = {}; + this._bubble(); + } - cssText.split(';').forEach(function (style) { - if (style.trim() != '') { - var parts = style.split(':'); - var key = parts[0].trim(); - var value = parts[1].trim(); - styles[key] = value; - } - }); + function isDuration (obj) { + return obj instanceof Duration; + } + + function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); + } - return styles; - }, + offset('Z', ':'); + offset('ZZ', ''); - // build a css text string from an object with key/values - join: function join(styles) { - return Object.keys(styles).map(function (key) { - return key + ': ' + styles[key]; - }).join('; '); - } - }; + // PARSING - /** - * Append a string with css styles to an element - * @param {Element} element - * @param {String} cssText - */ - exports.addCssText = function (element, cssText) { - var currentStyles = cssUtil.split(element.style.cssText); - var newStyles = cssUtil.split(cssText); - var styles = exports.extend(currentStyles, newStyles); + addRegexToken('Z', matchOffset); + addRegexToken('ZZ', matchOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(input); + }); - element.style.cssText = cssUtil.join(styles); - }; + // HELPERS - /** - * Remove a string with css styles from an element - * @param {Element} element - * @param {String} cssText - */ - exports.removeCssText = function (element, cssText) { - var styles = cssUtil.split(element.style.cssText); - var removeStyles = cssUtil.split(cssText); + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; - for (var key in removeStyles) { - if (removeStyles.hasOwnProperty(key)) { - delete styles[key]; - } - } + function offsetFromString(string) { + var matches = ((string || '').match(matchOffset) || []); + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); - element.style.cssText = cssUtil.join(styles); - }; + return parts[0] === '+' ? minutes : -minutes; + } - /** - * https://gist.github.com/mjijackson/5311256 - * @param h - * @param s - * @param v - * @returns {{r: number, g: number, b: number}} - * @constructor - */ - exports.HSVToRGB = function (h, s, v) { - var r, g, b; + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + utils_hooks__hooks.updateOffset(res, false); + return res; + } else { + return local__createLocal(input).local(); + } + } - var i = Math.floor(h * 6); - var f = h * 6 - i; - var p = v * (1 - s); - var q = v * (1 - f * s); - var t = v * (1 - (1 - f) * s); + function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; + } - switch (i % 6) { - case 0: - r = v, g = t, b = p;break; - case 1: - r = q, g = v, b = p;break; - case 2: - r = p, g = v, b = t;break; - case 3: - r = p, g = q, b = v;break; - case 4: - r = t, g = p, b = v;break; - case 5: - r = v, g = p, b = q;break; - } + // HOOKS - return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) }; - }; + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + utils_hooks__hooks.updateOffset = function () {}; - exports.HSVToHex = function (h, s, v) { - var rgb = exports.HSVToRGB(h, s, v); - return exports.RGBToHex(rgb.r, rgb.g, rgb.b); - }; + // MOMENTS - exports.hexToHSV = function (hex) { - var rgb = exports.hexToRGB(hex); - return exports.RGBToHSV(rgb.r, rgb.g, rgb.b); - }; + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + utils_hooks__hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } - exports.isValidHex = function (hex) { - var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex); - return isOk; - }; + function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } - exports.isValidRGB = function (rgb) { - rgb = rgb.replace(' ', ''); - var isOk = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(rgb); - return isOk; - }; - exports.isValidRGBA = function (rgba) { - rgba = rgba.replace(' ', ''); - var isOk = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(rgba); - return isOk; - }; + this.utcOffset(input, keepLocalTime); - /** - * This recursively redirects the prototype of JSON objects to the referenceObject - * This is used for default options. - * - * @param referenceObject - * @returns {*} - */ - exports.selectiveBridgeObject = function (fields, referenceObject) { - if (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') { - objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]); + return this; + } else { + return -this.utcOffset(); } - } } - return objectTo; - } else { - return null; - } - }; - /** - * This recursively redirects the prototype of JSON objects to the referenceObject - * This is used for default options. - * - * @param referenceObject - * @returns {*} - */ - exports.bridgeObject = function (referenceObject) { - if (typeof referenceObject == 'object') { - var objectTo = Object.create(referenceObject); - for (var i in referenceObject) { - if (referenceObject.hasOwnProperty(i)) { - if (typeof referenceObject[i] == 'object') { - objectTo[i] = exports.bridgeObject(referenceObject[i]); - } - } + function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); } - return objectTo; - } else { - return null; - } - }; - /** - * this is used to set the options of subobjects in the options object. A requirement of these subobjects - * is that they have an 'enabled' element which is optional for the user but mandatory for the program. - * - * @param [object] mergeTarget | this is either this.options or the options used for the groups. - * @param [object] options | options - * @param [String] option | this is the option key in the options argument - * @private - */ - exports.mergeOptions = function (mergeTarget, options, option) { - var allowDeletion = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3]; + function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; - if (options[option] === null) { - mergeTarget[option] = undefined; - delete mergeTarget[option]; - } else { - if (options[option] !== undefined) { - if (typeof options[option] === 'boolean') { - mergeTarget[option].enabled = options[option]; - } else { - if (options[option].enabled === undefined) { - mergeTarget[option].enabled = true; - } - for (var prop in options[option]) { - if (options[option].hasOwnProperty(prop)) { - mergeTarget[option][prop] = options[option][prop]; - } + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } } - } + return this; } - } - }; - /** - * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses - * this function will then iterate in both directions over this sorted list to find all visible items. - * - * @param {Item[]} orderedItems | Items ordered by start - * @param {function} searchFunction | -1 is lower, 0 is found, 1 is higher - * @param {String} field - * @param {String} field2 - * @returns {number} - * @private - */ - exports.binarySearchCustom = function (orderedItems, searchFunction, field, field2) { - var maxIterations = 10000; - var iteration = 0; - var low = 0; - var high = orderedItems.length - 1; + function setOffsetToParsedOffset () { + if (this._tzm) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + this.utcOffset(offsetFromString(this._i)); + } + return this; + } - while (low <= high && iteration < maxIterations) { - var middle = Math.floor((low + high) / 2); + function hasAlignedHourOffset (input) { + input = input ? local__createLocal(input).utcOffset() : 0; - var item = orderedItems[middle]; - var value = field2 === undefined ? item[field] : item[field][field2]; + return (this.utcOffset() - input) % 60 === 0; + } - var searchResult = searchFunction(value); - if (searchResult == 0) { - // jihaa, found a visible item! - return middle; - } else if (searchResult == -1) { - // it is too small --> increase low - low = middle + 1; - } else { - // it is too big --> decrease high - high = middle - 1; + function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); } - iteration++; - } + function isDaylightSavingTimeShifted () { + if (typeof this._isDSTShifted !== 'undefined') { + return this._isDSTShifted; + } - return -1; - }; + var c = {}; - /** - * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of - * two values, we return either the one before or the one after, depending on user input - * If it is found, we return the index, else -1. - * - * @param {Array} orderedItems - * @param {{start: number, end: number}} target - * @param {String} field - * @param {String} sidePreference 'before' or 'after' - * @returns {number} - * @private - */ - exports.binarySearchValue = function (orderedItems, target, field, sidePreference) { - var maxIterations = 10000; - var iteration = 0; - var low = 0; - var high = orderedItems.length - 1; - var prevValue, value, nextValue, middle; + copyConfig(c, this); + c = prepareConfig(c); - while (low <= high && iteration < maxIterations) { - // get a new guess - middle = Math.floor(0.5 * (high + low)); - prevValue = orderedItems[Math.max(0, middle - 1)][field]; - value = orderedItems[middle][field]; - nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field]; + if (c._a) { + var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } - if (value == target) { - // we found the target - return middle; - } else if (prevValue < target && value > target) { - // target is in between of the previous and the current - return sidePreference == 'before' ? Math.max(0, middle - 1) : middle; - } else if (value < target && nextValue > target) { - // target is in between of the current and the next - return sidePreference == 'before' ? middle : Math.min(orderedItems.length - 1, middle + 1); - } else { - // didnt find the target, we need to change our boundaries. - if (value < target) { - // it is too small --> increase low - low = middle + 1; - } else { - // it is too big --> decrease high - high = middle - 1; - } + return this._isDSTShifted; } - iteration++; - } - - // didnt find anything. Return -1. - return -1; - }; - /* - * Easing Functions - inspired from http://gizma.com/easing/ - * only considering the t value for the range [0, 1] => [0, 1] - * https://gist.github.com/gre/1650294 - */ - exports.easingFunctions = { - // no easing, no acceleration - linear: function linear(t) { - return t; - }, - // accelerating from zero velocity - easeInQuad: function easeInQuad(t) { - return t * t; - }, - // decelerating to zero velocity - easeOutQuad: function easeOutQuad(t) { - return t * (2 - t); - }, - // acceleration until halfway, then deceleration - easeInOutQuad: function easeInOutQuad(t) { - return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t; - }, - // accelerating from zero velocity - easeInCubic: function easeInCubic(t) { - return t * t * t; - }, - // decelerating to zero velocity - easeOutCubic: function easeOutCubic(t) { - return --t * t * t + 1; - }, - // acceleration until halfway, then deceleration - easeInOutCubic: function easeInOutCubic(t) { - return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1; - }, - // accelerating from zero velocity - easeInQuart: function easeInQuart(t) { - return t * t * t * t; - }, - // decelerating to zero velocity - easeOutQuart: function easeOutQuart(t) { - return 1 - --t * t * t * t; - }, - // acceleration until halfway, then deceleration - easeInOutQuart: function easeInOutQuart(t) { - return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t; - }, - // accelerating from zero velocity - easeInQuint: function easeInQuint(t) { - return t * t * t * t * t; - }, - // decelerating to zero velocity - easeOutQuint: function easeOutQuint(t) { - return 1 + --t * t * t * t * t; - }, - // acceleration until halfway, then deceleration - easeInOutQuint: function easeInOutQuint(t) { - return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t; - } - }; + function isLocal () { + return !this._isUTC; + } -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { + function isUtcOffset () { + return this._isUTC; + } - // first check if moment.js is already loaded in the browser window, if so, - // use this instance. Else, load via commonjs. - 'use strict'; + function isUtc () { + return this._isUTC && this._offset === 0; + } - module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(9); + var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { + // 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 create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; - /* WEBPACK VAR INJECTION */(function(module) {//! moment.js - //! version : 2.10.5 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com + function create__createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; - (function (global, factory) { - true ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() - }(this, function () { 'use strict'; + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = create__isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + 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) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - var hookCallback; + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } + ret = new Duration(duration); - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; + return ret; } - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } + create__createDuration.fn = Duration.prototype; - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; + function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; } - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; } - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; + return res; + } + + function momentsDifference(base, other) { + var res; + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; } - return a; + return res; } - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); + tmp = val; val = period; period = tmp; + } - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false + val = typeof val === 'string' ? +val : val; + dur = create__createDuration(val, period); + add_subtract__addSubtract(this, dur, direction); + return this; }; } - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - m._isValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated; + function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; - if (m._strict) { - m._isValid = m._isValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); + if (days) { + get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); } - else { - getParsingFlags(m).userInvalidated = true; + if (months) { + setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + utils_hooks__hooks.updateOffset(mom, days || months); } - - return m; } - var momentProperties = utils_hooks__hooks.momentProperties = []; + var add_subtract__add = createAdder(1, 'add'); + var add_subtract__subtract = createAdder(-1, 'subtract'); - function copyConfig(to, from) { - var i, prop, val; + function moment_calendar__calendar (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || local__createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now))); + } - if (typeof from._isAMomentObject !== 'undefined') { - to._isAMomentObject = from._isAMomentObject; - } - if (typeof from._i !== 'undefined') { - to._i = from._i; - } - if (typeof from._f !== 'undefined') { - to._f = from._f; - } - if (typeof from._l !== 'undefined') { - to._l = from._l; - } - if (typeof from._strict !== 'undefined') { - to._strict = from._strict; - } - if (typeof from._tzm !== 'undefined') { - to._tzm = from._tzm; - } - if (typeof from._isUTC !== 'undefined') { - to._isUTC = from._isUTC; - } - if (typeof from._offset !== 'undefined') { - to._offset = from._offset; - } - if (typeof from._pf !== 'undefined') { - to._pf = getParsingFlags(from); - } - if (typeof from._locale !== 'undefined') { - to._locale = from._locale; - } + function clone () { + return new Moment(this); + } - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } + function isAfter (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this > +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return inputMs < +this.clone().startOf(units); } - - return to; } - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d.getTime()); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; + function isBefore (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this < +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return +this.clone().endOf(units) < inputMs; } } - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); + function isBetween (from, to, units) { + return this.isAfter(from, units) && this.isBefore(to, units); } - function absFloor (number) { - if (number < 0) { - return Math.ceil(number); + function isSame (input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this === +input; } else { - return Math.floor(number); + inputMs = +local__createLocal(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); } } - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } + function diff (input, units, asFloat) { + var that = cloneWithOffset(input, this), + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4, + delta, output; - return value; - } + units = normalizeUnits(units); - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; } - return diffs + lengthDiff; + return asFloat ? output : absFloor(output); } - function Locale() { - } + function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; - var locales = {}; - var globalLocale; + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; + return -(wholeMonthDiff + adjust); } - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; + utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; + function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); } - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && typeof module !== 'undefined' && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } + function moment_format__toISOString () { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if ('function' === typeof Date.prototype.toISOString) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); } - return locales[name]; } - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (typeof values === 'undefined') { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } + function format (inputString) { + var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); + return this.localeData().postformat(output); + } - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } + function from (time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); } - - return globalLocale._abbr; + return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); } - function defineLocale (name, values) { - if (values !== null) { - values.abbr = name; - locales[name] = locales[name] || new Locale(); - locales[name].set(values); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); + function fromNow (withoutSuffix) { + return this.from(local__createLocal(), withoutSuffix); + } - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; + function to (time, withoutSuffix) { + if (!this.isValid()) { + return this.localeData().invalidDate(); } + return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); } - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } + function toNow (withoutSuffix) { + return this.to(local__createLocal(), withoutSuffix); + } - if (!key) { - return globalLocale; - } + function locale (key) { + var newLocaleData; - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = locale_locales__getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; } - key = [key]; + return this; } - - return chooseLocale(key); } - var aliases = {}; + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + function localeData () { + return this._locale; } - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } + function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); } - return normalizedInput; + return this; + } + + function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); } - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; + function to_type__valueOf () { + return +this._d - ((this._offset || 0) * 60000); } - function get_set__get (mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + function unix () { + return Math.floor(+this / 1000); } - function get_set__set (mom, unit, value) { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + function toDate () { + return this._offset ? new Date(+this) : this._d; } - // MOMENTS + function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; + } - function getSet (units, value) { - var unit; - if (typeof units === 'object') { - for (unit in units) { - this.set(unit, units[unit]); - } - } else { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - return this[units](value); - } - } - return this; + function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; } - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; + function moment_valid__isValid () { + return valid__isValid(this); } - var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + function parsingFlags () { + return extend({}, getParsingFlags(this)); + } - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + function invalidAt () { + return getParsingFlags(this).overflow; + } - var formatFunctions = {}; + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); - var formatTokenFunctions = {}; + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } + function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); } - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; + // ALIASES - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } + // PARSING - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + }); - return formatFunctions[format](m); - } + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = utils_hooks__hooks.parseTwoDigitYear(input); + }); - function expandFormat(format, locale) { - var i = 5; + // HELPERS - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } + function weeksInYear(year, dow, doy) { + return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week; + } - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } + // MOMENTS - return format; + function getSetWeekYear (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); } - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf + function getSetISOWeekYear (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + } - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z + function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); + } - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } - // any word (or two) characters or numbers including two/three word month in arabic. - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + addFormatToken('Q', 0, 0, 'quarter'); - var regexes = {}; + // ALIASES - function isFunction (sth) { - // https://github.com/moment/moment/issues/2325 - return typeof sth === 'function' && - Object.prototype.toString.call(sth) === '[object Function]'; - } + addUnitAlias('quarter', 'Q'); + // PARSING - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } + // MOMENTS - return regexes[token](config._strict, config._locale); + function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); } - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } + addFormatToken('D', ['DD', 2], 'Do', 'date'); - var tokens = {}; + // ALIASES - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } + addUnitAlias('date', 'D'); - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } + // PARSING - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; + }); - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); + }); - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } + // MOMENTS - // FORMATTING + var getSetDayOfMonth = makeGetSet('Date', true); - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); }); - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); }); - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); }); + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + // ALIASES - addUnitAlias('month', 'M'); + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); // PARSING - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', matchWord); - addRegexToken('MMMM', matchWord); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', matchWord); + addRegexToken('ddd', matchWord); + addRegexToken('dddd', matchWord); - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) { + var weekday = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; } else { - getParsingFlags(config).invalidMonth = input; + getParsingFlags(config).invalidWeekday = input; } }); + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + // LOCALES - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m) { - return this._months[m.month()]; + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); + function localeWeekdays (m) { + return this._weekdays[m.day()]; } - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m) { - return this._monthsShort[m.month()]; + var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); + function localeWeekdaysShort (m) { + return this._weekdaysShort[m.day()]; } - function localeMonthsParse (monthName, format, strict) { + var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); + function localeWeekdaysMin (m) { + return this._weekdaysMin[m.day()]; + } + + function localeWeekdaysParse (weekdayName) { var i, mom, regex; - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } + this._weekdaysParse = this._weekdaysParse || []; - for (i = 0; i < 12; i++) { + for (i = 0; i < 7; i++) { // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + if (!this._weekdaysParse[i]) { + mom = local__createLocal([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); } // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { + if (this._weekdaysParse[i].test(weekdayName)) { return i; } } @@ -5428,8326 +3856,9416 @@ return /******/ (function(modules) { // webpackBootstrap // MOMENTS - function setMonth (mom, value) { - var dayOfMonth; - - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } + function getSetDayOfWeek (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; } + } - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; + function getSetLocaleDayOfWeek (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); } - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } + function getSetISODayOfWeek (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); } - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, function () { + return this.hours() % 12 || 12; + }); + + function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); } - function checkOverflow (m) { - var overflow; - var a = m._a; + meridiem('a', true); + meridiem('A', false); - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; + // ALIASES - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } + addUnitAlias('hour', 'h'); - getParsingFlags(m).overflow = overflow; + // PARSING + + function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + + // LOCALES + + function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; + function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; } - - 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; + // MOMENTS - return extend(function () { - if (firstTime) { - warn(msg + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + var getSetHour = makeGetSet('Hours', true); - var deprecations = {}; + addFormatToken('m', ['mm', 2], 0, 'minute'); - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } + // ALIASES - utils_hooks__hooks.suppressDeprecationWarnings = false; + addUnitAlias('minute', 'm'); - var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + // PARSING - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ]; + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ]; + // MOMENTS - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + var getSetMinute = makeGetSet('Minutes', false); - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = from_string__isoRegex.exec(string); + addFormatToken('s', ['ss', 2], 0, 'second'); - if (match) { - getParsingFlags(config).iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - config._f = isoDates[i][0]; - break; - } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - // match[6] should be 'T' or space - config._f += (match[6] || ' ') + isoTimes[i][0]; - break; - } - } - if (string.match(matchOffset)) { - config._f += 'Z'; - } - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } + // ALIASES - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); + addUnitAlias('second', 's'); - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } + // PARSING - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); - utils_hooks__hooks.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); + // MOMENTS - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); + var getSetSecond = makeGetSet('Seconds', false); - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; - } + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); - } - return date; - } + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; }); - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES - addUnitAlias('year', 'y'); + addUnitAlias('millisecond', 'ms'); // PARSING - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); - // HELPERS + var token; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); } - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); } + // MOMENTS - // HOOKS + var getSetMillisecond = makeGetSet('Milliseconds', false); - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS - var getSetYear = makeGetSet('FullYear', false); + function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; + } - function getIsLeapYear () { - return isLeapYear(this.year()); + function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; } - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + var momentPrototype__proto = Moment.prototype; - // ALIASES + momentPrototype__proto.add = add_subtract__add; + momentPrototype__proto.calendar = moment_calendar__calendar; + momentPrototype__proto.clone = clone; + momentPrototype__proto.diff = diff; + momentPrototype__proto.endOf = endOf; + momentPrototype__proto.format = format; + momentPrototype__proto.from = from; + momentPrototype__proto.fromNow = fromNow; + momentPrototype__proto.to = to; + momentPrototype__proto.toNow = toNow; + momentPrototype__proto.get = getSet; + momentPrototype__proto.invalidAt = invalidAt; + momentPrototype__proto.isAfter = isAfter; + momentPrototype__proto.isBefore = isBefore; + momentPrototype__proto.isBetween = isBetween; + momentPrototype__proto.isSame = isSame; + momentPrototype__proto.isValid = moment_valid__isValid; + momentPrototype__proto.lang = lang; + momentPrototype__proto.locale = locale; + momentPrototype__proto.localeData = localeData; + momentPrototype__proto.max = prototypeMax; + momentPrototype__proto.min = prototypeMin; + momentPrototype__proto.parsingFlags = parsingFlags; + momentPrototype__proto.set = getSet; + momentPrototype__proto.startOf = startOf; + momentPrototype__proto.subtract = add_subtract__subtract; + momentPrototype__proto.toArray = toArray; + momentPrototype__proto.toObject = toObject; + momentPrototype__proto.toDate = toDate; + momentPrototype__proto.toISOString = moment_format__toISOString; + momentPrototype__proto.toJSON = moment_format__toISOString; + momentPrototype__proto.toString = toString; + momentPrototype__proto.unix = unix; + momentPrototype__proto.valueOf = to_type__valueOf; - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); + // Year + momentPrototype__proto.year = getSetYear; + momentPrototype__proto.isLeapYear = getIsLeapYear; - // PARSING + // Week Year + momentPrototype__proto.weekYear = getSetWeekYear; + momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); + // Quarter + momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); + // Month + momentPrototype__proto.month = getSetMonth; + momentPrototype__proto.daysInMonth = getDaysInMonth; - // HELPERS + // Week + momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; + momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; + momentPrototype__proto.weeksInYear = getWeeksInYear; + momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; + // Day + momentPrototype__proto.date = getSetDayOfMonth; + momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; + momentPrototype__proto.weekday = getSetLocaleDayOfWeek; + momentPrototype__proto.isoWeekday = getSetISODayOfWeek; + momentPrototype__proto.dayOfYear = getSetDayOfYear; + // Hour + momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } + // Minute + momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } + // Second + momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; - } + // Millisecond + momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - // LOCALES + // Offset + momentPrototype__proto.utcOffset = getSetOffset; + momentPrototype__proto.utc = setOffsetToUTC; + momentPrototype__proto.local = setOffsetToLocal; + momentPrototype__proto.parseZone = setOffsetToParsedOffset; + momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; + momentPrototype__proto.isDST = isDaylightSavingTime; + momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; + momentPrototype__proto.isLocal = isLocal; + momentPrototype__proto.isUtcOffset = isUtcOffset; + momentPrototype__proto.isUtc = isUtc; + momentPrototype__proto.isUTC = isUtc; - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } + // Timezone + momentPrototype__proto.zoneAbbr = getZoneAbbr; + momentPrototype__proto.zoneName = getZoneName; - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; + // Deprecations + momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); + momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); + momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); + momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); - function localeFirstDayOfWeek () { - return this._week.dow; - } + var momentPrototype = momentPrototype__proto; - function localeFirstDayOfYear () { - return this._week.doy; + function moment__createUnix (input) { + return local__createLocal(input * 1000); } - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); + function moment__createInZone () { + return local__createLocal.apply(null, arguments).parseZone(); } - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); + var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }; + + function locale_calendar__calendar (key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.call(mom, now) : output; } - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + var defaultLongDateFormat = { + 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' + }; - // ALIASES + function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; - addUnitAlias('dayOfYear', 'DDD'); + if (format || !formatUpper) { + return format; + } - // PARSING + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); + return this._longDateFormat[key]; + } - // HELPERS + var defaultInvalidDate = 'Invalid date'; - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear; - if (d < firstDayOfWeek) { - d += 7; - } + function invalidDate () { + return this._invalidDate; + } - weekday = weekday != null ? 1 * weekday : firstDayOfWeek; + var defaultOrdinal = '%d'; + var defaultOrdinalParse = /\d{1,2}/; - dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday; + function ordinal (number) { + return this._ordinal.replace('%d', number); + } - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; + function preParsePostFormat (string) { + return string; } - // MOMENTS + var defaultRelativeTime = { + 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' + }; - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + function relative__relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); } - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; + function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); } - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; + function locale_set__set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } } - return [now.getFullYear(), now.getMonth(), now.getDate()]; + // 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); } - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; + var prototype__proto = Locale.prototype; - if (config._d) { - return; - } + prototype__proto._calendar = defaultCalendar; + prototype__proto.calendar = locale_calendar__calendar; + prototype__proto._longDateFormat = defaultLongDateFormat; + prototype__proto.longDateFormat = longDateFormat; + prototype__proto._invalidDate = defaultInvalidDate; + prototype__proto.invalidDate = invalidDate; + prototype__proto._ordinal = defaultOrdinal; + prototype__proto.ordinal = ordinal; + prototype__proto._ordinalParse = defaultOrdinalParse; + prototype__proto.preparse = preParsePostFormat; + prototype__proto.postformat = preParsePostFormat; + prototype__proto._relativeTime = defaultRelativeTime; + prototype__proto.relativeTime = relative__relativeTime; + prototype__proto.pastFuture = pastFuture; + prototype__proto.set = locale_set__set; - currentDate = currentDateArray(config); + // Month + prototype__proto.months = localeMonths; + prototype__proto._months = defaultLocaleMonths; + prototype__proto.monthsShort = localeMonthsShort; + prototype__proto._monthsShort = defaultLocaleMonthsShort; + prototype__proto.monthsParse = localeMonthsParse; - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } + // Week + prototype__proto.week = localeWeek; + prototype__proto._week = defaultLocaleWeek; + prototype__proto.firstDayOfYear = localeFirstDayOfYear; + prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + // Day of Week + prototype__proto.weekdays = localeWeekdays; + prototype__proto._weekdays = defaultLocaleWeekdays; + prototype__proto.weekdaysMin = localeWeekdaysMin; + prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; + prototype__proto.weekdaysShort = localeWeekdaysShort; + prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; + prototype__proto.weekdaysParse = localeWeekdaysParse; - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } + // Hours + prototype__proto.isPM = localeIsPM; + prototype__proto._meridiemParse = defaultLocaleMeridiemParse; + prototype__proto.meridiem = localeMeridiem; - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } + function lists__get (format, index, field, setter) { + var locale = locale_locales__getLocale(); + var utc = create_utc__createUTC().set(setter, index); + return locale[field](utc, format); + } - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; + function list (format, index, field, count, setter) { + if (typeof format === 'number') { + index = format; + format = undefined; } - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } + format = format || ''; - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; + if (index != null) { + return lists__get(format, index, field, setter); } - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + var i; + var out = []; + for (i = 0; i < count; i++) { + out[i] = lists__get(format, i, field, setter); } + return out; + } - if (config._nextDay) { - config._a[HOUR] = 24; - } + function lists__listMonths (format, index) { + return list(format, index, 'months', 12, 'month'); } - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; + function lists__listMonthsShort (format, index) { + return list(format, index, 'monthsShort', 12, 'month'); + } - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; + function lists__listWeekdays (format, index) { + return list(format, index, 'weekdays', 7, 'day'); + } - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; + function lists__listWeekdaysShort (format, index) { + return list(format, index, 'weekdaysShort', 7, 'day'); + } - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); + function lists__listWeekdaysMin (format, index) { + return list(format, index, 'weekdaysMin', 7, 'day'); + } - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; - } + locale_locales__getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } + }); - utils_hooks__hooks.ISO_8601 = function () {}; + // Side effect imports + utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); + utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } + var mathAbs = Math.abs; - config._a = []; - getParsingFlags(config).empty = true; + function duration_abs__abs () { + var data = this._data; - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } + return this; + } - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } + function duration_add_subtract__addSubtract (duration, input, value, direction) { + var other = create__createDuration(input, value); - // clear _12h flag if hour is <= 12 - if (getParsingFlags(config).bigHour === true && - config._a[HOUR] <= 12 && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; - configFromArray(config); - checkOverflow(config); + return duration._bubble(); } + // supports only 2.0-style add(1, 's') or add(duration) + function duration_add_subtract__add (input, value) { + return duration_add_subtract__addSubtract(this, input, value, 1); + } - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function duration_add_subtract__subtract (input, value) { + return duration_add_subtract__addSubtract(this, input, value, -1); + } - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; + function absCeil (number) { + if (number < 0) { + return Math.floor(number); } else { - // this is not supposed to happen - return hour; + return Math.ceil(number); } } - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; + function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; } - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; - getParsingFlags(tempConfig).score = currentScore; + hours = absFloor(minutes / 60); + data.hours = hours % 24; - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } + days += absFloor(hours / 24); - extend(config, bestMoment || tempConfig); - } + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); - function configFromObject(config) { - if (config._d) { - return; - } + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; - var i = normalizeObjectUnits(config._i); - config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond]; + data.days = days; + data.months = months; + data.years = years; - configFromArray(config); + return this; } - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; + function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; } - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); + function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; + } - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } + function as (units) { + var days; + var months; + var milliseconds = this._milliseconds; - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } + units = normalizeUnits(units); - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (format) { - configFromStringAndFormat(config); - } else if (isDate(input)) { - config._d = input; + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; } else { - configFromInput(config); + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } } + } - return config; + // TODO: Use this.as('ms')? + function duration_as__valueOf () { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); } - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } + function makeAs (alias) { + return function () { + return this.as(alias); + }; } - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; + var asMilliseconds = makeAs('ms'); + var asSeconds = makeAs('s'); + var asMinutes = makeAs('m'); + var asHours = makeAs('h'); + var asDays = makeAs('d'); + var asWeeks = makeAs('w'); + var asMonths = makeAs('M'); + var asYears = makeAs('y'); - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; + function duration_get__get (units) { + units = normalizeUnits(units); + return this[units + 's'](); + } - return createFromConfig(c); + function makeGetter(name) { + return function () { + return this._data[name]; + }; } - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); + var milliseconds = makeGetter('milliseconds'); + var seconds = makeGetter('seconds'); + var minutes = makeGetter('minutes'); + var hours = makeGetter('hours'); + var days = makeGetter('days'); + var months = makeGetter('months'); + var years = makeGetter('years'); + + function weeks () { + return absFloor(this.days() / 7); } - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - return other < this ? this : other; - } - ); + var round = Math.round; + var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }; - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function () { - var other = local__createLocal.apply(null, arguments); - return other > this ? this : other; - } - ); + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); + function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { + var duration = create__createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set a threshold for relative time strings + function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } + if (limit === undefined) { + return thresholds[threshold]; } - return res; + thresholds[threshold] = limit; + return true; } - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); + function humanize (withSuffix) { + var locale = this.localeData(); + var output = duration_humanize__relativeTime(this, !withSuffix, locale); - return pickBy('isBefore', args); + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); } - function max () { - var args = [].slice.call(arguments, 0); + var iso_string__abs = Math.abs; - return pickBy('isAfter', args); - } + function iso_string__toISOString() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = iso_string__abs(this._milliseconds) / 1000; + var days = iso_string__abs(this._days); + var months = iso_string__abs(this._months); + var minutes, hours, years; - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; - this._data = {}; - this._locale = locale_locales__getLocale(); + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); - this._bubble(); - } + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } - function isDuration (obj) { - return obj instanceof Duration; + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); } - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } + var duration_prototype__proto = Duration.prototype; - offset('Z', ':'); - offset('ZZ', ''); + duration_prototype__proto.abs = duration_abs__abs; + duration_prototype__proto.add = duration_add_subtract__add; + duration_prototype__proto.subtract = duration_add_subtract__subtract; + duration_prototype__proto.as = as; + duration_prototype__proto.asMilliseconds = asMilliseconds; + duration_prototype__proto.asSeconds = asSeconds; + duration_prototype__proto.asMinutes = asMinutes; + duration_prototype__proto.asHours = asHours; + duration_prototype__proto.asDays = asDays; + duration_prototype__proto.asWeeks = asWeeks; + duration_prototype__proto.asMonths = asMonths; + duration_prototype__proto.asYears = asYears; + duration_prototype__proto.valueOf = duration_as__valueOf; + duration_prototype__proto._bubble = bubble; + duration_prototype__proto.get = duration_get__get; + duration_prototype__proto.milliseconds = milliseconds; + duration_prototype__proto.seconds = seconds; + duration_prototype__proto.minutes = minutes; + duration_prototype__proto.hours = hours; + duration_prototype__proto.days = days; + duration_prototype__proto.weeks = weeks; + duration_prototype__proto.months = months; + duration_prototype__proto.years = years; + duration_prototype__proto.humanize = humanize; + duration_prototype__proto.toISOString = iso_string__toISOString; + duration_prototype__proto.toString = iso_string__toISOString; + duration_prototype__proto.toJSON = iso_string__toISOString; + duration_prototype__proto.locale = locale; + duration_prototype__proto.localeData = localeData; + + // Deprecations + duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); + duration_prototype__proto.lang = lang; + + // Side effect imports + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); // PARSING - addRegexToken('Z', matchOffset); - addRegexToken('ZZ', matchOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(input); + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); }); - // HELPERS + // Side effect imports - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - function offsetFromString(string) { - var matches = ((string || '').match(matchOffset) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); + utils_hooks__hooks.version = '2.10.6'; - return parts[0] === '+' ? minutes : -minutes; - } + setHookCallback(local__createLocal); - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } + utils_hooks__hooks.fn = momentPrototype; + utils_hooks__hooks.min = min; + utils_hooks__hooks.max = max; + utils_hooks__hooks.utc = create_utc__createUTC; + utils_hooks__hooks.unix = moment__createUnix; + utils_hooks__hooks.months = lists__listMonths; + utils_hooks__hooks.isDate = isDate; + utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; + utils_hooks__hooks.invalid = valid__createInvalid; + utils_hooks__hooks.duration = create__createDuration; + utils_hooks__hooks.isMoment = isMoment; + utils_hooks__hooks.weekdays = lists__listWeekdays; + utils_hooks__hooks.parseZone = moment__createInZone; + utils_hooks__hooks.localeData = locale_locales__getLocale; + utils_hooks__hooks.isDuration = isDuration; + utils_hooks__hooks.monthsShort = lists__listMonthsShort; + utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; + utils_hooks__hooks.defineLocale = defineLocale; + utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; + utils_hooks__hooks.normalizeUnits = normalizeUnits; + utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } + var _moment = utils_hooks__hooks; - // HOOKS + return _moment; - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; + })); + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module))) - // MOMENTS +/***/ }, +/* 4 */ +/***/ function(module, exports) { - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - this.utcOffset(input, keepLocalTime); +/***/ }, +/* 5 */ +/***/ function(module, exports) { - return this; - } else { - return -this.utcOffset(); - } - } + function webpackContext(req) { + throw new Error("Cannot find module '" + req + "'."); + } + webpackContext.keys = function() { return []; }; + webpackContext.resolve = webpackContext; + module.exports = webpackContext; + webpackContext.id = 5; - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; +/***/ }, +/* 6 */ +/***/ function(module, exports) { - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - this.utcOffset(offsetFromString(this._i)); - } - return this; - } + var _rng; - function hasAlignedHourOffset (input) { - input = input ? local__createLocal(input).utcOffset() : 0; + var globalVar = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : null; - return (this.utcOffset() - input) % 60 === 0; - } + if (globalVar && globalVar.crypto && crypto.getRandomValues) { + // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto + // Moderately fast, high quality + var _rnds8 = new Uint8Array(16); + _rng = function whatwgRNG() { + crypto.getRandomValues(_rnds8); + return _rnds8; + }; + } - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); + if (!_rng) { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var _rnds = new Array(16); + _rng = function () { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; } - function isDaylightSavingTimeShifted () { - if (typeof this._isDSTShifted !== 'undefined') { - return this._isDSTShifted; - } + return _rnds; + }; + } - var c = {}; + // uuid.js + // + // Copyright (c) 2010-2012 Robert Kieffer + // MIT License - http://opensource.org/licenses/mit-license.php - copyConfig(c, this); - c = prepareConfig(c); + // Unique ID creation requires a high quality random # generator. We feature + // detect to determine the best RNG source, normalizing to a function that + // returns 128-bits of randomness, since that's what's usually required - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } + //var _rng = require('./rng'); - return this._isDSTShifted; - } + // Maps for number <-> hex string conversion + var _byteToHex = []; + var _hexToByte = {}; + for (var i = 0; i < 256; i++) { + _byteToHex[i] = (i + 0x100).toString(16).substr(1); + _hexToByte[_byteToHex[i]] = i; + } - function isLocal () { - return !this._isUTC; - } + // **`parse()` - Parse a UUID into it's component bytes** + function parse(s, buf, offset) { + var i = buf && offset || 0, + ii = 0; - function isUtcOffset () { - return this._isUTC; + buf = buf || []; + s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) { + if (ii < 16) { + // Don't overflow! + buf[i + ii++] = _hexToByte[oct]; } + }); - function isUtc () { - return this._isUTC && this._offset === 0; - } + // Zero out remaining bytes if string was short + while (ii < 16) { + buf[i + ii++] = 0; + } - var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; + return buf; + } - // 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 create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; + // **`unparse()` - Convert UUID byte array (ala parse()) into a string** + function unparse(buf, offset) { + var i = offset || 0, + bth = _byteToHex; + return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]]; + } - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; + // **`v1()` - Generate time-based UUID** + // + // Inspired by https://github.com/LiosK/UUID.js + // and http://docs.python.org/library/uuid.html - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = create__isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - 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) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); + // random #'s we need to init node and clockseq + var _seedBytes = _rng(); + + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + var _nodeId = [_seedBytes[0] | 0x01, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]]; + + // Per 4.2.2, randomize (14 bit) clockseq + var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; + + // Previous uuid creation time + var _lastMSecs = 0, + _lastNSecs = 0; + + // See https://github.com/broofa/node-uuid for API details + function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } + // Time since last uuid creation (in msecs) + var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; - ret = new Duration(duration); + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } - return ret; - } + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } - create__createDuration.fn = Duration.prototype; + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } + // `time_mid` + var tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; - return res; - } + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; - function momentsDifference(base, other) { - var res; - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } + // `clock_seq_low` + b[i++] = clockseq & 0xff; - return res; - } + // `node` + var node = options.node || _nodeId; + for (var n = 0; n < 6; n++) { + b[i + n] = node[n]; + } - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } + return buf ? buf : unparse(b); + } - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } + // **`v4()` - Generate random UUID** - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; + // See https://github.com/broofa/node-uuid for API details + function v4(options, buf, offset) { + // Deprecated - 'format' argument, as supported in v1.2 + var i = buf && offset || 0; - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } + if (typeof options == 'string') { + buf = options == 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); + var rnds = options.random || (options.rng || _rng)(); - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now))); - } + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; - function clone () { - return new Moment(this); + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ii++) { + buf[i + ii] = rnds[ii]; } + } - function isAfter (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this > +input; - } else { - inputMs = isMoment(input) ? +input : +local__createLocal(input); - return inputMs < +this.clone().startOf(units); - } - } + return buf || unparse(rnds); + } - function isBefore (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this < +input; - } else { - inputMs = isMoment(input) ? +input : +local__createLocal(input); - return +this.clone().endOf(units) < inputMs; - } - } + // Export public API + var uuid = v4; + uuid.v1 = v1; + uuid.v4 = v4; + uuid.parse = parse; + uuid.unparse = unparse; - function isBetween (from, to, units) { - return this.isAfter(from, units) && this.isBefore(to, units); - } + module.exports = uuid; + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) - function isSame (input, units) { - var inputMs; - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - input = isMoment(input) ? input : local__createLocal(input); - return +this === +input; - } else { - inputMs = +local__createLocal(input); - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - } +/***/ }, +/* 7 */ +/***/ function(module, exports) { - function diff (input, units, asFloat) { - var that = cloneWithOffset(input, this), - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4, - delta, output; + // DOM utility methods - units = normalizeUnits(units); + /** + * this prepares the JSON container for allocating SVG elements + * @param JSONcontainer + * @private + */ + 'use strict'; - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); + exports.prepareElements = function (JSONcontainer) { + // cleanup the redundant svgElements; + for (var elementType in JSONcontainer) { + if (JSONcontainer.hasOwnProperty(elementType)) { + JSONcontainer[elementType].redundant = JSONcontainer[elementType].used; + JSONcontainer[elementType].used = []; } + } + }; - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); + /** + * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from + * which to remove the redundant elements. + * + * @param JSONcontainer + * @private + */ + exports.cleanupElements = function (JSONcontainer) { + // cleanup the redundant svgElements; + for (var elementType in JSONcontainer) { + if (JSONcontainer.hasOwnProperty(elementType)) { + if (JSONcontainer[elementType].redundant) { + for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) { + JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]); } - - return -(wholeMonthDiff + adjust); + JSONcontainer[elementType].redundant = []; + } } + } + }; - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + /** + * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer + * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. + * + * @param elementType + * @param JSONcontainer + * @param svgContainer + * @returns {*} + * @private + */ + exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) { + var element; + // allocate SVG element, if it doesnt yet exist, create one. + if (JSONcontainer.hasOwnProperty(elementType)) { + // this element has been created before + // check if there is an redundant element + if (JSONcontainer[elementType].redundant.length > 0) { + element = JSONcontainer[elementType].redundant[0]; + JSONcontainer[elementType].redundant.shift(); + } else { + // create a new element and add it to the SVG + element = document.createElementNS('http://www.w3.org/2000/svg', elementType); + svgContainer.appendChild(element); } + } else { + // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. + element = document.createElementNS('http://www.w3.org/2000/svg', elementType); + JSONcontainer[elementType] = { used: [], redundant: [] }; + svgContainer.appendChild(element); + } + JSONcontainer[elementType].used.push(element); + return element; + }; - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if ('function' === typeof Date.prototype.toISOString) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } + /** + * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer + * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. + * + * @param elementType + * @param JSONcontainer + * @param DOMContainer + * @returns {*} + * @private + */ + exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) { + var element; + // allocate DOM element, if it doesnt yet exist, create one. + if (JSONcontainer.hasOwnProperty(elementType)) { + // this element has been created before + // check if there is an redundant element + if (JSONcontainer[elementType].redundant.length > 0) { + element = JSONcontainer[elementType].redundant[0]; + JSONcontainer[elementType].redundant.shift(); + } else { + // create a new element and add it to the SVG + element = document.createElement(elementType); + if (insertBefore !== undefined) { + DOMContainer.insertBefore(element, insertBefore); + } else { + DOMContainer.appendChild(element); + } } - - function format (inputString) { - var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); - return this.localeData().postformat(output); + } else { + // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. + element = document.createElement(elementType); + JSONcontainer[elementType] = { used: [], redundant: [] }; + if (insertBefore !== undefined) { + DOMContainer.insertBefore(element, insertBefore); + } else { + DOMContainer.appendChild(element); } + } + JSONcontainer[elementType].used.push(element); + return element; + }; - function from (time, withoutSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + /** + * Draw a point object. This is a separate function because it can also be called by the legend. + * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions + * as well. + * + * @param x + * @param y + * @param groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' } + * @param JSONcontainer + * @param svgContainer + * @param labelObj + * @returns {*} + */ + exports.drawPoint = function (x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) { + var point; + if (groupTemplate.style == 'circle') { + point = exports.getSVGElement('circle', JSONcontainer, svgContainer); + point.setAttributeNS(null, 'cx', x); + point.setAttributeNS(null, 'cy', y); + point.setAttributeNS(null, 'r', 0.5 * groupTemplate.size); + } else { + point = exports.getSVGElement('rect', JSONcontainer, svgContainer); + point.setAttributeNS(null, 'x', x - 0.5 * groupTemplate.size); + point.setAttributeNS(null, 'y', y - 0.5 * groupTemplate.size); + point.setAttributeNS(null, 'width', groupTemplate.size); + point.setAttributeNS(null, 'height', groupTemplate.size); + } + + if (groupTemplate.style !== undefined) { + point.setAttributeNS(null, 'style', groupTemplate.style); + } + point.setAttributeNS(null, 'class', groupTemplate.className + ' vis-point'); + //handle label + + if (labelObj) { + var label = exports.getSVGElement('text', JSONcontainer, svgContainer); + if (labelObj.xOffset) { + x = x + labelObj.xOffset; } - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); + if (labelObj.yOffset) { + y = y + labelObj.yOffset; + } + if (labelObj.content) { + label.textContent = labelObj.content; } - function to (time, withoutSuffix) { - if (!this.isValid()) { - return this.localeData().invalidDate(); - } - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + if (labelObj.className) { + label.setAttributeNS(null, 'class', labelObj.className + ' vis-label'); } + label.setAttributeNS(null, 'x', x); + label.setAttributeNS(null, 'y', y); + } - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); + return point; + }; + + /** + * draw a bar SVG element centered on the X coordinate + * + * @param x + * @param y + * @param className + */ + exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer, style) { + if (height != 0) { + if (height < 0) { + height *= -1; + y -= height; + } + var rect = exports.getSVGElement('rect', JSONcontainer, svgContainer); + rect.setAttributeNS(null, 'x', x - 0.5 * width); + rect.setAttributeNS(null, 'y', y); + rect.setAttributeNS(null, 'width', width); + rect.setAttributeNS(null, 'height', height); + rect.setAttributeNS(null, 'class', className); + if (style) { + rect.setAttributeNS(null, 'style', style); } + } + }; + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var util = __webpack_require__(1); + var Queue = __webpack_require__(9); + + /** + * DataSet + * + * Usage: + * var dataSet = new DataSet({ + * fieldId: '_id', + * type: { + * // ... + * } + * }); + * + * dataSet.add(item); + * dataSet.add(data); + * dataSet.update(item); + * dataSet.update(data); + * dataSet.remove(id); + * dataSet.remove(ids); + * var data = dataSet.get(); + * var data = dataSet.get(id); + * var data = dataSet.get(ids); + * var data = dataSet.get(ids, options, data); + * dataSet.clear(); + * + * A data set can: + * - add/remove/update data + * - gives triggers upon changes in the data + * - can import/export data in various data formats + * + * @param {Array} [data] Optional array with initial data + * @param {Object} [options] Available options: + * {String} fieldId Field name of the id in the + * items, 'id' by default. + * {Object.} [type] + * {String[]} [fields] field names to be returned + * {function} [filter] filter items + * {String | function} [order] Order the items by a field name or custom sort function. + * @throws Error + */ + DataSet.prototype.get = function (args) { + var me = this; - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); + // parse the arguments + var id, ids, options; + var firstType = util.getType(arguments[0]); + if (firstType == 'String' || firstType == 'Number') { + // get(id [, options]) + id = arguments[0]; + options = arguments[1]; + } else if (firstType == 'Array') { + // get(ids [, options]) + ids = arguments[0]; + options = arguments[1]; + } else { + // get([, options]) + options = arguments[0]; + } - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); + // determine the return type + var returnType; + if (options && options.returnType) { + var allowedValues = ['Array', 'Object']; + returnType = allowedValues.indexOf(options.returnType) == -1 ? 'Array' : options.returnType; + } else { + returnType = 'Array'; + } - // HELPERS + // build options + var type = options && options.type || this._options.type; + var filter = options && options.filter; + var items = [], + item, + itemId, + i, + len; - function weeksInYear(year, dow, doy) { - return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week; + // convert items + if (id != undefined) { + // return a single item + item = me._getItem(id, type); + if (filter && !filter(item)) { + item = null; + } + } else if (ids != undefined) { + // return a subset of items + for (i = 0, len = ids.length; i < len; i++) { + item = me._getItem(ids[i], type); + if (!filter || filter(item)) { + items.push(item); + } + } + } else { + // return all items + for (itemId in this._data) { + if (this._data.hasOwnProperty(itemId)) { + item = me._getItem(itemId, type); + if (!filter || filter(item)) { + items.push(item); + } + } } + } - // MOMENTS + // order the results + if (options && options.order && id == undefined) { + this._sort(items, options.order); + } - function getSetWeekYear (input) { - var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; - return input == null ? year : this.add((input - year), 'y'); + // filter fields of the items + if (options && options.fields) { + var fields = options.fields; + if (id != undefined) { + item = this._filterFields(item, fields); + } else { + for (i = 0, len = items.length; i < len; i++) { + items[i] = this._filterFields(items[i], fields); + } } + } - function getSetISOWeekYear (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); + // return the results + if (returnType == 'Object') { + var result = {}; + for (i = 0; i < items.length; i++) { + result[items[i].id] = items[i]; } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); + return result; + } else { + if (id != undefined) { + // a single item + return item; + } else { + // just return our array + return items; } + } + }; - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + /** + * Get ids of all items or from a filtered set of items. + * @param {Object} [options] An Object with options. Available options: + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Array} ids + */ + DataSet.prototype.getIds = function (options) { + var data = this._data, + filter = options && options.filter, + order = options && options.order, + type = options && options.type || this._options.type, + i, + len, + id, + item, + items, + ids = []; + + if (filter) { + // get filtered items + if (order) { + // create ordered list + items = []; + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (filter(item)) { + items.push(item); + } + } + } + + this._sort(items, order); + + for (i = 0, len = items.length; i < len; i++) { + ids[i] = items[i][this._fieldId]; + } + } else { + // create unordered list + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (filter(item)) { + ids.push(item[this._fieldId]); + } + } + } } + } else { + // get all items + if (order) { + // create an ordered list + items = []; + for (id in data) { + if (data.hasOwnProperty(id)) { + items.push(data[id]); + } + } - addFormatToken('Q', 0, 0, 'quarter'); + this._sort(items, order); - // ALIASES + for (i = 0, len = items.length; i < len; i++) { + ids[i] = items[i][this._fieldId]; + } + } else { + // create unordered list + for (id in data) { + if (data.hasOwnProperty(id)) { + item = data[id]; + ids.push(item[this._fieldId]); + } + } + } + } - addUnitAlias('quarter', 'Q'); + return ids; + }; - // PARSING + /** + * Returns the DataSet itself. Is overwritten for example by the DataView, + * which returns the DataSet it is connected to instead. + */ + DataSet.prototype.getDataSet = function () { + return this; + }; - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); + /** + * Execute a callback function for every item in the dataset. + * @param {function} callback + * @param {Object} [options] Available options: + * {Object.} [type] + * {String[]} [fields] filter fields + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + */ + DataSet.prototype.forEach = function (callback, options) { + var filter = options && options.filter, + type = options && options.type || this._options.type, + data = this._data, + item, + id; - // MOMENTS + if (options && options.order) { + // execute forEach on ordered list + var items = this.get(options); - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + for (var i = 0, len = items.length; i < len; i++) { + item = items[i]; + id = item[this._fieldId]; + callback(item, id); } + } else { + // unordered + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (!filter || filter(item)) { + callback(item, id); + } + } + } + } + }; - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PARSING + /** + * Map every item in the dataset. + * @param {function} callback + * @param {Object} [options] Available options: + * {Object.} [type] + * {String[]} [fields] filter fields + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Object[]} mappedItems + */ + DataSet.prototype.map = function (callback, options) { + var filter = options && options.filter, + type = options && options.type || this._options.type, + mappedItems = [], + data = this._data, + item; - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); + // convert and filter items + for (var id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (!filter || filter(item)) { + mappedItems.push(callback(item, id)); + } + } + } - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); + // order items + if (options && options.order) { + this._sort(mappedItems, options.order); + } - // MOMENTS + return mappedItems; + }; - var getSetDayOfMonth = makeGetSet('Date', true); + /** + * Filter the fields of an item + * @param {Object | null} item + * @param {String[]} fields Field names + * @return {Object | null} filteredItem or null if no item is provided + * @private + */ + DataSet.prototype._filterFields = function (item, fields) { + if (!item) { + // item is null + return item; + } - addFormatToken('d', 0, 'do', 'day'); + var filteredItem = {}; - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); + if (Array.isArray(fields)) { + for (var field in item) { + if (item.hasOwnProperty(field) && fields.indexOf(field) != -1) { + filteredItem[field] = item[field]; + } + } + } else { + for (var field in item) { + if (item.hasOwnProperty(field) && fields.hasOwnProperty(field)) { + filteredItem[fields[field]] = item[field]; + } + } + } - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); + return filteredItem; + }; - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); + /** + * Sort the provided array with items + * @param {Object[]} items + * @param {String | function} order A field name or custom sort function. + * @private + */ + DataSet.prototype._sort = function (items, order) { + if (util.isString(order)) { + // order by provided field name + var name = order; // field name + items.sort(function (a, b) { + var av = a[name]; + var bv = b[name]; + return av > bv ? 1 : av < bv ? -1 : 0; }); + } else if (typeof order === 'function') { + // order by sort function + items.sort(order); + } + // TODO: extend order by an Object {field:String, direction:String} + // where direction can be 'asc' or 'desc' + else { + throw new TypeError('Order must be a function or a string'); + } + }; - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES + /** + * Remove an object by pointer or by id + * @param {String | Number | Object | Array} id Object or id, or an array with + * objects or ids to be removed + * @param {String} [senderId] Optional sender id + * @return {Array} removedIds + */ + DataSet.prototype.remove = function (id, senderId) { + var removedIds = [], + i, + len, + removedId; - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); + if (Array.isArray(id)) { + for (i = 0, len = id.length; i < len; i++) { + removedId = this._remove(id[i]); + if (removedId != null) { + removedIds.push(removedId); + } + } + } else { + removedId = this._remove(id); + if (removedId != null) { + removedIds.push(removedId); + } + } - // PARSING + if (removedIds.length) { + this._trigger('remove', { items: removedIds }, senderId); + } - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', matchWord); - addRegexToken('ddd', matchWord); - addRegexToken('dddd', matchWord); + return removedIds; + }; - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) { - var weekday = config._locale.weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); + /** + * Remove an item by its id + * @param {Number | String | Object} id id or item + * @returns {Number | String | null} id + * @private + */ + DataSet.prototype._remove = function (id) { + if (util.isNumber(id) || util.isString(id)) { + if (this._data[id]) { + delete this._data[id]; + this.length--; + return id; + } + } else if (id instanceof Object) { + var itemId = id[this._fieldId]; + if (itemId && this._data[itemId]) { + delete this._data[itemId]; + this.length--; + return itemId; + } + } + return null; + }; - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); + /** + * Clear the data + * @param {String} [senderId] Optional sender id + * @return {Array} removedIds The ids of all removed items + */ + DataSet.prototype.clear = function (senderId) { + var ids = Object.keys(this._data); - // HELPERS + this._data = {}; + this.length = 0; - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } + this._trigger('remove', { items: ids }, senderId); - if (!isNaN(input)) { - return parseInt(input, 10); - } + return ids; + }; - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } + /** + * Find the item with maximum value of a specified field + * @param {String} field + * @return {Object | null} item Item containing max value, or null if no items + */ + DataSet.prototype.max = function (field) { + var data = this._data, + max = null, + maxField = null; - return null; + for (var id in data) { + if (data.hasOwnProperty(id)) { + var item = data[id]; + var itemField = item[field]; + if (itemField != null && (!max || itemField > maxField)) { + max = item; + maxField = itemField; + } } + } - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m) { - return this._weekdays[m.day()]; - } + return max; + }; - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return this._weekdaysShort[m.day()]; - } + /** + * Find the item with minimum value of a specified field + * @param {String} field + * @return {Object | null} item Item containing max value, or null if no items + */ + DataSet.prototype.min = function (field) { + var data = this._data, + min = null, + minField = null; - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return this._weekdaysMin[m.day()]; + for (var id in data) { + if (data.hasOwnProperty(id)) { + var item = data[id]; + var itemField = item[field]; + if (itemField != null && (!min || itemField < minField)) { + min = item; + minField = itemField; + } } + } - function localeWeekdaysParse (weekdayName) { - var i, mom, regex; - - this._weekdaysParse = this._weekdaysParse || []; - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = local__createLocal([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } + return min; + }; - // MOMENTS + /** + * Find all distinct values of a specified field + * @param {String} field + * @return {Array} values Array containing all distinct values. If data items + * do not contain the specified field are ignored. + * The returned array is unordered. + */ + DataSet.prototype.distinct = function (field) { + var data = this._data; + var values = []; + var fieldType = this._options.type && this._options.type[field] || null; + var count = 0; + var i; - function getSetDayOfWeek (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; + for (var prop in data) { + if (data.hasOwnProperty(prop)) { + var item = data[prop]; + var value = item[field]; + var exists = false; + for (i = 0; i < count; i++) { + if (values[i] == value) { + exists = true; + break; } + } + if (!exists && value !== undefined) { + values[count] = value; + count++; + } } + } - function getSetLocaleDayOfWeek (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); + if (fieldType) { + for (i = 0; i < values.length; i++) { + values[i] = util.convert(values[i], fieldType); } + } - function getSetISODayOfWeek (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - } + return values; + }; - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, function () { - return this.hours() % 12 || 12; - }); + /** + * Add a single item. Will fail when an item with the same id already exists. + * @param {Object} item + * @return {String} id + * @private + */ + DataSet.prototype._addItem = function (item) { + var id = item[this._fieldId]; - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); + if (id != undefined) { + // check whether this id is already taken + if (this._data[id]) { + // item already exists + throw new Error('Cannot add item: item with id ' + id + ' already exists'); } + } else { + // generate an id + id = util.randomUUID(); + item[this._fieldId] = id; + } - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; + var d = {}; + for (var field in item) { + if (item.hasOwnProperty(field)) { + var fieldType = this._type[field]; // type may be undefined + d[field] = util.convert(item[field], fieldType); } + } + this._data[id] = d; + this.length++; - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); + return id; + }; - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); + /** + * Get an item. Fields can be converted to a specific type + * @param {String} id + * @param {Object.} [types] field types to convert + * @return {Object | null} item + * @private + */ + DataSet.prototype._getItem = function (id, types) { + var field, value; - // LOCALES + // get the item from the dataset + var raw = this._data[id]; + if (!raw) { + return null; + } - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); + // convert the items field types + var converted = {}; + if (types) { + for (field in raw) { + if (raw.hasOwnProperty(field)) { + value = raw[field]; + converted[field] = util.convert(value, types[field]); + } } + } else { + // no field types specified, no converting needed + for (field in raw) { + if (raw.hasOwnProperty(field)) { + value = raw[field]; + converted[field] = value; + } + } + } + return converted; + }; + + /** + * Update a single item: merge with existing item. + * Will fail when the item has no id, or when there does not exist an item + * with the same id. + * @param {Object} item + * @return {String} id + * @private + */ + DataSet.prototype._updateItem = function (item) { + var id = item[this._fieldId]; + if (id == undefined) { + throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')'); + } + var d = this._data[id]; + if (!d) { + // item doesn't exist + throw new Error('Cannot update item: no item with id ' + id + ' found'); + } - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } + // merge with current item + for (var field in item) { + if (item.hasOwnProperty(field)) { + var fieldType = this._type[field]; // type may be undefined + d[field] = util.convert(item[field], fieldType); } + } + return id; + }; - // MOMENTS + module.exports = DataSet; - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); +/***/ }, +/* 9 */ +/***/ function(module, exports) { - addFormatToken('m', ['mm', 2], 0, 'minute'); + /** + * A queue + * @param {Object} options + * Available options: + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @constructor + */ + 'use strict'; - // ALIASES + function Queue(options) { + // options + this.delay = null; + this.max = Infinity; - addUnitAlias('minute', 'm'); + // properties + this._queue = []; + this._timeout = null; + this._extended = null; - // PARSING + this.setOptions(options); + } - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); + /** + * Update the configuration of the queue + * @param {Object} options + * Available options: + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @param options + */ + Queue.prototype.setOptions = function (options) { + if (options && typeof options.delay !== 'undefined') { + this.delay = options.delay; + } + if (options && typeof options.max !== 'undefined') { + this.max = options.max; + } - // MOMENTS + this._flushIfNeeded(); + }; - var getSetMinute = makeGetSet('Minutes', false); + /** + * Extend an object with queuing functionality. + * The object will be extended with a function flush, and the methods provided + * in options.replace will be replaced with queued ones. + * @param {Object} object + * @param {Object} options + * Available options: + * - replace: Array. + * A list with method names of the methods + * on the object to be replaced with queued ones. + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @return {Queue} Returns the created queue + */ + Queue.extend = function (object, options) { + var queue = new Queue(options); - addFormatToken('s', ['ss', 2], 0, 'second'); + if (object.flush !== undefined) { + throw new Error('Target object already has a property flush'); + } + object.flush = function () { + queue.flush(); + }; - // ALIASES + var methods = [{ + name: 'flush', + original: undefined + }]; - addUnitAlias('second', 's'); + if (options && options.replace) { + for (var i = 0; i < options.replace.length; i++) { + var name = options.replace[i]; + methods.push({ + name: name, + original: object[name] + }); + queue.replace(object, name); + } + } - // PARSING + queue._extended = { + object: object, + methods: methods + }; - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); + return queue; + }; - // MOMENTS + /** + * Destroy the queue. The queue will first flush all queued actions, and in + * case it has extended an object, will restore the original object. + */ + Queue.prototype.destroy = function () { + this.flush(); - var getSetSecond = makeGetSet('Seconds', false); + if (this._extended) { + var object = this._extended.object; + var methods = this._extended.methods; + for (var i = 0; i < methods.length; i++) { + var method = methods[i]; + if (method.original) { + object[method.name] = method.original; + } else { + delete object[method.name]; + } + } + this._extended = null; + } + }; - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); + /** + * Replace a method on an object with a queued version + * @param {Object} object Object having the method + * @param {string} method The method name + */ + Queue.prototype.replace = function (object, method) { + var me = this; + var original = object[method]; + if (!original) { + throw new Error('Method ' + method + ' undefined'); + } - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); + object[method] = function () { + // create an Array with the arguments + var args = []; + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; + // add this call to the queue + me.queue({ + args: args, + fn: original, + context: this }); + }; + }; + /** + * Queue a call + * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry + */ + Queue.prototype.queue = function (entry) { + if (typeof entry === 'function') { + this._queue.push({ fn: entry }); + } else { + this._queue.push(entry); + } - // ALIASES + this._flushIfNeeded(); + }; - addUnitAlias('millisecond', 'ms'); + /** + * Check whether the queue needs to be flushed + * @private + */ + Queue.prototype._flushIfNeeded = function () { + // flush when the maximum is exceeded. + if (this._queue.length > this.max) { + this.flush(); + } - // PARSING + // flush after a period of inactivity when a delay is configured + clearTimeout(this._timeout); + if (this.queue.length > 0 && typeof this.delay === 'number') { + var me = this; + this._timeout = setTimeout(function () { + me.flush(); + }, this.delay); + } + }; - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); + /** + * Flush all queued calls + */ + Queue.prototype.flush = function () { + while (this._queue.length > 0) { + var entry = this._queue.shift(); + entry.fn.apply(entry.context || entry.fn, entry.args || []); + } + }; - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } + module.exports = Queue; - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS + 'use strict'; - var getSetMillisecond = makeGetSet('Milliseconds', false); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); + /** + * DataView + * + * a dataview offers a filtered view on a dataset or an other dataview. + * + * @param {DataSet | DataView} data + * @param {Object} [options] Available options: see method get + * + * @constructor DataView + */ + function DataView(data, options) { + this._data = null; + this._ids = {}; // ids of the items currently in memory (just contains a boolean true) + this.length = 0; // number of items in the DataView + this._options = options || {}; + this._fieldId = 'id'; // name of the field containing id + this._subscribers = {}; // event subscribers - // MOMENTS + var me = this; + this.listener = function () { + me._onEvent.apply(me, arguments); + }; - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } + this.setData(data); + } - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } + // TODO: implement a function .config() to dynamically update things like configured filter + // and trigger changes accordingly - var momentPrototype__proto = Moment.prototype; + /** + * Set a data source for the view + * @param {DataSet | DataView} data + */ + DataView.prototype.setData = function (data) { + var ids, i, len; - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = getSet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = getSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = moment_format__toISOString; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; + if (this._data) { + // unsubscribe from current dataset + if (this._data.off) { + this._data.off('*', this.listener); + } - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; + // trigger a remove of all items in memory + ids = []; + for (var id in this._ids) { + if (this._ids.hasOwnProperty(id)) { + ids.push(id); + } + } + this._ids = {}; + this.length = 0; + this._trigger('remove', { items: ids }); + } - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; + this._data = data; - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; + if (this._data) { + // update fieldId + this._fieldId = this._options.fieldId || this._data && this._data.options && this._data.options.fieldId || 'id'; - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; + // trigger an add of all added items + ids = this._data.getIds({ filter: this._options && this._options.filter }); + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + this._ids[id] = true; + } + this.length = ids.length; + this._trigger('add', { items: ids }); - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; + // subscribe to new dataset + if (this._data.on) { + this._data.on('*', this.listener); + } + } + }; - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; + /** + * Refresh the DataView. Useful when the DataView has a filter function + * containing a variable parameter. + */ + DataView.prototype.refresh = function () { + var id; + var ids = this._data.getIds({ filter: this._options && this._options.filter }); + var newIds = {}; + var added = []; + var removed = []; - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; + // check for additions + for (var i = 0; i < ids.length; i++) { + id = ids[i]; + newIds[id] = true; + if (!this._ids[id]) { + added.push(id); + this._ids[id] = true; + this.length++; + } + } - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; + // check for removals + for (id in this._ids) { + if (this._ids.hasOwnProperty(id)) { + if (!newIds[id]) { + removed.push(id); + delete this._ids[id]; + this.length--; + } + } + } - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; + // trigger events + if (added.length) { + this._trigger('add', { items: added }); + } + if (removed.length) { + this._trigger('remove', { items: removed }); + } + }; - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; + /** + * Get data from the data view + * + * Usage: + * + * get() + * get(options: Object) + * get(options: Object, data: Array | DataTable) + * + * get(id: Number) + * get(id: Number, options: Object) + * get(id: Number, options: Object, data: Array | DataTable) + * + * get(ids: Number[]) + * get(ids: Number[], options: Object) + * get(ids: Number[], options: Object, data: Array | DataTable) + * + * Where: + * + * {Number | String} id The id of an item + * {Number[] | String{}} ids An array with ids of items + * {Object} options An Object with options. Available options: + * {String} [type] Type of data to be returned. Can + * be 'DataTable' or 'Array' (default) + * {Object.} [convert] + * {String[]} [fields] field names to be returned + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * {Array | DataTable} [data] If provided, items will be appended to this + * array or table. Required in case of Google + * DataTable. + * @param args + */ + DataView.prototype.get = function (args) { + var me = this; - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; + // parse the arguments + var ids, options, data; + var firstType = util.getType(arguments[0]); + if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') { + // get(id(s) [, options] [, data]) + ids = arguments[0]; // can be a single id or an array with ids + options = arguments[1]; + data = arguments[2]; + } else { + // get([, options] [, data]) + options = arguments[0]; + data = arguments[1]; + } - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; + // extend the options with the default options and provided options + var viewOptions = util.extend({}, this._options, options); - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); + // create a combined filter method when needed + if (this._options.filter && options && options.filter) { + viewOptions.filter = function (item) { + return me._options.filter(item) && options.filter(item); + }; + } - var momentPrototype = momentPrototype__proto; + // build up the call to the linked data set + var getArguments = []; + if (ids != undefined) { + getArguments.push(ids); + } + getArguments.push(viewOptions); + getArguments.push(data); - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } + return this._data && this._data.get.apply(this._data, getArguments); + }; - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } + /** + * Get ids of all items or from a filtered set of items. + * @param {Object} [options] An Object with options. Available options: + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Array} ids + */ + DataView.prototype.getIds = function (options) { + var ids; - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; + if (this._data) { + var defaultFilter = this._options.filter; + var filter; - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.call(mom, now) : output; + if (options && options.filter) { + if (defaultFilter) { + filter = function (item) { + return defaultFilter(item) && options.filter(item); + }; + } else { + filter = options.filter; + } + } else { + filter = defaultFilter; } - var defaultLongDateFormat = { - 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' - }; + ids = this._data.getIds({ + filter: filter, + order: options && options.order + }); + } else { + ids = []; + } - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; + return ids; + }; - if (format || !formatUpper) { - return format; - } + /** + * Get the DataSet to which this DataView is connected. In case there is a chain + * of multiple DataViews, the root DataSet of this chain is returned. + * @return {DataSet} dataSet + */ + DataView.prototype.getDataSet = function () { + var dataSet = this; + while (dataSet instanceof DataView) { + dataSet = dataSet._data; + } + return dataSet || null; + }; - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); + /** + * Event listener. Will propagate all events from the connected data set to + * the subscribers of the DataView, but will filter the items and only trigger + * when there are changes in the filtered data set. + * @param {String} event + * @param {Object | null} params + * @param {String} senderId + * @private + */ + DataView.prototype._onEvent = function (event, params, senderId) { + var i, len, id, item; + var ids = params && params.items; + var data = this._data; + var updatedData = []; + var added = []; + var updated = []; + var removed = []; - return this._longDateFormat[key]; - } + if (ids && data) { + switch (event) { + case 'add': + // filter the ids of the added items + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + item = this.get(id); + if (item) { + this._ids[id] = true; + added.push(id); + } + } - var defaultInvalidDate = 'Invalid date'; + break; - function invalidDate () { - return this._invalidDate; - } + case 'update': + // determine the event from the views viewpoint: an updated + // item can be added, updated, or removed from this view. + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + item = this.get(id); - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; + if (item) { + if (this._ids[id]) { + updated.push(id); + updatedData.push(params.data[i]); + } else { + this._ids[id] = true; + added.push(id); + } + } else { + if (this._ids[id]) { + delete this._ids[id]; + removed.push(id); + } else {} + } + } - function ordinal (number) { - return this._ordinal.replace('%d', number); - } + break; - function preParsePostFormat (string) { - return string; + case 'remove': + // filter the ids of the removed items + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + if (this._ids[id]) { + delete this._ids[id]; + removed.push(id); + } + } + + break; } - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; + this.length += added.length - removed.length; - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); + if (added.length) { + this._trigger('add', { items: added }, senderId); } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + if (updated.length) { + this._trigger('update', { items: updated, data: updatedData }, senderId); } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - 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); + if (removed.length) { + this._trigger('remove', { items: removed }, senderId); } + } + }; - var prototype__proto = Locale.prototype; + // copy subscription functionality from DataSet + DataView.prototype.on = DataSet.prototype.on; + DataView.prototype.off = DataSet.prototype.off; + DataView.prototype._trigger = DataSet.prototype._trigger; - prototype__proto._calendar = defaultCalendar; - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto._longDateFormat = defaultLongDateFormat; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto._invalidDate = defaultInvalidDate; - prototype__proto.invalidDate = invalidDate; - prototype__proto._ordinal = defaultOrdinal; - prototype__proto.ordinal = ordinal; - prototype__proto._ordinalParse = defaultOrdinalParse; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto._relativeTime = defaultRelativeTime; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; + // TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5) + DataView.prototype.subscribe = DataView.prototype.on; + DataView.prototype.unsubscribe = DataView.prototype.off; - // Month - prototype__proto.months = localeMonths; - prototype__proto._months = defaultLocaleMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto._monthsShort = defaultLocaleMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; + module.exports = DataView; - // Week - prototype__proto.week = localeWeek; - prototype__proto._week = defaultLocaleWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; + // nothing interesting for me :-( - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto._weekdays = defaultLocaleWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto._meridiemParse = defaultLocaleMeridiemParse; - prototype__proto.meridiem = localeMeridiem; + 'use strict'; - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } + var Emitter = __webpack_require__(12); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var util = __webpack_require__(1); + var Point3d = __webpack_require__(13); + var Point2d = __webpack_require__(14); + var Camera = __webpack_require__(15); + var Filter = __webpack_require__(16); + var Slider = __webpack_require__(17); + var StepNumber = __webpack_require__(18); - function list (format, index, field, count, setter) { - if (typeof format === 'number') { - index = format; - format = undefined; - } + /** + * @constructor Graph3d + * Graph3d displays data in 3d. + * + * Graph3d is developed in javascript as a Google Visualization Chart. + * + * @param {Element} container The DOM element in which the Graph3d will + * be created. Normally a div element. + * @param {DataSet | DataView | Array} [data] + * @param {Object} [options] + */ + function Graph3d(container, data, options) { + if (!(this instanceof Graph3d)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } - format = format || ''; + // create variables and set default values + this.containerElement = container; + this.width = '400px'; + this.height = '400px'; + this.margin = 10; // px + this.defaultXCenter = '55%'; + this.defaultYCenter = '50%'; - if (index != null) { - return lists__get(format, index, field, setter); - } + this.xLabel = 'x'; + this.yLabel = 'y'; + this.zLabel = 'z'; - var i; - var out = []; - for (i = 0; i < count; i++) { - out[i] = lists__get(format, i, field, setter); - } - return out; - } + var passValueFn = function passValueFn(v) { + return v; + }; + this.xValueLabel = passValueFn; + this.yValueLabel = passValueFn; + this.zValueLabel = passValueFn; - function lists__listMonths (format, index) { - return list(format, index, 'months', 12, 'month'); - } + this.filterLabel = 'time'; + this.legendLabel = 'value'; - function lists__listMonthsShort (format, index) { - return list(format, index, 'monthsShort', 12, 'month'); - } + this.style = Graph3d.STYLE.DOT; + this.showPerspective = true; + this.showGrid = true; + this.keepAspectRatio = true; + this.showShadow = false; + this.showGrayBottom = false; // TODO: this does not work correctly + this.showTooltip = false; + this.verticalRatio = 0.5; // 0.1 to 1.0, where 1.0 results in a 'cube' - function lists__listWeekdays (format, index) { - return list(format, index, 'weekdays', 7, 'day'); - } + this.animationInterval = 1000; // milliseconds + this.animationPreload = false; - function lists__listWeekdaysShort (format, index) { - return list(format, index, 'weekdaysShort', 7, 'day'); - } + this.camera = new Camera(); + this.camera.setArmRotation(1.0, 0.5); + this.camera.setArmLength(1.7); + this.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window? - function lists__listWeekdaysMin (format, index) { - return list(format, index, 'weekdaysMin', 7, 'day'); - } + this.dataTable = null; // The original data table + this.dataPoints = null; // The table with point objects - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); + // the column indexes + this.colX = undefined; + this.colY = undefined; + this.colZ = undefined; + this.colValue = undefined; + this.colFilter = undefined; - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); + this.xMin = 0; + this.xStep = undefined; // auto by default + this.xMax = 1; + this.yMin = 0; + this.yStep = undefined; // auto by default + this.yMax = 1; + this.zMin = 0; + this.zStep = undefined; // auto by default + this.zMax = 1; + this.valueMin = 0; + this.valueMax = 1; + this.xBarWidth = 1; + this.yBarWidth = 1; + // TODO: customize axis range - var mathAbs = Math.abs; + // colors + this.axisColor = '#4D4D4D'; + this.gridColor = '#D3D3D3'; + this.dataColor = { + fill: '#7DC1FF', + stroke: '#3267D2', + strokeWidth: 1 // px + }; - function duration_abs__abs () { - var data = this._data; + // create a frame and canvas + this.create(); - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); + // apply options (also when undefined) + this.setOptions(options); - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); + // apply data + if (data) { + this.setData(data); + } + } - return this; + // Extend Graph3d with an Emitter mixin + Emitter(Graph3d.prototype); + + /** + * Calculate the scaling values, dependent on the range in x, y, and z direction + */ + Graph3d.prototype._setScale = function () { + this.scale = new Point3d(1 / (this.xMax - this.xMin), 1 / (this.yMax - this.yMin), 1 / (this.zMax - this.zMin)); + + // keep aspect ration between x and y scale if desired + if (this.keepAspectRatio) { + if (this.scale.x < this.scale.y) { + //noinspection JSSuspiciousNameCombination + this.scale.y = this.scale.x; + } else { + //noinspection JSSuspiciousNameCombination + this.scale.x = this.scale.y; } + } - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); + // scale the vertical axis + this.scale.z *= this.verticalRatio; + // TODO: can this be automated? verticalRatio? - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; + // determine scale for (optional) value + this.scale.value = 1 / (this.valueMax - this.valueMin); - return duration._bubble(); - } + // position the camera arm + var xCenter = (this.xMax + this.xMin) / 2 * this.scale.x; + var yCenter = (this.yMax + this.yMin) / 2 * this.scale.y; + var zCenter = (this.zMax + this.zMin) / 2 * this.scale.z; + this.camera.setArmLocation(xCenter, yCenter, zCenter); + }; - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } + /** + * Convert a 3D location to a 2D location on screen + * http://en.wikipedia.org/wiki/3D_projection + * @param {Point3d} point3d A 3D point with parameters x, y, z + * @return {Point2d} point2d A 2D point with parameters x, y + */ + Graph3d.prototype._convert3Dto2D = function (point3d) { + var translation = this._convertPointToTranslation(point3d); + return this._convertTranslationToScreen(translation); + }; - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } + /** + * Convert a 3D location its translation seen from the camera + * http://en.wikipedia.org/wiki/3D_projection + * @param {Point3d} point3d A 3D point with parameters x, y, z + * @return {Point3d} translation A 3D point with parameters x, y, z This is + * the translation of the point, seen from the + * camera + */ + Graph3d.prototype._convertPointToTranslation = function (point3d) { + var ax = point3d.x * this.scale.x, + ay = point3d.y * this.scale.y, + az = point3d.z * this.scale.z, + cx = this.camera.getCameraLocation().x, + cy = this.camera.getCameraLocation().y, + cz = this.camera.getCameraLocation().z, - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } + // calculate angles + sinTx = Math.sin(this.camera.getCameraRotation().x), + cosTx = Math.cos(this.camera.getCameraRotation().x), + sinTy = Math.sin(this.camera.getCameraRotation().y), + cosTy = Math.cos(this.camera.getCameraRotation().y), + sinTz = Math.sin(this.camera.getCameraRotation().z), + cosTz = Math.cos(this.camera.getCameraRotation().z), - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; + // 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)), + dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax - cx)); - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } + return new Point3d(dx, dy, dz); + }; - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; + /** + * Convert a translation point to a point on the screen + * @param {Point3d} translation A 3D point with parameters x, y, z This is + * the translation of the point, seen from the + * camera + * @return {Point2d} point2d A 2D point with parameters x, y + */ + Graph3d.prototype._convertTranslationToScreen = function (translation) { + var ex = this.eye.x, + ey = this.eye.y, + ez = this.eye.z, + dx = translation.x, + dy = translation.y, + dz = translation.z; - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; + // calculate position on screen from translation + var bx; + var by; + if (this.showPerspective) { + bx = (dx - ex) * (ez / dz); + by = (dy - ey) * (ez / dz); + } else { + bx = dx * -(ez / this.camera.getArmLength()); + by = dy * -(ez / this.camera.getArmLength()); + } - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; + // shift and scale the point to the center of the screen + // use the width of the graph to scale both horizontally and vertically. + return new Point2d(this.xcenter + bx * this.frame.canvas.clientWidth, this.ycenter - by * this.frame.canvas.clientWidth); + }; - hours = absFloor(minutes / 60); - data.hours = hours % 24; + /** + * Set the background styling for the graph + * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor + */ + Graph3d.prototype._setBackgroundColor = function (backgroundColor) { + var fill = 'white'; + var stroke = 'gray'; + var strokeWidth = 1; - days += absFloor(hours / 24); + if (typeof backgroundColor === 'string') { + fill = backgroundColor; + stroke = 'none'; + strokeWidth = 0; + } else if (typeof backgroundColor === 'object') { + if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; + if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; + if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; + } else if (backgroundColor === undefined) {} else { + throw 'Unsupported type of backgroundColor'; + } - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); + this.frame.style.backgroundColor = fill; + this.frame.style.borderColor = stroke; + this.frame.style.borderWidth = strokeWidth + 'px'; + this.frame.style.borderStyle = 'solid'; + }; - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; + /// enumerate the available styles + Graph3d.STYLE = { + BAR: 0, + BARCOLOR: 1, + BARSIZE: 2, + DOT: 3, + DOTLINE: 4, + DOTCOLOR: 5, + DOTSIZE: 6, + GRID: 7, + LINE: 8, + SURFACE: 9 + }; - data.days = days; - data.months = months; - data.years = years; + /** + * Retrieve the style index from given styleName + * @param {string} styleName Style name such as 'dot', 'grid', 'dot-line' + * @return {Number} styleNumber Enumeration value representing the style, or -1 + * when not found + */ + Graph3d.prototype._getStyleNumber = function (styleName) { + switch (styleName) { + case 'dot': + return Graph3d.STYLE.DOT; + case 'dot-line': + return Graph3d.STYLE.DOTLINE; + case 'dot-color': + return Graph3d.STYLE.DOTCOLOR; + case 'dot-size': + return Graph3d.STYLE.DOTSIZE; + case 'line': + return Graph3d.STYLE.LINE; + case 'grid': + return Graph3d.STYLE.GRID; + case 'surface': + return Graph3d.STYLE.SURFACE; + case 'bar': + return Graph3d.STYLE.BAR; + case 'bar-color': + return Graph3d.STYLE.BARCOLOR; + case 'bar-size': + return Graph3d.STYLE.BARSIZE; + } - return this; - } + return -1; + }; - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } + /** + * Determine the indexes of the data columns, based on the given style and data + * @param {DataSet} data + * @param {Number} style + */ + Graph3d.prototype._determineColumnIndexes = function (data, style) { + if (this.style === Graph3d.STYLE.DOT || this.style === Graph3d.STYLE.DOTLINE || this.style === Graph3d.STYLE.LINE || this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE || this.style === Graph3d.STYLE.BAR) { + // 3 columns expected, and optionally a 4th with filter values + this.colX = 0; + this.colY = 1; + this.colZ = 2; + this.colValue = undefined; - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; + if (data.getNumberOfColumns() > 3) { + this.colFilter = 3; } + } else if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { + // 4 columns expected, and optionally a 5th with filter values + this.colX = 0; + this.colY = 1; + this.colZ = 2; + this.colValue = 3; - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; + if (data.getNumberOfColumns() > 4) { + this.colFilter = 4; + } + } else { + throw 'Unknown style "' + this.style + '"'; + } + }; - units = normalizeUnits(units); + Graph3d.prototype.getNumberOfRows = function (data) { + return data.length; + }; - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } + Graph3d.prototype.getNumberOfColumns = function (data) { + var counter = 0; + for (var column in data[0]) { + if (data[0].hasOwnProperty(column)) { + counter++; } + } + return counter; + }; - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); + Graph3d.prototype.getDistinctValues = function (data, column) { + var distinctValues = []; + for (var i = 0; i < data.length; i++) { + if (distinctValues.indexOf(data[i][column]) == -1) { + distinctValues.push(data[i][column]); } + } + return distinctValues; + }; - function makeAs (alias) { - return function () { - return this.as(alias); - }; + Graph3d.prototype.getColumnRange = function (data, column) { + var minMax = { min: data[0][column], max: data[0][column] }; + for (var i = 0; i < data.length; i++) { + if (minMax.min > data[i][column]) { + minMax.min = data[i][column]; + } + if (minMax.max < data[i][column]) { + minMax.max = data[i][column]; } + } + return minMax; + }; - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); + /** + * Initialize the data from the data table. Calculate minimum and maximum values + * and column index values + * @param {Array | DataSet | DataView} rawData The data containing the items for the Graph. + * @param {Number} style Style Number + */ + Graph3d.prototype._dataInitialize = function (rawData, style) { + var me = this; - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } + // unsubscribe from the dataTable + if (this.dataSet) { + this.dataSet.off('*', this._onChange); + } - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } + if (rawData === undefined) return; - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); + if (Array.isArray(rawData)) { + rawData = new DataSet(rawData); + } - function weeks () { - return absFloor(this.days() / 7); - } + var data; + if (rawData instanceof DataSet || rawData instanceof DataView) { + data = rawData.get(); + } else { + throw new Error('Array, DataSet, or DataView expected'); + } - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; + if (data.length == 0) return; - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } + this.dataSet = rawData; + this.dataTable = data; - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); + // subscribe to changes in the dataset + this._onChange = function () { + me.setData(me.dataSet); + }; + this.dataSet.on('*', this._onChange); - var a = seconds < thresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months === 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years === 1 && ['y'] || ['yy', years]; + // _determineColumnIndexes + // getNumberOfRows (points) + // getNumberOfColumns (x,y,z,v,t,t1,t2...) + // getDistinctValues (unique values?) + // getColumnRange - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } + // determine the location of x,y,z,value,filter columns + this.colX = 'x'; + this.colY = 'y'; + this.colZ = 'z'; + this.colValue = 'style'; + this.colFilter = 'filter'; - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; + // check if a filter column is provided + if (data[0].hasOwnProperty('filter')) { + if (this.dataFilter === undefined) { + this.dataFilter = new Filter(rawData, this.colFilter, this); + this.dataFilter.setOnLoadCallback(function () { + me.redraw(); + }); } + } - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); + var withBars = this.style == Graph3d.STYLE.BAR || this.style == Graph3d.STYLE.BARCOLOR || this.style == Graph3d.STYLE.BARSIZE; - if (withSuffix) { - output = locale.pastFuture(+this, output); - } + // determine barWidth from data + if (withBars) { + if (this.defaultXBarWidth !== undefined) { + this.xBarWidth = this.defaultXBarWidth; + } else { + var dataX = this.getDistinctValues(data, this.colX); + this.xBarWidth = dataX[1] - dataX[0] || 1; + } - return locale.postformat(output); + if (this.defaultYBarWidth !== undefined) { + this.yBarWidth = this.defaultYBarWidth; + } else { + var dataY = this.getDistinctValues(data, this.colY); + this.yBarWidth = dataY[1] - dataY[0] || 1; } + } - var iso_string__abs = Math.abs; + // calculate minimums and maximums + var xRange = this.getColumnRange(data, this.colX); + if (withBars) { + xRange.min -= this.xBarWidth / 2; + xRange.max += this.xBarWidth / 2; + } + this.xMin = this.defaultXMin !== undefined ? this.defaultXMin : xRange.min; + this.xMax = this.defaultXMax !== undefined ? this.defaultXMax : xRange.max; + if (this.xMax <= this.xMin) this.xMax = this.xMin + 1; + this.xStep = this.defaultXStep !== undefined ? this.defaultXStep : (this.xMax - this.xMin) / 5; - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; + var yRange = this.getColumnRange(data, this.colY); + if (withBars) { + yRange.min -= this.yBarWidth / 2; + yRange.max += this.yBarWidth / 2; + } + this.yMin = this.defaultYMin !== undefined ? this.defaultYMin : yRange.min; + this.yMax = this.defaultYMax !== undefined ? this.defaultYMax : yRange.max; + if (this.yMax <= this.yMin) this.yMax = this.yMin + 1; + this.yStep = this.defaultYStep !== undefined ? this.defaultYStep : (this.yMax - this.yMin) / 5; - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; + var zRange = this.getColumnRange(data, this.colZ); + this.zMin = this.defaultZMin !== undefined ? this.defaultZMin : zRange.min; + this.zMax = this.defaultZMax !== undefined ? this.defaultZMax : zRange.max; + if (this.zMax <= this.zMin) this.zMax = this.zMin + 1; + this.zStep = this.defaultZStep !== undefined ? this.defaultZStep : (this.zMax - this.zMin) / 5; - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; + if (this.colValue !== undefined) { + var valueRange = this.getColumnRange(data, this.colValue); + this.valueMin = this.defaultValueMin !== undefined ? this.defaultValueMin : valueRange.min; + this.valueMax = this.defaultValueMax !== undefined ? this.defaultValueMax : valueRange.max; + if (this.valueMax <= this.valueMin) this.valueMax = this.valueMin + 1; + } + // set the scale dependent on the ranges. + this._setScale(); + }; - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); + /** + * Filter the data based on the current filter + * @param {Array} data + * @return {Array} dataPoints Array with point objects which can be drawn on screen + */ + Graph3d.prototype._getDataPoints = function (data) { + // TODO: store the created matrix dataPoints in the filters instead of reloading each time + var x, y, i, z, obj, point; - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } + var dataPoints = []; - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } + if (this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE) { + // copy all values from the google data table to a matrix + // the provided values are supposed to form a grid of (x,y) positions - var duration_prototype__proto = Duration.prototype; + // create two lists with all present x and y values + var dataX = []; + var dataY = []; + for (i = 0; i < this.getNumberOfRows(data); i++) { + x = data[i][this.colX] || 0; + y = data[i][this.colY] || 0; - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; + if (dataX.indexOf(x) === -1) { + dataX.push(x); + } + if (dataY.indexOf(y) === -1) { + dataY.push(y); + } + } - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; + var sortNumber = function sortNumber(a, b) { + return a - b; + }; + dataX.sort(sortNumber); + dataY.sort(sortNumber); - // Side effect imports + // create a grid, a 2d matrix, with all values. + var dataMatrix = []; // temporary data matrix + for (i = 0; i < data.length; i++) { + x = data[i][this.colX] || 0; + y = data[i][this.colY] || 0; + z = data[i][this.colZ] || 0; - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); + var xIndex = dataX.indexOf(x); // TODO: implement Array().indexOf() for Internet Explorer + var yIndex = dataY.indexOf(y); - // PARSING + if (dataMatrix[xIndex] === undefined) { + dataMatrix[xIndex] = []; + } - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); + var point3d = new Point3d(); + point3d.x = x; + point3d.y = y; + point3d.z = z; - // Side effect imports + obj = {}; + obj.point = point3d; + obj.trans = undefined; + obj.screen = undefined; + obj.bottom = new Point3d(x, y, this.zMin); + dataMatrix[xIndex][yIndex] = obj; - utils_hooks__hooks.version = '2.10.5'; + dataPoints.push(obj); + } - setHookCallback(local__createLocal); + // fill in the pointers to the neighbors. + for (x = 0; x < dataMatrix.length; x++) { + for (y = 0; y < dataMatrix[x].length; y++) { + if (dataMatrix[x][y]) { + dataMatrix[x][y].pointRight = x < dataMatrix.length - 1 ? dataMatrix[x + 1][y] : undefined; + dataMatrix[x][y].pointTop = y < dataMatrix[x].length - 1 ? dataMatrix[x][y + 1] : undefined; + dataMatrix[x][y].pointCross = x < dataMatrix.length - 1 && y < dataMatrix[x].length - 1 ? dataMatrix[x + 1][y + 1] : undefined; + } + } + } + } else { + // 'dot', 'dot-line', etc. + // copy all values from the google data table to a list with Point3d objects + for (i = 0; i < data.length; i++) { + point = new Point3d(); + point.x = data[i][this.colX] || 0; + point.y = data[i][this.colY] || 0; + point.z = data[i][this.colZ] || 0; - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; + if (this.colValue !== undefined) { + point.value = data[i][this.colValue] || 0; + } - var _moment = utils_hooks__hooks; + obj = {}; + obj.point = point; + obj.bottom = new Point3d(point.x, point.y, this.zMin); + obj.trans = undefined; + obj.screen = undefined; - return _moment; + dataPoints.push(obj); + } + } - })); - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10)(module))) + return dataPoints; + }; -/***/ }, -/* 10 */ -/***/ function(module, exports) { + /** + * Create the main frame for the Graph3d. + * This function is executed once when a Graph3d object is created. The frame + * contains a canvas, and this canvas contains all objects like the axis and + * nodes. + */ + Graph3d.prototype.create = function () { + // remove all elements from the container element. + while (this.containerElement.hasChildNodes()) { + this.containerElement.removeChild(this.containerElement.firstChild); + } - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; - } + this.frame = document.createElement('div'); + this.frame.style.position = 'relative'; + this.frame.style.overflow = 'hidden'; + // create the graph canvas (HTML canvas element) + this.frame.canvas = document.createElement('canvas'); + this.frame.canvas.style.position = 'relative'; + this.frame.appendChild(this.frame.canvas); + //if (!this.frame.canvas.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.frame.canvas.appendChild(noCanvas); + } -/***/ }, -/* 11 */ -/***/ function(module, exports) { + this.frame.filter = document.createElement('div'); + this.frame.filter.style.position = 'absolute'; + this.frame.filter.style.bottom = '0px'; + this.frame.filter.style.left = '0px'; + this.frame.filter.style.width = '100%'; + this.frame.appendChild(this.frame.filter); - function webpackContext(req) { - throw new Error("Cannot find module '" + req + "'."); - } - webpackContext.keys = function() { return []; }; - webpackContext.resolve = webpackContext; - module.exports = webpackContext; - webpackContext.id = 11; + // add event listeners to handle moving and zooming the contents + var me = this; + var onmousedown = function onmousedown(event) { + me._onMouseDown(event); + }; + var ontouchstart = function ontouchstart(event) { + me._onTouchStart(event); + }; + var onmousewheel = function onmousewheel(event) { + me._onWheel(event); + }; + var ontooltip = function ontooltip(event) { + me._onTooltip(event); + }; + // TODO: these events are never cleaned up... can give a 'memory leakage' + util.addEventListener(this.frame.canvas, 'keydown', onkeydown); + util.addEventListener(this.frame.canvas, 'mousedown', onmousedown); + util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart); + util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel); + util.addEventListener(this.frame.canvas, 'mousemove', ontooltip); -/***/ }, -/* 12 */ -/***/ function(module, exports) { + // add the new graph to the container element + this.containerElement.appendChild(this.frame); + }; - /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + /** + * Set a new size for the graph + * @param {string} width Width in pixels or percentage (for example '800px' + * or '50%') + * @param {string} height Height in pixels or percentage (for example '400px' + * or '30%') + */ + Graph3d.prototype.setSize = function (width, height) { + this.frame.style.width = width; + this.frame.style.height = height; - var _rng; + this._resizeCanvas(); + }; - var globalVar = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : null; + /** + * Resize the canvas to the current size of the frame + */ + Graph3d.prototype._resizeCanvas = function () { + this.frame.canvas.style.width = '100%'; + this.frame.canvas.style.height = '100%'; - if (globalVar && globalVar.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - _rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; - } + this.frame.canvas.width = this.frame.canvas.clientWidth; + this.frame.canvas.height = this.frame.canvas.clientHeight; - if (!_rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - _rng = function () { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } + // adjust with for margin + this.frame.filter.style.width = this.frame.canvas.clientWidth - 2 * 10 + 'px'; + }; - return _rnds; - }; - } + /** + * Start animation + */ + Graph3d.prototype.animationStart = function () { + if (!this.frame.filter || !this.frame.filter.slider) throw 'No animation available'; - // uuid.js - // - // Copyright (c) 2010-2012 Robert Kieffer - // MIT License - http://opensource.org/licenses/mit-license.php + this.frame.filter.slider.play(); + }; - // Unique ID creation requires a high quality random # generator. We feature - // detect to determine the best RNG source, normalizing to a function that - // returns 128-bits of randomness, since that's what's usually required + /** + * Stop animation + */ + Graph3d.prototype.animationStop = function () { + if (!this.frame.filter || !this.frame.filter.slider) return; - //var _rng = require('./rng'); + this.frame.filter.slider.stop(); + }; - // Maps for number <-> hex string conversion - var _byteToHex = []; - var _hexToByte = {}; - for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; - } + /** + * Resize the center position based on the current values in this.defaultXCenter + * and this.defaultYCenter (which are strings with a percentage or a value + * in pixels). The center positions are the variables this.xCenter + * and this.yCenter + */ + Graph3d.prototype._resizeCenter = function () { + // calculate the horizontal center position + if (this.defaultXCenter.charAt(this.defaultXCenter.length - 1) === '%') { + this.xcenter = parseFloat(this.defaultXCenter) / 100 * this.frame.canvas.clientWidth; + } else { + this.xcenter = parseFloat(this.defaultXCenter); // supposed to be in px + } - // **`parse()` - Parse a UUID into it's component bytes** - function parse(s, buf, offset) { - var i = buf && offset || 0, - ii = 0; + // calculate the vertical center position + if (this.defaultYCenter.charAt(this.defaultYCenter.length - 1) === '%') { + this.ycenter = parseFloat(this.defaultYCenter) / 100 * (this.frame.canvas.clientHeight - this.frame.filter.clientHeight); + } else { + this.ycenter = parseFloat(this.defaultYCenter); // supposed to be in px + } + }; - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) { - if (ii < 16) { - // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); + /** + * Set the rotation and distance of the camera + * @param {Object} pos An object with the camera position. The object + * contains three parameters: + * - horizontal {Number} + * The horizontal rotation, between 0 and 2*PI. + * Optional, can be left undefined. + * - vertical {Number} + * The vertical rotation, between 0 and 0.5*PI + * if vertical=0.5*PI, the graph is shown from the + * top. Optional, can be left undefined. + * - distance {Number} + * The (normalized) distance of the camera to the + * center of the graph, a value between 0.71 and 5.0. + * Optional, can be left undefined. + */ + Graph3d.prototype.setCameraPosition = function (pos) { + if (pos === undefined) { + return; + } - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; + if (pos.horizontal !== undefined && pos.vertical !== undefined) { + this.camera.setArmRotation(pos.horizontal, pos.vertical); } - return buf; - } + if (pos.distance !== undefined) { + this.camera.setArmLength(pos.distance); + } - // **`unparse()` - Convert UUID byte array (ala parse()) into a string** - function unparse(buf, offset) { - var i = offset || 0, - bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]]; - } + this.redraw(); + }; - // **`v1()` - Generate time-based UUID** - // - // Inspired by https://github.com/LiosK/UUID.js - // and http://docs.python.org/library/uuid.html + /** + * Retrieve the current camera rotation + * @return {object} An object with parameters horizontal, vertical, and + * distance + */ + Graph3d.prototype.getCameraPosition = function () { + var pos = this.camera.getArmRotation(); + pos.distance = this.camera.getArmLength(); + return pos; + }; - // random #'s we need to init node and clockseq - var _seedBytes = _rng(); + /** + * Load data into the 3D Graph + */ + Graph3d.prototype._readData = function (data) { + // read the data + this._dataInitialize(data, this.style); - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - var _nodeId = [_seedBytes[0] | 0x01, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]]; + if (this.dataFilter) { + // apply filtering + this.dataPoints = this.dataFilter._getDataPoints(); + } else { + // no filtering. load all data + this.dataPoints = this._getDataPoints(this.dataTable); + } - // Per 4.2.2, randomize (14 bit) clockseq - var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; + // draw the filter + this._redrawFilter(); + }; - // Previous uuid creation time - var _lastMSecs = 0, - _lastNSecs = 0; + /** + * Replace the dataset of the Graph3d + * @param {Array | DataSet | DataView} data + */ + Graph3d.prototype.setData = function (data) { + this._readData(data); + this.redraw(); - // See https://github.com/broofa/node-uuid for API details - function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; + // start animation when option is true + if (this.animationAutoStart && this.dataFilter) { + this.animationStart(); + } + }; - options = options || {}; + /** + * Update the options. Options will be merged with current options + * @param {Object} options + */ + Graph3d.prototype.setOptions = function (options) { + var cameraPosition = undefined; - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + this.animationStop(); - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + if (options !== undefined) { + // retrieve parameter values + if (options.width !== undefined) this.width = options.width; + if (options.height !== undefined) this.height = options.height; - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + if (options.xCenter !== undefined) this.defaultXCenter = options.xCenter; + if (options.yCenter !== undefined) this.defaultYCenter = options.yCenter; - // Time since last uuid creation (in msecs) - var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; + if (options.filterLabel !== undefined) this.filterLabel = options.filterLabel; + if (options.legendLabel !== undefined) this.legendLabel = options.legendLabel; + if (options.xLabel !== undefined) this.xLabel = options.xLabel; + if (options.yLabel !== undefined) this.yLabel = options.yLabel; + if (options.zLabel !== undefined) this.zLabel = options.zLabel; - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } + if (options.xValueLabel !== undefined) this.xValueLabel = options.xValueLabel; + if (options.yValueLabel !== undefined) this.yValueLabel = options.yValueLabel; + if (options.zValueLabel !== undefined) this.zValueLabel = options.zValueLabel; - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } + if (options.style !== undefined) { + var styleNumber = this._getStyleNumber(options.style); + if (styleNumber !== -1) { + this.style = styleNumber; + } + } + if (options.showGrid !== undefined) this.showGrid = options.showGrid; + if (options.showPerspective !== undefined) this.showPerspective = options.showPerspective; + if (options.showShadow !== undefined) this.showShadow = options.showShadow; + if (options.tooltip !== undefined) this.showTooltip = options.tooltip; + if (options.showAnimationControls !== undefined) this.showAnimationControls = options.showAnimationControls; + if (options.keepAspectRatio !== undefined) this.keepAspectRatio = options.keepAspectRatio; + if (options.verticalRatio !== undefined) this.verticalRatio = options.verticalRatio; - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } + if (options.animationInterval !== undefined) this.animationInterval = options.animationInterval; + if (options.animationPreload !== undefined) this.animationPreload = options.animationPreload; + if (options.animationAutoStart !== undefined) this.animationAutoStart = options.animationAutoStart; - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; + if (options.xBarWidth !== undefined) this.defaultXBarWidth = options.xBarWidth; + if (options.yBarWidth !== undefined) this.defaultYBarWidth = options.yBarWidth; - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; + if (options.xMin !== undefined) this.defaultXMin = options.xMin; + if (options.xStep !== undefined) this.defaultXStep = options.xStep; + if (options.xMax !== undefined) this.defaultXMax = options.xMax; + if (options.yMin !== undefined) this.defaultYMin = options.yMin; + if (options.yStep !== undefined) this.defaultYStep = options.yStep; + if (options.yMax !== undefined) this.defaultYMax = options.yMax; + if (options.zMin !== undefined) this.defaultZMin = options.zMin; + if (options.zStep !== undefined) this.defaultZStep = options.zStep; + if (options.zMax !== undefined) this.defaultZMax = options.zMax; + if (options.valueMin !== undefined) this.defaultValueMin = options.valueMin; + if (options.valueMax !== undefined) this.defaultValueMax = options.valueMax; + if (options.backgroundColor !== undefined) this._setBackgroundColor(options.backgroundColor); - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; + if (options.cameraPosition !== undefined) cameraPosition = options.cameraPosition; - // `time_mid` - var tmh = msecs / 0x100000000 * 10000 & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; + if (cameraPosition !== undefined) { + this.camera.setArmRotation(cameraPosition.horizontal, cameraPosition.vertical); + this.camera.setArmLength(cameraPosition.distance); + } + + // colors + if (options.axisColor !== undefined) this.axisColor = options.axisColor; + if (options.gridColor !== undefined) this.gridColor = options.gridColor; + if (options.dataColor) { + if (typeof options.dataColor === 'string') { + this.dataColor.fill = options.dataColor; + this.dataColor.stroke = options.dataColor; + } else { + if (options.dataColor.fill) { + this.dataColor.fill = options.dataColor.fill; + } + if (options.dataColor.stroke) { + this.dataColor.stroke = options.dataColor.stroke; + } + if (options.dataColor.strokeWidth !== undefined) { + this.dataColor.strokeWidth = options.dataColor.strokeWidth; + } + } + } + } + + this.setSize(this.width, this.height); + + // re-load the data + if (this.dataTable) { + this.setData(this.dataTable); + } - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; + // start animation when option is true + if (this.animationAutoStart && this.dataFilter) { + this.animationStart(); + } + }; - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; + /** + * Redraw the Graph. + */ + Graph3d.prototype.redraw = function () { + if (this.dataPoints === undefined) { + throw 'Error: graph data not initialized'; + } - // `clock_seq_low` - b[i++] = clockseq & 0xff; + this._resizeCanvas(); + this._resizeCenter(); + this._redrawSlider(); + this._redrawClear(); + this._redrawAxis(); - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; + if (this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE) { + this._redrawDataGrid(); + } else if (this.style === Graph3d.STYLE.LINE) { + this._redrawDataLine(); + } else if (this.style === Graph3d.STYLE.BAR || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { + this._redrawDataBar(); + } else { + // style is DOT, DOTLINE, DOTCOLOR, DOTSIZE + this._redrawDataDot(); } - return buf ? buf : unparse(b); - } + this._redrawInfo(); + this._redrawLegend(); + }; - // **`v4()` - Generate random UUID** + /** + * Clear the canvas before redrawing + */ + Graph3d.prototype._redrawClear = function () { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); - // See https://github.com/broofa/node-uuid for API details - function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; + ctx.clearRect(0, 0, canvas.width, canvas.height); + }; - if (typeof options == 'string') { - buf = options == 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; + /** + * Redraw the legend showing the colors + */ + Graph3d.prototype._redrawLegend = function () { + var y; - var rnds = options.random || (options.rng || _rng)(); + if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE) { - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; + var dotSize = this.frame.clientWidth * 0.02; - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; + var widthMin, widthMax; + if (this.style === Graph3d.STYLE.DOTSIZE) { + widthMin = dotSize / 2; // px + widthMax = dotSize / 2 + dotSize * 2; // Todo: put this in one function + } else { + widthMin = 20; // px + widthMax = 20; // px } + + var height = Math.max(this.frame.clientHeight * 0.25, 100); + var top = this.margin; + var right = this.frame.clientWidth - this.margin; + var left = right - widthMax; + var bottom = top + height; } - return buf || unparse(rnds); - } + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + ctx.lineWidth = 1; + ctx.font = '14px arial'; // TODO: put in options - // Export public API - var uuid = v4; - uuid.v1 = v1; - uuid.v4 = v4; - uuid.parse = parse; - uuid.unparse = unparse; + if (this.style === Graph3d.STYLE.DOTCOLOR) { + // draw the color bar + var ymin = 0; + var ymax = height; // Todo: make height customizable + for (y = ymin; y < ymax; y++) { + var f = (y - ymin) / (ymax - ymin); - module.exports = uuid; - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + //var width = (dotSize / 2 + (1-f) * dotSize * 2); // Todo: put this in one function + var hue = f * 240; + var color = this._hsv2rgb(hue, 1, 1); -/***/ }, -/* 13 */ -/***/ function(module, exports) { + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(left, top + y); + ctx.lineTo(right, top + y); + ctx.stroke(); + } - // DOM utility methods + ctx.strokeStyle = this.axisColor; + ctx.strokeRect(left, top, widthMax, height); + } - /** - * this prepares the JSON container for allocating SVG elements - * @param JSONcontainer - * @private - */ - 'use strict'; + if (this.style === Graph3d.STYLE.DOTSIZE) { + // draw border around color bar + ctx.strokeStyle = this.axisColor; + ctx.fillStyle = this.dataColor.fill; + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(right, top); + ctx.lineTo(right - widthMax + widthMin, bottom); + ctx.lineTo(left, bottom); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + } - exports.prepareElements = function (JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - JSONcontainer[elementType].redundant = JSONcontainer[elementType].used; - JSONcontainer[elementType].used = []; + if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE) { + // print values along the color bar + var gridLineLen = 5; // px + var step = new StepNumber(this.valueMin, this.valueMax, (this.valueMax - this.valueMin) / 5, true); + step.start(); + if (step.getCurrent() < this.valueMin) { + step.next(); } - } - }; + while (!step.end()) { + y = bottom - (step.getCurrent() - this.valueMin) / (this.valueMax - this.valueMin) * height; - /** - * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from - * which to remove the redundant elements. - * - * @param JSONcontainer - * @private - */ - exports.cleanupElements = function (JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - if (JSONcontainer[elementType].redundant) { - for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) { - JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]); - } - JSONcontainer[elementType].redundant = []; - } + ctx.beginPath(); + ctx.moveTo(left - gridLineLen, y); + ctx.lineTo(left, y); + ctx.stroke(); + + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.axisColor; + ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y); + + step.next(); } + + ctx.textAlign = 'right'; + ctx.textBaseline = 'top'; + var label = this.legendLabel; + ctx.fillText(label, right, bottom + this.margin); } }; /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param svgContainer - * @returns {*} - * @private + * Redraw the filter */ - exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) { - var element; - // allocate SVG element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { - // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } else { - // create a new element and add it to the SVG - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - svgContainer.appendChild(element); - } + Graph3d.prototype._redrawFilter = function () { + this.frame.filter.innerHTML = ''; + + if (this.dataFilter) { + var options = { + 'visible': this.showAnimationControls + }; + var slider = new Slider(this.frame.filter, options); + this.frame.filter.slider = slider; + + // TODO: css here is not nice here... + this.frame.filter.style.padding = '10px'; + //this.frame.filter.style.backgroundColor = '#EFEFEF'; + + slider.setValues(this.dataFilter.values); + slider.setPlayInterval(this.animationInterval); + + // create an event handler + var me = this; + var onchange = function onchange() { + var index = slider.getIndex(); + + me.dataFilter.selectValue(index); + me.dataPoints = me.dataFilter._getDataPoints(); + + me.redraw(); + }; + slider.setOnChangeCallback(onchange); } else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - JSONcontainer[elementType] = { used: [], redundant: [] }; - svgContainer.appendChild(element); + this.frame.filter.slider = undefined; } - JSONcontainer[elementType].used.push(element); - return element; }; /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param DOMContainer - * @returns {*} - * @private + * Redraw the slider */ - exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) { - var element; - // allocate DOM element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { - // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } else { - // create a new element and add it to the SVG - element = document.createElement(elementType); - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } else { - DOMContainer.appendChild(element); - } - } - } else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElement(elementType); - JSONcontainer[elementType] = { used: [], redundant: [] }; - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } else { - DOMContainer.appendChild(element); - } + Graph3d.prototype._redrawSlider = function () { + if (this.frame.filter.slider !== undefined) { + this.frame.filter.slider.redraw(); } - JSONcontainer[elementType].used.push(element); - return element; }; /** - * Draw a point object. This is a separate function because it can also be called by the legend. - * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions - * as well. - * - * @param x - * @param y - * @param groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' } - * @param JSONcontainer - * @param svgContainer - * @param labelObj - * @returns {*} + * Redraw common information */ - exports.drawPoint = function (x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) { - var point; - if (groupTemplate.style == 'circle') { - point = exports.getSVGElement('circle', JSONcontainer, svgContainer); - point.setAttributeNS(null, 'cx', x); - point.setAttributeNS(null, 'cy', y); - point.setAttributeNS(null, 'r', 0.5 * groupTemplate.size); - } else { - point = exports.getSVGElement('rect', JSONcontainer, svgContainer); - point.setAttributeNS(null, 'x', x - 0.5 * groupTemplate.size); - point.setAttributeNS(null, 'y', y - 0.5 * groupTemplate.size); - point.setAttributeNS(null, 'width', groupTemplate.size); - point.setAttributeNS(null, 'height', groupTemplate.size); - } - - if (groupTemplate.style !== undefined) { - point.setAttributeNS(null, 'style', groupTemplate.style); - } - point.setAttributeNS(null, 'class', groupTemplate.className + ' vis-point'); - //handle label - - if (labelObj) { - var label = exports.getSVGElement('text', JSONcontainer, svgContainer); - if (labelObj.xOffset) { - x = x + labelObj.xOffset; - } + Graph3d.prototype._redrawInfo = function () { + if (this.dataFilter) { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); - if (labelObj.yOffset) { - y = y + labelObj.yOffset; - } - if (labelObj.content) { - label.textContent = labelObj.content; - } + ctx.font = '14px arial'; // TODO: put in options + ctx.lineStyle = 'gray'; + ctx.fillStyle = 'gray'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; - if (labelObj.className) { - label.setAttributeNS(null, 'class', labelObj.className + ' vis-label'); - } - label.setAttributeNS(null, 'x', x); - label.setAttributeNS(null, 'y', y); + var x = this.margin; + var y = this.margin; + ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y); } - - return point; }; /** - * draw a bar SVG element centered on the X coordinate - * - * @param x - * @param y - * @param className + * Redraw the axis */ - exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer, style) { - if (height != 0) { - if (height < 0) { - height *= -1; - y -= height; - } - var rect = exports.getSVGElement('rect', JSONcontainer, svgContainer); - rect.setAttributeNS(null, 'x', x - 0.5 * width); - rect.setAttributeNS(null, 'y', y); - rect.setAttributeNS(null, 'width', width); - rect.setAttributeNS(null, 'height', height); - rect.setAttributeNS(null, 'class', className); - if (style) { - rect.setAttributeNS(null, 'style', style); - } - } - }; - -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { + Graph3d.prototype._redrawAxis = function () { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + from, + to, + step, + prettyStep, + text, + xText, + yText, + zText, + offset, + xOffset, + yOffset, + xMin2d, + xMax2d; - 'use strict'; + // TODO: get the actual rendered style of the containerElement + //ctx.font = this.containerElement.style.font; + ctx.font = 24 / this.camera.getArmLength() + 'px arial'; - var util = __webpack_require__(7); - var Queue = __webpack_require__(15); + // calculate the length for the short grid lines + var gridLenX = 0.025 / this.scale.x; + var gridLenY = 0.025 / this.scale.y; + var textMargin = 5 / this.camera.getArmLength(); // px + var armAngle = this.camera.getArmRotation().horizontal; - /** - * DataSet - * - * Usage: - * var dataSet = new DataSet({ - * fieldId: '_id', - * type: { - * // ... - * } - * }); - * - * dataSet.add(item); - * dataSet.add(data); - * dataSet.update(item); - * dataSet.update(data); - * dataSet.remove(id); - * dataSet.remove(ids); - * var data = dataSet.get(); - * var data = dataSet.get(id); - * var data = dataSet.get(ids); - * var data = dataSet.get(ids, options, data); - * dataSet.clear(); - * - * A data set can: - * - add/remove/update data - * - gives triggers upon changes in the data - * - can import/export data in various data formats - * - * @param {Array} [data] Optional array with initial data - * @param {Object} [options] Available options: - * {String} fieldId Field name of the id in the - * items, 'id' by default. - * {Object. 0 ? this.yMin : this.yMax; + text = this._convert3Dto2D(new Point3d(x, yText, this.zMin)); + if (Math.cos(armAngle * 2) > 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + text.y += textMargin; + } else if (Math.sin(armAngle * 2) < 0) { + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; } - } + ctx.fillStyle = this.axisColor; + ctx.fillText(' ' + this.xValueLabel(step.getCurrent()) + ' ', text.x, text.y); - // TODO: deprecated since version 1.1.1 (or 2.0.0?) - if (this._options.convert) { - throw new Error('Option "convert" is deprecated. Use "type" instead.'); + step.next(); } - this._subscribers = {}; // event subscribers - - // add initial data when provided - if (data) { - this.add(data); + // draw y-grid lines + ctx.lineWidth = 1; + prettyStep = this.defaultYStep === undefined; + step = new StepNumber(this.yMin, this.yMax, this.yStep, prettyStep); + step.start(); + if (step.getCurrent() < this.yMin) { + step.next(); } + while (!step.end()) { + if (this.showGrid) { + from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.gridColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } else { + from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMin + gridLenY, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); - this.setOptions(options); - } + from = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax - gridLenY, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } - /** - * @param {Object} [options] Available options: - * {Object} queue Queue changes to the DataSet, - * flush them all at once. - * Queue options: - * - {number} delay Delay in ms, null by default - * - {number} max Maximum number of entries in the queue, Infinity by default - * @param options - */ - DataSet.prototype.setOptions = function (options) { - if (options && options.queue !== undefined) { - if (options.queue === false) { - // delete queue if loaded - if (this._queue) { - this._queue.destroy(); - delete this._queue; - } + xText = Math.sin(armAngle) > 0 ? this.xMin : this.xMax; + text = this._convert3Dto2D(new Point3d(xText, step.getCurrent(), this.zMin)); + if (Math.cos(armAngle * 2) < 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + text.y += textMargin; + } else if (Math.sin(armAngle * 2) > 0) { + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; } else { - // create queue and update its options - if (!this._queue) { - this._queue = Queue.extend(this, { - replace: ['add', 'update', 'remove'] - }); - } - - if (typeof options.queue === 'object') { - this._queue.setOptions(options.queue); - } + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; } - } - }; + ctx.fillStyle = this.axisColor; + ctx.fillText(' ' + this.yValueLabel(step.getCurrent()) + ' ', text.x, text.y); - /** - * Subscribe to an event, add an event listener - * @param {String} event Event name. Available events: 'put', 'update', - * 'remove' - * @param {function} callback Callback method. Called with three parameters: - * {String} event - * {Object | null} params - * {String | Number} senderId - */ - DataSet.prototype.on = function (event, callback) { - var subscribers = this._subscribers[event]; - if (!subscribers) { - subscribers = []; - this._subscribers[event] = subscribers; + step.next(); } - subscribers.push({ - callback: callback - }); - }; + // draw z-grid lines and axis + ctx.lineWidth = 1; + prettyStep = this.defaultZStep === undefined; + step = new StepNumber(this.zMin, this.zMax, this.zStep, prettyStep); + step.start(); + if (step.getCurrent() < this.zMin) { + step.next(); + } + xText = Math.cos(armAngle) > 0 ? this.xMin : this.xMax; + yText = Math.sin(armAngle) < 0 ? this.yMin : this.yMax; + while (!step.end()) { + // TODO: make z-grid lines really 3d? + from = this._convert3Dto2D(new Point3d(xText, yText, step.getCurrent())); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(from.x - textMargin, from.y); + ctx.stroke(); - // TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0) - DataSet.prototype.subscribe = function () { - throw new Error('DataSet.subscribe is deprecated. Use DataSet.on instead.'); - }; + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.axisColor; + ctx.fillText(this.zValueLabel(step.getCurrent()) + ' ', from.x - 5, from.y); - /** - * Unsubscribe from an event, remove an event listener - * @param {String} event - * @param {function} callback - */ - DataSet.prototype.off = function (event, callback) { - var subscribers = this._subscribers[event]; - if (subscribers) { - this._subscribers[event] = subscribers.filter(function (listener) { - return listener.callback != callback; - }); + step.next(); } - }; + ctx.lineWidth = 1; + from = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + to = this._convert3Dto2D(new Point3d(xText, yText, this.zMax)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); - // TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0) - DataSet.prototype.unsubscribe = function () { - throw new Error('DataSet.unsubscribe is deprecated. Use DataSet.off instead.'); - }; + // draw x-axis + ctx.lineWidth = 1; + // line at yMin + xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); + xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(xMin2d.x, xMin2d.y); + ctx.lineTo(xMax2d.x, xMax2d.y); + ctx.stroke(); + // line at ymax + xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); + xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(xMin2d.x, xMin2d.y); + ctx.lineTo(xMax2d.x, xMax2d.y); + ctx.stroke(); - /** - * Trigger an event - * @param {String} event - * @param {Object | null} params - * @param {String} [senderId] Optional id of the sender. - * @private - */ - DataSet.prototype._trigger = function (event, params, senderId) { - if (event == '*') { - throw new Error('Cannot trigger event *'); - } + // draw y-axis + ctx.lineWidth = 1; + // line at xMin + from = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + // line at xMax + from = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); + ctx.strokeStyle = this.axisColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); - var subscribers = []; - if (event in this._subscribers) { - subscribers = subscribers.concat(this._subscribers[event]); - } - if ('*' in this._subscribers) { - subscribers = subscribers.concat(this._subscribers['*']); + // draw x-label + var xLabel = this.xLabel; + if (xLabel.length > 0) { + yOffset = 0.1 / this.scale.y; + xText = (this.xMin + this.xMax) / 2; + yText = Math.cos(armAngle) > 0 ? this.yMin - yOffset : this.yMax + yOffset; + text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + if (Math.cos(armAngle * 2) > 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + } else if (Math.sin(armAngle * 2) < 0) { + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + } + ctx.fillStyle = this.axisColor; + ctx.fillText(xLabel, text.x, text.y); } - for (var i = 0; i < subscribers.length; i++) { - var subscriber = subscribers[i]; - if (subscriber.callback) { - subscriber.callback(event, params, senderId || null); + // draw y-label + var yLabel = this.yLabel; + if (yLabel.length > 0) { + xOffset = 0.1 / this.scale.x; + xText = Math.sin(armAngle) > 0 ? this.xMin - xOffset : this.xMax + xOffset; + yText = (this.yMin + this.yMax) / 2; + text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + if (Math.cos(armAngle * 2) < 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + } else if (Math.sin(armAngle * 2) > 0) { + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; } + ctx.fillStyle = this.axisColor; + ctx.fillText(yLabel, text.x, text.y); + } + + // draw z-label + var zLabel = this.zLabel; + if (zLabel.length > 0) { + offset = 30; // pixels. // TODO: relate to the max width of the values on the z axis? + xText = Math.cos(armAngle) > 0 ? this.xMin : this.xMax; + yText = Math.sin(armAngle) < 0 ? this.yMin : this.yMax; + zText = (this.zMin + this.zMax) / 2; + text = this._convert3Dto2D(new Point3d(xText, yText, zText)); + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.axisColor; + ctx.fillText(zLabel, text.x - offset, text.y); } }; /** - * Add data. - * Adding an item will fail when there already is an item with the same id. - * @param {Object | Array} data - * @param {String} [senderId] Optional sender id - * @return {Array} addedIds Array with the ids of the added items + * Calculate the color based on the given value. + * @param {Number} H Hue, a value be between 0 and 360 + * @param {Number} S Saturation, a value between 0 and 1 + * @param {Number} V Value, a value between 0 and 1 */ - DataSet.prototype.add = function (data, senderId) { - var addedIds = [], - id, - me = this; + Graph3d.prototype._hsv2rgb = function (H, S, V) { + var R, G, B, C, Hi, X; - if (Array.isArray(data)) { - // Array - for (var i = 0, len = data.length; i < len; i++) { - id = me._addItem(data[i]); - addedIds.push(id); - } - } else if (data instanceof Object) { - // Single item - id = me._addItem(data); - addedIds.push(id); - } else { - throw new Error('Unknown dataType'); - } + C = V * S; + Hi = Math.floor(H / 60); // hi = 0,1,2,3,4,5 + X = C * (1 - Math.abs(H / 60 % 2 - 1)); - if (addedIds.length) { - this._trigger('add', { items: addedIds }, senderId); + switch (Hi) { + case 0: + R = C;G = X;B = 0;break; + case 1: + R = X;G = C;B = 0;break; + case 2: + R = 0;G = C;B = X;break; + case 3: + R = 0;G = X;B = C;break; + case 4: + R = X;G = 0;B = C;break; + case 5: + R = C;G = 0;B = X;break; + + default: + R = 0;G = 0;B = 0;break; } - return addedIds; + return 'RGB(' + parseInt(R * 255) + ',' + parseInt(G * 255) + ',' + parseInt(B * 255) + ')'; }; /** - * Update existing items. When an item does not exist, it will be created - * @param {Object | Array} data - * @param {String} [senderId] Optional sender id - * @return {Array} updatedIds The ids of the added or updated items + * Draw all datapoints as a grid + * This function can be used when the style is 'grid' */ - DataSet.prototype.update = function (data, senderId) { - var addedIds = []; - var updatedIds = []; - var updatedData = []; - var me = this; - var fieldId = me._fieldId; + Graph3d.prototype._redrawDataGrid = function () { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + point, + right, + top, + cross, + i, + topSideVisible, + fillStyle, + strokeStyle, + lineWidth, + h, + s, + v, + zAvg; - var addOrUpdate = function addOrUpdate(item) { - var id = item[fieldId]; - if (me._data[id]) { - // update item - id = me._updateItem(item); - updatedIds.push(id); - updatedData.push(item); - } else { - // add new item - id = me._addItem(item); - addedIds.push(id); - } - }; + ctx.lineJoin = 'round'; + ctx.lineCap = 'round'; - if (Array.isArray(data)) { - // Array - for (var i = 0, len = data.length; i < len; i++) { - addOrUpdate(data[i]); - } - } else if (data instanceof Object) { - // Single item - addOrUpdate(data); - } else { - throw new Error('Unknown dataType'); - } + if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? - if (addedIds.length) { - this._trigger('add', { items: addedIds }, senderId); - } - if (updatedIds.length) { - this._trigger('update', { items: updatedIds, data: updatedData }, senderId); + // calculate the translations and screen position of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; + + // calculate the translation of the point at the bottom (needed for sorting) + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; } - return addedIds.concat(updatedIds); - }; + // sort the points on depth of their (x,y) position (not on z) + var sortDepth = function sortDepth(a, b) { + return b.dist - a.dist; + }; + this.dataPoints.sort(sortDepth); - /** - * Get a data item or multiple items. - * - * Usage: - * - * get() - * get(options: Object) - * - * get(id: Number | String) - * get(id: Number | String, options: Object) - * - * get(ids: Number[] | String[]) - * get(ids: Number[] | String[], options: Object) - * - * Where: - * - * {Number | String} id The id of an item - * {Number[] | String{}} ids An array with ids of items - * {Object} options An Object with options. Available options: - * {String} [returnType] Type of data to be returned. - * Can be 'Array' (default) or 'Object'. - * {Object.} [type] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by a field name or custom sort function. - * @throws Error - */ - DataSet.prototype.get = function (args) { - var me = this; + if (this.style === Graph3d.STYLE.SURFACE) { + for (i = 0; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + right = this.dataPoints[i].pointRight; + top = this.dataPoints[i].pointTop; + cross = this.dataPoints[i].pointCross; - // parse the arguments - var id, ids, options; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number') { - // get(id [, options]) - id = arguments[0]; - options = arguments[1]; - } else if (firstType == 'Array') { - // get(ids [, options]) - ids = arguments[0]; - options = arguments[1]; - } else { - // get([, options]) - options = arguments[0]; - } + if (point !== undefined && right !== undefined && top !== undefined && cross !== undefined) { - // determine the return type - var returnType; - if (options && options.returnType) { - var allowedValues = ['Array', 'Object']; - returnType = allowedValues.indexOf(options.returnType) == -1 ? 'Array' : options.returnType; - } else { - returnType = 'Array'; - } + if (this.showGrayBottom || this.showShadow) { + // calculate the cross product of the two vectors from center + // to left and right, in order to know whether we are looking at the + // bottom or at the top side. We can also use the cross product + // for calculating light intensity + var aDiff = Point3d.subtract(cross.trans, point.trans); + var bDiff = Point3d.subtract(top.trans, right.trans); + var crossproduct = Point3d.crossProduct(aDiff, bDiff); + var len = crossproduct.length(); + // FIXME: there is a bug with determining the surface side (shadow or colored) - // build options - var type = options && options.type || this._options.type; - var filter = options && options.filter; - var items = [], - item, - itemId, - i, - len; + topSideVisible = crossproduct.z > 0; + } else { + topSideVisible = true; + } - // convert items - if (id != undefined) { - // return a single item - item = me._getItem(id, type); - if (filter && !filter(item)) { - item = null; - } - } else if (ids != undefined) { - // return a subset of items - for (i = 0, len = ids.length; i < len; i++) { - item = me._getItem(ids[i], type); - if (!filter || filter(item)) { - items.push(item); + if (topSideVisible) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + s = 1; // saturation + + if (this.showShadow) { + v = Math.min(1 + crossproduct.x / len / 2, 1); // value. TODO: scale + fillStyle = this._hsv2rgb(h, s, v); + strokeStyle = fillStyle; + } else { + v = 1; + fillStyle = this._hsv2rgb(h, s, v); + strokeStyle = this.axisColor; // TODO: should be customizable + } + } else { + fillStyle = 'gray'; + strokeStyle = this.axisColor; + } + + ctx.lineWidth = this._getStrokeWidth(point); + ctx.fillStyle = fillStyle; + ctx.strokeStyle = strokeStyle; + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(right.screen.x, right.screen.y); + ctx.lineTo(cross.screen.x, cross.screen.y); + ctx.lineTo(top.screen.x, top.screen.y); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); // TODO: only draw stroke when strokeWidth > 0 } } } else { - // return all items - for (itemId in this._data) { - if (this._data.hasOwnProperty(itemId)) { - item = me._getItem(itemId, type); - if (!filter || filter(item)) { - items.push(item); - } + // grid style + for (i = 0; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + right = this.dataPoints[i].pointRight; + top = this.dataPoints[i].pointTop; + + if (point !== undefined && right !== undefined) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + right.point.z) / 2; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + + ctx.lineWidth = this._getStrokeWidth(point) * 2; + ctx.strokeStyle = this._hsv2rgb(h, 1, 1); + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(right.screen.x, right.screen.y); + ctx.stroke(); } - } - } - // order the results - if (options && options.order && id == undefined) { - this._sort(items, options.order); - } + if (point !== undefined && top !== undefined) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + top.point.z) / 2; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - // filter fields of the items - if (options && options.fields) { - var fields = options.fields; - if (id != undefined) { - item = this._filterFields(item, fields); - } else { - for (i = 0, len = items.length; i < len; i++) { - items[i] = this._filterFields(items[i], fields); + ctx.lineWidth = this._getStrokeWidth(point) * 2; + ctx.strokeStyle = this._hsv2rgb(h, 1, 1); + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(top.screen.x, top.screen.y); + ctx.stroke(); } } } + }; - // return the results - if (returnType == 'Object') { - var result = {}; - for (i = 0; i < items.length; i++) { - result[items[i].id] = items[i]; - } - return result; - } else { - if (id != undefined) { - // a single item - return item; + Graph3d.prototype._getStrokeWidth = function (point) { + if (point !== undefined) { + if (this.showPerspective) { + return 1 / -point.trans.z * this.dataColor.strokeWidth; } else { - // just return our array - return items; + return -(this.eye.z / this.camera.getArmLength()) * this.dataColor.strokeWidth; } } + + return this.dataColor.strokeWidth; }; /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids + * Draw all datapoints as dots. + * This function can be used when the style is 'dot' or 'dot-line' */ - DataSet.prototype.getIds = function (options) { - var data = this._data, - filter = options && options.filter, - order = options && options.order, - type = options && options.type || this._options.type, - i, - len, - id, - item, - items, - ids = []; + Graph3d.prototype._redrawDataDot = function () { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + var i; - if (filter) { - // get filtered items - if (order) { - // create ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - items.push(item); - } - } - } + if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? - this._sort(items, order); + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } + // calculate the distance from the point at the bottom to the camera + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; + } + + // order the translated points by depth + var sortDepth = function sortDepth(a, b) { + return b.dist - a.dist; + }; + this.dataPoints.sort(sortDepth); + + // draw the datapoints as colored circles + var dotSize = this.frame.clientWidth * 0.02; // px + for (i = 0; i < this.dataPoints.length; i++) { + var point = this.dataPoints[i]; + + if (this.style === Graph3d.STYLE.DOTLINE) { + // draw a vertical line from the bottom to the graph value + //var from = this._convert3Dto2D(new Point3d(point.point.x, point.point.y, this.zMin)); + var from = this._convert3Dto2D(point.bottom); + ctx.lineWidth = 1; + ctx.strokeStyle = this.gridColor; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(point.screen.x, point.screen.y); + ctx.stroke(); + } + + // calculate radius for the circle + var size; + if (this.style === Graph3d.STYLE.DOTSIZE) { + size = dotSize / 2 + 2 * dotSize * (point.point.value - this.valueMin) / (this.valueMax - this.valueMin); } else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - ids.push(item[this._fieldId]); - } - } - } + size = dotSize; } - } else { - // get all items - if (order) { - // create an ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - items.push(data[id]); - } - } - this._sort(items, order); + var radius; + if (this.showPerspective) { + radius = size / -point.trans.z; + } else { + radius = size * -(this.eye.z / this.camera.getArmLength()); + } + if (radius < 0) { + radius = 0; + } - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } + var hue, color, borderColor; + if (this.style === Graph3d.STYLE.DOTCOLOR) { + // calculate the color based on the value + hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); + } else if (this.style === Graph3d.STYLE.DOTSIZE) { + color = this.dataColor.fill; + borderColor = this.dataColor.stroke; } else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = data[id]; - ids.push(item[this._fieldId]); - } - } + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); } - } - return ids; + // draw the circle + ctx.lineWidth = this._getStrokeWidth(point); + ctx.strokeStyle = borderColor; + ctx.fillStyle = color; + ctx.beginPath(); + ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI * 2, true); + ctx.fill(); + ctx.stroke(); + } }; /** - * Returns the DataSet itself. Is overwritten for example by the DataView, - * which returns the DataSet it is connected to instead. + * Draw all datapoints as bars. + * This function can be used when the style is 'bar', 'bar-color', or 'bar-size' */ - DataSet.prototype.getDataSet = function () { - return this; - }; + Graph3d.prototype._redrawDataBar = function () { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + var i, j, surface, corners; - /** - * Execute a callback function for every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - */ - DataSet.prototype.forEach = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - data = this._data, - item, - id; + if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? - if (options && options.order) { - // execute forEach on ordered list - var items = this.get(options); + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; - for (var i = 0, len = items.length; i < len; i++) { - item = items[i]; - id = item[this._fieldId]; - callback(item, id); - } - } else { - // unordered - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - callback(item, id); - } - } - } + // calculate the distance from the point at the bottom to the camera + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; } - }; - /** - * Map every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Object[]} mappedItems - */ - DataSet.prototype.map = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - mappedItems = [], - data = this._data, - item; + // order the translated points by depth + var sortDepth = function sortDepth(a, b) { + return b.dist - a.dist; + }; + this.dataPoints.sort(sortDepth); - // convert and filter items - for (var id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - mappedItems.push(callback(item, id)); - } + ctx.lineJoin = 'round'; + ctx.lineCap = 'round'; + + // draw the datapoints as bars + var xWidth = this.xBarWidth / 2; + var yWidth = this.yBarWidth / 2; + for (i = 0; i < this.dataPoints.length; i++) { + var point = this.dataPoints[i]; + + // determine color + var hue, color, borderColor; + if (this.style === Graph3d.STYLE.BARCOLOR) { + // calculate the color based on the value + hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); + } else if (this.style === Graph3d.STYLE.BARSIZE) { + color = this.dataColor.fill; + borderColor = this.dataColor.stroke; + } else { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); } - } - // order items - if (options && options.order) { - this._sort(mappedItems, options.order); - } + // calculate size for the bar + if (this.style === Graph3d.STYLE.BARSIZE) { + xWidth = this.xBarWidth / 2 * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); + yWidth = this.yBarWidth / 2 * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); + } - return mappedItems; - }; + // calculate all corner points + var me = this; + var point3d = point.point; + var top = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z) }]; + var bottom = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, this.zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, this.zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, this.zMin) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, this.zMin) }]; - /** - * Filter the fields of an item - * @param {Object | null} item - * @param {String[]} fields Field names - * @return {Object | null} filteredItem or null if no item is provided - * @private - */ - DataSet.prototype._filterFields = function (item, fields) { - if (!item) { - // item is null - return item; - } + // calculate screen location of the points + top.forEach(function (obj) { + obj.screen = me._convert3Dto2D(obj.point); + }); + bottom.forEach(function (obj) { + obj.screen = me._convert3Dto2D(obj.point); + }); - var filteredItem = {}; + // create five sides, calculate both corner points and center points + var surfaces = [{ corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point) }, { corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point) }, { corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point) }, { corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point) }, { corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point) }]; + point.surfaces = surfaces; - if (Array.isArray(fields)) { - for (var field in item) { - if (item.hasOwnProperty(field) && fields.indexOf(field) != -1) { - filteredItem[field] = item[field]; - } - } - } else { - for (var field in item) { - if (item.hasOwnProperty(field) && fields.hasOwnProperty(field)) { - filteredItem[fields[field]] = item[field]; - } + // calculate the distance of each of the surface centers to the camera + for (j = 0; j < surfaces.length; j++) { + surface = surfaces[j]; + var transCenter = this._convertPointToTranslation(surface.center); + surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z; + // TODO: this dept calculation doesn't work 100% of the cases due to perspective, + // but the current solution is fast/simple and works in 99.9% of all cases + // the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9}) } - } - return filteredItem; - }; + // order the surfaces by their (translated) depth + surfaces.sort(function (a, b) { + var diff = b.dist - a.dist; + if (diff) return diff; - /** - * Sort the provided array with items - * @param {Object[]} items - * @param {String | function} order A field name or custom sort function. - * @private - */ - DataSet.prototype._sort = function (items, order) { - if (util.isString(order)) { - // order by provided field name - var name = order; // field name - items.sort(function (a, b) { - var av = a[name]; - var bv = b[name]; - return av > bv ? 1 : av < bv ? -1 : 0; + // if equal depth, sort the top surface last + if (a.corners === top) return 1; + if (b.corners === top) return -1; + + // both are equal + return 0; }); - } else if (typeof order === 'function') { - // order by sort function - items.sort(order); - } - // TODO: extend order by an Object {field:String, direction:String} - // where direction can be 'asc' or 'desc' - else { - throw new TypeError('Order must be a function or a string'); + + // draw the ordered surfaces + ctx.lineWidth = this._getStrokeWidth(point); + ctx.strokeStyle = borderColor; + ctx.fillStyle = color; + // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside + for (j = 2; j < surfaces.length; j++) { + surface = surfaces[j]; + corners = surface.corners; + ctx.beginPath(); + ctx.moveTo(corners[3].screen.x, corners[3].screen.y); + ctx.lineTo(corners[0].screen.x, corners[0].screen.y); + ctx.lineTo(corners[1].screen.x, corners[1].screen.y); + ctx.lineTo(corners[2].screen.x, corners[2].screen.y); + ctx.lineTo(corners[3].screen.x, corners[3].screen.y); + ctx.fill(); + ctx.stroke(); + } } }; /** - * Remove an object by pointer or by id - * @param {String | Number | Object | Array} id Object or id, or an array with - * objects or ids to be removed - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds + * Draw a line through all datapoints. + * This function can be used when the style is 'line' */ - DataSet.prototype.remove = function (id, senderId) { - var removedIds = [], - i, - len, - removedId; + Graph3d.prototype._redrawDataLine = function () { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + point, + i; - if (Array.isArray(id)) { - for (i = 0, len = id.length; i < len; i++) { - removedId = this._remove(id[i]); - if (removedId != null) { - removedIds.push(removedId); - } - } - } else { - removedId = this._remove(id); - if (removedId != null) { - removedIds.push(removedId); - } - } + if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? - if (removedIds.length) { - this._trigger('remove', { items: removedIds }, senderId); + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; } - return removedIds; - }; + // start the line + if (this.dataPoints.length > 0) { + point = this.dataPoints[0]; - /** - * Remove an item by its id - * @param {Number | String | Object} id id or item - * @returns {Number | String | null} id - * @private - */ - DataSet.prototype._remove = function (id) { - if (util.isNumber(id) || util.isString(id)) { - if (this._data[id]) { - delete this._data[id]; - this.length--; - return id; - } - } else if (id instanceof Object) { - var itemId = id[this._fieldId]; - if (itemId && this._data[itemId]) { - delete this._data[itemId]; - this.length--; - return itemId; + ctx.lineWidth = this._getStrokeWidth(point); + ctx.lineJoin = 'round'; + ctx.lineCap = 'round'; + ctx.strokeStyle = this.dataColor.stroke; + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + + // draw the datapoints as colored circles + for (i = 1; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + ctx.lineTo(point.screen.x, point.screen.y); } + + // finish the line + ctx.stroke(); } - return null; }; /** - * Clear the data - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds The ids of all removed items + * Start a moving operation inside the provided parent element + * @param {Event} event The event that occurred (required for + * retrieving the mouse position) */ - DataSet.prototype.clear = function (senderId) { - var ids = Object.keys(this._data); + Graph3d.prototype._onMouseDown = function (event) { + event = event || window.event; - this._data = {}; - this.length = 0; + // check if mouse is still down (may be up when focus is lost for example + // in an iframe) + if (this.leftButtonDown) { + this._onMouseUp(event); + } - this._trigger('remove', { items: ids }, senderId); + // only react on left mouse button down + this.leftButtonDown = event.which ? event.which === 1 : event.button === 1; + if (!this.leftButtonDown && !this.touchDown) return; - return ids; - }; + // get mouse position (different code for IE and all other browsers) + this.startMouseX = getMouseX(event); + this.startMouseY = getMouseY(event); - /** - * Find the item with maximum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items - */ - DataSet.prototype.max = function (field) { - var data = this._data, - max = null, - maxField = null; + this.startStart = new Date(this.start); + this.startEnd = new Date(this.end); + this.startArmRotation = this.camera.getArmRotation(); - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!max || itemField > maxField)) { - max = item; - maxField = itemField; - } - } - } + this.frame.style.cursor = 'move'; - return max; + // add event listeners to handle moving the contents + // we store the function onmousemove and onmouseup in the graph, so we can + // remove the eventlisteners lateron in the function mouseUp() + var me = this; + this.onmousemove = function (event) { + me._onMouseMove(event); + }; + this.onmouseup = function (event) { + me._onMouseUp(event); + }; + util.addEventListener(document, 'mousemove', me.onmousemove); + util.addEventListener(document, 'mouseup', me.onmouseup); + util.preventDefault(event); }; /** - * Find the item with minimum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items + * Perform moving operating. + * This function activated from within the funcion Graph.mouseDown(). + * @param {Event} event Well, eehh, the event */ - DataSet.prototype.min = function (field) { - var data = this._data, - min = null, - minField = null; + Graph3d.prototype._onMouseMove = function (event) { + event = event || window.event; - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!min || itemField < minField)) { - min = item; - minField = itemField; - } - } - } + // calculate change in mouse position + var diffX = parseFloat(getMouseX(event)) - this.startMouseX; + var diffY = parseFloat(getMouseY(event)) - this.startMouseY; - return min; - }; + var horizontalNew = this.startArmRotation.horizontal + diffX / 200; + var verticalNew = this.startArmRotation.vertical + diffY / 200; - /** - * Find all distinct values of a specified field - * @param {String} field - * @return {Array} values Array containing all distinct values. If data items - * do not contain the specified field are ignored. - * The returned array is unordered. - */ - DataSet.prototype.distinct = function (field) { - var data = this._data; - var values = []; - var fieldType = this._options.type && this._options.type[field] || null; - var count = 0; - var i; + var snapAngle = 4; // degrees + var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI); - for (var prop in data) { - if (data.hasOwnProperty(prop)) { - var item = data[prop]; - var value = item[field]; - var exists = false; - for (i = 0; i < count; i++) { - if (values[i] == value) { - exists = true; - break; - } - } - if (!exists && value !== undefined) { - values[count] = value; - count++; - } - } + // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc... + // the -0.001 is to take care that the vertical axis is always drawn at the left front corner + if (Math.abs(Math.sin(horizontalNew)) < snapValue) { + horizontalNew = Math.round(horizontalNew / Math.PI) * Math.PI - 0.001; + } + if (Math.abs(Math.cos(horizontalNew)) < snapValue) { + horizontalNew = (Math.round(horizontalNew / Math.PI - 0.5) + 0.5) * Math.PI - 0.001; } - if (fieldType) { - for (i = 0; i < values.length; i++) { - values[i] = util.convert(values[i], fieldType); - } + // snap vertically to nice angles + if (Math.abs(Math.sin(verticalNew)) < snapValue) { + verticalNew = Math.round(verticalNew / Math.PI) * Math.PI; + } + if (Math.abs(Math.cos(verticalNew)) < snapValue) { + verticalNew = (Math.round(verticalNew / Math.PI - 0.5) + 0.5) * Math.PI; } - return values; + this.camera.setArmRotation(horizontalNew, verticalNew); + this.redraw(); + + // fire a cameraPositionChange event + var parameters = this.getCameraPosition(); + this.emit('cameraPositionChange', parameters); + + util.preventDefault(event); }; /** - * Add a single item. Will fail when an item with the same id already exists. - * @param {Object} item - * @return {String} id - * @private + * Stop moving operating. + * This function activated from within the funcion Graph.mouseDown(). + * @param {event} event The event */ - DataSet.prototype._addItem = function (item) { - var id = item[this._fieldId]; - - if (id != undefined) { - // check whether this id is already taken - if (this._data[id]) { - // item already exists - throw new Error('Cannot add item: item with id ' + id + ' already exists'); - } - } else { - // generate an id - id = util.randomUUID(); - item[this._fieldId] = id; - } - - var d = {}; - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } - this._data[id] = d; - this.length++; + Graph3d.prototype._onMouseUp = function (event) { + this.frame.style.cursor = 'auto'; + this.leftButtonDown = false; - return id; + // remove event listeners here + util.removeEventListener(document, 'mousemove', this.onmousemove); + util.removeEventListener(document, 'mouseup', this.onmouseup); + util.preventDefault(event); }; /** - * Get an item. Fields can be converted to a specific type - * @param {String} id - * @param {Object.} [types] field types to convert - * @return {Object | null} item - * @private + * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point + * @param {Event} event A mouse move event */ - DataSet.prototype._getItem = function (id, types) { - var field, value; + Graph3d.prototype._onTooltip = function (event) { + var delay = 300; // ms + var boundingRect = this.frame.getBoundingClientRect(); + var mouseX = getMouseX(event) - boundingRect.left; + var mouseY = getMouseY(event) - boundingRect.top; - // get the item from the dataset - var raw = this._data[id]; - if (!raw) { - return null; + if (!this.showTooltip) { + return; } - // convert the items field types - var converted = {}; - if (types) { - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = util.convert(value, types[field]); + if (this.tooltipTimeout) { + clearTimeout(this.tooltipTimeout); + } + + // (delayed) display of a tooltip only if no mouse button is down + if (this.leftButtonDown) { + this._hideTooltip(); + return; + } + + if (this.tooltip && this.tooltip.dataPoint) { + // tooltip is currently visible + var dataPoint = this._dataPointFromXY(mouseX, mouseY); + if (dataPoint !== this.tooltip.dataPoint) { + // datapoint changed + if (dataPoint) { + this._showTooltip(dataPoint); + } else { + this._hideTooltip(); } } } else { - // no field types specified, no converting needed - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = value; + // tooltip is currently not visible + var me = this; + this.tooltipTimeout = setTimeout(function () { + me.tooltipTimeout = null; + + // show a tooltip if we have a data point + var dataPoint = me._dataPointFromXY(mouseX, mouseY); + if (dataPoint) { + me._showTooltip(dataPoint); } - } + }, delay); } - return converted; }; /** - * Update a single item: merge with existing item. - * Will fail when the item has no id, or when there does not exist an item - * with the same id. - * @param {Object} item - * @return {String} id - * @private + * Event handler for touchstart event on mobile devices */ - DataSet.prototype._updateItem = function (item) { - var id = item[this._fieldId]; - if (id == undefined) { - throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')'); - } - var d = this._data[id]; - if (!d) { - // item doesn't exist - throw new Error('Cannot update item: no item with id ' + id + ' found'); - } + Graph3d.prototype._onTouchStart = function (event) { + this.touchDown = true; - // merge with current item - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } + var me = this; + this.ontouchmove = function (event) { + me._onTouchMove(event); + }; + this.ontouchend = function (event) { + me._onTouchEnd(event); + }; + util.addEventListener(document, 'touchmove', me.ontouchmove); + util.addEventListener(document, 'touchend', me.ontouchend); - return id; + this._onMouseDown(event); }; - module.exports = DataSet; - -/***/ }, -/* 15 */ -/***/ function(module, exports) { - /** - * A queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @constructor + * Event handler for touchmove event on mobile devices */ - 'use strict'; + Graph3d.prototype._onTouchMove = function (event) { + this._onMouseMove(event); + }; - function Queue(options) { - // options - this.delay = null; - this.max = Infinity; + /** + * Event handler for touchend event on mobile devices + */ + Graph3d.prototype._onTouchEnd = function (event) { + this.touchDown = false; - // properties - this._queue = []; - this._timeout = null; - this._extended = null; + util.removeEventListener(document, 'touchmove', this.ontouchmove); + util.removeEventListener(document, 'touchend', this.ontouchend); - this.setOptions(options); - } + this._onMouseUp(event); + }; /** - * Update the configuration of the queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @param options + * Event handler for mouse wheel event, used to zoom the graph + * Code from http://adomas.org/javascript-mouse-wheel/ + * @param {event} event The event */ - Queue.prototype.setOptions = function (options) { - if (options && typeof options.delay !== 'undefined') { - this.delay = options.delay; + Graph3d.prototype._onWheel = function (event) { + if (!event) /* For IE. */ + event = window.event; + + // 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 (options && typeof options.max !== 'undefined') { - this.max = options.max; + + // 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) { + var oldLength = this.camera.getArmLength(); + var newLength = oldLength * (1 - delta / 10); + + this.camera.setArmLength(newLength); + this.redraw(); + + this._hideTooltip(); } - this._flushIfNeeded(); + // fire a cameraPositionChange event + var parameters = this.getCameraPosition(); + this.emit('cameraPositionChange', parameters); + + // Prevent default actions caused by mouse wheel. + // That might be ugly, but we handle scrolls somehow + // anyway, so don't bother here.. + util.preventDefault(event); }; /** - * Extend an object with queuing functionality. - * The object will be extended with a function flush, and the methods provided - * in options.replace will be replaced with queued ones. - * @param {Object} object - * @param {Object} options - * Available options: - * - replace: Array. - * A list with method names of the methods - * on the object to be replaced with queued ones. - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @return {Queue} Returns the created queue + * Test whether a point lies inside given 2D triangle + * @param {Point2d} point + * @param {Point2d[]} triangle + * @return {boolean} Returns true if given point lies inside or on the edge of the triangle + * @private */ - Queue.extend = function (object, options) { - var queue = new Queue(options); - - if (object.flush !== undefined) { - throw new Error('Target object already has a property flush'); - } - object.flush = function () { - queue.flush(); - }; - - var methods = [{ - name: 'flush', - original: undefined - }]; + Graph3d.prototype._insideTriangle = function (point, triangle) { + var a = triangle[0], + b = triangle[1], + c = triangle[2]; - if (options && options.replace) { - for (var i = 0; i < options.replace.length; i++) { - var name = options.replace[i]; - methods.push({ - name: name, - original: object[name] - }); - queue.replace(object, name); - } + function sign(x) { + return x > 0 ? 1 : x < 0 ? -1 : 0; } - queue._extended = { - object: object, - methods: methods - }; + var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x)); + var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x)); + var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x)); - return queue; + // each of the three signs must be either equal to each other or zero + return (as == 0 || bs == 0 || as == bs) && (bs == 0 || cs == 0 || bs == cs) && (as == 0 || cs == 0 || as == cs); }; /** - * Destroy the queue. The queue will first flush all queued actions, and in - * case it has extended an object, will restore the original object. + * Find a data point close to given screen position (x, y) + * @param {Number} x + * @param {Number} y + * @return {Object | null} The closest data point or null if not close to any data point + * @private */ - Queue.prototype.destroy = function () { - this.flush(); + Graph3d.prototype._dataPointFromXY = function (x, y) { + var i, + distMax = 100, + // px + dataPoint = null, + closestDataPoint = null, + closestDist = null, + center = new Point2d(x, y); - if (this._extended) { - var object = this._extended.object; - var methods = this._extended.methods; - for (var i = 0; i < methods.length; i++) { - var method = methods[i]; - if (method.original) { - object[method.name] = method.original; - } else { - delete object[method.name]; + if (this.style === Graph3d.STYLE.BAR || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { + // the data points are ordered from far away to closest + for (i = this.dataPoints.length - 1; i >= 0; i--) { + dataPoint = this.dataPoints[i]; + var surfaces = dataPoint.surfaces; + if (surfaces) { + for (var s = surfaces.length - 1; s >= 0; s--) { + // split each surface in two triangles, and see if the center point is inside one of these + var surface = surfaces[s]; + var corners = surface.corners; + var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen]; + var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen]; + if (this._insideTriangle(center, triangle1) || this._insideTriangle(center, triangle2)) { + // return immediately at the first hit + return dataPoint; + } + } + } + } + } else { + // find the closest data point, using distance to the center of the point on 2d screen + for (i = 0; i < this.dataPoints.length; i++) { + dataPoint = this.dataPoints[i]; + var point = dataPoint.screen; + if (point) { + var distX = Math.abs(x - point.x); + var distY = Math.abs(y - point.y); + var dist = Math.sqrt(distX * distX + distY * distY); + + if ((closestDist === null || dist < closestDist) && dist < distMax) { + closestDist = dist; + closestDataPoint = dataPoint; + } } } - this._extended = null; } + + return closestDataPoint; }; /** - * Replace a method on an object with a queued version - * @param {Object} object Object having the method - * @param {string} method The method name + * Display a tooltip for given data point + * @param {Object} dataPoint + * @private */ - Queue.prototype.replace = function (object, method) { - var me = this; - var original = object[method]; - if (!original) { - throw new Error('Method ' + method + ' undefined'); - } + Graph3d.prototype._showTooltip = function (dataPoint) { + var content, line, dot; - object[method] = function () { - // create an Array with the arguments - var args = []; - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } + if (!this.tooltip) { + content = document.createElement('div'); + content.style.position = 'absolute'; + content.style.padding = '10px'; + content.style.border = '1px solid #4d4d4d'; + content.style.color = '#1a1a1a'; + content.style.background = 'rgba(255,255,255,0.7)'; + content.style.borderRadius = '2px'; + content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)'; - // add this call to the queue - me.queue({ - args: args, - fn: original, - context: this - }); - }; - }; + line = document.createElement('div'); + line.style.position = 'absolute'; + line.style.height = '40px'; + line.style.width = '0'; + line.style.borderLeft = '1px solid #4d4d4d'; - /** - * Queue a call - * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry - */ - Queue.prototype.queue = function (entry) { - if (typeof entry === 'function') { - this._queue.push({ fn: entry }); + dot = document.createElement('div'); + dot.style.position = 'absolute'; + dot.style.height = '0'; + dot.style.width = '0'; + dot.style.border = '5px solid #4d4d4d'; + dot.style.borderRadius = '5px'; + + this.tooltip = { + dataPoint: null, + dom: { + content: content, + line: line, + dot: dot + } + }; } else { - this._queue.push(entry); + content = this.tooltip.dom.content; + line = this.tooltip.dom.line; + dot = this.tooltip.dom.dot; } - this._flushIfNeeded(); - }; + this._hideTooltip(); - /** - * Check whether the queue needs to be flushed - * @private - */ - Queue.prototype._flushIfNeeded = function () { - // flush when the maximum is exceeded. - if (this._queue.length > this.max) { - this.flush(); + this.tooltip.dataPoint = dataPoint; + if (typeof this.showTooltip === 'function') { + content.innerHTML = this.showTooltip(dataPoint.point); + } else { + content.innerHTML = '' + '' + '' + '' + '
x:' + dataPoint.point.x + '
y:' + dataPoint.point.y + '
z:' + dataPoint.point.z + '
'; } - // flush after a period of inactivity when a delay is configured - clearTimeout(this._timeout); - if (this.queue.length > 0 && typeof this.delay === 'number') { - var me = this; - this._timeout = setTimeout(function () { - me.flush(); - }, this.delay); - } + content.style.left = '0'; + content.style.top = '0'; + this.frame.appendChild(content); + this.frame.appendChild(line); + this.frame.appendChild(dot); + + // calculate sizes + var contentWidth = content.offsetWidth; + var contentHeight = content.offsetHeight; + var lineHeight = line.offsetHeight; + var dotWidth = dot.offsetWidth; + var dotHeight = dot.offsetHeight; + + var left = dataPoint.screen.x - contentWidth / 2; + left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth); + + line.style.left = dataPoint.screen.x + 'px'; + line.style.top = dataPoint.screen.y - lineHeight + 'px'; + content.style.left = left + 'px'; + content.style.top = dataPoint.screen.y - lineHeight - contentHeight + 'px'; + dot.style.left = dataPoint.screen.x - dotWidth / 2 + 'px'; + dot.style.top = dataPoint.screen.y - dotHeight / 2 + 'px'; }; /** - * Flush all queued calls + * Hide the tooltip when displayed + * @private */ - Queue.prototype.flush = function () { - while (this._queue.length > 0) { - var entry = this._queue.shift(); - entry.fn.apply(entry.context || entry.fn, entry.args || []); + Graph3d.prototype._hideTooltip = function () { + if (this.tooltip) { + this.tooltip.dataPoint = null; + + for (var prop in this.tooltip.dom) { + if (this.tooltip.dom.hasOwnProperty(prop)) { + var elem = this.tooltip.dom[prop]; + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + } } }; - module.exports = Queue; - -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); + /**--------------------------------------------------------------------------**/ /** - * DataView - * - * a dataview offers a filtered view on a dataset or an other dataview. - * - * @param {DataSet | DataView} data - * @param {Object} [options] Available options: see method get - * - * @constructor DataView + * Get the horizontal mouse position from a mouse event + * @param {Event} event + * @return {Number} mouse x */ - function DataView(data, options) { - this._data = null; - this._ids = {}; // ids of the items currently in memory (just contains a boolean true) - this.length = 0; // number of items in the DataView - this._options = options || {}; - this._fieldId = 'id'; // name of the field containing id - this._subscribers = {}; // event subscribers - - var me = this; - this.listener = function () { - me._onEvent.apply(me, arguments); - }; - - this.setData(data); + function getMouseX(event) { + if ('clientX' in event) return event.clientX; + return event.targetTouches[0] && event.targetTouches[0].clientX || 0; } - // TODO: implement a function .config() to dynamically update things like configured filter - // and trigger changes accordingly - /** - * Set a data source for the view - * @param {DataSet | DataView} data + * Get the vertical mouse position from a mouse event + * @param {Event} event + * @return {Number} mouse y */ - DataView.prototype.setData = function (data) { - var ids, i, len; - - if (this._data) { - // unsubscribe from current dataset - if (this._data.off) { - this._data.off('*', this.listener); - } - - // trigger a remove of all items in memory - ids = []; - for (var id in this._ids) { - if (this._ids.hasOwnProperty(id)) { - ids.push(id); - } - } - this._ids = {}; - this.length = 0; - this._trigger('remove', { items: ids }); - } - - this._data = data; + function getMouseY(event) { + if ('clientY' in event) return event.clientY; + return event.targetTouches[0] && event.targetTouches[0].clientY || 0; + } - if (this._data) { - // update fieldId - this._fieldId = this._options.fieldId || this._data && this._data.options && this._data.options.fieldId || 'id'; + module.exports = Graph3d; - // trigger an add of all added items - ids = this._data.getIds({ filter: this._options && this._options.filter }); - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - this._ids[id] = true; - } - this.length = ids.length; - this._trigger('add', { items: ids }); + // use use defaults - // subscribe to new dataset - if (this._data.on) { - this._data.on('*', this.listener); - } - } - }; +/***/ }, +/* 12 */ +/***/ function(module, exports) { + /** - * Refresh the DataView. Useful when the DataView has a filter function - * containing a variable parameter. + * Expose `Emitter`. */ - DataView.prototype.refresh = function () { - var id; - var ids = this._data.getIds({ filter: this._options && this._options.filter }); - var newIds = {}; - var added = []; - var removed = []; - // check for additions - for (var i = 0; i < ids.length; i++) { - id = ids[i]; - newIds[id] = true; - if (!this._ids[id]) { - added.push(id); - this._ids[id] = true; - this.length++; - } - } + module.exports = Emitter; - // check for removals - for (id in this._ids) { - if (this._ids.hasOwnProperty(id)) { - if (!newIds[id]) { - removed.push(id); - delete this._ids[id]; - this.length--; - } - } - } + /** + * Initialize a new `Emitter`. + * + * @api public + */ - // trigger events - if (added.length) { - this._trigger('add', { items: added }); - } - if (removed.length) { - this._trigger('remove', { items: removed }); - } + function Emitter(obj) { + if (obj) return mixin(obj); }; /** - * Get data from the data view - * - * Usage: - * - * get() - * get(options: Object) - * get(options: Object, data: Array | DataTable) - * - * get(id: Number) - * get(id: Number, options: Object) - * get(id: Number, options: Object, data: Array | DataTable) - * - * get(ids: Number[]) - * get(ids: Number[], options: Object) - * get(ids: Number[], options: Object, data: Array | DataTable) - * - * Where: + * Mixin the emitter properties. * - * {Number | String} id The id of an item - * {Number[] | String{}} ids An array with ids of items - * {Object} options An Object with options. Available options: - * {String} [type] Type of data to be returned. Can - * be 'DataTable' or 'Array' (default) - * {Object.} [convert] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * {Array | DataTable} [data] If provided, items will be appended to this - * array or table. Required in case of Google - * DataTable. - * @param args + * @param {Object} obj + * @return {Object} + * @api private */ - DataView.prototype.get = function (args) { - var me = this; - - // parse the arguments - var ids, options, data; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') { - // get(id(s) [, options] [, data]) - ids = arguments[0]; // can be a single id or an array with ids - options = arguments[1]; - data = arguments[2]; - } else { - // get([, options] [, data]) - options = arguments[0]; - data = arguments[1]; - } - - // extend the options with the default options and provided options - var viewOptions = util.extend({}, this._options, options); - // create a combined filter method when needed - if (this._options.filter && options && options.filter) { - viewOptions.filter = function (item) { - return me._options.filter(item) && options.filter(item); - }; + function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; } + return obj; + } - // build up the call to the linked data set - var getArguments = []; - if (ids != undefined) { - getArguments.push(ids); - } - getArguments.push(viewOptions); - getArguments.push(data); + /** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ - return this._data && this._data.get.apply(this._data, getArguments); + Emitter.prototype.on = + Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks[event] = this._callbacks[event] || []) + .push(fn); + return this; }; /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ - DataView.prototype.getIds = function (options) { - var ids; - - if (this._data) { - var defaultFilter = this._options.filter; - var filter; - if (options && options.filter) { - if (defaultFilter) { - filter = function (item) { - return defaultFilter(item) && options.filter(item); - }; - } else { - filter = options.filter; - } - } else { - filter = defaultFilter; - } + Emitter.prototype.once = function(event, fn){ + var self = this; + this._callbacks = this._callbacks || {}; - ids = this._data.getIds({ - filter: filter, - order: options && options.order - }); - } else { - ids = []; + function on() { + self.off(event, on); + fn.apply(this, arguments); } - return ids; - }; - - /** - * Get the DataSet to which this DataView is connected. In case there is a chain - * of multiple DataViews, the root DataSet of this chain is returned. - * @return {DataSet} dataSet - */ - DataView.prototype.getDataSet = function () { - var dataSet = this; - while (dataSet instanceof DataView) { - dataSet = dataSet._data; - } - return dataSet || null; + on.fn = fn; + this.on(event, on); + return this; }; /** - * Event listener. Will propagate all events from the connected data set to - * the subscribers of the DataView, but will filter the items and only trigger - * when there are changes in the filtered data set. + * Remove the given callback for `event` or all + * registered callbacks. + * * @param {String} event - * @param {Object | null} params - * @param {String} senderId - * @private + * @param {Function} fn + * @return {Emitter} + * @api public */ - DataView.prototype._onEvent = function (event, params, senderId) { - var i, len, id, item; - var ids = params && params.items; - var data = this._data; - var updatedData = []; - var added = []; - var updated = []; - var removed = []; - - if (ids && data) { - switch (event) { - case 'add': - // filter the ids of the added items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); - if (item) { - this._ids[id] = true; - added.push(id); - } - } - - break; - case 'update': - // determine the event from the views viewpoint: an updated - // item can be added, updated, or removed from this view. - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); + Emitter.prototype.off = + Emitter.prototype.removeListener = + Emitter.prototype.removeAllListeners = + Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; - if (item) { - if (this._ids[id]) { - updated.push(id); - updatedData.push(params.data[i]); - } else { - this._ids[id] = true; - added.push(id); - } - } else { - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } else {} - } - } + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } - break; + // specific event + var callbacks = this._callbacks[event]; + if (!callbacks) return this; - case 'remove': - // filter the ids of the removed items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } - } + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks[event]; + return this; + } - break; + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; } + } + return this; + }; - this.length += added.length - removed.length; + /** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ - if (added.length) { - this._trigger('add', { items: added }, senderId); - } - if (updated.length) { - this._trigger('update', { items: updated, data: updatedData }, senderId); - } - if (removed.length) { - this._trigger('remove', { items: removed }, senderId); + Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks[event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); } } + + return this; }; - // copy subscription functionality from DataSet - DataView.prototype.on = DataSet.prototype.on; - DataView.prototype.off = DataSet.prototype.off; - DataView.prototype._trigger = DataSet.prototype._trigger; + /** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ - // TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5) - DataView.prototype.subscribe = DataView.prototype.on; - DataView.prototype.unsubscribe = DataView.prototype.off; + Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks[event] || []; + }; - module.exports = DataView; + /** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; + }; - // nothing interesting for me :-( /***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { +/* 13 */ +/***/ function(module, exports) { - 'use strict'; + /** + * @prototype Point3d + * @param {Number} [x] + * @param {Number} [y] + * @param {Number} [z] + */ + "use strict"; - var Emitter = __webpack_require__(19); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var util = __webpack_require__(7); - var Point3d = __webpack_require__(20); - var Point2d = __webpack_require__(18); - var Camera = __webpack_require__(21); - var Filter = __webpack_require__(22); - var Slider = __webpack_require__(23); - var StepNumber = __webpack_require__(24); + function Point3d(x, y, z) { + this.x = x !== undefined ? x : 0; + this.y = y !== undefined ? y : 0; + this.z = z !== undefined ? z : 0; + }; /** - * @constructor Graph3d - * Graph3d displays data in 3d. - * - * Graph3d is developed in javascript as a Google Visualization Chart. - * - * @param {Element} container The DOM element in which the Graph3d will - * be created. Normally a div element. - * @param {DataSet | DataView | Array} [data] - * @param {Object} [options] + * Subtract the two provided points, returns a-b + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} a-b */ - function Graph3d(container, data, options) { - if (!(this instanceof Graph3d)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } + Point3d.subtract = function (a, b) { + var sub = new Point3d(); + sub.x = a.x - b.x; + sub.y = a.y - b.y; + sub.z = a.z - b.z; + return sub; + }; - // create variables and set default values - this.containerElement = container; - this.width = '400px'; - this.height = '400px'; - this.margin = 10; // px - this.defaultXCenter = '55%'; - this.defaultYCenter = '50%'; + /** + * Add the two provided points, returns a+b + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} a+b + */ + Point3d.add = function (a, b) { + var sum = new Point3d(); + sum.x = a.x + b.x; + sum.y = a.y + b.y; + sum.z = a.z + b.z; + return sum; + }; - this.xLabel = 'x'; - this.yLabel = 'y'; - this.zLabel = 'z'; + /** + * Calculate the average of two 3d points + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} The average, (a+b)/2 + */ + Point3d.avg = function (a, b) { + return new Point3d((a.x + b.x) / 2, (a.y + b.y) / 2, (a.z + b.z) / 2); + }; - var passValueFn = function passValueFn(v) { - return v; - }; - this.xValueLabel = passValueFn; - this.yValueLabel = passValueFn; - this.zValueLabel = passValueFn; + /** + * Calculate the cross product of the two provided points, returns axb + * Documentation: http://en.wikipedia.org/wiki/Cross_product + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} cross product axb + */ + Point3d.crossProduct = function (a, b) { + var crossproduct = new Point3d(); - this.filterLabel = 'time'; - this.legendLabel = 'value'; + crossproduct.x = a.y * b.z - a.z * b.y; + crossproduct.y = a.z * b.x - a.x * b.z; + crossproduct.z = a.x * b.y - a.y * b.x; - this.style = Graph3d.STYLE.DOT; - this.showPerspective = true; - this.showGrid = true; - this.keepAspectRatio = true; - this.showShadow = false; - this.showGrayBottom = false; // TODO: this does not work correctly - this.showTooltip = false; - this.verticalRatio = 0.5; // 0.1 to 1.0, where 1.0 results in a 'cube' + return crossproduct; + }; - this.animationInterval = 1000; // milliseconds - this.animationPreload = false; + /** + * Rtrieve the length of the vector (or the distance from this point to the origin + * @return {Number} length + */ + Point3d.prototype.length = function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + }; - this.camera = new Camera(); - this.camera.setArmRotation(1.0, 0.5); - this.camera.setArmLength(1.7); - this.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window? + module.exports = Point3d; - this.dataTable = null; // The original data table - this.dataPoints = null; // The table with point objects +/***/ }, +/* 14 */ +/***/ function(module, exports) { - // the column indexes - this.colX = undefined; - this.colY = undefined; - this.colZ = undefined; - this.colValue = undefined; - this.colFilter = undefined; + /** + * @prototype Point2d + * @param {Number} [x] + * @param {Number} [y] + */ + "use strict"; - this.xMin = 0; - this.xStep = undefined; // auto by default - this.xMax = 1; - this.yMin = 0; - this.yStep = undefined; // auto by default - this.yMax = 1; - this.zMin = 0; - this.zStep = undefined; // auto by default - this.zMax = 1; - this.valueMin = 0; - this.valueMax = 1; - this.xBarWidth = 1; - this.yBarWidth = 1; - // TODO: customize axis range + function Point2d(x, y) { + this.x = x !== undefined ? x : 0; + this.y = y !== undefined ? y : 0; + } - // colors - this.axisColor = '#4D4D4D'; - this.gridColor = '#D3D3D3'; - this.dataColor = { - fill: '#7DC1FF', - stroke: '#3267D2', - strokeWidth: 1 // px - }; + module.exports = Point2d; - // create a frame and canvas - this.create(); +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { - // apply options (also when undefined) - this.setOptions(options); + 'use strict'; - // apply data - if (data) { - this.setData(data); - } - } + var Point3d = __webpack_require__(13); - // Extend Graph3d with an Emitter mixin - Emitter(Graph3d.prototype); + /** + * @class Camera + * The camera is mounted on a (virtual) camera arm. The camera arm can rotate + * The camera is always looking in the direction of the origin of the arm. + * This way, the camera always rotates around one fixed point, the location + * of the camera arm. + * + * Documentation: + * http://en.wikipedia.org/wiki/3D_projection + */ + function Camera() { + this.armLocation = new Point3d(); + this.armRotation = {}; + this.armRotation.horizontal = 0; + this.armRotation.vertical = 0; + this.armLength = 1.7; + + this.cameraLocation = new Point3d(); + this.cameraRotation = new Point3d(0.5 * Math.PI, 0, 0); + + this.calculateCameraOrientation(); + } /** - * Calculate the scaling values, dependent on the range in x, y, and z direction + * Set the location (origin) of the arm + * @param {Number} x Normalized value of x + * @param {Number} y Normalized value of y + * @param {Number} z Normalized value of z */ - Graph3d.prototype._setScale = function () { - this.scale = new Point3d(1 / (this.xMax - this.xMin), 1 / (this.yMax - this.yMin), 1 / (this.zMax - this.zMin)); + Camera.prototype.setArmLocation = function (x, y, z) { + this.armLocation.x = x; + this.armLocation.y = y; + this.armLocation.z = z; - // keep aspect ration between x and y scale if desired - if (this.keepAspectRatio) { - if (this.scale.x < this.scale.y) { - //noinspection JSSuspiciousNameCombination - this.scale.y = this.scale.x; - } else { - //noinspection JSSuspiciousNameCombination - this.scale.x = this.scale.y; - } - } + this.calculateCameraOrientation(); + }; - // scale the vertical axis - this.scale.z *= this.verticalRatio; - // TODO: can this be automated? verticalRatio? + /** + * Set the rotation of the camera arm + * @param {Number} horizontal The horizontal rotation, between 0 and 2*PI. + * Optional, can be left undefined. + * @param {Number} vertical The vertical rotation, between 0 and 0.5*PI + * if vertical=0.5*PI, the graph is shown from the + * top. Optional, can be left undefined. + */ + Camera.prototype.setArmRotation = function (horizontal, vertical) { + if (horizontal !== undefined) { + this.armRotation.horizontal = horizontal; + } - // determine scale for (optional) value - this.scale.value = 1 / (this.valueMax - this.valueMin); + if (vertical !== undefined) { + this.armRotation.vertical = vertical; + if (this.armRotation.vertical < 0) this.armRotation.vertical = 0; + if (this.armRotation.vertical > 0.5 * Math.PI) this.armRotation.vertical = 0.5 * Math.PI; + } - // position the camera arm - var xCenter = (this.xMax + this.xMin) / 2 * this.scale.x; - var yCenter = (this.yMax + this.yMin) / 2 * this.scale.y; - var zCenter = (this.zMax + this.zMin) / 2 * this.scale.z; - this.camera.setArmLocation(xCenter, yCenter, zCenter); + if (horizontal !== undefined || vertical !== undefined) { + this.calculateCameraOrientation(); + } }; /** - * Convert a 3D location to a 2D location on screen - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point2d} point2d A 2D point with parameters x, y + * Retrieve the current arm rotation + * @return {object} An object with parameters horizontal and vertical */ - Graph3d.prototype._convert3Dto2D = function (point3d) { - var translation = this._convertPointToTranslation(point3d); - return this._convertTranslationToScreen(translation); + Camera.prototype.getArmRotation = function () { + var rot = {}; + rot.horizontal = this.armRotation.horizontal; + rot.vertical = this.armRotation.vertical; + + return rot; }; /** - * Convert a 3D location its translation seen from the camera - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera + * Set the (normalized) length of the camera arm. + * @param {Number} length A length between 0.71 and 5.0 */ - Graph3d.prototype._convertPointToTranslation = function (point3d) { - var ax = point3d.x * this.scale.x, - ay = point3d.y * this.scale.y, - az = point3d.z * this.scale.z, - cx = this.camera.getCameraLocation().x, - cy = this.camera.getCameraLocation().y, - cz = this.camera.getCameraLocation().z, + Camera.prototype.setArmLength = function (length) { + if (length === undefined) return; - // calculate angles - sinTx = Math.sin(this.camera.getCameraRotation().x), - cosTx = Math.cos(this.camera.getCameraRotation().x), - sinTy = Math.sin(this.camera.getCameraRotation().y), - cosTy = Math.cos(this.camera.getCameraRotation().y), - sinTz = Math.sin(this.camera.getCameraRotation().z), - cosTz = Math.cos(this.camera.getCameraRotation().z), + this.armLength = length; - // 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)), - dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax - cx)); + // Radius must be larger than the corner of the graph, + // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the + // graph + if (this.armLength < 0.71) this.armLength = 0.71; + if (this.armLength > 5.0) this.armLength = 5.0; - return new Point3d(dx, dy, dz); + this.calculateCameraOrientation(); }; /** - * Convert a translation point to a point on the screen - * @param {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera - * @return {Point2d} point2d A 2D point with parameters x, y + * Retrieve the arm length + * @return {Number} length */ - Graph3d.prototype._convertTranslationToScreen = function (translation) { - var ex = this.eye.x, - ey = this.eye.y, - ez = this.eye.z, - dx = translation.x, - dy = translation.y, - dz = translation.z; - - // calculate position on screen from translation - var bx; - var by; - if (this.showPerspective) { - bx = (dx - ex) * (ez / dz); - by = (dy - ey) * (ez / dz); - } else { - bx = dx * -(ez / this.camera.getArmLength()); - by = dy * -(ez / this.camera.getArmLength()); - } + Camera.prototype.getArmLength = function () { + return this.armLength; + }; - // shift and scale the point to the center of the screen - // use the width of the graph to scale both horizontally and vertically. - return new Point2d(this.xcenter + bx * this.frame.canvas.clientWidth, this.ycenter - by * this.frame.canvas.clientWidth); + /** + * Retrieve the camera location + * @return {Point3d} cameraLocation + */ + Camera.prototype.getCameraLocation = function () { + return this.cameraLocation; }; /** - * Set the background styling for the graph - * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor + * Retrieve the camera rotation + * @return {Point3d} cameraRotation */ - Graph3d.prototype._setBackgroundColor = function (backgroundColor) { - var fill = 'white'; - var stroke = 'gray'; - var strokeWidth = 1; + Camera.prototype.getCameraRotation = function () { + return this.cameraRotation; + }; - if (typeof backgroundColor === 'string') { - fill = backgroundColor; - stroke = 'none'; - strokeWidth = 0; - } else if (typeof backgroundColor === 'object') { - if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; - if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; - if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; - } else if (backgroundColor === undefined) {} else { - throw 'Unsupported type of backgroundColor'; - } + /** + * Calculate the location and rotation of the camera based on the + * position and orientation of the camera arm + */ + Camera.prototype.calculateCameraOrientation = function () { + // calculate location of the camera + 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.frame.style.backgroundColor = fill; - this.frame.style.borderColor = stroke; - this.frame.style.borderWidth = strokeWidth + 'px'; - this.frame.style.borderStyle = 'solid'; + // calculate rotation of the camera + this.cameraRotation.x = Math.PI / 2 - this.armRotation.vertical; + this.cameraRotation.y = 0; + this.cameraRotation.z = -this.armRotation.horizontal; }; - /// enumerate the available styles - Graph3d.STYLE = { - BAR: 0, - BARCOLOR: 1, - BARSIZE: 2, - DOT: 3, - DOTLINE: 4, - DOTCOLOR: 5, - DOTSIZE: 6, - GRID: 7, - LINE: 8, - SURFACE: 9 - }; + module.exports = Camera; + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var DataView = __webpack_require__(10); /** - * Retrieve the style index from given styleName - * @param {string} styleName Style name such as 'dot', 'grid', 'dot-line' - * @return {Number} styleNumber Enumeration value representing the style, or -1 - * when not found + * @class Filter + * + * @param {DataSet} data The google data table + * @param {Number} column The index of the column to be filtered + * @param {Graph} graph The graph */ - Graph3d.prototype._getStyleNumber = function (styleName) { - switch (styleName) { - case 'dot': - return Graph3d.STYLE.DOT; - case 'dot-line': - return Graph3d.STYLE.DOTLINE; - case 'dot-color': - return Graph3d.STYLE.DOTCOLOR; - case 'dot-size': - return Graph3d.STYLE.DOTSIZE; - case 'line': - return Graph3d.STYLE.LINE; - case 'grid': - return Graph3d.STYLE.GRID; - case 'surface': - return Graph3d.STYLE.SURFACE; - case 'bar': - return Graph3d.STYLE.BAR; - case 'bar-color': - return Graph3d.STYLE.BARCOLOR; - case 'bar-size': - return Graph3d.STYLE.BARSIZE; + function Filter(data, column, graph) { + this.data = data; + this.column = column; + this.graph = graph; // the parent graph + + this.index = undefined; + this.value = undefined; + + // read all distinct values and select the first one + this.values = graph.getDistinctValues(data.get(), this.column); + + // sort both numeric and string values correctly + this.values.sort(function (a, b) { + return a > b ? 1 : a < b ? -1 : 0; + }); + + if (this.values.length > 0) { + this.selectValue(0); } - return -1; + // create an array with the filtered datapoints. this will be loaded afterwards + this.dataPoints = []; + + this.loaded = false; + this.onLoadCallback = undefined; + + if (graph.animationPreload) { + this.loaded = false; + this.loadInBackground(); + } else { + this.loaded = true; + } }; /** - * Determine the indexes of the data columns, based on the given style and data - * @param {DataSet} data - * @param {Number} style + * Return the label + * @return {string} label */ - Graph3d.prototype._determineColumnIndexes = function (data, style) { - if (this.style === Graph3d.STYLE.DOT || this.style === Graph3d.STYLE.DOTLINE || this.style === Graph3d.STYLE.LINE || this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE || this.style === Graph3d.STYLE.BAR) { - // 3 columns expected, and optionally a 4th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = undefined; + Filter.prototype.isLoaded = function () { + return this.loaded; + }; - if (data.getNumberOfColumns() > 3) { - this.colFilter = 3; - } - } else if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { - // 4 columns expected, and optionally a 5th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = 3; + /** + * Return the loaded progress + * @return {Number} percentage between 0 and 100 + */ + Filter.prototype.getLoadedProgress = function () { + var len = this.values.length; - if (data.getNumberOfColumns() > 4) { - this.colFilter = 4; - } - } else { - throw 'Unknown style "' + this.style + '"'; + var i = 0; + while (this.dataPoints[i]) { + i++; } + + return Math.round(i / len * 100); }; - Graph3d.prototype.getNumberOfRows = function (data) { - return data.length; + /** + * Return the label + * @return {string} label + */ + Filter.prototype.getLabel = function () { + return this.graph.filterLabel; }; - Graph3d.prototype.getNumberOfColumns = function (data) { - var counter = 0; - for (var column in data[0]) { - if (data[0].hasOwnProperty(column)) { - counter++; - } - } - return counter; + /** + * Return the columnIndex of the filter + * @return {Number} columnIndex + */ + Filter.prototype.getColumn = function () { + return this.column; }; - Graph3d.prototype.getDistinctValues = function (data, column) { - var distinctValues = []; - for (var i = 0; i < data.length; i++) { - if (distinctValues.indexOf(data[i][column]) == -1) { - distinctValues.push(data[i][column]); - } - } - return distinctValues; + /** + * Return the currently selected value. Returns undefined if there is no selection + * @return {*} value + */ + Filter.prototype.getSelectedValue = function () { + if (this.index === undefined) return undefined; + + return this.values[this.index]; }; - Graph3d.prototype.getColumnRange = function (data, column) { - var minMax = { min: data[0][column], max: data[0][column] }; - for (var i = 0; i < data.length; i++) { - if (minMax.min > data[i][column]) { - minMax.min = data[i][column]; - } - if (minMax.max < data[i][column]) { - minMax.max = data[i][column]; - } - } - return minMax; + /** + * Retrieve all values of the filter + * @return {Array} values + */ + Filter.prototype.getValues = function () { + return this.values; }; /** - * Initialize the data from the data table. Calculate minimum and maximum values - * and column index values - * @param {Array | DataSet | DataView} rawData The data containing the items for the Graph. - * @param {Number} style Style Number + * Retrieve one value of the filter + * @param {Number} index + * @return {*} value */ - Graph3d.prototype._dataInitialize = function (rawData, style) { - var me = this; + Filter.prototype.getValue = function (index) { + if (index >= this.values.length) throw 'Error: index out of range'; - // unsubscribe from the dataTable - if (this.dataSet) { - this.dataSet.off('*', this._onChange); - } + return this.values[index]; + }; - if (rawData === undefined) return; + /** + * Retrieve the (filtered) dataPoints for the currently selected filter index + * @param {Number} [index] (optional) + * @return {Array} dataPoints + */ + Filter.prototype._getDataPoints = function (index) { + if (index === undefined) index = this.index; - if (Array.isArray(rawData)) { - rawData = new DataSet(rawData); - } + if (index === undefined) return []; - var data; - if (rawData instanceof DataSet || rawData instanceof DataView) { - data = rawData.get(); + var dataPoints; + if (this.dataPoints[index]) { + dataPoints = this.dataPoints[index]; } else { - throw new Error('Array, DataSet, or DataView expected'); + var f = {}; + f.column = this.column; + f.value = this.values[index]; + + var dataView = new DataView(this.data, { filter: function filter(item) { + return item[f.column] == f.value; + } }).get(); + dataPoints = this.graph._getDataPoints(dataView); + + this.dataPoints[index] = dataPoints; } - if (data.length == 0) return; + return dataPoints; + }; - this.dataSet = rawData; - this.dataTable = data; + /** + * Set a callback function when the filter is fully loaded. + */ + Filter.prototype.setOnLoadCallback = function (callback) { + this.onLoadCallback = callback; + }; - // subscribe to changes in the dataset - this._onChange = function () { - me.setData(me.dataSet); - }; - this.dataSet.on('*', this._onChange); + /** + * Add a value to the list with available values for this filter + * No double entries will be created. + * @param {Number} index + */ + Filter.prototype.selectValue = function (index) { + if (index >= this.values.length) throw 'Error: index out of range'; - // _determineColumnIndexes - // getNumberOfRows (points) - // getNumberOfColumns (x,y,z,v,t,t1,t2...) - // getDistinctValues (unique values?) - // getColumnRange + this.index = index; + this.value = this.values[index]; + }; - // determine the location of x,y,z,value,filter columns - this.colX = 'x'; - this.colY = 'y'; - this.colZ = 'z'; - this.colValue = 'style'; - this.colFilter = 'filter'; + /** + * Load all filtered rows in the background one by one + * Start this method without providing an index! + */ + Filter.prototype.loadInBackground = function (index) { + if (index === undefined) index = 0; - // check if a filter column is provided - if (data[0].hasOwnProperty('filter')) { - if (this.dataFilter === undefined) { - this.dataFilter = new Filter(rawData, this.colFilter, this); - this.dataFilter.setOnLoadCallback(function () { - me.redraw(); - }); - } - } + var frame = this.graph.frame; - var withBars = this.style == Graph3d.STYLE.BAR || this.style == Graph3d.STYLE.BARCOLOR || this.style == Graph3d.STYLE.BARSIZE; + if (index < this.values.length) { + var dataPointsTemp = this._getDataPoints(index); + //this.graph.redrawInfo(); // TODO: not neat - // determine barWidth from data - if (withBars) { - if (this.defaultXBarWidth !== undefined) { - this.xBarWidth = this.defaultXBarWidth; - } else { - var dataX = this.getDistinctValues(data, this.colX); - this.xBarWidth = dataX[1] - dataX[0] || 1; + // create a progress box + if (frame.progress === undefined) { + frame.progress = document.createElement('DIV'); + frame.progress.style.position = 'absolute'; + frame.progress.style.color = 'gray'; + frame.appendChild(frame.progress); } + var progress = this.getLoadedProgress(); + frame.progress.innerHTML = 'Loading animation... ' + progress + '%'; + // TODO: this is no nice solution... + frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider + frame.progress.style.left = 10 + 'px'; - if (this.defaultYBarWidth !== undefined) { - this.yBarWidth = this.defaultYBarWidth; - } else { - var dataY = this.getDistinctValues(data, this.colY); - this.yBarWidth = dataY[1] - dataY[0] || 1; + var me = this; + setTimeout(function () { + me.loadInBackground(index + 1); + }, 10); + this.loaded = false; + } else { + this.loaded = true; + + // remove the progress box + if (frame.progress !== undefined) { + frame.removeChild(frame.progress); + frame.progress = undefined; } - } - // calculate minimums and maximums - var xRange = this.getColumnRange(data, this.colX); - if (withBars) { - xRange.min -= this.xBarWidth / 2; - xRange.max += this.xBarWidth / 2; + if (this.onLoadCallback) this.onLoadCallback(); } - this.xMin = this.defaultXMin !== undefined ? this.defaultXMin : xRange.min; - this.xMax = this.defaultXMax !== undefined ? this.defaultXMax : xRange.max; - if (this.xMax <= this.xMin) this.xMax = this.xMin + 1; - this.xStep = this.defaultXStep !== undefined ? this.defaultXStep : (this.xMax - this.xMin) / 5; + }; - var yRange = this.getColumnRange(data, this.colY); - if (withBars) { - yRange.min -= this.yBarWidth / 2; - yRange.max += this.yBarWidth / 2; - } - this.yMin = this.defaultYMin !== undefined ? this.defaultYMin : yRange.min; - this.yMax = this.defaultYMax !== undefined ? this.defaultYMax : yRange.max; - if (this.yMax <= this.yMin) this.yMax = this.yMin + 1; - this.yStep = this.defaultYStep !== undefined ? this.defaultYStep : (this.yMax - this.yMin) / 5; + module.exports = Filter; - var zRange = this.getColumnRange(data, this.colZ); - this.zMin = this.defaultZMin !== undefined ? this.defaultZMin : zRange.min; - this.zMax = this.defaultZMax !== undefined ? this.defaultZMax : zRange.max; - if (this.zMax <= this.zMin) this.zMax = this.zMin + 1; - this.zStep = this.defaultZStep !== undefined ? this.defaultZStep : (this.zMax - this.zMin) / 5; +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { - if (this.colValue !== undefined) { - var valueRange = this.getColumnRange(data, this.colValue); - this.valueMin = this.defaultValueMin !== undefined ? this.defaultValueMin : valueRange.min; - this.valueMax = this.defaultValueMax !== undefined ? this.defaultValueMax : valueRange.max; - if (this.valueMax <= this.valueMin) this.valueMax = this.valueMin + 1; - } + 'use strict'; - // set the scale dependent on the ranges. - this._setScale(); - }; + var util = __webpack_require__(1); /** - * Filter the data based on the current filter - * @param {Array} data - * @return {Array} dataPoints Array with point objects which can be drawn on screen + * @constructor Slider + * + * An html slider control with start/stop/prev/next buttons + * @param {Element} container The element where the slider will be created + * @param {Object} options Available options: + * {boolean} visible If true (default) the + * slider is visible. */ - Graph3d.prototype._getDataPoints = function (data) { - // TODO: store the created matrix dataPoints in the filters instead of reloading each time - var x, y, i, z, obj, point; - - var dataPoints = []; - - if (this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE) { - // copy all values from the google data table to a matrix - // the provided values are supposed to form a grid of (x,y) positions - - // create two lists with all present x and y values - var dataX = []; - var dataY = []; - for (i = 0; i < this.getNumberOfRows(data); i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - - if (dataX.indexOf(x) === -1) { - dataX.push(x); - } - if (dataY.indexOf(y) === -1) { - dataY.push(y); - } - } - - var sortNumber = function sortNumber(a, b) { - return a - b; - }; - dataX.sort(sortNumber); - dataY.sort(sortNumber); + function Slider(container, options) { + if (container === undefined) { + throw 'Error: No container element defined'; + } + this.container = container; + this.visible = options && options.visible != undefined ? options.visible : true; - // create a grid, a 2d matrix, with all values. - var dataMatrix = []; // temporary data matrix - for (i = 0; i < data.length; i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - z = data[i][this.colZ] || 0; + if (this.visible) { + this.frame = document.createElement('DIV'); + //this.frame.style.backgroundColor = '#E5E5E5'; + this.frame.style.width = '100%'; + this.frame.style.position = 'relative'; + this.container.appendChild(this.frame); - var xIndex = dataX.indexOf(x); // TODO: implement Array().indexOf() for Internet Explorer - var yIndex = dataY.indexOf(y); + this.frame.prev = document.createElement('INPUT'); + this.frame.prev.type = 'BUTTON'; + this.frame.prev.value = 'Prev'; + this.frame.appendChild(this.frame.prev); - if (dataMatrix[xIndex] === undefined) { - dataMatrix[xIndex] = []; - } + this.frame.play = document.createElement('INPUT'); + this.frame.play.type = 'BUTTON'; + this.frame.play.value = 'Play'; + this.frame.appendChild(this.frame.play); - var point3d = new Point3d(); - point3d.x = x; - point3d.y = y; - point3d.z = z; + this.frame.next = document.createElement('INPUT'); + this.frame.next.type = 'BUTTON'; + this.frame.next.value = 'Next'; + this.frame.appendChild(this.frame.next); - obj = {}; - obj.point = point3d; - obj.trans = undefined; - obj.screen = undefined; - obj.bottom = new Point3d(x, y, this.zMin); + this.frame.bar = document.createElement('INPUT'); + this.frame.bar.type = 'BUTTON'; + this.frame.bar.style.position = 'absolute'; + this.frame.bar.style.border = '1px solid red'; + this.frame.bar.style.width = '100px'; + this.frame.bar.style.height = '6px'; + this.frame.bar.style.borderRadius = '2px'; + this.frame.bar.style.MozBorderRadius = '2px'; + this.frame.bar.style.border = '1px solid #7F7F7F'; + this.frame.bar.style.backgroundColor = '#E5E5E5'; + this.frame.appendChild(this.frame.bar); - dataMatrix[xIndex][yIndex] = obj; + this.frame.slide = document.createElement('INPUT'); + this.frame.slide.type = 'BUTTON'; + this.frame.slide.style.margin = '0px'; + this.frame.slide.value = ' '; + this.frame.slide.style.position = 'relative'; + this.frame.slide.style.left = '-100px'; + this.frame.appendChild(this.frame.slide); - dataPoints.push(obj); - } + // create events + var me = this; + this.frame.slide.onmousedown = function (event) { + me._onMouseDown(event); + }; + this.frame.prev.onclick = function (event) { + me.prev(event); + }; + this.frame.play.onclick = function (event) { + me.togglePlay(event); + }; + this.frame.next.onclick = function (event) { + me.next(event); + }; + } - // fill in the pointers to the neighbors. - for (x = 0; x < dataMatrix.length; x++) { - for (y = 0; y < dataMatrix[x].length; y++) { - if (dataMatrix[x][y]) { - dataMatrix[x][y].pointRight = x < dataMatrix.length - 1 ? dataMatrix[x + 1][y] : undefined; - dataMatrix[x][y].pointTop = y < dataMatrix[x].length - 1 ? dataMatrix[x][y + 1] : undefined; - dataMatrix[x][y].pointCross = x < dataMatrix.length - 1 && y < dataMatrix[x].length - 1 ? dataMatrix[x + 1][y + 1] : undefined; - } - } - } - } else { - // 'dot', 'dot-line', etc. - // copy all values from the google data table to a list with Point3d objects - for (i = 0; i < data.length; i++) { - point = new Point3d(); - point.x = data[i][this.colX] || 0; - point.y = data[i][this.colY] || 0; - point.z = data[i][this.colZ] || 0; + this.onChangeCallback = undefined; - if (this.colValue !== undefined) { - point.value = data[i][this.colValue] || 0; - } + this.values = []; + this.index = undefined; - obj = {}; - obj.point = point; - obj.bottom = new Point3d(point.x, point.y, this.zMin); - obj.trans = undefined; - obj.screen = undefined; + this.playTimeout = undefined; + this.playInterval = 1000; // milliseconds + this.playLoop = true; + } - dataPoints.push(obj); - } + /** + * Select the previous index + */ + Slider.prototype.prev = function () { + var index = this.getIndex(); + if (index > 0) { + index--; + this.setIndex(index); } - - return dataPoints; }; /** - * Create the main frame for the Graph3d. - * This function is executed once when a Graph3d object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. + * Select the next index */ - Graph3d.prototype.create = function () { - // remove all elements from the container element. - while (this.containerElement.hasChildNodes()) { - this.containerElement.removeChild(this.containerElement.firstChild); - } - - this.frame = document.createElement('div'); - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; - - // create the graph canvas (HTML canvas element) - this.frame.canvas = document.createElement('canvas'); - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); - //if (!this.frame.canvas.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.frame.canvas.appendChild(noCanvas); + Slider.prototype.next = function () { + var index = this.getIndex(); + if (index < this.values.length - 1) { + index++; + this.setIndex(index); } + }; - this.frame.filter = document.createElement('div'); - this.frame.filter.style.position = 'absolute'; - this.frame.filter.style.bottom = '0px'; - this.frame.filter.style.left = '0px'; - this.frame.filter.style.width = '100%'; - this.frame.appendChild(this.frame.filter); + /** + * Select the next index + */ + Slider.prototype.playNext = function () { + var start = new Date(); - // add event listeners to handle moving and zooming the contents - var me = this; - var onmousedown = function onmousedown(event) { - me._onMouseDown(event); - }; - var ontouchstart = function ontouchstart(event) { - me._onTouchStart(event); - }; - var onmousewheel = function onmousewheel(event) { - me._onWheel(event); - }; - var ontooltip = function ontooltip(event) { - me._onTooltip(event); - }; - // TODO: these events are never cleaned up... can give a 'memory leakage' + var index = this.getIndex(); + if (index < this.values.length - 1) { + index++; + this.setIndex(index); + } else if (this.playLoop) { + // jump to the start + index = 0; + this.setIndex(index); + } - util.addEventListener(this.frame.canvas, 'keydown', onkeydown); - util.addEventListener(this.frame.canvas, 'mousedown', onmousedown); - util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart); - util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel); - util.addEventListener(this.frame.canvas, 'mousemove', ontooltip); + var end = new Date(); + var diff = end - start; - // add the new graph to the container element - this.containerElement.appendChild(this.frame); + // calculate how much time it to to set the index and to execute the callback + // function. + var interval = Math.max(this.playInterval - diff, 0); + // document.title = diff // TODO: cleanup + + var me = this; + this.playTimeout = setTimeout(function () { + me.playNext(); + }, interval); }; /** - * Set a new size for the graph - * @param {string} width Width in pixels or percentage (for example '800px' - * or '50%') - * @param {string} height Height in pixels or percentage (for example '400px' - * or '30%') + * Toggle start or stop playing */ - Graph3d.prototype.setSize = function (width, height) { - this.frame.style.width = width; - this.frame.style.height = height; - - this._resizeCanvas(); + Slider.prototype.togglePlay = function () { + if (this.playTimeout === undefined) { + this.play(); + } else { + this.stop(); + } }; /** - * Resize the canvas to the current size of the frame + * Start playing */ - Graph3d.prototype._resizeCanvas = function () { - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; + Slider.prototype.play = function () { + // Test whether already playing + if (this.playTimeout) return; - this.frame.canvas.width = this.frame.canvas.clientWidth; - this.frame.canvas.height = this.frame.canvas.clientHeight; + this.playNext(); - // adjust with for margin - this.frame.filter.style.width = this.frame.canvas.clientWidth - 2 * 10 + 'px'; + if (this.frame) { + this.frame.play.value = 'Stop'; + } }; /** - * Start animation + * Stop playing */ - Graph3d.prototype.animationStart = function () { - if (!this.frame.filter || !this.frame.filter.slider) throw 'No animation available'; + Slider.prototype.stop = function () { + clearInterval(this.playTimeout); + this.playTimeout = undefined; - this.frame.filter.slider.play(); + if (this.frame) { + this.frame.play.value = 'Play'; + } }; /** - * Stop animation + * Set a callback function which will be triggered when the value of the + * slider bar has changed. */ - Graph3d.prototype.animationStop = function () { - if (!this.frame.filter || !this.frame.filter.slider) return; + Slider.prototype.setOnChangeCallback = function (callback) { + this.onChangeCallback = callback; + }; - this.frame.filter.slider.stop(); + /** + * Set the interval for playing the list + * @param {Number} interval The interval in milliseconds + */ + Slider.prototype.setPlayInterval = function (interval) { + this.playInterval = interval; }; /** - * Resize the center position based on the current values in this.defaultXCenter - * and this.defaultYCenter (which are strings with a percentage or a value - * in pixels). The center positions are the variables this.xCenter - * and this.yCenter + * Retrieve the current play interval + * @return {Number} interval The interval in milliseconds */ - Graph3d.prototype._resizeCenter = function () { - // calculate the horizontal center position - if (this.defaultXCenter.charAt(this.defaultXCenter.length - 1) === '%') { - this.xcenter = parseFloat(this.defaultXCenter) / 100 * this.frame.canvas.clientWidth; - } else { - this.xcenter = parseFloat(this.defaultXCenter); // supposed to be in px - } + Slider.prototype.getPlayInterval = function (interval) { + return this.playInterval; + }; - // calculate the vertical center position - if (this.defaultYCenter.charAt(this.defaultYCenter.length - 1) === '%') { - this.ycenter = parseFloat(this.defaultYCenter) / 100 * (this.frame.canvas.clientHeight - this.frame.filter.clientHeight); - } else { - this.ycenter = parseFloat(this.defaultYCenter); // supposed to be in px - } + /** + * Set looping on or off + * @pararm {boolean} doLoop If true, the slider will jump to the start when + * the end is passed, and will jump to the end + * when the start is passed. + */ + Slider.prototype.setPlayLoop = function (doLoop) { + this.playLoop = doLoop; }; /** - * Set the rotation and distance of the camera - * @param {Object} pos An object with the camera position. The object - * contains three parameters: - * - horizontal {Number} - * The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * - vertical {Number} - * The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - * - distance {Number} - * The (normalized) distance of the camera to the - * center of the graph, a value between 0.71 and 5.0. - * Optional, can be left undefined. + * Execute the onchange callback function */ - Graph3d.prototype.setCameraPosition = function (pos) { - if (pos === undefined) { - return; + Slider.prototype.onChange = function () { + if (this.onChangeCallback !== undefined) { + this.onChangeCallback(); } + }; - if (pos.horizontal !== undefined && pos.vertical !== undefined) { - this.camera.setArmRotation(pos.horizontal, pos.vertical); - } + /** + * redraw the slider on the correct place + */ + Slider.prototype.redraw = function () { + if (this.frame) { + // resize the bar + this.frame.bar.style.top = this.frame.clientHeight / 2 - this.frame.bar.offsetHeight / 2 + 'px'; + this.frame.bar.style.width = this.frame.clientWidth - this.frame.prev.clientWidth - this.frame.play.clientWidth - this.frame.next.clientWidth - 30 + 'px'; - if (pos.distance !== undefined) { - this.camera.setArmLength(pos.distance); + // position the slider button + var left = this.indexToLeft(this.index); + this.frame.slide.style.left = left + 'px'; } - - this.redraw(); }; /** - * Retrieve the current camera rotation - * @return {object} An object with parameters horizontal, vertical, and - * distance + * Set the list with values for the slider + * @param {Array} values A javascript array with values (any type) */ - Graph3d.prototype.getCameraPosition = function () { - var pos = this.camera.getArmRotation(); - pos.distance = this.camera.getArmLength(); - return pos; + Slider.prototype.setValues = function (values) { + this.values = values; + + if (this.values.length > 0) this.setIndex(0);else this.index = undefined; }; /** - * Load data into the 3D Graph + * Select a value by its index + * @param {Number} index */ - Graph3d.prototype._readData = function (data) { - // read the data - this._dataInitialize(data, this.style); + Slider.prototype.setIndex = function (index) { + if (index < this.values.length) { + this.index = index; - if (this.dataFilter) { - // apply filtering - this.dataPoints = this.dataFilter._getDataPoints(); + this.redraw(); + this.onChange(); } else { - // no filtering. load all data - this.dataPoints = this._getDataPoints(this.dataTable); + throw 'Error: index out of range'; } - - // draw the filter - this._redrawFilter(); }; /** - * Replace the dataset of the Graph3d - * @param {Array | DataSet | DataView} data + * retrieve the index of the currently selected vaue + * @return {Number} index */ - Graph3d.prototype.setData = function (data) { - this._readData(data); - this.redraw(); - - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } + Slider.prototype.getIndex = function () { + return this.index; }; /** - * Update the options. Options will be merged with current options - * @param {Object} options + * retrieve the currently selected value + * @return {*} value */ - Graph3d.prototype.setOptions = function (options) { - var cameraPosition = undefined; - - this.animationStop(); + Slider.prototype.get = function () { + return this.values[this.index]; + }; - if (options !== undefined) { - // retrieve parameter values - if (options.width !== undefined) this.width = options.width; - if (options.height !== undefined) this.height = options.height; + Slider.prototype._onMouseDown = function (event) { + // only react on left mouse button down + var leftButtonDown = event.which ? event.which === 1 : event.button === 1; + if (!leftButtonDown) return; - if (options.xCenter !== undefined) this.defaultXCenter = options.xCenter; - if (options.yCenter !== undefined) this.defaultYCenter = options.yCenter; + this.startClientX = event.clientX; + this.startSlideX = parseFloat(this.frame.slide.style.left); - if (options.filterLabel !== undefined) this.filterLabel = options.filterLabel; - if (options.legendLabel !== undefined) this.legendLabel = options.legendLabel; - if (options.xLabel !== undefined) this.xLabel = options.xLabel; - if (options.yLabel !== undefined) this.yLabel = options.yLabel; - if (options.zLabel !== undefined) this.zLabel = options.zLabel; + this.frame.style.cursor = 'move'; - if (options.xValueLabel !== undefined) this.xValueLabel = options.xValueLabel; - if (options.yValueLabel !== undefined) this.yValueLabel = options.yValueLabel; - if (options.zValueLabel !== undefined) this.zValueLabel = options.zValueLabel; + // add event listeners to handle moving the contents + // we store the function onmousemove and onmouseup in the graph, so we can + // remove the eventlisteners lateron in the function mouseUp() + var me = this; + this.onmousemove = function (event) { + me._onMouseMove(event); + }; + this.onmouseup = function (event) { + me._onMouseUp(event); + }; + util.addEventListener(document, 'mousemove', this.onmousemove); + util.addEventListener(document, 'mouseup', this.onmouseup); + util.preventDefault(event); + }; - if (options.style !== undefined) { - var styleNumber = this._getStyleNumber(options.style); - if (styleNumber !== -1) { - this.style = styleNumber; - } - } - if (options.showGrid !== undefined) this.showGrid = options.showGrid; - if (options.showPerspective !== undefined) this.showPerspective = options.showPerspective; - if (options.showShadow !== undefined) this.showShadow = options.showShadow; - if (options.tooltip !== undefined) this.showTooltip = options.tooltip; - if (options.showAnimationControls !== undefined) this.showAnimationControls = options.showAnimationControls; - if (options.keepAspectRatio !== undefined) this.keepAspectRatio = options.keepAspectRatio; - if (options.verticalRatio !== undefined) this.verticalRatio = options.verticalRatio; + Slider.prototype.leftToIndex = function (left) { + var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10; + var x = left - 3; - if (options.animationInterval !== undefined) this.animationInterval = options.animationInterval; - if (options.animationPreload !== undefined) this.animationPreload = options.animationPreload; - if (options.animationAutoStart !== undefined) this.animationAutoStart = options.animationAutoStart; + var index = Math.round(x / width * (this.values.length - 1)); + if (index < 0) index = 0; + if (index > this.values.length - 1) index = this.values.length - 1; - if (options.xBarWidth !== undefined) this.defaultXBarWidth = options.xBarWidth; - if (options.yBarWidth !== undefined) this.defaultYBarWidth = options.yBarWidth; + return index; + }; - if (options.xMin !== undefined) this.defaultXMin = options.xMin; - if (options.xStep !== undefined) this.defaultXStep = options.xStep; - if (options.xMax !== undefined) this.defaultXMax = options.xMax; - if (options.yMin !== undefined) this.defaultYMin = options.yMin; - if (options.yStep !== undefined) this.defaultYStep = options.yStep; - if (options.yMax !== undefined) this.defaultYMax = options.yMax; - if (options.zMin !== undefined) this.defaultZMin = options.zMin; - if (options.zStep !== undefined) this.defaultZStep = options.zStep; - if (options.zMax !== undefined) this.defaultZMax = options.zMax; - if (options.valueMin !== undefined) this.defaultValueMin = options.valueMin; - if (options.valueMax !== undefined) this.defaultValueMax = options.valueMax; - if (options.backgroundColor !== undefined) this._setBackgroundColor(options.backgroundColor); + Slider.prototype.indexToLeft = function (index) { + var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10; - if (options.cameraPosition !== undefined) cameraPosition = options.cameraPosition; + var x = index / (this.values.length - 1) * width; + var left = x + 3; - if (cameraPosition !== undefined) { - this.camera.setArmRotation(cameraPosition.horizontal, cameraPosition.vertical); - this.camera.setArmLength(cameraPosition.distance); - } + return left; + }; - // colors - if (options.axisColor !== undefined) this.axisColor = options.axisColor; - if (options.gridColor !== undefined) this.gridColor = options.gridColor; - if (options.dataColor) { - if (typeof options.dataColor === 'string') { - this.dataColor.fill = options.dataColor; - this.dataColor.stroke = options.dataColor; - } else { - if (options.dataColor.fill) { - this.dataColor.fill = options.dataColor.fill; - } - if (options.dataColor.stroke) { - this.dataColor.stroke = options.dataColor.stroke; - } - if (options.dataColor.strokeWidth !== undefined) { - this.dataColor.strokeWidth = options.dataColor.strokeWidth; - } - } - } - } + Slider.prototype._onMouseMove = function (event) { + var diff = event.clientX - this.startClientX; + var x = this.startSlideX + diff; - this.setSize(this.width, this.height); + var index = this.leftToIndex(x); - // re-load the data - if (this.dataTable) { - this.setData(this.dataTable); - } + this.setIndex(index); - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } + util.preventDefault(); }; - /** - * Redraw the Graph. - */ - Graph3d.prototype.redraw = function () { - if (this.dataPoints === undefined) { - throw 'Error: graph data not initialized'; - } - - this._resizeCanvas(); - this._resizeCenter(); - this._redrawSlider(); - this._redrawClear(); - this._redrawAxis(); + Slider.prototype._onMouseUp = function (event) { + this.frame.style.cursor = 'auto'; - if (this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE) { - this._redrawDataGrid(); - } else if (this.style === Graph3d.STYLE.LINE) { - this._redrawDataLine(); - } else if (this.style === Graph3d.STYLE.BAR || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { - this._redrawDataBar(); - } else { - // style is DOT, DOTLINE, DOTCOLOR, DOTSIZE - this._redrawDataDot(); - } + // remove event listeners + util.removeEventListener(document, 'mousemove', this.onmousemove); + util.removeEventListener(document, 'mouseup', this.onmouseup); - this._redrawInfo(); - this._redrawLegend(); + util.preventDefault(); }; - /** - * Clear the canvas before redrawing - */ - Graph3d.prototype._redrawClear = function () { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); + module.exports = Slider; - ctx.clearRect(0, 0, canvas.width, canvas.height); - }; +/***/ }, +/* 18 */ +/***/ function(module, exports) { /** - * Redraw the legend showing the colors + * @prototype StepNumber + * The class StepNumber is an iterator for Numbers. You provide a start and end + * value, and a best step size. StepNumber itself rounds to fixed values and + * a finds the step that best fits the provided step. + * + * If prettyStep is true, the step size is chosen as close as possible to the + * provided step, but being a round value like 1, 2, 5, 10, 20, 50, .... + * + * Example usage: + * var step = new StepNumber(0, 10, 2.5, true); + * step.start(); + * while (!step.end()) { + * alert(step.getCurrent()); + * step.next(); + * } + * + * Version: 1.0 + * + * @param {Number} start The start value + * @param {Number} end The end value + * @param {Number} step Optional. Step size. Must be a positive value. + * @param {boolean} prettyStep Optional. If true, the step size is rounded + * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - Graph3d.prototype._redrawLegend = function () { - var y; - - if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE) { - - var dotSize = this.frame.clientWidth * 0.02; - - var widthMin, widthMax; - if (this.style === Graph3d.STYLE.DOTSIZE) { - widthMin = dotSize / 2; // px - widthMax = dotSize / 2 + dotSize * 2; // Todo: put this in one function - } else { - widthMin = 20; // px - widthMax = 20; // px - } - - var height = Math.max(this.frame.clientHeight * 0.25, 100); - var top = this.margin; - var right = this.frame.clientWidth - this.margin; - var left = right - widthMax; - var bottom = top + height; - } - - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - ctx.lineWidth = 1; - ctx.font = '14px arial'; // TODO: put in options - - if (this.style === Graph3d.STYLE.DOTCOLOR) { - // draw the color bar - var ymin = 0; - var ymax = height; // Todo: make height customizable - for (y = ymin; y < ymax; y++) { - var f = (y - ymin) / (ymax - ymin); - - //var width = (dotSize / 2 + (1-f) * dotSize * 2); // Todo: put this in one function - var hue = f * 240; - var color = this._hsv2rgb(hue, 1, 1); - - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(left, top + y); - ctx.lineTo(right, top + y); - ctx.stroke(); - } - - ctx.strokeStyle = this.axisColor; - ctx.strokeRect(left, top, widthMax, height); - } - - if (this.style === Graph3d.STYLE.DOTSIZE) { - // draw border around color bar - ctx.strokeStyle = this.axisColor; - ctx.fillStyle = this.dataColor.fill; - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(right, top); - ctx.lineTo(right - widthMax + widthMin, bottom); - ctx.lineTo(left, bottom); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); - } - - if (this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.DOTSIZE) { - // print values along the color bar - var gridLineLen = 5; // px - var step = new StepNumber(this.valueMin, this.valueMax, (this.valueMax - this.valueMin) / 5, true); - step.start(); - if (step.getCurrent() < this.valueMin) { - step.next(); - } - while (!step.end()) { - y = bottom - (step.getCurrent() - this.valueMin) / (this.valueMax - this.valueMin) * height; - - ctx.beginPath(); - ctx.moveTo(left - gridLineLen, y); - ctx.lineTo(left, y); - ctx.stroke(); + "use strict"; - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.axisColor; - ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y); + function StepNumber(start, end, step, prettyStep) { + // set default values + this._start = 0; + this._end = 0; + this._step = 1; + this.prettyStep = true; + this.precision = 5; - step.next(); - } + this._current = 0; + this.setRange(start, end, step, prettyStep); + }; - ctx.textAlign = 'right'; - ctx.textBaseline = 'top'; - var label = this.legendLabel; - ctx.fillText(label, right, bottom + this.margin); - } + /** + * Set a new range: start, end and step. + * + * @param {Number} start The start value + * @param {Number} end The end value + * @param {Number} step Optional. Step size. Must be a positive value. + * @param {boolean} prettyStep Optional. If true, the step size is rounded + * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) + */ + StepNumber.prototype.setRange = function (start, end, step, prettyStep) { + this._start = start ? start : 0; + this._end = end ? end : 0; + + this.setStep(step, prettyStep); }; /** - * Redraw the filter + * Set a new step size + * @param {Number} step New step size. Must be a positive value + * @param {boolean} prettyStep Optional. If true, the provided step is rounded + * to a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - Graph3d.prototype._redrawFilter = function () { - this.frame.filter.innerHTML = ''; + StepNumber.prototype.setStep = function (step, prettyStep) { + if (step === undefined || step <= 0) return; - if (this.dataFilter) { - var options = { - 'visible': this.showAnimationControls - }; - var slider = new Slider(this.frame.filter, options); - this.frame.filter.slider = slider; + if (prettyStep !== undefined) this.prettyStep = prettyStep; - // TODO: css here is not nice here... - this.frame.filter.style.padding = '10px'; - //this.frame.filter.style.backgroundColor = '#EFEFEF'; + if (this.prettyStep === true) this._step = StepNumber.calculatePrettyStep(step);else this._step = step; + }; - slider.setValues(this.dataFilter.values); - slider.setPlayInterval(this.animationInterval); + /** + * Calculate a nice step size, closest to the desired step size. + * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an + * integer Number. For example 1, 2, 5, 10, 20, 50, etc... + * @param {Number} step Desired step size + * @return {Number} Nice step size + */ + StepNumber.calculatePrettyStep = function (step) { + var log10 = function log10(x) { + return Math.log(x) / Math.LN10; + }; - // create an event handler - var me = this; - var onchange = function onchange() { - var index = slider.getIndex(); + // try three steps (multiple of 1, 2, or 5 + var step1 = Math.pow(10, Math.round(log10(step))), + step2 = 2 * Math.pow(10, Math.round(log10(step / 2))), + step5 = 5 * Math.pow(10, Math.round(log10(step / 5))); - me.dataFilter.selectValue(index); - me.dataPoints = me.dataFilter._getDataPoints(); + // choose the best step (closest to minimum step) + var prettyStep = step1; + if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2; + if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5; - me.redraw(); - }; - slider.setOnChangeCallback(onchange); - } else { - this.frame.filter.slider = undefined; + // for safety + if (prettyStep <= 0) { + prettyStep = 1; } + + return prettyStep; }; /** - * Redraw the slider + * returns the current value of the step + * @return {Number} current value */ - Graph3d.prototype._redrawSlider = function () { - if (this.frame.filter.slider !== undefined) { - this.frame.filter.slider.redraw(); - } + StepNumber.prototype.getCurrent = function () { + return parseFloat(this._current.toPrecision(this.precision)); }; /** - * Redraw common information + * returns the current step size + * @return {Number} current step size */ - Graph3d.prototype._redrawInfo = function () { - if (this.dataFilter) { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - - ctx.font = '14px arial'; // TODO: put in options - ctx.lineStyle = 'gray'; - ctx.fillStyle = 'gray'; - ctx.textAlign = 'left'; - ctx.textBaseline = 'top'; + StepNumber.prototype.getStep = function () { + return this._step; + }; - var x = this.margin; - var y = this.margin; - ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y); - } + /** + * Set the current value to the largest value smaller than start, which + * is a multiple of the step size + */ + StepNumber.prototype.start = function () { + this._current = this._start - this._start % this._step; }; /** - * Redraw the axis + * Do a step, add the step size to the current value */ - Graph3d.prototype._redrawAxis = function () { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - from, - to, - step, - prettyStep, - text, - xText, - yText, - zText, - offset, - xOffset, - yOffset, - xMin2d, - xMax2d; + StepNumber.prototype.next = function () { + this._current += this._step; + }; - // TODO: get the actual rendered style of the containerElement - //ctx.font = this.containerElement.style.font; - ctx.font = 24 / this.camera.getArmLength() + 'px arial'; + /** + * Returns true whether the end is reached + * @return {boolean} True if the current value has passed the end value. + */ + StepNumber.prototype.end = function () { + return this._current > this._end; + }; - // calculate the length for the short grid lines - var gridLenX = 0.025 / this.scale.x; - var gridLenY = 0.025 / this.scale.y; - var textMargin = 5 / this.camera.getArmLength(); // px - var armAngle = this.camera.getArmRotation().horizontal; + module.exports = StepNumber; - // draw x-grid lines - ctx.lineWidth = 1; - prettyStep = this.defaultXStep === undefined; - step = new StepNumber(this.xMin, this.xMax, this.xStep, prettyStep); - step.start(); - if (step.getCurrent() < this.xMin) { - step.next(); - } - while (!step.end()) { - var x = step.getCurrent(); +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - ctx.strokeStyle = this.gridColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } else { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMin + gridLenX, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + 'use strict'; - from = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax - gridLenX, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(20); + var moment = __webpack_require__(2); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var Range = __webpack_require__(24); + var Core = __webpack_require__(28); + var TimeAxis = __webpack_require__(39); + var CurrentTime = __webpack_require__(44); + var CustomTime = __webpack_require__(42); + var ItemSet = __webpack_require__(29); - yText = Math.cos(armAngle) > 0 ? this.yMin : this.yMax; - text = this._convert3Dto2D(new Point3d(x, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } else if (Math.sin(armAngle * 2) < 0) { - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; - } - ctx.fillStyle = this.axisColor; - ctx.fillText(' ' + this.xValueLabel(step.getCurrent()) + ' ', text.x, text.y); + var Configurator = __webpack_require__(45); + var Validator = __webpack_require__(47)['default']; + var printStyle = __webpack_require__(47).printStyle; + var allOptions = __webpack_require__(48).allOptions; + var configureOptions = __webpack_require__(48).configureOptions; - step.next(); + /** + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | vis.DataView | Array} [items] + * @param {vis.DataSet | vis.DataView | Array} [groups] + * @param {Object} [options] See Timeline.setOptions for the available options. + * @constructor + * @extends Core + */ + function Timeline(container, items, groups, options) { + if (!(this instanceof Timeline)) { + throw new SyntaxError('Constructor must be called with the new operator'); } - // draw y-grid lines - ctx.lineWidth = 1; - prettyStep = this.defaultYStep === undefined; - step = new StepNumber(this.yMin, this.yMax, this.yStep, prettyStep); - step.start(); - if (step.getCurrent() < this.yMin) { - step.next(); + // if the third element is options, the forth is groups (optionally); + if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) { + var forthArgument = options; + options = groups; + groups = forthArgument; } - while (!step.end()) { - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.gridColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } else { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin + gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - from = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax - gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } + var me = this; + this.defaultOptions = { + start: null, + end: null, - xText = Math.sin(armAngle) > 0 ? this.xMin : this.xMax; - text = this._convert3Dto2D(new Point3d(xText, step.getCurrent(), this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } else if (Math.sin(armAngle * 2) > 0) { - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + autoResize: true, + throttleRedraw: 0, // ms + + orientation: { + axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both' + item: 'bottom' // not relevant + }, + + moment: moment, + + width: null, + height: null, + maxHeight: null, + minHeight: null + }; + this.options = util.deepExtend({}, this.defaultOptions); + + // Create the DOM, props, and emitter + this._create(container); + + // all components listed here will be repainted automatically + 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 getScale() { + return me.timeAxis.step.scale; + }, + getStep: function getStep() { + return me.timeAxis.step.step; + }, + + toScreen: me._toScreen.bind(me), + toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width + toTime: me._toTime.bind(me), + toGlobalTime: me._toGlobalTime.bind(me) } - ctx.fillStyle = this.axisColor; - ctx.fillText(' ' + this.yValueLabel(step.getCurrent()) + ' ', text.x, text.y); + }; - step.next(); + // range + this.range = new Range(this.body); + this.components.push(this.range); + this.body.range = this.range; + + // time axis + this.timeAxis = new TimeAxis(this.body); + this.timeAxis2 = null; // used in case of orientation option 'both' + this.components.push(this.timeAxis); + + // current time bar + this.currentTime = new CurrentTime(this.body); + this.components.push(this.currentTime); + + // item set + this.itemSet = new ItemSet(this.body); + this.components.push(this.itemSet); + + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet + + this.on('tap', function (event) { + me.emit('click', me.getEventProperties(event)); + }); + this.on('doubletap', function (event) { + me.emit('doubleClick', me.getEventProperties(event)); + }); + this.dom.root.oncontextmenu = function (event) { + me.emit('contextmenu', me.getEventProperties(event)); + }; + + // apply options + if (options) { + this.setOptions(options); } - // draw z-grid lines and axis - ctx.lineWidth = 1; - prettyStep = this.defaultZStep === undefined; - step = new StepNumber(this.zMin, this.zMax, this.zStep, prettyStep); - step.start(); - if (step.getCurrent() < this.zMin) { - step.next(); + // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! + if (groups) { + this.setGroups(groups); } - xText = Math.cos(armAngle) > 0 ? this.xMin : this.xMax; - yText = Math.sin(armAngle) < 0 ? this.yMin : this.yMax; - while (!step.end()) { - // TODO: make z-grid lines really 3d? - from = this._convert3Dto2D(new Point3d(xText, yText, step.getCurrent())); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(from.x - textMargin, from.y); - ctx.stroke(); - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.axisColor; - ctx.fillText(this.zValueLabel(step.getCurrent()) + ' ', from.x - 5, from.y); + // create itemset + if (items) { + this.setItems(items); + } else { + this._redraw(); + } + } - step.next(); + // Extend the functionality from Core + Timeline.prototype = new Core(); + + /** + * Load a configurator + * @return {Object} + * @private + */ + Timeline.prototype._createConfigurator = function () { + return new Configurator(this, this.dom.container, configureOptions); + }; + + /** + * Force a redraw. The size of all items will be recalculated. + * Can be useful to manually redraw when option autoResize=false and the window + * has been resized, or when the items CSS has been changed. + * + * Note: this function will be overridden on construction with a trottled version + */ + Timeline.prototype.redraw = function () { + this.itemSet && this.itemSet.markDirty({ refreshItems: true }); + this._redraw(); + }; + + Timeline.prototype.setOptions = function (options) { + // validate options + var errorFound = Validator.validate(options, allOptions); + if (errorFound === true) { + console.log('%cErrors have been found in the supplied options object.', printStyle); } - ctx.lineWidth = 1; - from = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - to = this._convert3Dto2D(new Point3d(xText, yText, this.zMax)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - // draw x-axis - ctx.lineWidth = 1; - // line at yMin - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); - // line at ymax - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); + Core.prototype.setOptions.call(this, options); - // draw y-axis - ctx.lineWidth = 1; - // line at xMin - from = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - // line at xMax - from = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.axisColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + if ('type' in options) { + if (options.type !== this.options.type) { + this.options.type = options.type; - // draw x-label - var xLabel = this.xLabel; - if (xLabel.length > 0) { - yOffset = 0.1 / this.scale.y; - xText = (this.xMin + this.xMax) / 2; - yText = Math.cos(armAngle) > 0 ? this.yMin - yOffset : this.yMax + yOffset; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - } else if (Math.sin(armAngle * 2) < 0) { - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + // force recreation of all items + var itemsData = this.itemsData; + if (itemsData) { + var selection = this.getSelection(); + this.setItems(null); // remove all + this.setItems(itemsData); // add all + this.setSelection(selection); // restore selection + } } - ctx.fillStyle = this.axisColor; - ctx.fillText(xLabel, text.x, text.y); } + }; + + /** + * Set items + * @param {vis.DataSet | Array | null} items + */ + Timeline.prototype.setItems = function (items) { + var initialLoad = this.itemsData == null; + + // convert to type DataSet when needed + var newDataSet; + if (!items) { + newDataSet = null; + } else if (items instanceof DataSet || items instanceof DataView) { + newDataSet = items; + } else { + // turn an array into a dataset + newDataSet = new DataSet(items, { + type: { + start: 'Date', + end: 'Date' + } + }); + } + + // set items + this.itemsData = newDataSet; + this.itemSet && this.itemSet.setItems(newDataSet); + + if (initialLoad) { + if (this.options.start != undefined || this.options.end != undefined) { + if (this.options.start == undefined || this.options.end == undefined) { + var range = this.getItemRange(); + } + + var start = this.options.start != undefined ? this.options.start : range.min; + var end = this.options.end != undefined ? this.options.end : range.max; - // draw y-label - var yLabel = this.yLabel; - if (yLabel.length > 0) { - xOffset = 0.1 / this.scale.x; - xText = Math.sin(armAngle) > 0 ? this.xMin - xOffset : this.xMax + xOffset; - yText = (this.yMin + this.yMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - } else if (Math.sin(armAngle * 2) > 0) { - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; + this.setWindow(start, end, { animation: false }); } else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + this.fit({ animation: false }); } - ctx.fillStyle = this.axisColor; - ctx.fillText(yLabel, text.x, text.y); } + }; - // draw z-label - var zLabel = this.zLabel; - if (zLabel.length > 0) { - offset = 30; // pixels. // TODO: relate to the max width of the values on the z axis? - xText = Math.cos(armAngle) > 0 ? this.xMin : this.xMax; - yText = Math.sin(armAngle) < 0 ? this.yMin : this.yMax; - zText = (this.zMin + this.zMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, zText)); - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.axisColor; - ctx.fillText(zLabel, text.x - offset, text.y); + /** + * Set groups + * @param {vis.DataSet | Array} groups + */ + Timeline.prototype.setGroups = function (groups) { + // convert to type DataSet when needed + var newDataSet; + if (!groups) { + newDataSet = null; + } else if (groups instanceof DataSet || groups instanceof DataView) { + newDataSet = groups; + } else { + // turn an array into a dataset + newDataSet = new DataSet(groups); } + + this.groupsData = newDataSet; + this.itemSet.setGroups(newDataSet); }; /** - * Calculate the color based on the given value. - * @param {Number} H Hue, a value be between 0 and 360 - * @param {Number} S Saturation, a value between 0 and 1 - * @param {Number} V Value, a value between 0 and 1 + * Set both items and groups in one go + * @param {{items: Array | vis.DataSet, groups: Array | vis.DataSet}} data */ - Graph3d.prototype._hsv2rgb = function (H, S, V) { - var R, G, B, C, Hi, X; + Timeline.prototype.setData = function (data) { + if (data && data.groups) { + this.setGroups(data.groups); + } - C = V * S; - Hi = Math.floor(H / 60); // hi = 0,1,2,3,4,5 - X = C * (1 - Math.abs(H / 60 % 2 - 1)); + if (data && data.items) { + this.setItems(data.items); + } + }; - switch (Hi) { - case 0: - R = C;G = X;B = 0;break; - case 1: - R = X;G = C;B = 0;break; - case 2: - R = 0;G = C;B = X;break; - case 3: - R = 0;G = X;B = C;break; - case 4: - R = X;G = 0;B = C;break; - case 5: - R = C;G = 0;B = X;break; + /** + * 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. If ids is an empty array, all items will be + * unselected. + * @param {Object} [options] Available options: + * `focus: boolean` + * If true, focus will be set to the selected item(s) + * `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'. + * Only applicable when option focus is true. + */ + Timeline.prototype.setSelection = function (ids, options) { + this.itemSet && this.itemSet.setSelection(ids); - default: - R = 0;G = 0;B = 0;break; + if (options && options.focus) { + this.focus(ids, options); } + }; - return 'RGB(' + parseInt(R * 255) + ',' + parseInt(G * 255) + ',' + parseInt(B * 255) + ')'; + /** + * Get the selected items by their id + * @return {Array} ids The ids of the selected items + */ + Timeline.prototype.getSelection = function () { + return this.itemSet && this.itemSet.getSelection() || []; }; /** - * Draw all datapoints as a grid - * This function can be used when the style is 'grid' + * Adjust the visible window such that the selected item (or multiple items) + * are centered on screen. + * @param {String | String[]} id An item id or array with item ids + * @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'. */ - Graph3d.prototype._redrawDataGrid = function () { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, - right, - top, - cross, - i, - topSideVisible, - fillStyle, - strokeStyle, - lineWidth, - h, - s, - v, - zAvg; + Timeline.prototype.focus = function (id, options) { + if (!this.itemsData || id == undefined) return; - ctx.lineJoin = 'round'; - ctx.lineCap = 'round'; + var ids = Array.isArray(id) ? id : [id]; - if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? + // get the specified item(s) + var itemsData = this.itemsData.getDataSet().get(ids, { + type: { + start: 'Date', + end: 'Date' + } + }); - // calculate the translations and screen position of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); + // calculate minimum start and maximum end of specified items + var start = null; + var end = null; + itemsData.forEach(function (itemData) { + var s = itemData.start.valueOf(); + var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf(); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + if (start === null || s < start) { + start = s; + } - // calculate the translation of the point at the bottom (needed for sorting) - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + if (end === null || e > end) { + end = e; + } + }); - // sort the points on depth of their (x,y) position (not on z) - var sortDepth = function sortDepth(a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + if (start !== null && end !== null) { + // calculate the new middle and interval for the window + var middle = (start + end) / 2; + var interval = Math.max(this.range.end - this.range.start, (end - start) * 1.1); - if (this.style === Graph3d.STYLE.SURFACE) { - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; - cross = this.dataPoints[i].pointCross; + var animation = options && options.animation !== undefined ? options.animation : true; + this.range.setRange(middle - interval / 2, middle + interval / 2, animation); + } + }; - if (point !== undefined && right !== undefined && top !== undefined && cross !== undefined) { + /** + * Set Timeline 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'. + */ + Timeline.prototype.fit = function (options) { + var animation = options && options.animation !== undefined ? options.animation : true; + var range = this.getItemRange(); + this.range.setRange(range.min, range.max, animation); + }; - if (this.showGrayBottom || this.showShadow) { - // calculate the cross product of the two vectors from center - // to left and right, in order to know whether we are looking at the - // bottom or at the top side. We can also use the cross product - // for calculating light intensity - var aDiff = Point3d.subtract(cross.trans, point.trans); - var bDiff = Point3d.subtract(top.trans, right.trans); - var crossproduct = Point3d.crossProduct(aDiff, bDiff); - var len = crossproduct.length(); - // FIXME: there is a bug with determining the surface side (shadow or colored) + /** + * Determine the range of the items, taking into account their actual width + * and a margin of 10 pixels on both sides. + * @return {{min: Date | null, max: Date | null}} + */ + Timeline.prototype.getItemRange = function () { + var _this = this; - topSideVisible = crossproduct.z > 0; - } else { - topSideVisible = true; - } + // get a rough approximation for the range based on the items start and end dates + var range = this.getDataRange(); + var min = range.min; + var max = range.max; + var minItem = null; + var maxItem = null; - if (topSideVisible) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - s = 1; // saturation + if (min != null && max != null) { + var interval; + var factor; + var lhs; + var rhs; + var delta; - if (this.showShadow) { - v = Math.min(1 + crossproduct.x / len / 2, 1); // value. TODO: scale - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = fillStyle; - } else { - v = 1; - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = this.axisColor; // TODO: should be customizable - } - } else { - fillStyle = 'gray'; - strokeStyle = this.axisColor; - } + (function () { + var getStart = function getStart(item) { + return util.convert(item.data.start, 'Date').valueOf(); + }; - ctx.lineWidth = this._getStrokeWidth(point); - ctx.fillStyle = fillStyle; - ctx.strokeStyle = strokeStyle; - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.lineTo(cross.screen.x, cross.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); // TODO: only draw stroke when strokeWidth > 0 + var getEnd = function getEnd(item) { + var end = item.data.end != undefined ? item.data.end : item.data.start; + return util.convert(end, 'Date').valueOf(); + }; + + interval = max - min; + // ms + if (interval <= 0) { + interval = 10; } - } - } else { - // grid style - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; + factor = interval / _this.props.center.width; - if (point !== undefined && right !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + // calculate the date of the left side and right side of the items given + util.forEach(_this.itemSet.items, (function (item) { + item.show(); - ctx.lineWidth = this._getStrokeWidth(point) * 2; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.stroke(); - } + var start = getStart(item); + var end = getEnd(item); - if (point !== undefined && top !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + top.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + var left = new Date(start - (item.getWidthLeft() + 10) * factor); + var right = new Date(end + (item.getWidthRight() + 10) * factor); - ctx.lineWidth = this._getStrokeWidth(point) * 2; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.stroke(); + if (left < min) { + min = left; + minItem = item; + } + if (right > max) { + max = right; + maxItem = item; + } + }).bind(_this)); + + if (minItem && maxItem) { + lhs = minItem.getWidthLeft() + 10; + rhs = maxItem.getWidthRight() + 10; + delta = _this.props.center.width - lhs - rhs; + // px + + if (delta > 0) { + min = getStart(minItem) - lhs * interval / delta; // ms + max = getEnd(maxItem) + rhs * interval / delta; // ms + } } - } + })(); } + + return { + min: min != null ? new Date(min) : null, + max: max != null ? new Date(max) : null + }; }; - Graph3d.prototype._getStrokeWidth = function (point) { - if (point !== undefined) { - if (this.showPerspective) { - return 1 / -point.trans.z * this.dataColor.strokeWidth; - } else { - return -(this.eye.z / this.camera.getArmLength()) * this.dataColor.strokeWidth; - } + /** + * Calculate the data range of the items start and end dates + * @returns {{min: Date | null, max: Date | null}} + */ + Timeline.prototype.getDataRange = function () { + var min = null; + var max = null; + + var dataset = this.itemsData && this.itemsData.getDataSet(); + if (dataset) { + dataset.forEach(function (item) { + var start = util.convert(item.start, 'Date').valueOf(); + var end = util.convert(item.end != undefined ? item.end : item.start, 'Date').valueOf(); + if (min === null || start < min) { + min = start; + } + if (max === null || end > max) { + max = start; + } + }); } - return this.dataColor.strokeWidth; + return { + min: min != null ? new Date(min) : null, + max: max != null ? new Date(max) : null + }; }; /** - * Draw all datapoints as dots. - * This function can be used when the style is 'dot' or 'dot-line' + * Generate Timeline related information from an event + * @param {Event} event + * @return {Object} An object with related information, like on which area + * The event happened, whether clicked on an item, etc. */ - Graph3d.prototype._redrawDataDot = function () { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i; + Timeline.prototype.getEventProperties = function (event) { + var clientX = event.center ? event.center.x : event.clientX; + var clientY = event.center ? event.center.y : event.clientY; + var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer); + var y = clientY - util.getAbsoluteTop(this.dom.centerContainer); - if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? + var item = this.itemSet.itemFromTarget(event); + var group = this.itemSet.groupFromTarget(event); + var customTime = CustomTime.customTimeFromTarget(event); - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + var snap = this.itemSet.options.snap || null; + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); + var time = this._toTime(x); + var snappedTime = snap ? snap(time, scale, step) : time; + + var element = util.getTarget(event); + var what = null; + if (item != null) { + what = 'item'; + } else if (customTime != null) { + what = 'custom-time'; + } else if (util.hasParent(element, this.timeAxis.dom.foreground)) { + what = 'axis'; + } else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) { + what = 'axis'; + } else if (util.hasParent(element, this.itemSet.dom.labelSet)) { + what = 'group-label'; + } else if (util.hasParent(element, this.currentTime.bar)) { + what = 'current-time'; + } else if (util.hasParent(element, this.dom.center)) { + what = 'background'; + } + + return { + event: event, + item: item ? item.id : null, + group: group ? group.groupId : null, + what: what, + pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX, + pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY, + x: x, + y: y, + time: time, + snappedTime: snappedTime + }; + }; + + module.exports = Timeline; + +/***/ }, +/* 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__) { + + var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; + + (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 + + /** + * 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 + }; - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + if (hammer.Manager) { + // This looks like the Hammer constructor. + // Overload the constructors with our own. + var Hammer = hammer; - // order the translated points by depth - var sortDepth = function sortDepth(a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + var PropagatingHammer = function(element, options) { + var o = Object.create(_options); + if (options) Hammer.extend(o, options); + return propagating(new Hammer(element, o), o); + }; + Hammer.extend(PropagatingHammer, Hammer); - // draw the datapoints as colored circles - var dotSize = this.frame.clientWidth * 0.02; // px - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; + PropagatingHammer.Manager = function (element, options) { + var o = Object.create(_options); + if (options) Hammer.extend(o, options); + return propagating(new Hammer.Manager(element, o), o); + }; - if (this.style === Graph3d.STYLE.DOTLINE) { - // draw a vertical line from the bottom to the graph value - //var from = this._convert3Dto2D(new Point3d(point.point.x, point.point.y, this.zMin)); - var from = this._convert3Dto2D(point.bottom); - ctx.lineWidth = 1; - ctx.strokeStyle = this.gridColor; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(point.screen.x, point.screen.y); - ctx.stroke(); + return PropagatingHammer; } - // calculate radius for the circle - var size; - if (this.style === Graph3d.STYLE.DOTSIZE) { - size = dotSize / 2 + 2 * dotSize * (point.point.value - this.valueMin) / (this.valueMax - this.valueMin); - } else { - size = dotSize; - } + // create a wrapper object which will override the functions + // `on`, `off`, `destroy`, and `emit` of the hammer instance + var wrapper = Object.create(hammer); - var radius; - if (this.showPerspective) { - radius = size / -point.trans.z; - } else { - radius = size * -(this.eye.z / this.camera.getArmLength()); - } - if (radius < 0) { - radius = 0; - } + // attach to DOM element + var element = hammer.element; + element.hammer = wrapper; - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.DOTCOLOR) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } else if (this.style === Graph3d.STYLE.DOTSIZE) { - color = this.dataColor.fill; - borderColor = this.dataColor.stroke; - } else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } + // 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; + } + }); - // draw the circle - ctx.lineWidth = this._getStrokeWidth(point); - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - ctx.beginPath(); - ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI * 2, true); - ctx.fill(); - ctx.stroke(); - } - }; + /** @type {Object.>} */ + wrapper._handlers = {}; - /** - * Draw all datapoints as bars. - * This function can be used when the style is 'bar', 'bar-color', or 'bar-size' - */ - Graph3d.prototype._redrawDataBar = function () { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i, j, surface, corners; + /** + * 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 = []; - if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? + // register the static, propagated handler + hammer.on(event, propagatedHandler); + } + _handlers.push(handler); + }); - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + return wrapper; + }; - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + /** + * 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; + }) : []; - // order the translated points by depth - var sortDepth = function sortDepth(a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + if (_handlers.length > 0) { + wrapper._handlers[event] = _handlers; + } + else { + // remove static, propagated handler + hammer.off(event, propagatedHandler); + delete wrapper._handlers[event]; + } + } + }); - ctx.lineJoin = 'round'; - ctx.lineCap = 'round'; + return wrapper; + }; - // draw the datapoints as bars - var xWidth = this.xBarWidth / 2; - var yWidth = this.yBarWidth / 2; - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; + /** + * Emit to the event listeners + * @param {string} eventType + * @param {Event} event + */ + wrapper.emit = function(eventType, event) { + _firstTarget = event.target; + hammer.emit(eventType, event); + }; - // determine color - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.BARCOLOR) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } else if (this.style === Graph3d.STYLE.BARSIZE) { - color = this.dataColor.fill; - borderColor = this.dataColor.stroke; - } else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } + wrapper.destroy = function () { + // Detach from DOM element + delete hammer.element.hammer; - // calculate size for the bar - if (this.style === Graph3d.STYLE.BARSIZE) { - xWidth = this.xBarWidth / 2 * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - yWidth = this.yBarWidth / 2 * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - } + // clear all handlers + wrapper._handlers = {}; - // calculate all corner points - var me = this; - var point3d = point.point; - var top = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z) }]; - var bottom = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, this.zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, this.zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, this.zMin) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, this.zMin) }]; + // call original hammer destroy + hammer.destroy(); + }; - // calculate screen location of the points - top.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); - bottom.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); + // split a string with space separated words + function split(events) { + return events.match(/[^ ]+/g); + } - // create five sides, calculate both corner points and center points - var surfaces = [{ corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point) }, { corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point) }, { corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point) }, { corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point) }, { corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point) }]; - point.surfaces = surfaces; + /** + * 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 = {}; + } - // calculate the distance of each of the surface centers to the camera - for (j = 0; j < surfaces.length; j++) { - surface = surfaces[j]; - var transCenter = this._convertPointToTranslation(surface.center); - surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z; - // TODO: this dept calculation doesn't work 100% of the cases due to perspective, - // but the current solution is fast/simple and works in 99.9% of all cases - // the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9}) - } + if (event.srcEvent._handled[event.type]) { + return; + } + else { + event.srcEvent._handled[event.type] = true; + } + } - // order the surfaces by their (translated) depth - surfaces.sort(function (a, b) { - var diff = b.dist - a.dist; - if (diff) return diff; + // attach a stopPropagation function to the event + var stopped = false; + event.stopPropagation = function () { + stopped = true; + }; - // if equal depth, sort the top surface last - if (a.corners === top) return 1; - if (b.corners === top) return -1; + // attach firstTarget property to the event + event.firstTarget = _firstTarget; - // both are equal - return 0; - }); + // propagate over all elements (until stopped) + var elem = _firstTarget; + while (elem && !stopped) { + var _handlers = elem.hammer && elem.hammer._handlers[event.type]; + if (_handlers) { + for (var i = 0; i < _handlers.length && !stopped; i++) { + _handlers[i](event); + } + } - // draw the ordered surfaces - ctx.lineWidth = this._getStrokeWidth(point); - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside - for (j = 2; j < surfaces.length; j++) { - surface = surfaces[j]; - corners = surface.corners; - ctx.beginPath(); - ctx.moveTo(corners[3].screen.x, corners[3].screen.y); - ctx.lineTo(corners[0].screen.x, corners[0].screen.y); - ctx.lineTo(corners[1].screen.x, corners[1].screen.y); - ctx.lineTo(corners[2].screen.x, corners[2].screen.y); - ctx.lineTo(corners[3].screen.x, corners[3].screen.y); - ctx.fill(); - ctx.stroke(); + elem = elem.parentNode; + } } - } - }; - - /** - * Draw a line through all datapoints. - * This function can be used when the style is 'line' - */ - Graph3d.prototype._redrawDataLine = function () { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, - i; - if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception? + return wrapper; + }; + })); - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - } +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { - // start the line - if (this.dataPoints.length > 0) { - point = this.dataPoints[0]; + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.4 - 2014-09-28 + * http://hammerjs.github.io/ + * + * Copyright (c) 2014 Jorik Tangelder; + * Licensed under the MIT license */ + (function(window, document, exportName, undefined) { + 'use strict'; - ctx.lineWidth = this._getStrokeWidth(point); - ctx.lineJoin = 'round'; - ctx.lineCap = 'round'; - ctx.strokeStyle = this.dataColor.stroke; - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); + var VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o']; + var TEST_ELEMENT = document.createElement('div'); - // draw the datapoints as colored circles - for (i = 1; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - ctx.lineTo(point.screen.x, point.screen.y); - } + var TYPE_FUNCTION = 'function'; - // finish the line - ctx.stroke(); - } - }; + var round = Math.round; + var abs = Math.abs; + var now = Date.now; /** - * Start a moving operation inside the provided parent element - * @param {Event} event The event that occurred (required for - * retrieving the mouse position) + * set a timeout with a given scope + * @param {Function} fn + * @param {Number} timeout + * @param {Object} context + * @returns {number} */ - Graph3d.prototype._onMouseDown = function (event) { - event = event || window.event; + function setTimeoutContext(fn, timeout, context) { + return setTimeout(bindFn(fn, context), timeout); + } - // check if mouse is still down (may be up when focus is lost for example - // in an iframe) - if (this.leftButtonDown) { - this._onMouseUp(event); - } + /** + * 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; + } + return false; + } - // only react on left mouse button down - this.leftButtonDown = event.which ? event.which === 1 : event.button === 1; - if (!this.leftButtonDown && !this.touchDown) return; + /** + * walk objects and arrays + * @param {Object} obj + * @param {Function} iterator + * @param {Object} context + */ + function each(obj, iterator, context) { + var i; - // get mouse position (different code for IE and all other browsers) - this.startMouseX = getMouseX(event); - this.startMouseY = getMouseY(event); + if (!obj) { + return; + } - this.startStart = new Date(this.start); - this.startEnd = new Date(this.end); - this.startArmRotation = this.camera.getArmRotation(); + 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); + } + } + } - this.frame.style.cursor = 'move'; + /** + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge] + * @returns {Object} dest + */ + 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++; + } + return dest; + } - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) { - me._onMouseMove(event); - }; - this.onmouseup = function (event) { - me._onMouseUp(event); - }; - util.addEventListener(document, 'mousemove', me.onmousemove); - util.addEventListener(document, 'mouseup', me.onmouseup); - util.preventDefault(event); - }; + /** + * 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 merge(dest, src) { + return extend(dest, src, true); + } /** - * Perform moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {Event} event Well, eehh, the event + * simple class inheritance + * @param {Function} child + * @param {Function} base + * @param {Object} [properties] */ - Graph3d.prototype._onMouseMove = function (event) { - event = event || window.event; + function inherit(child, base, properties) { + var baseP = base.prototype, + childP; - // calculate change in mouse position - var diffX = parseFloat(getMouseX(event)) - this.startMouseX; - var diffY = parseFloat(getMouseY(event)) - this.startMouseY; + childP = child.prototype = Object.create(baseP); + childP.constructor = child; + childP._super = baseP; - var horizontalNew = this.startArmRotation.horizontal + diffX / 200; - var verticalNew = this.startArmRotation.vertical + diffY / 200; + if (properties) { + extend(childP, properties); + } + } - var snapAngle = 4; // degrees - var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI); + /** + * simple function bind + * @param {Function} fn + * @param {Object} context + * @returns {Function} + */ + function bindFn(fn, context) { + return function boundFn() { + return fn.apply(context, arguments); + }; + } - // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc... - // the -0.001 is to take care that the vertical axis is always drawn at the left front corner - if (Math.abs(Math.sin(horizontalNew)) < snapValue) { - horizontalNew = Math.round(horizontalNew / Math.PI) * Math.PI - 0.001; - } - if (Math.abs(Math.cos(horizontalNew)) < snapValue) { - horizontalNew = (Math.round(horizontalNew / Math.PI - 0.5) + 0.5) * Math.PI - 0.001; - } + /** + * 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; + } - // snap vertically to nice angles - if (Math.abs(Math.sin(verticalNew)) < snapValue) { - verticalNew = Math.round(verticalNew / Math.PI) * Math.PI; - } - if (Math.abs(Math.cos(verticalNew)) < snapValue) { - verticalNew = (Math.round(verticalNew / Math.PI - 0.5) + 0.5) * Math.PI; - } + /** + * use the val2 when val1 is undefined + * @param {*} val1 + * @param {*} val2 + * @returns {*} + */ + function ifUndefined(val1, val2) { + return (val1 === undefined) ? val2 : val1; + } - this.camera.setArmRotation(horizontalNew, verticalNew); - this.redraw(); + /** + * 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); + }); + } - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); + /** + * 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); + }); + } - util.preventDefault(event); - }; + /** + * 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; + } /** - * Stop moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {event} event The event + * small indexOf wrapper + * @param {String} str + * @param {String} find + * @returns {Boolean} found */ - Graph3d.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; - this.leftButtonDown = false; + function inStr(str, find) { + return str.indexOf(find) > -1; + } - // remove event listeners here - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; + /** + * split string on whitespace + * @param {String} str + * @returns {Array} words + */ + function splitStr(str) { + return str.trim().split(/\s+/g); + } /** - * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point - * @param {Event} event A mouse move event + * 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 */ - Graph3d.prototype._onTooltip = function (event) { - var delay = 300; // ms - var boundingRect = this.frame.getBoundingClientRect(); - var mouseX = getMouseX(event) - boundingRect.left; - var mouseY = getMouseY(event) - boundingRect.top; + 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++; + } + return -1; + } + } - if (!this.showTooltip) { - return; - } + /** + * convert array-like objects to real arrays + * @param {Object} obj + * @returns {Array} + */ + function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + } - if (this.tooltipTimeout) { - clearTimeout(this.tooltipTimeout); - } + /** + * 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; - // (delayed) display of a tooltip only if no mouse button is down - if (this.leftButtonDown) { - this._hideTooltip(); - return; - } + 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++; + } - if (this.tooltip && this.tooltip.dataPoint) { - // tooltip is currently visible - var dataPoint = this._dataPointFromXY(mouseX, mouseY); - if (dataPoint !== this.tooltip.dataPoint) { - // datapoint changed - if (dataPoint) { - this._showTooltip(dataPoint); - } else { - this._hideTooltip(); - } + if (sort) { + if (!key) { + results = results.sort(); + } else { + results = results.sort(function sortUniqueArray(a, b) { + return a[key] > b[key]; + }); + } } - } else { - // tooltip is currently not visible - var me = this; - this.tooltipTimeout = setTimeout(function () { - me.tooltipTimeout = null; - // show a tooltip if we have a data point - var dataPoint = me._dataPointFromXY(mouseX, mouseY); - if (dataPoint) { - me._showTooltip(dataPoint); - } - }, delay); - } - }; + return results; + } /** - * Event handler for touchstart event on mobile devices + * get the prefixed property + * @param {Object} obj + * @param {String} property + * @returns {String|Undefined} prefixed */ - Graph3d.prototype._onTouchStart = function (event) { - this.touchDown = true; + function prefixed(obj, property) { + var prefix, prop; + var camelProp = property[0].toUpperCase() + property.slice(1); - var me = this; - this.ontouchmove = function (event) { - me._onTouchMove(event); - }; - this.ontouchend = function (event) { - me._onTouchEnd(event); - }; - util.addEventListener(document, 'touchmove', me.ontouchmove); - util.addEventListener(document, 'touchend', me.ontouchend); + var i = 0; + while (i < VENDOR_PREFIXES.length) { + prefix = VENDOR_PREFIXES[i]; + prop = (prefix) ? prefix + camelProp : property; - this._onMouseDown(event); - }; + if (prop in obj) { + return prop; + } + i++; + } + return undefined; + } /** - * Event handler for touchmove event on mobile devices + * get a unique id + * @returns {number} uniqueId */ - Graph3d.prototype._onTouchMove = function (event) { - this._onMouseMove(event); - }; + var _uniqueId = 1; + function uniqueId() { + return _uniqueId++; + } /** - * Event handler for touchend event on mobile devices + * get the window object of an element + * @param {HTMLElement} element + * @returns {DocumentView|Window} */ - Graph3d.prototype._onTouchEnd = function (event) { - this.touchDown = false; - - util.removeEventListener(document, 'touchmove', this.ontouchmove); - util.removeEventListener(document, 'touchend', this.ontouchend); + function getWindowForElement(element) { + var doc = element.ownerDocument; + return (doc.defaultView || doc.parentWindow); + } - this._onMouseUp(event); - }; + var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - /** - * Event handler for mouse wheel event, used to zoom the graph - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {event} event The event - */ - Graph3d.prototype._onWheel = function (event) { - if (!event) /* For IE. */ - event = window.event; + 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); - // 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; - } + var INPUT_TYPE_TOUCH = 'touch'; + var INPUT_TYPE_PEN = 'pen'; + var INPUT_TYPE_MOUSE = 'mouse'; + var INPUT_TYPE_KINECT = 'kinect'; - // 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) { - var oldLength = this.camera.getArmLength(); - var newLength = oldLength * (1 - delta / 10); + var COMPUTE_INTERVAL = 25; - this.camera.setArmLength(newLength); - this.redraw(); + var INPUT_START = 1; + var INPUT_MOVE = 2; + var INPUT_END = 4; + var INPUT_CANCEL = 8; - this._hideTooltip(); - } + var DIRECTION_NONE = 1; + var DIRECTION_LEFT = 2; + var DIRECTION_RIGHT = 4; + var DIRECTION_UP = 8; + var DIRECTION_DOWN = 16; - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); + var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; + var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; + var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; - // Prevent default actions caused by mouse wheel. - // That might be ugly, but we handle scrolls somehow - // anyway, so don't bother here.. - util.preventDefault(event); - }; + var PROPS_XY = ['x', 'y']; + var PROPS_CLIENT_XY = ['clientX', 'clientY']; /** - * Test whether a point lies inside given 2D triangle - * @param {Point2d} point - * @param {Point2d[]} triangle - * @return {boolean} Returns true if given point lies inside or on the edge of the triangle - * @private + * create new input type manager + * @param {Manager} manager + * @param {Function} callback + * @returns {Input} + * @constructor */ - Graph3d.prototype._insideTriangle = function (point, triangle) { - var a = triangle[0], - b = triangle[1], - c = triangle[2]; + function Input(manager, callback) { + var self = this; + this.manager = manager; + this.callback = callback; + this.element = manager.element; + this.target = manager.options.inputTarget; - function sign(x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } + // 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); + } + }; - var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x)); - var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x)); - var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x)); + this.init(); - // each of the three signs must be either equal to each other or zero - return (as == 0 || bs == 0 || as == bs) && (bs == 0 || cs == 0 || bs == cs) && (as == 0 || cs == 0 || as == cs); - }; + } - /** - * Find a data point close to given screen position (x, y) - * @param {Number} x - * @param {Number} y - * @return {Object | null} The closest data point or null if not close to any data point - * @private - */ - Graph3d.prototype._dataPointFromXY = function (x, y) { - var i, - distMax = 100, - // px - dataPoint = null, - closestDataPoint = null, - closestDist = null, - center = new Point2d(x, y); + Input.prototype = { + /** + * should handle the inputEvent data and trigger the callback + * @virtual + */ + handler: function() { }, - if (this.style === Graph3d.STYLE.BAR || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) { - // the data points are ordered from far away to closest - for (i = this.dataPoints.length - 1; i >= 0; i--) { - dataPoint = this.dataPoints[i]; - var surfaces = dataPoint.surfaces; - if (surfaces) { - for (var s = surfaces.length - 1; s >= 0; s--) { - // split each surface in two triangles, and see if the center point is inside one of these - var surface = surfaces[s]; - var corners = surface.corners; - var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen]; - var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen]; - if (this._insideTriangle(center, triangle1) || this._insideTriangle(center, triangle2)) { - // return immediately at the first hit - return dataPoint; - } - } - } - } - } else { - // find the closest data point, using distance to the center of the point on 2d screen - for (i = 0; i < this.dataPoints.length; i++) { - dataPoint = this.dataPoints[i]; - var point = dataPoint.screen; - if (point) { - var distX = Math.abs(x - point.x); - var distY = Math.abs(y - point.y); - var dist = Math.sqrt(distX * distX + distY * distY); + /** + * bind the events + */ + 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); + }, - if ((closestDist === null || dist < closestDist) && dist < distMax) { - closestDist = dist; - closestDataPoint = dataPoint; - } - } + /** + * unbind the events + */ + 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); } - } - - return closestDataPoint; }; /** - * Display a tooltip for given data point - * @param {Object} dataPoint - * @private + * create new input type manager + * called by the Manager constructor + * @param {Hammer} manager + * @returns {Input} */ - Graph3d.prototype._showTooltip = function (dataPoint) { - var content, line, dot; - - if (!this.tooltip) { - content = document.createElement('div'); - content.style.position = 'absolute'; - content.style.padding = '10px'; - content.style.border = '1px solid #4d4d4d'; - content.style.color = '#1a1a1a'; - content.style.background = 'rgba(255,255,255,0.7)'; - content.style.borderRadius = '2px'; - content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)'; - - line = document.createElement('div'); - line.style.position = 'absolute'; - line.style.height = '40px'; - line.style.width = '0'; - line.style.borderLeft = '1px solid #4d4d4d'; + function createInputInstance(manager) { + var Type; + var inputClass = manager.options.inputClass; - dot = document.createElement('div'); - dot.style.position = 'absolute'; - dot.style.height = '0'; - dot.style.width = '0'; - dot.style.border = '5px solid #4d4d4d'; - dot.style.borderRadius = '5px'; + 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); + } - this.tooltip = { - dataPoint: null, - dom: { - content: content, - line: line, - dot: dot - } - }; - } else { - content = this.tooltip.dom.content; - line = this.tooltip.dom.line; - dot = this.tooltip.dom.dot; - } + /** + * 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)); - this._hideTooltip(); + input.isFirst = !!isFirst; + input.isFinal = !!isFinal; - this.tooltip.dataPoint = dataPoint; - if (typeof this.showTooltip === 'function') { - content.innerHTML = this.showTooltip(dataPoint.point); - } else { - content.innerHTML = '' + '' + '' + '' + '
x:' + dataPoint.point.x + '
y:' + dataPoint.point.y + '
z:' + dataPoint.point.z + '
'; - } + if (isFirst) { + manager.session = {}; + } - content.style.left = '0'; - content.style.top = '0'; - this.frame.appendChild(content); - this.frame.appendChild(line); - this.frame.appendChild(dot); + // source event is the normalized value of the domEvents + // like 'touchstart, mouseup, pointerdown' + input.eventType = eventType; - // calculate sizes - var contentWidth = content.offsetWidth; - var contentHeight = content.offsetHeight; - var lineHeight = line.offsetHeight; - var dotWidth = dot.offsetWidth; - var dotHeight = dot.offsetHeight; + // compute scale, rotation etc + computeInputData(manager, input); - var left = dataPoint.screen.x - contentWidth / 2; - left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth); + // emit secret event + manager.emit('hammer.input', input); - line.style.left = dataPoint.screen.x + 'px'; - line.style.top = dataPoint.screen.y - lineHeight + 'px'; - content.style.left = left + 'px'; - content.style.top = dataPoint.screen.y - lineHeight - contentHeight + 'px'; - dot.style.left = dataPoint.screen.x - dotWidth / 2 + 'px'; - dot.style.top = dataPoint.screen.y - dotHeight / 2 + 'px'; - }; + manager.recognize(input); + manager.session.prevInput = input; + } /** - * Hide the tooltip when displayed - * @private + * extend the data with some usable properties like scale, rotate, velocity etc + * @param {Object} manager + * @param {Object} input */ - Graph3d.prototype._hideTooltip = function () { - if (this.tooltip) { - this.tooltip.dataPoint = null; + function computeInputData(manager, input) { + var session = manager.session; + var pointers = input.pointers; + var pointersLength = pointers.length; - for (var prop in this.tooltip.dom) { - if (this.tooltip.dom.hasOwnProperty(prop)) { - var elem = this.tooltip.dom[prop]; - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } + // store the first input to calculate the distance and direction + if (!session.firstInput) { + session.firstInput = simpleCloneInputData(input); } - } - }; - /**--------------------------------------------------------------------------**/ + // 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; + } - /** - * Get the horizontal mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse x - */ - function getMouseX(event) { - if ('clientX' in event) return event.clientX; - return event.targetTouches[0] && event.targetTouches[0].clientX || 0; - } + var firstInput = session.firstInput; + var firstMultiple = session.firstMultiple; + var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - /** - * Get the vertical mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse y - */ - function getMouseY(event) { - if ('clientY' in event) return event.clientY; - return event.targetTouches[0] && event.targetTouches[0].clientY || 0; - } + var center = input.center = getCenter(pointers); + input.timeStamp = now(); + input.deltaTime = input.timeStamp - firstInput.timeStamp; - module.exports = Graph3d; + input.angle = getAngle(offsetCenter, center); + input.distance = getDistance(offsetCenter, center); - // use use defaults + computeDeltaXY(session, input); + input.offsetDirection = getDirection(input.deltaX, input.deltaY); -/***/ }, -/* 18 */ -/***/ function(module, exports) { + input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; + input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; - /** - * @prototype Point2d - * @param {Number} [x] - * @param {Number} [y] - */ - "use strict"; + computeIntervalInputData(session, input); - function Point2d(x, y) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; + // find the correct target + var target = manager.element; + if (hasParent(input.srcEvent.target, target)) { + target = input.srcEvent.target; + } + input.target = target; } - module.exports = Point2d; + function computeDeltaXY(session, input) { + var center = input.center; + var offset = session.offsetDelta || {}; + var prevDelta = session.prevDelta || {}; + var prevInput = session.prevInput || {}; -/***/ }, -/* 19 */ -/***/ function(module, exports) { + if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { + prevDelta = session.prevDelta = { + x: prevInput.deltaX || 0, + y: prevInput.deltaY || 0 + }; - - /** - * Expose `Emitter`. - */ + offset = session.offsetDelta = { + x: center.x, + y: center.y + }; + } - module.exports = Emitter; + input.deltaX = prevDelta.x + (center.x - offset.x); + input.deltaY = prevDelta.y + (center.y - offset.y); + } /** - * Initialize a new `Emitter`. - * - * @api public + * 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; - function Emitter(obj) { - if (obj) return mixin(obj); - }; + if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { + var deltaX = last.deltaX - input.deltaX; + var deltaY = last.deltaY - input.deltaY; - /** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ + 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); - function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; - } - return obj; + 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; + } + + input.velocity = velocity; + input.velocityX = velocityX; + input.velocityY = velocityY; + input.direction = direction; } /** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * 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++; + } - Emitter.prototype.on = - Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks[event] = this._callbacks[event] || []) - .push(fn); - return this; - }; + return { + timeStamp: now(), + pointers: pointers, + center: getCenter(pointers), + deltaX: input.deltaX, + deltaY: input.deltaY + }; + } /** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * 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; - Emitter.prototype.once = function(event, fn){ - var self = this; - this._callbacks = this._callbacks || {}; + // no need to loop when only one touch + if (pointersLength === 1) { + return { + x: round(pointers[0].clientX), + y: round(pointers[0].clientY) + }; + } - function on() { - self.off(event, on); - fn.apply(this, arguments); - } + var x = 0, y = 0, i = 0; + while (i < pointersLength) { + x += pointers[i].clientX; + y += pointers[i].clientY; + i++; + } - on.fn = fn; - this.on(event, on); - return this; - }; + return { + x: round(x / pointersLength), + y: round(y / pointersLength) + }; + } /** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * 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 + }; + } - Emitter.prototype.off = - Emitter.prototype.removeListener = - Emitter.prototype.removeAllListeners = - Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; - } - - // specific event - var callbacks = this._callbacks[event]; - if (!callbacks) return this; - - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks[event]; - return this; - } + /** + * 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; + } - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; + if (abs(x) >= abs(y)) { + return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; } - } - return this; - }; + return y > 0 ? DIRECTION_UP : DIRECTION_DOWN; + } /** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} + * 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]]; - Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks[event]; + return Math.sqrt((x * x) + (y * y)); + } - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); + /** + * 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; } - } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + return Math.atan2(y, x) * 180 / Math.PI; + } - return this; - }; + /** + * 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); + } /** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public + * 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); + } - Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks[event] || []; + var MOUSE_INPUT_MAP = { + mousedown: INPUT_START, + mousemove: INPUT_MOVE, + mouseup: INPUT_END }; + var MOUSE_ELEMENT_EVENTS = 'mousedown'; + var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + /** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public + * Mouse events input + * @constructor + * @extends Input */ + function MouseInput() { + this.evEl = MOUSE_ELEMENT_EVENTS; + this.evWin = MOUSE_WINDOW_EVENTS; - Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; - }; + this.allow = true; // used by Input.TouchMouse to disable mouse events + this.pressed = false; // mousedown state + Input.apply(this, arguments); + } -/***/ }, -/* 20 */ -/***/ function(module, exports) { + inherit(MouseInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function MEhandler(ev) { + var eventType = MOUSE_INPUT_MAP[ev.type]; - /** - * @prototype Point3d - * @param {Number} [x] - * @param {Number} [y] - * @param {Number} [z] - */ - "use strict"; + // on start we want to have the left mouse button down + if (eventType & INPUT_START && ev.button === 0) { + this.pressed = true; + } - function Point3d(x, y, z) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; - this.z = z !== undefined ? z : 0; - }; + if (eventType & INPUT_MOVE && ev.which !== 1) { + eventType = INPUT_END; + } - /** - * Subtract the two provided points, returns a-b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a-b - */ - Point3d.subtract = function (a, b) { - var sub = new Point3d(); - sub.x = a.x - b.x; - sub.y = a.y - b.y; - sub.z = a.z - b.z; - return sub; - }; + // mouse must be down, and mouse events are allowed (see the TouchMouse input) + if (!this.pressed || !this.allow) { + return; + } - /** - * Add the two provided points, returns a+b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a+b - */ - Point3d.add = function (a, b) { - var sum = new Point3d(); - sum.x = a.x + b.x; - sum.y = a.y + b.y; - sum.z = a.z + b.z; - return sum; + if (eventType & INPUT_END) { + this.pressed = false; + } + + this.callback(this.manager, eventType, { + pointers: [ev], + changedPointers: [ev], + pointerType: INPUT_TYPE_MOUSE, + srcEvent: ev + }); + } + }); + + var POINTER_INPUT_MAP = { + pointerdown: INPUT_START, + pointermove: INPUT_MOVE, + pointerup: INPUT_END, + pointercancel: INPUT_CANCEL, + pointerout: INPUT_CANCEL }; - /** - * Calculate the average of two 3d points - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} The average, (a+b)/2 - */ - Point3d.avg = function (a, b) { - return new Point3d((a.x + b.x) / 2, (a.y + b.y) / 2, (a.z + b.z) / 2); + // 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 }; - /** - * Calculate the cross product of the two provided points, returns axb - * Documentation: http://en.wikipedia.org/wiki/Cross_product - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} cross product axb - */ - Point3d.crossProduct = function (a, b) { - var crossproduct = new Point3d(); - - crossproduct.x = a.y * b.z - a.z * b.y; - crossproduct.y = a.z * b.x - a.x * b.z; - crossproduct.z = a.x * b.y - a.y * b.x; + var POINTER_ELEMENT_EVENTS = 'pointerdown'; + var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; - return crossproduct; - }; + // IE10 has prefixed support, and case-sensitive + if (window.MSPointerEvent) { + POINTER_ELEMENT_EVENTS = 'MSPointerDown'; + POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; + } /** - * Rtrieve the length of the vector (or the distance from this point to the origin - * @return {Number} length + * Pointer events input + * @constructor + * @extends Input */ - Point3d.prototype.length = function () { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); - }; + function PointerEventInput() { + this.evEl = POINTER_ELEMENT_EVENTS; + this.evWin = POINTER_WINDOW_EVENTS; - module.exports = Point3d; + Input.apply(this, arguments); -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { + this.store = (this.manager.session.pointerEvents = []); + } - 'use strict'; + inherit(PointerEventInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function PEhandler(ev) { + var store = this.store; + var removePointer = false; - var Point3d = __webpack_require__(20); + var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); + var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; + var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - /** - * @class Camera - * The camera is mounted on a (virtual) camera arm. The camera arm can rotate - * The camera is always looking in the direction of the origin of the arm. - * This way, the camera always rotates around one fixed point, the location - * of the camera arm. - * - * Documentation: - * http://en.wikipedia.org/wiki/3D_projection - */ - function Camera() { - this.armLocation = new Point3d(); - this.armRotation = {}; - this.armRotation.horizontal = 0; - this.armRotation.vertical = 0; - this.armLength = 1.7; + var isTouch = (pointerType == INPUT_TYPE_TOUCH); - this.cameraLocation = new Point3d(); - this.cameraRotation = new Point3d(0.5 * Math.PI, 0, 0); + // get index of the event in the store + var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - this.calculateCameraOrientation(); - } + // 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; + } - /** - * Set the location (origin) of the arm - * @param {Number} x Normalized value of x - * @param {Number} y Normalized value of y - * @param {Number} z Normalized value of z - */ - Camera.prototype.setArmLocation = function (x, y, z) { - this.armLocation.x = x; - this.armLocation.y = y; - this.armLocation.z = z; + // it not found, so the pointer hasn't been down (so it's probably a hover) + if (storeIndex < 0) { + return; + } - this.calculateCameraOrientation(); - }; + // update the event in the store + store[storeIndex] = ev; - /** - * Set the rotation of the camera arm - * @param {Number} horizontal The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * @param {Number} vertical The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - */ - Camera.prototype.setArmRotation = function (horizontal, vertical) { - if (horizontal !== undefined) { - this.armRotation.horizontal = horizontal; - } + this.callback(this.manager, eventType, { + pointers: store, + changedPointers: [ev], + pointerType: pointerType, + srcEvent: ev + }); - if (vertical !== undefined) { - this.armRotation.vertical = vertical; - if (this.armRotation.vertical < 0) this.armRotation.vertical = 0; - if (this.armRotation.vertical > 0.5 * Math.PI) this.armRotation.vertical = 0.5 * Math.PI; - } + if (removePointer) { + // remove from the store + store.splice(storeIndex, 1); + } + } + }); - if (horizontal !== undefined || vertical !== undefined) { - this.calculateCameraOrientation(); - } + 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'; + /** - * Retrieve the current arm rotation - * @return {object} An object with parameters horizontal and vertical + * Touch events input + * @constructor + * @extends Input */ - Camera.prototype.getArmRotation = function () { - var rot = {}; - rot.horizontal = this.armRotation.horizontal; - rot.vertical = this.armRotation.vertical; + function SingleTouchInput() { + this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; + this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; + this.started = false; - return rot; - }; + Input.apply(this, arguments); + } - /** - * Set the (normalized) length of the camera arm. - * @param {Number} length A length between 0.71 and 5.0 - */ - Camera.prototype.setArmLength = function (length) { - if (length === undefined) return; + inherit(SingleTouchInput, Input, { + handler: function TEhandler(ev) { + var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; - this.armLength = length; + // should we handle the touch events? + if (type === INPUT_START) { + this.started = true; + } - // Radius must be larger than the corner of the graph, - // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the - // graph - if (this.armLength < 0.71) this.armLength = 0.71; - if (this.armLength > 5.0) this.armLength = 5.0; + if (!this.started) { + return; + } - this.calculateCameraOrientation(); - }; + var touches = normalizeSingleTouches.call(this, ev, type); - /** - * Retrieve the arm length - * @return {Number} length - */ - Camera.prototype.getArmLength = function () { - return this.armLength; - }; + // when done, reset the started state + if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { + this.started = false; + } - /** - * Retrieve the camera location - * @return {Point3d} cameraLocation - */ - Camera.prototype.getCameraLocation = function () { - return this.cameraLocation; - }; + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } + }); /** - * Retrieve the camera rotation - * @return {Point3d} cameraRotation + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] */ - Camera.prototype.getCameraRotation = function () { - return this.cameraRotation; - }; + function normalizeSingleTouches(ev, type) { + var all = toArray(ev.touches); + var changed = toArray(ev.changedTouches); - /** - * Calculate the location and rotation of the camera based on the - * position and orientation of the camera arm - */ - Camera.prototype.calculateCameraOrientation = function () { - // calculate location of the camera - 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); + if (type & (INPUT_END | INPUT_CANCEL)) { + all = uniqueArray(all.concat(changed), 'identifier', true); + } - // calculate rotation of the camera - this.cameraRotation.x = Math.PI / 2 - this.armRotation.vertical; - this.cameraRotation.y = 0; - this.cameraRotation.z = -this.armRotation.horizontal; + return [all, changed]; + } + + var TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL }; - module.exports = Camera; + var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Multi-user touch events input + * @constructor + * @extends Input + */ + function TouchInput() { + this.evTarget = TOUCH_TARGET_EVENTS; + this.targetIds = {}; - 'use strict'; + Input.apply(this, arguments); + } + + inherit(TouchInput, Input, { + handler: function MTEhandler(ev) { + var type = TOUCH_INPUT_MAP[ev.type]; + var touches = getTouches.call(this, ev, type); + if (!touches) { + return; + } - var DataView = __webpack_require__(16); + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } + }); /** - * @class Filter - * - * @param {DataSet} data The google data table - * @param {Number} column The index of the column to be filtered - * @param {Graph} graph The graph + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] */ - function Filter(data, column, graph) { - this.data = data; - this.column = column; - this.graph = graph; // the parent graph + function getTouches(ev, type) { + var allTouches = toArray(ev.touches); + var targetIds = this.targetIds; - this.index = undefined; - this.value = undefined; + // 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]; + } - // read all distinct values and select the first one - this.values = graph.getDistinctValues(data.get(), this.column); + var i, + targetTouches, + changedTouches = toArray(ev.changedTouches), + changedTargetTouches = [], + target = this.target; - // sort both numeric and string values correctly - this.values.sort(function (a, b) { - return a > b ? 1 : a < b ? -1 : 0; - }); + // get target touches from touches + targetTouches = allTouches.filter(function(touch) { + return hasParent(touch.target, target); + }); - if (this.values.length > 0) { - this.selectValue(0); - } + // collect touches + if (type === INPUT_START) { + i = 0; + while (i < targetTouches.length) { + targetIds[targetTouches[i].identifier] = true; + i++; + } + } - // create an array with the filtered datapoints. this will be loaded afterwards - this.dataPoints = []; + // 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.loaded = false; - this.onLoadCallback = undefined; + // cleanup removed touches + if (type & (INPUT_END | INPUT_CANCEL)) { + delete targetIds[changedTouches[i].identifier]; + } + i++; + } - if (graph.animationPreload) { - this.loaded = false; - this.loadInBackground(); - } else { - this.loaded = true; - } - }; + if (!changedTargetTouches.length) { + return; + } - /** - * Return the label - * @return {string} label - */ - Filter.prototype.isLoaded = function () { - return this.loaded; - }; + return [ + // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' + uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), + changedTargetTouches + ]; + } /** - * Return the loaded progress - * @return {Number} percentage between 0 and 100 + * 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 */ - Filter.prototype.getLoadedProgress = function () { - var len = this.values.length; - - var i = 0; - while (this.dataPoints[i]) { - i++; - } + function TouchMouseInput() { + Input.apply(this, arguments); - return Math.round(i / len * 100); - }; + var handler = bindFn(this.handler, this); + this.touch = new TouchInput(this.manager, handler); + this.mouse = new MouseInput(this.manager, handler); + } - /** - * Return the label - * @return {string} label - */ - Filter.prototype.getLabel = function () { - return this.graph.filterLabel; - }; + 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); - /** - * Return the columnIndex of the filter - * @return {Number} columnIndex - */ - Filter.prototype.getColumn = function () { - return this.column; - }; + // 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; + } - /** - * Return the currently selected value. Returns undefined if there is no selection - * @return {*} value - */ - Filter.prototype.getSelectedValue = function () { - if (this.index === undefined) return undefined; + // reset the allowMouse when we're done + if (inputEvent & (INPUT_END | INPUT_CANCEL)) { + this.mouse.allow = true; + } - return this.values[this.index]; - }; + this.callback(manager, inputEvent, inputData); + }, - /** - * Retrieve all values of the filter - * @return {Array} values - */ - Filter.prototype.getValues = function () { - return this.values; - }; + /** + * remove the event listeners + */ + destroy: function destroy() { + this.touch.destroy(); + this.mouse.destroy(); + } + }); - /** - * Retrieve one value of the filter - * @param {Number} index - * @return {*} value - */ - Filter.prototype.getValue = function (index) { - if (index >= this.values.length) throw 'Error: index out of range'; + var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); + var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; - return this.values[index]; - }; + // 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'; /** - * Retrieve the (filtered) dataPoints for the currently selected filter index - * @param {Number} [index] (optional) - * @return {Array} dataPoints + * Touch Action + * sets the touchAction property or uses the js alternative + * @param {Manager} manager + * @param {String} value + * @constructor */ - Filter.prototype._getDataPoints = function (index) { - if (index === undefined) index = this.index; + function TouchAction(manager, value) { + this.manager = manager; + this.set(value); + } - if (index === undefined) return []; + 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(); + } - var dataPoints; - if (this.dataPoints[index]) { - dataPoints = this.dataPoints[index]; - } else { - var f = {}; - f.column = this.column; - f.value = this.values[index]; + if (NATIVE_TOUCH_ACTION) { + this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + } + this.actions = value.toLowerCase().trim(); + }, + + /** + * just re-set the touchAction value + */ + update: function() { + this.set(this.manager.options.touchAction); + }, - var dataView = new DataView(this.data, { filter: function filter(item) { - return item[f.column] == f.value; - } }).get(); - dataPoints = this.graph._getDataPoints(dataView); + /** + * 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(' ')); + }, - this.dataPoints[index] = dataPoints; - } + /** + * 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; + } - return dataPoints; - }; + var srcEvent = input.srcEvent; + var direction = input.offsetDirection; - /** - * Set a callback function when the filter is fully loaded. - */ - Filter.prototype.setOnLoadCallback = function (callback) { - this.onLoadCallback = callback; - }; + // if the touch action did prevented once this session + if (this.manager.session.prevented) { + srcEvent.preventDefault(); + return; + } - /** - * Add a value to the list with available values for this filter - * No double entries will be created. - * @param {Number} index - */ - Filter.prototype.selectValue = function (index) { - if (index >= this.values.length) throw 'Error: index out of range'; + 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.index = index; - this.value = this.values[index]; + if (hasNone || + (hasPanY && direction & DIRECTION_HORIZONTAL) || + (hasPanX && direction & DIRECTION_VERTICAL)) { + return this.preventSrc(srcEvent); + } + }, + + /** + * 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(); + } }; /** - * Load all filtered rows in the background one by one - * Start this method without providing an index! + * when the touchActions are collected they are not a valid value, so we need to clean things up. * + * @param {String} actions + * @returns {*} */ - Filter.prototype.loadInBackground = function (index) { - if (index === undefined) index = 0; - - var frame = this.graph.frame; - - if (index < this.values.length) { - var dataPointsTemp = this._getDataPoints(index); - //this.graph.redrawInfo(); // TODO: not neat - - // create a progress box - if (frame.progress === undefined) { - frame.progress = document.createElement('DIV'); - frame.progress.style.position = 'absolute'; - frame.progress.style.color = 'gray'; - frame.appendChild(frame.progress); + function cleanTouchActions(actions) { + // none + if (inStr(actions, TOUCH_ACTION_NONE)) { + return TOUCH_ACTION_NONE; } - var progress = this.getLoadedProgress(); - frame.progress.innerHTML = 'Loading animation... ' + progress + '%'; - // TODO: this is no nice solution... - frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider - frame.progress.style.left = 10 + 'px'; - var me = this; - setTimeout(function () { - me.loadInBackground(index + 1); - }, 10); - this.loaded = false; - } else { - this.loaded = true; + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - // remove the progress box - if (frame.progress !== undefined) { - frame.removeChild(frame.progress); - frame.progress = undefined; + // pan-x and pan-y can be combined + if (hasPanX && hasPanY) { + return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y; } - if (this.onLoadCallback) this.onLoadCallback(); - } - }; - - module.exports = Filter; - -/***/ }, -/* 23 */ -/***/ function(module, exports, __webpack_require__) { + // pan-x OR pan-y + if (hasPanX || hasPanY) { + return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + } - 'use strict'; + // manipulation + if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { + return TOUCH_ACTION_MANIPULATION; + } - var util = __webpack_require__(7); + return TOUCH_ACTION_AUTO; + } /** - * @constructor Slider + * 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 * - * An html slider control with start/stop/prev/next buttons - * @param {Element} container The element where the slider will be created - * @param {Object} options Available options: - * {boolean} visible If true (default) the - * slider is visible. + * 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 */ - function Slider(container, options) { - if (container === undefined) { - throw 'Error: No container element defined'; - } - this.container = container; - this.visible = options && options.visible != undefined ? options.visible : true; + 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; - if (this.visible) { - this.frame = document.createElement('DIV'); - //this.frame.style.backgroundColor = '#E5E5E5'; - this.frame.style.width = '100%'; - this.frame.style.position = 'relative'; - this.container.appendChild(this.frame); + /** + * Recognizer + * Every recognizer needs to extend from this class. + * @constructor + * @param {Object} options + */ + function Recognizer(options) { + this.id = uniqueId(); - this.frame.prev = document.createElement('INPUT'); - this.frame.prev.type = 'BUTTON'; - this.frame.prev.value = 'Prev'; - this.frame.appendChild(this.frame.prev); + this.manager = null; + this.options = merge(options || {}, this.defaults); - this.frame.play = document.createElement('INPUT'); - this.frame.play.type = 'BUTTON'; - this.frame.play.value = 'Play'; - this.frame.appendChild(this.frame.play); + // default is enable true + this.options.enable = ifUndefined(this.options.enable, true); - this.frame.next = document.createElement('INPUT'); - this.frame.next.type = 'BUTTON'; - this.frame.next.value = 'Next'; - this.frame.appendChild(this.frame.next); + this.state = STATE_POSSIBLE; - this.frame.bar = document.createElement('INPUT'); - this.frame.bar.type = 'BUTTON'; - this.frame.bar.style.position = 'absolute'; - this.frame.bar.style.border = '1px solid red'; - this.frame.bar.style.width = '100px'; - this.frame.bar.style.height = '6px'; - this.frame.bar.style.borderRadius = '2px'; - this.frame.bar.style.MozBorderRadius = '2px'; - this.frame.bar.style.border = '1px solid #7F7F7F'; - this.frame.bar.style.backgroundColor = '#E5E5E5'; - this.frame.appendChild(this.frame.bar); + this.simultaneous = {}; + this.requireFail = []; + } - this.frame.slide = document.createElement('INPUT'); - this.frame.slide.type = 'BUTTON'; - this.frame.slide.style.margin = '0px'; - this.frame.slide.value = ' '; - this.frame.slide.style.position = 'relative'; - this.frame.slide.style.left = '-100px'; - this.frame.appendChild(this.frame.slide); + Recognizer.prototype = { + /** + * @virtual + * @type {Object} + */ + defaults: {}, - // create events - var me = this; - this.frame.slide.onmousedown = function (event) { - me._onMouseDown(event); - }; - this.frame.prev.onclick = function (event) { - me.prev(event); - }; - this.frame.play.onclick = function (event) { - me.togglePlay(event); - }; - this.frame.next.onclick = function (event) { - me.next(event); - }; - } + /** + * set options + * @param {Object} options + * @return {Recognizer} + */ + set: function(options) { + extend(this.options, options); - this.onChangeCallback = undefined; + // also update the touchAction, in case something changed about the directions/enabled state + this.manager && this.manager.touchAction.update(); + return this; + }, - this.values = []; - this.index = undefined; + /** + * recognize simultaneous with an other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + recognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { + return this; + } - this.playTimeout = undefined; - this.playInterval = 1000; // milliseconds - this.playLoop = true; - } + var simultaneous = this.simultaneous; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (!simultaneous[otherRecognizer.id]) { + simultaneous[otherRecognizer.id] = otherRecognizer; + otherRecognizer.recognizeWith(this); + } + return this; + }, - /** - * Select the previous index - */ - Slider.prototype.prev = function () { - var index = this.getIndex(); - if (index > 0) { - index--; - this.setIndex(index); - } - }; + /** + * 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; + } - /** - * Select the next index - */ - Slider.prototype.next = function () { - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } - }; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + delete this.simultaneous[otherRecognizer.id]; + return this; + }, - /** - * Select the next index - */ - Slider.prototype.playNext = function () { - var start = new Date(); + /** + * 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; + } - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } else if (this.playLoop) { - // jump to the start - index = 0; - this.setIndex(index); - } + var requireFail = this.requireFail; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (inArray(requireFail, otherRecognizer) === -1) { + requireFail.push(otherRecognizer); + otherRecognizer.requireFailure(this); + } + return this; + }, - var end = new Date(); - var diff = end - start; + /** + * 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; + } - // calculate how much time it to to set the index and to execute the callback - // function. - var interval = Math.max(this.playInterval - diff, 0); - // document.title = diff // TODO: cleanup + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + var index = inArray(this.requireFail, otherRecognizer); + if (index > -1) { + this.requireFail.splice(index, 1); + } + return this; + }, - var me = this; - this.playTimeout = setTimeout(function () { - me.playNext(); - }, interval); - }; + /** + * has require failures boolean + * @returns {boolean} + */ + hasRequireFailures: function() { + return this.requireFail.length > 0; + }, - /** - * Toggle start or stop playing - */ - Slider.prototype.togglePlay = function () { - if (this.playTimeout === undefined) { - this.play(); - } else { - this.stop(); - } - }; + /** + * if the recognizer can recognize simultaneous with an other recognizer + * @param {Recognizer} otherRecognizer + * @returns {Boolean} + */ + canRecognizeWith: function(otherRecognizer) { + return !!this.simultaneous[otherRecognizer.id]; + }, - /** - * Start playing - */ - Slider.prototype.play = function () { - // Test whether already playing - if (this.playTimeout) return; + /** + * 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; - this.playNext(); + function emit(withState) { + self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input); + } - if (this.frame) { - this.frame.play.value = 'Stop'; - } - }; + // 'panstart' and 'panmove' + if (state < STATE_ENDED) { + emit(true); + } - /** - * Stop playing - */ - Slider.prototype.stop = function () { - clearInterval(this.playTimeout); - this.playTimeout = undefined; + emit(); // simple 'eventName' events - if (this.frame) { - this.frame.play.value = 'Play'; - } - }; + // panend and pancancel + if (state >= STATE_ENDED) { + emit(true); + } + }, - /** - * Set a callback function which will be triggered when the value of the - * slider bar has changed. - */ - Slider.prototype.setOnChangeCallback = function (callback) { - this.onChangeCallback = callback; - }; + /** + * 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; + }, - /** - * Set the interval for playing the list - * @param {Number} interval The interval in milliseconds - */ - Slider.prototype.setPlayInterval = function (interval) { - this.playInterval = interval; - }; + /** + * 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; + }, - /** - * Retrieve the current play interval - * @return {Number} interval The interval in milliseconds - */ - Slider.prototype.getPlayInterval = function (interval) { - return this.playInterval; - }; + /** + * 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 = extend({}, 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; + } - /** - * Set looping on or off - * @pararm {boolean} doLoop If true, the slider will jump to the start when - * the end is passed, and will jump to the end - * when the start is passed. - */ - Slider.prototype.setPlayLoop = function (doLoop) { - this.playLoop = doLoop; - }; + this.state = this.process(inputDataClone); - /** - * Execute the onchange callback function - */ - Slider.prototype.onChange = function () { - if (this.onChangeCallback !== undefined) { - this.onChangeCallback(); - } - }; + // the recognizer has recognized a gesture + // so trigger an event + if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { + this.tryEmit(inputDataClone); + } + }, - /** - * redraw the slider on the correct place - */ - Slider.prototype.redraw = function () { - if (this.frame) { - // resize the bar - this.frame.bar.style.top = this.frame.clientHeight / 2 - this.frame.bar.offsetHeight / 2 + 'px'; - this.frame.bar.style.width = this.frame.clientWidth - this.frame.prev.clientWidth - this.frame.play.clientWidth - this.frame.next.clientWidth - 30 + 'px'; + /** + * 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 - // position the slider button - var left = this.indexToLeft(this.index); - this.frame.slide.style.left = left + 'px'; - } + /** + * 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() { } }; /** - * Set the list with values for the slider - * @param {Array} values A javascript array with values (any type) + * get a usable string, used as event postfix + * @param {Const} state + * @returns {String} state */ - Slider.prototype.setValues = function (values) { - this.values = values; - - if (this.values.length > 0) this.setIndex(0);else this.index = undefined; - }; + 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 ''; + } /** - * Select a value by its index - * @param {Number} index + * direction cons to string + * @param {Const} direction + * @returns {String} */ - Slider.prototype.setIndex = function (index) { - if (index < this.values.length) { - this.index = index; - - this.redraw(); - this.onChange(); - } else { - throw 'Error: index out of range'; - } - }; + 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 ''; + } /** - * retrieve the index of the currently selected vaue - * @return {Number} index + * get a recognizer by name if it is bound to a manager + * @param {Recognizer|String} otherRecognizer + * @param {Recognizer} recognizer + * @returns {Recognizer} */ - Slider.prototype.getIndex = function () { - return this.index; - }; + function getRecognizerByNameIfManager(otherRecognizer, recognizer) { + var manager = recognizer.manager; + if (manager) { + return manager.get(otherRecognizer); + } + return otherRecognizer; + } /** - * retrieve the currently selected value - * @return {*} value + * This recognizer is just used as a base for the simple attribute recognizers. + * @constructor + * @extends Recognizer */ - Slider.prototype.get = function () { - return this.values[this.index]; - }; - - Slider.prototype._onMouseDown = function (event) { - // only react on left mouse button down - var leftButtonDown = event.which ? event.which === 1 : event.button === 1; - if (!leftButtonDown) return; - - this.startClientX = event.clientX; - this.startSlideX = parseFloat(this.frame.slide.style.left); - - this.frame.style.cursor = 'move'; - - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) { - me._onMouseMove(event); - }; - this.onmouseup = function (event) { - me._onMouseUp(event); - }; - util.addEventListener(document, 'mousemove', this.onmousemove); - util.addEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; + function AttrRecognizer() { + Recognizer.apply(this, arguments); + } - Slider.prototype.leftToIndex = function (left) { - var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10; - var x = left - 3; + inherit(AttrRecognizer, Recognizer, { + /** + * @namespace + * @memberof AttrRecognizer + */ + defaults: { + /** + * @type {Number} + * @default 1 + */ + pointers: 1 + }, - var index = Math.round(x / width * (this.values.length - 1)); - if (index < 0) index = 0; - if (index > this.values.length - 1) index = this.values.length - 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; + }, - return index; - }; + /** + * 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; - Slider.prototype.indexToLeft = function (index) { - var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10; + var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); + var isValid = this.attrTest(input); - var x = index / (this.values.length - 1) * width; - var left = x + 3; + // 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; + } + return STATE_FAILED; + } + }); - return left; - }; + /** + * Pan + * Recognized when the pointer is down and moved in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ + function PanRecognizer() { + AttrRecognizer.apply(this, arguments); - Slider.prototype._onMouseMove = function (event) { - var diff = event.clientX - this.startClientX; - var x = this.startSlideX + diff; + this.pX = null; + this.pY = null; + } - var index = this.leftToIndex(x); + inherit(PanRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PanRecognizer + */ + defaults: { + event: 'pan', + threshold: 10, + pointers: 1, + direction: DIRECTION_ALL + }, - this.setIndex(index); + 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); + } + return actions; + }, - util.preventDefault(); - }; + 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; - Slider.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; + // 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; + }, - // remove event listeners - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); + attrTest: function(input) { + return AttrRecognizer.prototype.attrTest.call(this, input) && + (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); + }, - util.preventDefault(); - }; + emit: function(input) { + this.pX = input.deltaX; + this.pY = input.deltaY; - module.exports = Slider; + var direction = directionStr(input.direction); + if (direction) { + this.manager.emit(this.options.event + direction, input); + } -/***/ }, -/* 24 */ -/***/ function(module, exports) { + this._super.emit.call(this, input); + } + }); /** - * @prototype StepNumber - * The class StepNumber is an iterator for Numbers. You provide a start and end - * value, and a best step size. StepNumber itself rounds to fixed values and - * a finds the step that best fits the provided step. - * - * If prettyStep is true, the step size is chosen as close as possible to the - * provided step, but being a round value like 1, 2, 5, 10, 20, 50, .... - * - * Example usage: - * var step = new StepNumber(0, 10, 2.5, true); - * step.start(); - * while (!step.end()) { - * alert(step.getCurrent()); - * step.next(); - * } - * - * Version: 1.0 - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) + * Pinch + * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). + * @constructor + * @extends AttrRecognizer */ - "use strict"; + function PinchRecognizer() { + AttrRecognizer.apply(this, arguments); + } - function StepNumber(start, end, step, prettyStep) { - // set default values - this._start = 0; - this._end = 0; - this._step = 1; - this.prettyStep = true; - this.precision = 5; + inherit(PinchRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'pinch', + threshold: 0, + pointers: 2 + }, - this._current = 0; - this.setRange(start, end, step, prettyStep); - }; + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, - /** - * Set a new range: start, end and step. - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - StepNumber.prototype.setRange = function (start, end, step, prettyStep) { - this._start = start ? start : 0; - this._end = end ? end : 0; + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); + }, - this.setStep(step, prettyStep); - }; + emit: function(input) { + this._super.emit.call(this, input); + if (input.scale !== 1) { + var inOut = input.scale < 1 ? 'in' : 'out'; + this.manager.emit(this.options.event + inOut, input); + } + } + }); /** - * Set a new step size - * @param {Number} step New step size. Must be a positive value - * @param {boolean} prettyStep Optional. If true, the provided step is rounded - * to a pretty step size (like 1, 2, 5, 10, 20, 50, ...) + * Press + * Recognized when the pointer is down for x ms without any movement. + * @constructor + * @extends Recognizer */ - StepNumber.prototype.setStep = function (step, prettyStep) { - if (step === undefined || step <= 0) return; + function PressRecognizer() { + Recognizer.apply(this, arguments); - if (prettyStep !== undefined) this.prettyStep = prettyStep; + this._timer = null; + this._input = null; + } - if (this.prettyStep === true) this._step = StepNumber.calculatePrettyStep(step);else this._step = step; - }; + inherit(PressRecognizer, Recognizer, { + /** + * @namespace + * @memberof PressRecognizer + */ + defaults: { + event: 'press', + pointers: 1, + time: 500, // minimal time of the pointer to be pressed + threshold: 5 // a minimal movement is ok, but keep it low + }, - /** - * Calculate a nice step size, closest to the desired step size. - * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an - * integer Number. For example 1, 2, 5, 10, 20, 50, etc... - * @param {Number} step Desired step size - * @return {Number} Nice step size - */ - StepNumber.calculatePrettyStep = function (step) { - var log10 = function log10(x) { - return Math.log(x) / Math.LN10; - }; + getTouchAction: function() { + return [TOUCH_ACTION_AUTO]; + }, - // try three steps (multiple of 1, 2, or 5 - var step1 = Math.pow(10, Math.round(log10(step))), - step2 = 2 * Math.pow(10, Math.round(log10(step / 2))), - step5 = 5 * Math.pow(10, Math.round(log10(step / 5))); + 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; - // choose the best step (closest to minimum step) - var prettyStep = step1; - if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2; - if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5; + this._input = input; - // for safety - if (prettyStep <= 0) { - prettyStep = 1; - } + // 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; + }, - return prettyStep; - }; + reset: function() { + clearTimeout(this._timer); + }, - /** - * returns the current value of the step - * @return {Number} current value - */ - StepNumber.prototype.getCurrent = function () { - return parseFloat(this._current.toPrecision(this.precision)); - }; + 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); + } + } + }); /** - * returns the current step size - * @return {Number} current step size + * Rotate + * Recognized when two or more pointer are moving in a circular motion. + * @constructor + * @extends AttrRecognizer */ - StepNumber.prototype.getStep = function () { - return this._step; - }; + function RotateRecognizer() { + AttrRecognizer.apply(this, arguments); + } + + inherit(RotateRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof RotateRecognizer + */ + defaults: { + event: 'rotate', + threshold: 0, + pointers: 2 + }, + + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, - /** - * Set the current value to the largest value smaller than start, which - * is a multiple of the step size - */ - StepNumber.prototype.start = function () { - this._current = this._start - this._start % this._step; - }; + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); + } + }); /** - * Do a step, add the step size to the current value + * Swipe + * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. + * @constructor + * @extends AttrRecognizer */ - StepNumber.prototype.next = function () { - this._current += this._step; - }; + function SwipeRecognizer() { + AttrRecognizer.apply(this, arguments); + } - /** - * Returns true whether the end is reached - * @return {boolean} True if the current value has passed the end value. - */ - StepNumber.prototype.end = function () { - return this._current > this._end; - }; + inherit(SwipeRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof SwipeRecognizer + */ + defaults: { + event: 'swipe', + threshold: 10, + velocity: 0.65, + direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, + pointers: 1 + }, - module.exports = StepNumber; + getTouchAction: function() { + return PanRecognizer.prototype.getTouchAction.call(this); + }, -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { + attrTest: function(input) { + var direction = this.options.direction; + var velocity; - 'use strict'; + if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { + velocity = input.velocity; + } else if (direction & DIRECTION_HORIZONTAL) { + velocity = input.velocityX; + } else if (direction & DIRECTION_VERTICAL) { + velocity = input.velocityY; + } - var Emitter = __webpack_require__(19); - var Hammer = __webpack_require__(3); - var moment = __webpack_require__(8); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var Range = __webpack_require__(26); - var Core = __webpack_require__(30); - var TimeAxis = __webpack_require__(39); - var CurrentTime = __webpack_require__(44); - var CustomTime = __webpack_require__(42); - var ItemSet = __webpack_require__(31); + return this._super.attrTest.call(this, input) && + direction & input.direction && + input.distance > this.options.threshold && + abs(velocity) > this.options.velocity && input.eventType & INPUT_END; + }, - var Configurator = __webpack_require__(45); - var Validator = __webpack_require__(47)['default']; - var printStyle = __webpack_require__(47).printStyle; - var allOptions = __webpack_require__(48).allOptions; - var configureOptions = __webpack_require__(48).configureOptions; + emit: function(input) { + var direction = directionStr(input.direction); + if (direction) { + this.manager.emit(this.options.event + direction, input); + } + + this.manager.emit(this.options.event, input); + } + }); /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | vis.DataView | Array} [items] - * @param {vis.DataSet | vis.DataView | Array} [groups] - * @param {Object} [options] See Timeline.setOptions for the available options. + * 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 Core + * @extends Recognizer */ - function Timeline(container, items, groups, options) { - if (!(this instanceof Timeline)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - // if the third element is options, the forth is groups (optionally); - if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) { - var forthArgument = options; - options = groups; - groups = forthArgument; - } + function TapRecognizer() { + Recognizer.apply(this, arguments); - var me = this; - this.defaultOptions = { - start: null, - end: null, + // previous time and center, + // used for tap counting + this.pTime = false; + this.pCenter = false; - autoResize: true, + this._timer = null; + this._input = null; + this.count = 0; + } - orientation: { - axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both' - item: 'bottom' // not relevant + 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: 2, // a minimal movement is ok, but keep it low + posThreshold: 10 // a multi-tap can be a bit off the initial position }, - moment: moment, - - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); - - // Create the DOM, props, and emitter - this._create(container); + getTouchAction: function() { + return [TOUCH_ACTION_MANIPULATION]; + }, - // all components listed here will be repainted automatically - this.components = []; + process: function(input) { + var options = this.options; - 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 getScale() { - return me.timeAxis.step.scale; - }, - getStep: function getStep() { - return me.timeAxis.step.step; - }, + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTouchTime = input.deltaTime < options.time; - toScreen: me._toScreen.bind(me), - toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width - toTime: me._toTime.bind(me), - toGlobalTime: me._toGlobalTime.bind(me) - } - }; + this.reset(); - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; + if ((input.eventType & INPUT_START) && (this.count === 0)) { + return this.failTimeout(); + } - // time axis - this.timeAxis = new TimeAxis(this.body); - this.timeAxis2 = null; // used in case of orientation option 'both' - this.components.push(this.timeAxis); + // 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(); + } - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); + var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; + var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; - // item set - this.itemSet = new ItemSet(this.body); - this.components.push(this.itemSet); + this.pTime = input.timeStamp; + this.pCenter = input.center; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + if (!validMultiTap || !validInterval) { + this.count = 1; + } else { + this.count += 1; + } - this.on('tap', function (event) { - me.emit('click', me.getEventProperties(event)); - }); - this.on('doubletap', function (event) { - me.emit('doubleClick', me.getEventProperties(event)); - }); - this.dom.root.oncontextmenu = function (event) { - me.emit('contextmenu', me.getEventProperties(event)); - }; + this._input = input; - // apply options - if (options) { - this.setOptions(options); - } + // 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; + }, - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } + failTimeout: function() { + this._timer = setTimeoutContext(function() { + this.state = STATE_FAILED; + }, this.options.interval, this); + return STATE_FAILED; + }, - // create itemset - if (items) { - this.setItems(items); - } else { - this._redraw(); - } - } + reset: function() { + clearTimeout(this._timer); + }, - // Extend the functionality from Core - Timeline.prototype = new Core(); + emit: function() { + if (this.state == STATE_RECOGNIZED ) { + this._input.tapCount = this.count; + this.manager.emit(this.options.event, this._input); + } + } + }); /** - * Load a configurator - * @return {Object} - * @private + * Simple way to create an manager with a default set of recognizers. + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor */ - Timeline.prototype._createConfigurator = function () { - return new Configurator(this, this.dom.container, configureOptions); - }; + function Hammer(element, options) { + options = options || {}; + options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); + return new Manager(element, options); + } /** - * Force a redraw. The size of all items will be recalculated. - * Can be useful to manually redraw when option autoResize=false and the window - * has been resized, or when the items CSS has been changed. + * @const {string} */ - Timeline.prototype.redraw = function () { - this.itemSet && this.itemSet.markDirty({ refreshItems: true }); - this._redraw(); - }; - - Timeline.prototype.setOptions = function (options) { - // validate options - var errorFound = Validator.validate(options, allOptions); - if (errorFound === true) { - console.log('%cErrors have been found in the supplied options object.', printStyle); - } - - Core.prototype.setOptions.call(this, options); - - if ('type' in options) { - if (options.type !== this.options.type) { - this.options.type = options.type; - - // force recreation of all items - var itemsData = this.itemsData; - if (itemsData) { - var selection = this.getSelection(); - this.setItems(null); // remove all - this.setItems(itemsData); // add all - this.setSelection(selection); // restore selection - } - } - } - }; + Hammer.VERSION = '2.0.4'; /** - * Set items - * @param {vis.DataSet | Array | null} items + * default settings + * @namespace */ - Timeline.prototype.setItems = function (items) { - var initialLoad = this.itemsData == null; + 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, - // convert to type DataSet when needed - var newDataSet; - if (!items) { - newDataSet = null; - } else if (items instanceof DataSet || items instanceof DataView) { - newDataSet = items; - } else { - // turn an array into a dataset - newDataSet = new DataSet(items, { - type: { - start: 'Date', - end: 'Date' - } - }); - } + /** + * 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, - // set items - this.itemsData = newDataSet; - this.itemSet && this.itemSet.setItems(newDataSet); + /** + * @type {Boolean} + * @default true + */ + enable: true, - if (initialLoad) { - if (this.options.start != undefined || this.options.end != undefined) { - if (this.options.start == undefined || this.options.end == undefined) { - var range = this.getItemRange(); - } + /** + * 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, - var start = this.options.start != undefined ? this.options.start : range.min; - var end = this.options.end != undefined ? this.options.end : range.max; + /** + * force an input class + * @type {Null|Function} + * @default null + */ + inputClass: null, - this.setWindow(start, end, { animation: false }); - } else { - this.fit({ animation: false }); - } - } - }; + /** + * 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] + ], - /** - * Set groups - * @param {vis.DataSet | Array} groups - */ - Timeline.prototype.setGroups = function (groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } else { - // turn an array into a dataset - newDataSet = new DataSet(groups); - } + /** + * 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', - this.groupsData = newDataSet; - this.itemSet.setGroups(newDataSet); - }; + /** + * Disable the Windows Phone grippers when pressing an element. + * @type {String} + * @default 'none' + */ + touchSelect: 'none', - /** - * Set both items and groups in one go - * @param {{items: Array | vis.DataSet, groups: Array | vis.DataSet}} data - */ - Timeline.prototype.setData = function (data) { - if (data && data.groups) { - this.setGroups(data.groups); - } + /** + * 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', - if (data && data.items) { - this.setItems(data.items); - } - }; + /** + * Specifies whether zooming is enabled. Used by IE10> + * @type {String} + * @default 'none' + */ + contentZooming: 'none', - /** - * 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. If ids is an empty array, all items will be - * unselected. - * @param {Object} [options] Available options: - * `focus: boolean` - * If true, focus will be set to the selected item(s) - * `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'. - * Only applicable when option focus is true. - */ - Timeline.prototype.setSelection = function (ids, options) { - this.itemSet && this.itemSet.setSelection(ids); + /** + * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userDrag: 'none', - if (options && options.focus) { - this.focus(ids, options); - } + /** + * 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)' + } }; - /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - Timeline.prototype.getSelection = function () { - return this.itemSet && this.itemSet.getSelection() || []; - }; + var STOP = 1; + var FORCED_STOP = 2; /** - * Adjust the visible window such that the selected item (or multiple items) - * are centered on screen. - * @param {String | String[]} id An item id or array with item ids - * @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'. + * Manager + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor */ - Timeline.prototype.focus = function (id, options) { - if (!this.itemsData || id == undefined) return; + function Manager(element, options) { + options = options || {}; - var ids = Array.isArray(id) ? id : [id]; + this.options = merge(options, Hammer.defaults); + this.options.inputTarget = this.options.inputTarget || element; - // get the specified item(s) - var itemsData = this.itemsData.getDataSet().get(ids, { - type: { - start: 'Date', - end: 'Date' - } - }); + this.handlers = {}; + this.session = {}; + this.recognizers = []; - // calculate minimum start and maximum end of specified items - var start = null; - var end = null; - itemsData.forEach(function (itemData) { - var s = itemData.start.valueOf(); - var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf(); + this.element = element; + this.input = createInputInstance(this); + this.touchAction = new TouchAction(this, this.options.touchAction); - if (start === null || s < start) { - start = s; - } + toggleCssProps(this, true); - if (end === null || e > end) { - end = e; - } - }); + each(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); + } - if (start !== null && end !== null) { - // calculate the new middle and interval for the window - var middle = (start + end) / 2; - var interval = Math.max(this.range.end - this.range.start, (end - start) * 1.1); + Manager.prototype = { + /** + * set options + * @param {Object} options + * @returns {Manager} + */ + set: function(options) { + extend(this.options, options); - var animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(middle - interval / 2, middle + interval / 2, animation); - } - }; + // 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; + }, - /** - * Set Timeline 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'. - */ - Timeline.prototype.fit = function (options) { - var animation = options && options.animation !== undefined ? options.animation : true; - var range = this.getItemRange(); - this.range.setRange(range.min, range.max, animation); - }; + /** + * 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; + }, - /** - * Determine the range of the items, taking into account their actual width - * and a margin of 10 pixels on both sides. - * @return {{min: Date | null, max: Date | null}} - */ - Timeline.prototype.getItemRange = function () { - var _this = this; + /** + * 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; + } - // get a rough approximation for the range based on the items start and end dates - var range = this.getDataRange(); - var min = range.min; - var max = range.max; - var minItem = null; - var maxItem = null; + // run the touch-action polyfill + this.touchAction.preventDefaults(inputData); - if (min != null && max != null) { - var interval; - var factor; - var lhs; - var rhs; - var delta; + var recognizer; + var recognizers = this.recognizers; - (function () { - var getStart = function getStart(item) { - return util.convert(item.data.start, 'Date').valueOf(); - }; + // 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; - var getEnd = function getEnd(item) { - var end = item.data.end != undefined ? item.data.end : item.data.start; - return util.convert(end, 'Date').valueOf(); - }; + // 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; + } - interval = max - min; - // ms - if (interval <= 0) { - interval = 10; - } - factor = interval / _this.props.center.width; + var i = 0; + while (i < recognizers.length) { + recognizer = recognizers[i]; - // calculate the date of the left side and right side of the items given - util.forEach(_this.itemSet.items, (function (item) { - item.show(); + // 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 start = getStart(item); - var end = getEnd(item); + // 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 left = new Date(start - (item.getWidthLeft() + 10) * factor); - var right = new Date(end + (item.getWidthRight() + 10) * factor); + /** + * get a recognizer by its event name. + * @param {Recognizer|String} recognizer + * @returns {Recognizer|Null} + */ + get: function(recognizer) { + if (recognizer instanceof Recognizer) { + return recognizer; + } - if (left < min) { - min = left; - minItem = item; + var recognizers = this.recognizers; + for (var i = 0; i < recognizers.length; i++) { + if (recognizers[i].options.event == recognizer) { + return recognizers[i]; + } } - if (right > max) { - max = right; - maxItem = item; + return null; + }, + + /** + * 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; } - }).bind(_this)); - if (minItem && maxItem) { - lhs = minItem.getWidthLeft() + 10; - rhs = maxItem.getWidthRight() + 10; - delta = _this.props.center.width - lhs - rhs; - // px + // remove existing + var existing = this.get(recognizer.options.event); + if (existing) { + this.remove(existing); + } - if (delta > 0) { - min = getStart(minItem) - lhs * interval / delta; // ms - max = getEnd(maxItem) + rhs * interval / delta; // ms + this.recognizers.push(recognizer); + recognizer.manager = this; + + this.touchAction.update(); + return recognizer; + }, + + /** + * remove a recognizer by name or instance + * @param {Recognizer|String} recognizer + * @returns {Manager} + */ + remove: function(recognizer) { + if (invokeArrayArg(recognizer, 'remove', this)) { + return this; } - } - })(); - } - return { - min: min != null ? new Date(min) : null, - max: max != null ? new Date(max) : null - }; + var recognizers = this.recognizers; + recognizer = this.get(recognizer); + recognizers.splice(inArray(recognizers, recognizer), 1); + + this.touchAction.update(); + return this; + }, + + /** + * 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; + }, + + /** + * 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].splice(inArray(handlers[event], handler), 1); + } + }); + return this; + }, + + /** + * 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 handlers, so skip it all + var handlers = this.handlers[event] && this.handlers[event].slice(); + if (!handlers || !handlers.length) { + return; + } + + data.type = event; + data.preventDefault = function() { + data.srcEvent.preventDefault(); + }; + + 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; + } }; /** - * Calculate the data range of the items start and end dates - * @returns {{min: Date | null, max: Date | null}} + * add/remove the css properties as defined in manager.options.cssProps + * @param {Manager} manager + * @param {Boolean} add */ - Timeline.prototype.getDataRange = function () { - var min = null; - var max = null; - - var dataset = this.itemsData && this.itemsData.getDataSet(); - if (dataset) { - dataset.forEach(function (item) { - var start = util.convert(item.start, 'Date').valueOf(); - var end = util.convert(item.end != undefined ? item.end : item.start, 'Date').valueOf(); - if (min === null || start < min) { - min = start; - } - if (max === null || end > max) { - max = start; - } + function toggleCssProps(manager, add) { + var element = manager.element; + each(manager.options.cssProps, function(value, name) { + element.style[prefixed(element.style, name)] = add ? value : ''; }); - } - - return { - min: min != null ? new Date(min) : null, - max: max != null ? new Date(max) : null - }; - }; + } /** - * Generate Timeline related information from an event - * @param {Event} event - * @return {Object} An object with related information, like on which area - * The event happened, whether clicked on an item, etc. + * trigger dom event + * @param {String} event + * @param {Object} data */ - Timeline.prototype.getEventProperties = function (event) { - var clientX = event.center ? event.center.x : event.clientX; - var clientY = event.center ? event.center.y : event.clientY; - var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer); - var y = clientY - util.getAbsoluteTop(this.dom.centerContainer); + function triggerDomEvent(event, data) { + var gestureEvent = document.createEvent('Event'); + gestureEvent.initEvent(event, true, true); + gestureEvent.gesture = data; + data.target.dispatchEvent(gestureEvent); + } - var item = this.itemSet.itemFromTarget(event); - var group = this.itemSet.groupFromTarget(event); - var customTime = CustomTime.customTimeFromTarget(event); + extend(Hammer, { + INPUT_START: INPUT_START, + INPUT_MOVE: INPUT_MOVE, + INPUT_END: INPUT_END, + INPUT_CANCEL: INPUT_CANCEL, - var snap = this.itemSet.options.snap || null; - var scale = this.body.util.getScale(); - var step = this.body.util.getStep(); - var time = this._toTime(x); - var snappedTime = snap ? snap(time, scale, step) : time; + 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, - var element = util.getTarget(event); - var what = null; - if (item != null) { - what = 'item'; - } else if (customTime != null) { - what = 'custom-time'; - } else if (util.hasParent(element, this.timeAxis.dom.foreground)) { - what = 'axis'; - } else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) { - what = 'axis'; - } else if (util.hasParent(element, this.itemSet.dom.labelSet)) { - what = 'group-label'; - } else if (util.hasParent(element, this.currentTime.bar)) { - what = 'current-time'; - } else if (util.hasParent(element, this.dom.center)) { - what = 'background'; - } + 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, - return { - event: event, - item: item ? item.id : null, - group: group ? group.groupId : null, - what: what, - pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX, - pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY, - x: x, - y: y, - time: time, - snappedTime: snappedTime - }; - }; + Manager: Manager, + Input: Input, + TouchAction: TouchAction, + + TouchInput: TouchInput, + MouseInput: MouseInput, + PointerEventInput: PointerEventInput, + TouchMouseInput: TouchMouseInput, + SingleTouchInput: SingleTouchInput, + + Recognizer: Recognizer, + AttrRecognizer: AttrRecognizer, + Tap: TapRecognizer, + Pan: PanRecognizer, + Swipe: SwipeRecognizer, + Pinch: PinchRecognizer, + Rotate: RotateRecognizer, + Press: PressRecognizer, + + on: addEventListeners, + off: removeEventListeners, + each: each, + merge: merge, + extend: extend, + inherit: inherit, + bindFn: bindFn, + prefixed: prefixed + }); + + if ("function" == TYPE_FUNCTION && __webpack_require__(23)) { + !(__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; + } + + })(window, document, 'Hammer'); - module.exports = Timeline; /***/ }, -/* 26 */ +/* 23 */ +/***/ function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; + + /* WEBPACK VAR INJECTION */}.call(exports, {})) + +/***/ }, +/* 24 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(7); - var hammerUtil = __webpack_require__(27); - var moment = __webpack_require__(8); - var Component = __webpack_require__(28); - var DateUtil = __webpack_require__(29); + var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(25); + var moment = __webpack_require__(2); + var Component = __webpack_require__(26); + var DateUtil = __webpack_require__(27); /** * @constructor Range @@ -14446,12 +13964,12 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Range; /***/ }, -/* 27 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(3); + var Hammer = __webpack_require__(20); /** * Register a touch event, taking place before a gesture @@ -14518,7 +14036,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.offRelease = exports.offTouch; /***/ }, -/* 28 */ +/* 26 */ /***/ function(module, exports) { /** @@ -14578,7 +14096,7 @@ return /******/ (function(modules) { // webpackBootstrap // should be implemented by the component /***/ }, -/* 29 */ +/* 27 */ /***/ function(module, exports) { @@ -15042,22 +14560,22 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 30 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Emitter = __webpack_require__(19); - var Hammer = __webpack_require__(3); - var hammerUtil = __webpack_require__(27); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var Range = __webpack_require__(26); - var ItemSet = __webpack_require__(31); + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(20); + var hammerUtil = __webpack_require__(25); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var Range = __webpack_require__(24); + var ItemSet = __webpack_require__(29); var TimeAxis = __webpack_require__(39); var Activator = __webpack_require__(40); - var DateUtil = __webpack_require__(29); + var DateUtil = __webpack_require__(27); var CustomTime = __webpack_require__(42); /** @@ -15139,7 +14657,9 @@ return /******/ (function(modules) { // webpackBootstrap this.dom.rightContainer.appendChild(this.dom.shadowTopRight); this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - this.on('rangechange', this.redraw.bind(this)); + this.on('rangechange', (function () { + this._redraw(); // this allows overriding the _redraw method + }).bind(this)); this.on('touch', this._onTouch.bind(this)); this.on('pan', this._onDrag.bind(this)); @@ -15258,7 +14778,7 @@ return /******/ (function(modules) { // webpackBootstrap Core.prototype.setOptions = function (options) { if (options) { // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment']; + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment', 'throttleRedraw']; util.selectiveExtend(fields, this.options, options); if ('orientation' in options) { @@ -15298,2400 +14818,3325 @@ return /******/ (function(modules) { // webpackBootstrap } } - // if the graph2d's drawPoints is a function delegate the callback to the onRender property - if (typeof options.drawPoints == 'function') { - options.drawPoints = { - onRender: options.drawPoints - }; - } + // if the graph2d's drawPoints is a function delegate the callback to the onRender property + if (typeof options.drawPoints == 'function') { + options.drawPoints = { + onRender: options.drawPoints + }; + } + + if ('hiddenDates' in this.options) { + DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates); + } + + 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; + } + } + } + + if ('showCustomTime' in options) { + throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); + } + + // enable/disable autoResize + this._initAutoResize(); + } + + // propagate options to all components + this.components.forEach(function (component) { + return component.setOptions(options); + }); + + // 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); + + // redraw everything + this._redraw(); + }; + + /** + * Returns true when the Timeline is active. + * @returns {boolean} + */ + Core.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; + + /** + * Destroy the Core, clean up all DOM elements and event listeners. + */ + Core.prototype.destroy = function () { + // unbind datasets + this.setItems(null); + this.setGroups(null); + + // remove all event listeners + this.off(); + + // stop checking for changed size + this._stopAutoResize(); + + // remove from DOM + if (this.dom.root.parentNode) { + this.dom.root.parentNode.removeChild(this.dom.root); + } + this.dom = null; + + // remove Activator + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } + + // cleanup hammer touch events + for (var event in this.listeners) { + if (this.listeners.hasOwnProperty(event)) { + delete this.listeners[event]; + } + } + this.listeners = null; + this.hammer = null; + + // give all components the opportunity to cleanup + this.components.forEach(function (component) { + return component.destroy(); + }); + + this.body = null; + }; + + /** + * 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; + }); + + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + } + + if (customTimes.length > 0) { + customTimes[0].setCustomTime(time); + } + }; + + /** + * 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; + }); + + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + } + return customTimes[0].getCustomTime(); + }; + + /** + * 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 }; + }; + + /** + * 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(); + + 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'); + } + + var customTime = new CustomTime(this.body, util.extend({}, this.options, { + time: timestamp, + id: id + })); + + this.customTimes.push(customTime); + this.components.push(customTime); + this._redraw(); + + return id; + }; + + /** + * 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; + }); + + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + } + + customTimes.forEach((function (customTime) { + this.customTimes.splice(this.customTimes.indexOf(customTime), 1); + this.components.splice(this.components.indexOf(customTime), 1); + customTime.destroy(); + }).bind(this)); + }; + + /** + * 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() || []; + }; + + /** + * 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(); + + // skip range set if there is no min and max date + if (range.min === null && range.max === null) { + return; + } + + // 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); + + var animation = options && options.animation !== undefined ? options.animation : true; + this.range.setRange(min, max, animation); + }; + + /** + * 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'); + }; + + /** + * 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); + } + }; + + /** + * 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(); + + 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); + }; + + /** + * 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) + }; + }; + + /** + * Force a redraw. Can be overridden by implementations of Core + * + * Note: this function will be overridden on construction with a trottled version + */ + Core.prototype.redraw = function () { + this._redraw(); + }; + + /** + * Redraw for internal use. Redraws all components. See also the public + * method redraw. + * @protected + */ + Core.prototype._redraw = function () { + var resized = false; + var options = this.options; + var props = this.props; + var dom = this.dom; + + if (!dom) return; // when destroyed + + 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'); + } + + // 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, ''); + + // 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; + } + + // 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'; + + // 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(); - if ('hiddenDates' in this.options) { - DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates); - } + // 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 ('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; - } - } - } + // 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; - if ('showCustomTime' in options) { - throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); + // redraw all components + this.components.forEach(function (component) { + resized = component.redraw() || resized; + }); + if (resized) { + // keep repainting until all sizes are settled + var MAX_REDRAWS = 3; // maximum number of consecutive redraws + if (this.redrawCount < MAX_REDRAWS) { + this.redrawCount++; + this._redraw(); + } else { + console.log('WARNING: infinite loop in redraw?'); } - - // enable/disable autoResize - this._initAutoResize(); + this.redrawCount = 0; } + }; - // propagate options to all components - this.components.forEach(function (component) { - return component.setOptions(options); - }); + // TODO: deprecated since version 1.1.0, remove some day + Core.prototype.repaint = function () { + throw new Error('Function repaint is deprecated. Use redraw instead.'); + }; - // enable/disable configure - if ('configure' in options) { - if (!this.configurator) { - this.configurator = this._createConfigurator(); - } + /** + * 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. + */ + Core.prototype.setCurrentTime = function (time) { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); + } - this.configurator.setOptions(options.configure); + this.currentTime.setCurrentTime(time); + }; - // 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 }); + /** + * 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'); } - // redraw everything - this._redraw(); + return this.currentTime.getCurrentTime(); }; /** - * Returns true when the Timeline is active. - * @returns {boolean} + * 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 */ - Core.prototype.isActive = function () { - return !this.activator || this.activator.active; + // TODO: move this function to Range + Core.prototype._toTime = function (x) { + return DateUtil.toTime(this, x, this.props.center.width); }; /** - * Destroy the Core, clean up all DOM elements and event listeners. + * 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 */ - Core.prototype.destroy = function () { - // unbind datasets - this.setItems(null); - this.setGroups(null); + // 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); + }; - // remove all event listeners - this.off(); + /** + * 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 + */ + // TODO: move this function to Range + Core.prototype._toScreen = function (time) { + return DateUtil.toScreen(this, time, this.props.center.width); + }; - // stop checking for changed size - this._stopAutoResize(); + /** + * 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; + }; - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); + /** + * Initialize watching when option autoResize is true + * @private + */ + Core.prototype._initAutoResize = function () { + if (this.options.autoResize == true) { + this._startAutoResize(); + } else { + this._stopAutoResize(); } - this.dom = null; + }; - // remove Activator - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } + /** + * 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; - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; + this._stopAutoResize(); + + this._onResize = function () { + if (me.options.autoResize != true) { + // stop watching when the option autoResize is changed to false + me._stopAutoResize(); + return; } - } - this.listeners = null; - this.hammer = null; - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - return component.destroy(); - }); + 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; - this.body = null; + me.emit('change'); + } + } + }; + + // add event listener to window resize + util.addEventListener(window, 'resize', this._onResize); + + this.watchTimer = setInterval(this._onResize, 1000); }; /** - * Set a custom time bar - * @param {Date} time - * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted. + * Stop watching for a resize of the frame. + * @private */ - Core.prototype.setCustomTime = function (time, id) { - var customTimes = this.customTimes.filter(function (component) { - return id === component.options.id; - }); - - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + Core.prototype._stopAutoResize = function () { + if (this.watchTimer) { + clearInterval(this.watchTimer); + this.watchTimer = undefined; } - if (customTimes.length > 0) { - customTimes[0].setCustomTime(time); + // remove event listener on window.resize + if (this._onResize) { + util.removeEventListener(window, 'resize', this._onResize); + this._onResize = null; } }; /** - * Retrieve the current custom time. - * @param {number} [id=undefined] Id of the custom time bar. - * @return {Date | undefined} customTime + * Start moving the timeline vertically + * @param {Event} event + * @private */ - Core.prototype.getCustomTime = function (id) { - var customTimes = this.customTimes.filter(function (component) { - return component.options.id === id; - }); - - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); - } - return customTimes[0].getCustomTime(); + Core.prototype._onTouch = function (event) { + this.touch.allowDragging = true; + this.touch.initialScrollTop = this.props.scrollTop; }; /** - * Retrieve meta information from an event. - * Should be overridden by classes extending Core + * Start moving the timeline vertically * @param {Event} event - * @return {Object} An object with related information. + * @private */ - Core.prototype.getEventProperties = function (event) { - return { event: event }; + Core.prototype._onPinch = function (event) { + this.touch.allowDragging = false; }; /** - * 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 + * Move the timeline vertically + * @param {Event} event + * @private */ - Core.prototype.addCustomTime = function (time, id) { - var timestamp = time !== undefined ? util.convert(time, 'Date').valueOf() : new Date(); - - 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'); - } + 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; - var customTime = new CustomTime(this.body, util.extend({}, this.options, { - time: timestamp, - id: id - })); + var delta = event.deltaY; - this.customTimes.push(customTime); - this.components.push(customTime); - this.redraw(); + var oldScrollTop = this._getScrollTop(); + var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); - return id; + if (newScrollTop != oldScrollTop) { + this._redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already + this.emit('verticalDrag'); + } }; /** - * 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 + * Apply a scrollTop + * @param {Number} scrollTop + * @returns {Number} scrollTop Returns the applied scrollTop + * @private */ - Core.prototype.removeCustomTime = function (id) { - var customTimes = this.customTimes.filter(function (bar) { - return bar.options.id === id; - }); + Core.prototype._setScrollTop = function (scrollTop) { + this.props.scrollTop = scrollTop; + this._updateScrollTop(); + return this.props.scrollTop; + }; - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + JSON.stringify(id)); + /** + * 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; } - customTimes.forEach((function (customTime) { - this.customTimes.splice(this.customTimes.indexOf(customTime), 1); - this.components.splice(this.components.indexOf(customTime), 1); - customTime.destroy(); - }).bind(this)); + // limit the scrollTop to the feasible scroll range + if (this.props.scrollTop > 0) this.props.scrollTop = 0; + if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + + return this.props.scrollTop; }; /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * Get the current scrollTop + * @returns {number} scrollTop + * @private */ - Core.prototype.getVisibleItems = function () { - return this.itemSet && this.itemSet.getVisibleItems() || []; + Core.prototype._getScrollTop = function () { + return this.props.scrollTop; }; /** - * 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'. + * Load a configurator + * @return {Object} + * @private */ - Core.prototype.fit = function (options) { - var range = this.getDataRange(); + Core.prototype._createConfigurator = function () { + throw new Error('Cannot invoke abstract method _createConfigurator'); + }; - // skip range set if there is no min and max date - if (range.min === null && range.max === null) { - return; - } + module.exports = Core; - // 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); +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { - var animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(min, max, animation); - }; + 'use strict'; + + var Hammer = __webpack_require__(20); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var TimeStep = __webpack_require__(30); + var Component = __webpack_require__(26); + var Group = __webpack_require__(31); + var BackgroundGroup = __webpack_require__(35); + var BoxItem = __webpack_require__(36); + var PointItem = __webpack_require__(37); + var RangeItem = __webpack_require__(33); + var BackgroundItem = __webpack_require__(38); + + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + var BACKGROUND = '__background__'; // reserved group id for background items without group + + /** + * 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; + + 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, + + 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 + } + }; + + // 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.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); + } + }; - /** - * 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'); - }; + this.items = {}; // object with an Item for every data item + this.groups = {}; // Group object for every group + this.groupIds = []; - /** - * 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); - } - }; + this.selection = []; // list with the ids of all selected nodes + this.stackDirty = true; // if true, all items will be restacked on next redraw - /** - * 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(); + this.touchParams = {}; // stores properties while dragging + this.groupTouchParams = {}; + // create the HTML DOM - var start = t - interval / 2; - var end = t + interval / 2; - var animation = options && options.animation !== undefined ? options.animation : true; + this._create(); - this.range.setRange(start, end, animation); - }; + this.setOptions(options); + } - /** - * 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) - }; - }; + ItemSet.prototype = new Component(); - /** - * Force a redraw. Can be overridden by implementations of Core - */ - Core.prototype.redraw = function () { - this._redraw(); + // available item types will be registered here + ItemSet.types = { + background: BackgroundItem, + box: BoxItem, + range: RangeItem, + point: PointItem }; /** - * Redraw for internal use. Redraws all components. See also the public - * method redraw. - * @protected + * Create the HTML DOM for the ItemSet */ - Core.prototype._redraw = function () { - var resized = false; - var options = this.options; - var props = this.props; - var dom = this.dom; + ItemSet.prototype._create = function () { + var frame = document.createElement('div'); + frame.className = 'vis-itemset'; + frame['timeline-itemset'] = this; + this.dom.frame = frame; - if (!dom) return; // when destroyed + // create background panel + var background = document.createElement('div'); + background.className = 'vis-background'; + frame.appendChild(background); + this.dom.background = background; - DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + // create foreground panel + var foreground = document.createElement('div'); + foreground.className = 'vis-foreground'; + frame.appendChild(foreground); + this.dom.foreground = foreground; - // 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'); - } + // create axis panel + var axis = document.createElement('div'); + axis.className = 'vis-axis'; + this.dom.axis = axis; - // 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, ''); + // create labelset + var labelSet = document.createElement('div'); + labelSet.className = 'vis-labelset'; + this.dom.labelSet = labelSet; - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + // create ungrouped Group + this._updateUngrouped(); - // 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; - } + // create background Group + var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); + backgroundGroup.show(); + this.groups[BACKGROUND] = backgroundGroup; - // 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; + // 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); - // TODO: compensate borders when any of the panels is empty. + // drag items when selected + this.hammer.on('hammer.input', (function (event) { + if (event.isFirst) { + this._onTouch(event); + } + }).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. - // 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'); + // single select (or unselect) when tapping an item + this.hammer.on('tap', this._onSelectItem.bind(this)); - // 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; + // multi select when holding mouse/touch, or on ctrl+click + this.hammer.on('press', this._onMultiSelectItem.bind(this)); - // 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; + // add item on doubletap + this.hammer.on('doubletap', this._onAddItem.bind(this)); - // 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'; + 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 }); - 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'; + // attach to the DOM + this.show(); + }; - // 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'; + /** + * 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', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'hide', 'snap', 'groupOrderSwap']; + util.selectiveExtend(fields, this.options, options); - // 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 ('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; + } + } - // 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 ('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); + } + } + } + } - // 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; + 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); + } + } - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - if (resized) { - // keep repainting until all sizes are settled - var MAX_REDRAWS = 3; // maximum number of consecutive redraws - if (this.redrawCount < MAX_REDRAWS) { - this.redrawCount++; - this._redraw(); - } else { - console.log('WARNING: infinite loop in redraw?'); + 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); + } } - this.redrawCount = 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; + } + }).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(); } }; - // TODO: deprecated since version 1.1.0, remove some day - Core.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); + /** + * 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; + + if (options && options.refreshItems) { + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); + } }; /** - * 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. + * Destroy the ItemSet */ - Core.prototype.setCurrentTime = function (time) { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } + ItemSet.prototype.destroy = function () { + this.hide(); + this.setItems(null); + this.setGroups(null); - this.currentTime.setCurrentTime(time); + this.hammer = null; + + this.body = null; + this.conversion = null; }; /** - * Get the current time. - * Only applicable when option `showCurrentTime` is true. - * @return {Date} Returns the current time. + * Hide the component from the DOM */ - Core.prototype.getCurrentTime = function () { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); + ItemSet.prototype.hide = function () { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - return this.currentTime.getCurrentTime(); + // remove the axis with dots + if (this.dom.axis.parentNode) { + this.dom.axis.parentNode.removeChild(this.dom.axis); + } + + // remove the labelset containing all group labels + if (this.dom.labelSet.parentNode) { + this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); + } }; /** - * 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 + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - // TODO: move this function to Range - Core.prototype._toTime = function (x) { - return DateUtil.toTime(this, x, this.props.center.width); + ItemSet.prototype.show = function () { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } + + // show axis with dots + if (!this.dom.axis.parentNode) { + this.body.dom.backgroundVertical.appendChild(this.dom.axis); + } + + // show labelset containing labels + if (!this.dom.labelSet.parentNode) { + this.body.dom.left.appendChild(this.dom.labelSet); + } }; /** - * 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 + * 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. */ - // 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); + ItemSet.prototype.setSelection = function (ids) { + var i, ii, id, item; + + if (ids == undefined) ids = []; + if (!Array.isArray(ids)) ids = [ids]; + + // unselect currently selected items + for (i = 0, ii = this.selection.length; i < ii; i++) { + id = this.selection[i]; + item = this.items[id]; + if (item) item.unselect(); + } + + // select items + this.selection = []; + for (i = 0, ii = ids.length; i < ii; i++) { + id = ids[i]; + item = this.items[id]; + if (item) { + this.selection.push(id); + item.select(); + } + } }; /** - * 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 + * Get the selected items by their id + * @return {Array} ids The ids of the selected items */ - // TODO: move this function to Range - Core.prototype._toScreen = function (time) { - return DateUtil.toScreen(this, time, this.props.center.width); + ItemSet.prototype.getSelection = function () { + return this.selection.concat([]); }; /** - * 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 + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - // 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; + ItemSet.prototype.getVisibleItems = function () { + var range = this.body.range.getRange(); + var left = this.body.util.toScreen(range.start); + var right = this.body.util.toScreen(range.end); + + var ids = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var rawVisibleItems = group.visibleItems; + + // filter the "raw" set with visibleItems into a set which is really + // visible by pixels + for (var i = 0; i < rawVisibleItems.length; i++) { + var item = rawVisibleItems[i]; + // TODO: also check whether visible vertically + if (item.left < right && item.left + item.width > left) { + ids.push(item.id); + } + } + } + } + + return ids; }; /** - * Initialize watching when option autoResize is true + * Deselect a selected item + * @param {String | Number} id * @private */ - Core.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); - } else { - this._stopAutoResize(); + 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; + } } }; /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Core.prototype._startAutoResize = function () { - var me = this; + 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._stopAutoResize(); + // 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._onResize = function () { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } + // update class name + frame.className = 'vis-itemset'; - 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; + // reorder the groups (if needed) + resized = this._orderGroups() || resized; - me.emit('change'); - } - } + // 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; - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + // redraw the background group + this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); - this.watchTimer = setInterval(this._onResize, 1000); - }; + // 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; - /** - * Stop watching for a resize of the frame. - * @private - */ - Core.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; - } + // update frame height + frame.style.height = asSize(height); - // remove event listener on window.resize - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; - }; + // calculate actual size + this.props.width = frame.offsetWidth; + this.props.height = height; - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - this.touch.initialScrollTop = this.props.scrollTop; + // 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'; + + // check if this component is resized + resized = this._isResized() || resized; + + return resized; }; /** - * Start moving the timeline vertically - * @param {Event} event + * Get the first group, aligned with the axis + * @return {Group | null} firstGroup * @private */ - Core.prototype._onPinch = function (event) { - this.touch.allowDragging = false; + 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]; + + return firstGroup || null; }; /** - * Move the timeline vertically - * @param {Event} event - * @private + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. + * @protected */ - 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; + ItemSet.prototype._updateUngrouped = function () { + var ungrouped = this.groups[UNGROUPED]; + var background = this.groups[BACKGROUND]; + var item, itemId; - var delta = event.deltaY; + if (this.groupsData) { + // remove the group holding all ungrouped items + if (ungrouped) { + ungrouped.hide(); + delete this.groups[UNGROUPED]; - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + 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; - if (newScrollTop != oldScrollTop) { - this._redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already - this.emit('verticalDrag'); + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + ungrouped.add(item); + } + } + + ungrouped.show(); + } } }; /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private + * Get the element for the labelset + * @return {HTMLElement} labelSet */ - Core.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; + ItemSet.prototype.getLabelSet = function () { + return this.dom.labelSet; }; /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop - * @private + * Set items + * @param {vis.DataSet | null} items */ - 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; + 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'); } - // 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 (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - return this.props.scrollTop; + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } + + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); + + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); + + // update the group holding all ungrouped items + this._updateUngrouped(); + } }; /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private + * Get the current items + * @returns {vis.DataSet | null} */ - Core.prototype._getScrollTop = function () { - return this.props.scrollTop; + ItemSet.prototype.getItems = function () { + return this.itemsData; }; /** - * Load a configurator - * @return {Object} - * @private + * Set groups + * @param {vis.DataSet} groups */ - Core.prototype._createConfigurator = function () { - throw new Error('Cannot invoke abstract method _createConfigurator'); - }; - - module.exports = Core; - -/***/ }, -/* 31 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var Hammer = __webpack_require__(3); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var TimeStep = __webpack_require__(35); - var Component = __webpack_require__(28); - var Group = __webpack_require__(32); - var BackgroundGroup = __webpack_require__(36); - var BoxItem = __webpack_require__(37); - var PointItem = __webpack_require__(1); - var RangeItem = __webpack_require__(34); - var BackgroundItem = __webpack_require__(38); + ItemSet.prototype.setGroups = function (groups) { + var me = this, + ids; - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var BACKGROUND = '__background__'; // reserved group id for background items without group + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.off(event, callback); + }); - /** - * 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; + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw + } - this.defaultOptions = { - type: null, // 'box', 'point', 'range', 'background' - orientation: { - item: 'bottom' // item orientation: 'top' or 'bottom' - }, - align: 'auto', // alignment of box items - stack: true, - groupOrder: null, + // 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'); + } - selectable: true, - multiselect: false, + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false - }, + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); + } - snap: TimeStep.snap, + // update the group holding all ungrouped items + this._updateUngrouped(); - 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); - }, + // update the order of all items in each group + this._order(); - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - } - }; + this.body.emitter.emit('change', { queue: true }); + }; - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); + /** + * Get the current groups + * @returns {vis.DataSet | null} groups + */ + ItemSet.prototype.getGroups = function () { + return this.groupsData; + }; - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: { start: 'Date', end: 'Date' } - }; + /** + * Remove an item by its id + * @param {String | Number} id + */ + ItemSet.prototype.removeItem = function (id) { + var item = this.itemsData.get(id), + dataset = this.itemsData.getDataSet(); - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; + 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); + } + }); + } + }; - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + /** + * Get the time of an item based on it's data and options.type + * @param {Object} itemData + * @returns {string} Returns the type + * @private + */ + ItemSet.prototype._getType = function (itemData) { + return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); + }; - // 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); - } - }; + /** + * 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; + } + }; - // 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); - } - }; + /** + * Handle updated items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onUpdate = function (ids) { + var me = this; - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; + ids.forEach((function (id) { + var itemData = me.itemsData.get(id, me.itemOptions); + var item = me.items[id]; + var type = me._getType(itemData); - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw + var constructor = ItemSet.types[type]; + var selected; - this.touchParams = {}; // stores properties while dragging - // create the HTML DOM + 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); + } + } - this._create(); + 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)); - this.setOptions(options); - } + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change', { queue: true }); + }; - ItemSet.prototype = new Component(); + /** + * Handle added items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - // available item types will be registered here - ItemSet.types = { - background: BackgroundItem, - box: BoxItem, - range: RangeItem, - point: PointItem + /** + * 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 }); + } }; /** - * Create the HTML DOM for the ItemSet + * Update the order of item in all groups + * @private */ - ItemSet.prototype._create = function () { - var frame = document.createElement('div'); - frame.className = 'vis-itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; + ItemSet.prototype._order = function () { + // reorder the items in all groups + // TODO: optimization: only reorder groups affected by the changed items + util.forEach(this.groups, function (group) { + group.order(); + }); + }; - // create background panel - var background = document.createElement('div'); - background.className = 'vis-background'; - frame.appendChild(background); - this.dom.background = background; + /** + * Handle updated groups + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onUpdateGroups = function (ids) { + this._onAddGroups(ids); + }; - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'vis-foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; + /** + * Handle changed groups (added or updated) + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onAddGroups = function (ids) { + var me = this; - // create axis panel - var axis = document.createElement('div'); - axis.className = 'vis-axis'; - this.dom.axis = axis; + ids.forEach(function (id) { + var groupData = me.groupsData.get(id); + var group = me.groups[id]; - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'vis-labelset'; - this.dom.labelSet = labelSet; + if (!group) { + // check for reserved ids + if (id == UNGROUPED || id == BACKGROUND) { + throw new Error('Illegal group id. ' + id + ' is a reserved id.'); + } - // create ungrouped Group - this._updateUngrouped(); + var groupOptions = Object.create(me.options); + util.extend(groupOptions, { + height: null + }); - // create background Group - var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); - backgroundGroup.show(); - this.groups[BACKGROUND] = backgroundGroup; + group = new Group(id, groupData, me); + me.groups[id] = group; - // 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); + // 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); + } + } + } - // drag items when selected - this.hammer.on('hammer.input', (function (event) { - if (event.isFirst) { - this._onTouch(event); + group.order(); + group.show(); + } else { + // update group + group.setData(groupData); } - }).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)); + this.body.emitter.emit('change', { queue: true }); + }; - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('press', this._onMultiSelectItem.bind(this)); + /** + * Handle removed groups + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onRemoveGroups = function (ids) { + var groups = this.groups; + ids.forEach(function (id) { + var group = groups[id]; - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); + if (group) { + group.hide(); + delete groups[id]; + } + }); - // attach to the DOM - this.show(); + this.markDirty(); + + this.body.emitter.emit('change', { queue: true }); }; /** - * 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. + * Reorder the groups if needed + * @return {boolean} changed + * @private */ - ItemSet.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - var fields = ['type', 'align', 'order', 'stack', 'selectable', 'multiselect', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'hide', 'snap']; - util.selectiveExtend(fields, this.options, options); + ItemSet.prototype._orderGroups = function () { + if (this.groupsData) { + // reorder the groups + var groupIds = this.groupsData.getIds({ + order: this.options.groupOrder + }); - 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; - } - } + 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(); + }); - 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); - } - } - } - } + // show the groups again, attach them to the DOM in correct order + groupIds.forEach(function (groupId) { + groups[groupId].show(); + }); - if ('editable' in options) { - if (typeof options.editable === 'boolean') { - this.options.editable.updateTime = options.editable; - this.options.editable.updateGroup = options.editable; - this.options.editable.add = options.editable; - this.options.editable.remove = options.editable; - } else if (typeof options.editable === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); - } + this.groupIds = groupIds; } - // 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'].forEach(addCallback); - - // force the itemSet to refresh: options like orientation and margins may be changed - this.markDirty(); + return changed; + } else { + return false; } }; /** - * 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] + * Add a new item + * @param {Item} item + * @private */ - ItemSet.prototype.markDirty = function (options) { - this.groupIds = []; - this.stackDirty = true; + ItemSet.prototype._addItem = function (item) { + this.items[item.id] = item; - if (options && options.refreshItems) { - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); - } + // add to group + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (group) group.add(item); }; /** - * Destroy the ItemSet + * Update an existing item + * @param {Item} item + * @param {Object} itemData + * @private */ - ItemSet.prototype.destroy = function () { - this.hide(); - this.setItems(null); - this.setGroups(null); + ItemSet.prototype._updateItem = function (item, itemData) { + var oldGroupId = item.data.group; + var oldSubGroupId = item.data.subgroup; - this.hammer = null; + // update the items data (will redraw the item when displayed) + item.setData(itemData); - this.body = null; - this.conversion = null; + // 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); + } }; /** - * Hide the component from the DOM + * Delete an item from the ItemSet: remove it from the DOM, from the map + * with items, and from the map with visible items, and from the selection + * @param {Item} item + * @private */ - ItemSet.prototype.hide = function () { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } + ItemSet.prototype._removeItem = function (item) { + // remove from DOM + item.hide(); - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); - } + // remove from items + delete this.items[item.id]; - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); - } + // remove from selection + var index = this.selection.indexOf(item.id); + if (index != -1) this.selection.splice(index, 1); + + // remove from group + item.parent && item.parent.remove(item); }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Create an array containing all items being a range (having an end date) + * @param array + * @returns {Array} + * @private */ - ItemSet.prototype.show = function () { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + ItemSet.prototype._constructByEndArray = function (array) { + var endArray = []; - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof RangeItem) { + endArray.push(array[i]); + } } + return endArray; + }; - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - this.body.dom.left.appendChild(this.dom.labelSet); + /** + * 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 + */ + 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; + }; + + /** + * 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; } }; - /** - * 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. - */ - ItemSet.prototype.setSelection = function (ids) { - var i, ii, id, item; + /** + * Start dragging the selected events + * @param {Event} event + * @private + */ + ItemSet.prototype._onDragStart = function (event) { + var item = this.touchParams.item || null; + var me = this; + var props; + + if (item && item.selected) { + + if (!this.options.editable.updateTime && !this.options.editable.updateGroup && !item.editable) { + return; + } + + // override options.editable + if (item.editable === false) { + return; + } + + var dragLeftItem = this.touchParams.dragLeftItem; + var dragRightItem = this.touchParams.dragRightItem; + + if (dragLeftItem) { + props = { + item: dragLeftItem, + initialX: event.center.x, + dragLeft: true, + data: util.extend({}, item.data) // clone the items data + }; + + this.touchParams.itemProps = [props]; + } else if (dragRightItem) { + props = { + item: dragRightItem, + initialX: event.center.x, + dragRight: true, + data: util.extend({}, item.data) // clone the items data + }; + + this.touchParams.itemProps = [props]; + } else { + this.touchParams.selectedItem = item; - if (ids == undefined) ids = []; - if (!Array.isArray(ids)) ids = [ids]; + var baseGroupIndex = this._getGroupIndex(item.data.group); - // 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(); - } + this.touchParams.itemProps = this.getSelection().map(function (id) { + var item = me.items[id]; + var groupIndex = me._getGroupIndex(item.data.group); + var props = { + item: item, + initialX: event.center.x, + groupOffset: baseGroupIndex - groupIndex, + data: util.extend({}, item.data) // clone the items data + }; - // select items - this.selection = []; - for (i = 0, ii = ids.length; i < ii; i++) { - id = ids[i]; - item = this.items[id]; - if (item) { - this.selection.push(id); - item.select(); + return props; + }); } + + 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); } }; /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items + * Start creating a new range item by dragging. + * @param {Event} event + * @private */ - ItemSet.prototype.getSelection = function () { - return this.selection.concat([]); - }; + 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) : start; + var end = start; - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - ItemSet.prototype.getVisibleItems = function () { - var range = this.body.range.getRange(); - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); + var itemData = { + type: 'range', + start: start, + end: end, + content: 'new item' + }; - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; + var id = util.randomUUID(); + itemData[this.itemsData._fieldId] = id; - // filter the "raw" set with visibleItems into a set which is really - // visible by pixels - for (var i = 0; i < rawVisibleItems.length; i++) { - var item = rawVisibleItems[i]; - // TODO: also check whether visible vertically - if (item.left < right && item.left + item.width > left) { - ids.push(item.id); - } - } - } + var group = this.groupFromTarget(event); + if (group) { + itemData.group = group.groupId; } - return ids; + var newItem = new RangeItem(itemData, this.conversion, this.options); + newItem.id = id; // TODO: not so nice setting id afterwards + newItem.data = itemData; + this._addItem(newItem); + + var props = { + item: newItem, + dragRight: true, + initialX: event.center.x, + data: util.extend({}, itemData) + }; + this.touchParams.itemProps = [props]; + + event.stopPropagation(); }; /** - * Deselect a selected item - * @param {String | Number} id + * Drag selected items + * @param {Event} event * @private */ - ItemSet.prototype._deselect = function (id) { - var selection = this.selection; - for (var i = 0, ii = selection.length; i < ii; i++) { - if (selection[i] == id) { - // non-strict comparison! - selection.splice(i, 1); - break; + ItemSet.prototype._onDrag = function (event) { + if (this.touchParams.itemProps) { + event.stopPropagation(); + + 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(); + + //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); + } + } } - } - }; - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - ItemSet.prototype.redraw = function () { - var margin = this.options.margin, - range = this.body.range, - asSize = util.option.asSize, - options = this.options, - orientation = options.orientation.item, - resized = false, - frame = this.dom.frame; + // move + this.touchParams.itemProps.forEach(function (props) { + var newProps = {}; + var current = me.body.util.toTime(event.center.x - xOffset); + var initial = me.body.util.toTime(props.initialX - xOffset); + var offset = current - initial; - // 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; + var itemData = util.extend({}, props.item.data); // clone the data - // update class name - frame.className = 'vis-itemset'; + if (props.item.editable === false) { + return; + } - // reorder the groups (if needed) - resized = this._orderGroups() || resized; + var updateTimeAllowed = me.options.editable.updateTime || props.item.editable === true; - // check whether zoomed (in that case we need to re-stack everything) - // TODO: would be nicer to get this as a trigger from Range - var visibleInterval = range.end - range.start; - var zoomed = visibleInterval != this.lastVisibleInterval || this.props.width != this.props.lastWidth; - if (zoomed) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.props.lastWidth = this.props.width; + if (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); + 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); + 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 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; + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var duration = initialEnd.valueOf() - initialStart.valueOf(); - // redraw the background group - this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); + itemData.start = snap ? snap(start, scale, step) : start; + itemData.end = new Date(itemData.start.valueOf() + duration); + } else { + itemData.start = snap ? snap(start, scale, step) : start; + } + } + } + } - // 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; + var updateGroupAllowed = me.options.editable.updateGroup || props.item.editable === true; - // update frame height - frame.style.height = asSize(height); + if (updateGroupAllowed && (!props.dragLeft && !props.dragRight) && newGroupBase != null) { + if (itemData.group != undefined) { + var newOffset = newGroupBase - props.groupOffset; - // calculate actual size - this.props.width = frame.offsetWidth; - this.props.height = height; + //make sure we stay in bounds + newOffset = Math.max(0, newOffset); + newOffset = Math.min(me.groupIds.length - 1, newOffset); - // 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'; + itemData.group = me.groupIds[newOffset]; + } + } - // check if this component is resized - resized = this._isResized() || resized; + // confirm moving the item + me.options.onMoving(itemData, function (itemData) { + if (itemData) { + props.item.setData(itemData); + } + }); + }); - return resized; + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change'); + } }; /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup + * Move an item to another group + * @param {Item} item + * @param {String | Number} groupId * @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]; + 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(); - return firstGroup || null; + item.data.group = group.groupId; + } }; /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected + * End of dragging selected items + * @param {Event} event + * @private */ - ItemSet.prototype._updateUngrouped = function () { - var ungrouped = this.groups[UNGROUPED]; - var background = this.groups[BACKGROUND]; - var item, itemId; + ItemSet.prototype._onDragEnd = function (event) { + if (this.touchParams.itemProps) { + event.stopPropagation(); - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; + var me = this; + var dataset = this.itemsData.getDataSet(); + var itemProps = this.touchParams.itemProps; + this.touchParams.itemProps = null; - 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; + itemProps.forEach(function (props) { + var id = props.item.id; + var exists = me.itemsData.get(id, me.itemOptions) != null; - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - ungrouped.add(item); - } + 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); + } + + // force re-stacking of all items next redraw + me.stackDirty = true; + me.body.emitter.emit('change'); + }); + } else { + // update existing item + var itemData = util.extend({}, props.item.data); // clone the data + 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); + + me.stackDirty = true; // force re-stacking of all items next redraw + me.body.emitter.emit('change'); + } + }); } + }); + } + }; - ungrouped.show(); + ItemSet.prototype._onGroupDragStart = function (event) { + if (this.options.groupEditable.order) { + this.groupTouchParams.group = this.groupFromTarget(event); + + if (this.groupTouchParams.group) { + event.stopPropagation(); + + this.groupTouchParams.originalOrder = this.groupsData.getIds({ + order: this.options.groupOrder + }); } } }; - /** - * Get the element for the labelset - * @return {HTMLElement} labelSet - */ - ItemSet.prototype.getLabelSet = function () { - return this.dom.labelSet; - }; + ItemSet.prototype._onGroupDrag = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); - /** - * Set items - * @param {vis.DataSet | null} items - */ - ItemSet.prototype.setItems = function (items) { - var me = this, - ids, - oldItemsData = this.itemsData; + // drag from one group to another + var group = this.groupFromTarget(event); - // 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'); - } + // 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 (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); + if (group && group != this.groupTouchParams.group) { + var groupsData = this.groupsData; + var targetGroup = groupsData.get(group.groupId); + var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } + // switch groups + if (draggedGroup && targetGroup) { + this.options.groupOrderSwap(draggedGroup, targetGroup, this.groupsData); + this.groupsData.update(draggedGroup); + this.groupsData.update(targetGroup); + } - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); + // fetch current order of groups + var newOrder = this.groupsData.getIds({ + order: this.options.groupOrder + }); - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); + // 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++; + } - // update the group holding all ungrouped items - this._updateUngrouped(); + // 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; + + curPos++; + } + } + } + } } }; - /** - * Get the current items - * @returns {vis.DataSet | null} - */ - ItemSet.prototype.getItems = function () { - return this.itemsData; - }; + ItemSet.prototype._onGroupDragEnd = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); - /** - * Set groups - * @param {vis.DataSet} groups - */ - ItemSet.prototype.setGroups = function (groups) { - var me = this, - ids; + // 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 { - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.off(event, callback); - }); + // fetch current order of groups + var newOrder = dataset.getIds({ + order: me.options.groupOrder + }); - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } + // 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++; + } - // 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'); - } + // all ok + if (curPos >= numGroups) { + 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); + // 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++; + } + } + } }); - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); + me.body.emitter.emit('groupDragged', { groupId: id }); + } + }; + + /** + * Handle selecting/deselecting an item when tapping it + * @param {Event} event + * @private + */ + 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; } - // update the group holding all ungrouped items - this._updateUngrouped(); + var oldSelection = this.getSelection(); - // update the order of all items in each group - this._order(); + var item = this.itemFromTarget(event); + var selection = item ? [item.id] : []; + this.setSelection(selection); - this.body.emitter.emit('change', { queue: true }); - }; + var newSelection = this.getSelection(); - /** - * Get the current groups - * @returns {vis.DataSet | null} groups - */ - ItemSet.prototype.getGroups = function () { - return this.groupsData; + // 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 + }); + } }; /** - * Remove an item by its id - * @param {String | Number} id + * Handle creation and updates of an item on double tap + * @param event + * @private */ - ItemSet.prototype.removeItem = function (id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(); + 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); + + event.stopPropagation(); if (item) { - // confirm deletion - this.options.onRemove(item, function (item) { + // update item + + // execute async handler to update the item (or cancel it) + var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset + this.options.onUpdate(itemData, function (itemData) { + if (itemData) { + me.itemsData.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 newItem = { + 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); + newItem.end = snap ? snap(end, scale, step) : end; + } + + newItem[this.itemsData._fieldId] = util.randomUUID(); + + var group = this.groupFromTarget(event); + if (group) { + newItem.group = group.groupId; + } + + // execute async handler to customize (or cancel) adding an item + this.options.onAdd(newItem, function (item) { if (item) { - // remove by id here, it is possible that an item has no id defined - // itself, so better not delete by the item itself - dataset.remove(id); + me.itemsData.getDataSet().add(item); + // TODO: need to trigger a redraw? } }); } }; /** - * Get the time of an item based on it's data and options.type - * @param {Object} itemData - * @returns {string} Returns the type + * Handle selecting/deselecting multiple items when holding an item + * @param {Event} event * @private */ - ItemSet.prototype._getType = function (itemData) { - return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); - }; + ItemSet.prototype._onMultiSelectItem = function (event) { + if (!this.options.selectable) return; - /** - * 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; - } - }; + var item = this.itemFromTarget(event); - /** - * Handle updated items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onUpdate = function (ids) { - var me = this; + if (item) { + // multi select items (if allowed) - ids.forEach((function (id) { - var itemData = me.itemsData.get(id, me.itemOptions); - var item = me.items[id]; - var type = me._getType(itemData); + var selection = this.options.multiselect ? this.getSelection() // take current selection + : []; // deselect current selection - var constructor = ItemSet.types[type]; - var selected; + var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false; - 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 (shiftKey && this.options.multiselect) { + // select all items between the old selection and the tapped item - 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(); + // determine the selection range + selection.push(item.id); + var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); + + // 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 && !(_item instanceof BackgroundItem)) { + selection.push(_item.id); // do not use id but item.id, id itself is stringified + } } - } 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 { + // 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 { - throw new TypeError('Unknown item type "' + type + '"'); + // item is already selected -> deselect it + selection.splice(index, 1); } } - }).bind(this)); - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', { queue: true }); + this.setSelection(selection); + + this.body.emitter.emit('select', { + items: this.getSelection(), + event: event + }); + } }; /** - * Handle added items - * @param {Number[]} ids - * @protected + * 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 */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; + ItemSet._getItemRange = function (itemsData) { + var max = null; + var min = null; - /** - * 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); + itemsData.forEach(function (data) { + if (min == null || data.start < min) { + min = data.start; + } + + if (data.end != undefined) { + if (max == null || data.end > max) { + max = data.end; + } + } else { + if (max == null || data.start > max) { + max = data.start; + } } }); - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', { queue: true }); - } + return { + min: min, + max: max + }; }; /** - * Update the order of item in all groups - * @private + * 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._order = function () { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); - }; + ItemSet.prototype.itemFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-item')) { + return target['timeline-item']; + } + target = target.parentNode; + } - /** - * Handle updated groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onUpdateGroups = function (ids) { - this._onAddGroups(ids); + return null; }; /** - * Handle changed groups (added or updated) - * @param {Number[]} ids - * @private + * Find the Group from an event target: + * searches for the attribute 'timeline-group' in the event target's element tree + * @param {Event} event + * @return {Group | null} group */ - ItemSet.prototype._onAddGroups = function (ids) { - var me = this; - - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; - - if (!group) { - // check for reserved ids - if (id == UNGROUPED || id == BACKGROUND) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } - - var groupOptions = Object.create(me.options); - util.extend(groupOptions, { - height: null - }); - - group = new Group(id, groupData, me); - me.groups[id] = group; + 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; + } - // 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 (this.options.orientation.item === 'top') { + if (i === this.groupIds.length - 1 && clientY > top) { + return group; } - - group.order(); - group.show(); } else { - // update group - group.setData(groupData); + if (i === 0 && clientY < top + foreground.offset) { + return group; + } } - }); + } - this.body.emitter.emit('change', { queue: true }); + return null; }; /** - * Handle removed groups - * @param {Number[]} ids - * @private + * Find the ItemSet from an event target: + * searches for the attribute 'timeline-itemset' in the event target's element tree + * @param {Event} event + * @return {ItemSet | null} item */ - ItemSet.prototype._onRemoveGroups = function (ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; - - if (group) { - group.hide(); - delete groups[id]; + ItemSet.itemSetFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-itemset')) { + return target['timeline-itemset']; } - }); - - this.markDirty(); + target = target.parentNode; + } - this.body.emitter.emit('change', { queue: true }); + return null; }; + module.exports = ItemSet; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var moment = __webpack_require__(2); + var DateUtil = __webpack_require__(27); + var util = __webpack_require__(1); + /** - * Reorder the groups if needed - * @return {boolean} changed - * @private + * @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 */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); + function TimeStep(start, end, minimumStep, hiddenDates) { + this.moment = moment; - 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(); - }); + // variables + this.current = this.moment(); + this._start = this.moment(); + this._end = this.moment(); - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); + this.autoScale = true; + this.scale = 'day'; + this.step = 1; - this.groupIds = groupIds; - } + // initialize the range + this.setRange(start, end, minimumStep); - return changed; - } else { - return false; + // hidden Dates options + this.switchedDay = false; + this.switchedMonth = false; + this.switchedYear = false; + this.hiddenDates = hiddenDates; + if (hiddenDates === undefined) { + this.hiddenDates = []; + } + + this.format = TimeStep.FORMAT; // default formatting + } + + // 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: '' } }; /** - * Add a new item - * @param {Item} item - * @private + * Set custom constructor function for moment. Can be used to set dates + * to UTC or to set a utcOffset. + * @param {function} moment */ - ItemSet.prototype._addItem = function (item) { - this.items[item.id] = item; + TimeStep.prototype.setMoment = function (moment) { + this.moment = moment; - // add to group - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); + // 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); }; /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private + * 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 */ - ItemSet.prototype._updateItem = function (item, itemData) { - var oldGroupId = item.data.group; - var oldSubGroupId = item.data.subgroup; + TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); + }; - // update the items data (will redraw the item when displayed) - item.setData(itemData); + /** + * 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 + */ + TimeStep.prototype.setRange = function (start, end, minimumStep) { + if (!(start instanceof Date) || !(end instanceof Date)) { + throw 'No legal start or end date in method setRange'; + } - // update group - if (oldGroupId != item.data.group || oldSubGroupId != item.data.subgroup) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); + this._start = start != undefined ? this.moment(start.valueOf()) : new Date(); + this._end = end != undefined ? this.moment(end.valueOf()) : new Date(); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); + if (this.autoScale) { + this.setMinimumStep(minimumStep); } }; /** - * 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 + * Set the range iterator to the start date. */ - ItemSet.prototype._removeItem = function (item) { - // remove from DOM - item.hide(); - - // remove from items - delete this.items[item.id]; - - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); - - // remove from group - item.parent && item.parent.remove(item); + TimeStep.prototype.start = function () { + this.current = this._start.clone(); + this.roundToMinor(); }; /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} - * @private + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - ItemSet.prototype._constructByEndArray = function (array) { - var endArray = []; + 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 + } - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof RangeItem) { - endArray.push(array[i]); + 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; } } - 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 - */ - 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; }; /** - * Given an group id, returns the index it has. - * - * @param {Number} groupID - * @private + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date */ - ItemSet.prototype._getGroupIndex = function (groupId) { - for (var i = 0; i < this.groupIds.length; i++) { - if (groupId == this.groupIds[i]) return i; - } + TimeStep.prototype.hasNext = function () { + return this.current.valueOf() <= this._end.valueOf(); }; /** - * Start dragging the selected events - * @param {Event} event - * @private + * Do the next step */ - ItemSet.prototype._onDragStart = function (event) { - var item = this.touchParams.item || null; - var me = this; - var props; - - if (item && item.selected) { + TimeStep.prototype.next = function () { + var prev = this.current.valueOf(); - if (!this.options.editable.updateTime && !this.options.editable.updateGroup && !item.editable) { - return; + // 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; } - - // override options.editable - if (item.editable === false) { - return; + } 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; } + } - var dragLeftItem = this.touchParams.dragLeftItem; - var dragRightItem = this.touchParams.dragRightItem; - - if (dragLeftItem) { - props = { - item: dragLeftItem, - initialX: event.center.x, - dragLeft: true, - data: util.extend({}, item.data) // clone the items data - }; - - this.touchParams.itemProps = [props]; - } else if (dragRightItem) { - props = { - item: dragRightItem, - initialX: event.center.x, - dragRight: true, - data: util.extend({}, item.data) // clone the items data - }; - - this.touchParams.itemProps = [props]; - } else { - this.touchParams.selectedItem = item; - - var baseGroupIndex = this._getGroupIndex(item.data.group); - - this.touchParams.itemProps = this.getSelection().map(function (id) { - var item = me.items[id]; - var groupIndex = me._getGroupIndex(item.data.group); - var props = { - item: item, - initialX: event.center.x, - groupOffset: baseGroupIndex - groupIndex, - data: util.extend({}, item.data) // clone the items data - }; - - return props; - }); + 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; } + } - 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); + // safety mechanism: if current time is still unchanged, move to the end + if (this.current.valueOf() == prev) { + this.current = this._end.clone(); } + + DateUtil.stepOverHiddenDates(this.moment, this, prev); }; /** - * Start creating a new range item by dragging. - * @param {Event} event - * @private + * Get the current datetime + * @return {Moment} current The current date */ - 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) : start; - var end = start; - - var itemData = { - type: 'range', - start: start, - end: end, - content: 'new item' - }; - - var id = util.randomUUID(); - itemData[this.itemsData._fieldId] = id; + TimeStep.prototype.getCurrent = function () { + return this.current; + }; - var group = this.groupFromTarget(event); - if (group) { - itemData.group = group.groupId; + /** + * 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. + */ + 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; } - - var newItem = new RangeItem(itemData, this.conversion, this.options); - newItem.id = id; // TODO: not so nice setting id afterwards - newItem.data = itemData; - this._addItem(newItem); - - var props = { - item: newItem, - dragRight: true, - initialX: event.center.x, - data: util.extend({}, itemData) - }; - this.touchParams.itemProps = [props]; - - event.stopPropagation(); }; /** - * Drag selected items - * @param {Event} event - * @private + * Enable or disable autoscaling + * @param {boolean} enable If true, autoascaling is set true */ - ItemSet.prototype._onDrag = function (event) { - if (this.touchParams.itemProps) { - event.stopPropagation(); - - 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(); - - //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); - } - } - } - - // move - this.touchParams.itemProps.forEach(function (props) { - var newProps = {}; - var current = me.body.util.toTime(event.center.x - xOffset); - var initial = me.body.util.toTime(props.initialX - xOffset); - var offset = current - initial; - - var itemData = util.extend({}, props.item.data); // clone the data - - if (props.item.editable === false) { - return; - } - - var updateTimeAllowed = me.options.editable.updateTime || props.item.editable === true; - - 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); - 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); - 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); - - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var duration = initialEnd.valueOf() - initialStart.valueOf(); - - itemData.start = snap ? snap(start, scale, step) : start; - itemData.end = new Date(itemData.start.valueOf() + duration); - } else { - itemData.start = snap ? snap(start, scale, step) : start; - } - } - } - } - - var updateGroupAllowed = me.options.editable.updateGroup || props.item.editable === true; - - if (updateGroupAllowed && (!props.dragLeft && !props.dragRight) && newGroupBase != null) { - if (itemData.group != undefined) { - var newOffset = newGroupBase - props.groupOffset; - - //make sure we stay in bounds - newOffset = Math.max(0, newOffset); - newOffset = Math.min(me.groupIds.length - 1, newOffset); - - itemData.group = me.groupIds[newOffset]; - } - } - - // confirm moving the item - me.options.onMoving(itemData, function (itemData) { - if (itemData) { - props.item.setData(itemData); - } - }); - }); - - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); - } + TimeStep.prototype.setAutoScale = function (enable) { + this.autoScale = enable; }; /** - * Move an item to another group - * @param {Item} item - * @param {String | Number} groupId - * @private + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - 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(); + TimeStep.prototype.setMinimumStep = function (minimumStep) { + if (minimumStep == undefined) { + return; + } - item.data.group = group.groupId; + //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; + + // 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; } }; /** - * End of dragging selected items - * @param {Event} event - * @private + * 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 */ - 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; - - itemProps.forEach(function (props) { - var id = props.item.id; - var exists = me.itemsData.get(id, me.itemOptions) != 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); - } + TimeStep.snap = function (date, scale, step) { + var clone = moment(date); - // force re-stacking of all items next redraw - me.stackDirty = true; - me.body.emitter.emit('change'); - }); - } else { - // update existing item - var itemData = util.extend({}, props.item.data); // clone the data - 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); + 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); + } - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('change'); - } - }); - } - }); + 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; }; /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. */ - 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; + 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; + } } - var oldSelection = this.getSelection(); - - var item = this.itemFromTarget(event); - var selection = item ? [item.id] : []; - this.setSelection(selection); - - var newSelection = this.getSelection(); - - // 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 - }); + 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; } }; /** - * Handle creation and updates of an item on double tap - * @param event - * @private + * Returns formatted text for the minor axislabel, depending on the current + * date and the scale. For example when scale is MINUTE, the current time is + * formatted as "hh:mm". + * @param {Date} [date] custom date. if not provided, current date is taken */ - 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); - - event.stopPropagation(); - - 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 newItem = { - 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); - newItem.end = snap ? snap(end, scale, step) : end; - } - - newItem[this.itemsData._fieldId] = util.randomUUID(); - - var group = this.groupFromTarget(event); - if (group) { - newItem.group = group.groupId; - } - - // execute async handler to customize (or cancel) adding an item - this.options.onAdd(newItem, function (item) { - if (item) { - me.itemsData.getDataSet().add(item); - // TODO: need to trigger a redraw? - } - }); + 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) : ''; }; /** - * Handle selecting/deselecting multiple items when holding an item - * @param {Event} event - * @private + * Returns formatted text for the major axis label, depending on the current + * date and the scale. For example when scale is MINUTE, the major scale is + * hours, and the hour will be formatted as "hh". + * @param {Date} [date] custom date. if not provided, current date is taken */ - 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; + TimeStep.prototype.getLabelMajor = function (date) { + if (date == undefined) { + date = this.current; + } - if (shiftKey && this.options.multiselect) { - // select all items between the old selection and the tapped item + var format = this.format.majorLabels[this.scale]; + return format && format.length > 0 ? this.moment(date).format(format) : ''; + }; - // determine the selection range - selection.push(item.id); - var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); + 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; - // 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; + function even(value) { + return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; + } - if (start >= range.min && end <= range.max && !(_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); - } + 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 ''; + } - this.setSelection(selection); + function currentWeek(date) { + return date.isSame(new Date(), 'week') ? ' vis-current-week' : ''; + } - this.body.emitter.emit('select', { - items: this.getSelection(), - event: event - }); + function currentMonth(date) { + return date.isSame(new Date(), 'month') ? ' vis-current-month' : ''; } - }; - /** - * 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 - */ - ItemSet._getItemRange = function (itemsData) { - var max = null; - var min = null; + function currentYear(date) { + return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; + } - itemsData.forEach(function (data) { - if (min == null || data.start < min) { - min = data.start; - } + switch (this.scale) { + case 'millisecond': + return even(current.milliseconds()).trim(); - if (data.end != undefined) { - if (max == null || data.end > max) { - max = data.end; - } - } else { - if (max == null || data.start > max) { - max = data.start; - } - } - }); + case 'second': + return even(current.seconds()).trim(); - return { - min: min, - max: max - }; - }; + case 'minute': + return even(current.minutes()).trim(); - /** - * 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; - } + case 'hour': + var hours = current.hours(); + if (this.step == 4) { + hours = hours + '-h' + (hours + 4); + } + return 'vis-h' + hours + today(current) + even(current.hours()); - return null; - }; + case 'weekday': + return 'vis-' + current.format('dddd').toLowerCase() + today(current) + currentWeek(current) + even(current.date()); - /** - * Find the Group from an event target: - * searches for the attribute 'timeline-group' in the event target's element tree - * @param {Event} event - * @return {Group | null} group - */ - ItemSet.prototype.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; - } + case 'day': + var day = current.date(); + var month = current.format('MMMM').toLowerCase(); + return 'vis-day' + day + ' vis-' + month + currentMonth(current) + even(day - 1); - 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; - } - } - } + case 'month': + return 'vis-' + current.format('MMMM').toLowerCase() + currentMonth(current) + even(current.month()); - return null; - }; + case 'year': + var year = current.year(); + return 'vis-year' + year + currentYear(current) + even(year); - /** - * Find the ItemSet from an event target: - * searches for the attribute 'timeline-itemset' in the event target's element tree - * @param {Event} event - * @return {ItemSet | null} item - */ - ItemSet.itemSetFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; + default: + return ''; } - - return null; }; - module.exports = ItemSet; + module.exports = TimeStep; /***/ }, -/* 32 */ +/* 31 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(7); - var stack = __webpack_require__(33); - var RangeItem = __webpack_require__(34); + var util = __webpack_require__(1); + var stack = __webpack_require__(32); + var RangeItem = __webpack_require__(33); /** * @constructor Group @@ -17738,7 +18183,11 @@ return /******/ (function(modules) { // webpackBootstrap */ Group.prototype._create = function () { var label = document.createElement('div'); - label.className = 'vis-label'; + if (this.itemSet.options.groupEditable.order) { + label.className = 'vis-label draggable'; + } else { + label.className = 'vis-label'; + } this.dom.label = label; var inner = document.createElement('div'); @@ -18291,7 +18740,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Group; /***/ }, -/* 33 */ +/* 32 */ /***/ function(module, exports) { // Utility functions for ordering and stacking of items @@ -18415,13 +18864,13 @@ return /******/ (function(modules) { // webpackBootstrap }; /***/ }, -/* 34 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(3); - var Item = __webpack_require__(2); + var Hammer = __webpack_require__(20); + var Item = __webpack_require__(34); /** * @constructor RangeItem @@ -18711,720 +19160,314 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = RangeItem; /***/ }, -/* 35 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var moment = __webpack_require__(8); - var DateUtil = __webpack_require__(29); - var util = __webpack_require__(7); + var Hammer = __webpack_require__(20); + var util = __webpack_require__(1); /** - * @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 + * @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 TimeStep(start, end, minimumStep, hiddenDates) { - this.moment = moment; - - // variables - this.current = this.moment(); - this._start = this.moment(); - this._end = this.moment(); + function Item(data, conversion, options) { + this.id = null; + this.parent = null; + this.data = data; + this.dom = null; + this.conversion = conversion || {}; + this.options = options || {}; - this.autoScale = true; - this.scale = 'day'; - this.step = 1; + this.selected = false; + this.displayed = false; + this.dirty = true; - // initialize the range - this.setRange(start, end, minimumStep); + this.top = null; + this.left = null; + this.width = null; + this.height = null; - // hidden Dates options - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - this.hiddenDates = hiddenDates; - if (hiddenDates === undefined) { - this.hiddenDates = []; + this.editable = null; + if (this.data && this.data.hasOwnProperty('editable') && typeof this.data.editable === 'boolean') { + this.editable = data.editable; } - - this.format = TimeStep.FORMAT; // default formatting } - // 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: '' - } - }; + Item.prototype.stack = true; /** - * Set custom constructor function for moment. Can be used to set dates - * to UTC or to set a utcOffset. - * @param {function} moment + * Select current item */ - 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); + Item.prototype.select = function () { + this.selected = true; + this.dirty = true; + if (this.displayed) this.redraw(); }; /** - * 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 + * Unselect current item */ - TimeStep.prototype.setFormat = function (format) { - var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); - this.format = util.deepExtend(defaultFormat, format); + Item.prototype.unselect = function () { + this.selected = false; + this.dirty = true; + if (this.displayed) 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 + * 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 */ - TimeStep.prototype.setRange = function (start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw 'No legal start or end date in method setRange'; + Item.prototype.setData = function (data) { + var groupChanged = data.group != undefined && this.data.group != data.group; + if (groupChanged) { + this.parent.itemSet._moveToGroup(this, data.group); } - 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); + if (data.hasOwnProperty('editable') && typeof data.editable === 'boolean') { + this.editable = data.editable; } - }; - /** - * Set the range iterator to the start date. - */ - TimeStep.prototype.start = function () { - this.current = this._start.clone(); - this.roundToMinor(); + this.data = data; + this.dirty = true; + if (this.displayed) this.redraw(); }; /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * Set a parent for the item + * @param {ItemSet | Group} parent */ - 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 - } - - 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; + Item.prototype.setParent = function (parent) { + if (this.displayed) { + this.hide(); + this.parent = parent; + if (this.parent) { + this.show(); } + } else { + this.parent = parent; } }; /** - * 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(); - }; - - /** - * Do the next step + * 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 */ - 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; - } - } - - 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; - } - } - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = this._end.clone(); - } - - DateUtil.stepOverHiddenDates(this.moment, this, prev); + Item.prototype.isVisible = function (range) { + // Should be implemented by Item implementations + return false; }; /** - * Get the current datetime - * @return {Moment} current The current date + * Show the Item in the DOM (when not already visible) + * @return {Boolean} changed */ - TimeStep.prototype.getCurrent = function () { - return this.current; + Item.prototype.show = function () { + return false; }; /** - * 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. + * Hide the Item from the DOM (when visible) + * @return {Boolean} changed */ - 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; - } + Item.prototype.hide = function () { + return false; }; /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true + * Repaint the item */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; - }; + Item.prototype.redraw = function () {}; /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds + * Reposition the Item horizontally */ - 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; + Item.prototype.repositionX = function () {}; - // 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; - } - }; + /** + * Reposition the Item vertically + */ + Item.prototype.repositionY = function () {}; /** - * 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 + * Repaint a delete button on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected */ - TimeStep.snap = function (date, scale, step) { - var clone = moment(date); + Item.prototype._repaintDeleteButton = function (anchor) { + var editable = (this.options.editable.remove || this.data.editable === true) && this.data.editable !== false; - 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.mlliseconds(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); - } + if (this.selected && editable && !this.dom.deleteButton) { + // create and show button + var me = this; - 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; + var deleteButton = document.createElement('div'); + deleteButton.className = 'vis-delete'; + deleteButton.title = 'Delete this item'; + + // TODO: be able to destroy the delete button + new Hammer(deleteButton).on('tap', function (event) { + event.stopPropagation(); + me.parent.removeFromDataSet(me); + }); + + 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); } - } else if (scale == 'millisecond') { - var _step = step > 5 ? step / 2 : 1; - clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step); + this.dom.deleteButton = null; } - - return clone; }; /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @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; - } + 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; } - 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; + 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); + } + } + + this.content = content; } }; /** - * 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 + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private */ - TimeStep.prototype.getLabelMinor = function (date) { - if (date == undefined) { - date = this.current; + Item.prototype._updateTitle = function (element) { + if (this.data.title != null) { + element.title = this.data.title || ''; + } else { + element.removeAttribute('vis-title'); } - - var format = this.format.minorLabels[this.scale]; - return format && format.length > 0 ? this.moment(date).format(format) : ''; }; /** - * 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 + * 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 */ - 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) : ''; - }; + Item.prototype._updateDataAttributes = function (element) { + if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { + var attributes = []; - 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; + if (Array.isArray(this.options.dataAttributes)) { + attributes = this.options.dataAttributes; + } else if (this.options.dataAttributes == 'all') { + attributes = Object.keys(this.data); + } else { + return; + } - function even(value) { - return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; - } + for (var i = 0; i < attributes.length; i++) { + var name = attributes[i]; + var value = this.data[name]; - 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'; + if (value != null) { + element.setAttribute('data-' + name, value); + } else { + element.removeAttribute('data-' + name); + } } - return ''; - } - - function currentWeek(date) { - return date.isSame(new Date(), 'week') ? ' vis-current-week' : ''; } + }; - function currentMonth(date) { - return date.isSame(new Date(), 'month') ? ' vis-current-month' : ''; + /** + * 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; } - function currentYear(date) { - return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; + // append new styles + if (this.data.style) { + util.addCssText(element, this.data.style); + this.style = this.data.style; } + }; - 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()); + /** + * 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; + }; - case 'weekday': - return 'vis-' + current.format('dddd').toLowerCase() + today(current) + currentWeek(current) + even(current.date()); + /** + * Return the width of the item left from its start date + * @return {number} + */ + Item.prototype.getWidthLeft = function () { + return 0; + }; - case 'day': - var day = current.date(); - var month = current.format('MMMM').toLowerCase(); - return 'vis-day' + day + ' vis-' + month + currentMonth(current) + even(day - 1); + /** + * Return the width of the item right from the max of its start and end date + * @return {number} + */ + Item.prototype.getWidthRight = function () { + return 0; + }; - case 'month': - return 'vis-' + current.format('MMMM').toLowerCase() + currentMonth(current) + even(current.month()); + module.exports = Item; - case 'year': - var year = current.year(); - return 'vis-year' + year + currentYear(current) + even(year); + // should be implemented by the item - default: - return ''; - } - }; + // should be implemented by the item - module.exports = TimeStep; + // should be implemented by the item /***/ }, -/* 36 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var util = __webpack_require__(7); - var Group = __webpack_require__(32); + var util = __webpack_require__(1); + var Group = __webpack_require__(31); /** * @constructor BackgroundGroup @@ -19482,13 +19525,13 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = BackgroundGroup; /***/ }, -/* 37 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Item = __webpack_require__(2); - var util = __webpack_require__(7); + var Item = __webpack_require__(34); + var util = __webpack_require__(1); /** * @constructor BoxItem @@ -19721,16 +19764,221 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = BoxItem; +/***/ }, +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var Item = __webpack_require__(34); + + /** + * @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 + } + }; + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } + } + + Item.call(this, data, conversion, options); + } + + PointItem.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 + */ + 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; + }; + + /** + * Repaint the item + */ + 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; + + this.dirty = true; + } + + // 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; + + // 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); + + 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.point.className = 'vis-item vis-point' + className; + dom.dot.className = 'vis-item vis-dot' + className; + + // 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; + + // resize contents + dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; + //dom.content.style.marginRight = ... + 'px'; // TODO: margin right + + dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; + dom.dot.style.left = this.props.dot.width / 2 + 'px'; + + // recalculate size + this.width = dom.point.offsetWidth; + this.height = dom.point.offsetHeight; + + this.dirty = false; + } + + this._repaintDeleteButton(dom.point); + }; + + /** + * 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(); + } + }; + + /** + * 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); + } + + this.displayed = false; + } + }; + + /** + * Reposition the item horizontally + * @Override + */ + 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'; + }; + + /** + * Reposition the item vertically + * @Override + */ + PointItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var point = this.dom.point; + + if (orientation == 'top') { + point.style.top = this.top + 'px'; + } else { + point.style.top = this.parent.height - this.top - this.height + 'px'; + } + }; + + /** + * Return the width of the item left from its start date + * @return {number} + */ + PointItem.prototype.getWidthLeft = function () { + return this.props.dot.width; + }; + + /** + * Return the width of the item right from its start date + * @return {number} + */ + PointItem.prototype.getWidthRight = function () { + return this.width - this.props.dot.width; + }; + + module.exports = PointItem; + /***/ }, /* 38 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var Hammer = __webpack_require__(3); - var Item = __webpack_require__(2); - var BackgroundGroup = __webpack_require__(36); - var RangeItem = __webpack_require__(34); + var Hammer = __webpack_require__(20); + var Item = __webpack_require__(34); + var BackgroundGroup = __webpack_require__(35); + var RangeItem = __webpack_require__(33); /** * @constructor BackgroundItem @@ -19948,11 +20196,11 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var Component = __webpack_require__(28); - var TimeStep = __webpack_require__(35); - var DateUtil = __webpack_require__(29); - var moment = __webpack_require__(8); + var util = __webpack_require__(1); + var Component = __webpack_require__(26); + var TimeStep = __webpack_require__(30); + var DateUtil = __webpack_require__(27); + var moment = __webpack_require__(2); /** * A horizontal time axis @@ -20411,9 +20659,9 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; var keycharm = __webpack_require__(41); - var Emitter = __webpack_require__(19); - var Hammer = __webpack_require__(3); - var util = __webpack_require__(7); + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(20); + var util = __webpack_require__(1); /** * Turn an element into an clickToUse element. @@ -20768,10 +21016,10 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var Hammer = __webpack_require__(3); - var util = __webpack_require__(7); - var Component = __webpack_require__(28); - var moment = __webpack_require__(8); + var Hammer = __webpack_require__(20); + var util = __webpack_require__(1); + var Component = __webpack_require__(26); + var moment = __webpack_require__(2); var locales = __webpack_require__(43); /** @@ -21028,9 +21276,9 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var Component = __webpack_require__(28); - var moment = __webpack_require__(8); + var util = __webpack_require__(1); + var Component = __webpack_require__(26); + var moment = __webpack_require__(2); var locales = __webpack_require__(43); /** @@ -21219,7 +21467,7 @@ return /******/ (function(modules) { // webpackBootstrap var _ColorPicker2 = _interopRequireDefault(_ColorPicker); - var util = __webpack_require__(7); + var util = __webpack_require__(1); /** * 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. @@ -21248,6 +21496,8 @@ return /******/ (function(modules) { // webpackBootstrap this.allowCreation = false; this.options = {}; + this.initialized = false; + this.popupCounter = 0; this.defaultOptions = { enabled: false, filter: true, @@ -21259,6 +21509,9 @@ return /******/ (function(modules) { // webpackBootstrap this.configureOptions = configureOptions; this.moduleOptions = {}; this.domElements = []; + this.popupDiv = {}; + this.popupLimit = 5; + this.popupHistory = {}; this.colorPicker = new _ColorPicker2['default'](pixelRatio); this.wrapper = undefined; } @@ -21274,6 +21527,10 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function setOptions(options) { if (options !== undefined) { + // reset the popup history because the indices may have been changed. + this.popupHistory = {}; + this._removePopup(); + var enabled = true; if (typeof options === 'string') { this.options.filter = options; @@ -21366,20 +21623,20 @@ return /******/ (function(modules) { // webpackBootstrap if (this.options.showButton === true) { (function () { var generateButton = document.createElement('div'); - generateButton.className = 'vis-network-configuration button'; + generateButton.className = 'vis-configuration vis-config-button'; generateButton.innerHTML = 'generate options'; generateButton.onclick = function () { _this._printOptions(); }; generateButton.onmouseover = function () { - generateButton.className = 'vis-network-configuration button hover'; + generateButton.className = 'vis-configuration vis-config-button hover'; }; generateButton.onmouseout = function () { - generateButton.className = 'vis-network-configuration button'; + generateButton.className = 'vis-configuration vis-config-button'; }; _this.optionsContainer = document.createElement('div'); - _this.optionsContainer.className = 'vis-network-configuration vis-option-container'; + _this.optionsContainer.className = 'vis-configuration vis-config-option-container'; _this.domElements.push(_this.optionsContainer); _this.domElements.push(generateButton); @@ -21398,11 +21655,13 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function _push() { this.wrapper = document.createElement('div'); - this.wrapper.className = 'vis-network-configuration-wrapper'; + 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(); } }, { key: '_clean', @@ -21421,6 +21680,8 @@ return /******/ (function(modules) { // webpackBootstrap this.wrapper = undefined; } this.domElements = []; + + this._removePopup(); } }, { key: '_getValue', @@ -21459,9 +21720,9 @@ return /******/ (function(modules) { // webpackBootstrap if (this.allowCreation === true) { var _len, domElements, _key; - (function () { + var _ret2 = (function () { var item = document.createElement('div'); - item.className = 'vis-network-configuration item s' + path.length; + 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]; @@ -21471,8 +21732,14 @@ return /******/ (function(modules) { // webpackBootstrap item.appendChild(element); }); _this2.domElements.push(item); + return { + v: _this2.domElements.length + }; })(); + + if (typeof _ret2 === 'object') return _ret2.v; } + return 0; } }, { key: '_makeHeader', @@ -21484,7 +21751,7 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function _makeHeader(name) { var div = document.createElement('div'); - div.className = 'vis-network-configuration header'; + div.className = 'vis-configuration vis-config-header'; div.innerHTML = name; this._makeItem([], div); } @@ -21503,7 +21770,7 @@ return /******/ (function(modules) { // webpackBootstrap var objectLabel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; var div = document.createElement('div'); - div.className = 'vis-network-configuration label s' + path.length; + div.className = 'vis-configuration vis-config-label vis-config-s' + path.length; if (objectLabel === true) { div.innerHTML = '' + name + ':'; } else { @@ -21523,7 +21790,7 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function _makeDropdown(arr, value, path) { var select = document.createElement('select'); - select.className = 'vis-network-configuration select'; + select.className = 'vis-configuration vis-config-select'; var selectedValue = 0; if (value !== undefined) { if (arr.indexOf(value) !== -1) { @@ -21565,7 +21832,7 @@ return /******/ (function(modules) { // webpackBootstrap var max = arr[2]; var step = arr[3]; var range = document.createElement('input'); - range.className = 'vis-network-configuration range'; + range.className = 'vis-configuration vis-config-range'; try { range.type = 'range'; // not supported on IE9 range.min = min; @@ -21573,14 +21840,25 @@ return /******/ (function(modules) { // webpackBootstrap } catch (err) {} range.step = step; + // set up the popup settings in case they are needed. + var popupString = ''; + var popupValue = 0; + if (value !== undefined) { - if (value < 0 && value * 2 < min) { - range.min = value * 2; - } else if (value * 0.1 < min) { - range.min = value / 10; - } - if (value * 2 > max && max !== 1) { - range.max = value * 2; + 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 { @@ -21588,7 +21866,7 @@ return /******/ (function(modules) { // webpackBootstrap } var input = document.createElement('input'); - input.className = 'vis-network-configuration rangeinput'; + input.className = 'vis-configuration vis-config-rangeinput'; input.value = range.value; var me = this; @@ -21600,7 +21878,76 @@ return /******/ (function(modules) { // webpackBootstrap }; var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, range, input); + var itemIndex = this._makeItem(path, label, range, input); + + // 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); + } + } + }, { + key: '_setupPopup', + + /** + * prepare the popup + * @param string + * @param index + * @private + */ + 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 }; + } + } + }, { + key: '_removePopup', + + /** + * remove the popup from the dom + * @private + */ + 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 = {}; + } + } + }, { + key: '_showPopupIfNeeded', + + /** + * Show the popup if it is needed. + * @private + */ + 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); + } } }, { key: '_makeCheckbox', @@ -21615,7 +21962,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function _makeCheckbox(defaultValue, value, path) { var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; - checkbox.className = 'vis-network-configuration checkbox'; + checkbox.className = 'vis-configuration vis-config-checkbox'; checkbox.checked = defaultValue; if (value !== undefined) { checkbox.checked = value; @@ -21651,7 +21998,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function _makeTextInput(defaultValue, value, path) { var checkbox = document.createElement('input'); checkbox.type = 'text'; - checkbox.className = 'vis-network-configuration text'; + checkbox.className = 'vis-configuration vis-config-text'; checkbox.value = value; if (value !== defaultValue) { this.changedOptions.push({ path: path, value: value }); @@ -21676,22 +22023,22 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function _makeColorField(arr, value, path) { - var _this3 = this; + var _this5 = this; var defaultColor = arr[1]; var div = document.createElement('div'); value = value === undefined ? defaultColor : value; if (value !== 'none') { - div.className = 'vis-network-configuration colorBlock'; + div.className = 'vis-configuration vis-config-colorBlock'; div.style.backgroundColor = value; } else { - div.className = 'vis-network-configuration colorBlock none'; + div.className = 'vis-configuration vis-config-colorBlock none'; } value = value === undefined ? defaultColor : value; div.onclick = function () { - _this3._showColorPicker(value, div, path); + _this5._showColorPicker(value, div, path); }; var label = this._makeLabel(path[path.length - 1], path); @@ -21709,18 +22056,18 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function _showColorPicker(value, div, path) { - var _this4 = this; + var _this6 = this; var rect = div.getBoundingClientRect(); var bodyRect = document.body.getBoundingClientRect(); var pickerX = rect.left + rect.width + 5; - var pickerY = rect.top - bodyRect.top + rect.height * 0.5; + var pickerY = rect.top - bodyRect.top + rect.height + 2; this.colorPicker.show(pickerX, pickerY); this.colorPicker.setColor(value); this.colorPicker.setCallback(function (color) { var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')'; div.style.backgroundColor = colorString; - _this4._update(colorString, path); + _this6._update(colorString, path); }); } }, { @@ -21846,7 +22193,7 @@ return /******/ (function(modules) { // webpackBootstrap 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); } }, { @@ -21911,9 +22258,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var Hammer = __webpack_require__(3); - var hammerUtil = __webpack_require__(27); - var util = __webpack_require__(7); + var Hammer = __webpack_require__(20); + var hammerUtil = __webpack_require__(25); + var util = __webpack_require__(1); var ColorPicker = (function () { function ColorPicker() { @@ -22495,7 +22842,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var errorFound = false; var allOptions = undefined; @@ -22834,6 +23181,7 @@ return /******/ (function(modules) { // webpackBootstrap //globals : align: { string: string }, autoResize: { boolean: boolean }, + throttleRedraw: { number: number }, clickToUse: { boolean: boolean }, dataAttributes: { string: string, array: array }, editable: { @@ -22871,6 +23219,13 @@ return /******/ (function(modules) { // webpackBootstrap }, moment: { 'function': 'function' }, groupOrder: { string: string, 'function': 'function' }, + groupEditable: { + add: { boolean: boolean, 'undefined': 'undefined' }, + remove: { boolean: boolean, 'undefined': 'undefined' }, + order: { boolean: boolean, 'undefined': 'undefined' }, + __type__: { boolean: boolean, object: object } + }, + groupOrderSwap: { 'function': 'function' }, height: { string: string, number: number }, hiddenDates: { object: object, array: array }, locale: { string: string }, @@ -22898,6 +23253,9 @@ return /******/ (function(modules) { // webpackBootstrap onMove: { 'function': 'function' }, onMoving: { 'function': 'function' }, onRemove: { 'function': 'function' }, + onAddGroup: { 'function': 'function' }, + onMoveGroup: { 'function': 'function' }, + onRemoveGroup: { 'function': 'function' }, order: { 'function': 'function' }, orientation: { axis: { string: string, 'undefined': 'undefined' }, @@ -22932,6 +23290,7 @@ return /******/ (function(modules) { // webpackBootstrap global: { align: ['center', 'left', 'right'], autoResize: true, + throttleRedraw: 0, clickToUse: false, // dataAttributes: ['all'], // FIXME: can be 'all' or string[] editable: { @@ -22965,6 +23324,7 @@ return /******/ (function(modules) { // webpackBootstrap }, //groupOrder: {string, 'function': 'function'}, + groupsDraggable: false, height: '', //hiddenDates: {object, array}, locale: '', @@ -23021,14 +23381,14 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var Emitter = __webpack_require__(19); - var Hammer = __webpack_require__(3); - var moment = __webpack_require__(8); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var Range = __webpack_require__(26); - var Core = __webpack_require__(30); + var Emitter = __webpack_require__(12); + var Hammer = __webpack_require__(20); + var moment = __webpack_require__(2); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var Range = __webpack_require__(24); + var Core = __webpack_require__(28); var TimeAxis = __webpack_require__(39); var CurrentTime = __webpack_require__(44); var CustomTime = __webpack_require__(42); @@ -23360,11 +23720,11 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var DOMutil = __webpack_require__(13); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var Component = __webpack_require__(28); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(7); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); + var Component = __webpack_require__(26); var DataAxis = __webpack_require__(51); var GraphGroup = __webpack_require__(53); var Legend = __webpack_require__(57); @@ -24336,9 +24696,9 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var DOMutil = __webpack_require__(13); - var Component = __webpack_require__(28); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(7); + var Component = __webpack_require__(26); var DataStep = __webpack_require__(52); /** @@ -25167,8 +25527,8 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var DOMutil = __webpack_require__(13); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(7); var Line = __webpack_require__(54); var Bar = __webpack_require__(56); var Points = __webpack_require__(55); @@ -25233,7 +25593,7 @@ return /******/ (function(modules) { // webpackBootstrap */ GraphGroup.prototype.setOptions = function (options) { if (options !== undefined) { - var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart']; + var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'excludeFromLegend']; util.selectiveDeepExtend(fields, this.options, options); // if the group's drawPoints is a function delegate the callback to the onRender property @@ -25377,7 +25737,7 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var DOMutil = __webpack_require__(13); + var DOMutil = __webpack_require__(7); var Points = __webpack_require__(55); function Line(groupId, options) { @@ -25672,7 +26032,7 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var DOMutil = __webpack_require__(13); + var DOMutil = __webpack_require__(7); function Points(groupId, options) { this.groupId = groupId; @@ -25751,7 +26111,7 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var DOMutil = __webpack_require__(13); + var DOMutil = __webpack_require__(7); var Points = __webpack_require__(55); function Bargraph(groupId, options) { @@ -25878,7 +26238,13 @@ return /******/ (function(modules) { // webpackBootstrap DOMutil.drawBar(combinedData[i].x + drawData.offset, combinedData[i].y - heightOffset, drawData.width, group.zeroPosition - combinedData[i].y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); // draw points if (group.options.drawPoints.enabled === true) { - Points.draw([combinedData[i]], group, framework, drawData.offset); + var pointData = { + x: combinedData[i].x + drawData.offset, + y: combinedData[i].y - heightOffset, + groupId: combinedData[i].groupId, + label: combinedData[i].label + }; + Points.draw([pointData], group, framework, drawData.offset); //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg); } } @@ -25999,9 +26365,9 @@ return /******/ (function(modules) { // webpackBootstrap 'use strict'; - var util = __webpack_require__(7); - var DOMutil = __webpack_require__(13); - var Component = __webpack_require__(28); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(7); + var Component = __webpack_require__(26); /** * Legend for Graph2d @@ -26044,10 +26410,13 @@ return /******/ (function(modules) { // webpackBootstrap Legend.prototype.addGroup = function (label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; + // Include a group only if the group option 'excludeFromLegend: false' is not set. + if (graphOptions.options.excludeFromLegend != true) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; + } + this.amountOfGroups += 1; } - this.amountOfGroups += 1; }; Legend.prototype.updateGroup = function (label, graphOptions) { @@ -26315,6 +26684,7 @@ return /******/ (function(modules) { // webpackBootstrap }, autoResize: { boolean: boolean }, + throttleRedraw: { number: number }, clickToUse: { boolean: boolean }, end: { number: number, date: date, string: string, moment: moment }, format: { @@ -26431,6 +26801,7 @@ return /******/ (function(modules) { // webpackBootstrap }, autoResize: true, + throttleRedraw: 0, clickToUse: false, end: '', format: { @@ -26546,18 +26917,22 @@ return /******/ (function(modules) { // webpackBootstrap var _optionsJs = __webpack_require__(110); - __webpack_require__(111); + var _modulesKamadaKawaiJs = __webpack_require__(111); + + var _modulesKamadaKawaiJs2 = _interopRequireDefault(_modulesKamadaKawaiJs); - var Emitter = __webpack_require__(19); - var Hammer = __webpack_require__(3); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); - var dotparser = __webpack_require__(112); - var gephiParser = __webpack_require__(113); - var Images = __webpack_require__(114); + __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__(40); - var locales = __webpack_require__(115); + var locales = __webpack_require__(117); /** * @constructor Network @@ -26622,6 +26997,7 @@ return /******/ (function(modules) { // webpackBootstrap createEdge: function createEdge() {}, getPointer: function getPointer() {} }, + modules: {}, view: { scale: 1, translation: { x: 0, y: 0 } @@ -26649,6 +27025,9 @@ return /******/ (function(modules) { // webpackBootstrap 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.body.modules['clustering'] = this.clustering; + // create the DOM elements this.canvas._create(); @@ -26858,6 +27237,9 @@ return /******/ (function(modules) { // webpackBootstrap // emit change in data this.body.emitter.emit('_dataChanged'); + // emit data loaded + this.body.emitter.emit('_dataLoaded'); + // find a stable position or start animating to a stable position this.body.emitter.emit('initPhysics'); }; @@ -26994,7 +27376,7 @@ return /******/ (function(modules) { // webpackBootstrap return this.manipulation.editNode.apply(this.manipulation, arguments); }; Network.prototype.editNodeMode = function () { - console.log('Depricated: Please use editNode instead of editNodeMode.');return this.manipulation.editNode.apply(this.manipulation, arguments); + console.log('Deprecated: Please use editNode instead of editNodeMode.');return this.manipulation.editNode.apply(this.manipulation, arguments); }; Network.prototype.addEdgeMode = function () { return this.manipulation.addEdgeMode.apply(this.manipulation, arguments); @@ -27113,7 +27495,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); /** * @class Groups @@ -27265,9 +27647,9 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); var NodesHandler = (function () { function NodesHandler(body, images, groups, layoutEngine) { @@ -27412,7 +27794,7 @@ return /******/ (function(modules) { // webpackBootstrap } } - // update the shape size in all nodes + // update the font in all nodes if (options.font !== undefined) { _componentsSharedLabel2['default'].parseOptions(this.options.font, options); for (var nodeId in this.body.nodes) { @@ -27563,7 +27945,6 @@ return /******/ (function(modules) { // webpackBootstrap for (var i = 0; i < ids.length; i++) { var id = ids[i]; - nodes[id].cleanup(); delete nodes[id]; } @@ -27628,11 +28009,9 @@ return /******/ (function(modules) { // webpackBootstrap } } } else { - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - dataArray[nodeId] = { x: Math.round(node.x), y: Math.round(node.y) }; - } + 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) }; } } return dataArray; @@ -27833,7 +28212,7 @@ return /******/ (function(modules) { // webpackBootstrap var _sharedValidator2 = _interopRequireDefault(_sharedValidator); - var util = __webpack_require__(7); + var util = __webpack_require__(1); /** * @class Node @@ -27978,8 +28357,8 @@ return /******/ (function(modules) { // webpackBootstrap } } - this.updateShape(currentShape); this.updateLabelModule(); + this.updateShape(currentShape); if (options.hidden !== undefined || options.physics !== undefined) { return true; @@ -28001,12 +28380,8 @@ return /******/ (function(modules) { // webpackBootstrap key: 'updateShape', value: function updateShape(currentShape) { if (currentShape === this.options.shape && this.shape) { - this.shape.setOptions(this.options); + this.shape.setOptions(this.options, this.imageObj); } else { - // clean up the shape if it is already made so the new shape can start clean. - if (this.shape) { - this.shape.cleanup(); - } // choose draw method depending on the shape switch (this.options.shape) { case 'box': @@ -28218,16 +28593,6 @@ return /******/ (function(modules) { // webpackBootstrap value: function isBoundingBoxOverlappingWith(obj) { return this.shape.boundingBox.left < obj.right && this.shape.boundingBox.right > obj.left && this.shape.boundingBox.top < obj.bottom && this.shape.boundingBox.bottom > obj.top; } - }, { - key: 'cleanup', - - /** - * clean all required things on delete. - * @returns {*} - */ - value: function cleanup() { - return this.shape.cleanup(); - } }], [{ key: 'parseOptions', @@ -28304,7 +28669,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var Label = (function () { function Label(body, options) { @@ -28314,6 +28679,7 @@ return /******/ (function(modules) { // webpackBootstrap this.pointToSelf = false; this.baseSize = undefined; + this.fontOptions = {}; this.setOptions(options); this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 }; // could be cached } @@ -28323,16 +28689,20 @@ return /******/ (function(modules) { // webpackBootstrap value: function setOptions(options) { var allowDeletion = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; - this.options = options; + this.nodeOptions = options; + + // We want to keep the font options seperated from the node options. + // The node options have to mirror the globals when they are not overruled. + this.fontOptions = util.deepExtend({}, options.font, true); if (options.label !== undefined) { this.labelDirty = true; } if (options.font !== undefined) { - Label.parseOptions(this.options.font, options, allowDeletion); + Label.parseOptions(this.fontOptions, options, allowDeletion); if (typeof options.font === 'string') { - this.baseSize = this.options.font.size; + this.baseSize = this.fontOptions.size; } else if (typeof options.font === 'object') { if (options.font.size !== undefined) { this.baseSize = options.font.size; @@ -28355,11 +28725,11 @@ return /******/ (function(modules) { // webpackBootstrap var baseline = arguments.length <= 4 || arguments[4] === undefined ? 'middle' : arguments[4]; // if no label, return - if (this.options.label === undefined) return; + if (this.nodeOptions.label === undefined) return; // check if we have to render the label - var viewFontSize = this.options.font.size * this.body.view.scale; - if (this.options.label && viewFontSize < this.options.scaling.label.drawThreshold - 1) return; + var viewFontSize = this.fontOptions.size * this.body.view.scale; + if (this.nodeOptions.label && viewFontSize < this.nodeOptions.scaling.label.drawThreshold - 1) return; // update the size cache if required this.calculateLabelSize(ctx, selected, x, y, baseline); @@ -28378,12 +28748,12 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function _drawBackground(ctx) { - if (this.options.font.background !== undefined && this.options.font.background !== 'none') { - ctx.fillStyle = this.options.font.background; + if (this.fontOptions.background !== undefined && this.fontOptions.background !== 'none') { + ctx.fillStyle = this.fontOptions.background; var lineMargin = 2; - switch (this.options.font.align) { + 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; @@ -28412,11 +28782,11 @@ return /******/ (function(modules) { // webpackBootstrap value: function _drawText(ctx, selected, x, y) { var baseline = arguments.length <= 4 || arguments[4] === undefined ? 'middle' : arguments[4]; - var fontSize = this.options.font.size; + var fontSize = this.fontOptions.size; var viewFontSize = fontSize * this.body.view.scale; // this ensures that there will not be HUGE letters on screen by setting an upper limit on the visible text size (regardless of zoomLevel) - if (viewFontSize >= this.options.scaling.label.maxVisible) { - fontSize = Number(this.options.scaling.label.maxVisible) / this.body.view.scale; + if (viewFontSize >= this.nodeOptions.scaling.label.maxVisible) { + fontSize = Number(this.nodeOptions.scaling.label.maxVisible) / this.body.view.scale; } var yLine = this.size.yLine; @@ -28436,20 +28806,20 @@ return /******/ (function(modules) { // webpackBootstrap yLine = _setAlignment22[1]; // configure context for drawing the text - ctx.font = (selected && this.options.labelHighlightBold ? 'bold ' : '') + fontSize + 'px ' + this.options.font.face; + ctx.font = (selected && this.nodeOptions.labelHighlightBold ? 'bold ' : '') + fontSize + 'px ' + this.fontOptions.face; ctx.fillStyle = fontColor; ctx.textAlign = 'center'; // set the strokeWidth - if (this.options.font.strokeWidth > 0) { - ctx.lineWidth = this.options.font.strokeWidth; + if (this.fontOptions.strokeWidth > 0) { + ctx.lineWidth = this.fontOptions.strokeWidth; ctx.strokeStyle = strokeColor; ctx.lineJoin = 'round'; } // draw the text for (var i = 0; i < this.lineCount; i++) { - if (this.options.font.strokeWidth > 0) { + if (this.fontOptions.strokeWidth > 0) { ctx.strokeText(this.lines[i], x, yLine); } ctx.fillText(this.lines[i], x, yLine); @@ -28461,15 +28831,15 @@ return /******/ (function(modules) { // webpackBootstrap value: function _setAlignment(ctx, x, yLine, baseline) { // check for label alignment (for edges) // TODO: make alignment for nodes - if (this.options.font.align !== 'horizontal' && this.pointToSelf === false) { + if (this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) { x = 0; yLine = 0; var lineMargin = 2; - if (this.options.font.align === 'top') { + if (this.fontOptions.align === 'top') { ctx.textBaseline = 'alphabetic'; yLine -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers - } else if (this.options.font.align === 'bottom') { + } else if (this.fontOptions.align === 'bottom') { ctx.textBaseline = 'hanging'; yLine += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers } else { @@ -28493,10 +28863,10 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function _getColor(viewFontSize) { - var fontColor = this.options.font.color || '#000000'; - var strokeColor = this.options.font.strokeColor || '#ffffff'; - if (viewFontSize <= this.options.scaling.label.drawThreshold) { - var opacity = Math.max(0, Math.min(1, 1 - (this.options.scaling.label.drawThreshold - viewFontSize))); + var fontColor = this.fontOptions.color || '#000000'; + var strokeColor = this.fontOptions.strokeColor || '#ffffff'; + if (viewFontSize <= this.nodeOptions.scaling.label.drawThreshold) { + var opacity = Math.max(0, Math.min(1, 1 - (this.nodeOptions.scaling.label.drawThreshold - viewFontSize))); fontColor = util.overrideOpacity(fontColor, opacity); strokeColor = util.overrideOpacity(strokeColor, opacity); } @@ -28516,7 +28886,7 @@ return /******/ (function(modules) { // webpackBootstrap var size = { width: this._processLabel(ctx, selected), - height: this.options.font.size * this.lineCount, + height: this.fontOptions.size * this.lineCount, lineCount: this.lineCount }; return size; @@ -28540,12 +28910,12 @@ return /******/ (function(modules) { // webpackBootstrap if (this.labelDirty === true) { this.size.width = this._processLabel(ctx, selected); } - this.size.height = this.options.font.size * this.lineCount; + this.size.height = this.fontOptions.size * this.lineCount; this.size.left = x - this.size.width * 0.5; this.size.top = y - this.size.height * 0.5; - this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.options.font.size; + this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size; if (baseline === 'hanging') { - this.size.top += 0.5 * this.options.font.size; + this.size.top += 0.5 * this.fontOptions.size; this.size.top += 4; // distance from node, required because we use hanging. Hanging has less difference between browsers this.size.yLine += 4; // distance from node } @@ -28566,10 +28936,10 @@ return /******/ (function(modules) { // webpackBootstrap var width = 0; var lines = ['']; var lineCount = 0; - if (this.options.label !== undefined) { - lines = String(this.options.label).split('\n'); + if (this.nodeOptions.label !== undefined) { + lines = String(this.nodeOptions.label).split('\n'); lineCount = lines.length; - ctx.font = (selected && this.options.labelHighlightBold ? 'bold ' : '') + this.options.font.size + 'px ' + this.options.font.face; + ctx.font = (selected && this.nodeOptions.labelHighlightBold ? 'bold ' : '') + this.fontOptions.size + 'px ' + this.fontOptions.face; width = ctx.measureText(lines[0]).width; for (var i = 1; i < lineCount; i++) { var lineWidth = ctx.measureText(lines[i]).width; @@ -28804,11 +29174,6 @@ return /******/ (function(modules) { // webpackBootstrap } } } - }, { - key: 'cleanup', - - // possible cleanup for use in shapes - value: function cleanup() {} }]); return NodeBase; @@ -28943,6 +29308,14 @@ return /******/ (function(modules) { // webpackBootstrap } _createClass(CircleImageBase, [{ + key: 'setOptions', + value: function setOptions(options, imageObj) { + this.options = options; + if (imageObj) { + this.imageObj = imageObj; + } + } + }, { key: '_resizeImage', /** @@ -30163,9 +30536,9 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsSharedLabel2 = _interopRequireDefault(_componentsSharedLabel); - var util = __webpack_require__(7); - var DataSet = __webpack_require__(14); - var DataView = __webpack_require__(16); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(8); + var DataView = __webpack_require__(10); var EdgesHandler = (function () { function EdgesHandler(body, images, groups) { @@ -30596,15 +30969,15 @@ return /******/ (function(modules) { // webpackBootstrap var _sharedLabel2 = _interopRequireDefault(_sharedLabel); - var _edgesCubicBezierEdge = __webpack_require__(86); + var _edgesCubicBezierEdge = __webpack_require__(83); var _edgesCubicBezierEdge2 = _interopRequireDefault(_edgesCubicBezierEdge); - var _edgesBezierEdgeDynamic = __webpack_require__(88); + var _edgesBezierEdgeDynamic = __webpack_require__(87); var _edgesBezierEdgeDynamic2 = _interopRequireDefault(_edgesBezierEdgeDynamic); - var _edgesBezierEdgeStatic = __webpack_require__(83); + var _edgesBezierEdgeStatic = __webpack_require__(88); var _edgesBezierEdgeStatic2 = _interopRequireDefault(_edgesBezierEdgeStatic); @@ -30612,7 +30985,7 @@ return /******/ (function(modules) { // webpackBootstrap var _edgesStraightEdge2 = _interopRequireDefault(_edgesStraightEdge); - var util = __webpack_require__(7); + var util = __webpack_require__(1); /** * @class Edge @@ -31159,9 +31532,11 @@ return /******/ (function(modules) { // webpackBootstrap 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 _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; desc = parent = getter = undefined; _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; 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 _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } @@ -31169,20 +31544,20 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilBezierEdgeBase = __webpack_require__(84); + var _utilCubicBezierEdgeBase = __webpack_require__(84); - var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); + var _utilCubicBezierEdgeBase2 = _interopRequireDefault(_utilCubicBezierEdgeBase); - var BezierEdgeStatic = (function (_BezierEdgeBase) { - _inherits(BezierEdgeStatic, _BezierEdgeBase); + var CubicBezierEdge = (function (_CubicBezierEdgeBase) { + _inherits(CubicBezierEdge, _CubicBezierEdgeBase); - function BezierEdgeStatic(options, body, labelModule) { - _classCallCheck(this, BezierEdgeStatic); + function CubicBezierEdge(options, body, labelModule) { + _classCallCheck(this, CubicBezierEdge); - _get(Object.getPrototypeOf(BezierEdgeStatic.prototype), 'constructor', this).call(this, options, body, labelModule); + _get(Object.getPrototypeOf(CubicBezierEdge.prototype), 'constructor', this).call(this, options, body, labelModule); } - _createClass(BezierEdgeStatic, [{ + _createClass(CubicBezierEdge, [{ key: '_line', /** @@ -31191,18 +31566,27 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function _line(ctx) { - // draw a straight line + // get the coordinates of the support points. + + var _getViaCoordinates2 = this._getViaCoordinates(); + + var _getViaCoordinates22 = _slicedToArray(_getViaCoordinates2, 2); + + var via1 = _getViaCoordinates22[0]; + var via2 = _getViaCoordinates22[1]; + + var returnValue = [via1, via2]; + + // start drawing the line. ctx.beginPath(); ctx.moveTo(this.from.x, this.from.y); - var via = this._getViaCoordinates(); - var returnValue = via; // fallback to normal straight edges - if (via.x === undefined) { + if (via1.x === undefined) { ctx.lineTo(this.to.x, this.to.y); returnValue = undefined; } else { - ctx.quadraticCurveTo(via.x, via.y, this.to.x, this.to.y); + ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.to.x, this.to.y); } // draw shadow if enabled this.enableShadow(ctx); @@ -31213,173 +31597,46 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_getViaCoordinates', value: function _getViaCoordinates() { - var xVia = undefined; - var yVia = undefined; - var factor = this.options.smooth.roundness; - var type = this.options.smooth.type; - var dx = Math.abs(this.from.x - this.to.x); - var dy = Math.abs(this.from.y - this.to.y); - if (type === 'discrete' || type === 'diagonalCross') { - if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { - if (this.from.y >= this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - } - } else if (this.from.y < this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - } - } - if (type === 'discrete') { - xVia = dx < factor * dy ? this.from.x : xVia; - } - } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y >= this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - } - } else if (this.from.y < this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - } - } - if (type === 'discrete') { - yVia = dy < factor * dx ? this.from.y : yVia; - } - } - } else if (type === 'straightCross') { - if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { - // up - down - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1 - factor) * dy; - } else { - yVia = this.to.y + (1 - factor) * dy; - } - } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - // left - right - if (this.from.x < this.to.x) { - xVia = this.to.x - (1 - factor) * dx; - } else { - xVia = this.to.x + (1 - factor) * dx; - } - yVia = this.from.y; - } - } else if (type === 'horizontal') { - if (this.from.x < this.to.x) { - xVia = this.to.x - (1 - factor) * dx; - } else { - xVia = this.to.x + (1 - factor) * dx; - } - yVia = this.from.y; - } else if (type === 'vertical') { - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1 - factor) * dy; - } else { - yVia = this.to.y + (1 - factor) * dy; - } - } else if (type === 'curvedCW') { - 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 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); - } 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 dx = this.from.x - this.to.x; + var dy = this.from.y - this.to.y; - var originalAngle = Math.atan2(dy, dx); - var myAngle = (originalAngle + (-factor * 0.5 + 0.5) * pi) % (2 * pi); + var x1 = undefined, + y1 = undefined, + x2 = undefined, + y2 = undefined; + var roundness = this.options.smooth.roundness;; - 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); + // horizontal if x > y or if direction is forced or if direction is horizontal + if ((Math.abs(dx) > Math.abs(dy) || this.options.smooth.forceDirection === true || this.options.smooth.forceDirection === 'horizontal') && this.options.smooth.forceDirection !== 'vertical') { + y1 = this.from.y; + y2 = this.to.y; + x1 = this.from.x - roundness * dx; + x2 = this.to.x + roundness * dx; } else { - // continuous - if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { - if (this.from.y >= this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x > xVia ? this.to.x : xVia; - } - } else if (this.from.y < this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x > xVia ? this.to.x : xVia; - } - } - } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y >= this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - } else if (this.from.y < this.to.y) { - if (this.from.x <= this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - } - } + y1 = this.from.y - roundness * dy; + y2 = this.to.y + roundness * dy; + x1 = this.from.x; + x2 = this.to.x; } - return { x: xVia, y: yVia }; + + return [{ x: x1, y: y1 }, { x: x2, y: y2 }]; } }, { key: '_findBorderPosition', value: function _findBorderPosition(nearNode, ctx) { - var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - return this._findBorderPositionBezier(nearNode, ctx, options.via); + return this._findBorderPositionBezier(nearNode, ctx); } }, { key: '_getDistanceToEdge', value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { - var via = arguments.length <= 6 || arguments[6] === undefined ? this._getViaCoordinates() : arguments[6]; + var _ref = arguments.length <= 6 || arguments[6] === undefined ? this._getViaCoordinates() : arguments[6]; + + var _ref2 = _slicedToArray(_ref, 2); + + var via1 = _ref2[0]; + var via2 = _ref2[1]; // x3,y3 is the point - return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via); + return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2); } }, { key: 'getPoint', @@ -31392,20 +31649,30 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ value: function getPoint(percentage) { - var via = arguments.length <= 1 || arguments[1] === undefined ? this._getViaCoordinates() : arguments[1]; + var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? this._getViaCoordinates() : arguments[1]; + + var _ref32 = _slicedToArray(_ref3, 2); + + var via1 = _ref32[0]; + var via2 = _ref32[1]; var t = percentage; - var x = Math.pow(1 - t, 2) * this.from.x + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * this.to.x; - var y = Math.pow(1 - t, 2) * this.from.y + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * this.to.y; + var vec = []; + vec[0] = Math.pow(1 - t, 3); + vec[1] = 3 * t * Math.pow(1 - t, 2); + vec[2] = 3 * Math.pow(t, 2) * (1 - t); + vec[3] = Math.pow(t, 3); + var x = vec[0] * this.from.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.to.x; + var y = vec[0] * this.from.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.to.y; return { x: x, y: y }; } }]); - return BezierEdgeStatic; - })(_utilBezierEdgeBase2['default']); + return CubicBezierEdge; + })(_utilCubicBezierEdgeBase2['default']); - exports['default'] = BezierEdgeStatic; + exports['default'] = CubicBezierEdge; module.exports = exports['default']; /***/ }, @@ -31420,6 +31687,92 @@ return /******/ (function(modules) { // webpackBootstrap 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; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + 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) subClass.__proto__ = superClass; } + + var _BezierEdgeBase2 = __webpack_require__(85); + + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); + + 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); + } + + _createClass(CubicBezierEdgeBase, [{ + key: '_getDistanceToBezierEdge', + + /** + * Calculate the distance between a point (x3,y3) and a line segment from + * (x1,y1) to (x2,y2). + * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment + * https://en.wikipedia.org/wiki/B%C3%A9zier_curve + * @param {number} x1 from x + * @param {number} y1 from y + * @param {number} x2 to x + * @param {number} y2 to y + * @param {number} x3 point to check x + * @param {number} y3 point to check y + * @private + */ + 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 lastX = x1; + var lastY = y1; + var vec = [0, 0, 0, 0]; + for (i = 1; i < 10; i++) { + t = 0.1 * i; + vec[0] = Math.pow(1 - t, 3); + vec[1] = 3 * t * Math.pow(1 - t, 2); + vec[2] = 3 * Math.pow(t, 2) * (1 - t); + vec[3] = Math.pow(t, 3); + x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2; + y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2; + if (i > 0) { + distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3); + minDistance = distance < minDistance ? distance : minDistance; + } + lastX = x; + lastY = y; + } + + return minDistance; + } + }]); + + return CubicBezierEdgeBase; + })(_BezierEdgeBase3['default']); + + exports['default'] = CubicBezierEdgeBase; + module.exports = exports['default']; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } @@ -31428,7 +31781,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _EdgeBase2 = __webpack_require__(85); + var _EdgeBase2 = __webpack_require__(86); var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); @@ -31552,7 +31905,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports['default']; /***/ }, -/* 85 */ +/* 86 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -31567,7 +31920,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var EdgeBase = (function () { function EdgeBase(options, body, labelModule) { @@ -32139,266 +32492,27 @@ return /******/ (function(modules) { // webpackBootstrap exports['default'] = EdgeBase; module.exports = exports['default']; -/***/ }, -/* 86 */ -/***/ function(module, exports, __webpack_require__) { - - '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 _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; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - - 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) subClass.__proto__ = superClass; } - - var _utilCubicBezierEdgeBase = __webpack_require__(87); - - var _utilCubicBezierEdgeBase2 = _interopRequireDefault(_utilCubicBezierEdgeBase); - - 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); - } - - _createClass(CubicBezierEdge, [{ - key: '_line', - - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ - value: function _line(ctx) { - // get the coordinates of the support points. - - var _getViaCoordinates2 = this._getViaCoordinates(); - - var _getViaCoordinates22 = _slicedToArray(_getViaCoordinates2, 2); - - var via1 = _getViaCoordinates22[0]; - var via2 = _getViaCoordinates22[1]; - - var returnValue = [via1, via2]; - - // start drawing the line. - ctx.beginPath(); - ctx.moveTo(this.from.x, this.from.y); - - // fallback to normal straight edges - if (via1.x === undefined) { - ctx.lineTo(this.to.x, this.to.y); - returnValue = undefined; - } else { - ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.to.x, this.to.y); - } - // draw shadow if enabled - this.enableShadow(ctx); - ctx.stroke(); - this.disableShadow(ctx); - return returnValue; - } - }, { - key: '_getViaCoordinates', - value: function _getViaCoordinates() { - 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 roundness = this.options.smooth.roundness;; - - // horizontal if x > y or if direction is forced or if direction is horizontal - if ((Math.abs(dx) > Math.abs(dy) || this.options.smooth.forceDirection === true || this.options.smooth.forceDirection === 'horizontal') && this.options.smooth.forceDirection !== 'vertical') { - y1 = this.from.y; - y2 = this.to.y; - x1 = this.from.x - roundness * dx; - x2 = this.to.x + roundness * dx; - } else { - y1 = this.from.y - roundness * dy; - y2 = this.to.y + roundness * dy; - x1 = this.from.x; - x2 = this.to.x; - } - - return [{ x: x1, y: y1 }, { x: x2, y: y2 }]; - } - }, { - key: '_findBorderPosition', - value: function _findBorderPosition(nearNode, ctx) { - return this._findBorderPositionBezier(nearNode, ctx); - } - }, { - key: '_getDistanceToEdge', - value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { - var _ref = arguments.length <= 6 || arguments[6] === undefined ? this._getViaCoordinates() : arguments[6]; - - var _ref2 = _slicedToArray(_ref, 2); - - var via1 = _ref2[0]; - var via2 = _ref2[1]; - // x3,y3 is the point - return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2); - } - }, { - key: 'getPoint', - - /** - * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way - * @param percentage - * @param via - * @returns {{x: number, y: number}} - * @private - */ - value: function getPoint(percentage) { - var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? this._getViaCoordinates() : arguments[1]; - - var _ref32 = _slicedToArray(_ref3, 2); - - var via1 = _ref32[0]; - var via2 = _ref32[1]; - - var t = percentage; - var vec = []; - vec[0] = Math.pow(1 - t, 3); - vec[1] = 3 * t * Math.pow(1 - t, 2); - vec[2] = 3 * Math.pow(t, 2) * (1 - t); - vec[3] = Math.pow(t, 3); - var x = vec[0] * this.from.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.to.x; - var y = vec[0] * this.from.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.to.y; - - return { x: x, y: y }; - } - }]); - - return CubicBezierEdge; - })(_utilCubicBezierEdgeBase2['default']); - - exports['default'] = CubicBezierEdge; - module.exports = exports['default']; - /***/ }, /* 87 */ /***/ function(module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true - }); - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - - 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) subClass.__proto__ = superClass; } - - var _BezierEdgeBase2 = __webpack_require__(84); - - var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - - 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); - } - - _createClass(CubicBezierEdgeBase, [{ - key: '_getDistanceToBezierEdge', - - /** - * Calculate the distance between a point (x3,y3) and a line segment from - * (x1,y1) to (x2,y2). - * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment - * https://en.wikipedia.org/wiki/B%C3%A9zier_curve - * @param {number} x1 from x - * @param {number} y1 from y - * @param {number} x2 to x - * @param {number} y2 to y - * @param {number} x3 point to check x - * @param {number} y3 point to check y - * @private - */ - 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 lastX = x1; - var lastY = y1; - var vec = [0, 0, 0, 0]; - for (i = 1; i < 10; i++) { - t = 0.1 * i; - vec[0] = Math.pow(1 - t, 3); - vec[1] = 3 * t * Math.pow(1 - t, 2); - vec[2] = 3 * Math.pow(t, 2) * (1 - t); - vec[3] = Math.pow(t, 3); - x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2; - y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2; - if (i > 0) { - distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3); - minDistance = distance < minDistance ? distance : minDistance; - } - lastX = x; - lastY = y; - } - - return minDistance; - } - }]); - - return CubicBezierEdgeBase; - })(_BezierEdgeBase3['default']); - - exports['default'] = CubicBezierEdgeBase; - module.exports = exports['default']; - -/***/ }, -/* 88 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; + "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; desc = parent = getter = undefined; _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; 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 _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _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; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - 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 _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) subClass.__proto__ = superClass; } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilBezierEdgeBase = __webpack_require__(84); + var _utilBezierEdgeBase = __webpack_require__(85); var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); @@ -32406,14 +32520,20 @@ return /******/ (function(modules) { // webpackBootstrap _inherits(BezierEdgeDynamic, _BezierEdgeBase); function BezierEdgeDynamic(options, body, labelModule) { + var _this = this; + _classCallCheck(this, BezierEdgeDynamic); //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 + _get(Object.getPrototypeOf(BezierEdgeDynamic.prototype), "constructor", this).call(this, options, body, labelModule); // --> this calls the setOptions below + this._boundFunction = function () { + _this.positionBezierNode(); + }; + this.body.emitter.on("_repositionBezierNodes", this._boundFunction); } _createClass(BezierEdgeDynamic, [{ - key: 'setOptions', + key: "setOptions", value: function setOptions(options) { this.options = options; this.id = this.options.id; @@ -32427,7 +32547,7 @@ return /******/ (function(modules) { // webpackBootstrap this.connect(); } }, { - key: 'connect', + key: "connect", value: function connect() { this.from = this.body.nodes[this.options.from]; this.to = this.body.nodes[this.options.to]; @@ -32443,13 +32563,14 @@ return /******/ (function(modules) { // webpackBootstrap } } }, { - key: 'cleanup', + key: "cleanup", /** * remove the support nodes * @returns {boolean} */ value: function cleanup() { + this.body.emitter.off("_repositionBezierNodes", this._boundFunction); if (this.via !== undefined) { delete this.body.nodes[this.via.id]; this.via = undefined; @@ -32458,7 +32579,7 @@ return /******/ (function(modules) { // webpackBootstrap return false; } }, { - key: 'setupSupportNode', + key: "setupSupportNode", /** * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but @@ -32469,10 +32590,10 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function setupSupportNode() { if (this.via === undefined) { - var nodeId = 'edgeId:' + this.id; + var nodeId = "edgeId:" + this.id; var node = this.body.functions.createNode({ id: nodeId, - shape: 'circle', + shape: "circle", physics: true, hidden: true }); @@ -32483,7 +32604,7 @@ return /******/ (function(modules) { // webpackBootstrap } } }, { - key: 'positionBezierNode', + key: "positionBezierNode", value: function positionBezierNode() { if (this.via !== undefined && this.from !== undefined && this.to !== undefined) { this.via.x = 0.5 * (this.from.x + this.to.x); @@ -32494,7 +32615,7 @@ return /******/ (function(modules) { // webpackBootstrap } } }, { - key: '_line', + key: "_line", /** * Draw a line between two nodes @@ -32513,7 +32634,7 @@ return /******/ (function(modules) { // webpackBootstrap return this.via; } }, { - key: 'getPoint', + key: "getPoint", /** * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way @@ -32530,12 +32651,12 @@ return /******/ (function(modules) { // webpackBootstrap return { x: x, y: y }; } }, { - key: '_findBorderPosition', + key: "_findBorderPosition", value: function _findBorderPosition(nearNode, ctx) { return this._findBorderPositionBezier(nearNode, ctx, this.via); } }, { - key: '_getDistanceToEdge', + key: "_getDistanceToEdge", value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { // x3,y3 is the point return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via); @@ -32543,9 +32664,268 @@ return /******/ (function(modules) { // webpackBootstrap }]); return BezierEdgeDynamic; + })(_utilBezierEdgeBase2["default"]); + + exports["default"] = BezierEdgeDynamic; + module.exports = exports["default"]; + +/***/ }, +/* 88 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; desc = parent = getter = undefined; _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; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + 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) subClass.__proto__ = superClass; } + + var _utilBezierEdgeBase = __webpack_require__(85); + + var _utilBezierEdgeBase2 = _interopRequireDefault(_utilBezierEdgeBase); + + 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); + } + + _createClass(BezierEdgeStatic, [{ + key: '_line', + + /** + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private + */ + value: function _line(ctx) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.from.x, this.from.y); + var via = this._getViaCoordinates(); + var returnValue = via; + + // fallback to normal straight edges + if (via.x === undefined) { + ctx.lineTo(this.to.x, this.to.y); + returnValue = undefined; + } else { + ctx.quadraticCurveTo(via.x, via.y, this.to.x, this.to.y); + } + // draw shadow if enabled + this.enableShadow(ctx); + ctx.stroke(); + this.disableShadow(ctx); + return returnValue; + } + }, { + key: '_getViaCoordinates', + value: function _getViaCoordinates() { + var xVia = undefined; + var yVia = undefined; + var factor = this.options.smooth.roundness; + var type = this.options.smooth.type; + var dx = Math.abs(this.from.x - this.to.x); + var dy = Math.abs(this.from.y - this.to.y); + if (type === 'discrete' || type === 'diagonalCross') { + if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { + if (this.from.y >= this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + } + } else if (this.from.y < this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + } + } + if (type === 'discrete') { + xVia = dx < factor * dy ? this.from.x : xVia; + } + } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y >= this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + } + } else if (this.from.y < this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + } + } + if (type === 'discrete') { + yVia = dy < factor * dx ? this.from.y : yVia; + } + } + } else if (type === 'straightCross') { + if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { + // up - down + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1 - factor) * dy; + } else { + yVia = this.to.y + (1 - factor) * dy; + } + } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + // left - right + if (this.from.x < this.to.x) { + xVia = this.to.x - (1 - factor) * dx; + } else { + xVia = this.to.x + (1 - factor) * dx; + } + yVia = this.from.y; + } + } else if (type === 'horizontal') { + if (this.from.x < this.to.x) { + xVia = this.to.x - (1 - factor) * dx; + } else { + xVia = this.to.x + (1 - factor) * dx; + } + yVia = this.from.y; + } else if (type === 'vertical') { + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1 - factor) * dy; + } else { + yVia = this.to.y + (1 - factor) * dy; + } + } else if (type === 'curvedCW') { + 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 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); + } 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 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); + } else { + // continuous + if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) { + if (this.from.y >= this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x > xVia ? this.to.x : xVia; + } + } else if (this.from.y < this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x > xVia ? this.to.x : xVia; + } + } + } else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y >= this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } + } else if (this.from.y < this.to.y) { + if (this.from.x <= this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } + } + } + } + return { x: xVia, y: yVia }; + } + }, { + key: '_findBorderPosition', + value: function _findBorderPosition(nearNode, ctx) { + var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; + + return this._findBorderPositionBezier(nearNode, ctx, options.via); + } + }, { + key: '_getDistanceToEdge', + value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { + var via = arguments.length <= 6 || arguments[6] === undefined ? this._getViaCoordinates() : arguments[6]; + // x3,y3 is the point + return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via); + } + }, { + key: 'getPoint', + + /** + * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way + * @param percentage + * @param via + * @returns {{x: number, y: number}} + * @private + */ + value: function getPoint(percentage) { + var via = arguments.length <= 1 || arguments[1] === undefined ? this._getViaCoordinates() : arguments[1]; + + var t = percentage; + var x = Math.pow(1 - t, 2) * this.from.x + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * this.to.x; + var y = Math.pow(1 - t, 2) * this.from.y + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * this.to.y; + + return { x: x, y: y }; + } + }]); + + return BezierEdgeStatic; })(_utilBezierEdgeBase2['default']); - exports['default'] = BezierEdgeDynamic; + exports['default'] = BezierEdgeStatic; module.exports = exports['default']; /***/ }, @@ -32568,7 +32948,7 @@ return /******/ (function(modules) { // webpackBootstrap function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } - var _utilEdgeBase = __webpack_require__(85); + var _utilEdgeBase = __webpack_require__(86); var _utilEdgeBase2 = _interopRequireDefault(_utilEdgeBase); @@ -32701,7 +33081,7 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsPhysicsFA2BasedCentralGravitySolver2 = _interopRequireDefault(_componentsPhysicsFA2BasedCentralGravitySolver); - var util = __webpack_require__(7); + var util = __webpack_require__(1); var PhysicsEngine = (function () { function PhysicsEngine(body) { @@ -32714,9 +33094,15 @@ return /******/ (function(modules) { // webpackBootstrap this.simulationInterval = 1000 / 60; this.requiresTimeout = true; this.previousStates = {}; + this.referenceState = {}; this.freezeCache = {}; this.renderTimer = undefined; - this.initialStabilizationEmitted = false; + + // parameters for the adaptive timestep + this.adaptiveTimestep = false; + this.adaptiveTimestepEnabled = false; + this.adaptiveCounter = 0; + this.adaptiveInterval = 3; this.stabilized = false; this.startedStabilization = false; @@ -32761,7 +33147,7 @@ return /******/ (function(modules) { // webpackBootstrap damping: 0.09 }, maxVelocity: 50, - minVelocity: 0.1, // px/s + minVelocity: 0.75, // px/s solver: 'barnesHut', stabilization: { enabled: true, @@ -32770,9 +33156,11 @@ return /******/ (function(modules) { // webpackBootstrap onlyDynamicEdges: false, fit: true }, - timestep: 0.5 + timestep: 0.5, + adaptiveTimestep: true }; util.extend(this.options, this.defaultOptions); + this.timestep = 0.5; this.bindEventListeners(); } @@ -32812,6 +33200,11 @@ return /******/ (function(modules) { // webpackBootstrap } }, { key: 'setOptions', + + /** + * set the physics options + * @param options + */ value: function setOptions(options) { if (options !== undefined) { if (options === false) { @@ -32831,12 +33224,19 @@ return /******/ (function(modules) { // webpackBootstrap this.physicsEnabled = false; this.stopSimulation(); } + + // set the timestep + this.timestep = this.options.timestep; } } this.init(); } }, { key: 'init', + + /** + * configure the engine. + */ value: function init() { var options; if (this.options.solver === 'forceAtlas2Based') { @@ -32866,6 +33266,10 @@ return /******/ (function(modules) { // webpackBootstrap } }, { key: 'initPhysics', + + /** + * initialize the engine + */ value: function initPhysics() { if (this.physicsEnabled === true && this.options.enabled === true) { if (this.options.stabilization.enabled === true) { @@ -32873,7 +33277,7 @@ return /******/ (function(modules) { // webpackBootstrap } else { this.stabilized = false; this.ready = true; - this.body.emitter.emit('fit', {}, true); + this.body.emitter.emit('fit', {}, false); this.startSimulation(); } } else { @@ -32891,6 +33295,9 @@ return /******/ (function(modules) { // webpackBootstrap if (this.physicsEnabled === true && this.options.enabled === true) { this.stabilized = false; + // when visible, adaptivity is disabled. + this.adaptiveTimestep = false; + // this sets the width of all nodes initially which could be required for the avoidOverlap this.body.emitter.emit('_resizeNodes'); if (this.viewFunction === undefined) { @@ -32945,24 +33352,20 @@ return /******/ (function(modules) { // webpackBootstrap } if (this.stabilized === true) { - if (this.stabilizationIterations > 1) { - // trigger the 'stabilized' event. - // The event is triggered on the next tick, to prevent the case that - // it is fired while initializing the Network, in which case you would not - // be able to catch it - this.startedStabilization = false; - //this._emitStabilized(); - } this.stopSimulation(); } } }, { key: '_emitStabilized', + + /** + * trigger the stabilized event. + * @private + */ value: function _emitStabilized() { var _this2 = this; - if (this.stabilizationIterations > 1 || this.initialStabilizationEmitted === false) { - this.initialStabilizationEmitted = true; + if (this.stabilizationIterations > 1) { setTimeout(function () { _this2.body.emitter.emit('stabilized', { iterations: _this2.stabilizationIterations }); _this2.stabilizationIterations = 0; @@ -32979,8 +33382,59 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function physicsTick() { if (this.stabilized === false) { - this.calculateForces(); - this.stabilized = this.moveNodes(); + // adaptivity means the timestep adapts to the situation, only applicable for stabilization + if (this.adaptiveTimestep === true && this.adaptiveTimestepEnabled === true) { + // this is the factor for increasing the timestep on success. + var factor = 1.2; + + // we assume the adaptive interval is + if (this.adaptiveCounter % this.adaptiveInterval === 0) { + // we leave the timestep stable for "interval" iterations. + // first the big step and revert. Revert saves the reference state. + this.timestep = 2 * this.timestep; + this.calculateForces(); + this.moveNodes(); + this.revert(); + + // now the normal step. Since this is the last step, it is the more stable one and we will take this. + this.timestep = 0.5 * this.timestep; + + // since it's half the step, we do it twice. + this.calculateForces(); + this.moveNodes(); + this.calculateForces(); + this.moveNodes(); + + // we compare the two steps. if it is acceptable we double the step. + if (this._evaluateStepQuality() === true) { + this.timestep = factor * this.timestep; + } else { + // if not, we decrease the step to a minimum of the options timestep. + // if the decreased timestep is smaller than the options step, we do not reset the counter + // we assume that the options timestep is stable enough. + if (this.timestep / factor < this.options.timestep) { + this.timestep = this.options.timestep; + } else { + // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure + // that large instabilities do not form. + this.adaptiveCounter = -1; // check again next iteration + this.timestep = Math.max(this.options.timestep, this.timestep / factor); + } + } + } else { + // normal step, keeping timestep constant + this.calculateForces(); + this.moveNodes(); + } + + // increment the counter + this.adaptiveCounter += 1; + } else { + // case for the static timestep, we reset it to the one in options and take a normal step. + this.timestep = this.options.timestep; + this.calculateForces(); + this.moveNodes(); + } // determine if the network has stabilzied if (this.stabilized === true) { @@ -33057,11 +33511,15 @@ return /******/ (function(modules) { // webpackBootstrap var nodeIds = Object.keys(this.previousStates); var nodes = this.body.nodes; var velocities = this.physicsBody.velocities; + this.referenceState = {}; for (var i = 0; i < nodeIds.length; i++) { var nodeId = nodeIds[i]; if (nodes[nodeId] !== undefined) { if (nodes[nodeId].options.physics === true) { + this.referenceState[nodeId] = { + positions: { x: nodes[nodeId].x, y: nodes[nodeId].y } + }; velocities[nodeId].x = this.previousStates[nodeId].vx; velocities[nodeId].y = this.previousStates[nodeId].vy; nodes[nodeId].x = this.previousStates[nodeId].x; @@ -33072,6 +33530,34 @@ return /******/ (function(modules) { // webpackBootstrap } } } + }, { + key: '_evaluateStepQuality', + + /** + * This compares the reference state to the current state + */ + value: function _evaluateStepQuality() { + var dx = undefined, + dy = undefined, + dpos = undefined; + var nodes = this.body.nodes; + var reference = this.referenceState; + var posThreshold = 0.3; + + for (var nodeId in this.referenceState) { + if (this.referenceState.hasOwnProperty(nodeId) && nodes[nodeId] !== undefined) { + dx = nodes[nodeId].x - reference[nodeId].positions.x; + dy = nodes[nodeId].y - reference[nodeId].positions.y; + + dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); + + if (dpos > posThreshold) { + return false; + } + } + } + return true; + } }, { key: 'moveNodes', @@ -33080,28 +33566,25 @@ return /******/ (function(modules) { // webpackBootstrap * @returns {boolean} */ value: function moveNodes() { - var nodesPresent = false; var nodeIndices = this.physicsBody.physicsNodeIndices; var maxVelocity = this.options.maxVelocity ? this.options.maxVelocity : 1e9; - var stabilized = true; - var vminCorrected = this.options.minVelocity / Math.max(this.body.view.scale, 0.05); + var maxNodeVelocity = 0; + var averageNodeVelocity = 0; + + // the velocity threshold (energy in the system) for the adaptivity toggle + var velocityAdaptiveThreshold = 5; for (var i = 0; i < nodeIndices.length; i++) { var nodeId = nodeIndices[i]; var nodeVelocity = this._performStep(nodeId, maxVelocity); // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized - stabilized = nodeVelocity < vminCorrected && stabilized === true; - nodesPresent = true; + maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity); + averageNodeVelocity += nodeVelocity; } - if (nodesPresent === true) { - if (vminCorrected > 0.5 * this.options.maxVelocity) { - return false; - } else { - return stabilized; - } - } - return true; + // evaluating the stabilized and adaptiveTimestepEnabled conditions + this.adaptiveTimestepEnabled = averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold; + this.stabilized = maxNodeVelocity < this.options.minVelocity; } }, { key: '_performStep', @@ -33116,7 +33599,7 @@ return /******/ (function(modules) { // webpackBootstrap */ value: function _performStep(nodeId, maxVelocity) { var node = this.body.nodes[nodeId]; - var timestep = this.options.timestep; + var timestep = this.timestep; var forces = this.physicsBody.forces; var velocities = this.physicsBody.velocities; @@ -33222,6 +33705,9 @@ return /******/ (function(modules) { // webpackBootstrap return; } + // enable adaptive timesteps + this.adaptiveTimestep = true && this.options.adaptiveTimestep; + // this sets the width of all nodes initially which could be required for the avoidOverlap this.body.emitter.emit('_resizeNodes'); @@ -33247,11 +33733,15 @@ return /******/ (function(modules) { // webpackBootstrap } }, { key: '_stabilizationBatch', + + /** + * One batch of stabilization + * @private + */ value: function _stabilizationBatch() { var count = 0; while (this.stabilized === false && count < this.options.stabilization.updateInterval && this.stabilizationIterations < this.targetIterations) { this.physicsTick(); - this.stabilizationIterations++; count++; } @@ -33264,6 +33754,11 @@ return /******/ (function(modules) { // webpackBootstrap } }, { key: '_finalizeStabilization', + + /** + * Wrap up the stabilization, fit and emit the events. + * @private + */ value: function _finalizeStabilization() { this.body.emitter.emit('_allowRedraw'); if (this.options.stabilization.fit === true) { @@ -34436,7 +34931,7 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsNodesCluster2 = _interopRequireDefault(_componentsNodesCluster); - var util = __webpack_require__(7); + var util = __webpack_require__(1); var ClusterEngine = (function () { function ClusterEngine(body) { @@ -34486,8 +34981,9 @@ return /******/ (function(modules) { // webpackBootstrap } for (var i = 0; i < nodesToCluster.length; i++) { - this.clusterByConnection(nodesToCluster[i], options, false); + this.clusterByConnection(nodesToCluster[i], options, true); } + this.body.emitter.emit('_dataChanged'); } }, { @@ -34523,7 +35019,9 @@ return /******/ (function(modules) { // webpackBootstrap // collect the nodes that will be in the cluster for (var _i = 0; _i < node.edges.length; _i++) { var edge = node.edges[_i]; - childEdgesObj[edge.id] = edge; + if (edge.hiddenByCluster !== true) { + childEdgesObj[edge.id] = edge; + } } } } @@ -34531,57 +35029,78 @@ return /******/ (function(modules) { // webpackBootstrap this._cluster(childNodesObj, childEdgesObj, options, refreshData); } }, { - key: 'clusterOutliers', + key: 'clusterByEdgeCount', /** - * Cluster all nodes in the network that have only 1 edge - * @param options - * @param refreshData - */ - value: function clusterOutliers(options) { - var refreshData = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + * Cluster all nodes in the network that have only X edges + * @param edgeCount + * @param options + * @param refreshData + */ + value: function clusterByEdgeCount(edgeCount, options) { + var refreshData = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2]; options = this._checkOptions(options); var clusters = []; - + var usedNodes = {}; + var edge = undefined, + edges = undefined, + node = undefined, + nodeId = undefined, + visibleEdges = undefined; // collect the nodes that will be in the cluster for (var i = 0; i < this.body.nodeIndices.length; i++) { var childNodesObj = {}; var childEdgesObj = {}; - var nodeId = this.body.nodeIndices[i]; - var visibleEdges = 0; - var edge = undefined; - for (var j = 0; j < this.body.nodes[nodeId].edges.length; j++) { - if (this.body.nodes[nodeId].edges[j].options.hidden === false) { - visibleEdges++; - edge = this.body.nodes[nodeId].edges[j]; + nodeId = this.body.nodeIndices[i]; + + // if this node is already used in another cluster this session, we do not have to re-evaluate it. + if (usedNodes[nodeId] === undefined) { + visibleEdges = 0; + node = this.body.nodes[nodeId]; + edges = []; + for (var j = 0; j < node.edges.length; j++) { + edge = node.edges[j]; + if (edge.hiddenByCluster !== true) { + edges.push(edge); + } } - } - if (visibleEdges === 1) { - // this is an outlier - var childNodeId = this._getConnectedId(edge, nodeId); - if (childNodeId !== nodeId) { - if (options.joinCondition === undefined) { - if (this._checkIfUsed(clusters, nodeId, edge.id) === false && this._checkIfUsed(clusters, childNodeId, edge.id) === false) { - childEdgesObj[edge.id] = edge; - childNodesObj[nodeId] = this.body.nodes[nodeId]; - childNodesObj[childNodeId] = this.body.nodes[childNodeId]; - } - } else { - var clonedOptions = this._cloneOptions(this.body.nodes[nodeId]); - if (options.joinCondition(clonedOptions) === true && this._checkIfUsed(clusters, nodeId, edge.id) === false) { - childEdgesObj[edge.id] = edge; - childNodesObj[nodeId] = this.body.nodes[nodeId]; - } - clonedOptions = this._cloneOptions(this.body.nodes[childNodeId]); - if (options.joinCondition(clonedOptions) === true && this._checkIfUsed(clusters, nodeId, edge.id) === false) { - childEdgesObj[edge.id] = edge; - childNodesObj[childNodeId] = this.body.nodes[childNodeId]; + // this node qualifies, we collect its neighbours to start the clustering process. + if (edges.length === edgeCount) { + var gatheringSuccessful = true; + for (var j = 0; j < edges.length; j++) { + edge = edges[j]; + var childNodeId = this._getConnectedId(edge, nodeId); + // if unused and if not referencing itself + if (childNodeId !== nodeId && usedNodes[nodeId] === undefined) { + // add the nodes to the list by the join condition. + if (options.joinCondition === undefined) { + childEdgesObj[edge.id] = edge; + childNodesObj[nodeId] = this.body.nodes[nodeId]; + childNodesObj[childNodeId] = this.body.nodes[childNodeId]; + usedNodes[nodeId] = true; + } else { + var clonedOptions = this._cloneOptions(this.body.nodes[nodeId]); + if (options.joinCondition(clonedOptions) === true) { + childEdgesObj[edge.id] = edge; + childNodesObj[nodeId] = this.body.nodes[nodeId]; + usedNodes[nodeId] = true; + } else { + // this node does not qualify after all. + gatheringSuccessful = false; + break; + } + } + } else { + // this node does not qualify after all. + gatheringSuccessful = false; + break; } } - if (Object.keys(childNodesObj).length > 0 && Object.keys(childEdgesObj).length > 0) { + // add to the cluster queue + if (Object.keys(childNodesObj).length > 0 && Object.keys(childEdgesObj).length > 0 && gatheringSuccessful === true) { clusters.push({ nodes: childNodesObj, edges: childEdgesObj }); } } @@ -34597,15 +35116,30 @@ return /******/ (function(modules) { // webpackBootstrap } } }, { - key: '_checkIfUsed', - value: function _checkIfUsed(clusters, nodeId, edgeId) { - for (var i = 0; i < clusters.length; i++) { - var cluster = clusters[i]; - if (cluster.nodes[nodeId] !== undefined || cluster.edges[edgeId] !== undefined) { - return true; - } - } - return false; + key: 'clusterOutliers', + + /** + * Cluster all nodes in the network that have only 1 edge + * @param options + * @param refreshData + */ + value: function clusterOutliers(options) { + var refreshData = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + + this.clusterByEdgeCount(1, options, refreshData); + } + }, { + key: 'clusterBridges', + + /** + * Cluster all nodes in the network that have only 2 edge + * @param options + * @param refreshData + */ + value: function clusterBridges(options) { + var refreshData = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + + this.clusterByEdgeCount(2, options, refreshData); } }, { key: 'clusterByConnection', @@ -34650,22 +35184,28 @@ return /******/ (function(modules) { // webpackBootstrap // collect the nodes that will be in the cluster for (var i = 0; i < node.edges.length; i++) { var edge = node.edges[i]; - var childNodeId = this._getConnectedId(edge, parentNodeId); + if (edge.hiddenByCluster !== true) { + var childNodeId = this._getConnectedId(edge, parentNodeId); - if (childNodeId !== parentNodeId) { - if (options.joinCondition === undefined) { - childEdgesObj[edge.id] = edge; - childNodesObj[childNodeId] = this.body.nodes[childNodeId]; - } else { - // clone the options and insert some additional parameters that could be interesting. - var childClonedOptions = this._cloneOptions(this.body.nodes[childNodeId]); - if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) { + // if the child node is not in a cluster (may not be needed now with the edge.hiddenByCluster check) + if (this.clusteredNodes[childNodeId] === undefined) { + if (childNodeId !== parentNodeId) { + if (options.joinCondition === undefined) { + childEdgesObj[edge.id] = edge; + childNodesObj[childNodeId] = this.body.nodes[childNodeId]; + } else { + // clone the options and insert some additional parameters that could be interesting. + var childClonedOptions = this._cloneOptions(this.body.nodes[childNodeId]); + if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) { + childEdgesObj[edge.id] = edge; + childNodesObj[childNodeId] = this.body.nodes[childNodeId]; + } + } + } else { + // swallow the edge if it is self-referencing. childEdgesObj[edge.id] = edge; - childNodesObj[childNodeId] = this.body.nodes[childNodeId]; } } - } else { - childEdgesObj[edge.id] = edge; } } @@ -34697,15 +35237,15 @@ return /******/ (function(modules) { // webpackBootstrap key: '_createClusterEdges', /** - * This function creates the edges that will be attached to the cluster. + * This function creates the edges that will be attached to the cluster + * It looks for edges that are connected to the nodes from the "outside' of the cluster. * * @param childNodesObj - * @param childEdgesObj * @param newEdges * @param options * @private */ - value: function _createClusterEdges(childNodesObj, childEdgesObj, newEdges, clusterNodeProperties, clusterEdgeProperties) { + value: function _createClusterEdges(childNodesObj, clusterNodeProperties, clusterEdgeProperties) { var edge = undefined, childNodeId = undefined, childNode = undefined, @@ -34713,7 +35253,10 @@ return /******/ (function(modules) { // webpackBootstrap fromId = undefined, otherNodeId = undefined; + // loop over all child nodes and their edges to find edges going out of the cluster + // these edges will be replaced by clusterEdges. var childKeys = Object.keys(childNodesObj); + var createEdges = []; for (var i = 0; i < childKeys.length; i++) { childNodeId = childKeys[i]; childNode = childNodesObj[childNodeId]; @@ -34721,31 +35264,55 @@ return /******/ (function(modules) { // webpackBootstrap // construct new edges from the cluster to others for (var j = 0; j < childNode.edges.length; j++) { edge = childNode.edges[j]; - childEdgesObj[edge.id] = edge; - - // childNodeId position will be replaced by the cluster. - if (edge.toId == childNodeId) { - // this is a double equals because ints and strings can be interchanged here. - toId = clusterNodeProperties.id; - fromId = edge.fromId; - otherNodeId = fromId; - } else { - toId = edge.toId; - fromId = clusterNodeProperties.id; - otherNodeId = toId; - } + // we only handle edges that are visible to the system, not the disabled ones from the clustering process. + if (edge.hiddenByCluster !== true) { + // set up the from and to. + if (edge.toId == childNodeId) { + // this is a double equals because ints and strings can be interchanged here. + toId = clusterNodeProperties.id; + fromId = edge.fromId; + otherNodeId = fromId; + } else { + toId = edge.toId; + fromId = clusterNodeProperties.id; + otherNodeId = toId; + } - // if the node connected to the cluster is also in the cluster we do not need a new edge. - if (childNodesObj[otherNodeId] === undefined) { - var clonedOptions = this._cloneOptions(edge, 'edge'); - util.deepExtend(clonedOptions, clusterEdgeProperties); - clonedOptions.from = fromId; - clonedOptions.to = toId; - clonedOptions.id = 'clusterEdge:' + util.randomUUID(); - newEdges.push(this.body.functions.createEdge(clonedOptions)); + // Only edges from the cluster outwards are being replaced. + if (childNodesObj[otherNodeId] === undefined) { + createEdges.push({ edge: edge, fromId: fromId, toId: toId }); + } } } } + + // 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; + // copy the options of the edge we will replace + var clonedOptions = this._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.id = 'clusterEdge:' + util.randomUUID(); + //clonedOptions.id = '(cf: ' + createEdges[j].fromId + " to: " + createEdges[j].toId + ")" + Math.random(); + + // create the edge and give a reference to the one it replaced. + var newEdge = this.body.functions.createEdge(clonedOptions); + newEdge.clusteringEdgeReplacingId = _edge.id; + + // connect the edge. + this.body.edges[newEdge.id] = newEdge; + newEdge.connect(); + + // hide the replaced edge + _edge.setOptions({ physics: false, hidden: true }); + _edge.hiddenByCluster = true; + } } }, { key: '_checkOptions', @@ -34783,11 +35350,20 @@ return /******/ (function(modules) { // webpackBootstrap value: function _cluster(childNodesObj, childEdgesObj, options) { var refreshData = arguments.length <= 3 || arguments[3] === undefined ? true : arguments[3]; - // kill condition: no children so cant cluster - if (Object.keys(childNodesObj).length === 0) { + // kill condition: no children so can't cluster or only one node in the cluster, dont bother + if (Object.keys(childNodesObj).length < 2) { return; } + // check if this cluster call is not trying to cluster anything that is in another cluster. + for (var nodeId in childNodesObj) { + if (childNodesObj.hasOwnProperty(nodeId)) { + if (this.clusteredNodes[nodeId] !== undefined) { + return; + } + } + } + var clusterNodeProperties = util.deepExtend({}, options.clusterNodeProperties); // construct the clusterNodeProperties @@ -34795,17 +35371,21 @@ return /******/ (function(modules) { // webpackBootstrap // get the childNode options var childNodesOptions = []; for (var nodeId in childNodesObj) { - var clonedOptions = this._cloneOptions(childNodesObj[nodeId]); - childNodesOptions.push(clonedOptions); + if (childNodesObj.hasOwnProperty(nodeId)) { + var clonedOptions = this._cloneOptions(childNodesObj[nodeId]); + childNodesOptions.push(clonedOptions); + } } // get clusterproperties based on childNodes var childEdgesOptions = []; for (var edgeId in childEdgesObj) { - // these cluster edges will be removed on creation of the cluster. - if (edgeId.substr(0, 12) !== 'clusterEdge:') { - var clonedOptions = this._cloneOptions(childEdgesObj[edgeId], 'edge'); - childEdgesOptions.push(clonedOptions); + if (childEdgesObj.hasOwnProperty(edgeId)) { + // these cluster edges will be removed on creation of the cluster. + if (edgeId.substr(0, 12) !== 'clusterEdge:') { + var clonedOptions = this._cloneOptions(childEdgesObj[edgeId], 'edge'); + childEdgesOptions.push(clonedOptions); + } } } @@ -34853,27 +35433,15 @@ return /******/ (function(modules) { // webpackBootstrap this.body.nodes[clusterNodeProperties.id] = clusterNode; // create the new edges that will connect to the cluster - var newEdges = []; - this._createClusterEdges(childNodesObj, childEdgesObj, newEdges, clusterNodeProperties, options.clusterEdgeProperties); + this._createClusterEdges(childNodesObj, 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]; - - // if this is a cluster edge that is fully encompassed in the cluster, we want to delete it - // this check verifies that both of the connected nodes are in this cluster - if (edgeId.substr(0, 12) === 'clusterEdge:' && childNodesObj[edge.fromId] !== undefined && childNodesObj[edge.toId] !== undefined) { - edge.cleanup(); - // this removes the edge from node.edges, which is why edgeIds is formed - edge.disconnect(); - delete childEdgesObj[edgeId]; - delete this.body.edges[edgeId]; - } else { - edge.setOptions({ physics: false, hidden: true }); - //edge.options.hidden = true; - } + edge.setOptions({ physics: false, hidden: true }); + edge.hiddenByCluster = true; } } } @@ -34886,12 +35454,6 @@ return /******/ (function(modules) { // webpackBootstrap } } - // push new edges to global - for (var i = 0; i < newEdges.length; i++) { - this.body.edges[newEdges[i].id] = newEdges[i]; - this.body.edges[newEdges[i].id].connect(); - } - // set ID to undefined so no duplicates arise clusterNodeProperties.id = undefined; @@ -34984,8 +35546,8 @@ return /******/ (function(modules) { // webpackBootstrap if (containedNodes.hasOwnProperty(nodeId)) { var containedNode = this.body.nodes[nodeId]; if (newPositions[nodeId] !== undefined) { - containedNode.x = newPositions[nodeId].x || clusterNode.x; - containedNode.y = newPositions[nodeId].y || clusterNode.y; + containedNode.x = newPositions[nodeId].x === undefined ? clusterNode.x : newPositions[nodeId].x; + containedNode.y = newPositions[nodeId].y === undefined ? clusterNode.y : newPositions[nodeId].y; } } } @@ -35012,80 +35574,80 @@ return /******/ (function(modules) { // webpackBootstrap containedNode.vy = clusterNode.vy; // we use these methods to avoid reinstantiating the shape, which happens with setOptions. - //containedNode.toggleHidden(false); - //containedNode.togglePhysics(true); containedNode.setOptions({ hidden: false, physics: true }); delete this.clusteredNodes[nodeId]; } } - // release edges - for (var edgeId in containedEdges) { - if (containedEdges.hasOwnProperty(edgeId)) { - var edge = containedEdges[edgeId]; - // if this edge was a temporary edge and it's connected nodes do not exist anymore, we remove it from the data - if (this.body.nodes[edge.fromId] === undefined || this.body.nodes[edge.toId] === undefined || edge.toId == clusterNodeId || edge.fromId == clusterNodeId) { - edge.cleanup(); - // this removes the edge from node.edges, which is why edgeIds is formed - edge.disconnect(); - delete this.body.edges[edgeId]; - } else { - // one of the nodes connected to this edge is in a cluster. We give the edge to that cluster so it will be released when that cluster is opened. - if (this.clusteredNodes[edge.fromId] !== undefined || this.clusteredNodes[edge.toId] !== undefined) { - var fromId = undefined, - toId = undefined; - var clusteredNode = this.clusteredNodes[edge.fromId] || this.clusteredNodes[edge.toId]; - var clusterId = clusteredNode.clusterId; - var _clusterNode = this.body.nodes[clusterId]; - _clusterNode.containedEdges[edgeId] = edge; - - if (this.clusteredNodes[edge.fromId] !== undefined) { - fromId = clusterId; - toId = edge.toId; - } else { - fromId = edge.fromId; - toId = clusterId; - } - - // if both from and to nodes are visible, we create a new temporary edge - if (this.body.nodes[fromId].options.hidden !== true && this.body.nodes[toId].options.hidden !== true) { - var clonedOptions = this._cloneOptions(edge, 'edge'); - var id = 'clusterEdge:' + util.randomUUID(); - util.deepExtend(clonedOptions, _clusterNode.clusterEdgeProperties); - util.deepExtend(clonedOptions, { from: fromId, to: toId, hidden: false, physics: true, id: id }); - var newEdge = this.body.functions.createEdge(clonedOptions); - - this.body.edges[id] = newEdge; - this.body.edges[id].connect(); - } + // copy the clusterNode edges because we cannot iterate over an object that we add or remove from. + var edgesToBeDeleted = []; + for (var i = 0; i < clusterNode.edges.length; i++) { + edgesToBeDeleted.push(clusterNode.edges[i]); + } + + // actually handling the deleting. + for (var i = 0; i < edgesToBeDeleted.length; i++) { + var edge = edgesToBeDeleted[i]; + + var otherNodeId = this._getConnectedId(edge, clusterNodeId); + // if the other node is in another cluster, we transfer ownership of this edge to the other cluster + if (this.clusteredNodes[otherNodeId] !== undefined) { + // transfer ownership: + var otherCluster = this.body.nodes[this.clusteredNodes[otherNodeId].clusterId]; + var transferEdge = this.body.edges[edge.clusteringEdgeReplacingId]; + if (transferEdge !== undefined) { + otherCluster.containedEdges[transferEdge.id] = transferEdge; + + // delete local reference + delete containedEdges[transferEdge.id]; + + // create new cluster edge from the otherCluster: + // get to and from + var fromId = transferEdge.fromId; + var toId = transferEdge.toId; + if (transferEdge.toId == otherNodeId) { + toId = this.clusteredNodes[otherNodeId].clusterId; } else { - edge.setOptions({ physics: true, hidden: false }); - //edge.options.hidden = false; - //edge.togglePhysics(true); + fromId = this.clusteredNodes[otherNodeId].clusterId; } + + // clone the options and apply the cluster options to them + var clonedOptions = this._cloneOptions(transferEdge, 'edge'); + util.deepExtend(clonedOptions, otherCluster.clusterEdgeProperties); + + // apply the edge specific options to it. + var id = 'clusterEdge:' + util.randomUUID(); + util.deepExtend(clonedOptions, { from: fromId, to: toId, hidden: false, physics: true, id: id }); + + // create it + var newEdge = this.body.functions.createEdge(clonedOptions); + newEdge.clusteringEdgeReplacingId = transferEdge.id; + this.body.edges[id] = newEdge; + this.body.edges[id].connect(); + } + } else { + var replacedEdge = this.body.edges[edge.clusteringEdgeReplacingId]; + if (replacedEdge !== undefined) { + replacedEdge.setOptions({ physics: true, hidden: false }); + replacedEdge.hiddenByCluster = false; } } + edge.cleanup(); + // this removes the edge from node.edges, which is why edgeIds is formed + edge.disconnect(); + delete this.body.edges[edge.id]; } - // remove all temporary edges, make an array of ids so we don't remove from the list we're iterating over. - var removeIds = []; - for (var i = 0; i < clusterNode.edges.length; i++) { - var edgeId = clusterNode.edges[i].id; - removeIds.push(edgeId); - } - - // actually removing the edges - for (var i = 0; i < removeIds.length; i++) { - var edgeId = removeIds[i]; - this.body.edges[edgeId].cleanup(); - // this removes the edge from node.edges, which is why edgeIds is formed - this.body.edges[edgeId].disconnect(); - delete this.body.edges[edgeId]; + // handle the releasing of the edges + for (var edgeId in containedEdges) { + if (containedEdges.hasOwnProperty(edgeId)) { + var edge = containedEdges[edgeId]; + edge.setOptions({ physics: true, hidden: false }); + } } // remove clusterNode - this.body.nodes[clusterNodeId].cleanup(); delete this.body.nodes[clusterNodeId]; if (refreshData === true) { @@ -35258,7 +35820,7 @@ return /******/ (function(modules) { // webpackBootstrap window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var CanvasRenderer = (function () { function CanvasRenderer(body, canvas) { @@ -35643,10 +36205,10 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var Hammer = __webpack_require__(3); - var hammerUtil = __webpack_require__(27); + var Hammer = __webpack_require__(20); + var hammerUtil = __webpack_require__(25); - var util = __webpack_require__(7); + var util = __webpack_require__(1); /** * Create the main frame for the Network. @@ -35664,6 +36226,7 @@ return /******/ (function(modules) { // webpackBootstrap this.pixelRatio = 1; this.resizeTimer = undefined; this.resizeFunction = this._onResize.bind(this); + this.cameraState = {}; this.options = {}; this.defaultOptions = { @@ -35736,6 +36299,42 @@ return /******/ (function(modules) { // webpackBootstrap this.setSize(); this.body.emitter.emit('_redraw'); } + }, { + key: '_getCameraState', + + /** + * Get and store the cameraState + * @private + */ + value: function _getCameraState() { + this.cameraState.previousWidth = this.frame.canvas.width; + this.cameraState.scale = this.body.view.scale; + this.cameraState.position = this.DOMtoCanvas({ x: 0.5 * this.frame.canvas.width, y: 0.5 * this.frame.canvas.height }); + } + }, { + key: '_setCameraState', + + /** + * Set the cameraState + * @private + */ + value: function _setCameraState() { + if (this.cameraState.scale !== undefined) { + this.body.view.scale = this.body.view.scale * (this.frame.canvas.clientWidth / this.cameraState.previousWidth); + + // this comes from the view module. + var viewCenter = this.DOMtoCanvas({ + x: 0.5 * this.frame.canvas.clientWidth, + y: 0.5 * this.frame.canvas.clientHeight + }); + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - this.cameraState.position.x, + y: viewCenter.y - this.cameraState.position.y + }; + this.body.view.translation.x += distanceFromCenter.x * this.body.view.scale; + this.body.view.translation.y += distanceFromCenter.y * this.body.view.scale; + } + } }, { key: '_prepareValue', value: function _prepareValue(value) { @@ -35877,6 +36476,7 @@ return /******/ (function(modules) { // webpackBootstrap var width = arguments.length <= 0 || arguments[0] === undefined ? this.options.width : arguments[0]; var height = arguments.length <= 1 || arguments[1] === undefined ? this.options.height : arguments[1]; + this._getCameraState(); width = this._prepareValue(width); height = this._prepareValue(height); @@ -35920,7 +36520,7 @@ return /******/ (function(modules) { // webpackBootstrap oldHeight: Math.round(oldHeight / this.pixelRatio) }); } - + this._setCameraState(); return emitEvent; } }, { @@ -36021,7 +36621,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var View = (function () { function View(body, canvas) { @@ -36433,7 +37033,7 @@ return /******/ (function(modules) { // webpackBootstrap var _componentsPopup2 = _interopRequireDefault(_componentsPopup); - var util = __webpack_require__(7); + var util = __webpack_require__(1); var InteractionHandler = (function () { function InteractionHandler(body, canvas, selectionHandler) { @@ -36641,10 +37241,13 @@ return /******/ (function(modules) { // webpackBootstrap var nodesChanges = _determineIfDifferent2.nodesChanges; var edgesChanges = _determineIfDifferent2.edgesChanges; + var nodeSelected = false; + if (selectedNodesCount - previouslySelectedNodeCount > 0) { // node was selected this.selectionHandler._generateClickEvent('selectNode', event, pointer); selected = true; + nodeSelected = true; } else if (selectedNodesCount - previouslySelectedNodeCount < 0) { // node was deselected this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); @@ -36652,10 +37255,12 @@ return /******/ (function(modules) { // webpackBootstrap } else if (selectedNodesCount === previouslySelectedNodeCount && nodesChanges === true) { this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); this.selectionHandler._generateClickEvent('selectNode', event, pointer); + nodeSelected = true; selected = true; } - if (selectedEdgesCount - previouslySelectedEdgeCount > 0) { + // handle the selected edges + if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { // edge was selected this.selectionHandler._generateClickEvent('selectEdge', event, pointer); selected = true; @@ -36669,6 +37274,7 @@ return /******/ (function(modules) { // webpackBootstrap selected = true; } + // fire the select event if anything has been selected or deselected if (selected === true) { // select or unselect this.selectionHandler._generateClickEvent('select', event, pointer); @@ -37187,9 +37793,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); - var Hammer = __webpack_require__(3); - var hammerUtil = __webpack_require__(27); + var util = __webpack_require__(1); + var Hammer = __webpack_require__(20); + var hammerUtil = __webpack_require__(25); var keycharm = __webpack_require__(41); var NavigationHandler = (function () { @@ -37641,7 +38247,7 @@ return /******/ (function(modules) { // webpackBootstrap var Node = __webpack_require__(62); var Edge = __webpack_require__(82); - var util = __webpack_require__(7); + var util = __webpack_require__(1); var SelectionHandler = (function () { function SelectionHandler(body, canvas) { @@ -38383,7 +38989,7 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); + var util = __webpack_require__(1); var LayoutEngine = (function () { function LayoutEngine(body) { @@ -38398,6 +39004,7 @@ return /******/ (function(modules) { // webpackBootstrap this.defaultOptions = { randomSeed: undefined, + improvedLayout: true, hierarchical: { enabled: false, levelSeparation: 150, @@ -38420,6 +39027,9 @@ return /******/ (function(modules) { // webpackBootstrap this.body.emitter.on('_dataChanged', function () { _this.setupHierarchicalLayout(); }); + this.body.emitter.on('_dataLoaded', function () { + _this.layoutNetwork(); + }); this.body.emitter.on('_resetHierarchicalLayout', function () { _this.setupHierarchicalLayout(); }); @@ -38429,7 +39039,7 @@ return /******/ (function(modules) { // webpackBootstrap value: function setOptions(options, allOptions) { if (options !== undefined) { var prevHierarchicalState = this.options.hierarchical.enabled; - + util.selectiveDeepExtend(['randomSeed', 'improvedLayout'], this.options, options); util.mergeOptions(this.options, options, 'hierarchical'); if (options.randomSeed !== undefined) { this.initialRandomSeed = options.randomSeed; @@ -38551,6 +39161,81 @@ return /******/ (function(modules) { // webpackBootstrap } } } + }, { + key: 'layoutNetwork', + + /** + * Use KamadaKawai 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. + */ + value: function layoutNetwork() { + if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) { + // first check if we should KamadaKawai to layout. The threshold is if less than half of the visible + // nodes have predefined positions we use this. + var positionDefined = 0; + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var node = this.body.nodes[this.body.nodeIndices[i]]; + if (node.predefinedPosition === true) { + positionDefined += 1; + } + } + + // if less than half of the nodes have a predefined position we continue + if (positionDefined < 0.5 * this.body.nodeIndices.length) { + var MAX_LEVELS = 200; + var levels = 0; + var clusterThreshold = 100; + // if there are a lot of nodes, we cluster before we run the algorithm. + if (this.body.nodeIndices.length > clusterThreshold) { + var startLength = this.body.nodeIndices.length; + while (this.body.nodeIndices.length > clusterThreshold) { + levels += 1; + var before = this.body.nodeIndices.length; + // if there are many nodes we do a hubsize cluster + if (levels % 3 === 0) { + this.body.modules.clustering.clusterBridges(); + } else { + this.body.modules.clustering.clusterOutliers(); + } + var after = this.body.nodeIndices.length; + if (before == after && levels % 3 !== 0 || levels > MAX_LEVELS) { + this._declusterAll(); + console.info('This network could not be positioned by this version of the improved layout algorithm.'); + return; + } + } + // increase the size of the edges + this.body.modules.kamadaKawai.setOptions({ springLength: Math.max(150, 2 * startLength) }); + } + + // position the system for these nodes and edges + this.body.modules.kamadaKawai.solve(this.body.nodeIndices, this.body.edgeIndices, true); + + // uncluster all clusters + this._declusterAll(); + + // reposition all bezier nodes. + this.body.emitter.emit('_repositionBezierNodes'); + } + } + } + }, { + key: '_declusterAll', + value: function _declusterAll() { + var clustersPresent = true; + while (clustersPresent === true) { + clustersPresent = false; + for (var i = 0; i < this.body.nodeIndices.length; i++) { + if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) { + clustersPresent = true; + this.body.modules.clustering.openCluster(this.body.nodeIndices[i], {}, false); + } + } + if (clustersPresent === true) { + this.body.emitter.emit('_dataChanged'); + } + } + } }, { key: 'getSeed', value: function getSeed() { @@ -38898,9 +39583,9 @@ return /******/ (function(modules) { // webpackBootstrap function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var util = __webpack_require__(7); - var Hammer = __webpack_require__(3); - var hammerUtil = __webpack_require__(27); + var util = __webpack_require__(1); + var Hammer = __webpack_require__(20); + var hammerUtil = __webpack_require__(25); /** * clears the toolbar div element of children @@ -40225,6 +40910,7 @@ return /******/ (function(modules) { // webpackBootstrap }, layout: { randomSeed: { 'undefined': 'undefined', number: number }, + improvedLayout: { boolean: boolean }, hierarchical: { enabled: { boolean: boolean }, levelSeparation: { number: number }, @@ -40378,6 +41064,7 @@ return /******/ (function(modules) { // webpackBootstrap __type__: { object: object, boolean: boolean } }, timestep: { number: number }, + adaptiveTimestep: { boolean: boolean }, __type__: { object: object, boolean: boolean } }, @@ -40517,6 +41204,7 @@ return /******/ (function(modules) { // webpackBootstrap }, layout: { //randomSeed: [0, 0, 500, 1], + //improvedLayout: true, hierarchical: { enabled: false, levelSeparation: [150, 20, 500, 5], @@ -40593,9 +41281,367 @@ return /******/ (function(modules) { // webpackBootstrap exports.allOptions = allOptions; exports.configureOptions = configureOptions; + //adaptiveTimestep: true /***/ }, /* 111 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by Alex on 8/7/2015. + */ + + // 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 _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 }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + var _componentsAlgorithmsFloydWarshallJs = __webpack_require__(112); + + var _componentsAlgorithmsFloydWarshallJs2 = _interopRequireDefault(_componentsAlgorithmsFloydWarshallJs); + + /** + * KamadaKawai positions the nodes initially based on + * + * "AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS" + * -- Tomihisa KAMADA and Satoru KAWAI in 1989 + * + * Possible optimizations in the distance calculation can be implemented. + */ + + 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"](); + } + + _createClass(KamadaKawai, [{ + key: "setOptions", + + /** + * Not sure if needed but can be used to update the spring length and spring constant + * @param options + */ + value: function setOptions(options) { + if (options) { + if (options.springLength) { + this.springLength = options.springLength; + } + if (options.springConstant) { + this.springConstant = options.springConstant; + } + } + } + }, { + key: "solve", + + /** + * Position the system + * @param nodesArray + * @param edgesArray + */ + value: function solve(nodesArray, edgesArray) { + var ignoreClusters = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; + + // get distance matrix + var D_matrix = this.distanceSolver.getDistances(this.body, nodesArray, edgesArray); // distance matrix + + // get the L Matrix + this._createL_matrix(D_matrix); + + // get the K Matrix + this._createK_matrix(D_matrix); + + // calculate positions + var threshold = 0.01; + var innerThreshold = 1; + var iterations = 0; + var maxIterations = Math.max(1000, Math.min(10 * this.body.nodeIndices.length, 6000)); + var maxInnerIterations = 5; + + var maxEnergy = 1e9; + var highE_nodeId = 0, + dE_dx = 0, + dE_dy = 0, + delta_m = 0, + subIterations = 0; + + while (maxEnergy > threshold && iterations < maxIterations) { + iterations += 1; + + var _getHighestEnergyNode2 = this._getHighestEnergyNode(ignoreClusters); + + var _getHighestEnergyNode22 = _slicedToArray(_getHighestEnergyNode2, 4); + + highE_nodeId = _getHighestEnergyNode22[0]; + maxEnergy = _getHighestEnergyNode22[1]; + dE_dx = _getHighestEnergyNode22[2]; + dE_dy = _getHighestEnergyNode22[3]; + + delta_m = maxEnergy; + subIterations = 0; + while (delta_m > innerThreshold && subIterations < maxInnerIterations) { + subIterations += 1; + this._moveNode(highE_nodeId, dE_dx, dE_dy); + + var _getEnergy2 = this._getEnergy(highE_nodeId); + + var _getEnergy22 = _slicedToArray(_getEnergy2, 3); + + delta_m = _getEnergy22[0]; + dE_dx = _getEnergy22[1]; + dE_dy = _getEnergy22[2]; + } + } + } + }, { + key: "_getHighestEnergyNode", + + /** + * get the node with the highest energy + * @returns {*[]} + * @private + */ + value: function _getHighestEnergyNode(ignoreClusters) { + var nodesArray = this.body.nodeIndices; + var nodes = this.body.nodes; + var maxEnergy = 0; + var maxEnergyNodeId = nodesArray[0]; + var dE_dx_max = 0, + dE_dy_max = 0; + + for (var nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) { + 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 _getEnergy32 = _slicedToArray(_getEnergy3, 3); + + var delta_m = _getEnergy32[0]; + var dE_dx = _getEnergy32[1]; + var dE_dy = _getEnergy32[2]; + + if (maxEnergy < delta_m) { + maxEnergy = delta_m; + maxEnergyNodeId = m; + dE_dx_max = dE_dx; + dE_dy_max = dE_dy; + } + } + } + + return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max]; + } + }, { + key: "_getEnergy", + + /** + * calculate the energy of a single node + * @param m + * @returns {*[]} + * @private + */ + value: function _getEnergy(m) { + var nodesArray = this.body.nodeIndices; + var nodes = this.body.nodes; + + var x_m = nodes[m].x; + var y_m = nodes[m].y; + var dE_dx = 0; + var dE_dy = 0; + for (var iIdx = 0; iIdx < nodesArray.length; iIdx++) { + var i = nodesArray[iIdx]; + if (i !== m) { + var x_i = nodes[i].x; + var y_i = nodes[i].y; + var denominator = 1.0 / Math.sqrt(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2)); + dE_dx += this.K_matrix[m][i] * (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator); + dE_dy += this.K_matrix[m][i] * (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator); + } + } + + var delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2)); + return [delta_m, dE_dx, dE_dy]; + } + }, { + key: "_moveNode", + + /** + * move the node based on it's energy + * the dx and dy are calculated from the linear system proposed by Kamada and Kawai + * @param m + * @param dE_dx + * @param dE_dy + * @private + */ + value: function _moveNode(m, dE_dx, dE_dy) { + var nodesArray = this.body.nodeIndices; + var nodes = this.body.nodes; + var d2E_dx2 = 0; + var d2E_dxdy = 0; + var d2E_dy2 = 0; + + var x_m = nodes[m].x; + var y_m = nodes[m].y; + for (var iIdx = 0; iIdx < nodesArray.length; iIdx++) { + var i = nodesArray[iIdx]; + if (i !== m) { + var x_i = nodes[i].x; + var y_i = nodes[i].y; + var denominator = 1.0 / Math.pow(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2), 1.5); + d2E_dx2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(y_m - y_i, 2) * denominator); + d2E_dxdy += this.K_matrix[m][i] * (this.L_matrix[m][i] * (x_m - x_i) * (y_m - y_i) * denominator); + d2E_dy2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(x_m - x_i, 2) * denominator); + } + } + // make the variable names easier to make the solving of the linear system easier to read + var A = d2E_dx2, + B = d2E_dxdy, + C = dE_dx, + D = d2E_dy2, + E = dE_dy; + + // solve the linear system for dx and dy + var dy = (C / A + E / B) / (B / A - D / B); + var dx = -(B * dy + C) / A; + + // move the node + nodes[m].x += dx; + nodes[m].y += dy; + } + }, { + key: "_createL_matrix", + + /** + * Create the L matrix: edge length times shortest path + * @param D_matrix + * @private + */ + value: function _createL_matrix(D_matrix) { + var nodesArray = this.body.nodeIndices; + var edgeLength = this.springLength; + + this.L_matrix = []; + for (var i = 0; i < nodesArray.length; i++) { + this.L_matrix[nodesArray[i]] = {}; + for (var j = 0; j < nodesArray.length; j++) { + this.L_matrix[nodesArray[i]][nodesArray[j]] = edgeLength * D_matrix[nodesArray[i]][nodesArray[j]]; + } + } + } + }, { + key: "_createK_matrix", + + /** + * Create the K matrix: spring constants times shortest path + * @param D_matrix + * @private + */ + value: function _createK_matrix(D_matrix) { + var nodesArray = this.body.nodeIndices; + var edgeStrength = this.springConstant; + + this.K_matrix = []; + for (var i = 0; i < nodesArray.length; i++) { + this.K_matrix[nodesArray[i]] = {}; + for (var j = 0; j < nodesArray.length; j++) { + this.K_matrix[nodesArray[i]][nodesArray[j]] = edgeStrength * Math.pow(D_matrix[nodesArray[i]][nodesArray[j]], -2); + } + } + } + }]); + + return KamadaKawai; + })(); + + exports["default"] = KamadaKawai; + module.exports = exports["default"]; + +/***/ }, +/* 112 */ +/***/ 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; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + var FloydWarshall = (function () { + function FloydWarshall() { + _classCallCheck(this, FloydWarshall); + } + + _createClass(FloydWarshall, [{ + key: "getDistances", + value: function getDistances(body, nodesArray, edgesArray) { + var D_matrix = {}; + var edges = body.edges; + + // prepare matrix with large numbers + for (var i = 0; i < nodesArray.length; i++) { + D_matrix[nodesArray[i]] = {}; + D_matrix[nodesArray[i]] = {}; + for (var j = 0; j < nodesArray.length; j++) { + D_matrix[nodesArray[i]][nodesArray[j]] = i == j ? 0 : 1e9; + D_matrix[nodesArray[i]][nodesArray[j]] = i == j ? 0 : 1e9; + } + } + + // put the weights for the edges in. This assumes unidirectionality. + for (var i = 0; i < edgesArray.length; i++) { + var edge = edges[edgesArray[i]]; + D_matrix[edge.fromId][edge.toId] = 1; + D_matrix[edge.toId][edge.fromId] = 1; + } + + var nodeCount = nodesArray.length; + + // 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]]; + } + } + } + + return D_matrix; + } + }]); + + return FloydWarshall; + })(); + + exports["default"] = FloydWarshall; + module.exports = exports["default"]; + +/***/ }, +/* 113 */ /***/ function(module, exports) { /** @@ -40882,7 +41928,7 @@ return /******/ (function(modules) { // webpackBootstrap } /***/ }, -/* 112 */ +/* 114 */ /***/ function(module, exports) { /** @@ -41780,7 +42826,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.DOTToGraph = DOTToGraph; /***/ }, -/* 113 */ +/* 115 */ /***/ function(module, exports) { 'use strict'; @@ -41819,6 +42865,11 @@ return /******/ (function(modules) { // webpackBootstrap edge['from'] = gEdge.source; edge['to'] = gEdge.target; edge['attributes'] = gEdge.attributes; + edge['label'] = gEdge.label; + edge['title'] = gEdge.attributes !== undefined ? gEdge.attributes.title : undefined; + if (gEdge['type'] === 'Directed') { + edge['arrows'] = 'to'; + } // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; if (gEdge.color && options.inheritColor === false) { @@ -41836,6 +42887,7 @@ return /******/ (function(modules) { // webpackBootstrap node['x'] = gNode.x; node['y'] = gNode.y; node['label'] = gNode.label; + node['title'] = gNode.attributes !== undefined ? gNode.attributes.title : undefined; if (options.nodes.parseColor === true) { node['color'] = gNode.color; } else { @@ -41852,7 +42904,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.parseGephi = parseGephi; /***/ }, -/* 114 */ +/* 116 */ /***/ function(module, exports) { /** @@ -41978,7 +43030,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = exports["default"]; /***/ }, -/* 115 */ +/* 117 */ /***/ function(module, exports) { // English @@ -42002,6 +43054,24 @@ return /******/ (function(modules) { // webpackBootstrap exports['en_EN'] = exports['en']; exports['en_US'] = exports['en']; + // Spanish + exports['es'] = { + edit: 'Editar', + del: 'Eliminar selección', + back: 'Átras', + addNode: 'Añadir nodo', + addEdge: 'Añadir arista', + editNode: 'Editar nodo', + editEdge: 'Editar arista', + addDescription: 'Haga clic en un lugar vacío para colocar un nuevo nodo.', + edgeDescription: 'Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.', + editEdgeDescription: 'Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.', + createEdgeError: 'No se puede conectar una arista a un grupo.', + deleteClusterError: 'No es posible eliminar grupos.', + editClusterError: 'No es posible editar grupos.' + }; + exports['es_ES'] = exports['es']; + // Dutch exports['nl'] = { edit: 'Wijzigen', diff --git a/dist/vis.map b/dist/vis.map index 9fd7bad5..ec54d83b 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Images","dotparser","gephiParser","allOptions","convertDot","input","DOTToGraph","convertGephi","options","parseGephi","Graph","Error","moment","hammer","Hammer","keycharm","data","conversion","props","dot","top","width","height","content","marginLeft","undefined","start","prototype","isVisible","range","interval","end","redraw","dom","point","document","createElement","className","appendChild","dirty","parent","parentNode","foreground","displayed","_updateContents","_updateTitle","_updateDataAttributes","_updateStyle","editable","updateTime","updateGroup","selected","offsetWidth","offsetHeight","style","left","_repaintDeleteButton","show","hide","removeChild","repositionX","toScreen","repositionY","orientation","item","getWidthLeft","getWidthRight","hasOwnProperty","select","unselect","setData","groupChanged","group","itemSet","_moveToGroup","setParent","anchor","remove","deleteButton","me","title","on","event","stopPropagation","removeFromDataSet","element","template","itemData","itemsData","get","changed","_contentToString","Element","innerHTML","type","removeAttribute","dataAttributes","length","attributes","Array","isArray","Object","keys","i","name","value","setAttribute","removeCssText","addCssText","outerHTML","window","propagating","preventDefault","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","apply","_firstTarget","split","events","match","propagatedHandler","srcEvent","_handled","stopped","firstTarget","elem","_handlers","_options","Manager","PropagatingHammer","o","create","extend","wrapper","pointerType","isFirst","target","handler","forEach","push","off","filter","h","emit","eventType","destroy","exportName","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","each","obj","iterator","dest","src","merge","inherit","child","base","properties","childP","baseP","constructor","_super","arguments","boolOrFn","val","args","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","types","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","node","inStr","str","find","indexOf","trim","inArray","findByKey","toArray","slice","uniqueArray","key","sort","results","values","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","callback","self","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","center","getCenter","timeStamp","now","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","scale","getScale","rotation","getRotation","computeIntervalInputData","offset","offsetDelta","prevDelta","x","y","velocity","velocityX","velocityY","direction","last","lastInterval","COMPUTE_INTERVAL","v","getVelocity","abs","clientX","round","clientY","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","p1","p2","PROPS_XY","Math","sqrt","atan2","PI","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","changedTouches","concat","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","targetTouches","changedTargetTouches","touch","mouse","TouchAction","set","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","defaults","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","count","recognizers","preset","handlers","touchAction","toggleCssProps","add","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","Date","MOBILE_REGEX","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","button","which","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","removePointer","eventTypeNormalized","toLowerCase","replace","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","update","getTouchAction","join","preventDefaults","prevented","hasNone","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","index","hasRequireFailures","canRecognizeWith","withState","tryEmit","canEmit","inputDataClone","process","reset","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","stop","force","curRecognizer","existing","Tap","Pan","Swipe","Pinch","Rotate","Press","__webpack_amd_options__","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","giveRange","min","max","total","isString","String","isDate","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","fillIfDefined","allowDeletion","protoExtend","other","selectiveExtend","selectiveDeepExtend","TypeError","deepExtend","selectiveNotDeepExtend","equalArray","len","convert","Boolean","valueOf","isMoment","toDate","getType","toISOString","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","getBoundingClientRect","getAbsoluteTop","addClassName","classes","removeClassName","array","updateProperty","action","listener","useCapture","attachEvent","detachEvent","returnValue","getTarget","srcElement","nodeType","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","parseColor","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","s","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","hue","saturation","cssUtil","cssText","styles","parts","currentStyles","newStyles","removeStyles","HSVToRGB","floor","f","q","t","isOk","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","mergeOptions","mergeTarget","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","global","utils_hooks__hooks","hookCallback","setHookCallback","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","copyConfig","to","from","_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","diffs","Locale","normalizeLocale","chooseLocale","names","j","next","loadLocale","oldLocale","locales","globalLocale","_abbr","code","locale_locales__getSetGlobalLocale","locale_locales__getLocale","defineLocale","abbr","addUnitAlias","unit","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","makeGetSet","keepTime","get_set__set","get_set__get","mom","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","pow","addFormatToken","token","padded","ordinal","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","output","Function","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","isFunction","sth","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","RegExp","unescapeFormat","matched","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","localeMonthsShort","_monthsShort","localeMonthsParse","monthName","_monthsParse","_longMonthsParse","_shortMonthsParse","months","monthsShort","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecateSimple","deprecations","configFromISO","l","string","from_string__isoRegex","isoDates","isoTimes","matchOffset","configFromStringAndFormat","configFromString","aspNetJsonRegex","createFromInputFallback","createDate","M","ms","setFullYear","createUTCDate","setUTCFullYear","daysInYear","isLeapYear","getIsLeapYear","weekOfYear","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","day","local__createLocal","week","dayOfYear","localeWeek","_week","dow","doy","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","dayOfYearFromWeeks","weekday","week1Jan","janX","getUTCDay","getSetDayOfYear","clone","startOf","currentDateArray","_useUTC","getUTCFullYear","getUTCMonth","getFullYear","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","w","weekYear","temp","GG","W","E","gg","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","_meridiem","hour","meridiem","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","Duration","duration","years","quarters","quarter","weeks","days","hours","minutes","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","separator","utcOffset","offsetFromString","matches","chunk","chunkOffset","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","localAdjust","_changeInProgress","add_subtract__addSubtract","create__createDuration","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","create__isoRegex","parseIso","momentsDifference","inp","parseFloat","positiveMomentsDifference","isAfter","isBefore","createAdder","period","dur","tmp","isAdding","moment_calendar__calendar","formats","sod","calendar","inputMs","endOf","isBetween","isSame","asFloat","delta","that","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","moment_format__toISOString","inputString","defaultFormat","postformat","withoutSuffix","humanize","fromNow","toNow","newLocaleData","isoWeekday","to_type__valueOf","unix","toObject","moment_valid__isValid","parsingFlags","invalidAt","addWeekYearFormatToken","getter","weeksInYear","getSetWeekYear","getSetISOWeekYear","getISOWeeksInYear","getWeeksInYear","weekInfo","getSetQuarter","parseWeekday","weekdaysParse","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","localeWeekdaysParse","weekdayName","_weekdaysParse","weekdays","weekdaysShort","weekdaysMin","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","lowercase","matchMeridiem","_meridiemParse","localeIsPM","charAt","localeMeridiem","isLower","parseMs","getZoneAbbr","getZoneName","moment__createUnix","moment__createInZone","parseZone","locale_calendar__calendar","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","preParsePostFormat","relative__relativeTime","isFuture","_relativeTime","pastFuture","locale_set__set","_ordinalParseLenient","_ordinalParse","source","lists__get","setter","list","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","limit","withSuffix","iso_string__toISOString","iso_string__abs","Y","D","asSeconds","match1","match2","match3","match4","match6","match1to2","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","prototypeMin","prototypeMax","add_subtract__add","add_subtract__subtract","lang","isoWeekYear","getSetDayOfMonth","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","_isPm","defaultLocaleMeridiemParse","getSetHour","getSetMinute","getSetSecond","getSetMillisecond","momentPrototype__proto","toJSON","isoWeek","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","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","_nodeId","n","rnds","random","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","getSVGElement","svgContainer","shift","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","groupTemplate","labelObj","setAttributeNS","size","label","xOffset","yOffset","textContent","drawBar","rect","_fieldId","fieldId","_type","_subscribers","setOptions","queue","_queue","subscribers","subscribe","unsubscribe","_trigger","params","senderId","subscriber","addedIds","_addItem","updatedIds","updatedData","addOrUpdate","_updateItem","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","getIds","getDataSet","mappedItems","filteredItem","av","bv","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","fieldType","exists","raw","converted","JSON","stringify","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","entry","_ids","_onEvent","refresh","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","getMouseX","getMouseY","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","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","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","_resizeCenter","setCameraPosition","pos","horizontal","vertical","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","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","surface","corners","xWidth","yWidth","surfaces","avg","transCenter","leftButtonDown","_onMouseUp","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","parameters","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","line","borderRadius","boxShadow","borderLeft","contentWidth","contentHeight","lineHeight","dotWidth","dotHeight","mixin","_callbacks","once","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","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","axis","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","timeAxis","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","groupsData","getEventProperties","oncontextmenu","setGroups","setItems","_redraw","Core","Configurator","Validator","printStyle","configureOptions","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","initialLoad","getItemRange","setWindow","animation","fit","focus","_this","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","dataset","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","labelSet","groupId","pageX","pageY","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","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","zoomKey","pointer","pointerDate","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","onTouch","isTouching","onRelease","isReleasing","offTouch","offRelease","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","startDate","endDate","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","_redrawTimer","scrollTop","scrollTopMin","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","MAX_REDRAWS","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","align","groupOrder","selectable","multiselect","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","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","dragRight","selectedItem","baseGroupIndex","groupIndex","groupOffset","ctrlKey","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","updateTimeAllowed","initialStart","initialEnd","newOffset","shiftKey","oldSelection","newSelection","_getItemRange","_item","itemSetFromTarget","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","byStart","byEnd","checkRangedItems","inner","marker","getLabelWidth","markerHeight","lastMarkerHeight","limitSize","customOrderedItems","_updateVisibleItems","nostack","_calculateHeight","offsetTop","resetSubgroups","orderSubgroups","_checkIfVisible","sortArray","sortField","itemIndex","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","EPSILON","aTime","bTime","iMax","collidingItem","jj","collision","newTop","baseClassName","getComputedStyle","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","minimumStep","autoScale","FORMAT","minorLabels","majorLabels","setMoment","setFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","mlliseconds","isMajor","getLabelMinor","getLabelMajor","getClassName","even","today","currentWeek","currentMonth","currentYear","itemSetHeight","onTop","itemSubgroup","totalHeight","newHeight","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","labelMinor","xFirstMajorLabel","labelFits","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","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","showButton","moduleOptions","domElements","colorPicker","_clean","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseover","onmouseout","optionsContainer","_push","insertTo","path","_arguments","_this2","_len","_key","div","objectLabel","selectedValue","_update","_makeLabel","err","oninput","checkbox","checked","_this3","defaultColor","_showColorPicker","_this4","bodyRect","pickerX","pickerY","setColor","setCallback","colorString","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","_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","linegraph","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","icons","alignZeros","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","lastStart","svgElements","groupsUsingDefaultStyles","COUNTER","svg","framework","BarFunctions","_updateAllGroupData","_updateGroup","removeGroup","addGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getData","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","lineOffset","stepPixels","zeroCrossing","amountOfSteps","tempGroups","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","labelValue","convertValue","setZeroPosition","linegraphOptions","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","drawIcon","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","stepSize","marginRange","valueAtBottom","marginEnd","maxLabelSize","stepIndex","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","invertedValue","convertedValue","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","customRange","formattingFunction","marginStart","deadSpace","majorSteps","minorSteps","setFirst","safeRange","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","niceStart","niceEnd","rounded","previous","steps","usingDefaultStyle","zeroPosition","Line","Bar","Points","SVGcontainer","fillPath","fillHeight","outline","barWidth","bar1Height","bar2Height","icon","combinedData","groupLabel","intersections","_getDataIntersections","_getStackedYRange","accumulatedNegative","accumulatedPositive","xpos","coreDistance","amount","resolved","_catmullRom","_linear","dFill","_catmullRomUniform","p0","bp1","bp2","normalization","d1","d2","d3","A","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","getGroupTemplate","callbackResult","getCallback","Bargraph","drawData","barPoints","heightOffset","_getSafeDrawData","nextKey","prevKey","side","iconSize","iconSpacing","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","_modulesGroups","_modulesNodesHandler","_modulesEdgesHandler","_modulesPhysicsEngine","_modulesClustering","_modulesCanvasRenderer","_modulesCanvas","_modulesView","_modulesInteractionHandler","_modulesSelectionHandler","_modulesLayoutEngine","_modulesManipulationSystem","_sharedConfigurator","_sharedConfigurator2","_sharedValidator","_sharedValidator2","_optionsJs","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","updatePhysicsData","_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","parseOptions","updateShape","updateLabelModule","_reset","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","cleanup","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","grouplist","globalOptions","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","yLine","labelDirty","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","lineMargin","fontSize","_getColor2","_getColor","_getColor22","fontColor","_setAlignment2","_setAlignment","_setAlignment22","lineCount","strokeText","_processLabel","measureText","newOptionsArray","_inherits","subClass","superClass","__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","networkScaleInv","globalAlpha","drawImage","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","_distanceToBorder","Database","database","_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","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","markAllEdgesAsDirty","updateEdgeType","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","edgeType","colorDirty","_edgesCubicBezierEdge","_edgesCubicBezierEdge2","_edgesBezierEdgeDynamic","_edgesBezierEdgeDynamic2","_edgesBezierEdgeStatic","_edgesBezierEdgeStatic2","_edgesStraightEdge","_edgesStraightEdge2","Edge","baseWidth","connected","_setInteractionWidths","changeInType","attachEdge","detachEdge","widthDiff","via","drawLine","drawArrows","drawLabel","viaNode","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","percentage","colorsDefined","_x4","_x5","_x6","_utilBezierEdgeBase","_utilBezierEdgeBase2","BezierEdgeStatic","_BezierEdgeBase","_getViaCoordinates","quadraticCurveTo","xVia","yVia","pi","originalAngle","myAngle","nearNode","_findBorderPositionBezier","x1","y1","x2","y2","x3","y3","_getDistanceToBezierEdge","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","minDistance","lastX","lastY","_getDistanceToLine","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","arrowPos","guideOffset","findBorderPosition","guidePos","arrow","_angle","_getCircleData7","_getCircleData72","_length","_utilCubicBezierEdgeBase","_utilCubicBezierEdgeBase2","CubicBezierEdge","_CubicBezierEdgeBase","_getViaCoordinates2","_getViaCoordinates22","via1","via2","bezierCurveTo","_ref","_ref2","_ref3","_ref32","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","BezierEdgeDynamic","setupSupportNode","positionBezierNode","parentEdgeId","_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","freezeCache","renderTimer","initialStabilizationEmitted","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","iterations","updateInterval","onlyDynamicEdges","timestep","initPhysics","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","calculateForces","moveNodes","revert","nodeIds","vx","vy","nodesPresent","vminCorrected","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","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","_componentsNodesCluster","_componentsNodesCluster2","ClusterEngine","clusteredNodes","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","_cloneOptions","_cluster","clusters","visibleEdges","childNodeId","_getConnectedId","_checkIfUsed","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","amountOfConnections","newEdges","clusterEdgeProperties","childNode","otherNodeId","childKeys","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","clusterNodeId","releaseFunction","positions","clusterPosition","newPositions","clusteredNode","_clusterNode","newEdge","removeIds","nodesArray","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","_Node2","_Node3","Cluster","_Node","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","controlNodesActive","_drawControlNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","hammerFrame","_cleanUp","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","specificNodes","zoomLevel","initialZoom","positionDefined","_getRange","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","_findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_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","nodesChanges","edgesChanges","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","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","optionsBackup","hierarchical","levelSeparation","sortMethod","hierarchicalLevels","setupHierarchicalLayout","prevHierarchicalState","adaptAllOptions","definedLevel","undefinedLevel","nodeSpacing","_determineLevelsByHubsize","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","positionedNodes","_placeBranchNodes","hubSize","_setLevelByHubsize","minLevel","_setLevelDirected","parentId","parentLevel","childNodeLevel","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","_this5","defaultData","sourceNodeId","targetNodeId","_this6","_this7","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","first","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","message","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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UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAE3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAE3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAA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"} \ No newline at end of file +{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","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","mergeOptions","mergeTarget","enabled","binarySearchCustom","orderedItems","searchFunction","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","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","j","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","makeGetSet","keepTime","get_set__set","get_set__get","mom","getSet","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","pow","addFormatToken","token","padded","ordinal","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","output","Function","formatMoment","isValid","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","isFunction","sth","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","RegExp","unescapeFormat","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","localeMonthsShort","_monthsShort","localeMonthsParse","monthName","_monthsParse","_longMonthsParse","_shortMonthsParse","months","monthsShort","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecateSimple","deprecations","configFromISO","l","string","from_string__isoRegex","isoDates","isoTimes","matchOffset","configFromStringAndFormat","configFromString","aspNetJsonRegex","createFromInputFallback","createDate","y","M","ms","setFullYear","createUTCDate","setUTCFullYear","daysInYear","isLeapYear","getIsLeapYear","weekOfYear","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","end","daysToDayOfWeek","day","local__createLocal","add","week","dayOfYear","localeWeek","_week","dow","doy","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","dayOfYearFromWeeks","weekday","week1Jan","janX","getUTCDay","getSetDayOfYear","round","clone","startOf","defaults","currentDateArray","now","_useUTC","getUTCFullYear","getUTCMonth","getFullYear","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","w","weekYear","temp","GG","W","E","gg","ISO_8601","parsedInput","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","_meridiem","hour","meridiem","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","second","millisecond","createFromConfig","prepareConfig","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","matches","chunk","chunkOffset","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","localAdjust","_changeInProgress","add_subtract__addSubtract","create__createDuration","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","create__isoRegex","parseIso","momentsDifference","inp","parseFloat","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","moment_calendar__calendar","time","formats","sod","calendar","inputMs","endOf","isBetween","isSame","asFloat","delta","that","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","moment_format__toISOString","inputString","defaultFormat","postformat","withoutSuffix","humanize","fromNow","toNow","newLocaleData","isoWeekday","to_type__valueOf","unix","toObject","moment_valid__isValid","parsingFlags","invalidAt","addWeekYearFormatToken","getter","weeksInYear","getSetWeekYear","getSetISOWeekYear","getISOWeeksInYear","getWeeksInYear","weekInfo","getSetQuarter","parseWeekday","weekdaysParse","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","localeWeekdaysParse","weekdayName","_weekdaysParse","weekdays","weekdaysShort","weekdaysMin","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","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","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","prototypeMin","prototypeMax","add_subtract__add","add_subtract__subtract","lang","isoWeekYear","getSetDayOfMonth","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","_isPm","defaultLocaleMeridiemParse","getSetHour","getSetMinute","getSetSecond","getSetMillisecond","momentPrototype__proto","get","toJSON","isoWeek","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","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","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","updatedData","addOrUpdate","_updateItem","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","getIds","getDataSet","mappedItems","filteredItem","sort","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","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","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","pos","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","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","setGroups","setItems","_redraw","Core","Configurator","Validator","printStyle","configureOptions","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","initialLoad","getItemRange","setWindow","animation","fit","focus","itemData","_this","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","show","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","firstTarget","_handlers","Manager","PropagatingHammer","o","wrapper","pointerType","isFirst","handler","eventType","exportName","setTimeoutContext","bindFn","invokeArrayArg","arg","each","iterator","dest","src","merge","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","str","find","inArray","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","rotation","getRotation","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","getVelocity","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","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","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","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","withState","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","__webpack_amd_options__","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","zoomKey","pointer","pointerDate","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","onTouch","isTouching","onRelease","isReleasing","offTouch","offRelease","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","startDate","endDate","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","_redrawTimer","scrollTop","scrollTopMin","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","_origRedraw","active","_stopAutoResize","setCustomTime","getCustomTime","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","borderRootHeight","borderRootWidth","autoHeight","containerHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","visibility","MAX_REDRAWS","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","align","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","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","dragRight","selectedItem","baseGroupIndex","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","_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","title","getLabelWidth","markerHeight","lastMarkerHeight","limitSize","repositionX","customOrderedItems","_updateVisibleItems","nostack","_calculateHeight","offsetTop","repositionY","resetSubgroups","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","itemIndex","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_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","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","labelMinor","xFirstMajorLabel","labelFits","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","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","insertTo","_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","bodyRect","pickerX","pickerY","setColor","setCallback","colorString","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","_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","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","icons","alignZeros","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","lastStart","svgElements","groupsUsingDefaultStyles","COUNTER","svg","framework","BarFunctions","_updateAllGroupData","_updateGroup","removeGroup","addGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getData","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","lineOffset","stepPixels","zeroCrossing","amountOfSteps","tempGroups","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","labelValue","convertValue","setZeroPosition","linegraphOptions","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","drawIcon","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","stepSize","marginRange","valueAtBottom","marginEnd","maxLabelSize","stepIndex","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","invertedValue","convertedValue","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","customRange","formattingFunction","marginStart","deadSpace","majorSteps","minorSteps","setFirst","safeRange","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","niceStart","niceEnd","rounded","previous","steps","usingDefaultStyle","zeroPosition","Line","Bar","Points","SVGcontainer","fillPath","fillHeight","outline","barWidth","bar1Height","bar2Height","icon","combinedData","groupLabel","intersections","_getDataIntersections","_getStackedYRange","accumulatedNegative","accumulatedPositive","xpos","coreDistance","amount","resolved","_catmullRom","_linear","dFill","_catmullRomUniform","p0","bp1","bp2","normalization","d1","d2","d3","A","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","getGroupTemplate","callbackResult","getCallback","Bargraph","drawData","barPoints","heightOffset","_getSafeDrawData","nextKey","prevKey","pointData","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","updatePhysicsData","_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","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","grouplist","globalOptions","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","__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","networkScaleInv","globalAlpha","drawImage","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","_distanceToBorder","Database","database","_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","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","via","drawLine","drawArrows","drawLabel","viaNode","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","percentage","colorsDefined","_x4","_x5","_utilCubicBezierEdgeBase","_utilCubicBezierEdgeBase2","CubicBezierEdge","_CubicBezierEdgeBase","_getViaCoordinates2","_getViaCoordinates","_getViaCoordinates22","via1","via2","bezierCurveTo","x1","y1","x2","y2","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref32","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","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","arrowPos","guideOffset","findBorderPosition","guidePos","arrow","_angle","_getCircleData7","_getCircleData72","_length","_utilBezierEdgeBase","_utilBezierEdgeBase2","BezierEdgeDynamic","_boundFunction","positionBezierNode","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","iterations","updateInterval","onlyDynamicEdges","timestep","initPhysics","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","dpos","reference","maxNodeVelocity","averageNodeVelocity","velocityAdaptiveThreshold","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","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","_componentsNodesCluster","_componentsNodesCluster2","ClusterEngine","clusteredNodes","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","_cloneOptions","hiddenByCluster","_cluster","edgeCount","clusters","usedNodes","visibleEdges","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","amountOfConnections","clusterEdgeProperties","childNode","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","clusterNodeId","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","nodesArray","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","_Node2","_Node3","Cluster","_Node","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","controlNodesActive","_drawControlNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","hammerFrame","_cleanUp","previousWidth","viewCenter","distanceFromCenter","tabIndex","_getCameraState","_prepareValue","emitEvent","oldWidth","oldHeight","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","specificNodes","zoomLevel","initialZoom","positionDefined","_getRange","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","_findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","_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","nodesChanges","edgesChanges","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","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","optionsBackup","improvedLayout","hierarchical","levelSeparation","sortMethod","hierarchicalLevels","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptions","MAX_LEVELS","levels","clusterThreshold","startLength","before","clusterBridges","after","_declusterAll","info","kamadaKawai","clustersPresent","definedLevel","undefinedLevel","nodeSpacing","_determineLevelsByHubsize","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","positionedNodes","_placeBranchNodes","hubSize","_setLevelByHubsize","minLevel","_setLevelDirected","parentId","parentLevel","childNodeLevel","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","_this7","_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","k","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","first","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","message","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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"} \ No newline at end of file diff --git a/dist/vis.min.css b/dist/vis.min.css index ea6d1b6d..529a6b06 100644 --- a/dist/vis.min.css +++ b/dist/vis.min.css @@ -1 +1 @@ -.vis-panel,.vis-timeline{margin:0;padding:0;box-sizing:border-box}.vis-background,.vis-labelset,.vis-timeline{overflow:hidden}.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}.vis-timeline{position:relative;border:1px solid #bfbfbf}.vis-panel{position:absolute}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-itemset,.vis-labelset,.vis-labelset .vis-label{box-sizing:border-box;position:relative}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-labelset .vis-label{left:0;top:0;width:100%;color:#4d4d4d;border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-itemset{padding:0;margin:0}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block}.vis-item.vis-point.vis-selected,.vis-item.vis-selected{background-color:#FFF785}.vis-item.vis-selected{border-color:#FFC200;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-delete{background:url(img/timeline/delete.png) center no-repeat;position:absolute;width:24px;height:24px;top:-4px;right:-24px;cursor:pointer}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-current-time{background-color:#FF7F6E;width:2px;z-index:1}.vis-custom-time{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}div.vis-network div.vis-manipulation{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0 );position:absolute;left:0;top:0;width:100%;height:30px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:15px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{position:relative;top:-7px;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;background-position:0 0;height:24px;margin:0 0 0 10px;vertical-align:middle;cursor:pointer;padding:0 8px;user-select:none}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button,div.vis-network div.vis-navigation div.vis-button{display:inline-block;background-repeat:no-repeat;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{display:inline-block;width:1px;height:20px;background-color:#bdbdbd;margin:5px 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;background-position:2px 2px;cursor:pointer;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}div.vis-network-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;font-color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none}div.vis-network-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-network-configuration-wrapper{display:block;width:700px}div.vis-network-configuration.vis-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-network-configuration.button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-network-configuration.button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-network-configuration.item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-network-configuration.item.s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-network-configuration.item.s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-network-configuration.item.s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-network-configuration.header{font-size:18px;font-weight:700}div.vis-network-configuration.label{width:120px;height:25px;line-height:25px}div.vis-network-configuration.label.s3{width:110px}div.vis-network-configuration.label.s4{width:100px}div.vis-network-configuration.colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-network-configuration.checkbox{left:-5px}input.vis-network-configuration.rangeinput{position:relative;top:-5px;width:60px;height:13px;padding:1px;margin:0;pointer-events:none}input.vis-network-configuration.range{-webkit-appearance:none;border:0 solid #fff;background-color:transparent;width:300px;height:20px}input.vis-network-configuration.range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-network-configuration.range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380', GradientType=0 );box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-network-configuration.range:focus{outline:0}input.vis-network-configuration.range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8', GradientType=0 )}input.vis-network-configuration.range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-network-configuration.range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-network-configuration.range:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}input.vis-network-configuration.range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-network-configuration.range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-network-configuration.range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-network-configuration.range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-network-configuration.range:focus::-ms-fill-lower{background:#888}input.vis-network-configuration.range:focus::-ms-fill-upper{background:#ccc}div.vis-color-picker{position:absolute;margin-top:-140px;margin-left:30px;width:293px;height:425px;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#131313', GradientType=0 )}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{position:absolute;vertical-align:middle;width:140px;height:20px;top:380px;font-size:10px;color:rgba(0,0,0,.4);line-height:20px}div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:159px;text-align:right;padding-right:2px}div.vis-color-picker div.vis-initial-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:10px;text-align:left;padding-left:2px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px} \ No newline at end of file +.vis-background,.vis-labelset,.vis-timeline{overflow:hidden}.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:9pt}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:90pt;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:75pt}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;height:13px;padding:1px;margin:0;pointer-events:none}.vis-panel,.vis-timeline{padding:0;box-sizing:border-box}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:transparent;width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380', GradientType=0 );box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8', GradientType=0 )}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:1pc;width:1pc;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:1pc;width:1pc;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:9pt;margin-top:-9pt}.vis-timeline{position:relative;border:1px solid #bfbfbf;margin:0}.vis-panel{position:absolute;margin:0}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-itemset,.vis-labelset,.vis-labelset .vis-label{position:relative;box-sizing:border-box}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-labelset .vis-label{left:0;top:0;width:100%;color:#4d4d4d;border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-itemset{padding:0;margin:0}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block}.vis-item.vis-point.vis-selected,.vis-item.vis-selected{background-color:#FFF785}.vis-item.vis-selected{border-color:#FFC200;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-delete{background:url(img/timeline/delete.png) center no-repeat;position:absolute;width:24px;height:24px;top:-4px;right:-24px;cursor:pointer}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-current-time{background-color:#FF7F6E;width:2px;z-index:1}.vis-custom-time{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}div.vis-network div.vis-manipulation{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0 );position:absolute;left:0;top:0;width:100%;height:30px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:15px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{position:relative;top:-7px;font-family:verdana;font-size:9pt;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin:0 0 0 10px;vertical-align:middle;cursor:pointer;padding:0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{display:inline-block;width:1px;height:20px;background-color:#bdbdbd;margin:5px 7px 0 15px}div.vis-network-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;font-color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}div.vis-color-picker{position:absolute;margin-top:-140px;margin-left:30px;width:293px;height:425px;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#131313', GradientType=0 )}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{width:140px;height:20px;top:380px;font-size:10px;color:rgba(0,0,0,.4);line-height:20px;position:absolute;vertical-align:middle}div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:159px;text-align:right;padding-right:2px}div.vis-color-picker div.vis-initial-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:10px;text-align:left;padding-left:2px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index f4e8ae30..b046949d 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -4,11 +4,11 @@ * * A dynamic, browser-based visualization library. * - * @version 4.7.0 - * @date 2015-07-27 + * @version 4.8.0 + * @date 2015-08-28 * * @license - * Copyright (C) 2011-2014 Almende B.V, http://almende.com + * Copyright (C) 2011-2015 Almende B.V, http://almende.com * * Vis.js is dual licensed under both * @@ -22,22 +22,23 @@ * * 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(7),e.DOMutil=i(13),e.DataSet=i(14),e.DataView=i(16),e.Queue=i(15),e.Graph3d=i(17),e.graph3d={Camera:i(21),Filter:i(22),Point2d:i(18),Point3d:i(20),Slider:i(23),StepNumber:i(24)},e.Timeline=i(25),e.Graph2d=i(49),e.timeline={DateUtil:i(29),DataStep:i(52),Range:i(26),stack:i(33),TimeStep:i(35),components:{items:{Item:i(2),BackgroundItem:i(38),BoxItem:i(37),PointItem:i(1),RangeItem:i(34)},Component:i(28),CurrentTime:i(44),CustomTime:i(42),DataAxis:i(51),GraphGroup:i(53),Group:i(32),BackgroundGroup:i(36),ItemSet:i(31),Legend:i(57),LineGraph:i(50),TimeAxis:i(39)}},e.Network=i(59),e.network={Images:i(114),dotparser:i(112),gephiParser:i(113),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.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(8),e.hammer=i(3),e.Hammer=i(3),e.keycharm=i(41)},function(t,e,i){function o(t,e,i){if(this.props={dot:{top:0,width:0,height:0},content:{height:0,marginLeft:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(2);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.start0){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;i0?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(){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(f(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-1}function _(t){return t.trim().split(/\s+/g)}function x(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function M(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=A(o);e.timeStamp=gt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=R(a,h),I(i,e),e.offsetDirection=B(e.deltaX,e.deltaY),e.scale=r?H(r.pointers,o):1,e.rotation=r?j(r.pointers,o):0,z(i,e);var d=t.element;b(e.srcEvent.target,d)&&(d=e.srcEvent.target),e.target=d}function I(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};(e.eventType===Tt||s.eventType===Et)&&(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 z(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=Pt&&(h>Ct||r.velocity===a)){var d=r.deltaX-e.deltaX,l=r.deltaY-e.deltaY,u=L(h,d,l);o=u.x,n=u.y,i=vt(u.x)>vt(u.y)?u.x:u.y,s=B(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 B(t,e){return t===e?It:vt(t)>=vt(e)?t>0?zt:Nt:e>0?At:Lt}function R(t,e,i){i||(i=jt);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=jt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function j(t,e){return F(e[1],e[0],Ht)-F(t[1],t[0],Ht)}function H(t,e){return R(e[0],e[1],Ht)/R(t[0],t[1],Ht)}function W(){this.evEl=Yt,this.evWin=Gt,this.allow=!0,this.pressed=!1,T.apply(this,arguments)}function Y(){this.evEl=qt,this.evWin=Xt,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function G(){this.evTarget=Kt,this.evWin=Jt,this.started=!1,T.apply(this,arguments)}function U(t,e){var i=k(t.touches),o=k(t.changedTouches);return e&(Et|Pt)&&(i=O(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=$t,this.targetIds={},T.apply(this,arguments)}function q(t,e){var i=k(t.touches),o=this.targetIds;if(e&(Tt|St)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=k(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return b(t.target,h)}),e===Tt)for(n=0;na&&(e.push(t),a=e.length-1):n&(Et|Pt)&&(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 Zt={touchstart:Tt,touchmove:St,touchend:Et,touchcancel:Pt},Kt="touchstart",Jt="touchstart touchmove touchend touchcancel";p(G,T,{handler:function(t){var e=Zt[t.type];if(e===Tt&&(this.started=!0),this.started){var i=U.call(this,t,e);e&(Et|Pt)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:kt,srcEvent:t})}}});var Qt={touchstart:Tt,touchmove:St,touchend:Et,touchcancel:Pt},$t="touchstart touchmove touchend touchcancel";p(V,T,{handler:function(t){var e=Qt[t.type],i=q.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:kt,srcEvent:t})}}),p(X,T,{handler:function(t,e,i){var o=i.pointerType==kt,n=i.pointerType==Mt;if(o)this.mouse.allow=!1;else if(n&&!this.mouse.allow)return;e&(Et|Pt)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var te=M(pt.style,"touchAction"),ee=te!==a,ie="compute",oe="auto",ne="manipulation",se="none",re="pan-x",ae="pan-y";Z.prototype={set:function(t){t==ie&&(t=this.compute()),ee&&(this.manager.element.style[te]=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){m(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),K(t.join(" "))},preventDefaults:function(t){if(!ee){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=w(o,se),s=w(o,ae),r=w(o,re);return n||s&&i&Bt||r&&i&Rt?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var he=1,de=2,le=4,ue=8,ce=ue,pe=16,fe=32;J.prototype={defaults:{},set:function(t){return u(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=tt(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=tt(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=tt(t,this),-1===x(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=tt(t,this);var e=x(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(i.options.event+(e?Q(o):""),t)}var i=this,o=this.state;ue>o&&e(!0),e(),o>=ue&&e(!0)},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=fe)},canEmit:function(){for(var t=0;ts?zt:Nt,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?It:0>r?At:Lt,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return et.prototype.attrTest.call(this,t)&&(this.state&de||!(this.state&de)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=$(t.direction);e&&this.manager.emit(this.options.event+e,t),this._super.emit.call(this,t)}}),p(ot,et,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[se]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&de)},emit:function(t){if(this._super.emit.call(this,t),1!==t.scale){var e=t.scale<1?"in":"out";this.manager.emit(this.options.event+e,t)}}}),p(nt,J,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[oe]},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&(Et|Pt)&&!n)this.reset();else if(t.eventType&Tt)this.reset(),this._timer=h(function(){this.state=ce,this.tryEmit()},e.time,this);else if(t.eventType&Et)return ce;return fe},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===ce&&(t&&t.eventType&Et?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=gt(),this.manager.emit(this.options.event,this._input)))}}),p(st,et,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[se]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&de)}}),p(rt,et,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Bt|Rt,pointers:1},getTouchAction:function(){return it.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Bt|Rt)?e=t.velocity:i&Bt?e=t.velocityX:i&Rt&&(e=t.velocityY),this._super.attrTest.call(this,t)&&i&t.direction&&t.distance>this.options.threshold&&vt(e)>this.options.velocity&&t.eventType&Et},emit:function(t){var e=$(t.direction);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),p(at,J,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ne]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distancei;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var n;if(void 0===t)return void 0;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.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;n=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){for(var n,s,r,a,h=1e4,d=0,l=0,u=t.length-1;u>=l&&h>d;){if(a=Math.floor(.5*(u+l)),n=t[Math.max(0,a-1)][i],s=t[a][i],r=t[Math.min(t.length-1,a+1)][i],s==e)return a;if(e>n&&s>e)return"before"==o?Math.max(0,a-1):a;if(e>s&&r>e)return"before"==o?a:Math.min(t.length-1,a+1);e>s?l=a+1:u=a-1,d++}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(9)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return Ni.apply(null,arguments)}function i(t){Ni=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 Li)o=Li[i],n=e[o],"undefined"!=typeof n&&(t[o]=n);return t}function f(t){p(this,t),this._d=new Date(t._d.getTime()),Bi===!1&&(Bi=!0,e.updateOffset(this),Bi=!1)}function m(t){return t instanceof f||null!=t&&null!=t._isAMomentObject}function v(t){return 0>t?Math.ceil(t):Math.floor(t)}function g(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=v(e)),i}function y(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&&g(t[o])!==g(e[o]))&&r++;return r+s}function b(){}function w(t){return t?t.toLowerCase().replace("_","-"):t}function _(t){for(var e,i,o,n,s=0;s0;){if(o=x(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&y(n,i,!0)>=e-1)break;e--}s++}return null}function x(e){var i=null;if(!Ri[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=Ai._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),k(i)}catch(o){}return Ri[e]}function k(t,e){var i;return t&&(i="undefined"==typeof e?M(t):O(t,e),i&&(Ai=i)),Ai._abbr}function O(t,e){return null!==e?(e.abbr=t,Ri[t]=Ri[t]||new b,Ri[t].set(e),k(t),Ri[t]):(delete Ri[t],null)}function M(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Ai;if(!o(t)){if(e=x(t))return e;t=[t]}return _(t)}function D(t,e){var i=t.toLowerCase();Fi[i]=Fi[i+"s"]=Fi[e]=t}function C(t){return"string"==typeof t?Fi[t]||Fi[t.toLowerCase()]:void 0}function T(t){var e,i,o={};for(i in t)r(t,i)&&(e=C(i),e&&(o[e]=t[i]));return o}function S(t,i){return function(o){return null!=o?(P(this,t,o),e.updateOffset(this,i),this):E(this,t)}}function E(t,e){return t._d["get"+(t._isUTC?"UTC":"")+e]()}function P(t,e,i){return t._d["set"+(t._isUTC?"UTC":"")+e](i)}function I(t,e){var i;if("object"==typeof t)for(i in t)this.set(i,t[i]);else if(t=C(t),"function"==typeof this[t])return this[t](e);return this}function z(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 N(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Yi[t]=n),e&&(Yi[e[0]]=function(){return z(n.apply(this,arguments),e[1],e[2])}),i&&(Yi[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function A(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function L(t){var e,i,o=t.match(ji);for(e=0,i=o.length;i>e;e++)Yi[o[e]]?o[e]=Yi[o[e]]:o[e]=A(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=R(e,t.localeData()),Wi[e]=Wi[e]||L(e),Wi[e](t)):t.localeData().invalidDate()}function R(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(Hi.lastIndex=0;o>=0&&Hi.test(t);)t=t.replace(Hi,i),Hi.lastIndex=0,o-=1;return t}function F(t){return"function"==typeof t&&"[object Function]"===Object.prototype.toString.call(t)}function j(t,e,i){no[t]=F(e)?e:function(t){return t&&i?i:e}}function H(t,e){return r(no,t)?no[t](e._strict,e._locale):new RegExp(W(t))}function W(t){return t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(o=function(t,i){i[e]=g(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 K(t,e){var i;return"string"==typeof e&&(e=t.localeData().monthsParse(e),"number"!=typeof e)?t:(i=Math.min(t.date(),V(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t)}function J(t){return null!=t?(K(this,t),e.updateOffset(this,!0),this):E(this,"Month")}function Q(){return V(this.year(),this.month())}function $(t){var e,i=t._a;return i&&-2===l(t).overflow&&(e=i[ao]<0||i[ao]>11?ao:i[ho]<1||i[ho]>V(i[ro],i[ao])?ho:i[lo]<0||i[lo]>24||24===i[lo]&&(0!==i[uo]||0!==i[co]||0!==i[po])?lo:i[uo]<0||i[uo]>59?uo:i[co]<0||i[co]>59?co:i[po]<0||i[po]>999?po:-1,l(t)._overflowDayOfYear&&(ro>e||e>ho)&&(e=ho),l(t).overflow=e),t}function tt(t){e.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function et(t,e){var i=!0;return a(function(){return i&&(tt(t+"\n"+(new Error).stack),i=!1),e.apply(this,arguments)},e)}function it(t,e){vo[t]||(tt(e),vo[t]=!0)}function ot(t){var e,i,o=t._i,n=go.exec(o);if(n){for(l(t).iso=!0,e=0,i=yo.length;i>e;e++)if(yo[e][1].exec(o)){t._f=yo[e][0];break}for(e=0,i=bo.length;i>e;e++)if(bo[e][1].exec(o)){t._f+=(n[6]||" ")+bo[e][0];break}o.match(eo)&&(t._f+="Z"),xt(t)}else t._isValid=!1}function nt(t){var i=wo.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(ot(t),void(t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t))))}function st(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return 1970>t&&a.setFullYear(t),a}function rt(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function at(t){return ht(t)?366:365}function ht(t){return t%4===0&&t%100!==0||t%400===0}function dt(){return ht(this.year())}function lt(t,e,i){var o,n=i-e,s=i-t.day();return s>n&&(s-=7),n-7>s&&(s+=7),o=Et(t).add(s,"d"),{week:Math.ceil(o.dayOfYear()/7),year:o.year()}}function ut(t){return lt(t,this._week.dow,this._week.doy).week}function ct(){return this._week.dow}function pt(){return this._week.doy}function ft(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function mt(t){var e=lt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function vt(t,e,i,o,n){var s,r=6+n-o,a=rt(t,0,1+r),h=a.getUTCDay();return n>h&&(h+=7),i=null!=i?1*i:n,s=1+r+7*(e-1)-h+i,{year:s>0?t:t-1,dayOfYear:s>0?s:at(t-1)+s}}function gt(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 yt(t,e,i){return null!=t?t:null!=e?e:i}function bt(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function wt(t){var e,i,o,n,s=[];if(!t._d){for(o=bt(t),t._w&&null==t._a[ho]&&null==t._a[ao]&&_t(t),t._dayOfYear&&(n=yt(t._a[ro],o[ro]),t._dayOfYear>at(n)&&(l(t)._overflowDayOfYear=!0),i=rt(n,0,t._dayOfYear),t._a[ao]=i.getUTCMonth(),t._a[ho]=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[lo]&&0===t._a[uo]&&0===t._a[co]&&0===t._a[po]&&(t._nextDay=!0,t._a[lo]=0),t._d=(t._useUTC?rt:st).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[lo]=24)}}function _t(t){var e,i,o,n,s,r,a;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(s=1,r=4,i=yt(e.GG,t._a[ro],lt(Et(),1,4).year),o=yt(e.W,1),n=yt(e.E,1)):(s=t._locale._week.dow,r=t._locale._week.doy,i=yt(e.gg,t._a[ro],lt(Et(),s,r).year),o=yt(e.w,1),null!=e.d?(n=e.d,s>n&&++o):n=null!=e.e?e.e+s:s),a=vt(i,o,n,r,s),t._a[ro]=a.year,t._dayOfYear=a.dayOfYear}function xt(t){if(t._f===e.ISO_8601)return void ot(t);t._a=[],l(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=R(t._f,t._locale).match(ji)||[],i=0;i0&&l(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Yi[s]?(o?l(t).empty=!1:l(t).unusedTokens.push(s),U(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[lo]<=12&&t._a[lo]>0&&(l(t).bigHour=void 0),t._a[lo]=kt(t._locale,t._a[lo],t._meridiem),wt(t),$(t)}function kt(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 Ot(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 Mt(t){if(!t._d){var e=T(t._i);t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],wt(t)}}function Dt(t){var e=new f($(Ct(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Ct(t){var e=t._i,i=t._f;return t._locale=t._locale||M(t._l),null===e||void 0===i&&""===e?c({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),m(e)?new f($(e)):(o(i)?Ot(t):i?xt(t):n(e)?t._d=e:Tt(t),t))}function Tt(t){var i=t._i;void 0===i?t._d=new Date:n(i)?t._d=new Date(+i):"string"==typeof i?nt(t):o(i)?(t._a=s(i.slice(0),function(t){return parseInt(t,10)}),wt(t)):"object"==typeof i?Mt(t):"number"==typeof i?t._d=new Date(i):e.createFromInputFallback(t)}function St(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,Dt(s)}function Et(t,e,i,o){return St(t,e,i,o,!1)}function Pt(t,e){var i,n;if(1===e.length&&o(e[0])&&(e=e[0]),!e.length)return Et();for(i=e[0],n=1;nt&&(t=-t,i="-"),i+z(~~(t/60),2)+e+z(~~t%60,2)})}function Bt(t){var e=(t||"").match(eo)||[],i=e[e.length-1]||[],o=(i+"").match(Mo)||["-",0,0],n=+(60*o[1])+g(o[2]);return"+"===o[0]?n:-n}function Rt(t,i){var o,s;return i._isUTC?(o=i.clone(),s=(m(t)||n(t)?+t:+Et(t))-+o,o._d.setTime(+o._d+s),e.updateOffset(o,!1),o):Et(t).local()}function Ft(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function jt(t,i){var o,n=this._offset||0;return null!=t?("string"==typeof t&&(t=Bt(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&i&&(o=Ft(this)),this._offset=t,this._isUTC=!0,null!=o&&this.add(o,"m"),n!==t&&(!i||this._changeInProgress?ie(this,Jt(t-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?n:Ft(this)}function Ht(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Wt(t){return this.utcOffset(0,t)}function Yt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ft(this),"m")),this}function Gt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Bt(this._i)),this}function Ut(t){return t=t?Et(t).utcOffset():0,(this.utcOffset()-t)%60===0}function Vt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function qt(){if("undefined"!=typeof this._isDSTShifted)return this._isDSTShifted;var t={};if(p(t,this),t=Ct(t),t._a){var e=t._isUTC?h(t._a):Et(t._a);this._isDSTShifted=this.isValid()&&y(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Xt(){return!this._isUTC}function Zt(){return this._isUTC}function Kt(){return this._isUTC&&0===this._offset}function Jt(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=Do.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:g(a[ho])*i,h:g(a[lo])*i,m:g(a[uo])*i,s:g(a[co])*i,ms:g(a[po])*i}):(a=Co.exec(t))?(i="-"===a[1]?-1:1,s={y:Qt(a[2],i),M:Qt(a[3],i),d:Qt(a[4],i),h:Qt(a[5],i),m:Qt(a[6],i),s:Qt(a[7],i),w:Qt(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=te(Et(s.from),Et(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Nt(s),At(t)&&r(t,"_locale")&&(o._locale=t._locale),o}function Qt(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $t(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 te(t,e){var i;return e=Rt(e,t),t.isBefore(e)?i=$t(t,e):(i=$t(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i}function ee(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(it(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=Jt(i,o),ie(this,n,t),this}}function ie(t,i,o,n){var s=i._milliseconds,r=i._days,a=i._months;n=null==n?!0:n,s&&t._d.setTime(+t._d+s*o),r&&P(t,"Date",E(t,"Date")+r*o),a&&K(t,E(t,"Month")+a*o),n&&e.updateOffset(t,r||a)}function oe(t,e){var i=t||Et(),o=Rt(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";return this.format(e&&e[s]||this.localeData().calendar(s,this,Et(i)))}function ne(){return new f(this)}function se(t,e){var i;return e=C("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=m(t)?t:Et(t),+this>+t):(i=m(t)?+t:+Et(t),i<+this.clone().startOf(e))}function re(t,e){var i;return e=C("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=m(t)?t:Et(t),+t>+this):(i=m(t)?+t:+Et(t),+this.clone().endOf(e)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 ue(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ce(){var t=this.clone().utc();return 0e;e++)if(this._weekdaysParse[e]||(i=Et([2e3,1]).day(e),o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(o.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e}function We(t){var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Be(t,this.localeData()),this.add(t-e,"d")):e}function Ye(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Ge(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)}function Ue(t,e){N(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Ve(t,e){return e._meridiemParse}function qe(t){return"p"===(t+"").toLowerCase().charAt(0)}function Xe(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Ze(t,e){e[po]=g(1e3*("0."+t))}function Ke(){return this._isUTC?"UTC":""}function Je(){return this._isUTC?"Coordinated Universal Time":""}function Qe(t){return Et(1e3*t)}function $e(){return Et.apply(null,arguments).parseZone()}function ti(t,e,i){var o=this._calendar[t];return"function"==typeof o?o.call(e,i):o}function ei(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 ii(){return this._invalidDate}function oi(t){return this._ordinal.replace("%d",t)}function ni(t){return t}function si(t,e,i,o){var n=this._relativeTime[i];return"function"==typeof n?n(t,e,i,o):n.replace(/%d/i,t)}function ri(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)}function ai(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function hi(t,e,i,o){var n=M(),s=h().set(o,e);return n[i](s,t)}function di(t,e,i,o,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return hi(t,e,i,n);var s,r=[];for(s=0;o>s;s++)r[s]=hi(t,s,i,n);return r}function li(t,e){return di(t,e,"months",12,"month")}function ui(t,e){return di(t,e,"monthsShort",12,"month")}function ci(t,e){return di(t,e,"weekdays",7,"day")}function pi(t,e){return di(t,e,"weekdaysShort",7,"day")}function fi(t,e){return di(t,e,"weekdaysMin",7,"day")}function mi(){var t=this._data;return this._milliseconds=Ko(this._milliseconds),this._days=Ko(this._days),this._months=Ko(this._months),t.milliseconds=Ko(t.milliseconds),t.seconds=Ko(t.seconds),t.minutes=Ko(t.minutes),t.hours=Ko(t.hours),t.months=Ko(t.months),t.years=Ko(t.years),this}function vi(t,e,i,o){var n=Jt(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function gi(t,e){return vi(this,t,e,1)}function yi(t,e){return vi(this,t,e,-1)}function bi(t){return 0>t?Math.floor(t):Math.ceil(t)}function wi(){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*bi(xi(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=v(s/1e3),h.seconds=t%60,e=v(t/60),h.minutes=e%60,i=v(e/60),h.hours=i%24,r+=v(i/24),n=v(_i(r)),a+=n,r-=bi(xi(n)),o=v(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function _i(t){return 4800*t/146097}function xi(t){return 146097*t/4800}function ki(t){var e,i,o=this._milliseconds;if(t=C(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+_i(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xi(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 Oi(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Mi(t){return function(){return this.as(t)}}function Di(t){return t=C(t),this[t+"s"]()}function Ci(t){return function(){return this._data[t]}}function Ti(){return v(this.days()/7)}function Si(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function Ei(t,e,i){var o=Jt(t).abs(),n=pn(o.as("s")),s=pn(o.as("m")),r=pn(o.as("h")),a=pn(o.as("d")),h=pn(o.as("M")),d=pn(o.as("y")),l=n0,l[4]=i,Si.apply(null,l)}function Pi(t,e){return void 0===fn[t]?!1:void 0===e?fn[t]:(fn[t]=e,!0)}function Ii(t){var e=this.localeData(),i=Ei(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function zi(){var t,e,i,o=mn(this._milliseconds)/1e3,n=mn(this._days),s=mn(this._months);t=v(o/60),e=v(t/60),o%=60,t%=60,i=v(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 Ni,Ai,Li=e.momentProperties=[],Bi=!1,Ri={},Fi={},ji=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Hi=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Wi={},Yi={},Gi=/\d/,Ui=/\d\d/,Vi=/\d{3}/,qi=/\d{4}/,Xi=/[+-]?\d{6}/,Zi=/\d\d?/,Ki=/\d{1,3}/,Ji=/\d{1,4}/,Qi=/[+-]?\d{1,6}/,$i=/\d+/,to=/[+-]?\d+/,eo=/Z|[+-]\d\d:?\d\d/gi,io=/[+-]?\d+(\.\d{1,3})?/,oo=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,no={},so={},ro=0,ao=1,ho=2,lo=3,uo=4,co=5,po=6; -N("M",["MM",2],"Mo",function(){return this.month()+1}),N("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),N("MMMM",0,0,function(t){return this.localeData().months(this,t)}),D("month","M"),j("M",Zi),j("MM",Zi,Ui),j("MMM",oo),j("MMMM",oo),Y(["M","MM"],function(t,e){e[ao]=g(t)-1}),Y(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[ao]=n:l(i).invalidMonth=t});var fo="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),mo="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),vo={};e.suppressDeprecationWarnings=!1;var go=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yo=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],bo=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],wo=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=et("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":""))}),N(0,["YY",2],0,function(){return this.year()%100}),N(0,["YYYY",4],0,"year"),N(0,["YYYYY",5],0,"year"),N(0,["YYYYYY",6,!0],0,"year"),D("year","y"),j("Y",to),j("YY",Zi,Ui),j("YYYY",Ji,qi),j("YYYYY",Qi,Xi),j("YYYYYY",Qi,Xi),Y(["YYYYY","YYYYYY"],ro),Y("YYYY",function(t,i){i[ro]=2===t.length?e.parseTwoDigitYear(t):g(t)}),Y("YY",function(t,i){i[ro]=e.parseTwoDigitYear(t)}),e.parseTwoDigitYear=function(t){return g(t)+(g(t)>68?1900:2e3)};var _o=S("FullYear",!1);N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),D("week","w"),D("isoWeek","W"),j("w",Zi),j("ww",Zi,Ui),j("W",Zi),j("WW",Zi,Ui),G(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=g(t)});var xo={dow:0,doy:6};N("DDD",["DDDD",3],"DDDo","dayOfYear"),D("dayOfYear","DDD"),j("DDD",Ki),j("DDDD",Vi),Y(["DDD","DDDD"],function(t,e,i){i._dayOfYear=g(t)}),e.ISO_8601=function(){};var ko=et("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Et.apply(null,arguments);return this>t?this:t}),Oo=et("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Et.apply(null,arguments);return t>this?this:t});Lt("Z",":"),Lt("ZZ",""),j("Z",eo),j("ZZ",eo),Y(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Bt(t)});var Mo=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Do=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Co=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Jt.fn=Nt.prototype;var To=ee(1,"add"),So=ee(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Eo=et("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)});N(0,["gg",2],0,function(){return this.weekYear()%100}),N(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ee("gggg","weekYear"),Ee("ggggg","weekYear"),Ee("GGGG","isoWeekYear"),Ee("GGGGG","isoWeekYear"),D("weekYear","gg"),D("isoWeekYear","GG"),j("G",to),j("g",to),j("GG",Zi,Ui),j("gg",Zi,Ui),j("GGGG",Ji,qi),j("gggg",Ji,qi),j("GGGGG",Qi,Xi),j("ggggg",Qi,Xi),G(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=g(t)}),G(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),N("Q",0,0,"quarter"),D("quarter","Q"),j("Q",Gi),Y("Q",function(t,e){e[ao]=3*(g(t)-1)}),N("D",["DD",2],"Do","date"),D("date","D"),j("D",Zi),j("DD",Zi,Ui),j("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),Y(["D","DD"],ho),Y("Do",function(t,e){e[ho]=g(t.match(Zi)[0],10)});var Po=S("Date",!0);N("d",0,"do","day"),N("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),N("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),N("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),D("day","d"),D("weekday","e"),D("isoWeekday","E"),j("d",Zi),j("e",Zi),j("E",Zi),j("dd",oo),j("ddd",oo),j("dddd",oo),G(["dd","ddd","dddd"],function(t,e,i){var o=i._locale.weekdaysParse(t);null!=o?e.d=o:l(i).invalidWeekday=t}),G(["d","e","E"],function(t,e,i,o){e[o]=g(t)});var Io="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),zo="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),No="Su_Mo_Tu_We_Th_Fr_Sa".split("_");N("H",["HH",2],0,"hour"),N("h",["hh",2],0,function(){return this.hours()%12||12}),Ue("a",!0),Ue("A",!1),D("hour","h"),j("a",Ve),j("A",Ve),j("H",Zi),j("h",Zi),j("HH",Zi,Ui),j("hh",Zi,Ui),Y(["H","HH"],lo),Y(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),Y(["h","hh"],function(t,e,i){e[lo]=g(t),l(i).bigHour=!0});var Ao=/[ap]\.?m?\.?/i,Lo=S("Hours",!0);N("m",["mm",2],0,"minute"),D("minute","m"),j("m",Zi),j("mm",Zi,Ui),Y(["m","mm"],uo);var Bo=S("Minutes",!1);N("s",["ss",2],0,"second"),D("second","s"),j("s",Zi),j("ss",Zi,Ui),Y(["s","ss"],co);var Ro=S("Seconds",!1);N("S",0,0,function(){return~~(this.millisecond()/100)}),N(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,function(){return 10*this.millisecond()}),N(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),N(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),N(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),N(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),N(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),D("millisecond","ms"),j("S",Ki,Gi),j("SS",Ki,Ui),j("SSS",Ki,Vi);var Fo;for(Fo="SSSS";Fo.length<=9;Fo+="S")j(Fo,$i);for(Fo="S";Fo.length<=9;Fo+="S")Y(Fo,Ze);var jo=S("Milliseconds",!1);N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");var Ho=f.prototype;Ho.add=To,Ho.calendar=oe,Ho.clone=ne,Ho.diff=de,Ho.endOf=_e,Ho.format=pe,Ho.from=fe,Ho.fromNow=me,Ho.to=ve,Ho.toNow=ge,Ho.get=I,Ho.invalidAt=Se,Ho.isAfter=se,Ho.isBefore=re,Ho.isBetween=ae,Ho.isSame=he,Ho.isValid=Ce,Ho.lang=Eo,Ho.locale=ye,Ho.localeData=be,Ho.max=Oo,Ho.min=ko,Ho.parsingFlags=Te,Ho.set=I,Ho.startOf=we,Ho.subtract=So,Ho.toArray=Me,Ho.toObject=De,Ho.toDate=Oe,Ho.toISOString=ce,Ho.toJSON=ce,Ho.toString=ue,Ho.unix=ke,Ho.valueOf=xe,Ho.year=_o,Ho.isLeapYear=dt,Ho.weekYear=Ie,Ho.isoWeekYear=ze,Ho.quarter=Ho.quarters=Le,Ho.month=J,Ho.daysInMonth=Q,Ho.week=Ho.weeks=ft,Ho.isoWeek=Ho.isoWeeks=mt,Ho.weeksInYear=Ae,Ho.isoWeeksInYear=Ne,Ho.date=Po,Ho.day=Ho.days=We,Ho.weekday=Ye,Ho.isoWeekday=Ge,Ho.dayOfYear=gt,Ho.hour=Ho.hours=Lo,Ho.minute=Ho.minutes=Bo,Ho.second=Ho.seconds=Ro,Ho.millisecond=Ho.milliseconds=jo,Ho.utcOffset=jt,Ho.utc=Wt,Ho.local=Yt,Ho.parseZone=Gt,Ho.hasAlignedHourOffset=Ut,Ho.isDST=Vt,Ho.isDSTShifted=qt,Ho.isLocal=Xt,Ho.isUtcOffset=Zt,Ho.isUtc=Kt,Ho.isUTC=Kt,Ho.zoneAbbr=Ke,Ho.zoneName=Je,Ho.dates=et("dates accessor is deprecated. Use date instead.",Po),Ho.months=et("months accessor is deprecated. Use month instead",J),Ho.years=et("years accessor is deprecated. Use year instead",_o),Ho.zone=et("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ht);var Wo=Ho,Yo={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Go={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"},Uo="Invalid date",Vo="%d",qo=/\d{1,2}/,Xo={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"},Zo=b.prototype;Zo._calendar=Yo,Zo.calendar=ti,Zo._longDateFormat=Go,Zo.longDateFormat=ei,Zo._invalidDate=Uo,Zo.invalidDate=ii,Zo._ordinal=Vo,Zo.ordinal=oi,Zo._ordinalParse=qo,Zo.preparse=ni,Zo.postformat=ni,Zo._relativeTime=Xo,Zo.relativeTime=si,Zo.pastFuture=ri,Zo.set=ai,Zo.months=q,Zo._months=fo,Zo.monthsShort=X,Zo._monthsShort=mo,Zo.monthsParse=Z,Zo.week=ut,Zo._week=xo,Zo.firstDayOfYear=pt,Zo.firstDayOfWeek=ct,Zo.weekdays=Re,Zo._weekdays=Io,Zo.weekdaysMin=je,Zo._weekdaysMin=No,Zo.weekdaysShort=Fe,Zo._weekdaysShort=zo,Zo.weekdaysParse=He,Zo.isPM=qe,Zo._meridiemParse=Ao,Zo.meridiem=Xe,k("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===g(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=et("moment.lang is deprecated. Use moment.locale instead.",k),e.langData=et("moment.langData is deprecated. Use moment.localeData instead.",M);var Ko=Math.abs,Jo=Mi("ms"),Qo=Mi("s"),$o=Mi("m"),tn=Mi("h"),en=Mi("d"),on=Mi("w"),nn=Mi("M"),sn=Mi("y"),rn=Ci("milliseconds"),an=Ci("seconds"),hn=Ci("minutes"),dn=Ci("hours"),ln=Ci("days"),un=Ci("months"),cn=Ci("years"),pn=Math.round,fn={s:45,m:45,h:22,d:26,M:11},mn=Math.abs,vn=Nt.prototype;vn.abs=mi,vn.add=gi,vn.subtract=yi,vn.as=ki,vn.asMilliseconds=Jo,vn.asSeconds=Qo,vn.asMinutes=$o,vn.asHours=tn,vn.asDays=en,vn.asWeeks=on,vn.asMonths=nn,vn.asYears=sn,vn.valueOf=Oi,vn._bubble=wi,vn.get=Di,vn.milliseconds=rn,vn.seconds=an,vn.minutes=hn,vn.hours=dn,vn.days=ln,vn.weeks=Ti,vn.months=un,vn.years=cn,vn.humanize=Ii,vn.toISOString=zi,vn.toString=zi,vn.toJSON=zi,vn.locale=ye,vn.localeData=be,vn.toIsoString=et("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",zi),vn.lang=Eo,N("X",0,0,"unix"),N("x",0,0,"valueOf"),j("x",to),j("X",io),Y("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),Y("x",function(t,e,i){i._d=new Date(g(t))}),e.version="2.10.5",i(Et),e.fn=Wo,e.min=It,e.max=zt,e.utc=h,e.unix=Qe,e.months=li,e.isDate=n,e.locale=k,e.invalid=c,e.duration=Jt,e.isMoment=m,e.weekdays=ci,e.parseZone=$e,e.localeData=M,e.isDuration=At,e.monthsShort=ui,e.weekdaysMin=fi,e.defineLocale=O,e.weekdaysShort=pi,e.normalizeUnits=C,e.relativeTimeThreshold=Pi;var gn=e;return gn})}).call(e,i(10)(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=11},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: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 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]],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.style&&a.setAttributeNS(null,"style",o.style),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 in this._options.type)if(this._options.type.hasOwnProperty(i)){var o=this._options.type[i];"Date"==o||"ISODate"==o||"ASPDate"==o?this._type[i]="Date":this._type[i]=o}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(7),s=i(15);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;ns;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=[],s=this,r=s._fieldId,a=function(t){var e=t[r];s._data[e]?(e=s._updateItem(t),o.push(e),n.push(t)):(e=s._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),o.length&&this._trigger("update",{items:o,data:n},e),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=o&&o.type||this._options.type,f=o&&o.filter,m=[];if(void 0!=e)d=s._getItem(e,p),f&&!f(d)&&(d=null);else if(void 0!=i)for(u=0,c=i.length;c>u;u++)d=s._getItem(i[u],p),(!f||f(d))&&m.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=s._getItem(l,p),(!f||f(d))&&m.push(d));if(o&&o.order&&void 0==e&&this._sort(m,o.order),o&&o.fields){var v=o.fields;if(void 0!=e)d=this._filterFields(d,v);else for(u=0,c=m.length;c>u;u++)m[u]=this._filterFields(m[u],v)}if("Object"==a){var g={};for(u=0;ue;e++)l[e]=s[e][this._fieldId]}else for(o in r)r.hasOwnProperty(o)&&(n=this._getItem(o,d),a(n)&&l.push(n[this._fieldId]));else if(h){s=[];for(o in r)r.hasOwnProperty(o)&&s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;i>e;e++)l[e]=s[e][this._fieldId]}else for(o in r)r.hasOwnProperty(o)&&(n=r[o],l.push(n[this._fieldId]));return l},o.prototype.getDataSet=function(){return this},o.prototype.forEach=function(t,e){var i,o,n=e&&e.filter,s=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],o=i[this._fieldId],t(i,o);else for(o in r)r.hasOwnProperty(o)&&(i=this._getItem(o,s),(!n||n(i))&&t(i,o))},o.prototype.map=function(t,e){var i,o=e&&e.filter,n=e&&e.type||this._options.type,s=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,n),(!o||o(i))&&s.push(t(i,a)));return e&&e.order&&this._sort(s,e.order),s},o.prototype._filterFields=function(t,e){if(!t)return t;var i={};if(Array.isArray(e))for(var o in t)t.hasOwnProperty(o)&&-1!=e.indexOf(o)&&(i[o]=t[o]);else for(var o in t)t.hasOwnProperty(o)&&e.hasOwnProperty(o)&&(i[e[o]]=t[o]);return i},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(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=this._data,i=null,o=null;for(var n in e)if(e.hasOwnProperty(n)){var s=e[n],r=s[t];null!=r&&(!i||r>o)&&(i=s,o=r)}return i},o.prototype.min=function(t){var e=this._data,i=null,o=null;for(var n in e)if(e.hasOwnProperty(n)){var s=e[n],r=s[t];null!=r&&(!i||o>r)&&(i=s,o=r)}return i},o.prototype.distinct=function(t){var e,i=this._data,o=[],s=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(o[e]==d){l=!0;break}l||void 0===d||(o[r]=d,r++)}if(s)for(e=0;ethis.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(7),s=i(14);o.prototype.setData=function(t){var e,i,o;if(this._data){this._data.off&&this._data.off("*",this.listener),e=[];for(var n in this._ids)this._ids.hasOwnProperty(n)&&e.push(n);this._ids={},this.length=0,this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,o=e.length;o>i;i++)n=e[i],this._ids[n]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){for(var t,e=this._data.getIds({filter:this._options&&this._options.filter}),i={},o=[],n=[],s=0;so;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.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(19),a=i(14),h=i(16),d=i(7),l=i(20),u=i(18),c=i(21),p=i(22),f=i(23),m=i(24);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),v=240*f,g=this._hsv2rgb(v,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 m(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(_,r,this.zMin)),Math.cos(2*w)>0?(v.textAlign="center",v.textBaseline="top",n.y+=b):Math.sin(2*w)<0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(" "+this.xValueLabel(i.getCurrent())+" ",n.x,n.y),i.next()}for(v.lineWidth=1,o=void 0===this.defaultYStep,i=new m(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*w)<0?(v.textAlign="center",v.textBaseline="top",n.y+=b):Math.sin(2*w)>0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(" "+this.yValueLabel(i.getCurrent())+" ",n.x,n.y),i.next();for(v.lineWidth=1,o=void 0===this.defaultZStep,i=new m(this.zMin,this.zMax,this.zStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(w)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(s,r,i.getCurrent())),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(t.x-b,t.y),v.stroke(),v.textAlign="right",v.textBaseline="middle",v.fillStyle=this.axisColor,v.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();v.lineWidth=1,t=this._convert3Dto2D(new l(s,r,this.zMin)),e=this._convert3Dto2D(new l(s,r,this.zMax)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke(),v.lineWidth=1,c=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(c.x,c.y),v.lineTo(p.x,p.y),v.stroke(),c=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(c.x,c.y),v.lineTo(p.x,p.y),v.stroke(),v.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke();var x=this.xLabel;x.length>0&&(u=.1/this.scale.y,s=(this.xMin+this.xMax)/2,r=Math.cos(w)>0?this.yMin-u:this.yMax+u,n=this._convert3Dto2D(new l(s,r,this.zMin)),Math.cos(2*w)>0?(v.textAlign="center",v.textBaseline="top"):Math.sin(2*w)<0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(x,n.x,n.y));var k=this.yLabel;k.length>0&&(d=.1/this.scale.x,s=Math.sin(w)>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*w)<0?(v.textAlign="center",v.textBaseline="top"):Math.sin(2*w)>0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(k,n.x,n.y));var O=this.zLabel;O.length>0&&(h=30,s=Math.cos(w)>0?this.xMin:this.xMax,r=Math.sin(w)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,n=this._convert3Dto2D(new l(s,r,a)),v.textAlign="right",v.textBaseline="middle",v.fillStyle=this.axisColor,v.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,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),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),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;sc&&(c=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,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],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="
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(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,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=i},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,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(20);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(16);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?void 0:this.values[this.index]},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,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))},d&&this.setOptions(d),i&&this.setGroups(i),e?this.setItems(e):this._redraw()}var n=(i(19),i(3),i(8)),s=i(7),r=i(14),a=i(16),h=i(26),d=i(30),l=i(39),u=i(44),c=i(42),p=i(31),f=i(45),m=i(47)["default"],v=i(47).printStyle,g=i(48).allOptions,y=i(48).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=m.validate(t,g);if(e===!0&&console.log("%cErrors have been found in the supplied options object.",v),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,i=null==this.itemsData;if(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),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var o=this.getItemRange();var n=void 0!=this.options.start?this.options.start:o.min,s=void 0!=this.options.end?this.options.end:o.max;this.setWindow(n,s,{animation:!1})}else this.fit({animation:!1})},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=e.min,o=e.max,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();var s=e(t),a=c(t),d=new Date(s-(t.getWidthLeft()+10)*h),l=new Date(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=o)}),{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,m=s.getTarget(t),v=null;return null!=r?v="item":null!=h?v="custom-time":s.hasParent(m,this.timeAxis.dom.foreground)?v="axis":this.timeAxis2&&s.hasParent(m,this.timeAxis2.dom.foreground)?v="axis":s.hasParent(m,this.itemSet.dom.labelSet)?v="group-label":s.hasParent(m,this.currentTime.bar)?v="current-time":s.hasParent(m,this.dom.center)&&(v="background"),{event:t,item:r?r.id:null,group:a?a.groupId:null,what:v,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){function o(t,e){var i=a().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,moment:a,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animationTimer=null,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.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function n(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function s(t,e){return{x:t.x-r.getAbsoluteLeft(e),y:t.y-r.getAbsoluteTop(e)}}var r=i(7),a=(i(27),i(8)),h=i(28),d=i(29);o.prototype=new h,o.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","moment","activate","hiddenDates","zoomKey"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},o.prototype.setRange=function(t,e,i,o){o!==!0&&(o=!1);var n=void 0!=t?r.convert(t,"Date").valueOf():null,s=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var a=this,h=this.start,l=this.end,u="object"==typeof i&&"duration"in i?i.duration:500,c="object"==typeof i&&"easingFunction"in i?i.easingFunction:"easeInOutQuad",p=r.easingFunctions[c];if(!p)throw new Error("Unknown easing function "+JSON.stringify(c)+". Choose from: "+Object.keys(r.easingFunctions).join(", "));var f=(new Date).valueOf(),m=!1,v=function b(){if(!a.props.touch.dragging){var t=(new Date).valueOf(),e=t-f,i=p(e/u),r=e>u,c=r||null===n?n:h+(n-h)*i,v=r||null===s?s:l+(s-l)*i;g=a._applyRange(c,v),d.updateHiddenDates(a.options.moment,a.body,a.options.hiddenDates),m=m||g,g&&a.body.emitter.emit("rangechange",{start:new Date(a.start),end:new Date(a.end),byUser:o}),r?m&&a.body.emitter.emit("rangechanged",{start:new Date(a.start),end:new Date(a.end),byUser:o}):a.animationTimer=setTimeout(b,20)}};return v()}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),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end),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.options.moment,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?!1:!0,this.endToFront=-i>0?!1:!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(3);e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&!o&&(e(t),o=!0,setTimeout(function(){o=!1},0))},t.on("hammer.input",e.inputHandler)};var o=!1;e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&!n&&(e(t),n=!0,setTimeout(function(){n=!1},0))},t.on("hammer.input",e.inputHandler)};var n=!1;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,e,i){if(e.hiddenDates=[],i&&1==Array.isArray(i)){for(var o=0;o=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"),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()&&(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 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=i(19),s=i(3),r=i(27),a=i(7),h=(i(14),i(16),i(26),i(31),i(39)),d=i(40),l=i(29),u=i(42);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",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,!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"];if(a.selectiveExtend(e,this.options,t),"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._redraw()},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.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(){var t=!1,e=this.options,i=this.props,o=this.dom;if(o){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":"";if(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}),t){var m=3;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,m=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,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",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[v];return i||null},o.prototype._updateUngrouped=function(){var t,e,i=this.groups[v];this.groups[g];if(this.groupsData){if(i){i.hide(),delete this.groups[v];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[v]=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()}},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:v},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==v||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;i0||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(t.stopPropagation(),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),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){i.push(e.id);var s=o._getItemRange(this.itemsData.get(i,this.itemOptions));i=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=s.min&&d<=s.max&&!(a instanceof m)&&i.push(a.id)}}else{var l=i.indexOf(e.id);-1==l?i.push(e.id):i.splice(l,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&&ec;c++){var f=this.visibleItems[c];f.repositionY(e)}return o},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var o=this;if(i.length>0){var s=i[0].top,r=i[0].top+i[0].height;if(n.forEach(i,function(t){s=Math.min(s,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(o.subgroups[t.data.subgroup].height=Math.max(o.subgroups[t.data.subgroup].height,t.height),o.subgroups[t.data.subgroup].visible=!0)}),s>t.axis){var a=s-t.axis;r-=a,n.forEach(i,function(t){t.top-=a})}e=r+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(3),i(2));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,s){this.moment=n,this.current=this.moment(),this._start=this.moment(),this._end=this.moment(),this.autoScale=!0,this.scale="day",this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=s,void 0===s&&(this.hiddenDates=[]),this.format=o.FORMAT}var n=i(8),s=i(29),r=i(7);o.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:""}},o.prototype.setMoment=function(t){this.moment=t,this.current=this.moment(this.current),this._start=this.moment(this._start),this._end=this.moment(this._end)},o.prototype.setFormat=function(t){var e=r.deepExtend({},o.FORMAT);this.format=r.deepExtend(e,t)},o.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?this.moment(t.valueOf()):new Date,this._end=void 0!=e?this.moment(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},o.prototype.start=function(){this.current=this._start.clone(),this.roundToMinor()},o.prototype.roundToMinor=function(){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":case"weekday":this.current.hours(0);case"hour":this.current.minutes(0);case"minute":this.current.seconds(0);case"second":this.current.milliseconds(0)}if(1!=this.step)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":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")}},o.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},o.prototype.next=function(){var t=this.current.valueOf();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"),this.current.subtract(this.current.hours()%this.step,"hour");break;case"weekday":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")}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":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")}if(1!=this.step)switch(this.scale){case"millisecond":this.current.milliseconds()0?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.mlliseconds(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){n.call(this,t,e,i),this.width=0,this.height=0,this.top=0,this.left=0}var n=(i(7),i(32));o.prototype=Object.create(n.prototype),o.prototype.redraw=function(t,e,i){var o=!1;this.visibleItems=this._updateVisibleItems(this.orderedItems,this.visibleItems,t),this.width=this.dom.background.offsetWidth,this.dom.background.style.height="0";for(var n=0,s=this.visibleItems.length;s>n;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(2);i(7);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},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,format:r.FORMAT,moment:h,timeAxis:null},this.options=n.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(7),s=i(28),r=i(35),a=i(29),h=i(8);o.prototype=new s,o.prototype.setOptions=function(t){t&&(n.selectiveExtend(["showMinorLabels","showMajorLabels","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(7*(this.props.minorCharWidth||10)).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 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 l,u,c,p,f,m,v,g,y,b=void 0,w=0;for(h.start(),u=h.getCurrent(),p=this.body.util.toScreen(u);h.hasNext()&&1e3>w;){w++,f=h.isMajor(),y=h.getClassName(),g=h.getLabelMinor(),l=u,c=p,h.next(),u=h.getCurrent(),p=this.body.util.toScreen(u),m=p-c;var _=(g.length+1)*this.props.minorCharWidth0&&(void 0==b&&(b=c),this._repaintMajorText(c,h.getLabelMajor(),t,y)),v=this._repaintMajorLine(c,m,t,y)):_?v=this._repaintMinorLine(c,m,t,y):v&&(v.style.width=parseInt(v.style.width)+m+"px")}if(this.options.showMajorLabels){var x=this.body.util.toTime(0),k=h.getLabelMajor(x),O=k.length*(this.props.majorCharWidth||10)+10;(void 0==b||b>O)&&this._repaintMajorText(0,k,t,y)}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},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(41),r=i(19),a=i(3),h=i(7);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.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-network-configuration button",e.innerHTML="generate options",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className="vis-network-configuration button hover"},e.onmouseout=function(){e.className="vis-network-configuration button"},t.optionsContainer=document.createElement("div"),t.optionsContainer.className="vis-network-configuration vis-option-container",t.domElements.push(t.optionsContainer),t.domElements.push(e)}(),this._push(),this.colorPicker.insertTo(this.container)}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-network-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];n.forEach(function(t){r.appendChild(t)}),i.domElements.push(r)}()}}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-network-configuration 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-network-configuration label 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-network-configuration select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;se&&n>2*e?a.min=2*e:n>.1*e&&(a.min=e/10),2*e>s&&1!==s&&(a.max=2*e),a.value=e):a.value=o;var d=document.createElement("input");d.className="vis-network-configuration rangeinput",d.value=a.value;var l=this;a.onchange=function(){d.value=this.value,l._update(Number(this.value),i)},a.oninput=function(){d.value=this.value};var u=this._makeLabel(i[i.length-1],i);this._makeItem(i,u,a,d)}},{key:"_makeCheckbox",value:function(t,e,i){var o=document.createElement("input");o.type="checkbox",o.className="vis-network-configuration checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"==typeof t?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var n=this;o.onchange=function(){n._update(this.checked,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeTextInput",value:function(t,e,i){var o=document.createElement("input");o.type="text",o.className="vis-network-configuration text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var n=this;o.onchange=function(){n._update(this.value,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeColorField",value:function(t,e,i){var o=this,n=t[1],s=document.createElement("div");e=void 0===e?n:e,"none"!==e?(s.className="vis-network-configuration colorBlock",s.style.backgroundColor=e):s.className="vis-network-configuration colorBlock none",e=void 0===e?n:e,s.onclick=function(){o._showColorPicker(e,s,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,s)}},{key:"_showColorPicker",value:function(t,e,i){var o=this,n=e.getBoundingClientRect(),s=document.body.getBoundingClientRect(),r=n.left+n.width+5,a=n.top-s.top+.5*n.height;this.colorPicker.show(r,a),this.colorPicker.setColor(t),this.colorPicker.setCallback(function(t){var n="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=n,o._update(n,i)})}},{key:"_handleObject",value:function(t){var e=arguments.length<=1||void 0===arguments[1]?[]:arguments[1],i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=!1,n=this.options.filter,s=!1;for(var r in t)if(t.hasOwnProperty(r)){o=!0;var a=t[r],d=h.copyAndExtendArray(e,r);if("function"==typeof n&&(o=n(r,e),o===!1&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,d,!0),this.allowCreation=i===!1)),o!==!1){s=!0;var l=this._getValue(d);if(a instanceof Array)this._handleArray(a,l,d);else if("string"==typeof a)this._makeTextInput(a,l,d);else if("boolean"==typeof a)this._makeCheckbox(a,l,d);else if(a instanceof Object){var u=!0;if(-1!==e.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(u=!1),u===!0)if(void 0!==a.enabled){var c=h.copyAndExtendArray(d,"enabled"),p=this._getValue(c);if(p===!0){var f=this._makeLabel(r,d,!0);this._makeItem(d,f),s=this._handleObject(a,d)||s}else this._makeCheckbox(a,p,d)}else{var f=this._makeLabel(r,d,!0);this._makeItem(d,f),s=this._handleObject(a,d)||s}}else console.error("dont know how to handle",a,r,d)}}return s}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],o=i;t="true"===t?!0:t,t="false"===t?!1:t;for(var n=0;nvar 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,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:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,left:{range:{min:void 0,max:void 0},format:function(t){return t},title:{text:void 0,style:void 0}},right:{range:{min:void 0,max:void 0},format:function(t){return t},title:{text:void 0,style:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},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;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.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=n.option.asSize(-i.props.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var n=i(7),s=i(13),r=i(14),a=i(16),h=i(28),d=i(51),l=i(53),u=i(57),c=i(56),p=(i(54),"__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&&void 0!==this.body.domProps.centerContainer.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),u={};for(this._getRelevantData(a,u,d,l),this._applySampling(a,u),e=0;ep&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;ro){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)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=[],l=0;r>l;l+=s)d.push(n[l]);e[t[o]]=d}}},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.getData(o)):h=h.concat(n.getData(o)):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,0==this.yAxisRight.master?(1==r?this.yAxisLeft.lineOffset=this.yAxisRight.width:this.yAxisLeft.lineOffset=0,n=this.yAxisLeft.redraw()||n,this.yAxisRight.stepPixels=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,this.yAxisRight.amountOfSteps=this.yAxisLeft.amountOfSteps,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;a0&&(t=0),this.range.start=t,this.range.end=e},o.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(this.groups[i].visible!==!0||void 0!==this.linegraphOptions.visibility[i]&&this.linegraphOptions.visibility[i]!==!0||e++);if(0===this.amountOfGroups||0===e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=this.options.visible===!0?Number((""+this.options.width).replace("px","")):0;var o=this.props,n=this.dom.frame;n.className="vis-data-axis",this._calculateCharSize();var s=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;o.minorLabelHeight=r?o.minorCharHeight:0,o.majorLabelHeight=a?o.majorCharHeight:0,o.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,o.minorLineHeight=1,o.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,o.majorLineHeight=1,"left"===s?(n.style.top="0",n.style.left="0",n.style.bottom="",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.left.width,this.props.height=this.body.domProps.left.height):(n.style.top="",n.style.bottom="0",n.style.left="0",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.right.width,this.props.height=this.body.domProps.right.height),t=this._redrawLabels(),t=this._isResized()||t,this.options.icons===!0?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(s)}return t},o.prototype._redrawLabels=function(){var t=!1;s.prepareElements(this.DOMelements.lines),s.prepareElements(this.DOMelements.labels);var e,i=this.options.orientation;if(this.master===!1){var o,n,r,h;-1!==this.zeroCrossing&&this.options.alignZeros===!0?this.range.end>0?(o=this.range.end/this.zeroCrossing,n=this.range.end-this.amountOfSteps*o,r=this.range.end):(o=-1*this.range.start/(this.amountOfSteps-this.zeroCrossing),n=this.range.start,r=this.range.start+o*this.amountOfSteps):(n=this.range.start,r=this.range.end),h=this.stepPixels}else h=this.props.majorCharHeight,n=this.range.start,r=this.range.end;if(this.step=e=new a(n,r,h,this.dom.frame.offsetHeight,this.options[this.options.orientation].range,this.options[this.options.orientation].format,this.master===!1&&this.options.alignZeros),this.master===!0)this.stepPixels=this.dom.frame.offsetHeight/e.marginRange*e.step,this.amountOfSteps=Math.ceil(this.dom.frame.offsetHeight/this.stepPixels);else if(this.options.alignZeros===!0&&-1!==this.zeroCrossing){var d=(e.current-this.zeroCrossing*e.step)/e.step;this.step.shift(d)}this.valueAtBottom=e.marginEnd,this.maxLabelSize=0;for(var l=0,u=0,c=!1;u0&&u!==this.amountOfSteps&&((this.options.showMinorLabels&&c===!1||this.master===!1&&this.options.showMinorLabels===!0)&&this._redrawLabel(l-2,e.getCurrent(),i,"vis-y-axis vis-minor",this.props.minorCharHeight),c&&this.options.showMajorLabels&&this.master===!0||this.options.showMinorLabels===!1&&this.master===!1&&c===!0?(l>=0&&this._redrawLabel(l-2,e.getCurrent(),i,"vis-y-axis vis-major",this.props.majorCharHeight),this._redrawLine(l,i,"vis-grid vis-horizontal vis-major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(l,i,"vis-grid vis-horizontal vis-minor",this.options.minorLinesOffset,this.props.minorLineWidth)),this.master===!0&&0===e.current&&(this.zeroCrossing=u),e.next(),u+=1;this.master===!0&&0===e.current&&(this.zeroCrossing=u),this.conversionFactor=this.stepPixels/e.step;var p=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(p=this.props.titleCharHeight);var f=this.options.icons===!0?Math.max(this.options.iconWidth,p)+this.options.labelOffsetX+15:p+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-f&&this.options.visible===!0?(this.width=this.maxLabelSize+f,this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),t=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+f),this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),t=!0):(s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),t=!1),t},o.prototype.convertValue=function(t){var e=this.valueAtBottom-t,i=e*this.conversionFactor;return i},o.prototype.screenToValue=function(t){return this.valueAtBottom-t/this.conversionFactor},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.maxLabelSizes&&(h=s);for(var d=!1,l=h;Math.abs(l)<=Math.abs(s);l++){a=Math.pow(10,l);for(var u=0;u=n){d=!0,r=u;break}}if(d===!0)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},i.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,this.alignZeros===!0&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},i.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*(this.scale*this.minorSteps[this.stepIndex])?e+this.scale*this.minorSteps[this.stepIndex]:e},i.prototype.hasNext=function(){return this.current>=this.marginStart},i.prototype.next=function(){var t=this.current;this.current-=this.step,this.current===t&&(this.current=this._end)},i.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},i.prototype.getCurrent=function(){var t=Math.abs(this.current)t)for(var e=0;-t>e;e++)this.previous();else if(t>0)for(var e=0;t>e;e++)this.next()},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"];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(7),s=i(13),r=i(54),a=i(56),h=i(55);o.prototype.setItems=function(t){if(null!=t){this.itemsData=t,1==this.options.sort&&this.itemsData.sort(function(t,e){return t.x-e.x});for(var e=0;et[o].y?t[o].y:e,i=i0){t.sort(function(t,e){return t.x===e.x?t.groupIde[s].y?e[s].y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0&&(i=Math.min(i,Math.abs(e[o-1].x-e[o].x))),0===i&&(void 0===t[e[o].x]&&(t[e[o].x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].x].amount+=1)},o.prototype.draw=function(t,e,i){if(null!=t&&t.length>0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=n.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t),1==e.options.shaded.enabled){var d,l=n.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&s.draw(t,e,i)}},o._catmullRomUniform=function(t){for(var e,i,o,n,s,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;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={x:(-e.x+6*i.x+o.x)*h,y:(-e.y+6*i.y+o.y)*h},r={x:(i.x+6*o.x-n.x)*h,y:(i.y+6*o.y-n.y)*h},a+="C"+s.x+","+s.y+" "+r.x+","+r.y+" "+o.x+","+o.y+" ";return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var o,n,s,r,a,h,d,l,u,c,p,f,m,v,g,y,b,w,_,x=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",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.x-n.x,2)+Math.pow(o.y-n.y,2)),l=Math.sqrt(Math.pow(n.x-s.x,2)+Math.pow(n.y-s.y,2)),u=Math.sqrt(Math.pow(s.x-r.x,2)+Math.pow(s.y-r.y,2)),v=Math.pow(u,i),y=Math.pow(u,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),_=Math.pow(d,i),w=Math.pow(d,2*i),c=2*w+3*_*g+b,p=2*y+3*v*g+b,f=3*_*(_+g),f>0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={x:(-b*o.x+c*n.x+w*s.x)*f,y:(-b*o.y+c*n.y+w*s.y)*f},h={x:(y*n.x+p*s.x-b*r.x)*m,y:(y*n.y+p*s.y-b*r.y)*m},0==a.x&&0==a.y&&(a=n),0==h.x&&0==h.y&&(h=s),x+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+s.x+","+s.y+" ";return x},o._linear=function(t){for(var e="",i=0;it[o].y?t[o].y:e,i=it[o].y?t[o].y:e,i=i0&&(r=Math.min(r,Math.abs(c[l-1].x-a))),h=o._getSafeDrawData(r,d,m);else{var g=l+(p[a].amount-p[a].resolved),y=l-(p[a].resolved+1);g0&&(r=Math.min(r,Math.abs(c[y].x-a))),h=o._getSafeDrawData(r,d,m),p[a].resolved+=1,d.options.stack===!0?c[l].y0&&(i=Math.min(i,Math.abs(e[o-1].x-e[o].x))),0===i&&(void 0===t[e[o].x]&&(t[e[o].x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].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.x===e.x?t.groupIde[s].y?e[s].y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=nt?-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.prepareElements(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:"cleanup",value:function(){return this.shape.cleanup()}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],o=["color","font","fixed","shadow"];if(B.selectiveNotDeepExtend(o,t,e,i),B.mergeOptions(t,e,"shadow"),void 0!==e.color&&null!==e.color){var n=B.parseColor(e.color);B.fillIfDefined(t.color,n)}else i===!0&&null===e.color&&(t.color=void 0,delete t.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&&a["default"].parseOptions(t.font,e),void 0!==e.scaling&&B.mergeOptions(t.scaling,e.scaling,"label")}}]),t}();e["default"]=R,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.options.scaling.label.maxVisible&&(r=Number(this.options.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.options.labelHighlightBold?"bold ":"")+r+"px "+this.options.font.face,t.fillStyle=u,t.textAlign="center",this.options.font.strokeWidth>0&&(t.lineWidth=this.options.font.strokeWidth,t.strokeStyle=c,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("horizontal"!==this.options.font.align&&this.pointToSelf===!1){e=0,i=0;var n=2;"top"===this.options.font.align?(t.textBaseline="alphabetic",i-=2*n):"bottom"===this.options.font.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.options.font.color||"#000000",i=this.options.font.strokeColor||"#ffffff";if(t<=this.options.scaling.label.drawThreshold){var o=Math.max(0,Math.min(1,1-(this.options.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.options.font.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.options.font.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.options.font.size,"hanging"===n&&(this.size.top+=.5*this.options.font.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.options.label){o=String(this.options.label).split("\n"),n=o.length,t.font=(e&&this.options.labelHighlightBold?"bold ":"")+this.options.font.size+"px "+this.options.font.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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=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;t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.lineWidth=o?a:r,t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),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(),this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t),t.restore()}},{key:"_drawImageAtPosition",value:function(t){0!=this.imageObj.width&&(t.globalAlpha=1,this.enableShadow(t),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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(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&&(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.resize(t),this._distanceToBorder(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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(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){this.resize(t);var i=this.width/2,o=this.height/2,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&&(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=["id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","selectionWidth","selfReferenceSize","to","title","value","width"];if(v.selectiveDeepExtend(o,t,e,i),v.mergeOptions(t,e,"smooth"),v.mergeOptions(t,e,"shadow"),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=void 0,delete t.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),v.mergeOptions(t.scaling,e.scaling,"label")):i===!0&&null===e.scaling&&(t.scaling=void 0,delete t.scaling),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var n=e.arrows.toLowerCase();-1!=n.indexOf("to")&&(t.arrows.to.enabled=!0),-1!=n.indexOf("middle")&&(t.arrows.middle.enabled=!0),-1!=n.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));v.mergeOptions(t.arrows,e.arrows,"to"),v.mergeOptions(t.arrows,e.arrows,"middle"),v.mergeOptions(t.arrows,e.arrows,"from")}else i===!0&&null===e.arrows&&(t.arrows=void 0,delete t.arrows);if(void 0!==e.color&&null!==e.color)if(v.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var s=!1;void 0!==e.color.color&&(t.color.color=e.color.color,s=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,s=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,s=!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&&s===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=void 0,delete t.color);void 0!==e.font&&a["default"].parseOptions(t.font,e)}}]),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&&(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.y=l&&h>d;){var m=.5*(l+u);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:u=m:f===!1?u=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,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,m=void 0,v=.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)),m=p-f,!(Math.abs(m)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,m=c-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,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"drawArrowHead",value:function(t,e,i,o,s){t.strokeStyle=this.getColor(t,o,s),t.fillStyle=t.strokeStyle,t.lineWidth=this.getLineWidth(o,s);var r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0;if("from"===e?(d=this.from,l=this.to,u=.1,c=this.options.arrows.from.scaleFactor):"to"===e?(d=this.to,l=this.from,u=-.1,c=this.options.arrows.to.scaleFactor):(d=this.to,l=this.from,c=this.options.arrows.middle.scaleFactor),d!=l){if("middle"!==e)if(this.options.smooth.enabled===!0){h=this.findBorderPosition(d,t,{via:i});var p=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);r=Math.atan2(h.y-p.y,h.x-p.x)}else r=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else r=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.6,i);a=(10+5*this.options.width)*c,t.arrow(h.x,h.y,r,a),this.enableShadow(t),t.fill(),this.disableShadow(t),t.stroke()}else{var f=void 0,m=void 0,v=this._getCircleData(t),g=n(v,3),y=g[0],b=g[1],w=g[2];"from"===e?(m=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),f=-2*m.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(m=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),f=-2*m.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(m=this._pointOnCircle(y,b,w,.175),f=3.9269908169872414);var _=(10+5*this.options.width)*c;t.arrow(m.x,m.y,f,_),this.enableShadow(t),t.fill(),this.disableShadow(t),t.stroke()}}},{key:"enableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor="rgba(0,0,0,0.5)",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&&(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:"_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.from.x+a[1]*o.x+a[2]*n.x+a[3]*this.to.x,d=a[0]*this.from.y+a[1]*o.y+a[2]*n.y+a[3]*this.to.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&&(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,v[0]=Math.pow(1-u,3),v[1]=3*u*Math.pow(1-u,2),v[2]=3*Math.pow(u,2)*(1-u),v[3]=Math.pow(u,3),c=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,c,p,n,s),h=h>d?d:h),f=c,m=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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i1&&(this.startedStabilization=!1),this.stopSimulation())}},{key:"_emitStabilized",value:function(){var t=this;(this.stabilizationIterations>1||this.initialStabilizationEmitted===!1)&&(this.initialStabilizationEmitted=!0,setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:t.stabilizationIterations}),t.stabilizationIterations=0},0))}},{key:"physicsTick",value:function(){this.stabilized===!1&&(this.calculateForces(),this.stabilized=this.moveNodes(),this.stabilized===!0?this.revert():this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilizationIterations++)}},{key:"updatePhysicsData",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)t.hasOwnProperty(i)&&t[i].options.physics===!0&&this.physicsBody.physicsNodeIndices.push(i);for(var o in e)e.hasOwnProperty(o)&&e[o].options.physics===!0&&this.physicsBody.physicsEdgeIndices.push(o);for(var n=0;na&&o===!0,t=!0}return t===!0?n>.5*this.options.maxVelocity?!1:o:!0}},{key:"_performStep",value:function(t,e){var i=this.body.nodes[t],o=this.options.timestep,n=this.physicsBody.forces,s=this.physicsBody.velocities;if(this.previousStates[t]={x:i.x,y:i.y,vx:s[t].x,vy:s[t].y},i.options.fixed.x===!1){var r=this.modelOptions.damping*s[t].x,a=(n[t].x-r)/i.options.mass;s[t].x+=a*o,s[t].x=Math.abs(s[t].x)>e?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.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(){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,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 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(s).length>0&&i.push({nodes:n,edges:s})}}}for(var o=0;oo?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 d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];void 0!==u[d]&&(l.x=u[d].x||o.x,l.y=u[d].y||o.y)}}else for(var d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];l=n[d],l.x=o.x,l.y=o.y}for(var d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];l.vx=o.vx,l.vy=o.vy,l.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[d]}for(var c in s)if(s.hasOwnProperty(c)){var p=s[c];if(void 0===this.body.nodes[p.fromId]||void 0===this.body.nodes[p.toId]||p.toId==t||p.fromId==t)p.cleanup(),p.disconnect(),delete this.body.edges[c];else if(void 0!==this.clusteredNodes[p.fromId]||void 0!==this.clusteredNodes[p.toId]){var f=void 0,m=void 0,v=this.clusteredNodes[p.fromId]||this.clusteredNodes[p.toId],g=v.clusterId,y=this.body.nodes[g];if(y.containedEdges[c]=p,void 0!==this.clusteredNodes[p.fromId]?(f=g,m=p.toId):(f=p.fromId,m=g),this.body.nodes[f].options.hidden!==!0&&this.body.nodes[m].options.hidden!==!0){var b=this._cloneOptions(p,"edge"),w="clusterEdge:"+h.randomUUID();h.deepExtend(b,y.clusterEdgeProperties),h.deepExtend(b,{from:f,to:m,hidden:!1,physics:!0,id:w});var _=this.body.functions.createEdge(b);this.body.edges[w]=_,this.body.edges[w].connect()}}else p.setOptions({physics:!0,hidden:!1})}for(var x=[],k=0;ko;)e.push(this.clusteredNodes[t].node),t=this.clusteredNodes[t].clusterId,o++;return e.push(this.body.nodes[t]),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"]=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")}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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,i){for(var o=!0;o;){var n=t,s=e,r=i;a=d=h=void 0,o=!1,null===n&&(n=Function.prototype);var a=Object.getOwnPropertyDescriptor(n,s);if(void 0!==a){if("value"in a)return a.value;var h=a.get;return void 0===h?void 0:h.call(r)}var d=Object.getPrototypeOf(n);if(null===d)return void 0;t=d,e=s,i=r,o=!0}},a=i(62),h=o(a),d=function(t){function e(t,i,o,s,a){n(this,e),r(Object.getPrototypeOf(e.prototype),"constructor",this).call(this,t,i,o,s,a),this.isCluster=!0,this.containedNodes={},this.containedEdges={}}return s(e,t),e}(h["default"]);e["default"]=d,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,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(),void 0===this.pixelRatio&&(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;e.clearRect(0,0,i,o),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),this.controlNodesActive===!0&&this._drawControlNodes(e),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)for(var r=0;rt.shape.boundingBox.left&&(n=t.shape.boundingBox.left),st.shape.boundingBox.top&&(i=t.shape.boundingBox.top),ot.shape.boundingBox.left&&(n=t.shape.boundingBox.left),st.shape.boundingBox.top&&(i=t.shape.boundingBox.top),o.5*this.body.nodeIndices.length)return void this.fit(i,!1);t=this._getRange(i.nodes);var a=this.body.nodeIndices.length;e=12.662/(a+7.4147)+.0964822;var h=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);e*=h}else{this.body.emitter.emit("_resizeNodes"),t=this._getRange(i.nodes);var d=1.1*Math.abs(t.maxX-t.minX),l=1.1*Math.abs(t.maxY-t.minY),u=this.canvas.frame.canvas.clientWidth/d,c=this.canvas.frame.canvas.clientHeight/l;e=c>=u?u:c}e>1?e=1:0===e&&(e=1);var p=this._findCenter(t),f={position:p,scale:e,animation:i.animation};this.moveTo(f)}},{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=s.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"]=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;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.nodesChanges,c=l.edgesChanges;h-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0):0>h-n?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0):h===n&&u===!0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0),a-o>0?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):0>a-o?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0):a===o&&c===!0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),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){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,m=void 0,v=[],c=0;c0&&(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"]=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]: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];return void 0}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return void 0}},{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.adaptAllOptions(e);if(i===!0)return this.body.emitter.emit("refresh"),s.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptions",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={solver:"hierarchicalRepulsion"},this.optionsBackup.physics={solver:"barnesHut"}):"object"==typeof t.physics?(this.optionsBackup.physics={solver:"barnesHut"},void 0!==t.physics.solver&&(this.optionsBackup.physics={solver:t.physics.solver}),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;e0){var t=void 0,e=void 0,i=!1,o=!1;this.hierarchicalLevels={},this.nodeSpacing=100;for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchicalLevels[e]=t.options.level):o=!0);if(o===!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.");o===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():("directed"===this.options.hierarchical.sortMethod,this._determineLevelsDirected()));var n=this._getDistribution();this._placeNodesByHierarchy(n)}}},{key:"_placeNodesByHierarchy",value:function(t){var e=void 0,i=void 0;this.positionedNodes={};for(var o in t)if(t.hasOwnProperty(o))for(e in t[o].nodes)t[o].nodes.hasOwnProperty(e)&&(i=t[o].nodes[e],"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(void 0===i.x&&(i.x=t[o].distance),t[o].distance=i.x+this.nodeSpacing):(void 0===i.y&&(i.y=t[o].distance),t[o].distance=i.y+this.nodeSpacing),this.positionedNodes[e]=!0,this._placeBranchNodes(i.edges,i.id,t,o))}},{key:"_getDistribution",value:function(){var t={},e=void 0,i=void 0;for(e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){i=this.body.nodes[e];var o=void 0===this.hierarchicalLevels[e]?0:this.hierarchicalLevels[e];"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(i.y=this.options.hierarchical.levelSeparation*o,i.options.fixed.y=!0):(i.x=this.options.hierarchical.levelSeparation*o,i.options.fixed.x=!0),void 0===t[o]&&(t[o]={amount:0,nodes:{},distance:0}),t[o].amount+=1,t[o].nodes[e]=i}return t}},{key:"_getHubSize",value:function(){var t=0;for(var e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){var i=this.body.nodes[e];void 0===this.hierarchicalLevels[e]&&(t=i.edges.length0&&(i=this._getHubSize(),0!==i);)for(t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&(e=this.body.nodes[t],e.edges.length===i&&this._setLevelByHubsize(0,e))}},{key:"_setLevelByHubsize",value:function(t,e){if(void 0===this.hierarchicalLevels[e.id]){var i=void 0;this.hierarchicalLevels[e.id]=t;for(var o=0;oo&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(void 0===s.x&&(s.x=Math.max(i[a].distance,r.x)),i[a].distance=s.x+this.nodeSpacing,this.positionedNodes[s.id]=!0):(void 0===s.y&&(s.y=Math.max(i[a].distance,r.y)),i[a].distance=s.y+this.nodeSpacing),this.positionedNodes[s.id]=!0,s.edges.length>1&&this._placeBranchNodes(s.edges,s.id,i,a))}}}]),t}();e["default"]=r,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,!0);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);return i.id="targetNode"+s.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e,this.body.functions.createNode(i)}},{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}},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},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},hierarchical:{enabled:{"boolean":o},levelSeparation:{number:n},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},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},useImageSize:{"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},__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,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],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]}},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,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],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){"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),m=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,m,c,m),this.bezierCurveTo(c-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),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,z=P.charAt(0)}function n(){I++,z=P.charAt(I)}function s(){return P.charAt(I+1)}function r(t){return L.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(A=S.NULL,N="";" "===z||" "===z||"\n"===z||"\r"===z;)n();do{var t=!1;if("#"===z){for(var e=I-1;" "===P.charAt(e)||" "===P.charAt(e);)e--;if("\n"===P.charAt(e)||""===P.charAt(e)){for(;""!=z&&"\n"!=z;)n();t=!0}}if("/"===z&&"/"===s()){for(;""!=z&&"\n"!=z;)n();t=!0}if("/"===z&&"*"===s()){for(;""!=z;){if("*"===z&&"/"===s()){n(),n();break}n()}t=!0}for(;" "===z||" "===z||"\n"===z||"\r"===z;)n()}while(t);if(""===z)return void(A=S.DELIMITER);var i=z+s();if(E[i])return A=S.DELIMITER,N=i,n(),void n();if(E[z])return A=S.DELIMITER,N=z,void n();if(r(z)||"-"===z){for(N+=z,n();r(z);)N+=z,n();return"false"===N?N=!1:"true"===N?N=!0:isNaN(Number(N))||(N=Number(N)),void(A=S.IDENTIFIER)}if('"'===z){for(n();""!=z&&('"'!=z||'"'===z&&'"'===s());)N+=z,'"'===z&&n(),n();if('"'!=z)throw _('End of string " expected');return n(),void(A=S.IDENTIFIER)}for(A=S.UNKNOWN;""!=z;)N+=z,n();throw new SyntaxError('Syntax error in part "'+x(N,30)+'"')}function p(){var t={};if(o(),c(),"strict"===N&&(t.strict=!0,c()),("graph"===N||"digraph"===N)&&(t.type=N,c()),A===S.IDENTIFIER&&(t.id=N,c()),"{"!=N)throw _("Angle bracket { expected");if(c(),f(t),"}"!=N)throw _("Angle bracket } expected");if(c(),""!==N)throw _("End of file expected");return c(),delete t.node,delete t.edge,delete t.graph,t}function f(t){for(;""!==N&&"}"!=N;)m(t),";"===N&&c()}function m(t){var e=v(t);if(e)return void b(t,e);var i=g(t);if(!i){if(A!=S.IDENTIFIER)throw _("Identifier expected");var o=N;if(c(),"="===N){if(c(),A!=S.IDENTIFIER)throw _("Identifier expected");t[o]=N,c()}else y(t,o)}}function v(t){var e=null;if("subgraph"===N&&(e={},e.type="subgraph",c(),A===S.IDENTIFIER&&(e.id=N,c())),"{"===N){if(c(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,f(e),"}"!=N)throw _("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"===N?(c(),t.node=w(),"node"):"edge"===N?(c(),t.edge=w(),"edge"):"graph"===N?(c(),t.graph=w(),"graph"):null}function y(t,e){var i={id:e},o=w();o&&(i.attr=o),d(t,i),b(t,e)}function b(t,e){for(;"->"===N||"--"===N;){var i,o=N;c();var n=v(t);if(n)i=n;else{if(A!=S.IDENTIFIER)throw _("Identifier or subgraph expected");i=N,d(t,{id:i}),c()}var s=w(),r=u(t,e,i,o,s);l(t,r),e=i}}function w(){for(var t=null;"["===N;){for(c(),t={};""!==N&&"]"!=N;){if(A!=S.IDENTIFIER)throw _("Attribute name expected");var e=N;if(c(),"="!=N)throw _("Equal sign = expected");if(c(),A!=S.IDENTIFIER)throw _("Attribute value expected");var i=N;h(t,e,i),c(),","==N&&c()}if("]"!=N)throw _("Bracket ] expected");c()}return t}function _(t){return new SyntaxError(t+', got "'+x(N,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,z="",N="",A=S.NULL,L=/[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 n;if(void 0===t)return void 0;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;n=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){for(var n,s,r,a,h=1e4,d=0,l=0,u=t.length-1;u>=l&&h>d;){if(a=Math.floor(.5*(u+l)),n=t[Math.max(0,a-1)][i],s=t[a][i],r=t[Math.min(t.length-1,a+1)][i],s==e)return a;if(e>n&&s>e)return"before"==o?Math.max(0,a-1):a;if(e>s&&r>e)return"before"==o?a:Math.min(t.length-1,a+1);e>s?l=a+1:u=a-1,d++}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 zi.apply(null,arguments)}function i(t){zi=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 Ai)o=Ai[i],n=e[o],"undefined"!=typeof n&&(t[o]=n);return t}function f(t){p(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),Bi===!1&&(Bi=!0,e.updateOffset(this),Bi=!1)}function m(t){return t instanceof f||null!=t&&null!=t._isAMomentObject}function v(t){return 0>t?Math.ceil(t):Math.floor(t)}function g(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=v(e)),i}function y(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&&g(t[o])!==g(e[o]))&&r++;return r+s}function b(){}function w(t){return t?t.toLowerCase().replace("_","-"):t}function _(t){for(var e,i,o,n,s=0;s0;){if(o=x(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&y(n,i,!0)>=e-1)break;e--}s++}return null}function x(e){var i=null;if(!Ri[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=Li._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),k(i)}catch(o){}return Ri[e]}function k(t,e){var i;return t&&(i="undefined"==typeof e?M(t):O(t,e),i&&(Li=i)),Li._abbr}function O(t,e){return null!==e?(e.abbr=t,Ri[t]=Ri[t]||new b,Ri[t].set(e),k(t),Ri[t]):(delete Ri[t],null)}function M(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Li;if(!o(t)){if(e=x(t))return e;t=[t]}return _(t)}function D(t,e){var i=t.toLowerCase();Fi[i]=Fi[i+"s"]=Fi[e]=t}function C(t){return"string"==typeof t?Fi[t]||Fi[t.toLowerCase()]:void 0}function T(t){var e,i,o={};for(i in t)r(t,i)&&(e=C(i),e&&(o[e]=t[i]));return o}function E(t,i){return function(o){return null!=o?(P(this,t,o),e.updateOffset(this,i),this):S(this,t)}}function S(t,e){return t._d["get"+(t._isUTC?"UTC":"")+e]()}function P(t,e,i){return t._d["set"+(t._isUTC?"UTC":"")+e](i)}function I(t,e){var i;if("object"==typeof t)for(i in t)this.set(i,t[i]);else if(t=C(t),"function"==typeof this[t])return this[t](e);return this}function N(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 z(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Yi[t]=n),e&&(Yi[e[0]]=function(){return N(n.apply(this,arguments),e[1],e[2])}),i&&(Yi[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function L(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function A(t){var e,i,o=t.match(ji);for(e=0,i=o.length;i>e;e++)Yi[o[e]]?o[e]=Yi[o[e]]:o[e]=L(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=R(e,t.localeData()),Wi[e]=Wi[e]||A(e),Wi[e](t)):t.localeData().invalidDate()}function R(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(Hi.lastIndex=0;o>=0&&Hi.test(t);)t=t.replace(Hi,i),Hi.lastIndex=0,o-=1;return t}function F(t){return"function"==typeof t&&"[object Function]"===Object.prototype.toString.call(t)}function j(t,e,i){no[t]=F(e)?e:function(t){return t&&i?i:e}}function H(t,e){return r(no,t)?no[t](e._strict,e._locale):new RegExp(W(t))}function W(t){return t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(o=function(t,i){i[e]=g(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 K(t,e){var i;return"string"==typeof e&&(e=t.localeData().monthsParse(e),"number"!=typeof e)?t:(i=Math.min(t.date(),V(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t)}function J(t){return null!=t?(K(this,t),e.updateOffset(this,!0),this):S(this,"Month")}function Q(){return V(this.year(),this.month())}function $(t){var e,i=t._a;return i&&-2===l(t).overflow&&(e=i[ao]<0||i[ao]>11?ao:i[ho]<1||i[ho]>V(i[ro],i[ao])?ho:i[lo]<0||i[lo]>24||24===i[lo]&&(0!==i[uo]||0!==i[co]||0!==i[po])?lo:i[uo]<0||i[uo]>59?uo:i[co]<0||i[co]>59?co:i[po]<0||i[po]>999?po:-1,l(t)._overflowDayOfYear&&(ro>e||e>ho)&&(e=ho),l(t).overflow=e),t}function tt(t){e.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function et(t,e){var i=!0;return a(function(){return i&&(tt(t+"\n"+(new Error).stack),i=!1),e.apply(this,arguments)},e)}function it(t,e){vo[t]||(tt(e),vo[t]=!0)}function ot(t){var e,i,o=t._i,n=go.exec(o);if(n){for(l(t).iso=!0,e=0,i=yo.length;i>e;e++)if(yo[e][1].exec(o)){t._f=yo[e][0];break}for(e=0,i=bo.length;i>e;e++)if(bo[e][1].exec(o)){t._f+=(n[6]||" ")+bo[e][0];break}o.match(eo)&&(t._f+="Z"),xt(t)}else t._isValid=!1}function nt(t){var i=wo.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(ot(t),void(t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t))))}function st(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return 1970>t&&a.setFullYear(t),a}function rt(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function at(t){return ht(t)?366:365}function ht(t){return t%4===0&&t%100!==0||t%400===0}function dt(){return ht(this.year())}function lt(t,e,i){var o,n=i-e,s=i-t.day();return s>n&&(s-=7),n-7>s&&(s+=7),o=St(t).add(s,"d"),{week:Math.ceil(o.dayOfYear()/7),year:o.year()}}function ut(t){return lt(t,this._week.dow,this._week.doy).week}function ct(){return this._week.dow}function pt(){return this._week.doy}function ft(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function mt(t){var e=lt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function vt(t,e,i,o,n){var s,r=6+n-o,a=rt(t,0,1+r),h=a.getUTCDay();return n>h&&(h+=7),i=null!=i?1*i:n,s=1+r+7*(e-1)-h+i,{year:s>0?t:t-1,dayOfYear:s>0?s:at(t-1)+s}}function gt(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 yt(t,e,i){return null!=t?t:null!=e?e:i}function bt(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function wt(t){var e,i,o,n,s=[];if(!t._d){for(o=bt(t),t._w&&null==t._a[ho]&&null==t._a[ao]&&_t(t),t._dayOfYear&&(n=yt(t._a[ro],o[ro]),t._dayOfYear>at(n)&&(l(t)._overflowDayOfYear=!0),i=rt(n,0,t._dayOfYear),t._a[ao]=i.getUTCMonth(),t._a[ho]=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[lo]&&0===t._a[uo]&&0===t._a[co]&&0===t._a[po]&&(t._nextDay=!0,t._a[lo]=0),t._d=(t._useUTC?rt:st).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[lo]=24)}}function _t(t){var e,i,o,n,s,r,a;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(s=1,r=4,i=yt(e.GG,t._a[ro],lt(St(),1,4).year),o=yt(e.W,1),n=yt(e.E,1)):(s=t._locale._week.dow,r=t._locale._week.doy,i=yt(e.gg,t._a[ro],lt(St(),s,r).year),o=yt(e.w,1),null!=e.d?(n=e.d,s>n&&++o):n=null!=e.e?e.e+s:s),a=vt(i,o,n,r,s),t._a[ro]=a.year,t._dayOfYear=a.dayOfYear}function xt(t){if(t._f===e.ISO_8601)return void ot(t);t._a=[],l(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=R(t._f,t._locale).match(ji)||[],i=0;i0&&l(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Yi[s]?(o?l(t).empty=!1:l(t).unusedTokens.push(s),U(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[lo]<=12&&t._a[lo]>0&&(l(t).bigHour=void 0),t._a[lo]=kt(t._locale,t._a[lo],t._meridiem),wt(t),$(t)}function kt(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 Ot(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 Mt(t){if(!t._d){var e=T(t._i);t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],wt(t)}}function Dt(t){var e=new f($(Ct(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Ct(t){var e=t._i,i=t._f;return t._locale=t._locale||M(t._l),null===e||void 0===i&&""===e?c({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),m(e)?new f($(e)):(o(i)?Ot(t):i?xt(t):n(e)?t._d=e:Tt(t),t))}function Tt(t){var i=t._i;void 0===i?t._d=new Date:n(i)?t._d=new Date(+i):"string"==typeof i?nt(t):o(i)?(t._a=s(i.slice(0),function(t){return parseInt(t,10)}),wt(t)):"object"==typeof i?Mt(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,Dt(s)}function St(t,e,i,o){return Et(t,e,i,o,!1)}function Pt(t,e){var i,n;if(1===e.length&&o(e[0])&&(e=e[0]),!e.length)return St();for(i=e[0],n=1;nt&&(t=-t,i="-"),i+N(~~(t/60),2)+e+N(~~t%60,2)})}function Bt(t){var e=(t||"").match(eo)||[],i=e[e.length-1]||[],o=(i+"").match(Mo)||["-",0,0],n=+(60*o[1])+g(o[2]);return"+"===o[0]?n:-n}function Rt(t,i){var o,s;return i._isUTC?(o=i.clone(),s=(m(t)||n(t)?+t:+St(t))-+o,o._d.setTime(+o._d+s),e.updateOffset(o,!1),o):St(t).local()}function Ft(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function jt(t,i){var o,n=this._offset||0;return null!=t?("string"==typeof t&&(t=Bt(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&i&&(o=Ft(this)),this._offset=t,this._isUTC=!0,null!=o&&this.add(o,"m"),n!==t&&(!i||this._changeInProgress?ie(this,Jt(t-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?n:Ft(this)}function Ht(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Wt(t){return this.utcOffset(0,t)}function Yt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ft(this),"m")),this}function Gt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Bt(this._i)),this}function Ut(t){return t=t?St(t).utcOffset():0,(this.utcOffset()-t)%60===0}function Vt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function qt(){if("undefined"!=typeof this._isDSTShifted)return this._isDSTShifted;var t={};if(p(t,this),t=Ct(t),t._a){var e=t._isUTC?h(t._a):St(t._a);this._isDSTShifted=this.isValid()&&y(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Xt(){return!this._isUTC}function Zt(){return this._isUTC}function Kt(){return this._isUTC&&0===this._offset}function Jt(t,e){var i,o,n,s=t,a=null;return Lt(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(s={},e?s[e]=t:s.milliseconds=t):(a=Do.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:g(a[ho])*i,h:g(a[lo])*i,m:g(a[uo])*i,s:g(a[co])*i,ms:g(a[po])*i}):(a=Co.exec(t))?(i="-"===a[1]?-1:1,s={y:Qt(a[2],i),M:Qt(a[3],i),d:Qt(a[4],i),h:Qt(a[5],i),m:Qt(a[6],i),s:Qt(a[7],i),w:Qt(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=te(St(s.from),St(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new zt(s),Lt(t)&&r(t,"_locale")&&(o._locale=t._locale),o}function Qt(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $t(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 te(t,e){var i;return e=Rt(e,t),t.isBefore(e)?i=$t(t,e):(i=$t(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i}function ee(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(it(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=Jt(i,o),ie(this,n,t),this}}function ie(t,i,o,n){var s=i._milliseconds,r=i._days,a=i._months;n=null==n?!0:n,s&&t._d.setTime(+t._d+s*o),r&&P(t,"Date",S(t,"Date")+r*o),a&&K(t,S(t,"Month")+a*o),n&&e.updateOffset(t,r||a)}function oe(t,e){var i=t||St(),o=Rt(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";return this.format(e&&e[s]||this.localeData().calendar(s,this,St(i)))}function ne(){return new f(this)}function se(t,e){var i;return e=C("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=m(t)?t:St(t),+this>+t):(i=m(t)?+t:+St(t),i<+this.clone().startOf(e))}function re(t,e){var i;return e=C("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=m(t)?t:St(t),+t>+this):(i=m(t)?+t:+St(t),+this.clone().endOf(e)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 ue(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ce(){var t=this.clone().utc();return 0e;e++)if(this._weekdaysParse[e]||(i=St([2e3,1]).day(e),o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(o.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e}function We(t){var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Be(t,this.localeData()),this.add(t-e,"d")):e}function Ye(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Ge(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)}function Ue(t,e){z(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Ve(t,e){return e._meridiemParse}function qe(t){return"p"===(t+"").toLowerCase().charAt(0)}function Xe(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Ze(t,e){e[po]=g(1e3*("0."+t))}function Ke(){return this._isUTC?"UTC":""}function Je(){return this._isUTC?"Coordinated Universal Time":""}function Qe(t){return St(1e3*t)}function $e(){return St.apply(null,arguments).parseZone()}function ti(t,e,i){var o=this._calendar[t];return"function"==typeof o?o.call(e,i):o}function ei(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 ii(){return this._invalidDate}function oi(t){return this._ordinal.replace("%d",t)}function ni(t){return t}function si(t,e,i,o){var n=this._relativeTime[i];return"function"==typeof n?n(t,e,i,o):n.replace(/%d/i,t)}function ri(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)}function ai(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function hi(t,e,i,o){var n=M(),s=h().set(o,e);return n[i](s,t)}function di(t,e,i,o,n){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return hi(t,e,i,n);var s,r=[];for(s=0;o>s;s++)r[s]=hi(t,s,i,n);return r}function li(t,e){return di(t,e,"months",12,"month")}function ui(t,e){return di(t,e,"monthsShort",12,"month")}function ci(t,e){return di(t,e,"weekdays",7,"day")}function pi(t,e){return di(t,e,"weekdaysShort",7,"day")}function fi(t,e){return di(t,e,"weekdaysMin",7,"day")}function mi(){var t=this._data;return this._milliseconds=Ko(this._milliseconds),this._days=Ko(this._days),this._months=Ko(this._months),t.milliseconds=Ko(t.milliseconds),t.seconds=Ko(t.seconds),t.minutes=Ko(t.minutes),t.hours=Ko(t.hours),t.months=Ko(t.months),t.years=Ko(t.years),this}function vi(t,e,i,o){var n=Jt(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function gi(t,e){return vi(this,t,e,1)}function yi(t,e){return vi(this,t,e,-1)}function bi(t){return 0>t?Math.floor(t):Math.ceil(t)}function wi(){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*bi(xi(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=v(s/1e3),h.seconds=t%60,e=v(t/60),h.minutes=e%60,i=v(e/60),h.hours=i%24,r+=v(i/24),n=v(_i(r)),a+=n,r-=bi(xi(n)),o=v(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function _i(t){return 4800*t/146097}function xi(t){return 146097*t/4800}function ki(t){var e,i,o=this._milliseconds;if(t=C(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+_i(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xi(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 Oi(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Mi(t){return function(){return this.as(t)}}function Di(t){return t=C(t),this[t+"s"]()}function Ci(t){return function(){return this._data[t]}}function Ti(){return v(this.days()/7)}function Ei(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function Si(t,e,i){var o=Jt(t).abs(),n=pn(o.as("s")),s=pn(o.as("m")),r=pn(o.as("h")),a=pn(o.as("d")),h=pn(o.as("M")),d=pn(o.as("y")),l=n0,l[4]=i,Ei.apply(null,l)}function Pi(t,e){return void 0===fn[t]?!1:void 0===e?fn[t]:(fn[t]=e,!0)}function Ii(t){var e=this.localeData(),i=Si(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Ni(){var t,e,i,o=mn(this._milliseconds)/1e3,n=mn(this._days),s=mn(this._months);t=v(o/60),e=v(t/60),o%=60,t%=60,i=v(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 zi,Li,Ai=e.momentProperties=[],Bi=!1,Ri={},Fi={},ji=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Hi=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Wi={},Yi={},Gi=/\d/,Ui=/\d\d/,Vi=/\d{3}/,qi=/\d{4}/,Xi=/[+-]?\d{6}/,Zi=/\d\d?/,Ki=/\d{1,3}/,Ji=/\d{1,4}/,Qi=/[+-]?\d{1,6}/,$i=/\d+/,to=/[+-]?\d+/,eo=/Z|[+-]\d\d:?\d\d/gi,io=/[+-]?\d+(\.\d{1,3})?/,oo=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,no={},so={},ro=0,ao=1,ho=2,lo=3,uo=4,co=5,po=6;z("M",["MM",2],"Mo",function(){return this.month()+1}),z("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),z("MMMM",0,0,function(t){return this.localeData().months(this,t)}),D("month","M"),j("M",Zi),j("MM",Zi,Ui),j("MMM",oo),j("MMMM",oo),Y(["M","MM"],function(t,e){e[ao]=g(t)-1}),Y(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[ao]=n:l(i).invalidMonth=t});var fo="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),mo="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),vo={};e.suppressDeprecationWarnings=!1;var go=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yo=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],bo=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],wo=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=et("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":""))}),z(0,["YY",2],0,function(){return this.year()%100}),z(0,["YYYY",4],0,"year"),z(0,["YYYYY",5],0,"year"),z(0,["YYYYYY",6,!0],0,"year"),D("year","y"),j("Y",to),j("YY",Zi,Ui),j("YYYY",Ji,qi),j("YYYYY",Qi,Xi),j("YYYYYY",Qi,Xi),Y(["YYYYY","YYYYYY"],ro),Y("YYYY",function(t,i){i[ro]=2===t.length?e.parseTwoDigitYear(t):g(t)}),Y("YY",function(t,i){i[ro]=e.parseTwoDigitYear(t)}),e.parseTwoDigitYear=function(t){return g(t)+(g(t)>68?1900:2e3)};var _o=E("FullYear",!1);z("w",["ww",2],"wo","week"),z("W",["WW",2],"Wo","isoWeek"),D("week","w"),D("isoWeek","W"),j("w",Zi),j("ww",Zi,Ui),j("W",Zi),j("WW",Zi,Ui),G(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=g(t)});var xo={dow:0,doy:6};z("DDD",["DDDD",3],"DDDo","dayOfYear"),D("dayOfYear","DDD"),j("DDD",Ki),j("DDDD",Vi),Y(["DDD","DDDD"],function(t,e,i){i._dayOfYear=g(t)}),e.ISO_8601=function(){};var ko=et("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=St.apply(null,arguments);return this>t?this:t}),Oo=et("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=St.apply(null,arguments);return t>this?this:t});At("Z",":"),At("ZZ",""),j("Z",eo),j("ZZ",eo),Y(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Bt(t)});var Mo=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Do=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Co=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Jt.fn=zt.prototype;var To=ee(1,"add"),Eo=ee(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var So=et("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)});z(0,["gg",2],0,function(){return this.weekYear()%100}),z(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Se("gggg","weekYear"),Se("ggggg","weekYear"),Se("GGGG","isoWeekYear"),Se("GGGGG","isoWeekYear"),D("weekYear","gg"),D("isoWeekYear","GG"),j("G",to),j("g",to),j("GG",Zi,Ui),j("gg",Zi,Ui),j("GGGG",Ji,qi),j("gggg",Ji,qi),j("GGGGG",Qi,Xi),j("ggggg",Qi,Xi),G(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=g(t)}),G(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),z("Q",0,0,"quarter"),D("quarter","Q"),j("Q",Gi),Y("Q",function(t,e){e[ao]=3*(g(t)-1)}),z("D",["DD",2],"Do","date"),D("date","D"),j("D",Zi),j("DD",Zi,Ui),j("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),Y(["D","DD"],ho),Y("Do",function(t,e){e[ho]=g(t.match(Zi)[0],10)});var Po=E("Date",!0);z("d",0,"do","day"),z("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),z("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),z("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),z("e",0,0,"weekday"),z("E",0,0,"isoWeekday"),D("day","d"),D("weekday","e"),D("isoWeekday","E"),j("d",Zi),j("e",Zi),j("E",Zi),j("dd",oo),j("ddd",oo),j("dddd",oo),G(["dd","ddd","dddd"],function(t,e,i){var o=i._locale.weekdaysParse(t);null!=o?e.d=o:l(i).invalidWeekday=t}),G(["d","e","E"],function(t,e,i,o){e[o]=g(t)});var Io="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),No="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),zo="Su_Mo_Tu_We_Th_Fr_Sa".split("_");z("H",["HH",2],0,"hour"),z("h",["hh",2],0,function(){return this.hours()%12||12}),Ue("a",!0),Ue("A",!1),D("hour","h"),j("a",Ve),j("A",Ve),j("H",Zi),j("h",Zi),j("HH",Zi,Ui),j("hh",Zi,Ui),Y(["H","HH"],lo),Y(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),Y(["h","hh"],function(t,e,i){e[lo]=g(t),l(i).bigHour=!0});var Lo=/[ap]\.?m?\.?/i,Ao=E("Hours",!0);z("m",["mm",2],0,"minute"),D("minute","m"),j("m",Zi),j("mm",Zi,Ui),Y(["m","mm"],uo);var Bo=E("Minutes",!1);z("s",["ss",2],0,"second"),D("second","s"),j("s",Zi),j("ss",Zi,Ui),Y(["s","ss"],co);var Ro=E("Seconds",!1);z("S",0,0,function(){return~~(this.millisecond()/100)}),z(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),z(0,["SSS",3],0,"millisecond"),z(0,["SSSS",4],0,function(){return 10*this.millisecond()}),z(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),z(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),z(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),z(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),z(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),D("millisecond","ms"),j("S",Ki,Gi),j("SS",Ki,Ui),j("SSS",Ki,Vi);var Fo;for(Fo="SSSS";Fo.length<=9;Fo+="S")j(Fo,$i);for(Fo="S";Fo.length<=9;Fo+="S")Y(Fo,Ze);var jo=E("Milliseconds",!1);z("z",0,0,"zoneAbbr"),z("zz",0,0,"zoneName");var Ho=f.prototype;Ho.add=To,Ho.calendar=oe,Ho.clone=ne,Ho.diff=de,Ho.endOf=_e,Ho.format=pe,Ho.from=fe,Ho.fromNow=me,Ho.to=ve,Ho.toNow=ge,Ho.get=I,Ho.invalidAt=Ee,Ho.isAfter=se,Ho.isBefore=re,Ho.isBetween=ae,Ho.isSame=he,Ho.isValid=Ce,Ho.lang=So,Ho.locale=ye,Ho.localeData=be,Ho.max=Oo,Ho.min=ko,Ho.parsingFlags=Te,Ho.set=I,Ho.startOf=we,Ho.subtract=Eo,Ho.toArray=Me,Ho.toObject=De,Ho.toDate=Oe,Ho.toISOString=ce,Ho.toJSON=ce,Ho.toString=ue,Ho.unix=ke,Ho.valueOf=xe,Ho.year=_o,Ho.isLeapYear=dt,Ho.weekYear=Ie,Ho.isoWeekYear=Ne,Ho.quarter=Ho.quarters=Ae,Ho.month=J,Ho.daysInMonth=Q,Ho.week=Ho.weeks=ft,Ho.isoWeek=Ho.isoWeeks=mt,Ho.weeksInYear=Le,Ho.isoWeeksInYear=ze,Ho.date=Po,Ho.day=Ho.days=We,Ho.weekday=Ye,Ho.isoWeekday=Ge,Ho.dayOfYear=gt,Ho.hour=Ho.hours=Ao,Ho.minute=Ho.minutes=Bo,Ho.second=Ho.seconds=Ro,Ho.millisecond=Ho.milliseconds=jo,Ho.utcOffset=jt,Ho.utc=Wt,Ho.local=Yt,Ho.parseZone=Gt,Ho.hasAlignedHourOffset=Ut,Ho.isDST=Vt,Ho.isDSTShifted=qt,Ho.isLocal=Xt,Ho.isUtcOffset=Zt,Ho.isUtc=Kt,Ho.isUTC=Kt,Ho.zoneAbbr=Ke,Ho.zoneName=Je,Ho.dates=et("dates accessor is deprecated. Use date instead.",Po),Ho.months=et("months accessor is deprecated. Use month instead",J),Ho.years=et("years accessor is deprecated. Use year instead",_o),Ho.zone=et("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ht);var Wo=Ho,Yo={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Go={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"},Uo="Invalid date",Vo="%d",qo=/\d{1,2}/,Xo={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"},Zo=b.prototype;Zo._calendar=Yo,Zo.calendar=ti,Zo._longDateFormat=Go,Zo.longDateFormat=ei,Zo._invalidDate=Uo,Zo.invalidDate=ii,Zo._ordinal=Vo,Zo.ordinal=oi,Zo._ordinalParse=qo,Zo.preparse=ni,Zo.postformat=ni,Zo._relativeTime=Xo,Zo.relativeTime=si,Zo.pastFuture=ri,Zo.set=ai,Zo.months=q,Zo._months=fo,Zo.monthsShort=X,Zo._monthsShort=mo,Zo.monthsParse=Z,Zo.week=ut,Zo._week=xo,Zo.firstDayOfYear=pt,Zo.firstDayOfWeek=ct,Zo.weekdays=Re,Zo._weekdays=Io,Zo.weekdaysMin=je,Zo._weekdaysMin=zo,Zo.weekdaysShort=Fe,Zo._weekdaysShort=No,Zo.weekdaysParse=He,Zo.isPM=qe,Zo._meridiemParse=Lo,Zo.meridiem=Xe,k("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===g(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=et("moment.lang is deprecated. Use moment.locale instead.",k),e.langData=et("moment.langData is deprecated. Use moment.localeData instead.",M);var Ko=Math.abs,Jo=Mi("ms"),Qo=Mi("s"),$o=Mi("m"),tn=Mi("h"),en=Mi("d"),on=Mi("w"),nn=Mi("M"),sn=Mi("y"),rn=Ci("milliseconds"),an=Ci("seconds"),hn=Ci("minutes"),dn=Ci("hours"),ln=Ci("days"),un=Ci("months"),cn=Ci("years"),pn=Math.round,fn={s:45,m:45,h:22,d:26,M:11},mn=Math.abs,vn=zt.prototype;vn.abs=mi,vn.add=gi,vn.subtract=yi,vn.as=ki,vn.asMilliseconds=Jo,vn.asSeconds=Qo,vn.asMinutes=$o,vn.asHours=tn,vn.asDays=en,vn.asWeeks=on,vn.asMonths=nn,vn.asYears=sn,vn.valueOf=Oi,vn._bubble=wi,vn.get=Di,vn.milliseconds=rn,vn.seconds=an,vn.minutes=hn,vn.hours=dn,vn.days=ln,vn.weeks=Ti,vn.months=un,vn.years=cn,vn.humanize=Ii,vn.toISOString=Ni,vn.toString=Ni,vn.toJSON=Ni,vn.locale=ye,vn.localeData=be,vn.toIsoString=et("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ni),vn.lang=So,z("X",0,0,"unix"),z("x",0,0,"valueOf"),j("x",to),j("X",io),Y("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),Y("x",function(t,e,i){i._d=new Date(g(t))}),e.version="2.10.6",i(St),e.fn=Wo,e.min=It,e.max=Nt,e.utc=h,e.unix=Qe,e.months=li,e.isDate=n,e.locale=k,e.invalid=c,e.duration=Jt,e.isMoment=m,e.weekdays=ci,e.parseZone=$e,e.localeData=M,e.isDuration=Lt,e.monthsShort=ui,e.weekdaysMin=fi,e.defineLocale=O,e.weekdaysShort=pi,e.normalizeUnits=C,e.relativeTimeThreshold=Pi;var gn=e;return gn})}).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: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 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]],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.style&&a.setAttributeNS(null,"style",o.style),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 in this._options.type)if(this._options.type.hasOwnProperty(i)){var o=this._options.type[i];"Date"==o||"ISODate"==o||"ASPDate"==o?this._type[i]="Date":this._type[i]=o}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;ns;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=[],s=this,r=s._fieldId,a=function(t){var e=t[r];s._data[e]?(e=s._updateItem(t),o.push(e),n.push(t)):(e=s._addItem(t),i.push(e))};if(Array.isArray(t))for(var h=0,d=t.length;d>h;h++)a(t[h]);else{if(!(t instanceof Object))throw new Error("Unknown dataType");a(t)}return i.length&&this._trigger("add",{items:i},e),o.length&&this._trigger("update",{items:o,data:n},e),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=o&&o.type||this._options.type,f=o&&o.filter,m=[];if(void 0!=e)d=s._getItem(e,p),f&&!f(d)&&(d=null);else if(void 0!=i)for(u=0,c=i.length;c>u;u++)d=s._getItem(i[u],p),(!f||f(d))&&m.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=s._getItem(l,p),(!f||f(d))&&m.push(d));if(o&&o.order&&void 0==e&&this._sort(m,o.order),o&&o.fields){var v=o.fields;if(void 0!=e)d=this._filterFields(d,v);else for(u=0,c=m.length;c>u;u++)m[u]=this._filterFields(m[u],v)}if("Object"==a){var g={};for(u=0;ue;e++)l[e]=s[e][this._fieldId]}else for(o in r)r.hasOwnProperty(o)&&(n=this._getItem(o,d),a(n)&&l.push(n[this._fieldId]));else if(h){s=[];for(o in r)r.hasOwnProperty(o)&&s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;i>e;e++)l[e]=s[e][this._fieldId]}else for(o in r)r.hasOwnProperty(o)&&(n=r[o],l.push(n[this._fieldId]));return l},o.prototype.getDataSet=function(){return this},o.prototype.forEach=function(t,e){var i,o,n=e&&e.filter,s=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],o=i[this._fieldId],t(i,o);else for(o in r)r.hasOwnProperty(o)&&(i=this._getItem(o,s),(!n||n(i))&&t(i,o))},o.prototype.map=function(t,e){var i,o=e&&e.filter,n=e&&e.type||this._options.type,s=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,n),(!o||o(i))&&s.push(t(i,a)));return e&&e.order&&this._sort(s,e.order),s},o.prototype._filterFields=function(t,e){if(!t)return t;var i={};if(Array.isArray(e))for(var o in t)t.hasOwnProperty(o)&&-1!=e.indexOf(o)&&(i[o]=t[o]);else for(var o in t)t.hasOwnProperty(o)&&e.hasOwnProperty(o)&&(i[e[o]]=t[o]);return i},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(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=this._data,i=null,o=null;for(var n in e)if(e.hasOwnProperty(n)){var s=e[n],r=s[t];null!=r&&(!i||r>o)&&(i=s,o=r)}return i},o.prototype.min=function(t){var e=this._data,i=null,o=null;for(var n in e)if(e.hasOwnProperty(n)){var s=e[n],r=s[t];null!=r&&(!i||o>r)&&(i=s,o=r)}return i},o.prototype.distinct=function(t){var e,i=this._data,o=[],s=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(o[e]==d){l=!0;break}l||void 0===d||(o[r]=d,r++)}if(s)for(e=0;ethis.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;if(this._data){this._data.off&&this._data.off("*",this.listener),e=[];for(var n in this._ids)this._ids.hasOwnProperty(n)&&e.push(n);this._ids={},this.length=0,this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,o=e.length;o>i;i++)n=e[i],this._ids[n]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){for(var t,e=this._data.getIds({filter:this._options&&this._options.filter}),i={},o=[],n=[],s=0;so;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.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),m=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),v=240*f,g=this._hsv2rgb(v,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 m(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(_,r,this.zMin)),Math.cos(2*w)>0?(v.textAlign="center",v.textBaseline="top",n.y+=b):Math.sin(2*w)<0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(" "+this.xValueLabel(i.getCurrent())+" ",n.x,n.y),i.next()}for(v.lineWidth=1,o=void 0===this.defaultYStep,i=new m(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*w)<0?(v.textAlign="center",v.textBaseline="top",n.y+=b):Math.sin(2*w)>0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(" "+this.yValueLabel(i.getCurrent())+" ",n.x,n.y),i.next();for(v.lineWidth=1,o=void 0===this.defaultZStep,i=new m(this.zMin,this.zMax,this.zStep,o),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(w)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(s,r,i.getCurrent())),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(t.x-b,t.y),v.stroke(),v.textAlign="right",v.textBaseline="middle",v.fillStyle=this.axisColor,v.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();v.lineWidth=1,t=this._convert3Dto2D(new l(s,r,this.zMin)),e=this._convert3Dto2D(new l(s,r,this.zMax)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke(),v.lineWidth=1,c=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(c.x,c.y),v.lineTo(p.x,p.y),v.stroke(),c=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),p=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(c.x,c.y),v.lineTo(p.x,p.y),v.stroke(),v.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),v.strokeStyle=this.axisColor,v.beginPath(),v.moveTo(t.x,t.y),v.lineTo(e.x,e.y),v.stroke();var x=this.xLabel;x.length>0&&(u=.1/this.scale.y,s=(this.xMin+this.xMax)/2,r=Math.cos(w)>0?this.yMin-u:this.yMax+u,n=this._convert3Dto2D(new l(s,r,this.zMin)),Math.cos(2*w)>0?(v.textAlign="center",v.textBaseline="top"):Math.sin(2*w)<0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(x,n.x,n.y));var k=this.yLabel;k.length>0&&(d=.1/this.scale.x,s=Math.sin(w)>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*w)<0?(v.textAlign="center",v.textBaseline="top"):Math.sin(2*w)>0?(v.textAlign="right",v.textBaseline="middle"):(v.textAlign="left",v.textBaseline="middle"),v.fillStyle=this.axisColor,v.fillText(k,n.x,n.y));var O=this.zLabel;O.length>0&&(h=30,s=Math.cos(w)>0?this.xMin:this.xMax,r=Math.sin(w)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,n=this._convert3Dto2D(new l(s,r,a)),v.textAlign="right",v.textBaseline="middle",v.fillStyle=this.axisColor,v.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,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),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),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;sc&&(c=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,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],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="
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(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?void 0:this.values[this.index]},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))},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(24),d=i(28),l=i(39),u=i(44),c=i(42),p=i(29),f=i(45),m=i(47)["default"],v=i(47).printStyle,g=i(48).allOptions,y=i(48).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=m.validate(t,g);if(e===!0&&console.log("%cErrors have been found in the supplied options object.",v),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,i=null==this.itemsData;if(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),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var o=this.getItemRange();var n=void 0!=this.options.start?this.options.start:o.min,s=void 0!=this.options.end?this.options.end:o.max;this.setWindow(n,s,{animation:!1})}else this.fit({animation:!1})},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=e.min,o=e.max,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();var s=e(t),a=c(t),d=new Date(s-(t.getWidthLeft()+10)*h),l=new Date(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=o)}),{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,m=s.getTarget(t),v=null;return null!=r?v="item":null!=h?v="custom-time":s.hasParent(m,this.timeAxis.dom.foreground)?v="axis":this.timeAxis2&&s.hasParent(m,this.timeAxis2.dom.foreground)?v="axis":s.hasParent(m,this.itemSet.dom.labelSet)?v="group-label":s.hasParent(m,this.currentTime.bar)?v="current-time":s.hasParent(m,this.dom.center)&&(v="background"),{event:t,item:r?r.id:null,group:a?a.groupId:null,what:v,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},e.firstTarget=t;for(var o=t;o&&!i;){var n=o.hammer&&o.hammer._handlers[e.type];if(n)for(var s=0;s0?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(){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(f(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-1}function _(t){return t.trim().split(/\s+/g)}function x(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function M(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=z(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=L(o);e.timeStamp=gt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=R(a,h),I(i,e),e.offsetDirection=B(e.deltaX,e.deltaY),e.scale=r?H(r.pointers,o):1,e.rotation=r?j(r.pointers,o):0,N(i,e);var d=t.element;b(e.srcEvent.target,d)&&(d=e.srcEvent.target),e.target=d}function I(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};(e.eventType===Tt||s.eventType===St)&&(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 N(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=Pt&&(h>Ct||r.velocity===a)){var d=r.deltaX-e.deltaX,l=r.deltaY-e.deltaY,u=A(h,d,l);o=u.x,n=u.y,i=vt(u.x)>vt(u.y)?u.x:u.y,s=B(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 z(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 A(t,e,i){return{x:e/t||0,y:i/t||0}}function B(t,e){return t===e?It:vt(t)>=vt(e)?t>0?Nt:zt:e>0?Lt:At}function R(t,e,i){i||(i=jt);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=jt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function j(t,e){return F(e[1],e[0],Ht)-F(t[1],t[0],Ht)}function H(t,e){return R(e[0],e[1],Ht)/R(t[0],t[1],Ht)}function W(){this.evEl=Yt,this.evWin=Gt,this.allow=!0,this.pressed=!1,T.apply(this,arguments)}function Y(){this.evEl=qt,this.evWin=Xt,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function G(){this.evTarget=Kt,this.evWin=Jt,this.started=!1,T.apply(this,arguments)}function U(t,e){var i=k(t.touches),o=k(t.changedTouches);return e&(St|Pt)&&(i=O(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=$t,this.targetIds={},T.apply(this,arguments)}function q(t,e){var i=k(t.touches),o=this.targetIds;if(e&(Tt|Et)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=k(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return b(t.target,h)}),e===Tt)for(n=0;na&&(e.push(t),a=e.length-1):n&(St|Pt)&&(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 Zt={touchstart:Tt,touchmove:Et,touchend:St,touchcancel:Pt},Kt="touchstart",Jt="touchstart touchmove touchend touchcancel";p(G,T,{handler:function(t){var e=Zt[t.type];if(e===Tt&&(this.started=!0),this.started){var i=U.call(this,t,e);e&(St|Pt)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:kt,srcEvent:t})}}});var Qt={touchstart:Tt,touchmove:Et,touchend:St,touchcancel:Pt},$t="touchstart touchmove touchend touchcancel";p(V,T,{handler:function(t){var e=Qt[t.type],i=q.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:kt,srcEvent:t})}}),p(X,T,{handler:function(t,e,i){ +var o=i.pointerType==kt,n=i.pointerType==Mt;if(o)this.mouse.allow=!1;else if(n&&!this.mouse.allow)return;e&(St|Pt)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var te=M(pt.style,"touchAction"),ee=te!==a,ie="compute",oe="auto",ne="manipulation",se="none",re="pan-x",ae="pan-y";Z.prototype={set:function(t){t==ie&&(t=this.compute()),ee&&(this.manager.element.style[te]=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){m(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),K(t.join(" "))},preventDefaults:function(t){if(!ee){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=w(o,se),s=w(o,ae),r=w(o,re);return n||s&&i&Bt||r&&i&Rt?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var he=1,de=2,le=4,ue=8,ce=ue,pe=16,fe=32;J.prototype={defaults:{},set:function(t){return u(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=tt(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=tt(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=tt(t,this),-1===x(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=tt(t,this);var e=x(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(i.options.event+(e?Q(o):""),t)}var i=this,o=this.state;ue>o&&e(!0),e(),o>=ue&&e(!0)},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=fe)},canEmit:function(){for(var t=0;ts?Nt:zt,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?It:0>r?Lt:At,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return et.prototype.attrTest.call(this,t)&&(this.state&de||!(this.state&de)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=$(t.direction);e&&this.manager.emit(this.options.event+e,t),this._super.emit.call(this,t)}}),p(ot,et,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[se]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&de)},emit:function(t){if(this._super.emit.call(this,t),1!==t.scale){var e=t.scale<1?"in":"out";this.manager.emit(this.options.event+e,t)}}}),p(nt,J,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[oe]},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&(St|Pt)&&!n)this.reset();else if(t.eventType&Tt)this.reset(),this._timer=h(function(){this.state=ce,this.tryEmit()},e.time,this);else if(t.eventType&St)return ce;return fe},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===ce&&(t&&t.eventType&St?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=gt(),this.manager.emit(this.options.event,this._input)))}}),p(st,et,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[se]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&de)}}),p(rt,et,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Bt|Rt,pointers:1},getTouchAction:function(){return it.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Bt|Rt)?e=t.velocity:i&Bt?e=t.velocityX:i&Rt&&(e=t.velocityY),this._super.attrTest.call(this,t)&&i&t.direction&&t.distance>this.options.threshold&&vt(e)>this.options.velocity&&t.eventType&St},emit:function(t){var e=$(t.direction);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),p(at,J,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ne]},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,v=r||null===s?s:l+(s-l)*i;g=a._applyRange(c,v),d.updateHiddenDates(a.options.moment,a.body,a.options.hiddenDates),m=m||g,g&&a.body.emitter.emit("rangechange",{start:new Date(a.start),end:new Date(a.end),byUser:o}),r?m&&a.body.emitter.emit("rangechanged",{start:new Date(a.start),end:new Date(a.end),byUser:o}):a.animationTimer=setTimeout(b,20)}};return v()}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),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end),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.options.moment,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?!1:!0,this.endToFront=-i>0?!1:!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&&!o&&(e(t),o=!0,setTimeout(function(){o=!1},0))},t.on("hammer.input",e.inputHandler)};var o=!1;e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&!n&&(e(t),n=!0,setTimeout(function(){n=!1},0))},t.on("hammer.input",e.inputHandler)};var n=!1;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,e,i){if(e.hiddenDates=[],i&&1==Array.isArray(i)){for(var o=0;o=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"),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()&&(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 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=i(12),s=i(20),r=i(25),a=i(1),h=(i(8),i(10),i(24),i(29),i(39)),d=i(40),l=i(27),u=i(42);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._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,!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),"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._origRedraw=this._redraw.bind(this)),this._redraw=a.throttle(this._origRedraw,this.options.throttleRedraw),this._redraw()},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.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(){var t=!1,e=this.options,i=this.props,o=this.dom;if(o){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":"";if(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}),t){var m=3;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,m=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,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",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[v];return i||null},o.prototype._updateUngrouped=function(){var t,e,i=this.groups[v];this.groups[g];if(this.groupsData){if(i){i.hide(),delete this.groups[v];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[v]=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()}},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:v},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==v||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),m=0,v=0,g=0;f>m;){for(;f>m+v&&f>m+g&&u[m+v]==c[m+g];)m++;if(m+v>=f)break;if(u[m+v]!=p)if(c[m+g]!=p){var y=u.indexOf(c[m+g]),b=h.get(u[m+v]),w=h.get(c[m+g]);this.options.groupOrderSwap(b,w,h),h.update(b),h.update(w);var _=u[m+v];u[m+v]=c[m+g],u[y]=_,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=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(t.stopPropagation(),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),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){i.push(e.id);var s=o._getItemRange(this.itemsData.get(i,this.itemOptions));i=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=s.min&&d<=s.max&&!(a instanceof m)&&i.push(a.id)}}else{var l=i.indexOf(e.id);-1==l?i.push(e.id):i.splice(l,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(32);i(33);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),"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._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var o=this;if(i.length>0){var s=i[0].top,r=i[0].top+i[0].height;if(n.forEach(i,function(t){s=Math.min(s,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(o.subgroups[t.data.subgroup].height=Math.max(o.subgroups[t.data.subgroup].height,t.height),o.subgroups[t.data.subgroup].visible=!0)}),s>t.axis){var a=s-t.axis;r-=a,n.forEach(i,function(t){t.top-=a})}e=r+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(34));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(34);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,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(26),r=i(30),a=i(27),h=i(2);o.prototype=new s,o.prototype.setOptions=function(t){t&&(n.selectiveExtend(["showMinorLabels","showMajorLabels","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(7*(this.props.minorCharWidth||10)).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 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 l,u,c,p,f,m,v,g,y,b=void 0,w=0;for(h.start(),u=h.getCurrent(),p=this.body.util.toScreen(u);h.hasNext()&&1e3>w;){w++,f=h.isMajor(),y=h.getClassName(),g=h.getLabelMinor(),l=u,c=p,h.next(),u=h.getCurrent(),p=this.body.util.toScreen(u),m=p-c;var _=(g.length+1)*this.props.minorCharWidth0&&(void 0==b&&(b=c),this._repaintMajorText(c,h.getLabelMajor(),t,y)),v=this._repaintMajorLine(c,m,t,y)):_?v=this._repaintMinorLine(c,m,t,y):v&&(v.style.width=parseInt(v.style.width)+m+"px")}if(this.options.showMajorLabels){var x=this.body.util.toTime(0),k=h.getLabelMajor(x),O=k.length*(this.props.majorCharWidth||10)+10;(void 0==b||b>O)&&this._repaintMajorText(0,k,t,y)}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},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(41),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.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(),this.colorPicker.insertTo(this.container)}},{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),m=this._makeItem(i,f,a,c);""!==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,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:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,left:{range:{min:void 0,max:void 0},format:function(t){return t},title:{text:void 0,style:void 0}},right:{range:{min:void 0,max:void 0},format:function(t){return t},title:{text:void 0,style:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},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;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.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=n.option.asSize(-i.props.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var n=i(1),s=i(7),r=i(8),a=i(10),h=i(26),d=i(51),l=i(53),u=i(57),c=i(56),p=(i(54),"__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&&void 0!==this.body.domProps.centerContainer.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),u={};for(this._getRelevantData(a,u,d,l),this._applySampling(a,u),e=0;ep&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;ro){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)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=[],l=0;r>l;l+=s)d.push(n[l]);e[t[o]]=d}}},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.getData(o)):h=h.concat(n.getData(o)):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,0==this.yAxisRight.master?(1==r?this.yAxisLeft.lineOffset=this.yAxisRight.width:this.yAxisLeft.lineOffset=0,n=this.yAxisLeft.redraw()||n,this.yAxisRight.stepPixels=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,this.yAxisRight.amountOfSteps=this.yAxisLeft.amountOfSteps,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;a0&&(t=0),this.range.start=t,this.range.end=e},o.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(this.groups[i].visible!==!0||void 0!==this.linegraphOptions.visibility[i]&&this.linegraphOptions.visibility[i]!==!0||e++);if(0===this.amountOfGroups||0===e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=this.options.visible===!0?Number((""+this.options.width).replace("px","")):0;var o=this.props,n=this.dom.frame;n.className="vis-data-axis",this._calculateCharSize();var s=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;o.minorLabelHeight=r?o.minorCharHeight:0,o.majorLabelHeight=a?o.majorCharHeight:0,o.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,o.minorLineHeight=1,o.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,o.majorLineHeight=1,"left"===s?(n.style.top="0",n.style.left="0",n.style.bottom="",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.left.width,this.props.height=this.body.domProps.left.height):(n.style.top="",n.style.bottom="0",n.style.left="0",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.right.width,this.props.height=this.body.domProps.right.height),t=this._redrawLabels(),t=this._isResized()||t,this.options.icons===!0?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(s)}return t},o.prototype._redrawLabels=function(){var t=!1;s.prepareElements(this.DOMelements.lines),s.prepareElements(this.DOMelements.labels);var e,i=this.options.orientation;if(this.master===!1){var o,n,r,h;-1!==this.zeroCrossing&&this.options.alignZeros===!0?this.range.end>0?(o=this.range.end/this.zeroCrossing,n=this.range.end-this.amountOfSteps*o,r=this.range.end):(o=-1*this.range.start/(this.amountOfSteps-this.zeroCrossing),n=this.range.start,r=this.range.start+o*this.amountOfSteps):(n=this.range.start,r=this.range.end),h=this.stepPixels}else h=this.props.majorCharHeight,n=this.range.start,r=this.range.end;if(this.step=e=new a(n,r,h,this.dom.frame.offsetHeight,this.options[this.options.orientation].range,this.options[this.options.orientation].format,this.master===!1&&this.options.alignZeros),this.master===!0)this.stepPixels=this.dom.frame.offsetHeight/e.marginRange*e.step,this.amountOfSteps=Math.ceil(this.dom.frame.offsetHeight/this.stepPixels);else if(this.options.alignZeros===!0&&-1!==this.zeroCrossing){var d=(e.current-this.zeroCrossing*e.step)/e.step;this.step.shift(d)}this.valueAtBottom=e.marginEnd,this.maxLabelSize=0;for(var l=0,u=0,c=!1;u0&&u!==this.amountOfSteps&&((this.options.showMinorLabels&&c===!1||this.master===!1&&this.options.showMinorLabels===!0)&&this._redrawLabel(l-2,e.getCurrent(),i,"vis-y-axis vis-minor",this.props.minorCharHeight),c&&this.options.showMajorLabels&&this.master===!0||this.options.showMinorLabels===!1&&this.master===!1&&c===!0?(l>=0&&this._redrawLabel(l-2,e.getCurrent(),i,"vis-y-axis vis-major",this.props.majorCharHeight),this._redrawLine(l,i,"vis-grid vis-horizontal vis-major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(l,i,"vis-grid vis-horizontal vis-minor",this.options.minorLinesOffset,this.props.minorLineWidth)),this.master===!0&&0===e.current&&(this.zeroCrossing=u),e.next(),u+=1;this.master===!0&&0===e.current&&(this.zeroCrossing=u),this.conversionFactor=this.stepPixels/e.step;var p=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(p=this.props.titleCharHeight);var f=this.options.icons===!0?Math.max(this.options.iconWidth,p)+this.options.labelOffsetX+15:p+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-f&&this.options.visible===!0?(this.width=this.maxLabelSize+f,this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),t=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+f),this.options.width=this.width+"px",s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),this.redraw(),t=!0):(s.cleanupElements(this.DOMelements.lines),s.cleanupElements(this.DOMelements.labels),t=!1),t},o.prototype.convertValue=function(t){var e=this.valueAtBottom-t,i=e*this.conversionFactor;return i},o.prototype.screenToValue=function(t){return this.valueAtBottom-t/this.conversionFactor},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.maxLabelSizes&&(h=s);for(var d=!1,l=h;Math.abs(l)<=Math.abs(s);l++){a=Math.pow(10,l);for(var u=0;u=n){d=!0,r=u;break}}if(d===!0)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},i.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,this.alignZeros===!0&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},i.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*(this.scale*this.minorSteps[this.stepIndex])?e+this.scale*this.minorSteps[this.stepIndex]:e},i.prototype.hasNext=function(){return this.current>=this.marginStart},i.prototype.next=function(){var t=this.current;this.current-=this.step,this.current===t&&(this.current=this._end)},i.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},i.prototype.getCurrent=function(){var t=Math.abs(this.current)t)for(var e=0;-t>e;e++)this.previous();else if(t>0)for(var e=0;t>e;e++)this.next()},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"];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),r=i(54),a=i(56),h=i(55);o.prototype.setItems=function(t){if(null!=t){this.itemsData=t,1==this.options.sort&&this.itemsData.sort(function(t,e){return t.x-e.x});for(var e=0;et[o].y?t[o].y:e,i=i0){t.sort(function(t,e){return t.x===e.x?t.groupIde[s].y?e[s].y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0&&(i=Math.min(i,Math.abs(e[o-1].x-e[o].x))),0===i&&(void 0===t[e[o].x]&&(t[e[o].x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].x].amount+=1)},o.prototype.draw=function(t,e,i){if(null!=t&&t.length>0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=n.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t),1==e.options.shaded.enabled){var d,l=n.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&s.draw(t,e,i)}},o._catmullRomUniform=function(t){for(var e,i,o,n,s,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;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={x:(-e.x+6*i.x+o.x)*h,y:(-e.y+6*i.y+o.y)*h},r={x:(i.x+6*o.x-n.x)*h,y:(i.y+6*o.y-n.y)*h},a+="C"+s.x+","+s.y+" "+r.x+","+r.y+" "+o.x+","+o.y+" ";return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var o,n,s,r,a,h,d,l,u,c,p,f,m,v,g,y,b,w,_,x=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",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.x-n.x,2)+Math.pow(o.y-n.y,2)),l=Math.sqrt(Math.pow(n.x-s.x,2)+Math.pow(n.y-s.y,2)),u=Math.sqrt(Math.pow(s.x-r.x,2)+Math.pow(s.y-r.y,2)),v=Math.pow(u,i),y=Math.pow(u,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),_=Math.pow(d,i),w=Math.pow(d,2*i),c=2*w+3*_*g+b,p=2*y+3*v*g+b,f=3*_*(_+g),f>0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={x:(-b*o.x+c*n.x+w*s.x)*f,y:(-b*o.y+c*n.y+w*s.y)*f},h={x:(y*n.x+p*s.x-b*r.x)*m,y:(y*n.y+p*s.y-b*r.y)*m},0==a.x&&0==a.y&&(a=n),0==h.x&&0==h.y&&(h=s),x+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+s.x+","+s.y+" ";return x},o._linear=function(t){for(var e="",i=0;it[o].y?t[o].y:e,i=it[o].y?t[o].y:e,i=i0&&(r=Math.min(r,Math.abs(c[l-1].x-a))),h=o._getSafeDrawData(r,d,m);else{var g=l+(p[a].amount-p[a].resolved),y=l-(p[a].resolved+1);g0&&(r=Math.min(r,Math.abs(c[y].x-a))),h=o._getSafeDrawData(r,d,m),p[a].resolved+=1,d.options.stack===!0?c[l].y0&&(i=Math.min(i,Math.abs(e[o-1].x-e[o].x))),0===i&&(void 0===t[e[o].x]&&(t[e[o].x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].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.x===e.x?t.groupIde[s].y?e[s].y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=nt?-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.prepareElements(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=["color","font","fixed","shadow"];if(B.selectiveNotDeepExtend(o,t,e,i),B.mergeOptions(t,e,"shadow"),void 0!==e.color&&null!==e.color){var n=B.parseColor(e.color);B.fillIfDefined(t.color,n)}else i===!0&&null===e.color&&(t.color=void 0,delete t.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&&a["default"].parseOptions(t.font,e),void 0!==e.scaling&&B.mergeOptions(t.scaling,e.scaling,"label")}}]),t}();e["default"]=R,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 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("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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=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;t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.lineWidth=o?a:r,t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),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(),this.enableBorderDashes(t),t.stroke(),this.disableBorderDashes(t),t.restore()}},{key:"_drawImageAtPosition",value:function(t){0!=this.imageObj.width&&(t.globalAlpha=1,this.enableShadow(t),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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(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&&(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.resize(t),this._distanceToBorder(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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var i=0;i0&&(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){this.resize(t);var i=this.width/2,o=this.height/2,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&&(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=["id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","selectionWidth","selfReferenceSize","to","title","value","width"];if(v.selectiveDeepExtend(o,t,e,i),v.mergeOptions(t,e,"smooth"),v.mergeOptions(t,e,"shadow"),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=void 0,delete t.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),v.mergeOptions(t.scaling,e.scaling,"label")):i===!0&&null===e.scaling&&(t.scaling=void 0,delete t.scaling),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var n=e.arrows.toLowerCase();-1!=n.indexOf("to")&&(t.arrows.to.enabled=!0),-1!=n.indexOf("middle")&&(t.arrows.middle.enabled=!0),-1!=n.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));v.mergeOptions(t.arrows,e.arrows,"to"),v.mergeOptions(t.arrows,e.arrows,"middle"),v.mergeOptions(t.arrows,e.arrows,"from")}else i===!0&&null===e.arrows&&(t.arrows=void 0,delete t.arrows);if(void 0!==e.color&&null!==e.color)if(v.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var s=!1;void 0!==e.color.color&&(t.color.color=e.color.color,s=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,s=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,s=!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&&s===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=void 0,delete t.color);void 0!==e.font&&a["default"].parseOptions(t.font,e)}}]),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&&(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:"_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.from.x+a[1]*o.x+a[2]*n.x+a[3]*this.to.x,d=a[0]*this.from.y+a[1]*o.y+a[2]*n.y+a[3]*this.to.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&&(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,v[0]=Math.pow(1-u,3),v[1]=3*u*Math.pow(1-u,2),v[2]=3*Math.pow(u,2)*(1-u),v[3]=Math.pow(u,3),c=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,c,p,n,s),h=h>d?d:h),f=c,m=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&&(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 m=.5*(l+u);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:u=m:f===!1?u=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,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,m=void 0,v=.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)),m=p-f,!(Math.abs(m)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,m=c-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,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"drawArrowHead",value:function(t,e,i,o,s){t.strokeStyle=this.getColor(t,o,s),t.fillStyle=t.strokeStyle,t.lineWidth=this.getLineWidth(o,s);var r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0;if("from"===e?(d=this.from,l=this.to,u=.1,c=this.options.arrows.from.scaleFactor):"to"===e?(d=this.to,l=this.from,u=-.1,c=this.options.arrows.to.scaleFactor):(d=this.to,l=this.from,c=this.options.arrows.middle.scaleFactor),d!=l){if("middle"!==e)if(this.options.smooth.enabled===!0){h=this.findBorderPosition(d,t,{via:i});var p=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);r=Math.atan2(h.y-p.y,h.x-p.x)}else r=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else r=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.6,i);a=(10+5*this.options.width)*c,t.arrow(h.x,h.y,r,a),this.enableShadow(t),t.fill(),this.disableShadow(t),t.stroke()}else{var f=void 0,m=void 0,v=this._getCircleData(t),g=n(v,3),y=g[0],b=g[1],w=g[2];"from"===e?(m=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),f=-2*m.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(m=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),f=-2*m.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(m=this._pointOnCircle(y,b,w,.175),f=3.9269908169872414);var _=(10+5*this.options.width)*c;t.arrow(m.x,m.y,f,_),this.enableShadow(t),t.fill(),this.disableShadow(t),t.stroke()}}},{key:"enableShadow",value:function(t){this.options.shadow.enabled===!0&&(t.shadowColor="rgba(0,0,0,0.5)",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&&(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&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:t.stabilizationIterations}),t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(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(){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,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 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(c).length>0&&f===!0&&o.push({nodes:u,edges:c})}}}for(var l=0;lo?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 d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];void 0!==u[d]&&(l.x=void 0===u[d].x?o.x:u[d].x,l.y=void 0===u[d].y?o.y:u[d].y)}}else for(var d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];l=n[d],l.x=o.x,l.y=o.y}for(var d in n)if(n.hasOwnProperty(d)){var l=this.body.nodes[d];l.vx=o.vx,l.vy=o.vy,l.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[d]}for(var c=[],p=0;po;)e.push(this.clusteredNodes[t].node),t=this.clusteredNodes[t].clusterId,o++;return e.push(this.body.nodes[t]),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"]=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")}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&&(t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,i){for(var o=!0;o;){var n=t,s=e,r=i;a=d=h=void 0,o=!1,null===n&&(n=Function.prototype);var a=Object.getOwnPropertyDescriptor(n,s);if(void 0!==a){if("value"in a)return a.value;var h=a.get;return void 0===h?void 0:h.call(r)}var d=Object.getPrototypeOf(n);if(null===d)return void 0;t=d,e=s,i=r,o=!0}},a=i(62),h=o(a),d=function(t){function e(t,i,o,s,a){n(this,e),r(Object.getPrototypeOf(e.prototype),"constructor",this).call(this,t,i,o,s,a),this.isCluster=!0,this.containedNodes={},this.containedEdges={}}return s(e,t),e}(h["default"]);e["default"]=d,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,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(),void 0===this.pixelRatio&&(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;e.clearRect(0,0,i,o),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),this.controlNodesActive===!0&&this._drawControlNodes(e),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)for(var r=0;rt.shape.boundingBox.left&&(n=t.shape.boundingBox.left),st.shape.boundingBox.top&&(i=t.shape.boundingBox.top),ot.shape.boundingBox.left&&(n=t.shape.boundingBox.left),st.shape.boundingBox.top&&(i=t.shape.boundingBox.top),o.5*this.body.nodeIndices.length)return void this.fit(i,!1);t=this._getRange(i.nodes);var a=this.body.nodeIndices.length;e=12.662/(a+7.4147)+.0964822;var h=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);e*=h}else{this.body.emitter.emit("_resizeNodes"),t=this._getRange(i.nodes);var d=1.1*Math.abs(t.maxX-t.minX),l=1.1*Math.abs(t.maxY-t.minY),u=this.canvas.frame.canvas.clientWidth/d,c=this.canvas.frame.canvas.clientHeight/l;e=c>=u?u:c}e>1?e=1:0===e&&(e=1);var p=this._findCenter(t),f={position:p,scale:e,animation:i.animation};this.moveTo(f)}},{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=s.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"]=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;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.nodesChanges,c=l.edgesChanges,p=!1;h-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,p=!0):0>h-n?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0):h===n&&u===!0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),p=!0,r=!0),a-o>0&&p===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):0>a-o?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0):a===o&&c===!0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),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){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,m=void 0,v=[],c=0;c0&&(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"]=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]: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];return void 0}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return void 0}},{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.adaptAllOptions(e);if(i===!0)return this.body.emitter.emit("refresh"),s.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptions",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={solver:"hierarchicalRepulsion"},this.optionsBackup.physics={solver:"barnesHut"}):"object"==typeof t.physics?(this.optionsBackup.physics={solver:"barnesHut"},void 0!==t.physics.solver&&(this.optionsBackup.physics={solver:t.physics.solver}),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(),void console.info("This network could not be positioned by this version of the improved layout algorithm.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*r)})}this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._declusterAll(),this.body.emitter.emit("_repositionBezierNodes")}}}},{key:"_declusterAll",value:function(){for(var t=!0;t===!0;){t=!1;for(var e=0;e0){var t=void 0,e=void 0,i=!1,o=!1;this.hierarchicalLevels={},this.nodeSpacing=100;for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchicalLevels[e]=t.options.level):o=!0);if(o===!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.");o===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():("directed"===this.options.hierarchical.sortMethod,this._determineLevelsDirected()));var n=this._getDistribution();this._placeNodesByHierarchy(n)}}},{key:"_placeNodesByHierarchy",value:function(t){var e=void 0,i=void 0;this.positionedNodes={};for(var o in t)if(t.hasOwnProperty(o))for(e in t[o].nodes)t[o].nodes.hasOwnProperty(e)&&(i=t[o].nodes[e],"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(void 0===i.x&&(i.x=t[o].distance),t[o].distance=i.x+this.nodeSpacing):(void 0===i.y&&(i.y=t[o].distance),t[o].distance=i.y+this.nodeSpacing),this.positionedNodes[e]=!0,this._placeBranchNodes(i.edges,i.id,t,o))}},{key:"_getDistribution",value:function(){var t={},e=void 0,i=void 0;for(e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){i=this.body.nodes[e];var o=void 0===this.hierarchicalLevels[e]?0:this.hierarchicalLevels[e];"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(i.y=this.options.hierarchical.levelSeparation*o,i.options.fixed.y=!0):(i.x=this.options.hierarchical.levelSeparation*o,i.options.fixed.x=!0),void 0===t[o]&&(t[o]={amount:0,nodes:{},distance:0}),t[o].amount+=1,t[o].nodes[e]=i}return t}},{key:"_getHubSize",value:function(){var t=0;for(var e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){var i=this.body.nodes[e];void 0===this.hierarchicalLevels[e]&&(t=i.edges.length0&&(i=this._getHubSize(),0!==i);)for(t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&(e=this.body.nodes[t],e.edges.length===i&&this._setLevelByHubsize(0,e))}},{key:"_setLevelByHubsize",value:function(t,e){if(void 0===this.hierarchicalLevels[e.id]){var i=void 0;this.hierarchicalLevels[e.id]=t;for(var o=0;oo&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?(void 0===s.x&&(s.x=Math.max(i[a].distance,r.x)),i[a].distance=s.x+this.nodeSpacing,this.positionedNodes[s.id]=!0):(void 0===s.y&&(s.y=Math.max(i[a].distance,r.y)),i[a].distance=s.y+this.nodeSpacing),this.positionedNodes[s.id]=!0,s.edges.length>1&&this._placeBranchNodes(s.edges,s.id,i,a))}}}]),t}();e["default"]=r,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,!0);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);return i.id="targetNode"+s.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e,this.body.functions.createNode(i)}},{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}},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},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},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},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},useImageSize:{"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,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],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]}},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,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],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(u=g[0],l=g[1],c=g[2],p=g[3],f=l,m=0;f>r&&d>m;){m+=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),m=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,m,c,m),this.bezierCurveTo(c-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),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=E.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=E.DELIMITER);var i=N+s();if(S[i])return L=E.DELIMITER,z=i,n(),void n();if(S[N])return L=E.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=E.IDENTIFIER)}if('"'===N){for(n();""!=N&&('"'!=N||'"'===N&&'"'===s());)z+=N,'"'===N&&n(),n();if('"'!=N)throw _('End of string " expected');return n(),void(L=E.IDENTIFIER)}for(L=E.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===E.IDENTIFIER&&(t.id=z,c()),"{"!=z)throw _("Angle bracket { expected");if(c(),f(t),"}"!=z)throw _("Angle bracket } expected");if(c(),""!==z)throw _("End of file expected");return c(),delete t.node,delete t.edge,delete t.graph,t}function f(t){for(;""!==z&&"}"!=z;)m(t),";"===z&&c()}function m(t){var e=v(t);if(e)return void b(t,e);var i=g(t);if(!i){if(L!=E.IDENTIFIER)throw _("Identifier expected");var o=z;if(c(),"="===z){if(c(),L!=E.IDENTIFIER)throw _("Identifier expected");t[o]=z,c()}else y(t,o)}}function v(t){var e=null;if("subgraph"===z&&(e={},e.type="subgraph",c(),L===E.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 _("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=w(),"node"):"edge"===z?(c(),t.edge=w(),"edge"):"graph"===z?(c(),t.graph=w(),"graph"):null}function y(t,e){var i={id:e},o=w();o&&(i.attr=o),d(t,i),b(t,e)}function b(t,e){for(;"->"===z||"--"===z;){var i,o=z;c();var n=v(t);if(n)i=n;else{if(L!=E.IDENTIFIER)throw _("Identifier or subgraph expected");i=z,d(t,{id:i}),c()}var s=w(),r=u(t,e,i,o,s);l(t,r),e=i}}function w(){for(var t=null;"["===z;){for(c(),t={};""!==z&&"]"!=z;){if(L!=E.IDENTIFIER)throw _("Attribute name expected");var e=z;if(c(),"="!=z)throw _("Equal sign = expected");if(c(),L!=E.IDENTIFIER)throw _("Attribute value expected");var i=z;h(t,e,i),c(),","==z&&c()}if("]"!=z)throw _("Bracket ] expected");c()}return t}function _(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=E.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;a - setDataSet(data) + setData(data) none diff --git a/docs/graph2d/index.html b/docs/graph2d/index.html index d0edebd1..c1783b51 100644 --- a/docs/graph2d/index.html +++ b/docs/graph2d/index.html @@ -782,6 +782,12 @@ onRender: function(item, group, graph2d) { This defines with which axis, left or right, the graph is coupled. Example 5 shows groups with different Y axis. If no groups are coupled with an axis, it will not be shown. + + excludeFromLegend + Boolean + false + Group option only. Excludes the the group from beeing listed in the legend. +

Timeline Options

diff --git a/docs/network/index.html b/docs/network/index.html index 041dbb90..5abf3dcd 100644 --- a/docs/network/index.html +++ b/docs/network/index.html @@ -323,7 +323,7 @@ network.setOptions(options); locales Object defaultLocales - Locales object. By default only 'en' and 'nl' are supported. Take a look + Locales object. By default only 'en', 'es' and 'nl' are supported. Take a look at the locales @@ -333,7 +333,7 @@ network.setOptions(options); clickToUse Boolean false - Locales object. By default only 'en' and 'nl' are supported. Take a look + Locales object. By default only 'en', 'es' and 'nl' are supported. Take a look at the locales @@ -1557,4 +1557,4 @@ var network = new vis.Network(container, data, options); - \ No newline at end of file + diff --git a/docs/network/layout.html b/docs/network/layout.html index ea33c7dd..c43a838c 100644 --- a/docs/network/layout.html +++ b/docs/network/layout.html @@ -101,6 +101,7 @@ var options = { layout: { randomSeed: undefined, + improvedLayout:true, hierarchical: { enabled:false, levelSeparation: 150, @@ -127,6 +128,7 @@ network.setOptions(options); + diff --git a/docs/network/manipulation.html b/docs/network/manipulation.html index b83710df..7f8db952 100644 --- a/docs/network/manipulation.html +++ b/docs/network/manipulation.html @@ -162,9 +162,9 @@ var options = { } } - This example code will show a popup if you connect a node to itself to ask you if that was what you wanted. If you do not want the edge created, do not call the callback function or call the callback function null or no argument. + This example code will show a popup if you connect a node to itself to ask you if that was what you wanted. If you do not want the edge created, do not call the callback function or call the callback function null or no argument. - + - + @@ -704,4 +706,4 @@ mySize = minSize + diff * scale; - \ No newline at end of file + diff --git a/docs/network/physics.html b/docs/network/physics.html index cb9acb07..c8fe9920 100644 --- a/docs/network/physics.html +++ b/docs/network/physics.html @@ -138,7 +138,8 @@ var options = { onlyDynamicEdges: false, fit: true }, - timestep: 0.5 + timestep: 0.5, + adaptiveTimestep: true } } @@ -201,6 +202,7 @@ network.setOptions(options); +
NameTypeDefaultDescription
randomSeedNumberundefined When NOT using the hierarchical layout, the nodes are randomly positioned initially. This means that the settled result is different every time. If you provide a random seed manually, the layout will be the same every time. Ideally you try with an undefined seed, reload until you are happy with the layout and use the getSeed() method to ascertain the seed.
improvedLayoutBooleantrue When enabled, the network will use the Kamada Kawai algorithm for initial layout. For networks larger than 100 nodes, clustering will be performed automatically to reduce the amount of nodes. This can greatly improve the stabilization times. If the network is very interconnected (no or few leaf nodes), this may not work and it will revert back to the old method. Performance will be improved in the future.
hierarchicalObject or BooleanObject When true, the layout engine positions the nodes in a hierarchical fashion using default settings. For customization you can supply an object.
editNode Function undefined Editing of nodes is only possible when a handling function is supplied. If this is not the case, editing of nodes will be disabled. The function will be called when a node is selected and the 'Edit Node' button on the toolbar is pressed. This function will be called like the addNode function with the node's data and a callback function.
editEdge Boolean or Function true If boolean, toggle the editing of edges in the GUI. When a function is supplied, it will be called when an edge is selcted and the 'Edit Edge' button on the toolbar is pressed. This function will be called in the same way the addEdge function was called. If the callback is not performed, the edge will remain hanging where it was released. To cancel, call the callback function with null as argument or without arguments.
editEdge Boolean or Function true If boolean, toggle the editing of edges in the GUI. When a function is supplied, it will be called when an edge is selected and the 'Edit Edge' button on the toolbar is pressed. This function will be called in the same way the addEdge function was called. If the callback is not performed, the edge will remain hanging where it was released. To cancel, call the callback function with null as argument or without arguments.
deleteNode Boolean or Function true If boolean, toggle the deletion of nodes in the GUI. If function, it will be called when a node is selected and the 'Delete selected' button is pressed. When using a function, it will receive a callback and an object with an array of selected nodeIds and an array of selected edges Ids. These are the items that will be deleted if the callback is performed.
deleteEdge Boolean or Function true If boolean, toggle the deletion of edges in the GUI. If function, it will be called when an edge is selected and the 'Delete selected' button is pressed. When using a function, it will receive a callback and an object with an array of selected nodeIds (empty) and an array of selected edges Ids. These are the items that will be deleted if the callback is performed.
controlNodeStyle Object ObjectYou can supply any styling information you'd like here. All fields described in the nodes module are allowed except obviously for id, x, y and fixed.

Default: diff --git a/docs/network/nodes.html b/docs/network/nodes.html index 83c00b7e..e6cf075d 100644 --- a/docs/network/nodes.html +++ b/docs/network/nodes.html @@ -93,7 +93,7 @@

Options

The options for the nodes have to be contained in an object titled 'nodes'. All of these options can be supplied per node as well. Obviously, 'id' should not be defined globally but per node. Options defined in the global nodes object, are applied to all nodes. If a node has options of its own, those will be used instead of the global options.

-

When you have given a node an option, you will override the global option for that property. If you then set that option to null, +

When you have given a node an option, you will override the global option for that property, and also the group option for that property if the node is in a group. If you then set that option to null, it will revert back to the default value.

Click on the full options or shorthand options to show how these options are supposed to be used.

@@ -374,7 +374,9 @@ network.setOptions(options);
group String undefinedWhen not undefined, theWhen not undefined, the node will belong to the defined group. Styling information of + that group will apply to this node. Node specific styling overrides group styling. +
hidden
timestep Number 0.5 The physics simulation is discrete. This means we take a step in time, calculate the forces, move the nodes and take another step. If you increase this number the steps will be too large and the network can get unstable. If you see a lot of jittery movement in the network, you may want to reduce this value a little.
adaptiveTimestep Boolean true If this is enabled, the timestep will intelligently be adapted (only during the stabilization stage if stabilization is enabled!) to greatly decrease stabilization times. The timestep configured above is taken as the minimum timestep. This can be further improved by using the improvedLayout algorithm.
diff --git a/docs/timeline/index.html b/docs/timeline/index.html index 70f82050..a7c8526a 100644 --- a/docs/timeline/index.html +++ b/docs/timeline/index.html @@ -588,12 +588,51 @@ function (option, path) { + + groupEditable + boolean or Object + false + If true, the groups in the timeline can be manipulated. See also the callbacks onAddGroup, onMoveGroup, and onRemoveGroup. When groupEditable is an object, one can enable or disable individual manipulation actions. + The editing of groups follows the same principles as for items, see section
Editing Items for a detailed explanation. + + + + groupEditable.add + boolean + false + If true, new groups can be created in the Timeline. For now adding new groups is done by the user. + + + groupEditable.remove + boolean + false + If true, groups can be deleted. For now removing groups is done by the user. + + + groupEditable.order + boolean + false + If true, groups can be dragged to change their order. Only applicable when the Timeline has groups. For this option to work properly the groupOrder and groupOrderSwap options have to be set as well. + + groupOrder String or Function - none + 'order' Order the groups by a field name or custom sort function. - By default, groups are not ordered. + By default, groups are ordered by a property order (if set). + If no order properties are provided, the order will be undetermined. + + + + + groupOrderSwap + Function + none + Swaps the positions of two groups. If groups have a custom order (via groupOrder) and groups are configured to be reorderable (via groupEditable.order), the user has to provide a function that swaps the positions of two given groups. + If this option is not set, the default implementation assumes that groups hold an attribute order which values are changed. The signature of the groupOrderWap function is: +
function groupOrderSwap(fromGroup: Object, toGroup: Object, groups: DataSet)
+ The first to arguments hold the groups of which the positions are to be swapped and the third argument holds the DataSet with all groups. @@ -738,6 +777,14 @@ function (option, path) { Callback function triggered when an item is about to be added: when the user double taps an empty space in the Timeline. See section Editing Items for more information. Only applicable when both options selectable and editable.add are set true. + + + onAddGroup + function + none + Callback function triggered when a group is about to be added. The signature and semantics are the same as for onAdd. + + onUpdate @@ -754,6 +801,14 @@ function (option, path) { Callback function triggered when an item has been moved: after the user has dragged the item to an other position. See section Editing Items for more information. Only applicable when both options selectable and editable.updateTime or editable.updateGroup are set true. + + + onMoveGroup + function + none + Callback function triggered when a group has been moved: after the user has dragged the group to an other position. The signature and semantics are the same as for onMove. + + onMoving @@ -770,6 +825,14 @@ function (option, path) { Callback function triggered when an item is about to be removed: when the user tapped the delete button on the top right of a selected item. See section Editing Items for more information. Only applicable when both options selectable and editable.remove are set true. + + + onRemoveGroup + function + none + Callback function triggered when a group is about to be removed. The signature and semantics are the same as for onRemove. + + order @@ -892,6 +955,14 @@ function (option, path) { } + + + throttleRedraw + number + 0 + Limit the maximum number of redraws to once every x milliseconds. For example setting throttleRedraw to `100` milliseconds will limit the number of redraws to 10 times per second. + + timeAxis.step number @@ -1266,6 +1337,15 @@ timeline.off('select', onSelect); + + groupDragged + + Passes the id of the dragged group. + + Fired after the dragging of a group is finished. + + + rangechange diff --git a/download/vis.zip b/download/vis.zip index 4a1f722805c612b6b2b9bfb952e8d034ab5eb8a6..733f1a159f6cf7b11bcd126008044db99ca4f73a 100644 GIT binary patch delta 750323 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 z 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 z znxuFbY3jg=QK9UFv8{ok;8QTs3EoKl0n*I(UQ~Y>WtS&N)k0iNAU*o>tOC6}^{*H5 z7l!hMfmgLf0~0wfXeSs98E!m6AAP-x2d$7{N_|*nf?USaW1irMvGdw@`NW2E)2hjg z{DJqDMZIC;atGmsoDs3qZtTZp%6H@5^`tpzRTwaT@_(E z^|pUi+j*)E9XR;eAPU4CqrwLIaA4ZqZ^a)?Qy}{uoeA)SqV8AO$)u_l`su;*A6~vX z+Iexb4Us_c5T8}#(Nb%>2=)m0ln{VOmm+qjYZ}O`QX6B=W)@HL$>d1whV#?2gV`b0 zJY1^&1D^fwL#)ECEq!}ivABfs8t5$B{zQM%6Sc-OZVn$O8a3P;rs3$A5%?d@kx zsI;A;c!>5l%xmfe9j%FOprPodR|C%EZMs>3EhADhxUo!-K&UBkO6$Ws(E3 zMYn`Gg+XO>F^lXz+<4?&g_fblu8!F_WAdTT7JUP0z)CxjVoc_pKcDBvOE_Zt>G@jA z{=;JBz=2!$)*g8tWr^kJ)NHE7mc{~%={QEhzi@c?Jk^+o(w&;3&EYqMPgBj9?bcy~ zIvcvRXZ?^eK(Oykzk2{JHQ^qu={A4gNVbC6Mo@`%Jj&Xs878D|D+nlPgjsaifK$SE zWVhxzEYu}y9du&E-HRa&Yooj{TCn4)niRRZ{G#+rS9DHM5X6GD)jY59vhB+m6Nf2_ ziKFMJR$j^3v4PXS);xy8PDNOWJ#CII$Cl{MEY%mv_*A^toK4UldwD;)sBnMz>jBy^ zljH&F!d#VgeO{0)CDTA4(h5~4lx+cXX4e`N^1+IdJ_qfmP9OjeUXGU4aj{r)3Am4` zUuO?3RlPNe3#Qu%a(Yv0>Vs^C)`H+`wb7C#!R9ufeHfO92cvr}_*z_6o9};HT{l6{Vwc9+ z+KFtB$jJ0%plML%!rE=)1g&U-pKilkqd(e)3OdC%0MV!H4j^1qfY5QTHLz64+0{~w zZd;H_#c%3R_+}dq{C4t_VtJKK3y5S?){wXQ#IWjUnQu4)#R6coBaqTo@1;FRoUgRZ z_v6RN(RxxzU-}1}xg&r3<6dejES$!d?~BFvRu|kCl2UR~8co;O#&KDLaf3DpdMYeOYVAI3 z^;8emsN$li6@pL|l-z@02BsF3X%DQ?3mS4Eg*9)PO_fG3MxB3!9o=T{Aaa%6hTuG4 zCUTu&DOPJVe|8j;Nh&!GiiOyIQH9F6=FfVz!<|vI7y8y4s+(*D8Y8s%NvZa_z|KBE z|JUAYnl#lTHHE6vJ60Svz?9-_%dpuAU}gp_&;u-i6h;g{3$nSoB@B9>OO|iz*_Wt)da(q#UD8Z$TCL1hhGp+<6Gy+whfx;DneYNlxWT! zOfCl3F4|35Zg-lC;YO@cP#w@4Vwz^GlIz{66$Fd(MoOW|?8shP1K=6?@CrSN91gvX zPz``K&6nkfa`n1yqgWZ`u3+X_XD1M6&T)L23bmd)?zn%cmsEJ(SQjX?Qm*wwTni}m zt8rVQNIaXncR?C+tl+C9f-v*7@Qa3yv+>gA#>R#k^+WT|*8PmkkF(9KM@|iG4wb6n zmL}7xNLjbo_i(fK%X#f0&5?!N_lG#?{NAr>7R9wQJJELa^;97a+5p4!Y8ky$n#b@( z+b*;7D$jrB=hVY*V(MJq5)NtOBe~aY@2_K^AKV=BgGRucAJpZ>9^bsfjs3lOcbj^9 zhsN)qzVcj;b&{I;N)QMz*4>&?WYo8{3slldbh} zaU;P(TAa|)nwSMG#Jt;%!LL5u_V43`e>l_?wY-aFfrlHnX5$EnPDF~re+!Cc72gy? zP@Ab^S!t6a2&+1=q`pJv~9y3vLZtq>C+o6U%jiYX4W#wRuUBu;$80K=k(XD z5g3@^QxpOF4+FC=0uY*Z;q!>`7MG8hXIf31G?69u54PRkTT&1&M;xHER+cE<`TiP;2f8TLI)YTY1jQI0 z$m>67(lwj^7oYgVEPcqtKLm&m|Dsy{7Z5r_L@N&~f%*~A(PRRq9kq3^YOllh76Vod`2%FZGgQl%2`X-Cq z32diD?!K7XYUEE|%uYj3E@sknyYq@V5F!}m*fiWlVe1+TY**RDD>d?f+ISE&aow~x zg04*xg#I zpl6=Z#u-Nwt9wxu_I7?5c(ouLJ;X&I4o#h?+HU^&%NIxAYmffG3|Cv>`hF}3dO&lJ zTCzq(U|B!MuEg}()`G`z2q*V<|KgbR8SiGkjs%F}FE zq_zGFnZhr!wYZ!!Bf$o7=8zRpjq@Dw-S0Nh|Ms(oin+$Q3!)-?h=p0p=%aHL7+KxI zY*_6l5`tF0?{=54_;|Ss=p^XT*~cR7RbpCX?WT&s#L0@95!b=XxG$Qi3ZZ%Por2|7 zTE$K+wuNLXe|)chEYg6+DV#IAEDi~~<`K&nRs_fs7K(`QbR<=F)Cac(aE9=l^)JgB z{qzScwgdYJS8PYntTVDURv0?wOn5>X@9XCWFMd4QA2{bMo2n5w+o`AZNdpayp0G0)P@ttJ^)T+9~mjw zYK>nJGz#Hl;GrLdHl*|M0vv(@pij86fx0 zA6Ix!l<)z(2EZo+!~+}m)GSrcs*7T=tDvBoFKAuvyi})%VfOpv_J{5|S7M^aA{L7- zG3AT0-&>4Z=Jobbbga-SSeUA&?(lYif8PZ7j=Qh@@j#{ZY%{>TINP6`+E{1Xn)bX_ z{4RKR2&txZoY3QQLUiB`Rk`EP8NVM;#5SI~mso<5j3lg?3_q0c=0^x6+!FcMWRn@a zOO(22;|*izA|mgrNiy_@$&(SV-cf8E|7at*-* zb&-KtS)55WLJn;ho4Igf!`776j&i!-waC>WV3lm|<#Qc?-UhKhmHXREO@rG|rjnz! zlh-N4V%Rd(=p4QIsr){*sZQwfy*3bW(rm%(IVrpMb-Go=nl*QuICzey0ku1Zbka~u zlXBN`q^YhT{&vp}^>Fa7e@uHfn-OK`Fia>KHj0nAQR)}iNzKN)XXRwv$G0+48FWTB zihmzD7jT=dqC<~FW`&?zlx@T>_u5ZK@+RB^ZiWm%5Rop!Ep}|uiFNC6q++_~ZVi+Q zt=0%sX#uZj4ex_ohe4j^i+7ad5U%)MW2qNvgkdr7B5 zIVqP{Xx5IC(u-F>{Qdsu`7UvL(e$LFwUer%i`Qg#*~iv42(EW zizU26b+%fR^%(?7f09b3$iC>!WZbd=b{TGMb~Ha|rjsUZWR!j$71Q~|xo_*j(NV{Lmd-x!1?(l-VH$856lbvttK z9E5cn>d29=e^gP9ccqFn%CJgsTQlDin2D#XdmiAUwdf|O>m$f|5=9uQ=5&M@4Vg>Q z`fj+F-$;`%@I-r}PP9GyKB*7Z!8ItiI`cnt!eb+Rrfb_I?XG~ulSi}Gjs1*3+X8A( za(5zr2sf&toGWHwnPfJ8tLctQ{ll2lB8Y{ESZ*r7fBC$f{dQI@%6|eYGO?B413xmd zPp${3{S*KdlXO~oUMa?G>$SQXgWTvb-kjfLp!^&a89zm>>4{Ca>`kzNVp5)pP>i%L zn2-mY_Q%Nupgii%%;OvkxaR}i8+o^6pw@6kZ;=!3|A^DSay&Uy$D+tY{}Nf&Nu7&a zFPC8^e^~?VkIzjg8pCfN7Z_BJS$Dy+1IsQsahCuRwS$&uAH@Hm=sa$3Yus-F+(_INxLwM(J;ulQ`}4b@yHiXyOJYLe9DWk7`oSy=!ukU`j^dm)1`3PskAXUn|9O>p zOY#xB=QGm&s>HS^MJ7Ezom^!X`4u{ee~v~)Z4y|q8)L9kk#6`Wm06icLi$ zt6CdyRT&MKECtIUg<0A=d?vA=rz0HyhB7 z3^2lZ3vmyn&J7a19#wNuXi}UkW2K&{=c3q!X65{HKWmOH6AT2>OF}@C!xX@Pf14~$ zL2tlwgqc9N;-lzX>trj29qrJL`hzf`MwX^W|j;a4WqvAc&< z*t_Cbm$g$oojG7%hgIKLVq?3~t;!(L#|~}kTaJIVGD*&zwDK^a-|$vLv6IL7*!&8! zteDQ#mF+a2s|)S&qTuWBf26vAFl|VMGyw!a4s%V1D%>Ged+V}2chS}#bJ4^lr7NCf zcDW-UuLFtUnZ4s)f{7IM4`G;-;I0W+<+5s~t`j3ATzb8-fpo~MvLwTHv-tWdxB*&$ z(KgE!gj69(`tb6Ya+v$nJ1%YVbWbv%8D>)yengdS_|`pS+?K>~3f`$XQ9jzBec#lV z{M-Q=fA^4jU1A1_b#3HKnMvq=YFjNx(;1pd{p{NZ z#_MLkS(CegW`ed!_NLBtupQiv*b~x`UxWRcwp|Na#DaJ3M77P$TtOL?wh6l>l%F{K z<0sC9IV>X%;^hgisG6+xO_z6Ea8}LG&JEu@vO*Q`SDKX|m_vyQM%OlZ9w+5HqG)oU ze{a#~?cjuEK-h_Pft0~>A4}bVxA>ELMxF^QLmS&_vD{fK(9HX_y@+{I=D=z+7MWUH z6%BrK!bKtAakwATIxYEcrsB5wHo!tp%VIL#_A$uA8(`i6pI*oM{KgSfTFI^LLRS%K zJ~Ta2JmRta73JK77j?^oM&$J$KBe7ef2_;Q#QGfyY%v;zsTjMn`4R;Z8TfTP0YZd) zm>RFkHs7KVc$XDq@ z((qR|J0_V+OP!SCVp1%N*nt^6DbYYkiX1Hq=;*%;f1%g4h00r&gDQMVL_e%mf6q}f zQqq~WDG!qF=d^%S_eJ-%U*}_8doGx@v2p|uhbX5rR2|);Tby}gSqkG6I z3Uai<{w#_LKe7p;!i0d-38AzZ41jz6W}t^aKd-MdXA-h($7qrH1$e!9f64CE6DMJ) zvpp10R~Fp#Il`<4#rv{4ucc!Q4&56`yLFHYn>l93a7bI|tlH5d%u0HZ=wO=+KGfnm z8`D+hR+I5h5yoC@-q6V?`s!I#y~Fc_otZ9*>|KG`B_K3HmHp3oIeMoieWJ=`z=E6@ zl9*2xMLt%mtgg;W&UX&?f0KHNK0np@GCRl13!fyJwKqBNj#~;Jta?GlOSr?=X-t%% z9s+-fY#bn9T|8kqgeayeX<)YS`F!pd2KaX(Md{vDT3!LC!7PIMeqNKc(wL+G$K@V{V{D6r|B zjWQDnL^T`9C~8CnFzW0Dip61#)gBQ06*PjBpNwA)HN1o8KfHW(wDaPKZd=)zq8pQf z6jx@L^xByXACcMx%p)Qdit&-%IpBh2Qq^`0NnBLWh(6ey6;%s_b zEPB7dqf8uQ@jAi%ez%UyARD8)YcwDC~pU6 zy(z|p#Hbn7Y@$gz;#EBq`?Xw_`Q(SH<|9n=2n6{M0q>$^OFwq54ZK}|fgzSTM&gF| zJ;AI)mfFbqW%)7a446@1Kju}P9an0VF7hk2x-;ULD8y5`;;(?hj;LDmI2n3*98KXV3i+}wzY5bj+V z1QPwRhHQNBe;~_($B!$Z3jIN&0p*hZu&J#c@LwOW+XGl1vf%?ev(+}f_OgNH0%yfq z+j03@e}6XazVY{AyCt`Mfw_b~v0eV-w>=D3Zu-`3k0XkW^5$DUvgx5)=`Am|l-TfA zCU`B5?iuWA9J{dprSNw}gk=p7K5l{I+|-t6b(1oe16J5AP7S>DTb5kwEr2f=wO5X*&4q!q(ZxNc}`^tSljj|1K7x{KwUF4 zu}b<@`$!a*-Q^>3P!1wz4ox4nZF0HtQ+9TfWwLJ`OHBID|CH|>wsBCx9E9imx7lZ3 zuZN%PfBXGc`|9&qww--urd1Q94%3&Qo=uZSM6!A6kUZ`~W)FAvaGT=TA){^c%;6Su zFBy8`aBqq$ML26fB5ycnt_7NJBNZ1aJH*PBD49;NPOS@>!Z^^oAn5`i@^T3v#H~rn zGfhKU92)S-wg}+DH-r=G>%Kb#>pmq3Vb!wJe=Q=Rt~k+)ksVxgLW?gNve3JxEu6B* zTuFtkYhvV=Z?*2X3WW5$K|XA@er&pC{5^|l@osRjS6r@Qjml{`$roD3ubH+3%}Dgu zvg30w>{1Msx~D4Um7wu1WtT3soxpUYHtZElREd17PBRw0Vv)%IiQf6Ufx0NGC4$_ z_? z4F|XX!{NcRmoI=99d2xFqSPCuy6DY{NC03)6@;#Ywg#}@K%NN!C(t5oy*fF`ip8Q@ z)XuI&O9j5E9$&#ODHm2P5{cXf+J(}fG+-qU-O&&Q*k|*)<1#iHlNdu1AtPF6f6qGl zX{AH~8Hx@_YjuX0ULAZsP;M}*%$tEfbl!t3KOf#;B1qV9^JzeRCU_r1s2mVCfY^v8 zMRDl4y-sgCQ)NTODSpVWeypn>%j)jbdaHmS)(KR@yzh*EJ+GIc$4%|}U)Seg!fGme*^lxCVe41yA>xE@p+DqYhy@HLqttt@I)KbdxNr$ z`6wx5xBQ?bKwCu=2SSFZ=lP|$b~#0u#R2aEu=bbkTE3gKy_XY6moVl584CuA zP|Vh)P}v~&Czn*_0WW`30Bg<}JjggSq6w(L{w3&GqUG>}6fRKuTvg{J&xEjza9ELq z93XpA(-}nj$5{gLD{y-F>Yv4;5`ZaimOB1`S396NmFsJk2@3v7OZDro!9xA27V6hu z)nDJZj{RR?oMyFtbxeC$1BY}Ardfx1g0-W1@B{~?p_kGw+O&Di3+{_fq8U7(+aD5r76uDt2|5F(=J9c)Q|ehk)0WRS$bbv#OU9xbLi zyg!X{_IT$LtqCg4u=5{ zTXX=|WVp+Ta8s9j=K(7LotLQR0Udumv7T2tvN*|2eS}_*w11Zul}Wn7_)a8(?*d0= zk57RR;1vQlWw9(4bq2u-1{8b>?q74t3qz9d`WQspJ##Bz^NH2ehOfeV` zB6AcuqzJB8ni6@jzH$mRVSHM}2=AEd_t)y8gvIWtFBEe^ZM0lJ%lX-z2#|FHf23inWe~k9c#PRb@JeSqs zXrWHgZ4oeMS;39kK2dv80pg569b4Wt6{MUAS!cMlE55qMc4?b}e-;$a&wZ6{HRR`dB|qU(ReXLswvbT)inlTRG6|hU`h8RKLx&*7!;&ZhHZJT?qO)r zr$uNcm|~DLNz1p=u8IrQ0nq>NgYd53(@aA48CLvEk=2?_R_S&@$wCz1G7M;I8U?w} z4VqNdR%wuL709TAg%*E@*-0-m5-F%;aKcKvi48zt=pHl3?7u`VB9(^6d2IubW;*^l zbQ`{)Ji8amxT~(Ucxl76CXGWa@*C9PXMI|}S6eGI!>+AS_X}y%{lYcsM#Hn543?Jp zbdLNZVFTNq`B2T#c*JKScgXCi*bEryeHd|37%f2H^2HRw9NK?i-tvGX$7N~LXU&pz zENWrjBWw>MvO*g$vv7S*V*QVVi z_eJA2a{^0?dcnDth$zA%3>~D5R?w`CUKRE}f>lAurY8LuHFccff)3$c6nlYHwl%1A zp{+*Ec6L?3m}h7d7MAMO#HiYw4RJ`dnud|08g~_I#b3>$TCDSIh1pkUm-nF!M&bwA zm!*#&u)BYVkYc9NEe8I8J9?Yc?d1<4gqvSXAYQ@gU%6a1S%uIz;)@nLeXfh@wu&0GB4GUnCh}f?9aTo0yTV!Uz0OqndnZa;hu-z#Czq43+Y->XJSBVR1^wiF zxvXX$xpm7e@>2-f*-yQEg|SDYnO!JSmZpECQ2_efM*F?LdQ>0y@>csIp7WSRTM4U!}dg=-Jx?4jJ2Cq7Uw1@>?;6}yQ!jS-dKXsx=` zl?Ukt#PzQIgFVsub8HRLcjsicrm4vYnV+s8c~;1p?gCa)vBWiCI4~dR5(xUH)3blB z0JZT2Ms_XLY@;+1Zk#mkX&xF2BtEeBY;XZ>rM47F%Z9N)F@Wao$g-6|F)@|Q^DWMdVJhfK^hgNH*) z;2z=+<4(=UlOf;iqJ-JeB2>JSgGhfdLGCNpr3`gTe79d0(<=A1o<#XRCSxKYz?NF_ z1R$DHuRy4*F=R+DunEIR?$#`-b;6T4tcRZtf#OLE8!|6~v}x*2@`Tp)cV>A2F5z+>Qq6yk3Wzwcdb_EHAu7UFht`8c%?ek0`T4Ty$tQ^4Buysrq(h;j9Fo`xD zSwlBR%<62&FG=CE;yG2na*mkckOc7x4IwNGkmRb-fJ{PEWMNs&MZh~tq{z|%fsig( z%!<1n(K^f{@eOj_0$O*jmhF>`a{L^V@8Yh>c;a#8P)j0t8Jm8IehO)p=GoQ!+uy0R z@voK5w;Ll`(XyTa`fSU1Twmk-6-@May4lAx^q z!kYAm_&Fw@*Fy?q1G3Nj)j=qG-3=x*IaeGd&7UHB@e~ykcgd!5@w}eF5QBW4VyJG~ zyY2{%=kXtd;je-O2e*vkuiVUGE8w{9T4yB33JEMH7AGuizO4+5=&zi>`{9@w)n8ec zvG4&LfB(s#q;D~F|4+0Sg18-tQkzW%Lmy-q)Tf=4Pu8T35bV)GM=^=DCmL8&Ar9XA zuWd1;lTl0Pw`ehxzt77Fitv-RLo1jKm176_1sfDTA5-pb8>vCq3V20rv&5+CAHV-@ ztO_JS2K#*e#wBbKLuwrPXOnC+qGYzueJ>Yze>eA@>MO7J*eDq2xqTrtbZ+)zJ9~~% zh-cs2GkPo1zlq4tBuA5Kx*p4Kd!8&u^uehlXdCp{7v?)jCMC%@#M#eA=L^IM$1cSO zLPcXIvcHg4^PeyXh{@ms-GLt>b5?in?D=ek?l$ArP5TSMVi7510HP{E7}nv8g^xD@0~HP_J%-uOn%UC2anmV?86rH{plh?NROigNRM00^9=(+ZLVDGg zdqfxPJW88BIHHiO?{a)HMojHf;HHDO*lyn2Uv{b`KyL%^9S(*Lfp*^lYj9Md!dn>H z5x_8|N%sI(K&Zccd3#&3mB8K_w&mKKL}Hw~aLR8fm%jeM_yVG{ls4r5<7sje-xFdw%cb zVH8it?xb`Rhln~6i3q;!MGG&%E)NRs*?%MiWI`yljdYt5R#56| zbQkYC^D|U;{N6I3_hcAIG)8t*y6;JDU(JD^$WM`S%EaO7lFKYhkV>FG6(K>bF(6@- zE7g%53k5sgGKilmiFZ=i!RYGDnk(Ls%hV>}iI+_Xd1B)Z{v8w*5kn5zx&=FvICzNc4xVV9geA40?r#e)Hn~-FMfqNXHrY#Ee98CSf zI19|Z$Czid72890x#08$;LQSSev0hmXaYf^nBvl1MxUSXt1h%5pfzca_NuQt5)Z!R z)h3HkIb4xaZe*?*WKGBAj;cdUJ%82L;t4eGMPeB*=UM=x^S^)JP}6|X8q^Um(NS)7 zS2+feHCWaG1n9Nm8kcGx!$o4>T}mVx^oX)iBTA7eqW@l!0N-L+>}lQTr>RUEk>;G~ zjX4(stq?{&nMqpRFnBWX09vj#dUW4XhygqFi@>e1HEEbl`}O zw>j5f2WnvbkCaxUp?i%PA0L= zW#c9*4>d;_amrfc`iVn#c7LD)v7u6g$TW=)=z_Wh^pZ`HplSH7xT-A*`=rd)rJK_u ze~U-+5&6>?#6N-xGh#7qVJFHerdq+29Adw`hB|i6Wy+6eTo}E56ncxjgIEp}44@6D z6-mWHBa-AcbU;NZVPbExbI%CFy`w{KVS=}aNHk`*dCxlS74&Op+J7RJjfAuW)CuqU z0?+K6Vz_!{3hVl)xLj(GY!pZ39cH-ZUPum5x6Y1daQ4JnXA{`43;B2)Z(r1icET%^ zK8cVYDNnA<=~D*>2vI>wu9^L=Sqk;d9JJS&OE`@j$yBmMJFcw9F*&Pi7%V{mNp33H z0Gke!Wg!6%t4k{i*?+4Pnj?FHG5bslZq=bFMLY{au)QljO&0+kevLyUsY}fmC}Qcp=dg$zWLE7Q?D zgPJn3=h6w%{!5?ZQ8`>1qb?&&TG^y`?zRbCP-&G;2So1T*yyfSOrl8=36`UI<)zpr z0R)6{xh?7>VO54p+*uO-es#^;h#S5`Y$f$n{`-foM9~$$?Y=e9>Qnc4v(b&id z@^&`N=<+mE2yjtk#1D+e+2-B*`amL2EW-`0mOeKTg6f+@8eLZyABL-Pv*>oUMF=PP zuM(Jw>rZot@4rH1s=b4s+zf^?NE4*RsGS{Fk;UBjs_JdejVxws#!pjI6_3?a z-RS9Ps=_guif5JxB4)2<2;0b`bYsb&TDFdsq`6hXs9jV8M=z`3gH#<^(8l;`hzJ%B z1{OQ&ZyMn1=25z=as18WbcNjbUnfdeynlZ;4#JgS{P9{I;fTU#jzOVMJvEqs--tX6 z0Esi*Lh_IE@L2$dPEr>;Z#foN5b_~*pG#VRn@imXM3KT6F}|@0KD1>f=yR_RXG^J2 z2_(hecq`+(9!xv~f2`xgG{im9As$39BVpWP0b$I6*7!-D-3Ce(Fmg+#ZihO0On;}Y zKwudE&LNVX>e0%>y)D2`1dNG(WZ)o@JAj{YIA_A z;XdtZP7@N*8`{>~Qh!@*X;K{y^?%fculM`nPtf~)l2YmYP$@q7Z>8S9mw!^vEb8s3 z^%SLXG;=Gc`6B6UOj%ok4EYT2fj(JzW4lriCu80ofLp@yU3UJB+a_$pW9aZ(1uT|VDSAPpuPc~1c^IuZ|y3S zeV}^gCQ2ZEfI0Qt94?+BhB92kFucCUQnhIQKBKt#(c!tmkh^zNaP$RzI2`IamII_B zbiRM$ty(DNapgPy?5%lXln|B_-ZlwC(>NekLas95XeU*fEP9*DGJi|7{>-E{F+TRM zr7ny0@J0$VCm2VXD-q&(zfe5W z(nxo?N$z--V}7IDCJIu+J1#J=tT~!N2$R(S3Oq$&_=?BEVSEzx1pWZge?(yacRu=m z@qF|yVyvQYNY!k~OfP~QwEuTWX-_E! zFF-$&y?A-ltep_<;{ywVKJ__P%a;;sNE*R8Dbi-SzqYw4T`5+}nH}4#M z>Na@k`2I+Lt2l0~;%F+GQgSraY4UCPODGh468e`-IIm~<#wq6`LjRj5Z{I*(AJ}$& z1Tjh?YBquupc2#m}jH z>bK;CkmeAjbhjl-_N^F+xA(-AopRV3DM6hbS!rZSc1qFkKnyBwzoD9npWJG?4G$V3fwL*+py;OS# zZxH3fNKRRf?R3-j>bDK zPfpbQ@P7!IVyfF$r484Hg27^p^fR4fy8!H@T+~ZDZ%Ad&^7j-gz_Wu>Oc2JgwnPV} zo*8BWgobgZji>`bYF3PJp0*Wkm7(6Xk9?SS9{ba+juD0NTp7KY*Rze`1GUv-0M)h- z8F?`*Y;kcEs1ne|Uzai=vdna;`8UG}QzDyJehQKy{lW`~?bUi+mr@M^B7dVAG)Ptf z?^3(S1;S6{3ly_-F}uhY<66he29_1rBaLqsp~9Zi;(z)fi!b>}hxY2$ye!?3@`0m^ zoe#LU&Biu4iMPwCrq1#01pw}bmQYHaRQcq4%TN9Fa5h9k9-Zm+2O?wUOv0VV7Pen5 z)nnQ|-?VKXiH6BGt~+fM{eSIa5XvN4$5o|r?rsC~uZ`GZHr9;wNZo$ms8-i?GdMzh z-z`j?dl&gk3R;*t@M)|F2xenI&RIccoD~P37^O_W;OXYP6R{L3Q@(;L;5kPa442E~ zvk&KV;LNl3RXeW6S1^M=(9H>bLszb_tK}Qo!l=Wd$2r2bMU8Wxk$+I-Q3O8ob_TGU zK-ba17Ij-do#-Zo^fBasz=f82vl?Fe_5(M=-bf8I(7=|UHGE@Cnf=wD6{#3R0@aM9 zv{9w^LsJwqvWLqesmHeJ@jbkCtIT1^|;_O#tQ;vz{pTpd_SXp_}4ZLqlP{xp}GE*Uj)Nt<^WHXD+YiR;p|CVL)+hEo(;@;jO**HfiqoIf$y&1ipTwA58OK zs|Ccqcb}HC$kRnJRseHX1sp(3!StcJTT@(teZ4cUscn)~cYnf547GO~PD|zVdT=+5@s~^QmykeS977a^YH1*SI>8j%sS$Z+~&Xf>5{RDP$QUso6#B5BM^G_f4d&U zX2>zE1MF1Q;D3*Z_CU%!*h84nMJqQ*2FxM79WZwH^#g^q*`mIx+U%abM`$1qP~~lA z1BHtGU`=AQL~>dzPD$IRa}j$RI+Zef$M?b9ZXp<)zX3>+kSPK3ylJax=Wv}?s>!O z4YHosZ+Jw4ZaA;-r$%%5P8*>2X5gT>G>EYM92e?X#Ll7!1b3LU=?S{Irz)7PQuz)o z!8G;6l4DMcVBVa}8xi57mxV)KYm)Lx4n7xoW%(+Z7pSH23bz2}3hM!AIS^U;gL~(M z$BQHgGk;OsCzZN1p+JJxefVo_i;xr(ZUJ?b&B{^1hDPfDP`gyS{&Z3ugHSmJ0hf&$ z=&)j3n>&QlrT2}uTB>KJscdWb<#6+kc~ zUFKA$J&nz&O~!;`U1?Ad8+$VTeX?BKoj`au`i2Iv>1u2?S}xvfB=Ua1l<1664Mt8Q zhXL=HXv0*BCEJLsT8oX8W_~RvY}GuWziG_TG;XxvTWe@6v1(}=jN)}hOJRp%67coM z1%H@SU``TE^(1$@W{03tv$v3V)|X}9+I7Ni!Zm-}dq({7Bd?8JlPNTcqo~T#`QZ&a zYSc`lGsVJf)-c#i3eU!>XF2#8;-*B*h{{G08x*$jV>{Tmm#3 zERQFgkk2B=%)W?G zdbgf9J%f62VyQNG`$-=h@X=EmV6`9L&Z+HpEE=p%Zav3;*6~)Qoh<3}{G84*MVDc5 z@>57D(9h}AN9i@De_k`pN^~`Ze;bSQXLWzESUxGBw5T$OFJ?S3HiMG(iVaLubhSO+ z$)1^}@K3Bqa(isw58`MP?{RA*ax5v%OxmlzE$dfwDk@Is_ut*Ky@6%JeT*9rsX(?= zJ%@yl{Ms?K`fRF!J#u%@wDes^u5{VF#H4?Eu(KA$ z`gyI^8Y6C~>mIS9P@k35NI)q69;h&e8q^LQBL$xRBr?>b!X+XD@-qhGT-#$UZ-ypk zsw0$vGNv zlW5&;a$r^LFA-$-@`dxJtdW0bw+}?nXB`e!{DSGn>w*CI6inMJ=bs6qM?rM*OKW-K zn4R+|2%%xeYFY(DU~EMzZ5pC}i{pqe-z;RIn9dS)y#4IVr#5fA%zaGd@Uq8_ig0cgAv>g!BKhlmio$i3XO83gIj z#NoN#9{tOKnDT+-Eri2$7_0-jp;z3$rF+*~UrG&zQ5&JXShzV7F08mf;Z8EMPW`ms z-GOU@0Rwl@i_o=o3M7AU8HU?w0d9KG0c< z$&5nK+%N#o_T}qf!=x#L*&rJOGlC9u!Cl8);4IGP2mpBxhhs8U--ZJ~o(C)AYAD`l zKOdc0VY?|f5O<<{v9QD7lS@70>6RnJYsLhlVnBg;HSdd^0F#Mt6(NJai6}>z|I!gG zz`L|^D;BnD*WiCTo_2)mQXC0UHjQV)rM^bWMDExAW1ZF=xW)Jzd3nsT&z9BvGmr~^ zMnbmFK;(|57Hje9X6gC0R#&jbOQ@AznR4S;z z&`sc-?uI?ArS>AmqAC(oo-7R`g3hNCcTZVL1{W&Z2J?S&DX(S#4~W$l4uHB#ogARC zupX?*9 z0y}9@a6+U^hl{i&m0&q8)}?a>aTfz^DIgPkp=}t6vv~I|Rb7HlD#`)W-$z0jV^sOs zS&_fL%D^npU65JO&_=Ek`a9ax*_IvYnr(whE+*Pr3N}jaK?sU7+ookZa=SKc-;F~L3 zr@b4qL~(YepZV2Ppq|p6q(WwRDf^E0po&5ApvL1ks=5h4G^%fdkc#m&D0e;l&FvcneE;BTrB;R61q3V%9Puvx)A z-rf&)v1?M%u#0`N;n{V3u`WIF8qJ;#hm$7e?di3MUv0s3lJo&{=Yc(uk}14p_# z*nDX%@R;nyFuDP%mq4yI!gx*OV`=!F6?SD{x0W&!r9fIg7oK4pbrTg|6t02n7Ka(a zf12i3Y_o>O4jNW*nL~t2k__gvD}BMxL9%Mr?bq2^KGs1jx4~wN;zCgMVaho1EDuff z^a9wqwj{tZ%0*tEFK{Z5d5Kt?`b8SZ!QR175pv)IXuaLyH>%WYherFr954!Geq2|R z^QAGjYpU&r!%7G`HhOEFZzbue4M<W%IyE#q)fYwV|XPiQ4H^wQf{m0-GPHhUOJR8jfF7V7X;gl=?Z--;TUM2j4HAVJ3 zgYR#A1kd1i#T8(2D$MkK>mJNrvMD#>EmN>-FvZ`al26BMdW00sESBtTlvs?#|L`xC^hS3MW$DaV&2%C=m^HLk7 zs6`(0IJnPQb-t{1R4ZA<>02Eee^ohi#-%R^<^o{CD)M{br)>BO!#C^zs9e43n`({| z50B4H3l#BAHnq3i_B~fzwg2=YuI3Mg8uvd1d zHhXWG&wFgY^|qQF<@1-^*W+?VEv^Z})#FJudWU9C%L=RlF|4d&G>gkoe=%QX3Yazh zGpbZ!&PT-`XRo>4-ncqHo)r9Jz9?$+j+~dX(HVZpXZ#0kTKGF?*7&QMn;x6?5OAX( zw9F;G5T+@G7(c#~ibJn3gH=aUHHSM%eu@_#t0KJChk=+Sj{Ta`cF8#QuFTdrKu#wIylV7<9%r0Sy?N>qmZ?SL)M7MJ$5a0jW*w$ zFNwf#P9g1-)(_8YaZc&4(nj07o^U7WR)ku2?M6fNWzE7Y>X9Cke>t_y1c@z$M>U>D zcQd@`>EnlRh2u!5_k2Y54W+YpDn8Ke;w6p^o>T{!=H zlDZzkP2;xLG8xd>W6W{vubv|79vJCwqko_`RdONNZ*a`fSpuTk=8WeNOAC>_YP})2 zxTY~tq#KraOn_EKe`O5iO-2w*wRP;EI-t=W{<@@I`w$|?rw9LdzQ0Y7fp|oqtL_)| zthdZAs>Qpkf5apuqo~I)mN6M%Ox2IY)mkWd*wKVaob&YNrD1O}vH>1AJW4UD78JBp z@F=yqc2^h7sx;z`A&?2F!37%MDp)MKD1vir}LY|L(E&z_`B2x>WIxLMoCmq8u^7Jr@3TIR1air7K-V$=S; zItnJBi%^Ult>t#+EQHV16W4E6Jt9MlO})dQruiA*z>flHiLq(9G^oV=m@Z%=VJ=7xPDe`+BrXu9 z0&$$iO~gp+5r2Gw7e?7zC_vyMpXLF0t7<(F1goj9j&4o?HrnI2ZvGrSrH_q2wd6~+ zFPEXUmLD}0&E?*550a=e2(x{!qf!-vqrO;W^TWg{a8-Ky_UHX4KkV%O*V~=vdvEvl zpB}u}fBST2_vq!TU*5hQ#NY3{dbN{&`)dF2$7e@x-+w;(%!+M3d-O@5Qygc_ zxCH9Bxq0{D-K~wy`#Qon@tkMN<-Fd$d-qhG=I6(XDoyX6PshL3@b6u9OFX_i&DADY z+@+b^r$G;Yt^e1v`y1=e9&UUhLm|@K=p+l|*k8;>B{@GS!g37!+B^qVc&5b?HDs?U zPfC<4D1UI`#s{9q>Qa}3)WBSakg0QGgo3lo^SzC7nq|1q(ar~YFeGwdd0c; zr~Rf$M_-b}%$s!sLx0_^mQ{kH9JHkkrW3^_`!Sp1{nmjv z_cXYz_Jf_&2tZ40!w^6QfC&5JEHB;)vOUH1B7cvI%n34}g#8etYg*0z_u(KrK402u z$VBRQ>yz>wxKq6^7uAg2y1*Gyr%ZDPBl5XmJ?w#&Jov+AROq_{6#aj)s4i-Sm~>UC z3A2GnlNe!*OQNT}xX=1ONGFV^ zJ!cME%MYFM8;SC;DHcGN-1=aHq3Rm|_gcntKJQ_yQ&axS=JJ?aR&?-Q%lKjE%l_PN z7*BDzT;xC^yfLAlyKHl-xy=HUDsmFhNf^9*J|{y18u zdYK>hbR1f}v1KZ-tC ziPGcawzu}kIZiPFO2_(YnXtBL+KjH*57JAV50EOqC?t_1r zhS%`w&1;eds0QF5eUs8N=(aSw(E#F+sA6&@@ZqG+CIZ2}Y5HUrRXElPf-m2YZ6Wf! zNgvoOGo?@ToIi3(xTymSV;wYNQh~6D1RnpFn)+nIgyV2RG=VD#j}QjLqLDBC?L^#n|jPys1I@o)*(cuVpUqjO^6;03w zx5>s@WDfh=$!y!sF_A}65+7Wf@gT|c7I-p2cEYYPMl=HR=xLSB&lmHmF6w`^rbXYG zOys(M{3SPp32?KV(TNfI;^SjKZwoB1zg426Li{yjVKt_$)3SL^3yN(5J!D@v&{k=^ zX=*xEH6$G2DfH0>k5bAg#RQ7x<5Eax`Q(5X9*Tx!kA;=0L?=p{Ag8H*d1UybcP!li zbmATLm^tU0H5to|!}S#Lg5ZDO2w)(T>KL6_Q?<_?#c-39Em={bW+11WcPHh@5NpO& z90I5#A@DegKd0*SQ}|ru??J6*ircN6!fS5w-}`hh^U=bFsWzUJ7!S7gNPh#H=9B+N z-hQV_4K3f0pJRiYzTj8@t<6{=USYrx`MWb9I`9$GKxbLwcolq)N9uo;RI2^#75#{< zY!F}MCTF>`{}u(LdBc+y7fmfm326^ZzNTRNPz|wrw1?|kmnbml|*H|x33V;0tpfgzab7k0~m-BJxY zr24~EBw}!A$3ih)#}j`=kx$HIb15$3uZ3f@V^0>8k)u`+O(Q??lz&?v!KV6_44_xe z%G8=ciM`=4et(^^_`VmUS{j|#kP-{iEFI^rRlsk*$)rh`W=UsQS}lW;&3rO9`Bd7H zpXkqTGxUYbe$R9^lycm)s;zqrr0vtFTgJ3lMOLh?zwPuQZ|C=rmz{vy>(fO?+I=*Uc! z)l6ZzsCF)_Vgh7Fg8n0Ki)npW--JR#wW?~@)Jvd}bCL50O&`XK{Pa{CTEQl<(4q;6 z^ty@sMyb?B+&6!V8y}Xv$fO(?W*RAOF>TSm>gK(hnBhM!YY`_M8e}?OjQNIE_vN@L zOAujnQz90bgGCT{z0jU1P;_dV(y~x=@g}D=;d-G8zV1;cFy{#>Kddu?dL24rh~nsz z>jsZ2F>YElK7X>6p zf3LeJN(Frs@7Tk-x4s#D9UX&sul=QaTkZ@vK6|Qo=tL1QF!zn16}e)c7Y5;#K|dGa zLZY2r_EhOZc;@=LBx*vp^S-IP6GN&b{9Ini;q<;ii9%ru0fe`Kh;-s5hDn82XX?ge%s8k;<|2`E7T zNB4E;CZXPY;Toff0KBr-mMUFlk*Jv*5Z7arWSD;morcUgbT}JW{W|jSjh($uIcb<< z7)tKY7x}^y)Bqb@0U4`K`@NrcUcESY@!fXjH~8OZ-4baQB0T)JIzm7Uh~}|FOwS5N zklT0fselRdg6jDI_mfZ*ac{w9N?PY;LblW z+68}wlf~>*(aJN9g$mxPGEJ;pG94s~03x3Y!`#k-IhcyT?P47{SdS?m2=$F-x5X*EouNBFFcJY0EeoXw7_SzL_+z`ai zlyT#KIoEe<(d!cwbP4i^p$SIHjC7hh0MUO-`KBx^Y>Lw3L2cj0D{kTln+9yV;K@Ah z8*VL%TMpP}!@f1~vb*vQWG6sgu)@2No6QDSjvxKt%LZa6G=*sqY;AVH1&_1AAn|CSr|O z`OymJTzsm4w9%}Li^($o$0I?78zN3$I@HhEYP7v9w|t^_LUwN>Cm!FW3W2jeN;heNo5d|X`Ecl2c+f)24sAFnj)KVC#v-G7d^2O+^5ZUpTiWDEKOK;{}xY=*W0nw|C2hLLMnbwun)LRha-|5d_|2n2yzPZ&-u&SJ^GvU1GIL*q0oy%c|%zRK$-=%|`hSgR|qKDHP+ zHk%D{Yo0mbvjTutJfA~0d;`g|v=3{RK7Zo0;iS70mi=fISY7xMR2FAi zZN0rh8ObM}J_cgj&0l{tVmtLAa_xj zD*aaLxr%W67R1}#1l(y6H;y{+9&Z&qe_Ra`Z%&&~%e}FtMDZlI%+D3wu}5&4`D!?~ z0s*LGwnTVBd}c~vlJr6tT}}%#3OlzpY%fOAR3s#`9TxakGlG9BAR=ioNxo~m_Z42y z^HBi+Ib+@s>q|mpntPmWW_KC>T}TZlmedsbI=i>AChOdbm-~kEcS`8$ff@0%5Yl)% z3pB;K8ux5mEMWdIpkY4#^}Jph76?eK3A}}{Ms~rd(&J1KT=-g@FZ;9t1JfB7ef0XI z1cih^ z2ooQMF)D$hVoN8SAXUA-nvKpD)eIOK9kQ)fbWQ!L)tVHG1~n2zBT!#-J_!U0pB+4L z2Wq0qOMI&EXF7*m3>`1x`g3sjG6O7NP1Ue%Jxw0hMm2vGo)?YEsaPU#VliUuMC?8b zNnmFX(!#uI&~kmp{!Y&Ndi*JAww$~fLFx3&oTg_crRwU)I3)#GL8Y+vd1#kkZRpdn$uQU)O{U672|qi z(TKYU1^s_^-9^aQtEfkda=ye+?O5t{sTd;rcv#HN6?wp`;N!$|6NE*+SJ-`0o}TNP z$e$r~>){lj^xhU$Pz51t5#^666|<*@4>x#qGi)-F1IaLJdj%e~nK`8}1B`vTFW{a8^4G zSI57?Kp2erg%--kzYZ;GX5ZrTZB?wt;xfgh!Xs$NZ3IO^yNXrbJu61<`a10AKz2}1 z+^6QX2@hJGI0d1kb>BKtQ%5dbz1@5UTsL~P=9IYvBWIbO^k`+x-r21t)#3+;9G-Gv zxc`4pY&B7Q3(CjmP8M71Dg~Fs6~g9TK`EPF(<~Y68-R|SMesC#Dx88C4H-2VB=vXWuzAWE8~+Snl(TYK zf?Nk>H$t4Qhf&SX=exA!NJS%FCY4T^x_AKJFy=@zHZ}T5IaxyP1=2$4ry_qTgINvx z7DS^@&X-HDf@XFNK4u_N-{eY#8+?WAB)c2wae!pbkZCWzOiib{+3)L&7{P+#T<(?c z!)o~ESvf5MVIG99zAwRl=qju@a*kU#yqzQUwc#V)^zH6&v*KJVa?CL=HiB~pm+Wv~ zBK#nGt=Aj9yL*-b_Kbp&k6?fJe6DZmQbjPdZ=V#S9Qb;8s|mTPh6u)^6HFYz(Y0wr!4mk`PwQl6dV?+f)3QbrKn7z%jJm|{x2C0T#o4^Xf#W$T=> zgZ6A7!?nQ#)PZCu35I4s4j_ol;7E9B$6Gf$30H*q)Nlodx&z$9O0b8&R^`l#(Gx@x zbw&_G5)IZ-(Ba150AAN3p)c*TM^4S_WYavpRoV@vgdTKl(bC$LS{2o7%l2W{)-?vU zG;I;ptC()51r1p9*Aah{{p}Iy(F!PNuTnSNMp?twz4o_p3}`COmIdo@1_alqF8(4u z&Vp63onadfnDoAHBz2yeo{3STXaMi( zj@qVScGC>C1Jv%|a2GssN{&L7mz6wcC2uu_A zFU!UIY51U`bM zijJeb1_(j%k-C4}jEl>cCwlsDo2_pq#}txvhse=vVcAd9feE8)LXf?Z7&d%X9IImQ z6lb@*K;};Eg;PkoTzjQ4J`yA4H`zuk9uQ6OG=EndEQ@JBvL@GI7jnfI=a8Jt7%@=~ zu43at;NN3;J*lx_>DX=c`LV}VJHT#&42=;cd4BHPiPL{Vv6@ly8_mE($$CVFp+B(i zPr+qb&75I^Iwka`k6Sll?dOQB?349ltk7$OR?gHQffJRTK^wiB^zA%uT=22h@Y>r|ZzZnoO1V&XEQ`Zf zp{G=J-7tR~y=W(e1cZZE_>C+ ziz46zQ-sETK1-w%I@f4Fb`u7PhT=1?R&3J|2V||5RbS^~y4(o)EIVTB zjG04G<5t79#KVW6y$~PT#Eo`IOxaMH>aDIP&uU&*#g+Vo3h(&RYNiDj%G%FSByxSH zP*YScv*NO>-9;y(7*uybQm*A0y!f5fM4%0UZ3I_efT)@Wif%!-5GzQ*_TBNjbYQf{oE zAiZ(=fsfy~^WoiGSd5$73fVaT=M~kaZC=Cgw_`wPzSDo~ zyD`Qw{kP%`#ym&nuVaD2tKs|DF~lV{y3h@}7bhr(xMWZBU)8_rZVbH$PZ2OCxhXN= zt2u!1$-x-)jvaTD`nkepqOtYd>hj(R{qa~yDW-rhSMOVoZ>aDL0>LL{7~W?&#fl&B zL0w{!KU#0|W(h|Fvb1q2(uACv!0yEkbeXgBrfZA9acKuxjNXeb zB+MVST=R#m(ENb{z;8Q+JQ3$qBFlnW%uoCwj61N->B>k%o&g za?7rSAMlDU01cch6jFmT;$^Imk}ms=g%w+cl`+N~z$E!{p@>M&E){V3D0)V=-qcqx zLiUDU;%;-s7Cjm{VIpi#IwIb9=@Ik{S-Ak3cRs?~fj+#b=bg^VR}}51iKd`~l0F^* z%g~a%90kTOe=G&Tp0|<@wrmpn>h;DOccX&|EWO$E-{hD4X3Kj62C{$r>Yn#%!N`)@ zQRQrY?vN{X0P9Sxu)GwyEv_7FBzQV&2bac7l`>}uNE{FLzY6NnY^Z-9g|Bcr)W7l& z9D(hvx*ROPko?*k6i*ZU5y%g2V#N~Dz*)m4^-1t_I?bYZuYJh(+T`pX|hFcpxWg`e*XB%LfPd`4_HNJ+K^XZ(N*ypgXM@2d5 zyEVNFk23^QKT^g{0^wab19Yo>3TpMB)a>0Gclhof)8Xixn`!6Vu?EO~$-Sy_eb;Dc4k4ngsOymx;ljfdBEyi(x~r>onB zJzyV+W0yQ2#Ob>hJAVD9^_;ET@<%$;wNUE-I6ntUc*ZX%9ujtO%_XjC!{kg>)zy~h zXSVZV4=%N5IVCptI;$8n`1Hq-M5l~5hRC9GNvnDj`hiG; z(Oro+E~_A_GasIDyE8@%4AQD4bV@fymT*csD-rtE+p^`j;5S{XkQO&qDeb4xf#mqA z=EQm(0u{EaWh9jzJG>HU3ANlYqH@21sB~UavW{FVih5pQ(l@3C`c#wp3Kufsevqth zK|-JyNN|5ye*!*g>d`L7E_el|V(Aql6m!C=0C@WDhF58_2IF>zbc) zc4=JH?Ti?F#tDM&D@}c4)~Gea?KG9jklS{#GYfPB$tkbtpC~)kz3(JFJt{7j2e`2s zsm*^<72^x~Nm)!N{*G0{{3VEv8Ok3_bzp8jjN+sqB*ZOUX~TzZp^v*!{%jS)O4|gT zjh_PMx17pQj<*Phn4(8>@?C~)Bg*_)ng=_aR`mliIS)dHTBs%vT0#M_(!JWj_dsdy zw6?7`MPgUJbkBQ~d=_djY{kex_6=?4@W`{dGP2eU zta^THo4R#rV!Qfbd{^^D6>y{VUP@W$$5*dB3kSRucB)M?`48^~i{B~3;vE|(Le_uy z#l5)dPT)_j&jG&gWLq98N&g6#xjuJdpkX&TR6yW8_!(F=L`y2P0XiXWkys)oYEX}b zUgq>T?}GskJ|8aNT0XG9PrcvA-tQcKuXQF|qVY%m#(!vzZBZ)R@U5Frdcmb+)fffC zTCzb%A9OaMjkiF|1SxrVZmJr$wwZq%e?5w4<|1H@i9cheXPd6+*=A^Z_WF%ucjlj$ z$d$aDO|CwsZCl(=b~VRgbxeUR*1_zM($FOQgzNKTHIbkb_a@TVw)sB5R3q>KPWrA2 zJ8A{(HC2BTmYEe7KhVN)EX?`U&TLG9*~yfd&J}Lo1@NK%!vxgq8m}yAyjXwDbx~wf zi1TtzhZ>>| z8mh$?H6gy?nIx2_iDYiUHsXJcJ&5Z;`>i1|j&04onSXG5sQ@N!gGTT*=ODIw7Mr&{U&ApsE1ejO)ldU=sO)~1v_Zl{;_^4Il3AE+T$9@f?5 zJ^Q^exr;){bmx*=)ZZq-*3g|HKvC;uF{7;U#lU_%w|YM5HVwwcHAR0V(a}lRo-#2B z=-JUR+zx$2gs7JD!qA@{m-n4@A|QW??{Cpy0tO7mh0!>fy4lplOCLz>G!#DG1$!nqGYrxvbI&ruOd2!fPj|j-gOVa{wBZlft?cUZ@-(;dc#x%$Fb;s$@nL7%K ztUIn|OU#Rtp*pzAsAqpYGI!DJRs(VVB=xJo1u{0g=6eb5=#)yO1R&4RUoGsg~BqWLwm+W!x2V_bu8kP&z5h-e#=c>@%IB zx9J`Jjaf1!iuQXXnBLVHmfdV*?uv#cd>)T0n@S`+Y{CeC!jjSQnx{6tEFiPEsQ~7; z>t^Z8yeel-h(mwXm}~xuS)hy~oMK@Lll(;MT#d~K28IPvFv{yCT3CU!Knu&@MJ-zQ zRRuj*lAh``8czoLfk*|s3iO1W$=Ac&EW858Ng(mU>7+W&C(&S~Jb5+}!{cV2J}dxF zK(N2>1&sAM4D$R!%U@S5k%W!bzHTdC194U<(zU=0q%+4OQArkmi3Ii$0j$z{#tn1T zOuJ5tSU{|J7$(Q@GRf#Q-ig>8z$PS05f}<9w3@pZ8dnmbdVT-C#>b?$9ed7ew@Ga!5#&YIU*$E#V&kSMEAxI3NV=X4Gspz6cWom0n!W#nF z_8je{A~{Weos2ldO0`}>P2@)#^fBh-Li@bcyM>DB9Oe<JO9*z2OUXr~bVrD8YCVg~Vsy^l=sBj$!ffmL z`(l_qDIx99Qm30n)TYEr;j%Kw)>V~8CAv~Vu4lS`*`%wE?;>4QEMa(wvBwb~MNf4n z^X0Ob&X**U0Z(~#AW3AG6NuT4&G?4B2p5~W%9KP)$Rs6wmvM@P_BVLgEvFOC5e9Va zc%nL|TKHcZ_))y#EPsEcAAAW9#`)siF*d{xpQwk^VqBh2<>TEw^;kZ5`jji5LY!23 z`tUw~wjrK;Nv$r6e4-ziR!3L4F7*Uk1v7#A-IZP0R!e*F|pH+S+)swF8|}Otd0@J@)z5mru5~pl`D9{+CZ4e8D5HClKHp z^RlToPw%V$@z_lHdt1AE_qObO2vGNSpWOQbrplSX`y2Zkd(eGF0`rOP{r$~{U+qKL zdRY|q>BBF#p4^w6F>k)Sw>y@icgE^Uflr@&xxaN!m(>uyP?-DGhFM$Z)fZoW`PEl;{$&$iJbC!# z{ytR8FJ@-IU+g~JMU;eu`};WeG{JU%%wOI6 zVq@=124wsAl_ErY0DqoOES7zxpns(cSBueEiJkxIE46qW+4)Y;EZ!JFO<;Vz#Jo>`%V@ z^5KTv!gf-g>^yjYGq|YgD>GVHoG&#=es`9?EAi>xlP@0PDwkl60grY!;C}`#tqdc} z?iZU6zI?!>A)o1|dk=OWz$&P_>p4C6^1(f%31^i$>(rKlr+ZruzuJU?tCV9sb^q!Yf=WIa`XVJlMiryC|nM zZN$CZ&HMMD1E-41tB>(1FSM6d&yEZ0sTCoG&I<7Zn5CR}1ik?!7*B_VuYV zQQQ|KZ^wrZ_a8phh*sx+lPNX7|J7FyzktUU`SGv%jGaYjzhs(Ohv z@bQ=2OFKzVcfQ>C0`NbdEzAEoFKpSJ{U>`g|FeRNKBWyr_@rmg?p9S`XKxFs>{xME z1ZMB)1FXbI21Fdm;mP^vtS)o?j93Xv9?di0eCFls9X;H7q{o_s}|X#Q(um*VN({tlk#)o7I0CHH3k{u5aE z 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%0A=w5FJ5u9SkoQMZo;Nf zoduNwLg3K^&n5ff)Ehp*=QlE!XoX;0ixR%>c37Y^_oJj0xuZ^8mWwu4H6A{ye50D% zYT>t9xUF1ko-<~_HrS(V+g@tlf5sd7?jE^#`7foc zh(1M?K>jZmGki3}kA;-Pb{CDx9zs~B`tp-bwSrDXm^Cyi*IBY^BYIN+hxITNl*^Y8 z;B6>0K>4sW9IeN7v56;K3q>CYwQQaL&}!T|@8QxWc*4SRM)*)0kH3c!rAB>uVmEt+ zk5>KNp0}70FtxUNf7gL8zS{NUMK`Ovj~Bp1#%sT-;*q#8YX)H4ZmLJw7Qw0a+4f$u zED{)#-s-dVYSON{?0w|j?;^jn?jo5zg-+`aehbON(>IV5>&Ci)Bpz*}fa(P<5Iul_ zE6pH4tk(e0mLD*N=Bs?nma9l`9TNa$x{sje{8;pWkKdnSFz34i*1O= z+S9&WunpN*%pw9}i8Z<(d6J$!8ge9rJX+#k^6Sf^zw93$CN1l4ZiXdRaKS|F6U8ci z7rBCPDxY$OUO0MBR$~uq_~j;y;z!H&;#s%-C|stQ__s2hPQA49;TM;U&osjC$LgNw zw%NGNyW@=3f8-b2*6!pX)XKe->}#>+vM&x^cp?S*&#;(4Oon7og=6ZduLOs@{^S$LM!i&*dH^ z$Cq-+ceP8dqXB)1HKfZn;3dw5o5GO}F4eGzMii>$R!}{y^p+1xmUxTVykmS=wMdmc zEg@^Tf0tSjPJWq9D6Dge!Xd@(V~6M06(?*)^Z_S@Dk!&M@C4~=7LLGt<9%5eUsOh_ zFIG)PWnbCd^pb^Z9diRnMSNu~dBtsG9=&c^KZoUGI)&aX>ehE4yTOYd+dwDt?X zbhc2FXQrtt5FyE^>;eM4MGJ9Ri??c&!m6RtW}cLI&Nxi=t}Y_bo(h-DKrz1P= zfAolk6sz0#l_ ziTBcXD9Cjbk)T?7h(z}n#u{pqFvE>-V{QqkNO5*i?e8bY>Vi&6(mlf@k31i3@=01| zGCyfgTHxib6JM@4wj)SKPY($`>wxVwe+WSx~u@_r5 z^2J?S!z($8h~Ej(TQ((&#+$0YdksiG6K zuk26s4MvCy%i(6WcZLIcK7lzN>)@XOc*8^>w%32|J){p^XEi_x-fYF%K>i4hlNqzZ^7ZJQlq5&W4f?_R+WPC*8Bbi-NZA4?;Hi)K* z9{|zvY0>hCwqs;9VLBX9YZ+AQAQVA+hhyPrN7B0H`$n~T$-few+f#Hn1lO{7j?i=f z&+RB$*ZdH8UY(}R&{R#B4u!E=2G8t`NhPYQ1mFwvYeSfZ=x7B|JeUG$oY@yrk!LRzkF4!^fwF=oS)D zAKD`7LtjM2r9fC6OIUr_D6Hl~A;xt;oV%-VYCy7tQT2PP_Rnw<_cIoTWsSy0_)=hU zA##-Hw83DOKuDu_ZFOZ#&wsq_s_CFD1J>_I8~LyChSjCqb{d4ok&Vth=7HV-a+5Uf zM*q!C3w;80io*$J*pBNJ@wT>N;a^~!Q)KK3-8hK-3E9Qi{7h!9jQ-R;Tjnmx4gA)4 zv829EvTJEEUPV6+JW;}adM03Rfg=`cdhGa)M!K6YAbboV>+G6v6MrvwfSW@nFqWkV z;Pp}6y%N~=%ABqUOly9d1@ac+^^q(B_VHfV>Ge_9?k&1n_G1Uc<}X#+f1MOHsq6b6 zrfzV`FmI~(9yl)@?}0mo{R>`r8Ox!rI4oq!o1GA0MY21Es`jta>c#a$?(oD=>S4U^TX4 z6zTM?eU5t2rGHQHRfyijqPRn?+ufAMoDCwY@my>{`3@bNUbJI__FJ?g%q@H49ru0+ z-g`R(SYqQsL=ZEpcwo;Oy9DE~L;&FP%wb-!o!7q6Hu-NmQ0}J3dka7cJuGxU$*3M! z>%~Pk4%mCSVFLzPYs1T{9`39HkG{+X&`a#p6~Xt4p?`(5<1(~cxJmt+S`X>;s5Szp z7U}f*)B)9ubO|_)bd`Fb4(VoRF46%&E2Mj)YmtmM$~2rPEG<=8U$s3rIu`%=@i6(} z_4B94M=zegYTrDn*ut?O1_c+pu~;xN=(J2CigB@(3ct^lR0H={lcJ#@ z^5yC%JUN%bU_x#cvnWHGl_Uy?e^qE=l6n{7Nyl*=Tt$mZNEYL>ABC{Roc~WKP_yeoF#jRMedKci z9#CEPjV>{sMSgMdR~#UsO-yaWJ@#%~A%73r{LN^y@Z0!L$$}>%N>n$yH3zL2&;uG| zFIm)9TyVv|nejGm-`h^bSZiSqI?`t_-g(K6+`+y3{!U#nxK?NGiu>=rPvm9KM5}S3 z4xPMkL zrjmOJ%qJm@t2zn7c8s0pWtP5aql9w)8%fF&JCs-?Wr<3wwj}!vWFCpVL|!_8lXUgD z%vwfo@)|TpV7RNSDREFk0~9xcqnR%rR9HTdN4`9bpHhkH}um$4gcB>M*kcj=V- zbk$CE00ojs!)MMXeFX8HvcVgC!n7#nLb{pE%&4QO5M^kGgC$hPh(cjVdlVR57XrfQ z4OS4cP>ENB^UEu;Sd_&eGh%A2bPHxJwSSa?Iu8>V%;fRaPdVY&cS^SoL ze-;w(+a=3d>O}eD&y*-1*3YR^!kHb!7G45?I+%=#;!TpyoYtt@tJna_`_BtqfOxuL zj_$@ScWtc#C8{My*w!EFn}1s2wJj)aI97Y+_6{w-IYw^6Ahu^S)jLAasVZGUJ!y~Hj+g0$Au zlrFuZUB^)4JwRMa+%#vD)%NTP1Dl0QE zd>0c83r_5im?J+-ONaDy93SbMMi7GxZXC1H*;xgwYFF+0Z2{DxO`7C+<;@FY8CYGS{Z(x_w_Gn_GL*TD4@6?%f zFG&Z3Y&uhQP3~HAC@3$0poMB3C3F9d|3g^0f}R#S_=p=!XQ}8TD_PL~z3gJ4xb4R^j?IeSs&=i;mb6*jpEb$OCBBM7h<~&wt!mp@!kCo&N}~lXD5Gnn zgV{VCQABj>-G7Vz%mZ0qppvRAhYPQ!*&x5j#o7b8S;n8}32NiBi+5vgRCJY{;*p=7 zg0dT2r1KF5ZU$M#+;l>ns#W}i*rU4aOHqnNz#FsTqNd`)tcdSq1f>WerK1VZz1IxH z)92UUwSTefy^zS z9UB9IE$l$jyEhgmLuD+-<7BJ$Ois4AH!im)xt!4M{1VOOL^0u9ayejvIu^;tlLzQ) z(|_n=Us?8YNIJ4+{vv$JH(;bK#^KEfMOZan2j#F`Ap zDeh|t0Y)c4EGf+f{-Qqf%8T#xTL2#2Sa{^cZKm z{If^X-lZQs579lSv16+Kw0R~%QoWqmi+WX* z`R~9NN3^t4gG_0aXJXY)?`y#*F-<*xMfy~e4|B*~l%Uw;?xI1=Md?HUN&n$A{Yh@3 zC&j4Yq$1_dU!gXADd(`d4uD(X9Nrncc2d8c#_3Ic1&JU-IBs<=w}0xrMgLgkFF8t| zO*KJpJH9G2aWvCn)Ky-Nb!(Ad!x+pfLG7;y>pDtSj0oFp3V#zQtz~5*7Z5I9%An=1 zV*E+THR-UpHdnmmdPfhEIPpewTlo=YuEN?|D|* zOxEz+tV5wta|YQ#US^6^W31gA4o2~7IJ@t*IJ0~<3LJ)QIOBEn*t4yXt8m@MUCK4# zke(Vcwon5PNG<(co6Sn816)=E~&z)TXi&K;u>3WQ+46Er+Xct!YM; z!ptecl#<^IQXrO532X%bBWe}DiT@T2sJ-j%8Vf?q=@hB&Xp+9oFVXTuifxm;fgn>p zn49Xcrz5A+Zhx`l%QTpY53_uFkd4yXQv{Z+nU>q`D$!XnH}nJY6nVu272_}Qb2=YS zOUP69Ov0_*LSjRggDYUtE0Fytdz+13Q8EcW3gXAcFnnUXK7iBV;5GdB*-QBE%V&5j zfx_|npqCuH?j_G&_L7&+^mZ%C*)Q4bsum!QP+ZnaWXV14i?+*b zx;iaso#Nm*qs6|!-`j?L!X7PQ{j^D@rT5xeYDkEhCY@tzvO|HuM^>x=dI+7{eALU$w?p7 zD*2YWTAnDzX}!JSlhN`&*l780YDK(CU29-A8h_=}3N@EOUJmFY1iVzv(~2)eZt$`s zyMaVd9pn(Qw$LidBl%&Nr{e;GOu+^EjBJK!iEYa~om>)V`TId}jVU*(f6UVoOMn5J zWLJw^J)@8U=1257Afu5)3B&&X!TO!nDnZC_usL-aPrv-)zpVhA>JT5KM(T~`&VUJZ)K=`xB zeV1Re-3W&1cuFTlO(l%Y!Y?XUWdtD+v>asnvr$^@JQ2Hk_z9P*|) z5zx#Ja*COM54c+fBc>_uvCFWj6K=zC0o5@8~*>a)((5J6Q~)rlb(Ncun2g^pLU*n{q*qL&Z*uXrnSke`R&(F zcYb(k)@-nq)^`){=wRpY(GNd#PD7ewjotJ9y7MHjfHl$ykhS11zR(u58=Cz;{1X0W zj+Hj>$@Z7LsI;m)6#Q2LI$W<3j|Aq$cjS8Q|Bw)Ba?F-8=4_}KYD;D7%*tBSD>R0Va( z>Sxz=jD1jzSK<+2Vn?ooW$YtxHXbwuVujA1(sXM}U_~`C(8AU_Jr>Urr<5)e12LP` z$+kUMT?z)HlZTPgI%|~|430bcG7NvJsVmzsRa4EeN}W97icl}UTWhR7&P3!s+cMx< zCLZW<1IG8zDO-4Dfl*8|$27x6n6QN=V0ckR6=i~9^G(zgb82$vcGl%4o8E3!i^opn+<} zp7I_Fv>S?M)UKO;2|S_+R9NZm3A-YJDZ;Vjpy@?-6^V=^3q*N4*qh zc#iH2harmmmp(st?s9$_CJ=IgZ|(T*tM-8d*7R6E+3wRmh5z>TPH#GdmpqrO)o_lb z?MLC#x?{flaAUJC1yto2DzD62`3+0_o9q*E5mc=$_}$iRX_ewj~n`_WQ_~ z`OrjI*a@$#3tr6euEy(bDZgS9CEAbJMwH_>Y_m$&QP^js&bL}uV0V9W8os}Bi+;&R z#=`$ZKEHz4w&-*byaVaY5jt$gUVg}Hk)!31YmF)3foqkUF1Hrv54zY|cn-PLniXsp zTET?3t-O?$ijw0G`4ZR>wFN*brOA6c|*T}7S9 zQv(0{$e}NJ4dq-udDlwqE~FG#eN%Fx`gG>RGonijy>9aA0i(Tw)HPzIM%(Z?d_~_1 z;-LR{Y*Y!D-rY}7eRI>lw!y>2iD6wpK;);3UU|=Ibxqfb#!&`CovrzdodmLgHj__mY5KQa)uXF$snB#u99w6 zmI!I6CWR9apP?ECS{lIwXc_?fb1?*fo}a8yfS$F}b?dM0y4@5SoekGH{LxuP{c~_1 z802I9r(S;^y#~-8*RP*f_!G+3p@bVT2$jy%K`q2u;ZW>O!{DkbQ16U@O%MQ!f;O!k zO$4U%VFFQc##2nkBqVEryMcfSk-R4x*fYfW$tOhlYY6rBv5s1Vv_L_ip9%(5)zGH3 z6Y{L$3>-a-8dI&C)MX?w$3iD%IR|{B%uodoHP(MR$pvZa&;4vNAM*tEBHtnY8PU8^ zE}0UyByxfUSwq@fgN4x5*UhHzLd0qo<^po&MoXcon18QZ)TJ?sryZW?QyFudOFW9Z(M_)6}%d;K~yu$Y6e>(g%DG6B)o<6-YLdY!4fC4YG0lv)eoa$G5jqp zt1AKKzmb9Z$5?lJd&k^^&2V;*69vRcR ztU$ylY)6gP_Ma#F&whOI^62=dUy>hQyi5*W?*Df5{Kw?S!{>)D_n#%NpC25(JbZe5 zc#!<~a{t$#Uae8fjg92E80S}cl_o#$|FVCukKwsq0qdKKFTd>{!T#L-_M2~w{(gTo zBbJTX3#XFFVbsAcmTe%Tm_rIJ2yiu?jxvZ?$63-z8UU1=2ynR`9_Q+dQL_tS>nQgk z3Apt8t67PE=>Uf=!9onWo(V}O7Es~v#4zB;WAnQyOv8bwIu6v5qBPf&gR*K$T)jeB zm2()iqP`QgM^9zcJkGmd9w1#~ioJj2#0p@#R%J656xYI`OP^!7!4l8UNtO*kteel| zTF!wE#W_cQPaJ6;y;fMf07~L71IC4h%_&|u=AHT;i*u^S+T|u@^h!+o>VLKhthEaU z2z3@W)Gi!UG1QM-{hFQ(0tvT`gm83>g^9DOKuVDXl{si=u`mLnw<5@IP@;eGituvN zE{d)fjH0Vy^^C@DAlm$LQj{5I-#~>&hP9M}>UVp|4oDZO;AH3239kBQ5*tS~8RgKl&@oLw>et2rlK@))*m+?BCCXw@6GIz}8gJI+0uPbVuWZ2v|rAfQ1l6PO6 zoZcGWTL+VGv&o&qTOWR2A~9yrkNx_7&M}W|t1asv7Yec_Y7Bh9IK-Cj#tIpG5C9^!osMquq(t8y{TW>0(IhyrKbni(}U>g z?i2!R*ebP;@KP<~Vs1@B6$BeksvI0mkrq9b$JCGRgS~$$B7I+M)T(uJrWg=xvKt%5 z!Y*9|c&E>Qm1wI!YeTc*mwA*~<`GVr+nh3Y*(6Fkr20oW>*8Y~(o`SpE=9K~DvAk#_4u|X@P4Wqb zW=ool%s@)35ne!fhoxX8EviCA>QtUog(l4#G-e6BV*UlmNrn{L3Ti<9V#p+bHWj=; zDJr@JB?}z3M>AY4i=i(#)!^5~Dr`rI?hY0|h$w$I+<_i<0*nL;TwbC|7CVk$b{Bs3 zZ_lA%7cI%4z^~(x%R6|n;@o39$~D5h)Uzr{0`dOZ@WOWdDp7QGr`g%aZO0zvZ}_VC z4RM~g;Ghq8D3E4FaGkWuA?zsyoQMfg5QX0(vD%JW1O3>S9E zQz?J#*`E(&gM|a>Pz!(NB*y&4$#LakVRtJQ2rwmH9TKK6#aDlb^mdvkCC$_dtL@e;5LcbQ2~(g%#tpYDbH`WMik{@QQzA zVKc6mp}m)WO7MNx!}L@*TeK46I_8r;W$zReHwU3{ z9JDr9P{uV6X`sAb!d@ON1S=fQ!DFxh|G=9tM&A%d-!SFjsKlQxCSyB>X0ajW>SN!b z?_6k=+nUC?rvPm)L6*vsrL9QTqTU+;`9ZMa8xNqDs5sQ@?{+g{1k39)?XQ6(Y)9XA z#Y~H&ngva-`YNL4!xco$bn<^Tttd!IMgEaO>U^Hfu8Z;wi<*Hkmdnm6>pEAIIiJVPmX$Ni~1<-E%xOZ$_=bvQLXie~^wJ%zSQO4pTIOhE%i@~nvpTMUmv(OiM-!-C(2r7# ze}{jpjA$8o=Z`^ki7|S5iP*Yq_avoO;yNEvj%ZAY%_ChF^=gK-$cK0Ov)Ocab2FRt zuk$zgG#ln=zbG#^;je$q!+*?kxCJWH(V0Dxz`ALeFz~^ZsEz5KX}U;Mn7;esqRM8F zM*Aug#34>d!Whk6uLmqKTmWo8lBg!`2$*|fjr zrFCuh5KOCIiKZ1gv+`ge6ehToF{?3}UsfRCl&V(A7IZvg0xYKpYA`C)g`R{xtF z=X}|=_K|j$WH(8nF>S+7TUCM@JP@HpCjTYGLh$d~5=uJk!0rA+p{m1gTYa^2eF|p? zEKpWLm72iz)e@%ImD^kEEDTwd2SpXGtcd*fvlXfRfZ~4}{`(3`9Ki8opzZ*-igCLK zC>7V8{&7CZEte$-Mu3>n;0*)>x)>GLIO~7RvkJXiH@9~lJ$kggvw2lqZ_J7f2)VYA zZeX;nY`6geJucBkG1&ktF_M;DF@*OLfio@yqa|2S$x5UPGB83MkiNwom}0alSP!O zjPLTWt)&}Lc&*99sDN6pQA$wY{{&(M*ZF!&{`&B%t)L!kc0mBHd=d?GbH#ceD%;e> zw~al>wqfWVWDS;n6Vy@LLvUj{&`rn)&%o4*W`chf+iz$4>z%K^{l?yYla1nSI@-u- z%RO3g&v7{1$d0qO+naPcO-0TAqenYC-+cLv>049W$UP;dgcZ$Fc&bOy*-4g?=ea&z zxN@51<)1%v)s7Lpu_fv!41POkl0-q-XB6SF>#D)fMP< z=ZlYHxsHrmU=8zov?rRXeh`c~#s?3Q|FZFG_#J>1!GQ3+jTPHw82WyTxL%n*DUyS+C5Z_ zG0Dh=ZtW1`ve06$=f<9a2wk7)=yUk#xOt!_hwFFoGqAQUQ z#%W-nYk)2M;Kgw=5}bUVqHTOuh$jF2>cw+TrAE%c$uXG8DYqKKsFHu#HHZ||tlCYA z2}fd}*Kc50SD(;li@*>ptH)BNKiD;GrI%$oy?UGfjyGt-Vz8M{E{aWPgl5zjFtG>9 z{CqxxNaGC6f&@d)CbLbbR~bO075NorWx6HYz`tX_oq@D8L3oU}jY**|Gu2b*^6UcAOX7sBKnVEo}AtiirZI5^kem)n~h@oQy>>HsV+=j?hy%cmJ!a8-~czu&C1gQ!#dn-26-z)lv?xz*V zrocF#zc@HN+dn>jdG^cxufIaXKAAwT11VxKd%!OJ-ltRox{!ZztH@H$v_i$0UZkN8 ze1W%TsuVKE$U@nUGr06Ae-b6Pz`s@A7#SG3bCHimsynY1SK>hUPz6&-TLbnAKVu#N zm^wW8(ZdwGj*~-h*TW?)nAeW5AX@VvY0Qs#U1vfxnP5^6cnOSN@J#kFh~pPOA3i_+ z+pmXenV!FX_H2Jw#uhm^e0KE9(edHS-DI1-936=IM?W0FCsvbRKmYmpi{GB_CJ#T8 z0vgd1@euHt9A=|@4Dp&O?pFbRrRn2c$BfqBxwZd1vHv`^|9ou!xo7{`Q-9Lm8{gaI z8yg+{$U(hvpbgaNpk_Xpmx9&J@S`A%>@yiDObQxiCHjAg-V;{sfe(+CXK3Q3t!5uq5u3oms|z!1W}Y)YayXugysT!%DAX%(IRWD+F~(X6 zc2tzvkj@^yrxnxeCr8v{28YRo1xd6bSc1j}LWJ$n02C{m&)^J7Am;EwCJhxx8OWC{ z2HV3?E6;!X+?M$O*P_opjA(z>-7=V+JNpTq6#rtAr-0e!+#fs$&K%1Ev;Vcs-sai$ zG8j;&q&#c~&qc%V*ciMTA~$sh29C*r!5za3zU!+@45Caf^SAaM5l9+MuLOsk<%2}9 zK4fe8AS@6JoUuQlv~#xt%sxPQZZzKHO;u)>*^Pf$Dp0z4l5YIIzwv*aZEbwp-~H3+ z=3{fpHn8r%nYIV84{sDjHGk^AWN^_3T$4ix0THnba!$l1|FS16MVB=E`P{*SUENy0 zF$|%b_L6f&VDJtn)dF~Gyr*FK8LFJ?8rqWrG;2Y`=cf3MmHSs|_2PP>o=8E>bz8_! zPvCzexImxNZ>HF8{=7A@o%&dPCH8tsvI-0)ov75!*W@@Ns2vhC|cc~n$ov%kQ|AgDFuhwDSu zt%vK6u~0B^qnTKf-Q?Xs9JaT&0V!B6s%U=^-VHeVWZ#`)fydoOMLDG`6hMn!jm$dA z-(<-ei5@DAA&UQc|+n1nPPNm+;^j^^EklNNt&@C3iD=I8ivT|vP=f%;DHw^Nj^K!w&)E?2?R zQ+7(AA*zMyNP)ypd-TzwSt#hkdpa}PGC`+27-j{z$PCRWve>hnaCRfcEF9` zF{Ru(yza<_43ZBOOGkL9w>rEXUn3!^Wv^IEzX(gd!*y^UC&_4i{d|a)9o>HvV#MS_ zd(Y^_v+6xIs!+C%=((WJFNS4bc<^>g@#&}$Ttjzk41Ktp@X%!^CeOeX>YL=qoeV}` zQQ?<4#{N)sxU)VKi5}_vH9z(e1Gu}b<@$OkUl=!w19sQn$>rL5?n+d z^&BVU?${@3DfwqYzNz9DSs9pn+q$zNEQ5hg9vX^h3MbSpPBbE|hv|U~MkYzXIK_cn z^b&gHZxXukG*@wS%zcfG_zR@<7R}{fm=snHTwTM(NW)*&rD=oc(g&o!{PUj)K&_z? zQzw9SVG{rE%gGv~*jx1`pC)ik39^Hj^E4eW0$G+AAOr1){|S8YAOAD6{+d{Sl^yGVM2Lcl z(sQvZwfi>PA1o1LSXjIvubvj;F`c0lal^Rr#&Hj*+&Bez5PyH_I43BIE~KMnZ}Vba zVFD@~n>Gxn2J*2qSr|6V*WmKv&M-r)n-~fd2y8il=QlP&@;lyF1)5J{fE}>>)ZtGk zj*xNz&g3(S=?XVpJteNd%(5YWcJOE|{^!sS1U9B$#bDeg-{wNPQ%bBwG;dB_Im=qU zP3+OO0&#(}u1J3d!8x>^fjfRLix#-I|Tfma>0A+CR~E=ZJmhsT(!(&^#oD;5li z#!8+T;EqcYs1w7pz(MlBCPOXn>HC?J!H!|ZXgOGUQVrA_2OH7$Un@^-+u{B0$nP-l z)kZ2L&wMBdCcl7KmR*W{1I9J7<*&;Y$1e_E>?Y%)!~<=Riwy?%vOFygnX^fagc>Iw zyMeDj!Zr^&0kpH*Sy%J+4bXZ=Y;>322?QH|@j2)Z@?K)qaKY2cIVcE|p1w$JOP9LC}p7ITm} z|1mF2-ImvV&A^MjJpSp*zpt5`bS-vL3BXO{5E%x~N}gOvRt?~#xi7=j9qe&ZlasK2 zMkgbKy;@9W=?#Sj>l_mMW|XeMtt%$G?|5+S-tM-VRWZ(l3@3V=Pu@)6ZF*kOY2Hh& z%L3wADrSw3jd943r?x0-bOgSFw~UCM7!u$4dbT=>nuV-a#xOuhnu1s=sN;bcZZW0J z&`Ta}L2zcke&Du|J(@@dq;ER^fUk;wTbh#TvtsD5q}r1?9Y6AgFil9SSNim(8?|)A zZZu&1zb;B`>@?U4JKDJB6K-e=G-g-!db9Nb92)7@njWzNZa?EAxAVp^BND)x&BIXh zW)~=@f1;>V8>C!JpBG&!M4OLLp(i!wdn1V z;uFS3ifmEtL*GJMmmv0k#e%weu;2#vx4k_LVa(Xb_BFefxnzwxsf+6vRAd0weiQPe zl!J7`(0b|x4GTici$cZ-e0ivj@3)qW5FMsy6qpbyu0CUo;Oy4L9TSJ;fnXHlv9af! z_eKrAL~@UQqlO%XF9w9fGhaaSId_eeRwt*eDybQqBS=uKBqt?*4OzH-94Rvq>6Te5 z4|8;vIi@(|`vj96m^8$?4Fj_8?d_uA{k>C%ZjgfHveicco|h&>69_866~a+p?N?V+fmnAT4`yawiL$LeL=*u zfa8A{9ih`9GqYzPbMi(aI0np+sH!;$ZRjv}YuqV@#72%;(s?Pde2`i?FUjGBeBX5Z zMj+5VMLIS5QzjjE)wI~j{X)C&CnxxfZ*Oh8zqPfs)}xq+dsQ(K3S_+=rChjb4obq4 zp+hk?4gJaAI42SA&&VMNTIg>ybe&p4^1XjiwVEVJGWFD~o{1=$t|3oX%HQj>8PDNA z=AeS+mvDzyKbinnc`t~e$0*I1p?cnSS1%^mF;(DCKAAvcj`ehfvZ1xaDo{z!!D^_5 z_5cd1U#Bh9uP3Z{owiiGjPB%HA3kiuo}ktR8oz13nU(N*UhMNRK81x`9`BFhTdOfpS=+WQ*&h#0M^H$8gedAhiwI<~FqUPc)>EaVaD3*`w zI_sg^xTm5qgyy0E1L*~-h>);6AJ4}eF(y3qnSAi)g>MzDpP3CEZRgg<22DW#?CHi1 zE}&F;qkp%jt0jM?q3==+acWkxvI~Ft8NNnT^!xpeKkdVtY%oW%&~Hd5#PHL>mDnSB ziK5ep4dvhtdR;&)rgY)RQk3BDpUD@uRJ>hZyki&3?uDE+@$n)CbSTEN(*eEsS zkAQ!fZpz~bupG$??AEPjvdlchP~;-G)6kRfreL&kW)Qpnq34P6K_Neg1jeKuDpI}Q zuCj@&M&HS(G0rQvIl?Dc3uT%h$x6PvGTtV_;Q`Ms(Jk8wrI2(=%*KKsq-+Bf;ME~i z*`*r%`Y`nH&~vn}tha~BKKg&mX(Kw{G@xzA9E%M^J{@Ef?)XMIYAQ5r3-}xxPweS&hqlt7|yF z@Oyhj-|8(Wwt>&a(?#gajC;O!i?B>Tra7oF5xDWez- z|6W9)h8uDel?WZmf0tnr1Q=IZzA=(QkOK2bV%smIMZdi+{8Ij_-lX{bIFl=tjK++=Gc=!jz~|Wp)?&gMusXi8R_*ixpZXTc%P9j17}(Q z#3$}Y02{FiUnhWfA8mDN062d?U#b^k6sIMqrUlS5dOi- zL0M)R9fLG;h__P?%^b=%emy_hl}R%S0!6y5DDVw+EbsBr()@pC2-MXP+M-H0Xqa|P zhqOcE?)6sHu~t946+`HgW=xyNO|+Q_jcGC0JwzLmf-8sUWgncp{}mkbd^C5E z`c=8VRP!l5JOFQLuzYgZ(@hFN%Ev;NEsx>^U5v8MdK?V8vTNb2GtA2lo-Z9-#H%bF zc9JfcoN-mxKMQ~2Pi&|L?4gldS8stiY!SzsLCrC&HLoz3U#$gocnbXU%L7zb&Cgw` zgMaSEHTSt}^4MyjnWganT!Dy-QhL_PVxcYfdYtl`Bl^)rjU1$N2LPj?dw@O$7Af$D zxw-XU*6qM57-&8JTh}67M~mh_NmzXs} zrd`!WOS+pfV(MoqQ*K|%Z-yxM*eKT0p{St$@Y3TxY8|GvArR+}+4L&!Uc!GN7;8^r zNRWm50^f9}k+;+CH;pfeOO`ne1K#8+EA!b?vd`d4D!Fd*U}nM9uuP>%d=+eY} zbEmZVtTtA+W{GPv)QZU=la8V>f@`QQ&zX>P4dd_&8H)&J+*%~#MW|Cx4Fr0@#)c6I zYM*rSVdqqq3jS>u0&h2pDaf&1MTl&=!VL0X&Fp^)T8uC%>W_A1RA`KP__xy`25Aj} zvR78flWv7RwzVZpO)pqmz!&EhfCsVk08__v=4(kNJS`M^a2$XGmjDG5R8`Sdw&I9? zqnyuyA)7s5j%e(`?$HIWf8WKLysY`}nTH4tSS!v)xh?DsvB$4Leaw(ySWkBl+Mvb( zm+61A?e?=c?LW5zS9z9F)~0RRXC0dw8?+C#HSM$NY!|w8t8`?WZmF_Clvoe{wyWG2 z#W!}*!YEqUMaG8E8h?G?b>!t#sNWEACLDSxM-}i0#Tud0R_sS6AqPXM zU||=SzhKRwX!~mU*!urxFiNW`IRe`e zTk($}stSD`73r`_(6B^S&o@~%#hars$NSZnLu*&UlnI^3(M#6O&a!{% z7aZMM&)_hEq3ZC{>ni^A87W0iaa?uCQu==V774^2jcl zRf960&QLPJTEN?k&wY*}evawp!{7h;Px+qTC>Kh~MSeM#E$MkaFoQKj!5Rk4R@K+d zrq|+du$qN2EoW}De3LEAztDOPay#KTF)G-VNFhw&;|Ou93{bj@M__;D1`La02dW=oEa>IWe6~? zR&XS@RPVTWCO9AAK|p#jA)tQ*LtpAED4WJ#%)vC}IkW7Farb05_{FtnpvZZ2xV;T( zX|k~ad2lChs$@7VCWEWbow^wA#DLaE8I>|{`;g(^uo%qoHSKvZT=diFG@A^cUge{q z1;;U&aA$#z?2nY<@HZ%G1aL(%cM!r)SQY|d51*bKwHW^GXU+#>Gn{{jH92+0VHtsx z0U-&H@vK~oOmewTI#v!ENYIcE`6A6n8HCcq)42!h5A=Obo0dovLMzP&gRH79=A+R9 zYeH=PnR12^L`gs}!XNIEIY!*Um}<~jN**E*7`iH`Yj7;f{xJvFz%s)GU==%^a2wN4 z#vN2W63!*^TqMxEo%w&kxXT4fBrr7xbjuxmhb`@{IPGaQhhC&le>F>fq@FVYjPkHUNit42lH#GV+<7N8vmhq;q^xO|e!6@*K8rK~nx0ip!BFuwwGPJi`dYR^v!0?cI`{6?l)&;+I*L`*zSpQe-62&>bnB=V) z8+%Lzs~*heDR8-KK*F1R@TMYfUQu1Hc;Pe2c1vEBknKYC+Wt@wx>1>4|CZ0L5CctT zLYQa0R6sPds(7)Pkxzw?WpZ*B&yW@bC&1{KZ^h_`?YV!OGxV-E7@y|RgUFN*!`s5D z5`gQU*)7ox>wK4E7r2>8Zc7|i+%z@LraAdk$$h5IWMBXo-l}QwFLm+ChZLa1KbM9z zXV6ak5IW}5_L6rfjYwt2K|X|{h!#8OI5LC*tTg1NNnj9E0g=EXF~u{NHZZ`MZn3UB z!t}S$5hH(}Lg1MZ-~(tG7(+C7gL{Q|6`fA!iZjungnLsgb(!X{EpwBFku}8>%sd`+ zDb5(=#LY(xoeLg=q$7c2Bu=E9CMHa~I>y0wA}m}CDR?T$Mn13b>jzo=^5_G>w~}&i z5Oeo)I_L6So<~pQV?+2fMyN%x^M!p{k#Jpu#}>Dl7&44;~pd_>O6 zQD8JL_4bc#INr7bQt)s+b;A^~VFQh%(#*p~#gjFTOt1#ZoUTVU&_36qCvQ%D&zAai zdt2&eayYphx?Y?#k>lg^>|!8sC#;C0wJ;2;*_2VRF!8Jw1) z@QHu;!C&}wtM~{^;5o){kOgoT#07^K)Is&gO`un^4HR)BEHYXNa0i)^!bOFrBS9jZ zGl~JTZvnx+#X zWnEl_DK{-G+C7B0#1n920_q*)|NH+)z+cr)M@Kc^iM*w5v!LE5^-G4h1@j1#Al|1|NVa`uWbUCP6P364uKxBw*~eV zr*0P@)J_)o_DL`X2u{u;5(?@dPm@B>CspF!fC|%cR8;k3?)EdCgY)`Olf3S81QaTV z;`9=y^yftap_u0x!NmFkiW)wGyexm`)1sE@1sJhOrbU&*okb?81RGX0gzvPYwUn)V z(yz`AU9zq;Ss%=21B<99BcG^$%m4m+ewj@yvVMiUIM0%|S$UoReF#aOZMr_r%K4>7 z*3XHp2ztphNKM$!fPc8f24O#^%wpDn4AREtPO(SYKaX<32d7CU2xOFHmqLGhKL_bV zNbT@xl4tYljQJnf2ZXEY#4vs>rMVW^Ija_}eqdb<7@T(ds@ z{{c`-0|XQR000O8a;F?e^)Ri2JOBa!|IG*h4*(nhWNCABFLr5jE^TRUE^2dCR0#kB zm#^SenXlkgb$AN^0R-p+000E&0{{TjJ8O5_HnQLMSJ3QUm$WEalI?$NN}17hoTSa! zByMXr_k-j1P$Dd$p$J_9wByS9?>hs4AV^V3+wIIP{qz`$rq_e=87VMsrqCZVINs&&O zWc0U0P?kFxofb*)5bA$k|9wXaj_~8~X*iIOG!evsf1|97V^QIQTsp#L|--n4r30W~e)YSOlo7d+r-(7#c?2n{k*d@u+2I04_ zuR1BR6@XY-%vuxyzp248d2pu0NhucvotDDrKwzlgqkE#Y5C7(toH&R$6YhBLw#;WZ zBAy6{zjoR5R|4=j77r`JZXNPz#R|dq_qSS>EG;uKQJ+xb#l-U?x1w1ir{tFAWPe|M z!(^FGRMES>0lt6HF1{1}4Z(XPZBdmro>)*G81emeK}1>PPOXr?uF4Man7^jC9=&Ea zzDC4yCHMF)DV#h;P`uW#XuSz&8nGZ_NlMaaZ@3xjt^&Kxk}UJ`ib9YFb(#23QQhLb zLEW%HHZ)!vLL^+qVEAwrQ~0}zT{j@!0F=A7$0eZtnuLF)pjk}4p%0iZF5c?uKV&r# z$t4j`eOguDQ*w{k0|fj~l9E8}8?1a=B&)?yij9)iT-Vp<$&wUF1n?6-cttZo3amWw zgYOy5#VEzvv92A-+L0ezW;9iZAj+j6t9RvcssK;@4bZ=$OOnA*Bg0yN5ejfD>!Lzf zgW%*R&2gfEBo;y(YrfaSgr4X&L<4RBnu1$$yR^Yr977OCQi; z_zgKYSP&$*BOMk%pFlr9D~jX+CWri@lZyr9=uS@VotH%c%w5^y+(X*vtTcaD2hw@M zF(U)|kXa_&kuk)nM0b57IEzPPwyiG%eT{CG%IqfK@nFnPMTN;L%M{=#{AQfDO;Df- z$aQfO=kUjvfHX|-f{@j=8DvariD0J2QRmb+YE6x!8;loCGcwzZSKzU>DLGh)I5`sz zFISiYf&r%wkPlY^TE^pGJidQzJZ>4Uuw>&mK?250YU3r9@fKjbM2cFp?YHoK0JG}_ z%qaYe%Pa)mawb>-s$a;d=NnT{iRj@6(pEp9yShwBSSuy*10)~p4TIc|Fctu+Vr#_- ztmbkpo9GCDut>5)-^G0`Kqyj-J48B(n4br^6F~ zCQ+Y{1VqYn<~1!?S9xRw5m>Df+B!?x-{14-cJ6=Mu?}MZaF(!(#B-g* z(Ukl#hoyN2ruEmegcEnlSVofEjb!b4Rnt=FI_A8xUGG5@@;hD8xT*>^ze}=`KxFWB zC(T-Qy3`fj$t2kd6%%MT(g}D)&^J~B?GQt!;JZ?I3(uBChBM0F%AH&%)fRSh6HsB- z+khaSn7&%p{Ca-~ejYJs4F!`e{&;I>&XXJivGyNFC94jmsW@hC5B5|<;P?TVp6dvv z8l-Wwp_CT8O~t-sBli1@Q_=aNEtr>2Y$HVCKco2T%ZtCpNdycK5YtNSwtz4Lx!vJU zdq|U1WXarO@>iL#GMl#I+2!}2wW50{#c_M0=lX~4=L~;Yqt^apI<@xEmTBZkKv6~V zBHn2!L$qNf0}TxSLUP^wRTisE8YdFigP7f_HcP#YC6j8!n7CMSqsDOPFg>Z`cgGRZ z#02b)!;^oB3C!&s-bCe(tzM|sM2BlvWfM>^M^vO{W>y#pH3HUWHKgWkmP~-*^@H4| zyAe^V?dstyPgSzgwcghY`Zc65kXf*LUxV96s&WcEc{e9d8b%-wH9T6RYr+HxL%IO_ zabfSnNky2}gr&$Z&}UQ5vQm&YPcvy;Q09%PjokLqw50mhkJ23|jE9nH929bvd0r(kA3QpwZ1uKPTooZHuV9y{=HGOrJ0RH&$ z4!raY(NnFkf24NLltIgO`BH_(pA_TaWZ1r50!`h**2b9Bq zS*Z@Z|1-Thcw4HaWQS_2f*|mPS_B)OEFK>{5#NIt>^_uO$fwz1(gw%?GeFG0D_G@K z?{N`-kCi*(qL>u$_e&h);!4JKb|!mGVDZ#NAkT~0%Zy+mC#_)v{Gi&+k}zi}!IgM_ z|0r%$p^rSr2YkFO@dG*KV0wNpVLKNd*tCt+Ein$7bwdDAswUUC4q);k4EE`!941_^ zk}W7J^ntmsrt*e_q%EzRQ z-Q?+Sq_y$>J;WRN=mace=e`q2c2}PuC+^^lBjQn0BFJCd+XWQ+;jhXlgiK;c$J|R7K%oHIM?5)MG7ne1g_Y3q$WwP=*(p2LakQ%|pHm=q8(Ch)4JV0~%8(SD`ZwQlD=Kt=0@;&ac zdAwdkdAJC86h1x3Lmu2k>P8vT!eKBB2P1&qfn|ysvw<)=!EUfJC<1qzAORjgUP)I# zj{?XRKqOe$EgWe<3x^g6^6RO2cM*wT$_jkek^~DnUu5{iEV2<624NE{aBA#o-RL9c zZt`LW`5K{%ywzHh-vl(QabU=Q>q>Peff%wQw#tHOv7IV3GWio)S3m>JwT1<@R5f@L zd5w-Jo2fRXG~oSx(TQUTZ#7qH?CRdo&TpxQ29>H|!Bz|FEtL?Y)KSP%6)d*YK#-K7 z)n<#YnvCeJE=`deR}pHeUB2InG~zHGoty+jeW?75)tonTLT{Lst$ zkfk0TJsH6Kla<3fNaK8Lm?Xet0ZdYT`T};A5h>bUXY03fqKaB$h+2Bz*oa(s1doUB zAq@P|^Xsjv?iZ;ID?~4Uje+lbAdKnSnBZ%`e6x`WByLlqj<~2!Pw){D$CIr_^d#1r z?naK=!)@Hg*IV8(?0G?7wZZ57ihSz2j9_u0*idWzuT1=YBP z4XBbUw|Ds4OwAT@C(~LU;{UGq3g$L1zu6^}+N#L7+)S>l2UtOW9zYCNo_m`yVEp6& z!~rim5d8uiiynBxJ|z38DkTR{&QuwzKGdt*lj6UgsQVLV5P<`LAv3VwVmvKK@=+eK zIzwnk(I46kBWPIYhRkj_(hVszP`lw68Zu~Dv>Q$|b8JZUwgPfBOGTK?2Mlwy7A(hH ztp($1cV4Y-J8rChYcp$j{Swuz=XqEJc{qpvQ{QC0&FE9PNoOim$14b%1q8l1EKTA44hC9 z3>$eo80YnYXf97$TeBD+9QhqD!09!%;AJ&aC2)tSC7h=be4_~4SlKozHSN}=TNC4T zO)Z4={AkBn9P1JvkCNqE2DT-*JY}|);Fi=&QUI!Y1G^Qi{=GLL`l3KyTg%6OI(snJ z^|ZdEHy8VV5*sa6AJ$jT=qoxQ$&+bDQi-cx)zruJR=a*%3Q<^8m!zD?I*+M;x?l@hmpN9>}F}@0eU_XHHZgwfdaq=vNd?|m%$JHw*D+GE) zFYymY82<&nJIdnvU~ZCvI8mx(3d)#xnap&cv8*sUQUX5(Su=$fnmUVJw5dO zVOtS(`t=z-aJdR#`ylm6L6;2vm$p9TvpCz|Up!0IsZ(OB6P_G+WiON2nz*)}*e3m< ze}jkAT)y$bQeiMK+cWfoq-Rjgah8+FE#$L&f1f`ymw;0OViOll)nXNCe7?V5bmAw` zF4kjz=rze=C`M%rw1Tu{PLgm)$X{s_!bT8(1dtS6Sr*=^oY2xLVoI;7j429_S9yu>bU6tNRZn%|9np zL#!RB!=54AlB>Ielxz6pK-8l3plTD@Y(MiC<~K~%<)wMLqYkn6_w`}6`a!|tBlV6t zelgJ4h19>WYO$eRKVq_ev1IiBjfTl;l|9JCAuub3zcI)Z8T|%Zn;OJwd$`y7)?D6y zX5F~v1(|v=jT)NMDD|r*VbR|CZXd6YA0G{Ito~8jym7r(-Kw=NX?r~iI}3Gjsqg3P zjKUBr>{DH5ON!=lrDcH*HG!n#eLjRdId10dy?vF3O>U)~D{+jnajmx>NJRbULF4Hf zpy`qySfjVtIu(8?DiGcRhNYN!mguQ}@s>4NuEayMHw?l+>XV%PpMNugRhhCYR7;y$2Bc<;Lro#LMI>06)TS zTLt{hBB`mZ8nZNz&m+5HBtc1k&eRhuHT^0BG=T9oo*(R@rzyxjJF&DA;bi*db|+S* zurkETc4FBhr^>N`?(8IfTdE#Vh*f>JO8lp*^U5$#j4RmA9_;p(6D^V|#|FBylQpw& zh<96sK_n#FG_o8Us2`kB?Sjt+zIi-x2JtvPqZo_ZuQp_|tevM1y#q>8|vd>=shE1FZ#TRqc> z@8potn!rQrFf886x&!lnNE-5e*_upwos-wC_-q@;5+7OR&zO8&<-tV5!IGOvb^`$u z0CTku2H4yqaz_lCfL_n6em!2xH-!bLuHD;~p5UVRhTW6m95Of0y3hN?4cxx#N0xDa zX*}6dukG8v5mE?wd@mopo69Sp6p%Ro7jIwM+%(cP`u+Y2qk=qtQY1UJvw=d##Sp?W z2{4mD0LPP3Y$X=hQpS=A0q6bg_blD5Zdrkur|x}+skryO&)!FBITFtII|HaA#*t+P zdV1en%SeZe#{W!z`te|8rS1-)Rs%Hzl4SIX+0Bnc93-u?==^*Z+%pJAY_t%Dd80I( zgce8gt$xF4t?|Wn{-bPDi`Fn3#lks!v-j@c+1cwi$7lO*-o4&)fEsbV;0wxThY<=* zffP}5q7j#q`eNV*ebwn08*?f}61_vbC~v4zfB^mgw#UPNSIj)Evf(!tMJL}A#y!C0 zSWXlH45Szc`U_VW=6=peEd&BF4j*6(rFfw$MJN;{3dgvghx&e!u`I5+hKxGM!(-b3 zJIxF3>Bj&Eq@=x@?0&$h6$Zq3d<0$hQAeJ6J)6c0>_ z|EWRoFFmDy?d|g-;g8+$K-z7V4IS&n!25?97sGCDMv_J{vU!RE#F)f?I1;3c>*(@l z)|+j8WV6b~W zNGZqj+J3n1IDUx@P@EJuGX*1aQS545{yOb1P6zkbE>Tes8X2djoL08_#J-QJ;m-++W@FI?1ea->=G}NF29yqS z#CtjD(d|^RkYWdPW%c>d3z2d^IUE|*v~Dkd_XSom$R;JZqaLI?6l5tds+!J?8~R)2 zhDx@@^#G!aKY>LqthM)o69RGccd>Ya0G+}JPD8t_;>!4`N7?0{lBKrVw7cbEu2~E<;K=VbZpYcqk&x-^BlwBprnxa!f{_Y#Fy4L=G zOp8_2BL7>_%4Y=y(hRT9KCE6Zt`)=qQPWGp*x0BS)qcnG@AQ;Sxr|fqp7y;3{tV!!@Am&X9h~+DtKR7VQ(GR~imJ37 zA7ZM_Tr85sA_FSm)@ZfgJcXA3y1(jw_gb#E=${UL+z#-1ou1xbF|XK1TM!k~?k{6e z!u<$}gC&0+ga@nYI6S_WWHD9u@*qdGSpu-k0G!WxAUGadfs1p^T4&b+|11`0aS9n2 zp*#}`z0+Gyh!sXQb93Cnm6e?LFhEj^&D?dZ_cpPm7%_5+0jLji{Z7yZ;15`T6%wjf z?Qe6ZiJhCGL`TH`{vji_d<5FlJfl&!|*~ChpK}_pF=#sv?O+fuQ@lmc`Uj-oWF3+N8H^-DvfX zl8k!KhhL7hJS47(8SWcY4f0cwR=2OLG`p~kh|jdpmR2(9N7>+U8$dkL2MRosKjId;f|$j5z8AyKko+p1M6(o*U@oO&butBXC6FOsD+8@- zsAI=m$7r%~&25tXnz4UzVREbYv_va%m+5K}<3f4gIZffTYAFSOa1ZFm4YA`r@aRZFQNkg?vUP0MeBMEq9Vw{G$*AL)=&6Fyi02ts1m9lDS}nD zDLMn+Vv=pn{w$l4;$$DlQ?!XiU}^$^ywqxu!32*qDo0@FsxfySZMS!U8jFyV-iHa` zO~MgIhB~m^ez8Q&)GJh%+DEG^q;Aw;o>``NfPe>h zh~hz~jSvRl1f;c5vttNgMulrNTLM#K=_W;0B%Cy3G%;)5#9 zvAxzPySAf$H(m=vhQ_L>aN)Y5p@+Jw%#EQ}Fm`>Jo5%939I&5#6u=r$X_+lZ_1h=uN>FyY| zaZKCDvgCVkg*&TBh~jdn=|jgTlx~jwB=|wQmhZNIfwU;l5=ZSRrR5|~vjU&$K#Pvotk1*FfxKILxU~^)dVc38s|8C{S*e?%BAinc zOA$);2I?D%lJlBtUs{Zx&GQ(^q<$V$(tBz)VdN$pVIBB`v98l=wP`J)=9y|ca>TZ4}WJH8)#GAwfZLy{tLaJen< zqm^yd?sdttKqqX6sy!m(C_DltZL36?#WG8^- zmq)+#{JBzH#;ubw_^bzfTL&P@22wIWAVI-E9}fUuNBHiWz}F3JamJ-i@Ogg9;b#zk z2F#zEx(*G@XEmues;|q-<-QPm+kIVAUvj{so{P5Wqkxc=@1qYZp)%oyw_-mJb2Rt= zijs3&j~Q-+>IZ-%Hf|kUNYi0M16N3!5~AGDpyK7xo3n>o?T+Q=i3lDvEs0P@K$nIL zMv&0eh7i0bC}Ahs5<#^TtdFFQH5Gq8(Fu*#rNs(04?FV?hKw>Nl+nogZ1llcS)|`!?Yk_vFLPBD+-)YjPNV=LW4qmvkXS0 z;WJ*~3)`()gSjBnz6qgY4PStNHW;2f;QW3-w?$6~(0n@udy&+G(${{nE0{R6rT|Fq_3952OVdtX8&*P7q;H zbGUjj%mS_c5@5egZLoq75=k>PaV+^J1`06)oR}pW=q`|L#ZYpBZ)RYBGcl8ZKfT@n z275#)lS#s{0Usj+>hD#Emkam4`;;V5#^V|TdC=Q2x5K1+nWK-iaT1=IgfT)Z61rR% zq>;4#(V@lSknRC*prA8WI)YqTaY)wI8@fLXbHVm4;EY;97@Kh!c;jjoUr8yL7few< zp{5)Y%L(VbN9Q+8dIYt9Lwr$3=0GA2kC_ZIIih2O)y3X+%F*_$^BdxmGdl@bT`yc3 zchV#FIi#@=sunpqvtdgS&k)hqyps;lHM#^9HD5SLdUVXfB~3zQu+Vk*Gk)4ov@bIi z<#Wm9w;>5#13U=oxa7;WdT{@9eOYs5vX)}v1mD2nrWW{fA!7W0ktTCl07u!hP(CV3 zjc|=ct7)e7))XwUwPA-4wK9gxTvP$Gtc*gzy^4cK?9P+6#8?7onht=exHKtFJ@;M= zfTmPJ!sUfHsz(x!jj%9oJOU~e{)M);=@0lYu>MU;5`yymF3iSB^56Kuge8W3{qLK3 za#6rZv0C|V+-o#{+(4*CplPu{pGa}*Z?xWzDT*Z4l+9e*^k5VzHw@2&gkNoXJCDE% z!}waBAsEKs)=4miv5Bx?86@pU5qg=J3xDEw;`P;$zZGw+j{Wtmcyl#U)_&0q6hKBb zw=@RAPyO}P%^ZEJt#8O6o9avHq)7J01AxM29Puh24 zx7(&2KJN=PKQD$-6poAQ_>Q*S+hv7d6D|74{4DWbyZ`e)Zn3rnx2fy-F~y4qTWyG$ zD!Si{U2}`Y!g0J(#3$*(xF72WH3LcmiZJoZqK8xzI>y1{8TZ|-_9{AJ@cc`cd@-oY z?>ppkw>{{8rC~EQ^y7u`(imt1b=Z|U0RezpOiOHn#$r4 zt!h2)Q1R0Cc!6Oz^SHA`Ik3P5T6Ap07J5`5LTIwn}7z56GZAlGfQsad9 zI}4mC9G(hjv@#Cp9sKeLK3cd$L4PlaS@84<)@h>^%b--w3=~;&8*h* z)YKr0Ii&?M<^(57P2I2{C~8dijP<@}uXj_K0GD@-tOL2TX7w5x<^|S0w~MtcIQem@ zWNC?iycSo5`Rfh34DLAIzg3DLwCsDWv6AG-&D0^ zsn2)T{Kx|n@k-^Yh3%j^RSy;(fRinKeqSBEQGVBw@Uc>_ZS^A0?l0Ad(XeFVsgj;WCNWIscuWKy11AjZEH}&W zM3W3?0gOdUSAnkQ?Y5;pX1R9hkZ(EDu#G6!--I)UDa6w8sucLWzJQd18PLhl30p)L z3n~jB2FOZTS+kVWWwkVQwWSb(_9C?V5Tji@g$9273 z<`Pg@<6HpQ?<8ph;JH&|6!J*u3)}&JoYuUB1@Plr5G+stL`w`S3sBoyUPwE{B-$O6 z#37UM9VzvIHWw|0iolT+7QIx_qEdwe7?U3B$=E-lHkw%2lis&(9}c$Q?N zpuzXsqi-lmn}K-LYP_A`E8PZverd2$kt+lZZU9p8v?3DU7ss%Dr%pemv~TC<&0Y8%qty*BF5O0hnZv;~p0=#6EzvVsQV z>^?a-(m~IkVRp2#g0?}FE{$aT2s2XDC)*@f0Blxdnk>ZDWm+sqcAnvXX<=5Vs&P{! z?kKsqKspkq8Z@<7k|UPaB=Et)hGAAG)IoQ>=?IDNS<1 zZ588+Wt$c{yI?EY7^d0J2a*o3)UOy!M{o(5;X{CxSmpq!@#>j{K^3|(ufI)C>)#{x z;?Oa+9_`G`D2cCt`b4IGrdKdi5|B;Xu3yj&zc)dhVT)b5=h`NWX+k> zw}%c2dCcUk_Qpdq<++gCR=jY{GQ87S&;sPER`TLd~bRzwz+z^iuE*=X;^%^c~h zO37xYEQ^8;DCMnxxp_13=wMVz`?aN$CbHj6$j*#8&EpC+tXg8&#x*xPG-g#Q{ZUWC(WnCFfD^TXr8r%$GB!Z5ZaMXF(XoUbSRSgjhO6b?NWkI*o% z#`K@RL1@_b>(5Cr|5*Puix8hyI5^(s;bC)cuYWvH<8B>)9Ub*Q4IHD)&q^8AHgPFU z|4kZ)l7fRBL9>3ydV*vF`>QN3*$%Bw-TonUgH>{&J#RXq~IZPfNElc+Qe3+L@!z{ApLEh*s(k3qD zXN!8Ku#}&FDTXdeO|?cYHmub7;kT5y7}hk^yCaJl7A`af=~$27u*q)|5ts`N>)*Eg ze2D^y{7E5(q+E^+ojbA^!7VP6xBTpPVTPL7geV zt*Tj)iufgFDL_>~R0)Ev**gR(f%NE%Y?*{5IyMr2P$hUt)>q93 z)e)^3Mc*tPG;Xl`u8eO=9u0BHp$&xPMd)i&d5xX|ZAf3x!QnhQ7!>4{lc{A`sMiH5-ZP5*tUaYhy?Vw+1chZBPZP{zTt&*E;5(G6m zonXBKtaLK)s6fRe^koU%w8iBz0Ie99*5=)Ru<6mS><(|t@~X-$O}sKIw@zUViv(CVyQJ@^Ie4M4K zxJl)CmNnx$a}UuCukm=RIs)_gR(8kpt@@hPM^pywaAMpsQ==qdylM9w8fms6v{Ee< zf==Yp&5`3Wt&1%asgK4WTuFsM`~G%+^C!T@d$9elteBtI-NmxA#bP_uu`>C=HrZ=$ zn{PWc&|Okl-${up12fm4nbfl^jc;O0KmFb&f8)~jjkeWL*ccOYu8^9*S3ZtcaruIl zTTcqtyviSz#1QzPE9p5`QzvxZ9y%d}BMd(|bPVN(99fJqd~xZbd4cP+TlhGC$!Pue zC3?bsA7^Mj?kf2-bt8e?Knis zN6=jmoPYO@_C!*?$j0ZL3;2J3Z*Kvd_Q-nFZ9Ej$-^1{NI~p}#ge6NmSaMZ{a5Y&1 z?b5qL3C|vkZ0nlTs$<9@ld6LYZg3V)BJ|OWrvx4C-nl<%uk;xkrseuP7_HgQvS*1U z5?=15*lnXA0s6snc@^b_^OJs)UIK_CGP0go)L16br502dk!1_WF%#2I(FIhR#F77P)8Tw;MWhwiw1zKN^kL<&|V0$-Po|Eq!kzG2mWYmU|z*=kzRhDo)( z%p$dz*59l0tl2E;4DBxMUBwX*p9aG+Z8~r6F4i>5otyAhJJ(bG^o)0j<~6?7XQX^A zDwaU&lRW5d1T!Df zleO*!DgwW{XNfxldN=Y#8qAu4N0fTVCwz6IHGD4+JrDp0#x1%EGwg;>UIaltZdq0A zWNyjE!*+YMSnF(TwI6L8vLUk!XF@3~YzTuAi&3iCpdG`13zpWeAhcBq6YXOyHg?j_ zSka-W7I}8h5>ncf4fT>Rfi+Mc0kPUJ3=O{}HVikmU9sfMt&4L!3iWv3KNs$4ZH zQ!**@x*MyQjVc>kIH}ifqfI5Y;tg9sDGNZuZ7u<4NHtN4{!}sJ>hKATJwLnibI6YR z9P&I(3V!N;Z%F5sC@c%CaP!7;nhW@#(_QUuKI+C>{(5H^;@0|Yvfi0xisP@e1y z6F=;i7yCr0voM=J#ueYCD0^MOYGRt!kv0ee;DqQ*rfPDdG=s4n#5x(FkP^#e4+J2W zg8n9ql>kTNh$G~8xDq%`h#m2RU9jRn3eN$5Lkxwyhet~KtmZoGx$WIy&uL00G;bZ> zo%LqE^N|zWs2BOL>l_*P#=f&BBcsJ)vRKS}&aq19jeO^Yj7)lyvfjKm_njk(gwEUc z9)H>KdlDQZ!IOk+!H}<(&fb$4A6>IM;NVaCRNg-Q{hWw3_q5;t3muK2-!b>})a$u_ zhZ%6FJ^Z)W%Yaj*KRx`1JZoS2a}33cXNzd@WHBE17B61(7Sm~Ok>|a|5%4*WZWrGc9~R%g_ZFW%^%ms! z>_z=J4~~x(2gi$pgC71{OrZA0EtWrjq1k<;zt5rW>1Zu@N52?)PoW>{w`;-Q9Nd85 z2MG54=AZ}hEr@@T<$G(v?_3H$PqY@iQW325hf%2$V72>{?XLwzrn4XxL+sN6$a0eY&N8IpGSLafndkfn_I}sIIaA3) zF1u9PWMLAmvo<|t0k%Y^b?pn}ViX0Oy%`o6{=UwCzH-7|Jfwi5 z{7IiVsPLm+um@}$n^p~DyVxwYiLGHv*oamCE4kVIxl5;e9h%T3T#Ucq5WBsQ?-N|t z1zlpV3281~ttS2fFmZyv_f?=tX&8cl=eoy>hDT91H2&f(^t~ScbNi?MDPLM>o9`_E zFzEghX5U{6ZZgsDTV^GHPOzp223`K>%D-!apzm14Xw*wZ07yP>_D=>UC(UQN(1|Kl zDN-p=_OWO80HA9y2+nD+rqRn06rzP7xTOEkB2Z(haDBP5$Wp${GShJg*R*|WJ(Nx2 zH{qHH`niKz#@$zYkbbxc&KrI47Z!?ag%%qd`EN{ zj~Y=r0ycRvX`IIm{`lhvWqR|gVFujCWn&tB&H&xVWVWl#cW3cMJj1rfMRApfYXGr} z@%+36mDYGb>L+^jLpW-)Ydk+mEPGTAR%@#%$c_}Xw9%6lDyw>E7i zfz~@U9jpRHcS=To6|A&@m89<(BLi|a@5q6yEg<*I+&$^NhE%!;`k+j~KoEXM;>8aEAbBasYZvS zne2ds2VX{isRU1e>inLlFht(V140o_s}2(O(sXrlsWwnKGZDsh;f?u{8Gr<70l5E` z)qY@@>vJx^nm8J@{`vLa+<53LzoNZM>1B#>ca^mg%;HUTq|vvZjTCeLw?;~D+4M+v zp1?3a!4~0{gem-q_2Hi>Ic7ldNd|F8F(2Z!yD1-k+26xYMbn35ek;mDcL-=hBI5-i zVVL5M{hVNV%lEL-X%o;m(FLpCX$!)LZ%#w{fpi%`%D*TV6 zc+eWGdLOwp9Y3tZ_b7gBrM>t?og?gYQN~Za`)fO|iq=Icz8l`IX->y*IAXL;i$-W+ z{*0o3XgsVe*Bo!BVx%ezs^eJU^G^;ncT_oRlL+l;tIt_p^7#tv2Q4OPjac$BF5oQ3 z4Qyi$Xcw{dMREx!7^C6uG^nMS;S zdwb?0?`74V)RF4Nw)QuSYgNXQi)5S#i!)|&X}R5)oYGyo>PrbQ9CQLg{#fYNza=7t zA8_FpZoi|X6c=qIkv0=1qtU*SIyKg`=kG^CA*PW9uJwz6MZHVOS5H7 zuQ=>nNZvk9h^@QFY0r4`M|$&P9eSpJLpXjZLm1g%8Nt(!Vb11^Wn{@B@={PxwJh9G zUz7nvATmohAP0=%0q%^ZgTue$l3JwSOJMVl<|#CAc9_x6F;EludlHXQ4jqr@GYag_ z68t%eV1ICpOn(10H-xQV6IdN9VjZktmHkd-p(vDuf=~{MK`FBkp5PabWH!D4G8mNS9_|4?11+CKG1 zp%*VqSTG*z7+z_}!vcd~BIzV(722yMlal=H)YyCSj7G0ywTYTgkOIY8(9?1=G5LAJ zjSc8>$@&<+;^Wj%9M_ zYACzmCvB)D9|tuLyPak>u)^ zk8r2Gy43r?8J@h_8FwEQ8R~{uFi$@UgA>HvlLxJGF z{F)J!y`$hqEchwrwm-{%Yf|dM^a1`Z(HZ&)dUAd)!Qgi@`E@jfi%Jc>$i#)gWW31G zhF2VC!HZ14SQc4KQGDPhQVQdfYcZlAJwO#_6lP7HxZ=nRzjd#Jud{10rC5=PuQGs% zmlOv6LA=C(#8poU@r*L$+gy>$7(dGuGaW4e1EwO9@gta<7|RHMduo45F=Q~r5lu|K z__~S92$BuroDzVi7H_B=fHCofLP&Aq=h`RHWiF1XSgr;vpBIU1PL`aQc$V=L$u){N zloOVo<@RJ0sW9Uzm{ETR<^F zhjQ^-#@mY5N$5~6{*>kQT@!XR7oVwwemyNd7cwqR3Vpvprww3< zvi=#50VidD%Qi6OZb6!BxMcb-1ZvyckDTB|!65Y{g98$L%)}4rQ6hBu#~GZ-MpO(M z2ggnzeM?aKG@GFA`1!NvTaL}-;Du)%JbKu+t z&tY5#$48+vmQTBZay>ZaD1}4k@NjK!Z;b`<2NcJDC*eUurBsp{x+-O1=Ru>cz-{mj z@SFV9c7yrm_mF~i=YMBHn>q&{V2o_k9iqRV2Y}qrd?a)pz)`paE;SFGsBsZrH#G8_ zVu~U=VPepzj6&uZGSdc=?&C4#jhU1kVKw66Mk7jR!{0+{jdjC^huoMnLB7E(R*T%+ zP!1h`QJCDPOq?62^ix*8RuCTnbsGq^NHAKl>le?dP$eTl!OaOv4MC` z1yn4vGWkK)-&8_5p%p0=DQ$6Nf@NzjK2RMiDd&3Hv`5S+0bx)?Aqflqrq*QSA}e!< z(H9?#Y)+XPWq8D&Fo7`5yrAL~{zm04k{R894hi(H3OkVy(Xdbr5FYt6){Rj7WoBjr z{~sYUf!~suPv2h>b;0t+Y2!2@7A$3cD zp;+X_A{{MeBX2E`Wvp);N=vN=9kg#kqcY(6P+p0QN6*1`=j2+p=j4SG@&^VSG@)F7 z=im&2SW3(P{p6O^EJR6_z?I_lpq;acz%uZ}7u5(6U6qC~?U#*lA>H611K!^={ps)E z6@(L)$@V`ujKTXd8K3&46huxw<{+|L83$3{mU0kHLvjwHU}%<#r-{WKV7n2gmI-53 zj6skWj5vYe4shNaC2->fb6HwB^%!!0oFR)BT&2cGNP>$LFiW_x2`~@-jKgjhz*u(+ zfL5n-8%)!35x!Pc2q`9uX%b)v==@6xX_EDZGjj1o222J+yvjIHa?Ik7Oci4K>AsAU zlt2_I$M*1c#WKQlU?yYyaXOL8=tn~OImHxB`-TQ0P4C4u#gJ3jqmV^}&8VV(ibW|G z;GvBv#^m3K!gT2;6lAjXm|Nr_%_)PakRjKVo-D*mDrXYwuVqRlO0+viN`6B}6u-f3 z<*G7X1|z<#j4^zRSx!*YZD_b@RwToibTPx|Dk-8#?m5A0;8C%2$pisM_(3v+$Vo7d z_)VtB#b<{1o7N#fg@lF9ADmi$g=}ftfN}xT6&^~TrC$Equj-;;iq*OJ=n#qtr`zhZ zTU*e*dqkh;gBx&?v4eT>62HZYEZb`gAkB^b=!rf0BUT>jVXKn>#btyoQv^S}C0{U= z5vdrWAA6~<60Zs>&+fp*G$`e)Vwfmf0V3n?$GSP%)I;t_HFQwuK`?HAm?uVKh*d5y zft_O=@TlGxCAiWRmPrvePv8)~OOqlOPa(;~#>eAXoR71~NW4whSSl6THOggr3yZ2> zMYBDJhU;_X<5w1IaW3)9K zCzH_(pe)5It%weO->*7v8T6#={ufI*1nv7%@>~LQ^}Yeplk1? z^s!y2Iq-iTa+=Qn*YtlFGTxw?OP%Va&UuM<=s}`X_^XeZpeJb*Rt>-8@!!2N7*6pE zI%Sb5;EKE_e?wORAWu2kMqedn`Bavt-|*7!1S1hOzxwXDd5MH5oerKh#wf=B_-3zebViE0r^{nF5Hh$ZT-cRicXw_Rf{PTG-YJKgvUf6(p@Smc= zwsUNER*WN*>K-<*RK5o7p`=el!6g93shHsdsZO`sdDMN>#n(HyaueaADAw(6J=|E| z+}PY)i9CPoJ=o|z+IY0J-F>vRllST1O?G#8yBjOr&CS4nNa<`b*2f(3+7r1`>r6cs&N-0fGxSWy-h9|ma%YQO-v$MH z77xsGjDF;QW>GrIrUYPT>E&WE^IZC3XWri$h|cB;{w}sQV0sS+VrzW`e`&t4rzRQU z_nWtNqn!w57Q@UU{IFPLK3u1X(bd5ZIn{V*yaxE1UHAAWyvv6pxk-k>Mfgq1;q2zB z$W~VP7w^)aG?({CROGyBW5V|DlC*fJ*JEe446hr1^^Le=xEr^(_=y_%%}gdA?r2Lb zNI~vKU`g2D2wpgMeTBZUQwZZ!GO11dp#zN(xoU<3)aJx%(-{JJWB$z^_j^-sE@FP+u&W_MOrli#Vga?OvE**X3H z%ig>9w{0YeqW|xwps;5Z!UQQ&wj2jEq@SOOcjGu~JDGU2y1ozzi5OD=2LNTs62JSc zs(wE}QjTYK&pl_eV-ele@9OI6>U!iSIGNCiUx1hlm}>DeboFqEp)1TR#3Bp0Mrm@Fx!;_Y6VmqMYS_F#zr2GB zYtt;^y}i$$KMy|NAC%Sk-u`en+^a89xd>mL)5Rhyrfk^dpR5ggnB3rE$FP-TS7XMw zSuL^gATSGrR-$We9*XkKYyXr=ON+06n$+ShlUlS)gYsMlTt#^Vd?y_GRl~i_7U&Yg z9BQ$twso_1*Ou%_EyAe4Nu5^d=U>a*oKQP*F&+ZJB(GqH!hwe`W7qTSsEbi`3_O=W zSUQX-knxiS$l@v7)&WiEXbdJ-gcEJK*8%#IZ^^BKXmD^3dH}bjkR07RU8vB1)%@BH zVEcVlO&b_?WDBs*`4q*;8=z)cem-j?n2suJI(gh@wnzMl*7n0xMI5 zH$%F$759?<2yh|cZcwIeNC(Bk@pJ>y0q3!%r)`-6%US^hf)%Y0e0pJD%yxHMU^ueP z!j*M%$5YF`lHw`6ySqc|89wI|o7RNVy9{T6nID`5mZa;Q40&Y)z+%*Y7+4#Yca~@K z>8ojClpgTZ+uI;VpGK62466#GB_J_XvdqlYkDD)D)9I=9!I6iirz#y5y&*A;OA0U$ zyn6RW`+D;3SMhbE`ic&PSee*NELTo{VEbG`C!DL|cW(%w6L5gQCs_}$;y{YizZ0=v zkU5>ex}y>R&YKprNyG?$0^DFN)WBA)xCtY&vo-wrAsm;QH)jQFaBPjZ|I!`%@5^k- z;w92A3}!mwb0V|U*I=3f`&?e5kI`(NH6rc|Wrnd1DuY3>dTZc!f#6J;dgu+8%*4l} zSRVzTE2}wKM!ys}LIspvzRMZ~?L!p-R4V(Jz#iP$*&RkF*V7&tY~eY2 z83O81eq zVs#%nQ?Oqcpp^k?gUkg~xLUg=coI+5noJL8;~A_;3JWni`6kn!q6Rvj>3o}+&e=@2 zfeP9#)&<>vQ>Sr3g>tbuN^6Us>lS84P-(d|^e~BiRv}C=JnJ}kCj^5Pob|s5AA1!5 zIzYw0E{+Zf%dI{~Ct)1WWHZowJ!olUkL6{o+}%Zu4V*jdnc(b?dDT(C79uzqr@*=< z$xH=9*NYu-_*hS6f!@-D=P`~qnn%lM5-k#H8K+K!bJW?Pf9QS)DsLdqo|ks9^l+`q=l=xpV5;YpXTtpmz z;+~g`rRDO|f6GLC+tVhPVw~5P1ks&Fm)e-v^jz4}a{)8rD~#z-9yv~dD@nqm2cDzX z243fQ`B>J8^_?GM$w59nN$`h!g%lfE_W5WUUpQOs)wFKeZFKq4yw#y6JB%#CF=@uW zXx@-4;YTYH&NJT`7LCo8#TU)!HK?~he+sJ70wqvj*4j?0sO?%1%! zsC^v5C6F49E{pQcYmv0*Cc z?cbOWIRh;|E;#)}+_^tafI zc{oN7CzL5psBC%Nz=i0KfYhn8mBxwIbq#GOf4P>Ms&Qlvye72N6O{>0$r>z9hC9dt z4JO!gR2E9zfic_yaqe6kD47#vl!HtE&YkkGI2y&pVTmC_hj9B8OrP?Vtey)smJgW- z&i1{*73y3p>jr(aq#Y$eLTuqLtD)#uW?wAWExm066DGDYv3Y`u5|V)}4|96yQ9iA) zf9fth;c&Odg+}Sw+S$NfNa0ttjW6Y*2Emus#E{xJ>x@(`BV#OCgmSg27>`Iwi@0Y; zf!Bt}gy-opwthcqR^p`avG4NIVUj3L_q2MmHEm{go0;Gda1PDkmGA1Mc#@nLe^d-Gix1=SI*l8fWQoo;E<$m$&fsQ^*E|%C zFdV9QQ1t4MQ}h}tuGEdl>RVp?H}tJMthVUeG_RW+y5?i;^e&d_#%mra0;degYIDMb z4d`~*JYjMiPwpNv;ue%2rzdds&JgYA=wOWLZVktkibzr-1Cva{8vq!NPpd5bf3%w4 z-b#&~>Fq7RR42(as-Oh&$#p2|$&~N}tE0LKA*-dTBjsJik_?Euxc8Fp?l*M@u(msF zy*Aksw9r8`kLlme=N#>DrX7k@+ezmz*6DR8yMk52P*_9=GUz|kjQH)hSI;qyhSirO zQ-`H>qWRw9ONm^Xh`WRl;o+#Je+o}Fn5vbtpK(TWeMk3t_HGr7M9b+=CkFk)x!kEk zjRJAiGIsd0rviE=sKeTQ0U!w*h60Exl+kL=+gn`&wLn*nOC zZu4m3Q^smo=Y&w5^^_-uQEMR>fhdB5p#|dl`N^tov#(i@lBClWO2aC zL?xW+WE8`?vO1ABGXCD9OP0s=W0@|fb}dBSRU-3_YdHP*n+vs8sdiBOx}^XQupsSx*cL)*nr?}ie=}gsMVXz>TaTFD zQ>Lpr3EgI7^idMUhIj7x+D{0!PSYpl?T&T=IHngwLTRgPc8^Z>7veS>Nuwn z3aOcvl~?&M;o-)z$5K?PAI?-x2~n|S_IlU7fz%pS>a2*%i1ZY$8hVjkh1QtZ-q-i3 zCt6ISKWB10f~uR9e~9v>Wi)Gcp?;CobA9;2>*R_|Vxx0*N+1(4*Y6p<>KfFG_rj=T z2*kvR7bA&|5hc>3ggmA^Hljbz$*mk|wOI4(5CB}jxY(#!j%{n^0h^T^v`dCY?DJ{ecIWVEItXnBe@$({e1+EzSvK%FuxDA3 z849mCR9?Km7ezkIT=V9)l1C1CN@|>E`$x{RJ(;z5<*{Rf+0-WiA58T-Ab#UxXk_#n z1&3VxD6b)M;zIe$y^|mj7Z>Y|Gu?i>3s=Sfk|xqeqXeBBv`kbXbI1(Nmu6|G=vOo@ z00*i-@~PNpf78AKF_;y4-$yY<=87?pfGcD~|7mcM(Pv4Nu_sG^Qp;9hqz|Gn$5eP$ z))CR1p>slO`3mQpi8xe?b#9nbeD=^|+ZEFP6pw=Kcu< zxnK9d$zC*}M_g;iR^!5`Pd?1p-Ob_u{y7`ygf$Um>LTO~g3Y-^q^3Bi*h|FsMv5UJN)3SF!j2 z&S%{of6XHjvB&E1Z6yT;YO=CzUTI7gc5H|p%Q5WY#)^W*q(9cpm>++BeR`q6$=)w$ ze;5(4BD6G!xG@L(GZF8Eu*fRdI}eM58#1PMm;?;~$;xD$l7 z4#BcWYU9(*hE8CmX73HjMv`a)>&X?=C?GO?fyH!{3d3Rkj>6MWF ze+WPRrF!#0{jqGygg&!}OZ1ft4o{(a5Azwqxb0hdVl z)E8H5G*@KI#tIa?IydQyo5YANZwaqee}eVO&f#q2>14ytGe}t**7)7~4?n*cJb&|^ zC(p{yzrwX*kxkHqTrxYD{$rI-Wx}T{TRb7Kw`kLD0KS{0)ABRM7ShV5*H6o)DKCuV z_hmV6@`X%8VO$Q&&gvW-@JQ7~enE!wuW;^R6bS_lG_roJvU!bB5 zNjd+6TMo;F4|c*|?F3qBJMkssSM<~?bQ&OjziYCEm5cI7j!zoowF7yrL4MI7zc`Rz zG)O`$4Vrzc{Hv#F^%vTZq7!yPe|nYI&&qiTJL_K`Jjeeyo}L5JiHzs>@xMS#GRr`Y zV;%?p`u+1~qn9s(2t{O{GDx_;|M2_g`yzqbi$|PGWCl}RS7#l_xp-6(_hCK2uC{A~ z$sC<9|3P}SWK&L`z#ugw#C%^aC$kJ$S5i5$(ggVJtrilpc544%*8bscf3<(W+Iifv zE=9Yf%RI0)@Hxc5cXY*{yGQqx#J(R9wVU_s7ZE?-~h2;M8rrdwt`i#t>i0Hj9-&bi-&v~WR zi#vzZK;D<{U^8ZT>+rYj*6QoW;L4mfxZDh`%_%~ajxWY^a1C=Ye<84ip3yHkCn3~S zZ-luPoc0=+FR=H>ioE9T&>diTCPAaPMOkd$vfc)Ix_#Z(xX-t)`x>di)^&eDnz41= zUy!ma?{z2lx_Q42dy9MBtPi`oKfTv2`xVlg^j>$#K6+CZFzn6lbr&qLKjDedWine| zs-L>0WKeXXPiN5ue`>gT(b0pteyK?!_y)kCLVa8dgu;(6WV~>NDyxt&Lj*PUi^Y$j z2&G%~%kW;e-kYI_tD8da*%xW-SNHnxVa>eaXF@EKZh{FToQ5SQPZMH!dl}m~XB8BI za>Zp@^HYXSR(`NE;C{Xy*q&OTL{HPnr*m><#!hv2iwB=)e>q;k@+3GXP4zMvk#(`- zWg|ozLI5ku0ywx%OJ2{w4{G1hYV-pPHdvQ%2+;o_rb|J=Pm3u41~d z{|SC8FvK0)tKg=Ced<7`PR+Rp#@b{O<36w;k}PsTNa(_{^R{fpgq6KO-iTb7cXU+< z>T;e>16(+|e={UEPoKPvhY|ey?9I<_-o_*R`R>(UU&Q+n+$ZAu`0vlJet8i;z+VjL z0DltD!|2Diub#)>M+EXHdiUGgmrtI(h<|WZHK+qjrf8srC3cyXjSTgyU2Mi8vp zq7MRlpr9r+ty4kfAARB%jzthxE1h;VnC;<+f`Tw znb|TLv1kg;I~u;A{I$A2vX*9=!B)S3K?0I3FW`1I&8{+!+N^frO!O-!e934<8fQBM?t$(bY!wi3a!9^plLC4R4bJ<3rt z^pH1<2ODXMijG7%>H|DBvQZIeeLqQ9{;J5EoSYK2s&dG8iYXKKbF7^z%Ubn(_^~XW zQ9LmHybW(Wt^*pnUg85byI~b$*UT^l8lZpAJQjykWhCr;Bh)y@-@oSol3gJ$MtUWv ze`TEz+IPbUoj&l{6-r_JC8Kd9Mb@~?cX}ap$VCNG|3MmBd*?>&St*L7T`L8Vv~MvK zgt>Et-v(=w227+FM1^Ooh)ly#o#^9B@v>&6(Bdq*jnxu;YSJ{8N+Ox!=Q5o>6IR5= zEL9o0;=s5Zp>U9A zIwz)8wqoSM^m0{IA<6ENLnHfA`dmHo_@qD5BNSH@_{s~5aAnE$4v3Rwe?B zMfyX}p1`IR+`bm+?g_fb&CSFQl!#nuGL>v8Dtk<&(h6lRWhU~+OX);|Z76^E%6_&& zS5|13H^Db`{)@Y@G>2ih64}1vwVC)=OdK)Ts;;a0WuM@Nv~8zBVO zc#n(%@5@DE)Xqu(02K0;cvh8lZ8QOQ7`Fy$Q`HeF>u%4wvv=Bgf0W|Oi;Dm$KGnD= zkiycqNYFydNYRVE%@}1U6U&9>BB%B$rYNNyTl;}Q-(h?{f+$>wzs$01PMNi@ zIH{~)Hk@&=*rZkXGgonTaV-iyW!F>aPY{&_|A`uR+myV(v9PlFwq+U|9)%y|9v`=E z=razRJAvG~e-P7etEKqCqBj1ew4KobqvZ;V9CE_YrE%#DSM1_%ARns?h1t)jmtFg% zNzZgt6g*_64MzbxxCi4Vn0##hRwCM&Hnz79)2v3Y(k}q_K0OV zwBs~)d+VkR>UoatHP{Q+FJ(v8*-0Pam(`$R-v|g2qmW2~4-E9@O z=fIqmi#A+g8h=`o!M_EGb-QOkgUKwdo-|!wmSB!Tc5UIWs)-&E$1O#{gx5c%#&@YM za=ZSaz3U(RUB6!6)(5@oF5NJ&x9={9p3PN_w`|ZMDoo+vS8=i#*EGo_0%NGX;?Bw{ z|AItpe{Q%S71}-=gZ!$5dg(}&F%G%VeWCw`@U zA=M0Ia~^P^5fC-b)<~z02^b^4<_mxj_i_i+Y~7@k_eg&8tF)DG-L$(LA?yMcl!PI1 zdnk_uoJLl!z14jNZK4z#sN}W8YFPTGPnHn~z)6G~NhCfn@ zV35MD`6y!ASbyf)2vm$82<)$cl0t80HdI$?<@-HD$oXiIWnWnl>onTA+HU{YXN!fLVhtIzX-@Lp4OE{x9ozZ zf8=cdn4NJ8UK<6kTMB-03w|*QerYMlHnQQs*HqEy3Yal^xJsluUnb$o!dU>w2u4fyi8pikQMTGXc%ygQ0BDN}ewXe!~trvGP z+X@-gwkW&W`uGl@QHi0wD&?Vu^1TIQe-w8V@P1b#m>aUC#ahA@Dy`e`CUFVNC=~trOYRN6*@|hT?f{vXJW8}T#?aC)Ziuc z^mDVB&dp{TH`~g%W{Pn&x2CY|kULTuduW+P5oz@yiYPM>Efe~p%s>FrRRmSpM~W+? zZ&L6~Gyu!0glli=5NH%>RiG<5fB38AilmKGvs=_{(Whr>XPU&um)TY*6qb`*{-Uvo zy1|@n=wunkc$w{Q#TGMW+mb=J8YhhJ=i&w~WIeCa#f*H0lXNwgHv8(Vd_Cj`XTfU38&qO! zofxOFr#SrBPJLcB)}*{D&PprkXX3>@Vi!5FEmvAY4w*3(tY^$=OE=g@)hzB8@-1*b zWUto# zM);&UOS(;e67F>u@NaaP>^~UZJB!Zw{bW{O?pNoh-OFecjl%Jge-lBb*M1HiI?Z5+ zzosPVSPoF6{l4tZqN>-BML2XGzEkndN(0)O6`4nygd-G$x?uTh-_=LoLf`JPC9ac$=#-vUFLaFzTMHyw zYf86w5bX?^50=wGf6We&=#=nqSz#Q;ZurCuPp7D&=`6pE8Simi<}jjJ zfBznJK@NMHCYy4>?A1RfwiIQowe>klqiIhg6t-%&A$Ifnf34GnzuH@AV9N@{32<|n z*Ez5nar;Gj6){6oPZKZ^tq%{T6^;2kYQE}{z>e!k+9JzK7Sxu({5nss#l5%XimW@y z)ZZ(`c$u>oRAIqzzov@pJmadGEIf-Q7tPm6Q6o)%cFcs2T#Z;N+m>8oqjj#h|3u$n zGe*f6iJ_Bmf48R@*;8Lr$W{2T%0-*483*@t%4qL$GbmcOp8R)&6WNquMM%+2{aX^bR0rFl%#3FkOkRL%Yv1gAju& zDHH2jp-EMc?NW!-)oWd^SX2DP=k{D4LAmD$Vj`Yg9zVG_erWPPCT5wjArgfPtZ8h` zOtQO7JL#iR>eV!q!YJFOj8Z?PGM6p~BCp(#sh@I};*>)h)&`A*FU2`Wrt2(4vJCM* zZVY+Re>>ka3UylknNdVrjlr7JE!Uy{PZ|SW0i>Ds=kRcNB&RV}11Q#Zx-z;dYump^ z^}+Vi$RT^c4WdgAL5zyQbuT#$V`*iMRXnz<;CzZ*180o@wJu%y+Xf67t&G&ABELaL z&{*yHrE6|dpk)9BW4OX`;I?O*d$l!*`QVZmf3*b^B3*AsVy@dr%pHh{B6DU7TVu4M zj%zCT?;-ufbDTm11 zolZHV?!T2zUEi5bZO;n*)umHkUh76LnpMhXI`ze%Q)11{=G-Xlw=cWW`E zf3iCD%`h5L`lljI?$|qE$d+r)CUNa@qw?`p|A2KyuD7|?n`UWSs-eNASN~ArXZC-x z6`}X@m5Z&&sK4yjjBf&?nHb|+K+3`z-#DnQ(J=HZSp|Ztvj`ec4s_x}!d&r>8Zg{@Z?k1OrN$^QO))E)$F&IwL>* z%4c+E1R2n~q_Q*iW9C8{GiG|meV&0;ReHt)Ue(afIN*&BwW>JR%j?3NA@_q6y#4WM zH|UWz`YT|z_74v3mB4UCR$Adnf2%1jmRBAtp8EYV+3h5<7e0w>e%8GpYX9$Lj#xv{ zvm%!CEM3TyomR~X{+Oo{`0jX|3`1tM$bu{Qp;XAEOB2I=?jp?^j%#jp8p_AqH4Y>% zxyaNk&uug#PZqb=JRh^y$gk)eGllcEi^@=ml)C6n{I2=Lbi=rRJ@`WJf9a=wQ);GD z)n`ijE5mCJpJTGEK5co8l~&|itr6C4FFkr%&pe5my|IYY=*fRyE(BTgD*U4#f<&(&D{YDevB}*ULG2J_j6_G~I&X0x&@IH;g{&xjE0xMD7*jPOyu= zR^@a#!N<;zVe~1vlFK))f8gWG;gCI*RTxF3I_fTf!m|MmzVtHrE0@0t@hjYW5KT#0 z0jOhlq4{Jmyp*yt-%`h2CYm2@Hsqr&chz|T2hgZ@HMrXQ1n0^q6e=E46M|?6(&ZG+ z)(O2W+jjtn$Ygviy6H>H zRhYbs>s(1RltS&BZ@$7xZs?tj+@6j6{|~d#im!4uJRVE5-uXQ2sp&iNo?4^5J|~>Q ziLzI#H10Fs_5S4VqRE9>;UY&@Kkheyhj%*!MF8TO}v&EK?beyOEa+?m5@ zB>PiuW`7Eo4QT}XQ#kBTBiWyNta&B7Tj$!?pJpBVQ)%o^#o3>9EB43B`=lZS(;D5% z?bm4P5ZtESe-HOm%1X|?*SD#hqudaKl*FaXk zq7v6KZ@m|LXgtP4`tPCf>7StSv&}R&gnmm#!odGKjk!j`Smn@iO!ZB z5k_T;Fmx|}x@SrLE}}U>yu*n=u>gel!8{kd`(M~me;@%68~XfibjaSaXKW{5dXn4e zkTBTjIuwWK&}Azfa=U#uI&{b0`z05=_eA^c^}N?zJE0piwFi%SgZxb83D-!I`Rva@^JWcS*#`$qOj^l?r5YH8Q>Vlz;0 zJy72Re{?ebJb-=pBAv{-hUW!AwXSV$ieKZxRTzEz>Z1I4>-c6;Rt3wh zy*%%JM2E+0-98@g3+fC*67a{LF&ybNZYWgX0mwt1X78zgEA4-`^^seLdXgmIC*dYUy%FWcK64uw&$11PxrUQS?X@<7C>?+(xOyJ5*$bk% zAOF1Q_uInta^~Bo>9Q#UFBRJvL2Jy>@D^Lk-rnJMg>i$KJAJz`3ZG1_e;2j;!=cGi zz*IlQb|w3+4K? z1g;6VS~ z2>Uq=MSQw>GF3Irv8FlJ#Dw=mO#PwY>Y< zZ&_YF;#x@CokeFMpAexPR1DA2K0B8s zA$4)pp>VaGe|<2;{}c!h=J2nh6#vtTO22wZP@SKqf2ge+iT@1;--mW9Z_{bMtdn5h z?7$WGBN`k)AMk(J!w%Ir+J6*@{|(``fRT*XPes0FDny>}J^z4aLZouH^+T1ydi^s+ zW$?^TxuGlNny!>qSB5G{^`o@b=)ltl?*t#n5E2}hk{h|LVxo+ITk#FY$2f}+{o))_ zo48!9f4rw-Wa6f%E&+Z*YzNJYpvCbYWtyKFJ5#)xIyoDhmV^I{x?0miXZR6 zAN(2ggl^hZFJP&A1jQh)eUR5a$S*#~F9zfu>xIHs9;8DhpmTlv)~-o<2!||e%gI}F zN*;?d$uO)ZFfuIOK`pe|~cSaudvDef?r@e>_#{uhJRXGy-1A zh_0Y{I2#T7h1zB`8>&hc6g$^uM#&TV70Wdya%!g8CHghXFa6E+)4hEYz^Y)z^KByy zh1fn%IKnmYO$*A?eM_9s4F$-x=yqsTMYP-s2-<|=nr%bkJ9)Odi!>WeQ!###`DMf` ze`1%oW{_QBESx$iSJ5_1oIE${$$Tzy zYftvNxtHwT`i>8Qc@l#c;d@)geZ#K$x&tR;ap)Z?*Gpr{sJ(${HqV;OZU<^&?Fh^* zBNj3(*F&a3&2U*fE-=<~l4Q5HC9VMcq7cH1c|O4yjiZoRGp)2vnM;CKK+na0f9<64 z`|$Azy6BqV+uVHKm4ifGkGAQ_@jWNWI11*L?_0M?IW4{tlUHZ+&8aq}~^#Wa#FKXCp0-iLa8;;Cuaj#Md;- zk*!lscW@vTNQco-zOl?F%Q@Uvn1t(1h0Gm)gyb@?ygRy&@4rU0l_%Pm?HRHs1<@yR z60gO1rzd_%@-6yhhknste^o7P*5eedTLC?OLFR*%>yfpu)#KsXl48z%nTKk1*4ClG z!Z6Ze)!g2y?uRlu(zbJW-ZF>MXXr|WJJKhueL}SWPA-_pvBM(iQrh-#Q`UB9to`wL z@cqbzg2d1QJUnp04z}19-np|oZ62MnftC)Rw65sNVpaaY_GY8F7w^iDNI&N zj|pe=7-cTSV>s4E=_uDJWcc>=lr>c#30IF;TC7dPvC2JhnqY|9)-P6pzmTIjcj%dY zGeigVp;IoKPI=a;=-F}XHU}3m*Opazv$oq+lYpnAHWh+F!YqCRKW1+-na8gJv>Lj` z*(l2rst!4Fe-*i)7TUVOp5cMUjX{jn%|z1`jcyp4#J*eWv8et8u6V4b)hc8}WGt-) z5!Wma-=(wbQJ$2E+jHgyA2c_=BM`8NgTwbog7b~gK%=&ePH5NRg-wDy9GFClp&mwB z>{k>I6DmCRbeRiAtVokkji@-ot`IH4w}1JuKFD~ae*o7$ds#sI6-ziCH$?OjHq<@K zyA%^qNY$&oRUlYioU5R{gTbH^^zvTtZ=SA*VBin=OPrO>UKr?^ZmfwG{mMY4dyF)_ z5fEP~!k4Fx=AB-iFxm~sTnj_Otma4SEkEu;-%-dwJDkrV|diBe%zr7C}_yO+!BzXGU`}c2t37lL;Is)KdF1Lv@k7djz=IQmF zx&-iRx`er+OLN@7TXYHFj3&^T=Uuvl@aUo=7BN0%Ah z#dlv7w?g-di+vN?xpw+15$AQ3-B+nUm*v8^@tGGsBJuvnZd$0DhI}tJ{XRE85jl-5 zz#>|>xjGM1*C#<+ueYfM9Mdn}R)n#PfABP;HJEuDJnCjndzrW^i@77^(V+{)@l-Zi zCV9V!3KjXyS(ko^lJZ(ZZGAQUTv#o~i%d>o&4ofoH^7g$dTMPP$pjUV5Tlm66YL1; zv|3OnS0u5HY5PD%2zQRxcjSB2mbar?h1M3S>5KX5+AW9c_rQh@(E08O^=|J+f6sl( zf^a3xdT1%P0%LPF&Xv8juzvs6>+m*D``p_!(~_EI-; zQHLjK*Qg9VN}>=|sv^4Hkx%q>AxIz`sY%i0BQt(K=;HnG866t9MvZV$@LnEprvhWw%1f8vV&p&JaY zL5HpEH+6=o&3-e#ll^9HTWb_s+Hcx@2)8KdvoI?*T5;m+yf0m3bxbzff2l**cV^zy zNksLT{{6_Xm(2IFdtG-cpbupsGaVk5WF-j)etFo!?35m99Mpko4u(ixQILP=DEItB zx<{-{@4i&v*wT_#Y#WaKeP?F~#UyP<^rWh~wzS<`L|+p$tn?tqH?goR{){Q*R)x1h z^mXDaS6eA6g*=pIQt+xDf6@F+{D#gfgpXQitZ68MRU*VukTl6_ywx2D)hiafL}Ps4 z5{VWqu5$Clcxy5f-i~QnGSoRueF~$VLx;Llb!62|UG=GAB&4e_Jj8#yuEvEnP$AaR zk`fsGkv2QIdbj>nLZK$B2GcNwCl}6x`5s1&NXWcAha_gL{PQm(e>i+|Mq3u;=Pv9- z{lN=wKWK=?O}f1hd;16jE4L2jAf#AMx$&xo1}$a32_Gx_mKr```T*-R%j=>Ara+H? zNlm|jY*{*hDgut@M7F7xz&Bt7e-*gcHBmDRo%+q0w-gL-hYx)Z$ z`t~;08?3DF6i~)Ucys!tdkpB6J}}x^TU21 z@qU}t`4=u=hq-R%*;`^Vfx?tZ0VTdc57}|R9!i2JZ?X&dwTdoEB-L>d(W%KQXTnGJ z8?N;~>7RL_eF|=h_Y}LHEnZwT7z0bF?3tqx<}ggYCtZY0%8Nx=WV(95X*s=4ZqT-d zRa0J|p$%&Mf7e`Efj=WuAjbF0o03PlD2u^qUN9*e5R$Vqo_uzur(-defxonzRW!?| z)2u)NM;$|FmQ6m7Z*c3O&$-yelmdpbgV-S3L3A;G_7> z`gI1ARQ@Ij7FbO@Rh7$g12JQD`dC{Tqgr1!*GaWj`ZBOfcPP}MOlm#6crwI-JRY`gl< ztfneUe-i03|5iX5mWj8ADt}GA(Nrn~iS185T~+FjG&g9xm8m;B&LP|@ITIqoZ!=+T zH}8)2p^onUkp5+7e0LO*#r7j+i#-}LGwb~aVKl|RkUodM_kX~+1$pvIVL>{2XJcekww=$3FhW3KVMcE z&(KBBgjrLQYiE@3883zBjpwXX(d5-y$!E>zdZR!}$5lT4{0kpPK0VLThzc4ztFn4V zD*(rev|aRvKv%2kVFfSnQk74M#z*ILfM&#h?(Rar>k=>ez!e7nHlahg?#$B53=ZN9 zf5;=UaLf=a>(tA|0`5-J4nJc$B^{!JAi87@0^Hs(dk{8PVH99)fVIK6>A6Ts`#3mR zW8FAO34_*k807Zmwj@fSK&eON%DsU^X59B-WTxdRK@}_=A0h(YXC|F6>ua}b8QwcA z*2MTukC>?)&LEC$C+H*#=zZ5igWG7&W^h%<@U&xh57Xv8W zNR^g&XS5169g;Jks&=l82aH&{h%mm(a_g(9olNF(YNR=H`#}W^2?OpdR+&TEe?qZm8BBE_xX>IrcR|$KET6v_Kmv7$FaCs&?V4gmZW|UrkwnCys zH8DBan=^Epo&@Og2FdDCgGjIPe_{t(x``-mZ;L}Tujm#io)F13T$~PTcEQe(9l>-A zwzRv;f7PrfRnjebH5z24)|(?Snb?oM_DS7{MuX8kxWE_WdPR@xlquEXBkeaFd}F;5 zAqJ|@Ksu^=`0vc2(`UI)QmIFRX|(1Vqq!*e5-VRPaw0}K4%~;qvbg^}e_DGbMvUPN zQA84~w#2^_+*))0g1Es}As5S0a_3$Y3~nAR$2(SQUP%z?VWGl3?03`)<;%lRGE~^I z0@lo(Nx3^%S)#l0XROyacG}B4jf~Tz?B^)VNy%XeV;R%EhFvSUA7Ca*j%v9#8oBFf z{~1hoLw*?eDN`qOxlNM^fBwdLj#Z(D=O>vZxX&?P*XHib;Zv^F!dP zyLmFj&}LAIi`{X-nsCLhvM3+h-K{8UXW_O7ZB?H7fjjn1K!4hYWhQ+Hz?E(h_NVvK zy(J*bq+5l(Ieq}Y-xcPuH-JqsN17u!raY7q1)f=|%#vlU9F&%bf9g?wAc+Y3V{>R4 zjdrP|bi#}gz#XzD89RkRc^k6A5-2EvqZ9-Di2jXROG=^$oJ@0AhNKo;Dx#Q4TA4vI z5JhcL8#Ql@GpU)%%-SZ^x~=&iF$e*U#E-#Mte*99PyV&cN2i}zpUBJ;t~96Kg6ZZ$ zC7y}<3(jJ0!oM#Ue`~<2#5jQQFZ#54pH_JMH8S3uJfV>VF(GE?>1kOvkOudEGjD2^ zmh51WE?`k`wz*9ni8@d|G!WvUE?zJ_c_>#`@v)g`rb{tXrbpB60;y;iFW~Y?v!J?i z$!M^+1=0dnN0&)}oeTJi&oF@vrjMeLAg<9;{8w^u(Y-K*e=9Vjfb$ts+zYWR3J8PP zl)>!ouBl|dy%tX?F_Gk(3C&SZV1gxRUHX*dEvQLoNMDeRlhWD;sxSsO50p?^iUI5* zdUc8$CI+pJszJ^rs??b{JxUq6yyD59XK52(MvL@3`vX~mLV{v&IF$n!5m(aQ5x#<$-#|gY^6vf!Hy8IN z_)~guk)f2jyT1?Yg{mGdCpYGMT+E*C0(nW1z=lu(#p_(CKBLM9f2%t=T+)mAbtk<{ z^Eo>F!Ml9gIR)T4tD;U(lAD(TeXsnj9t7da9iEKvf2;8pkX)d27{&#BtH)7Nc~o+5 z4Ovu#Fu6PGg$$o;)F5g+t-R-n*lO~bA)^O6_3U71DFM5Lfrs~w|DVoDZ|^)*zF+X> zM2p1dB`+4sCLpep$s6#Rt`OtnEG?$P#IKxJ`UpTMk*OQ=%0=UJ^7=U?95+BgcgWD>*-UZ(|Ys7m;p%_H6VS)xQ<#%r*g!kAy#VpLmG$;cV!7K}Pco0(nN{x*Wyx)l^=coX`Q%H) z6yjfCxd~yAUzsX2K=%#Pfpd))ry9B`X}f%uiB=Cl@*&7`D6s*p3kKQ%rc3lBxu ze+z2)?ChH~O?-9+REF8ibv?J72DkVs#D}9&>7&^lj=MScgj7QpnHwGxCX}5wJ>+Dh zVE{XXO*9OfB=Q+y%ycl#Fv@_T%gU>lD8n(uUY}f)#T(dkh4LpaQPv1Dj|r|3$C&^X zcQ8%Cm%Dw^Xynv_b_5>XITpg`3Q%%qe;DG9m!;=sw@{)&p2Ea>hVoYz!N_p3LjY`9 zV4+eXNhOe@^07!Bhuoo19yP}$tRf1L%U*9Ry>FHzn+_Y>2U$rw#4f8kyp&Jal9uwV z{VBU9St;|gRLY)ocXBwb;VN@n9v3Gk=xCGf3H&o-f1#YR9d1;669d&*>oAE5e_&yq zw#;me-4cKbH`=>}NrMX9V-xj?o&e1ne5{u+4@rUVJ4+&Ms--idD<0{ZJhwGZV5<0q zX^PI>A|}ZhGFQCh5jyd`y-njZ!nY$;_|hzllX#Tr0Ow*F=G~9D3OccDTs1z_IoKJ& z_Ea@oudTtSBIT*%l&d-ca*UfXe~1$}hShx$J7Xd;e9NY|NF$Z^{bs#11{J=;n;opfGB5Y#V zXM9|Ghd*f@W;8;R5-Sg2O{63D8+W%Iqm$=jbn#4~vQ_sOhmjpMz<~g@e~Iz$_zLJ- z6{1TTex6_|>^1l|siIo;6i;-1EZFW7a?O-FJ2^y321f&j!-Gn7_qAGm=82j1Bl-_+ z%HQBxP(4d)xLx-6i1ERb4P#Z`1b-*FV7R2a z2nx|fs^ZgMt*ko9cHaZvRrb;G9tKd!cDwJI+h0*vjVF$C!Jj2NJ9WgqigXTNfWver zsL(?l;=hMh1gPA6>*8L5G={nP=7VnU%-;k zSqwVD+k|jq%`PBR4X}LrXMgeqjgg|_aDtk(@K`c#59+Ni#*u?APiyn$MH- z`j_1_no*IQJ=`U4S;{M5Co;@nMj+4gioa4l?ehBn5Dk5xYa$AwpntzVA*U~9wuDK5 zyh`{us*e6>z8cw1@+;o5W{1xjyscek^Kz0m*TfZy;NcbTX&vX&<6x@}x^|H+b1z zV*EV#_Zo=WWz&Vv@R0sqhez-cV@?gYhTxIed${Q^t~ycOfq%JFAAdm2>gxm41Dz50 z3)@AG0T53WN=oeuW|#JaK>AwE?-#?rE?okdV|<&60#A>8#|;->#}`dk!9b3XYljgR zV7EbhK!se%Y~RS0ifOkCcsO)9rT7`SLADSSnS)k@ErR&|pz*ms>u0T?gXF?hGD(1$ z*f(ShWT&sKB!B3oWW``cBIez6IL;1>ahUg#25t>flwTU(AGEs!YbxK%cnjrTrZeSF z%-b74XL}9XTRHvEV4pfXcy{!vi7!#ceTZ0>g+~~f(!?43`nidpXgvB`$%o=u zko=7YMZwS=IYvM2H|#GlO*zIgr4;yUsDG1#%<^8@D}U}4+D3i(r)wWQ8Zuq<6iD|z zaE@gtf^(^6{$|X=%Pz$mq1YooHDMn*f!_`PR>giYioNYp2`UREC=_e%4JQ>YDk~df(!mS=Ro+sQvFo?SC|F<%K<1S@D-> z&iyIQfq!iwI#N&-ST*>gYLE*h|HEkX-y6-?Y|BCXrk_i2%V1%HGE^I;PtJI~=c$t6 zRcsbu%NvXuTNabF!3UinpF$(~S)Nq^-nPT&7-+vXj^CYe{4ay2eKjR<%*MX|eNErZ z>gX8R?ZP?v0=taVM0h%uw*tcNf$BTTi?QcCYJUhjx;#??j1iFCncgBc$M~r>8QE!9 z@)0u>bFovLWHC$vqUd&cTqAL^I)*e#L01}dWkI8`l`e0Xf!aWF<+xbPEuu?PQeO4Z z@tbZfRylQ7IZ96)@9%%WLbt3UHXf8NDzv^CosLF4e)zc-zSk!G^W=X0{Dv! zpnrPsS4~^Wx@G~V)73?B|G^DjQG`%uD(Fnc-Be+Eh1z`dE6udMu$v!MSuf}Wy)=vA zW}hErkPyQMf)+s8i!3fP)z-gDtF(NYJQo(RqJx@_G*>R2bQ|R$n_o2rDKW2d$z|7* zN(&@tLz5*lezmOg3#chAGMG#0V7SWuzJCN><7Jx94f6A!y3k~IksSpSx(CtN_7g)01>!f&ERK^z3CrvIhalq64@qX2z-K#3&z89tT^`uPj|M2kTB_yQjl zYH65NHI2zw^EuRFOb^&QvM%mI1&Et}-$Y*U=6jPh>&W=x4{fm)ALv6>P_C;$fqxZi zdc(Dkk;~HY;v?Nat>)_Onya=0OE>n4;sr|YlZ$8U7AU^g^;sAbEYZ|ZH92dHV?IM6 z*$uwK$vbvc1AZId(X5dhf=+L|fRTzht4tHM^V&tV)&|S;nyjs*Nmi1!jN4mISM(PJ zPH2R5LF_Lz8e!=pWjsRcf>ZT^8-MC3diaE00C0SN)l}i7&bERHqdC(yp{+l+Ce5Sl zLcGv)N-uH9P7x~>0x>?`KS80sEdG}qLsLU4bnN&(&yy5mS!G>J<^m*b{^yM;{SbHS zxh9U9kW2Z6-a&lq;Q?TdUw8R0NIXGdC6WUDdBJF+79Nx?$$t|4K|3}QYJaiB24;sQ z2&qI3ScftnaeYTA!~!3;8Enq%FD6ZL90XDDIXnH7Hvt;>et~~qzr&w3{8I)e(V|hU zn?an=H zxM(X%GmKZxFA zuV28==v|XMh<z<=$NCVJTj3$C_}~{eNa9zv;AH$>d#btNdr&t#gIg;syPhI>_ubv|uD%N+nPbaQ zLy^Vyye!ygQdg1LS{7J!Ecnc5Q_pout|I<0+0y;%ukHTz*LMHTtW1s_(a%_FsL6dx_^n@NA6lnn)a9GxZ%ndOiVn~ zJa=g3;_SvZMBexXK#g{!uMbi^d?!5+F;K2oNf$>1*nQVHl?hMrLY8lGs9AI)1tqA@ zZb`Q(O;bCFUjs+Vg^a+)gfO9ufBp?-l*5TR<)30!`6tb*_ZW_8@)^8GpwOui6QsKU4y(iEO50v=NMp!RvQA!GVdw%4FhmS)EKm zml7TM_1i-Ie#R;dqeb__`juCA>7$7B5L~ZY}2NBOV4U} ziOiJqjkqwb*NB<`kBU*p>52VJWTIA~p;opLv1$Xa@Yy;Ok&Du3q!8_|fEnsMK|GV; zff36@ykA5z`Ylmx75#@eH`q}W{k!qqk@a*$B^|8>+<)Xhu3zfEs!h%f?B2`mC!>?Q%@g0KOt9=Mr&el4R&qzx{5WyXjWbXHsScd=n`epcE zcb)d%*H8O@%4vrk_IG<8a}_@1A2T6H1OD*$kclz>#d=L-?;@WXdQCLaUX!?{43$tp z$OK1HVSffriyb>(Y8+~N)vaUbpa%7?{Y0l_P>M*JtV7dI;`jhJ`Pbb=!+GLBWB<{u zHITuK*t=KCoRW|9KsZ|Elv? zaMLpI0`BN}rX0TW2JwwQlfGGmtW)S=F}A+RPJa?{#-1`7NB18zKj z0~G8A9deCmY82MStfJSAEYqye_%>kA@8)Z$^i%DKlvx8n`1CLZt}3JE9$YL0s!n%H z6n}`pp@_fI42=))SEWQ?aHiEjGIyWivmE|-E4)s!7T#48e1qolK{;YbHc@D8=SfKK zI!$8CKW_lvVExxYXDcO8MnWk1FzRtuSx#+Y`$ zR-#ANMNZ^Ihc#3iFf{Fo2#m(%*lS*$1Ny3=G0JhX1 zpPmrIK);Y@uy63x0`DK(92aj}`zT^1Vm}>7-d9@gxNCGn53Z>9ne~aw2O?8=&@wqX z$cEX`fW4E`N9jNDY@xw{HI5j=ouQ3Ab-{eS)%(M{E{r%;S?HgXFdw4lI2%B4YJXWY z61|+Iwb^>@@x9{IBXo3uKBmPcG~fXi-Su2ChcbEz&4Pe}VoLIl$~3v6pSYoW-R$T; z(FP9r@FrX-B`NWmL!#^PGDBm(tV{Q`F8bMnP0kZmQBz&NuzO(!uqrUW%kY(Tgomx| zsz#DCRDj~J`V6YDHbddf*qz9+=6{Vz&j#k3RlnOk%Wh{`D3AgejYevuq2+(V$FS9 zEdCI#KhgD_Xa`Z76|7jnis@)T!AcbT;3@b4-SBB$XA0uwVK$JskdvB;s~d`8rC^O34aXRG(Wy4o1=E^V?$jMf^&is*hO z*(#mPVt*1!YDl{o;OFDfQIHow9F)r@7;ioQD>lW2MNGvEqf|4{$p@Kh z9t?-ttRHMK)g?~#2KuSCznA`M`kESPc&u$DMka*L=^;}rlvgAE3fV+EC2HU!m6vo{ zUF3lP>t~o|IHQ2yHwKLH>N)E=7gRd?Cc+CGKQ3|gsehao^nbPUPAaZXGHIHbdCo)f zqAzTXwBEGtY1XF%dWG}?ebeZz9&Lp^0lBsnXFi)d|`SAWhInRRvxUC?;&@IX7g*$bJ@^lTb?CvQwg2pY5+VYrTa5}qa; zjzAfBcBx~)#eXD?RAY@%K47H$5$D7uboIm!=4sF}`}wYR*zE2qQqZyjySt=fY37P1 zZPfQ{m~V8%ZQKPMHBvt%CNGCN9ZnbcC+Et@@qHx8NSpT$blSWRW$O1DI&HB zer(ZdNm&i5%b)R>jB!~s`ptT92KOvM0?FfEiJaB0uz%jt6v^MME65BY7@vcwM;cA* ztK`S%rkzjy4qBhEyD?XVxxIbc)xRU*CnS7K0hQ!}j8%<^){v=JBML{=?rwdghTls@ zvHB9;zQr*&X6E1u;NMWYVL=L!LsFa9C&3jTbj1zwYYsLsH&PrF#uFI;6OS-$(%a+| z8`{NMjDKxpwfW}`O7onYNHMlJ=F-J8nshb2UvbvqhMzTq-(S3a_v+0rNw7Z{4ju%$ zHWIl2X8OP}s#j_IHqRn<rYpFc-EUnm)jHMLYSw&tDx2OWLZhcV>RyX zpr1S--JE5b2#)h>hzkihfE(!2hnejL?#Eg0}X%N%vp`AZk^q7=I z#Z~TLrtUNe7`o}yE3=054I*{Ypfy|4wV!!+@j1CGM2TAOH3_>^!JY}#MgNvSM5I@3 z|7(DX#j)lUK(?>F0?5ITksuSFv!?(dLtpobqw`6YA+OZ>RL_WLV{Rx~=IHkV|9?UM zm=XTaoOJLO&d&Z+6WI|}D@TT3XgE0vW8nh>V>XNCEG}1S%1g#x96P(aT(xrS=?~P% zaX?GqHrm94k&ihM!gplnp7{PgDStG~Ya<^7YNfnm_nf%AF)>KUZI z)l;AR{B!)WiMUIkcnVX6(;vT&^n1%+*%!W}DMj;6<2 zEk8zzj>rEVJ%RhDmH=n%`+sy119S6h3hWmw7;-%^@JPR+95Mz*>MgNOG4NQwqTnnB zh7WprPMiBW%2I%uN5F2LXYnLrZjj<7@M^QHg6+77(0k=eAT`LYo#j{AG=2>`R(JMw z2I!l2_wNI9UV0q$&YBgwEu)JKB5pg~5;Z{#2Vf;W)%YB!F-Z`EI)75|81Le^I)T5d zF7u`qsVGOxuUZh=QHvDYPJTc{UD+xWJ-qR`*-<7GIu%U2;b2xStGYW3(Oc`X$>?Vd z%Tr8w>U^H7@3G+Ds|KA2%z*`jI#A8Me?JPQ>2+;*vSb^&m|Cz8+CV8jhtQP8TkP}v z>@2G?v|JYlKNXTn`0iR8-h^DJa&@)% zMugRnK7Zd^)*<98k_R#&?_GWHaOHYYmMGFTJr>U&tQb)tx0n`wLbr(#e3gzfJLs}G zKyR-3gnep3givZnQw-x+=a zHLIT+^s#!?uYVlRsbqrP46e;AbdrkVROY^hf?%W=AY=bPgvOvC7!P?6jPFAy6vb?t zfDYtYi(i9|136+e`N-+t6zvoE781WGO>97($bYhJ3qMfH>XKyHffjRz1OG>M9RLpx zog&xjml+Q$lo|UG>3cVjh91rBt@KMCDmU{yjvIHyOMm{#?YN3-;<@4JfpII~xDozB zv={>D7DV{9cD?+@+{?NE&opq4Tk2SN+-4Zf6jGlEvVpF;g^xqx-ey`fLE)1Y#uhD; zfQ89WzA=Ff4W<}g1XnI+wt?cC9gZx~_0zAeKThq#RP!`=8to5JGg7E~^4LM=-1)LLqeWEH z9e>R?sm5K9&#OFyOtGsmyBs;L6MJZCt6HNI+g2Ok*gft%i*xNe7JajPZBsj&vN)lF z%-IFn=ZcL@kg%1-v7?l#`L_dHauJ#EalW3gYLu@?gy-}1#8uMATC`!TaeAdUX=SyM z_S9QdUbI$~7i-9VUjLH*(k(+t5lV+#et-9>pvX!cX3N0Yj_*QMyimo9_Tp&u0EIJI zxI8RKnpevB8*pVxDYyXKKKdnkipisb{-OMOcegmKsSL7OB2EM`a)3`?8R% zvqY~&qL48~oReS(F>|8*+F;}1A)2bqFz)c|u;`aUj4Y#puq#lK%uw%0r9ej?3xB|) zZkZSuB{yXZ1DW-KTBBE97{}f|%>jlWUCGcGo&ls+!Y9+(0RR{bU`pP!U;xkzefS3e zIpt$x0EgQR0IKazX#uhOecpZS-droSgHD!3xt&D5XqShH-e~z)R*o?W5_3kiJe6^n zl!6<>&&L=EM!=~&_)s|>qBfajlYdV{Ii?giD9{a?l2YAZi)ikIJaA%2aF&}IB# zo(QkWBAaYS*Lj;K<5Gjr=)LS%B*G50RK)mA-AngcA;nlaP*t0goQrGv3?-cNihs~fyn)7tm11{|DI+)JEK z;@5|#S@Su|3T-|$hA8rE1An-O_7nDCQMujMSLIhH6iwWo&!X1CiQLcks(Yol9XX@u zrQ)t+jT$nRFhGpM@Z@uPjX^=!NLz+B^X!a%PA(NDcd2LIS`VJf%bjF)dpp@l=7ze0 zwU~G;w``%Mf9Fg{IlZF`d+?#sv)OsgI_Er#=36nJE{DH88;k)c{eP6}g&t2@D(QZ^ z&F3RWikytTlAMs?;kGRMpPM$9W+`c$mvZSmi8e#q)A#OARg^?M?LrWHHUr* zg8QjeLT8U~-Z}c6p^$|2&tQ;e>{j1LZGFGJb$2Bn6{?|f4KeS63PUr%46ZBQv*#cb zik;S?w={`v_BNe`ZPJ5{=Of^sw{8r$bjPaEPji)&{Q?6c_kW9C3!l~R<`^OI9(tqA zdzA+axq>caA&~a6B;IX?hY4&x=Q#(Gv;JtzZW?zu64MB4!;|!mCo;4~2WJ=Wnzy%j zc!urV<=nr|mhKK2^*Q3eJkDW~mg;SR5kZWGxHF1OZwqT5x@o z3#3-svC4R4vVT0>eD||@Z|oXxwBi<47BA80KHOvkbA#D&I@k=Z^jLZtC%c9|+mv5iv$2y!I!ALT z(aEB{lf_qbvf!OOJM+yTIk?zV4+{z)2C3?@HBppXPgl`Rcj8HE3#81IZ+;hUP%#cj zGFOPu>qJwINUx&G;QsX46~E!E>2RL-RVDzOl7DZrI{%VQbr{W3m!0Jw#SNAM+zJ6L z%Og1gmoi$=KhZg1f}3YYYa31rQF{Y!^{Dl!wp(tmpAbEAvhS{j4APV7bdX%)lgDQ> zv{oMKVQ~ya!jfs%O5r2w6{4%KENw)ApWCof0pl1Z>BfpwtA0q=q<~GwH*(A1{ZHvIGlZu%I zj#dvqj)$yDqB9)hi>Qd@1~f(*+1u0?;6I1snNs$i>5B$qDUWC7qTv!yBJa^$e3LW| zbzsD^5Is#L82N7MzSO^4E*8LUink}6VSkMFi2*&SG``1c&G;&wudf(irP`~d-r{(c z$-F-$;n-pF;9klGIe}~J0$qAF{OS7TWI+v#wd{wM?j&r%jbkn(p^PQ7)RdS1`9Lm}?dEC$fqK>3`mh z(9>%62@=MqRhE7lQ};0m`_I%FpfR|xcc-%GMZyO*#=jV?js2nCUH~G&?&5!aBSJol z&mfzL?gbwa`+@yBlZ|QPSDn=drKPSL6ZMBJ3hx>&3;(GWW^?z=4iOydkyCWtQkX@t z+Y>EC4n(BrBf;9(Kv=yv4)#k8V}EU*F_pEuwtotYcTXh9-th$9Ij*M|>#s`~!mpfX zgL!%04gLbG?Rkf76pV9tkv36>WHYcY(<+NQv~Qvg!@sD**DUI=ArCq~=9gI!2a&$x zRus=}aX1}^d_U$cwdcalseUFD(|E4FS7EefAM*jr?Pq-Zw$9W-MO9`!Zhu){QBXNnlm2va9i1{3#ebeegSpo1p^Tet&LUtV&z9*tn_@pOB!FUhGjT^+MQ|mG*OufD{<3UW{7OW{ky%|Bi;PYE zpiT>bM73sDXa}Y=CQh3KuIHI^%OuFaDCs&s4OjB7=1R%tCodYC8-LZ;dN|HhT*?f3 zr_+HfQjb2zndIfnMB*=1b|ezn4>nHfOWkCPH^9xdu*g>E%$<=iRK(DZ8hK!5hbFJi z`;RfbMQBYu|F}MpysndhyBZ~ehe?H+LIvIbhm2CLRxB76nzcid9|2bN1k!erTqq5p z$NC7l-ZUJ~KiEzPX92EoX<;hTIVR16HOZcWJ)I8|=w0$c6bflS&@J)b-K;?ALg~yqE8l6m}4w z3nr801v;q{= zeTYK%{1A0j%YR-{_3KbLTPU#;J|wdiIx19Lc%U4GU!c+VuM?BM^J-c~jW8a4FL7*_ zcq#WaYT0;aJ_2hHRY6Fr!z35SXZkp2XJ&awws1u+N&A(Yq=NUk6&*IM7KWph%Q75S zYV9h~%@mfa65X7!4^HpXLs5EnclMa!G44C+Wes)DB7Zm%@{n=Nu)wo^x-u5neH-vB zua5#sWYy^2(eSW58lkGbM*RBSTJU}SJOnndHkd*VE;z$(-q#6d55XnZ80X|7q;@;1 z$AEV2-fv`BLNSd6`{2{a6fKKGVF-W2hJ$Z1vMX^J@qWaGm_i9RYJ*#ArWoF=7!v2* z(LVA7^nW;jVlJ{pN||la3~iGhp=r`+NCrv|=-(gk-}^s=%u4A2J@t^aQnbYH{csF) zR7rqCOOc)8%$V$ya=eQA2`Kd>1EMZ5Nq%xx;5PignLezR^}pKjsYwuRd( zV}F1_%Pwv&N1+JYwsCtg7PQdVLG8eh8Q42$&9qRyH4+<~`$ckQYBL=5d^4EDa~qUp zc*dpU_?kk_@Qm&IRjq9(*xuq>-&}0fRH|#d9pnce_EWw&_-?eWNf4{Ea zQ+q6lg&y)MI*gUV{cw%0hxE>U9H5ln$2!%^) z;XQ**z2&pLCAK$9Kg-=MLL-oF}<1KTK9D0y>XG{+c*~^<9A({SJ`KD5SF3o zxKJtUYExnQ662RRfm{~yRZ8z`V}BJDgL5mf2pie!xYL_Z}z$=~Uf{EZelOq&co1oD#$9E`0x`Sia04RIrwrcH{ju=3L- zb5LTsE18!l&y_!F-Ny;eLDS5$w=_9yBc)q7H3@+GfEuK~4zw@|m@5qBpraXRP)B+d zdPZ`SH`zsO07vOnUYkj)*ne>VV&r27up;V>mC@Gp01G6IlLX_#4&13KEMQfINf=%t z0F0gmiDicEK$1rfhPZ&nPatXE@G&S;nQt7WTa0m&TQHBm(H^C`U#Jjv6l!*AYY-5R zJoBP5^9GiaZ7|zw<;9{b(DxvFip=rRU3ka$^uJ8(VnE5Vt2YkxxPOn)6NJ6B2G5-) zmdX>PC}X?)(NB}P>Rce%(UZ~1o4%`Zu4>5_b9Z;% zqJ5{Y_#NDI=o_4GFS4cJX>2ob2SuecJ(3B8AvUSv9wsD^z-F1C&7~e5Oy(mh!}r|Dx91G=t+E^$Dhf&NGskbkYtZ-W^=K&ME3?# zb#w{lIO^onlQ7^0Zy(XE?h{EYyX5)6Mj?ke&=svU7hDZ8OaUzBS$>Wo!f1pyyf&7o zPr07P4YZgj=$V!wT>cu+Mx!z(6OV-{tVXtYVS01pxWdQ1Zhv&pXQPH9l24YBBeZ+- zx|}ZOndsBa`Mf+$=W(&(0_cxGFwWUQAx5tyB|5|H@+v$7h9!<1rv`I7m?x82OV>Jf z1w-di;I=o4h4J(&Gi&oGc~dEvA@b`$PBoN`#*e@dEsR9ejF*8DfUxSQX|ZC96yM%| zDW}39(UZf~B7c0`hpbK0lK&I?TfXF>8|043vxnv<`lEmIxj-#oAbQtiWUE)I^UY(6 z`&WGxcM_Sf0i~t(iVC-?yL)85lr4r#5f7h3pTy=K2WR;l7*t=g83l@#-t4EVP`K)s zE_A&-rA6J&NLKneZ)QNnTsLA_i08S8`^SSF8{_EOY=7r@%P0*?pLJu@X`vb)4p)sa z`-WqL!$?}Y;qZ(B*t;7t>AJ#kEw|K@_!D8q0}z{Kjl;vc{!%L)nWVL@^0+>Muv60K zvxbx1kEq6MW^6WHuSvlZV+PmYMla~3b2wn8*PRU5oCcLT*@1zzEfrH3rM4?j!M@*6 z6p}p3r++bYC^Sq*^g(e;2S3kO*c3Uks3<2||J$Ku<|RDtiZhPXNtc|h@>=flv90Vd zE2L33{UCLA#qW8YpUyKnlsvA6sTI7=yu;W9`j=g}8=~8Dv;MQZX^n|MRuJY`5 zr2R&VPImWa%0HU@U{u?l5cE-*XTOD4&(Z>IKl0+T`~=+VX-!J+or|oQmD7%1P2h?L z{zBfF9c>jB5`D}R2-E7E9u;j3E}0G_b6hIQRcNCxjL}EF(HBBDgA^~zklo!%bl#+y z8-J-P^UYP_D9Uhy6{vOQYARq_jnuO;SxbrmJ<2}13agW{hkq+nu9AJvw7zGXkpWO4 zs@%V0AUR?{sbqw!E7o7EOXB4^dpQI#D99_ULvUBKW z{taDAk_-W-UzhrHQ#ymi3tP7&#x)AWyMJ5==M+CGyfFL)4#Rt{2NadHwkB(eO5Od9 z6u2eAAL$^i-yyHAKTi>6H;3T)fJr@>nh1=*eiC9@nPk-2 zcXOG)1j2kUx;OM^=S&82)N%h`fiWc>Nk1w)_U2idR8xb zMNjW!&u-kr5EYf0{KJ@wla;}NIEKT(qO`h+EsOO`DOQP zof~iMm5w@Y{aTgWlGYfJ-hsXW-LK_}@XD5vyF@An*H(S;#T5yqKCuQqdVi3K5YZ?i zb+GPUR8zRJ3j485)L`e{sj#`!R#6{jih|Z6S|z=>?he^F8C{g#IK85vcdfUW;Y|(u zr`BxMEP=RXLP>0s{b2}a^+3bI)_I~sEEsz8@Eo_Ztl8pcpxQ<~W8-g}ZC?}4lzRK< zKw(wJiLrLV-HxvXZ>!vg>wj8zec5eQd9mL&zdjuC7H(@vAyn%uC=hLhbR=snX+SwW zSWi3H9fe&X-ic>7(=*Xg$&W!kXm(aP;CixxrwLpn!^As>NBk)=h=U+H^M8W)3%d=o_Lo<`{1|ug;tU@sv(CIM7x=Kk3LFUq zaYHd><;VpVfb`8;fq#^UC(_}-_B-oub;jGI=$2VJ9e5;D&zK#kBde8K2@?g-`sB-A zd?j4xVp%tx)2!1}%S=4iYV}y{`X4qt-TJn@G6mqOb7t#~48}3Xl#*BF2XKb5G$WT% zF`qq7g+J1h>sM5(cx1Oy$Dr4!kmY`5PrtJ2_THK=`TBy7EPwSGr5tr6URu-2&;p44 zFR)gNRx!W8Z@lg?_akbI*ky&$-j4QSsCAk7wsvcbF#{D+G{?>AO<249VZCfJ=V>jj zSq`Xh7^cH=feqDc)sXnxirnHZB)@GpG8h6Afa9}8>S`SFAcaB2)!WR80O{ixD6hs&3bFOaT2Edx&R!OdONvI( zwH_(ylVPYZe8SFP7zG=Lw6=T%&dYT*Z5(m5#mrlUTz^W$c;meI6TC4nyYjf(Y2y)5 zm6CDk2F3L-?7j+miP5}Xv40vMBWe6usQ=(?BpLb(JZ{oEDgAF zQGZ4PvsG2VE3K%c2sTE-}Y<|9)D$@>bp#Z2LQ;;M*&#UIz zWP*N8tJJRey(fc{+OAUU)PnK~_YvqeqGs+Q(0jxq?mS}1LfPIQ@=&%9nUje7BjzOH z{sBhZfxnQxz`x&z(HZ`|kM1zxFVu6H1b-htE(_{jHvRZ9h|V!ZiBBQPiH|!)!5@6U zC^XZYi|DkxiYE~%DPX8_)L@VO=akE2thHz#JI1oKY#Evy9|uBZTPB{cIIv>(4bCbo z*YIc;>s!j~mJGvp!y-pFaMGMwWPC5LZzs3gK{q)5c5`M zlKn_IW-egXS5@0p&C^rV;n5AhDd}C-B(=ek{w6T2D|}@!wZZd960#7Z8qZ3}Ewin7 ze14Ktjv=A$;J)3;SQ*t>{=!@Qu8T_%H?#AZzG+q7DHyp~ZksUVW{GU80OVh3AE`A( zmXM;IcSP(^Q*V9unBAl(^%^;*Eq{w@=9i*4oCp45gbzQpKT@PFHx1%_y! ziOjJaT(P`3g_+ixW&lTagkDS(HiGOc@MjkH;mm9-9^y5^sQwh>as9frwPq`?wvBkt1fY$69c~anDq(*BBu&LV`Tu!2q?43yi!atpY%&(g}t7}%n z!WD)7(#dbM#~E37vp5_(-JIS6G0r;lPP`z7?h_how-fZTULYUN(tnPWGEqjCwn+yK zg^>Z5mYKZM&~%cobT)1bgGCkt&o+LQq@V1HNIzd|KkxvF0(D810P0J-Tm~od#aFQG zuz%U*&-&E5~0QS<|~$ zA%BgYTz{$U&~#%jQ{45KnpKKc)Ha(#=jt&Z~(z-Nra#O?g@XcP+H@Efdsv=y^h z@XTJv2z{O#YVqQMR9wZ-(89jFz_j8sM`F?#5l@>17=K;(VpM9%fSz2<=s>HA6x=+} zn)YFPU8I1Xwh9`Bn*{>qM;y?KipOqbCS}5sY?{pYD< zF`mjjt}_6_tCd@EVnkQd)GMs!c;H#9>S)PFc!uII8eta&$ihz!ttNMngMU`h!kcH@ zoA&ls(SI4BF5YV~zh~teN>EbdC%BRm|a_VuiwRsrGpm372;ITm#}-+U4Cd<2_f}Rq0wQDw~%&vrbe^=e5g44O}Ae zbz305b6NlMy?ydqTBBkI$XJ7f{}xqK$m5b3K7ZD=@{gloY%sx`;Ps_}p~!#}TAURe zZ?Y42H)-4P0`U5)x0x=4pd3b9BwY%Z}ibb?+3a9;EY` zJiFMFl&Flp?2`-bST~K%0{~ATI4I=f*)PsQ!j{m3|Dt-qk8IjdtqXf8_zB*l@?=a* z3V%jnLJp|myV07 zFrBc&3`Ils$}5D^vPl``gHosCJG7dsT2MR=&0~xR$s?*vr#JMJEk2zGCKoj}dMcoH z9Hd}}d@ELXHorUV<~z7E1FERG1XjJ)6nOOjoQLj^RLlSAII49{M^dZLUdpMFEPof3 z?l6-KnaXXZ($qi@9;Y0f62N%kiZ41*QKt{D(}wnGbVH6-$#bcLj5b!8*r+<{b8CW# z+~ys_*e_jmkuuWxy1^Y($Rgx9EcbY%3-L0F)+P=WdpLNoAjWtV6-h;apUBd?7A3Kp z+!6DkOD`%{wqbyFWVH=gG~Si5N`C_Ftv*q{84@8UJvxuANj~B^@uj0s%A|uWjgOmF zudg|U1hZBn%5=q}kfOq{)2+darke{`d2uf6KH|lQ0ok_o;Hi*Zt-;kY$$uppjw$MVug9D^OS~yVBBN5J`P&TF885w;Xf$#2m5*z2 zx{_;4Nz9e68#Lb*BQ<5IyljITzW|Ew{ z?;)?|^XxpGcc`9D4tp)=H9gvZX{XBSth&smm@XZ2y`iTduFBI@JAYs-6(x)4hF$zf z4HtvSa&8_YLuDAGPxd+~rO2&9UOrQImdww{SD^@RB}g4mvy^ThtXh)6mc-eo;i?qN zNyc`J#s3ort;G$sx|E{a^$SXCM*cj^8y#jyKY-dp&!6eEk}X+AXI@^ZX=84N}EiEz@n%+L_8>D#VQu9f`HV@RbeC=73QY{?_;p$H0Tr zYIiep@&!cwL~8i8UV3eL0j{gKTY7~9R-2kDDGiZH+(e)C@|04DyOlc}9lGxrC2nua z9lMNilj1$h`L*1<)z|FFI$++6xt;7HwUrt_@vhfKnw0~J1`^3}Al^jaE$)B=d zFcl1!PG`*7T)XJP)))osZK~y@d3yb#m=eCWh|G^sB81W5)FVo-7d9}B8s~JjyPNUD z9Ws*}iyEF2aBa>sdpiK6c z#7>dC&-1FPuzv?vZe8GAk2H=Rrr3dH%H*<>uysDAmR;+O+UYzK+i~#=X%XOl6&$W+ zjk`w2Wp{Ti2+aY&|j6{yMQQH<+?8MfEB=?13#wF-Q#BIs`h#T=j zdliWa(GUgqcdVN@GYfhkPS7dh);!zEM)6yLKdBaNmI@LBfCbCtW3MeniSGPrLrvd7FVD3v9&f# z8&4$qgnt^Dd;{XW5~HA=*5!QJWQdcF(f}TUVygOie>4;#X8k3X%*ac5PN^(1fJ^6i z?xeoFCd0?5S&|*0=fo;X!+3_TY|)%s@o-@R3)BgDXvZ^+_{A~~kgp|8!d0|P$dMv+ z{kPv&Q1gw47nQ(Z1b$^sJIw< zRpEGn_t9mvAlylWFi+e~7p$@ij+hH`n|k-Ljg@mi$aTB+0v{4wB)yw~tz9kh5l)>N z>mVq;2iZ#V1y?urM#S?yXKC)i9Hi4Q%Zqgkvr?B_>qLvfLa#ePFz_=MYtD9eQ{@&^ zzkl(tZ8jITK@*kcfJ##@QJhP};_^xFjJr&CD%2G+cMocNwM45S4@fHPoBu$NWiso} zqlsZ3w?|E*`YJ@hHZw{>BF{eZ>^$u+zzqIMM(9ElaR1ZOzniLj8F?_ zNiBW1@;PTu@!XATbfJ9vo@su4m#~Q$WPg$$<=u-2s7n}MsCTbao!eIH6pb0%zI5A0 z7q_D2bJg;t-ExM8JkahrYxi8W`&FaVoYm^%#kRhx>(`0aDwPN{wEM|(0Hp} zcVe5p>$v38i0QNLI1d7)^&r4*13Z6fy#6Ehj#_EDIJx10u5!GE``3jKD8FO3 zR-kzAS<9^)|Y;l)&&bd6CZFFhhc`6Z3z$ zVs&EiW5OyP^X{{1qvi4SN%Ap*F|f1ZJQ*=L z)MYYS*{%jHOW1!ZVT$B~UHjse&YPZMAqwNLCdDbB1@1{r1MC)&J+`npF0}(Yhbs64 zH~d*pIIuT2O19-LDI(ACTDE^k<(mp~H>3*Bg<5=6NIajRzWm`#;5YmPzWaCvNL|6d z<8a1MdUlwk9HE*2bM<Bb56PLnQEVePGPGbF0 zaSW?4iJ+$|WWl{G$GJe(^K2SKHylmk+{b_@JNUI|t?a6mYce72+g^VhNY*2&m_3;5g$G_zF1;uqm);i+dX}R?x@~7O;bBJ2|_pSt|6;(}XfwX@TQr;hqJX;wyKhlWx zQMtgugf3sH{93&3|2Pm-KkMUP}wY$61O?BPA3yKdCagL?{bfz)OKry#Wdz8bYhADm@lHowcGQ(KUrQ#}|)dr{g4J<>PN3aBO zW^E^PBeYrQ@u&E4Hl`hx*;r$GrV2v&Hg5T>3QopZqT7G$3UwIw+1?^Etvy?J^W{1c zzIXjx*f^Gnk$;?@I2I#l0%Bd5;izyf)fFQmhbd6C$7#PxP$M_D359`;9_Ca z68`4Mos54cT9y_t7$s!B96TRA>FAM@&UPu7uIVe7rq_WGUT2GBB>e)Yn0l=9SLRcq!uy_Js&N-DG?U%BE^tRFWl0_?%^*U~=MMI-Pc&2NC^-zZW>tIC%Z~br4;{_~PIL{9k|`G5^-mEY%pJ z+bxmuyaVN5cX(5x8`Kizh`#74vO`pq8jb94-Z}QcdKXy4l0tYBo;dbv*;TWJ~TIPL&nxT&y@}wmGU8P-LQGH((!rY*)IbH;9Trh3q75fP;}^ znUXIJ6pd@3#SU`q$g6PQyrQ{atWTCa8;^`RQBQALAYnCsqEu#-%GyiGO)r)En%8-e zUo0<(mCx;|F~#mOo~?!ktp9K}m4);xLT6FQ`|>sJI$IM#&odOpi9mD}AqsCMX`Ka# zvO%o3JHVu_BvAKAq;WPcg;NFtEZmcTLgQcL)6VD)!!fl(UsgkO-x_fMB#SZq;@i#w z#_d_lmtOt^7k`vNk9HC@(6+hM%Gu2>PsxFFx4oV4-(&-kUK2)=X40Vc4*RS3*6gj+ zKUFP#X0vQ{mlDlNJxk=TlC7*!AtjmBNvu%V;;*~w;#k-p8P#KHa{@fr*)o2@YIF2d z*r?C5tNhimO{CXGMQ!N}a8AEuSFN_YqBcpF9w(BBseeSX%EGEoQD#S66?gszo zE${zEEA;2jCG!M&EUV(|OUr>c{+Eph(#9&a+BPk&JaX3bPagg2SDf$5)`}#PaR($| zCyc7HH-EA!6>QE1#1J&Kb&!Iea!_UEr`p_!m&;P(slXXZvfqTZ-dtvt6Kq@yGVXBo zDhStxL&^0+M%Q3VpzCo*TQfddL+6AiYPaWx{u~aE*pGPRT)s!{b>xZ6buMJ8pxbec zledM(@_Hd|PWMNn;e+g9lqdTKKkUPgGI{jyL4S4-70LaF@TX25W)I*ZJ<9G!X)+qa z-+S3%V-A-suP!Ud?uXIAaJU61K!wq0E6@>w9&A@B*11)cP~$cghS3(4h0*pBu1CMhrYLmAuHNsU-Jl%velMipoLFEF zd7a_m=-{YZiX%K?=GY_2wuP~t_ce`6`!k{&G&!7&%Nh69IUvTPvmc8F_8;6cCX6#R zd;1SU!5r|=KC;MY-(Ljg7){H+VyXoF+N#Ivns4dxLw|{fU)x_IkiO17h*f}k0 zMJ^@HtCIZi;3(hQk4Iyxf^}6_;eWlV%};7xzs6?}%O8RW%c{Q%nfF8AgOMv3)^96q zw;}DaWnAKn>!EuQ<(>?Na=xW&12Kp8An3`wAc}EUVy)(x*hDmU4Y9oE5dI;mEJoQ>?Ft2^Fns*dBpeG{-7jEL5#|r%sb< zFfS2xj>L~{0P7gW@R=6p>_ezZ;yvO{1PN_1O?ng#nkv6&p-Twf0)J_dCsr}1Ml{AT$dyuG+ke%|h7xZUAuRHBMzz`}prSLiJp&DopTj3ShRE<08L-?SViYKkiqWBJ~^$8aI&Eqf(v zX5Jt9h^y0IU;UzvRDV!mgA6mx)Rf-{^}bMkZ_+DR@kwY=YSOp3llqStM?`2}2uDLI z_M}K*E?|acBB|DARYD}uNK~qo=x#TcPNVH8r{rxnz9CiHco=b4V=`{5akyRa5B z5Z&dvb<5CeZah!!14=3yjhLd*eYpNpEY7j%?da>`W9p+>V=Qyz1k$8M>Y%0cIfXxp z{SbDD$FGg1nHL3y8fp)uNdR9PLz6}vM7gG2$C8|gpjsGBm8u2tT-&g(L`zpBB*kFc zvQ~1wzM(#JIDZEdwPlSAnmcr-ZI#dS<~j+Oikwp~TZW(Bzy3K1jsov^z0p}%Y4=5f z{Qf%nSELx4_;8m$4S6y8J&zrDv>60iib?gH+Y&^E>J^_XrqgL6poN}eE0>(yQ|36d zvb-^T>{3pJW^?SqB~{5Y;l4oVX{mB*nX8 ztN9M4)CRdrDctZjJQncJ92-jB4xn{?4V2c^HBi(wp|7iGlGNZuilWbaUBAz+8t=Rl ztX?kRA%DWiI7C*2{b;GhQ-w(LUl&>Yla>cu5hexq05K`+gXI`9|DBPzA816ADcJuc zZM`ck2Fz;$VR-^|?ewIAW%ve>+@hSq!~~+8_Uh~-nZy~0xE0FEB|?GIc&iTaUXW*R z(TylI_&4EC8QpSV z%D87Xbbd=-CAw2sO_-#W%V;t-j#)Rj7Oc$2BpJbj z;J&%I3VclHdN@X*JRs7RZ334!Zii^>Id0XnIGl_p!m{Vgg*%>{jL)=P`2l&5mZ)VG zO0@g()Ei*`G5Oqemp!OUmlhG*`pttI}H_b)1XSVvQ&rN zgC)_dL;7^8SX!@;WO9AMAcqH1Mh!W+ zMcB>ws;wbaGs(NVvjEq0y^g%Cj@nnET9d4;So9M{*`KE zQ61LN0cl`n9+}R@m3k$u5Q*@+KYxt)CXa!kB*Wg=mCQxV7*|TRj7%Ww(T3KzNwZ?W zB*UQ*`tt{_IgphyAmPYK9dD&#EzdDY|}mnYJ5gY?LNspuF;eTBkS}D+>W^n8CMEIH>Hb?zYJU>jDqhUNE?<|=~AZnQ3`mu~!Tnpl0 zofCh_o7vm!48~aC9yqQ~(8YI@OD|0rcPXu|-(_hvnLS(9O^KMmXDnLcV|9}TQ9wNp zls(r+v|SR@(w#)A41d<|jasJMc|4w?_XzcUh#_*sDQQ0eg;I#@d3cK0JTz?W?lv2| zkTxgM8_1%4VxWXJEg2aZd1ho03E=hf0TpPof$lb7E>>!VD}795QekgPT`(kq`b4E6 z{Rx$;d=sDbURs!pq1^cmF{%Vj1AX~xxIGQ>cPNroO;c7M?26f^^5N%C*yF$Muc zK8^oEX&T?(2+V8hjmDM4UAIO_D>m0?JL@sm+u5n8ydYL650AQrh^-MbY0A+QO$x)< zk___5JnQ;k;G8qzW|zwFNDe$_=OH?3;Y>AoYTeY6*5_<-#0`eS(Ks_mrWK`T9Z#k9 zY(LXJFy2z85r5asHL}jo{>eqfM`{}Gz1VSPYtNO4Q7Zl&7Akhf(v9kt{YiJ@oNvB!6>~RT}l0r$tB(lKN?D91& z}G8Y+>@@kWQ19MTh9h9Sr0#nkLkxW^8rT|VjK$Q9e z8-E+(aNeePULgBpw#BnU))B`;n6ALW9{|IMMYduRF*ju7v$QD6ro+~O&@S#2Wru-x z(grBxESoZJd4~;O3D*p950B7h$p*1lwq3KlO`wn1164-{N1ehbp(!?(q%>sC40MbM zAK2hIJ0aap(R7H=p6njjE`dPASAgCM`b9K?utAzY#wu~vWs>8gz>aquX>SfOru90XyH%SU*u8?GHI zJ_81l3sq&_m{3=SJuoecIXVSk=%dh{YBlIkue8Xr&^>~#e}*%!{7h=p<;4OfdwZV6uk`0mxn)o$~qvBxUjk9eptkmvx)F5E$EZ#GaTx z0<#W?-aIF{%F|`jAeq%sNdWK&CS6ZD1v9ZZdH?f^c41&|Z(KQG?K6V2$()x3=Nq@!D8lXjcm1Tv7``lAly$viL-(yX7CjxDcy6P>w&>z67UK^&0XH-uXM)GK> z4oaza&wkOm4?_Lj3lN;4FjXk4wqBtXnCQC77t|}A=jR32YsV^rxMj0YOMk&I(0x5r z^vu4tgnGa2=g}}^kKkGr%-Q9Zbzmjo-o90j(7hJH@Wcw%hr=UT6lQi9#{E1V9u`Oa zA|AF81!^&)`dd-|Lko-4<^eOx%k@9YbRLZVx*1_FvhG8otblW3 zJjA)a^BVn2xHlz9dl(yVwt0HH@WhT{Z*%H?D4QwwL%GtGEm-SzpbzapzMG2&>soHQ zjHL2gh_RQAd#sT|m)Ws1b~hi;W`XZC%=%1Q7V~$`sG7 zjdwCNKrLq2%(S$SGp<}lS|mX2HEj}q`7pFF(adJA_kXyc>3l9$vZW?Q`2n-voc;}V z{@_z~T`R!_dw*9dSlPf0;*e>98%Rg3JQ=gKDUL{mNti_*sGg!m^b$3)UZOZ!a*O9e z<%DZl70Zx{k(h69D`N?KHMMO==DW^n1Eo}Aqw$AzyUDhPb{h^K-mC5GELwHy{{dR+ zcg8L20d`t89xML{AFuq@{~`+apL~f8$E~lY^nYwRwy%I&Je~U4dBNe5vYhDi-h;9K zjZ{2`_A{Ni)t*m#*+226^!cmbgKeHLEx1ijnC@e#_JD~?zp)_%a(oTs^m+rs+T2lq zaX9%>^zHw?pStg-JABUVPUcQ0b>j^vmw!zsRUO_==2j=MXQG$5vUVp+r<0_D^VQwM z(tqBLl~%`~Gyj{uJ{SMw*XQ~l^ZH!e{q@;Yd4as3SGQ0c2}Pubz&wOSLLr6e)%v>{ zLW?(J`fwkM6(HwHG&qe5;f8kDNdZS64xq?YPt%_F>$ZpMZC|DT`yQFcHZ8?RW;4YU zQ}8WeQ#VpvGn1@xM06sX;9xm3#VUp*;eYGiw#_gk+dN@gmq~hI9rL$R=@5iH-1Zf6 z#O(Ri0*L*?UQ`5dE!RIb$?Ry ztrm=L{){Uc9lK-M{0QtHYSFL#0~iMA3s}P0i_7ZtuI`50vW}~FyEvOAzrj5R1_rko z_qHRoP^D$(MOvNb1&-*Sd+Yf>;li^h^X;`Uzm?V|HQIjZS$Agtx zQT++irc2t}rJdz}wA44M&Zj#@-`|2yA3LnIwQ`Zw`&K6VAHnuglm9$L!GCSIIcs{p zmaFs5^`B+*{tvJyVlHS8SgdQy3GJV>Fw!2X?O?#De>M8QwnzViZIAwejOKRoaZB|4 zRcz)4(er**z|~@SynxN%3Nn?u{0irrLq!SzNE4e zTKR;^pT7CzmRDQ@nNPvIJjp)#KW<2O{&Sf zAhF0bjV44V6u5t(xSM1A7}x+xQh|doi3I|QtHH}RZ(l!oAF(JgF&s+yMfL=1#DDp)Ofw3YWFXPg?v1x! z9G4L7gf_YxO@hOE0!r*Z5vsqfb%fDpYJ9KTfYmpw2c8BZP$!->< z7<$5(!rtD0Yc#! zaeru)3|xo{FMq@O)c!`p@eCQc*IKkfv#+7SLGeg-ySr5CB@1ik0kBF5PL7v*$5;^` zgfz&=7RgKx@PX3T=|J8ANC&4*rtEK|=cqdYWUCJoM&1+c61T z3f|GP`-h*$;mzk>FFJ#2cyME=7OzLpP8eM#ZV@~ppvVOSi9a6MK;p2GK=CDZ#&C85WWUZ{ z!TcJ@Vef*dx{@BZjF3^rt5y;aeM;;hU4_w`ZlZXi}LJ_gvXsA5coZjA^9=-|f zWs%c2j6TsYS5{~rJRao6GVEIs{eQ>OO`??C4;JMDh?aGNu02mzs}?5~5^FrZM>T~w zqmSA?h6&HnWfHv^2=B1={RAPgPhAv=6dP_Yg>f#{{_BhmQbZw88jV@RwiPp?Pg5Hb7q)z}?G9niALq4e=f>cf<$i5lK7=k! zVNm+4W%ry{Kwa^N5P08VD}Vj}X891gzjCS6A{h5JdlA%%nzzDluvBW_wuQ73!UwOc z=psw&WkoQwCpGN>CvTJOT3fjdB%6M*BEgzU*c^%1$0SHk>vE1!z}J+~k)`$690uWL z+S}TOC~I+ZZw-GjpNd;5u*`jRD8!7m<;1+NSxzjs;eQO-yqr|Y9hZ~J z{DYSh+pw0?6m9uegU?CJavE&y#tQy&M@28blT&(OP>z@I5liZbpbful7nKv{>GigR zmxJ3&&XcWYdiH|oon~Hu*E~xvF0v{~*XJv*G>qjhi}&f`4e!ut&ZCHgdW;$jf5M6c z({gz_&)DxpmDTu6vwz5o$qfId1^bt2uhCEB=h-jRLpvGg@*1Jv88WSJ%_eU-EA)sX zCVF>QPB|Ve@=2w5HqUjJ?&##8n-8F4aC3?<1|tglX@Tja$5g~Ej;t3K4D?_m0;?0N#Icfqey;!`{;h?hB$p41{GtA8h=C63IpZ`zuyB#!ck z1MIFfW;%%pYEy9kPs1_k^2(dlO8SN3!4kUxGH6e6Fp9<|VgSBLnxXh2T5JeHanl*GDGj0RzkNpXNx_Owq0} zXvol=2S%&84u6?&Mm%c?tt=@4i-OIn6*MKg$brZJPNBPYBTe)!uuzX-RRDMwI2ah( zZ(_dLXd#eogTsNfMzmf#HreB4v98aXCPIzEaS)_aK-VXYj>#TkwEj?0AtZJbDT*o} zMl7II71fF71-CpRasK?eo1uf9GTKp^ST)i(*(Sz|VSnnodPpllCK@BqD!E^-GTbuH znJ&TYEt!GHsQ0u8x3^3iFDg*cwN7qe1>m!Y;R}8)7w}^RwBu$)qRuS&;rsDufBz8u zPxX3Xb<8~F49=?Z0uSP6?BafcXXiAFA0G6&S^tOc!-(!IG0-Gl&%=Z955sM%$wcv? zC_WtjpnnPnK`#@a4<7Y0r?C91zJ~~+<}%m)N|Rjie=q5+8itwBK?t(PNu^m%jn1eQ9?|x*-X7i zCz&X;Z)A~Ll<3`kvlRXoSz^8z)>FxP!ZY{Hu7BetR&UW9K$D(|H8RpCO*I#dnf0Y} z*^5W!+;Z1{60M9yg;VW3Q`30g$eR`t8>XmjDkd@)McwEXrI%a6B z;(vr;!V&#E!*0YQJ%e-?8}|D@vTGe~Xu=J3I5@N=;27iVxYQ7%4vI%#ij_7^Y!qELODpB!V!0WKT{$+A-5!~mLU zrtt`*XN9DPlt({Ndd`ONWInf+PPU59(tk2-5K@0MNBz+%tZe1cJlx%7wZcJ$bzvjG zQ^OP|_A`JCFj|EaLdvQt3u!_}<}!_N{xZ3U5^;Dk4m%Vt^C&d7R(W{G;y!@g-GGV* zilgob78;iEQvp+jOBi)Hzc;_`pp}7K-vB3t@hkrX6w>#hbbxb=8_mKN1G11oS$|X5 zkm=(>Y{(QgWVbj@akK28(`fol6S9*i^a?4yGR3SjTLI{BY~wC-P1&yal}pcQdCf-dnvn?KJZwbRa+{i)*ii7u39R!Da8+zXXH~? zgLI>od=<^=&bb1_K-1d@IhU=m3>nMOr0&h7g{a3!7dFM}NcNzwtZN zX^LSmnXG4h?=z>#Dx0TtRf{sGNyFny&>tCzW>;3Tx(kybU#cIvJf$~3;P?W-mIKY$I#N0VHL~_E)g>mUGWd(+up8ax)C+oqp@Pq zrBEoTimk&p_^~GuPDUZp|D09@nx%K)J`5WQ5V$<=27h_-_Lo<`{1|ua%D&@9b7p!k z`0j)_f-@44civ@LXVx@}cyA9j_}@^`?R*b*TfHYdcnoIE#r$7?#(&cJ7pA5zJd;v~ z$imV;Ah=Y8V-dd_>+1z^$LiLFrs<_k5!c&-9S;8&bzZ~&b)J`<5Ac6c=coAMBChK| zhTScba)6?kCk-m1HRW%xO4YNp20ZMQX!gSt>XCxW#dadws4V8*xr{cswEuJ1`XgSGKPMhLvvH2K9F??4c-i-lTsBBzF{_GH#h9HLeb-0*u=9Pl3jn*^Gx0E5?N z#m5)FB>0zo{Ps?K6mzZkY?)7UL%s>9}Gpd8n*~ilt^zjYYbX4x+`j$A| zXb#3X_eyf^sejJ7f0Y>+)9@FD&0k{(#-D+Fe0Kd!cwd*xrAcAv@s0V}?N}&X|595b z`J5pr{aWs+{o2uH4yQGxY}`B-kqvhcmu>Uum1>RsPvz@`?lu~)V}A~_EjhmeZ7Nz=zG5@WmwQ>h zLbKNX6WGMChO~-XA}E=>lkqNw2MaIEd}3s}xrlP&)Xn^s;7p}^P~()tLX7tEz0q)d ze|U&7Kg$HoYRkh>cAviBFPi*FdXkBC!EK5Es}ew8{828E-z*uGX1ieQ#&AVKsFPnq z2f?lydVesPXK5v?_W^~`RE05eb3IJ7BA2eeio)fcHN%-a@onU>evW1Rd?T~%>43{^ zZzLIaQVJ6CI}|H_{Fv3R%jps$)xHSvgu7sM*{#JQ8G~Cfj`vLo&V9piibw z+MxrplfwUZ#mL3JFN5D4HXn*l>ROoEBJP!*klFgA}fGx-hIN&St zDyV<3S7coCv;2I?@`23>s1InTOnYMRx#AuPk#_k<0jQ7Sc-#PjL6rUGdayhhpKoAq zN}RxuB_*W+P?W7!UB=ctATeUut%P=q{)%Nxg{Eg)C&2L%FC(ILJWlS5xJgN(a*ywy z9Dj{s{c~J!XIf^wI4&IJY`tI@j`5ik&4@G31q7Q1CQ}BAr2H@7es6`S=V4ibvZlf?aW7Zc>RibUBTS! z49C8pLHc3N76!d=>vV(SN%;W>e=BpqXpbv`Bdx0n)okYj3I{bHUB8XDWS5ievwt5( z357y-DV1Y@8KpUz(gUUZ3d7hFH}c5aC%|eb2?bmQo2G3T5hG8&JoK4Lo!J>#0K9KW z#+_s0dCNou5|>`lYtC_*uChoWLTkq0xfBVgFFZV};YdzqBn zLFq>r#uS!@Hdoi%_;GO(;r{@C!nn&E@7~__NBAnsTqXhcQG_9}gv7t^aFp`(a2Vxi z=g1nrNIy|fs4jL&CH<78)2!->D2vlkZ7}VmsC%Z+;-MuYdT0BcLNz zrSwm!8GQNC;vJsjn<>;PE>)Oa786sC7d3)EE`W4Okw&;8xQlXGXQ+Ir!``(=of*~; z=rt~zKT{z&OXA~^-k>%*XS54!-6$*Am)n^+3YJGJd#-ou4}D-+xDtE#BPE2+@yZ7g0M8N7wkJbwpWI}v>j6j)4^D|O(2O4+3W&bN7Nb0UHfZeXhzz3}Pc zi$bWk!Ra7wC_4CGo&Az!Q*@7@kyARt+?n~xF8LIxjV_r71TW?s3vNAPu6%4$*v`C} ze2*G7T;0fO(su-EGH2&7jM(L*F)k;%Dou9Wz$N7bwkYr1_!O||(|;-xIV-8iBReC= zs;@JwBa*e}q9qxF)}+?tV_hlxMwKlc-GJnTh}&;-={=W!*FjHA3>;bF0v8nti$7W( zj*iOyC?*Aq(YQRU$2Ck}aa{LDConzriPC!WS!Y-XkM9b(OD_OLZZ6~8gROWOqev+> zYg&oNf@*LnmS<=#4}Ux2+85|sok%m@j(#FFk#qW@zMIiMGEQ~77s+U8?oD#vdz0Kh zIoi>$lKUqcV^fP~*{ugT$Ie=aBe5kXEGFMF@<@K1A3i=k1nlYs@#DSI!^eC1VG!#e zm=i>$IVsP9|6;09?!2gAo^69;QgdJI?bd=7ZhoBeLBW;>xUq%Vc{C%Ti@u6)+0*H|C2Wp| z6fyXCgkx?HX@B8naeV(IN?T_vFBVH&-E`~KC7En6ZmR1W7Q#9SSW=XtU1w6@-}EY} zSCg~>+BFMrRw;8PQ*mc9K@iRH0C6=Xm&s_bKOP>UpV!0e-twr+DkXoRlPsTiArW1v zP;xZoZNtR`$5rEc#!zr?iQZ7{l6xCUMo{-*y}LW&c7Gjg9KNR0D}MzkN4t#4)Wv5> zgvs3&ffb7;ycOOWwZ-haVO4$DDhg=0x{wIW+%jo+93mn|SQE9kz9NS4XB#m- zx=0+HKa0|65{?6O<|bUl>r$NKixbG13ogmZO1N6pN4VZE7mU-HMi=^>S>>!dA`Het z7wWNVSbqz@q4$>y{2p6kvQ3nh9V0-_r#^Oi!TPEX$w4c z9I|f_>qRh*({8ixx{8i*MKC~Vwqe&K^w#neUw^Oiv zNPNc1DMHBoAp^B+aP4cBwG6E@ufL`lk^^5a%0)WKo9kq_ibe;+p}ML|y-n&;&}lX3dVe z_4eBWyY_TmqUm@o{Gm&=80t81i}BY~*neS0-A+eq-vL=Nk;T!-o_)}e}O z>nPD`-)bRRPXK*&h+Mb9RY}24gMtS?JAm6kL3E!5lPZJ{p#8BUVZ<(Xt0?sdA5jef zKf6s!Ch$zSj9pu5fR+pAr)d|ZCRHzp@b5YQd&>W&y&w#v$%Bmz1#CyLV+vd#ZGVz= zA^aACB`FpddBp;wlcVF4SpSaxq)cIFB;s>euP?R!@>0>uOGpNC)}u-l0;=L0CcmT} zS0`{cfg4M?xPDShnXVg?JY`YEBtPyuOF_>d1*|QpX0ex$oo?zpcZO(<#~w>}MBx4JXQe7EVL8r{y{1lyY7~^f zh*Vv$DG<$I8;N(-4~~Z?u&IcIQm7&L=CA73@y)A<@PuYe;~iMK*xRt)kdPg!W`9TTjSH(A?emvH^OBW8GlfIjr6kL9|bBS4X7) ziv>_41@O7{+^M}xuf3-uwZ=Rl7gcshd>I4kB%Pr5@9*CHGGO~DKSSj? zGWFXJd%@#9gb!rD&fArl^cTmQRfK*{vd6w%z$Y^kFOME9c1xi}J-bb`Wa6%h)KoUB z6>2!(gHfibZ6#ApO@C9**leKjKS24i_&-tkvgRh;WLt8;j7vtL?q9^x$8O_`hh8!< zG!-w0FhiE&Wqy^--y-WKlrM#TiBgsnQM$?sE-mO6Ke@SzM-Lth4x(%Jm&+)tWdG3* z_XZDs&@LLuO%?AS97N~z?Fb@88NdFf^MS6M7KOe#8G_5|JVo{#- zG>9&;X$~xjN__S_h_ug_FIlm3G=`zHhYzr3_5FxiYO-|BKSfKE>y$%0#g?X7wx~Z{ z%etSw6mx3;BK^_*=W6kdnjbwMJ$n}5t4V%d zV!~5czkOCkInOU;hYt=OKHbNOO{bZd#)FqXym$irnv_+65m)6@K78=Q!HegjL0p=P z6c&xL9zJ`HvpLN#`1Cyd0sn)MXgz-T|I|2~J~WxogP`(Y^7 zOwaiK(W4)Jkn^im{r%I2k6yfhBI)Ns4DS19FP|Z5p#@V@WlNfy?_V-}GrEt7&tZxo zp~QG@|N4k;y~VOxpkXE@;Fh4S(>L2Oykn2}j!|3V(f7|@ym%_cU?jhM!Zs&R_<7b~ z;(wF_QDE<%3=j7AkuLFmKYuycf3p8X5GI;NAPn#y?=zpVC(oZhdhw9c zD%J$0zI=&@i=ER^|H;c2F9;84+O=KubolJSbI4efpQjR|pTZWzy3g_orZXq13;Tb6 zpD)IFIiF@lRpKb0K6>(jC-DGmRFM(4{5{Cxgo_#CldSg46hUdI?+t&De{FFCM<+2veu?3u^Mk4?jHo9ug(mzIgFyA2EQ?R_iUG z#iJ)rL?dNIC*4cFZ^bIT1a!bzgM08qkd~K2SWM{2tSqwYY4({V0TltTFMrD_6W=d! zV-{111uq{wdGHW`KF@&v!tVnZC(QC`mY-9h14wy>`8n{O7v(3B`0@acwxU7C?SiGf z#Bra`%DN$FOnk(8B`4zLlSjkv0dLcy$^X90B;1o1PoLA=78wJ3Nhr_oLd=icSCIYW z`99LQDR3cF!Sj~~Sb(7l5`Rx5OlQl{F)j5B7Lp|$;3mK`94HPO+{;IZZu9H{-vINoGd@o* z=}d-`9_CmL2=N4}EErbc=M#TH;aS2{&7>~ir=@y6M@0EcP)>5c)xCv5>>JCT7qz)G>X|F z`F9{E)3-l9RT=zAmYYy_AB5r;hI!;trvpfYyI#``BDh=RcwsD1;qHGN{)|rG%2=Ru z4DXC9Dbv>)d(zt4fv>fPTeeml-#_s*_)~UewpS)iM{6`Gn_T8c5)<6txx2CVspns2E2hMKQdE5jk9do}!x`+KBY zU}urmHM<-(vrNAk4myADq-(~s$~p|S>$p>$pGF;+hzNhB13oTF?{uM0*dy%EX>^>% z>B%Z&HQ^mU_6YexXi0?Mj7~Pxyan6Emaf)|of?t|P(; z*UTZ&6z%Cfz4VQ@wV8=lzrAK3neR7MIk^gNt6i2J`s77!Yy1_1D|Uq^7p>{>D}*LBtA%bkXFIbvVV{Ce1Cl&X!*2F<`soyY#y;dVyYG;rp&E9A@+#08$;-}>8yr6%eCas91t*2_N(q;lzSbdy^ z@`&nw%rPFr$NIV48{_a3esH9FX_hZ7AW@vv&73IB~P zGpNU;D%JzBtpun9BmLE)*F%`3d7Jx?1RB}l$gP&WYNET7Nc;qK*1QbX!< z(Cd!+h@_|%1yB=qptq5#mgkkhHGfVK4N2cxa_4{1vpiRIgdKAaehVvj+VysRBesc7 zm{D)nuec=@zw9DH5zI+HZ%IFGNhifI)+Jyf@6w%#-H(agfr;JnL^WwpGJGXz;|E;K zF}&|;uGHEfJzm#bP*xp2o7wo@Qh?X$DY1nQ0%1Kttk^aN#f)cj6gr_({RJnYc0W-w ze~W*bJ;&Tv7PGro^K@_5+}AWujc!|P@>@GNp=?hdH?_#>ZEH_E6AYz@Ee?;n9T3fi z1EN`XKs0L(h^GC3Xx1DMo9BZK^XpC#rIpsc2Pg`mRBWAaGK5woBJB)1@)y3vPs_QM zvq-0?-HSV)dGppZROq%GcdpB2)j4AGzZZu0kvr6}bHOwsC zY_xO4Skj)H^omY~fE#1x;mxY;04F$49oEqFURa#M_M@{|40nJwgfT`Zvu&7uRz`mt zsSU7Zuo`+gv{s)mFVeZbHqC~0o^$N3fzM2&9BB71-C%R&SwxTZ=BD!Y)U@|OUDdX# zrllua)H>eyHo9RK(YnI3#6gB)>pAzIv<<(f!8->8b4EmG z8-aP+(0kGjB&>{-+)xFmh@>Agk{@p0bq#z?&$&?2DWUbd4aDp<$rT_ z5$j(1*Vp~COtWl#%>j5pgv0+BFExTbp)h<~NsPJ<=oWcrCn5a}Q zw{Z7|5e<}!P7DPtzqDvQ_4*s45hRDgN%Jr{%>0LRsUr-$^S)dHx22U)3g8(TVxt+h zxbBjDhS7kGeSPOrDzebm6lH(Gg}$aF1sU2@Q1`E8J-V$CmMDd2X3%!Gi}<&b;{H#& zq*K_8ua@Fw+emR+h2@46x3Q$SsA$i*cCMjNh#$51As)c_bB|BMeQ~ocF7?|7 z4}Q3papytuWoqyK!(lW{M)Y?Me;IJJ6m6jK0{TpXeC||?9GO81_eFnFjVnkj+uyV* z^`m{b(Pl7-(>>DKWiR_?5M1cXUr_8bN4(yYh)r z+KjeybOTJ?A6)g>;~;;k!-%x&KE3Y2a(Q0&7;CNY7?5)<6x$M2lK1OqmXv+;l|)Mo z!!P!`RWw5aru-K%=DdjLTgAu(hc-kbM|Xp%_uqLg~mD=0o$ zF2ClK*wf!^P2}H;NbB=h0kj$culkd6&Ex%#uZPF{qO> zs_#eXB539j2`z1{M|8q%)YdsgKaTzzu)*Q(;aIvQWqK6Xh;*c@(7N zHo%z5Wr$uhA!#XnK~V7{BPh~$|2BD55EgSI<<2x~$m1nqQ}A6c>wOmtI!{nl7}BV- zHL6O+-}NvOdtNlqQtvx@FamIFf=bA242MJ`o1)JUQhx%fphY}DSAB9Zc9;v!DMfPh zc$Uc2HoTEp~l&1#`?ttKlwLi$72^8x+}%vcjonNN`; z>0HFjW*!iZgrfyBlc_-;3H|Pv=6sOXZ0?&-pqYPJ3gh$~1w;g6O^dfErx}hBvdRl6 zg8JA`UQU-R2Cb+p%vQDrgt5~z?efeg?fJ@IEn3Jr1t+@i)E2@kRZ&mI%}g(c^Eof zC^h;cvEM-2_1J%hkV-pdOeJV?l>GqAPY?hnc8uPp@S^rJTBfpCbg(}(i3IsDLR`s( zb0MCon{DLBOLgD^erlEr3*Sx!@W^|Tl+iK_$JOCNVg)+#O%^8Vz*UPaVU;LA==Og? z+doWygS;*+&GE@|cZ%Mt=gBgJn=M*yTxLZ*YqGp}&Z~s3LS}V1p-wEJUEXQdS6se{ z;6ZQn9>!@z9&Tol=v`bzs&DaJnHU&&;kPwVw}U(QeF=ck1Xllo@dn!d{4XHSmPeQX z2~E(;dx7$Zasw$5^ZnB3zF%&1_uhX+Z^T7aWiJUjonQ=q8#wzhFe28l@;d|XjqE~M z4>}Q8PG>Z5r)gDLzpyI{R@k)g=-y+)GiTg)#`6M>k;tIRi0pOuy8jh~x846b#(z%W zALLdU(g)$*Ig&ITHlnnsqiNTBkj%g4u)9bc%*QAL0n4i)%g?NQxm1KNu(W^2Cp4$* zVwo5>%Mz}X30^B{!U>E`dtxkjc|1IU6-^3W(a5QYl^i)GGZF1F?~g)?m&HB{_&mba zv0C`sAHgs9Cl+Z^GNonqMvnx+xbiZRb#+0PtmUBLfk|GW^_) z;=M5PB8x<)Cu-rDv>0A1EmYkNv>3zi1xm*^tT#Z+HrKO4Bj58PzG1_Tb4XY=<=d>z zzhqYLQ1H?;^Xx6fql|CZl*9#e247O&m%r6^5tyL#Ndr}%E}N`Ytwet`hjG1%vMG~o z#5d{GoQ_Dcnz6=pt|I1Tcq>q55b$GFE*E!zrx4ZKfU6nTfyL~@+`{>&rU@ql&l5QZ zJOuW16|p$9@eOQ}vZ9yT8b9Xqyv`;>EHhE{Qd*y*FWhD&2L%=8OjqEZz^!GD*xKp6=+T1 z?Rcmu!2QH0)d8a&x?L@Kv91dzvL7we7%`&9kWF zFyi6 zFMN;0BCnCkn3caqlA)5k-JK*i%)2U}EOFG(9H|LF)%bt-4Sz^yFF4T|Y_dl;xay(K zOz(^={umPYVFtf+?pA&hhVG0Q?->M}S)fl7lw@7*3f%30AyeZKQYKd}0U-T5& zAu39ZM)rR>H~Qy?^a)+ej8h;m_~> z6*Bi4Z$boVQns9gG^FM0#LrIRoY{CJ~eoAW>HZUA%vUqK}7BL5J zh1FI8D=rp!mgsR)(OY*!Vhz?zei6cdD8qj#S;_)`hTNYwpy7-q=b5g)ou8fYRbROJFRoN=9eIRfSs_rX%3Dx*EKA($)bxD2rbQi5Mj;StWw~7|S~Y*6 z_zy(Ec@ZyW)XZYLW@IH{$=czD5t_jJl@1`pP&-J>r3d8 zixJbLL?1*#R~g%w=1ag|-j-PQ%kA0&Snm~iUZIHs(>8{4x{RD7RQV0 z(b+ZRKEW4U`1>`!Ql;(3-=Nw>+J5o`-*DjX0Yv@wIIRia(_j#ZlWsb=XxCs)j3iJF0qa=2QvAs zgBDz=+H<6Sq4cO%@knOn!61Kxex1MWaXpERH*;5lMvv_TsxT4<;_sxt-$r$!>o`j< z*c}VBcAy1HIfG+q=i2+mPFsEBM!Rf}zWN$!vzK2x-HA04z!u*n=P=F4CUXq6x`+kE zOQHdsO64RDl2R>6c)L;^vq7Cy+>eeULyZ6*mxCeN@S)-pzB}(xsbPPsQ<;NKOPbB! z(lSMjNXI+iXN>2PwWi#sD5)Z*r|L#e44c*xQRd6_P)$0g;9O< zM?Scw47oVw69@|zJHu9JOo2A751cPbDi{g z^t@v9r=)UuW}-3^mbtENk9EB|t_oouaI9+$6+y9}N6sY`_%>M-=*LTUz==mvJ zEWiMNmz?pisYn(GV+#KEho&N_S^h)5Xechi=P?=-iGVno01lQm^(l}7R>fDy?zZ)RLKf$i4a^CdIYz)TwyN#wUsPvs8e?w!U( z!0J$%zmkHPfV6)`b(THgVcw80vJbLccoCn>wWi{cf7xSf*3HeFQSi%NNxagBoP{*Y zfR{H3AfFTCV0;ngq? zSHL6VnhguC^I;u`u&ON8du*9k9z8C+6g8i?e?juF&U#w3Em;8%Hp@3yvgm za?sY#Kfis|)_6S;Ys3~I(2l&*qy$_($;&Z$qNKXR62?O^p7;W&*X&#q{0u_cVg-bQ_ZHv~H`SB^aJN_#k1onn! z1tog_x4&|)Zl3ga857=N`j8>RGJU9!pM?Y0~tqpa{VF@N>hr!jVY#yRrWv#KVa!;9f92$@kNpvCc9$Co9 z5~VT5l9MlJmj5FnAFZj&a}i!%YhFrWgwTua>CYwL*H;WaNxV@;=x&rsynOfb4o(O1&0w@{{4=tz3pm6eP@M(SIDGq;8H`2`b(doq{#hL1+>_jkUhUm1CNrISY zB1P@|wI$lsy)Asoi(jK_=wm3>Bh=PpXfIO8&+Sk@#NwoDOSN_^0~d+0h>k)|MItGb zOnv2+Og&|islx%2OdURElBvV5m}KhkDN3f=@Z(8_PJgz$&d0d_c z23qfl+qkEZ77-_8sGuZCnW#^Rk==jo$U%kHY>1WKrf+sFX`K_%dndh56Er;8+c*f0 zt0WU*3*ybzS-DVOH0QK6wq&~o^_6h8Nb$_;VlkKa6@?grvp#7F8Wey@r&bY+D~f*C zVqghBG&qDWo93k&t2uj>WP~TS$=4Kf^MbX4!)}c=M;|(b8^IT5wIqq5#Or^R&5-jt zJoImkUND^1JLrYJW?#8=XJ+^aeJ*4N_!baR+sNqX>hac( zhlv3@7|k;40TFgCB>8PKJ8T)eKx<=hMfh(n%ea}%;oMx27p^(tKM#I z4BR8cs5Pp=+fmcY8Hs0d$J1Hmaz{~npYgb-z()2imSwefn(W1ytg^=}e&hE^wU-z4 z^KWVLNw|1c>|dolF_}yuj*Z+NpuqHXEF6Ow454KjlcP!mVp*iz(IW-=+L@Lz#H`}y z0{cB(gf-&Ar_m0*rrLkg0NF)WVaWzyc2OS<5x{$-N-}L3)?^u6H7l#;C#hV?EXs^ew zzgDs)YgyYBI<^?;)260@*{7WK7PEGY#heD;D(?#HHkpPiv0^?@+MF$k^ckOE=2+ga zHkWX$Q5EcNF4Wjq!}aTXt0GL5CK%deOJn7&OYqhWzEPjBxwl)RQXLi|^V~M9e-a$) z7y@0qECnEk&P{(wcG(dfK9kUF#B& zw^=ZM+4^d2*Y1X*bvj!@wErYI0aeG==|kP4HQsRV$D87?y^9SU5-|F!W+nGek#h ztPScI3-U!I5$aWxNp+80se6QKHtYo$=z!boih=#cn)VrL;MniD7Dlw7#@vI44;!E; zQeHTc&jo*iBrq;(8we8RyNZ;u?CMO2)e4T4?iO1QDonqkMKF{vTF?kYzln1sGhsCN5k%NSi!d1Uv@o z?{A8qiw{|dk7nf{E{CI2Qr$EFgT1;fzVkRyH^5*6y(Oy{fw=h`1uARo-$MPtBpgQGhhi`F; zm$Bl09C=Y14w&X7l~C^;Y?=B_Ab?Y#AjoInDWX94HK3!nTSM?-LuuD6E7bh90q~L5nGQwVGRaPVRG?Piemru) zW(^j*%#*KlNxC~C3lk3yf(9by?M#7mQA&R(-je0P6A3}+m}%oRj+$5aZlB{n8UDjv zkaGV#8ex0kGh;De#pUr6V=gf>%*5?UDN z^B26CAu9{GPwGQlM>xm@zkj%L#x^4v=L$M+Ol69TNYM~yV|l{eBEu~=~8weE7b3=dW2qb(Ws@c5{xFSKpf_F zmPBUT?6IxjZv(hxc_ADHmSGXbA$bd{)M?ei3W#}QV1et>5@{7MqlEoMJjH*`I8We! zs~N`R;%=F9|6TD_yC0I_VqC1=Cvh>EF_l{lJ;G31c=<6tuNAOOiKF=_epc2^0Af6q zXKmCcSDOCuSecH@2!qdhS4TM-w{dheIt3Q=*R}lS1Ul=g@9(OipN9{zla&5E%O5_} z+BP@JKsA=Mi)cv4=4jRty77Ml6ilrx%3+HJ$cV{p;5`XTiG&rxPBIH$m(c+5lSmC? z9|C3usO{`T6zvYiy{n+Rsdyht!7X1ribrK+MjMzU>Ac-L*e`-m0t^8A60LEVg>*!)eRO|@Y3;?e2+5(G z4Ki1Qw5;WLEbzPBk5Wm2VI-msCW2R3-2{lPv9K|T= zn8awW#$LTPJ8RdUR)8l+N4TfUWGs>F5 z$n&E)WX%Cy5b<-0#n6-xkTWHguF#7}l>`AR^I)AxBck*3IT`FQ))(VhmX@Rgn3^nX zs!-U%530e2f#W^4h0J&_zeUPM5=y$+j+R-MPiwh@rmBOwMCJl`s|1#|4EvlguVo$+ zMR;uWiOQSrNQQq>tHuli{N?*%;dHqXV~cQ&YMWFg3yR@X+On+^$W~e;ee1TxV{=+sPWM&mB?$MkpDU9ex!u*H~K86SgYs>mPr^L0|v=Wq3fXk^Fgh(EpR!cQHww zFz*x_lUwQU|Mu4?b(vGWdiQ-I?P0KZIfSe^cMv8=AUe|RvY6`{?vA2Qo+$daGWKF1 zTtdp57$c8G1Fu~Ulht$7P?HKX8CD%Ru)44Te^)OmpVSMAF00m8jK8(;cyX*KVR1>W zXjgyy!68dBF7PfdXI{=C)gUd{5II%T_ZutG!C@*nQ#lUX299^fb$0reHPA>&u19rI z78)-JUuo!!%`jeKFHtyf^`N9;)Y*c?a#G~;`GRTsT5Y zVS8;CBwr0Rk7^tVU^17f6IrsMt+Z>XJ^O!kPd*mb^{pDT6)~u+GWUgS^J4Du zqxKkzxUtpuzmn?nx8J4Rc{Lk7a|fLUdlrN-rj9TQW3vr3zwzmAB$TrZc#?-QL|;Te z0Y3rCKkr~v-%%AwQJfDG9p^)JId^}PZce=vksby}!;iq1ki5KYqGv%kA63WQ!Emrv zG(MA37rJcvn$iBnNj%o|tdTtD*n~tx_A{VOaoG=nTNL8$wyj=;+yg@~*2n;5m`HIV zvrd$D@?gF7^Oi+D*hq&pQUiy2RgBFI*le38-dm2XW;funMzP2-H~Zb*40eBt3Lmi`&=>i8br{*X)+&Lz}0mHS8WktIZ8k&NWgM{Ks$KpNiN+=HdBTb!{xzWummA_GDJ0MW*uLNfo&nHXt z6pxnEq=u$5c`lSEByRG()1=l>c(B7gikeL>vQmLDYYT3)!_e>aN$z+_g(7 zN3NXoKO2|piW+%{J56Fp08S*{=91J8!%D)?(}kC$2CsH=DoQ)_HrR$<@xZRJ< zd-|w<+|DC2?NO~sfru@IO+%Kqp9@4PO943NQFpL!QwxvU_3D4!TBm{8YpJV`YDt}Z zzup=iqz#qH!kt6A5?(Sjo|&$SX(8y1qk@Lz)?vdD6W_&c+BBQgtP588#+~@!VywGI z-&~kU)k7PSyigL@Mf-uZMs7WPHibt?k42>*I&?pwYA(sI(%ETh&FVRjO30fD*!sZ` zk67)bC*4ijW%z%HgGcP|NDct*{q(Fthxe33&K93nFBn=DlYX5|#p+!VIza+Nv$vT? zeSF~!Cx}#*&+5xE3g-Gt*>c}r0H}(NhKT?HEVo3GeEGnlA*m^#Y|T}&=$eNQCj&7=Nf6mx5s9{kKZ$?7Fm4@-Qi3VE2B0V|o~r>U zpF+cc2enEAK7YV}^P{ML`}yF&%=wu3!n}%*lxfdJJLd&(7x+U(YN<8qC64SaC4m;0 ze(|^LQrj0Vd1&vN)@2QAkcL1ckD6e#j7K3B_+b-5tFilv@ntpF1oE&`Kv(q92O zgTvvXF?*z2Hs}cHNRf!$GwZAwEL_`W^z>FbXC|oDeT?v*G~$M&7G;CHny?Js}R6VpU9>1bX5!sUIuc5ikoAb*p6 z=jj#DYbga8o|auM_FcU^a`xb70&1%7Va6s=Ft6jVBF4*3O@Dx|lSS*Hj9!T^fL!jS zS(X&ve)#^oC{cWEdfYAy7O&fCIOhaSQc?yu={XWZ!sj0L%cy?7MLh2PSX>JR)upoC&pmi|IXAk_ zcJ+7NeLPPd(V7VasR0D7mV$!h*Z=|zndP*!Lvvqi`Jwr)m|1&^JID>-T#G{-v;Ba+ z1#e3ipdEKZ@+cdw)=Ixx1=iSd$*E%Pyd{6OxKJb9s0RIl69Ht1+6MoiHcU*I@MNf+ z@vWZ8&OL+8geqD%kcX_3ihU4ju2_nhePIXjb1@`<2WVwpw9mHh86N+GXmV{Yv6;Szw$X^Yy5vA)x1qmmDXjf^>f= z#m3ONcNg}O1vMMYR;z^2Zvz~^1=h5 zSf+$Xg;cs^rX`9vSf`s_TLl%tIB@njDm_GGI0TH7MW!{Z2tJnT1>&pYWJrI1L%j`t z<$TmUd3st`S>4`OhePe#-=oYxmn!0SVDGEOF2UTtPqXx5d4cQMM$KutXm8S@tN_&4 zp|x6C4X5RS?76ECI*$gugZ&icuKVr$QG!QQlabL+G$YP~NA&xK~zO433Fz4fuax5YD67h>FLjWqTexi{uBCoTGk>+1y;!=QdX+j5%z? z;(e>k$&w5NCr1&0461s-xR>0v6j9ogk)JHVI#Y#yj$-YA)q5$%wY{KCGPyMA$An(_ zuh;yELcvN^12F!8M`NhFpV?w_98Bm0$`uLU1-rK=OYfCwU;;TC8FX zwK(T!R80atej8bEt2uKhUAu$eFLDMCqI&sGWPYpCfsN)|v+AZD*ND4`KGC04d{zHA zLj$v$g-saJ`*Lyn-Rdvx?Kf1~)$CU52$;}a${#1Y09j(rcovsG0IA>zpQJC^QDm>F z*-B$X zPhKKgeNfzuJ9ho(;J823^HA3kc-S9{WRjvlr+p~krzINKe44un4ASBD-DPnpt{zCaTwI#&kEMs)Xy}81WKBxC0*8z!4BZ4}_o`MtUwnY>mA<@>x&6AEFz}XQW9T7=DH2s&~~*dRLmhGWV=&HekEiRh~7Hac^ZP#hF=w(`Wg~ zxTa32TN~C*Sd6`{wlzdiLL_JSke!Z0ay6MRrxYBMg{yxxjXD}5SGaIxPn|D>NbNJa zM*qive2Sr-y#8H8z_^cWakr5z)-3d)eTd162qh`2G=99MM#I67`ySa?KlasMFc@$( zA#kM%Zsl$ya9Oc=4AF!JGk4L6c%S{cxoPPEu9WacyBW9wg7(ed+M!;T`8e%t!tQ?= z^mjt#g5iI|+p1!JB?m6gi(CqGC4^yxLvn%A9eS?`XWm2)hUIC1qF015+_jE6i7bd_mp3GG%OuAEVHaBC-yahxwrGtHcBeWmP7OtBw zD*|bhxcfkxuyb6W?IOmpkc=a4?8$@z`yGVCuBU$qj`meaZ)ZsGd=CKCfxn%k)7ty4 z)oE9qEMN&i{qiL=+2e69ned}wju^_awmz&0-BM(>addkyF5Ki!>pTB&?F6b33^%tf z>sGv82Ya#`>+tT41@biR+(l>-;Rm%cx@YNp-U{jqtnMta$m|d;(Iy;?)P1Gdv8AxC z-XedH8OqTN&B3ilT3MJPzRAK#UeZP~pJZJ0q)E(rkM}bS9jGTgLBCmNM$%V@n0BG3 zwX^QQ{v>$xIN<%hhzr*1q;nC%T6Y)SK{yE)?lr_Kfv}7Y7wy+B&1Q&bDu> z9uu9>L{4Gj=NLX3sx{I|tslbhlMqO9^jd!fQ@ci>8K&Hkg?_ylVTX;Kx5>TwoPM!| z&L%Ty7OO?E;2yj-Rwp-Kc4f;~GvoJEHBvlbskaFjO_$@_X=LibMv7_qiZLxVcjB6o zVjFNffOklhKa-SPVhLX(6{>Vyg)8=B74lIG^&u&@FUdCBp*pY7W!;M0$q z9amzpo+aWJ*_;j)FUOQ9uGg@8ANi({OX`w^v@Ox&7CP6@#t|!FdV`a>wW&oVNmL)4#S=h1^lm==Avq_D>`ufB+XWbVsR~GjxF9>Xpt5b+3bbj%fuU1PS69cr z3>dtto)|%`p2*;n-o3xfS#NWHS)iYWoK8a~_q_&I4SSELG0{(B-WkXQ@`ZmVWs}JX zDMhWX1VU3*ci>F<=FRof%eh!HLX|VQeHRlXsYk%sb`NM~$L8*Tb-cTF)5LEE*f`8}yJ7?d5NQ$i`b<*FyQ%FK6 zZW^5m18hW{flj8@H>|BWu#P78J>r$@HG4sehja6+`(Vf-o1mp z`xW-?-RK=T?}Y)r6MOfrOM3-B$j#r$JKVb>`t|4??cF=vyApo@fqE(b36z!8D&X4^ z9t0gNjkX2S(4)Ph5>)7xRwbwaX{^%HRS7C|3#$@TfHYR=QmHyD@tI_$e;@2a%DGCJ zV~JD!n@W6CDN`)*N&lu2ljvaoQ|Iyi$NlrpDR86*`z!dmq_49G)7u|Aa5bFKO?w6> z=nOehEYiNjj0=CtxPXicMDBDPP7%60lYLm1&Zqqnq5O=F1ZJ!#V?`MN>St>>mso2> z#TQr{$`x4Y0xPYkG^Vd89qL@H@hXpdS7e+L_f{~1ILhdPpYhZgrJ{~Wc*TxV%#TXU zkIqb>UjA(zHF1=#=qRzf$HQZ^T22P1gFu-wf|E7P7@U70_Et;P_?s`nxY-QbAB$^h zB%Dy&E7xumR1*txXUSY!z*6VDqZS~WGy3^O(E}_|`!@(*_o`r#GOg>TRz>T;H*v(DtMQa+Mrnx5l zBj>9fbiqC&KDIp#T=ZtBJh$>^(B@V)H}c!cdj6=W<2M&mIhj1k%n8B>dtRWw%rkDN zjCAQ-4P(xLb1EY5p?CYah+hJ*Ikn&Brj~h~Vt9Ym@va90qDF6SHWpzDk))!+v@R2t zu4`LPl+$LGd9q|{r+sQGh(tCM(Q5gW0KD`Wnx(QpRM8oAJGmoqm`_~MUWAh%WVA4u^s&SmFZAKZI{YHaOhjkHVE#G~SI=Gehao+*^-^EQY0O24onL$tNau2s)x@$kwEL z8S?U>bIl;t{ru#(7o`ki+8~0^j0#VY{ji6%8p?qQETtcKj;$z(;VJ$c*FHHN1L%LI za*KlXy;yXkSkylLzQ8{6)$dv2L9^r|51$3nqv|*vqOX{~X42_{`HX@pr-8?eFGtg$>~AUV8$h`N7>`VW7Ix?RwTrsxv<;xOVx;14vq z#YhkIdl664?0oo?M|98vJ_yguLwtW|=n`I#K^Zm_8}S> z*v*rFP4_Kn@Ug$aw>}y}8_N3IjK^g5Jns1^{*AztHQilP2mG`A_d8V|{}2xR@7UkF zWvt5r`PRIIZ}4Ak7bNG51Lelt&iDExC!ZQH>TTyB%Dbo0#cW6GoBX~z%GQ7Vvj1*8 z!#fK#T`_gZ42*0tAzGU0DmcBz@(pxzHc6Cu8;#wF{C$_dp*v@HmKTQ07@RQyA;4`6Hq6^&^y$@tgIvxp6*c^%FV_z`r zCa=%A77n|)9Bf*rvu2N<`qF=#$U9gYfGFc|9c`QzzEv!v?owL%s$^cJ)z$AGf;i4M zH!bFvcH0Wawzo&!&(RYvKDAvD`O(<61(lDL8crGLNX1c=J5s7)9qy0UfsaHD5%$rZ z9?#!u{ydD!77MVUq~%*rAuig%+%u#N>|9d6Lu%LLe{ea%J(`eIcn9vhM2%~!ru68#Y zV50f|?hN|7oTu%fjR%E6X!9McCei_5e3x;f$1ozgxPxhRgOut8{`Yf@w9Ag&BUe4| zw4R+7dykG<+>@;_f8~D!tMqS&^2Uxf0`AqVr!wZ$<#WthTg!)(m%tI!fR_?z5*H~- zz~{2N7U3s}KBd_-|3s$j`NaZ=*eO|W*>n_)aXN*$e#jR97yO(ij^GPRntk)kT|&qVss!qe=VZG3BLfatw0s!IEEH% zuW%y}0-lJAB3`v%Z(GQYw_qd1t9}TW3?Qf#PNUXEj-zaabEuF(@nv-VUogS5^n6() zLn#Wnmc0yd3h93wFu#$g8Tby>&viHvSIzJmx*X2d;m4175I=q#UbEp0<8X63>-ux} zHCuw=iADaeLoOL25>*yU*CC!zYbL@J+D=9(s+C3%#^YwlMnksX!wl+>R;h2va_7j| z729G~aASRK^d%ANv|jTtq}tTcypTPQhr)^#+7WW`A(wxLUu(mZ&u`WUNyc7ZRd&nk z%Uj<-7?`0~>01QLSXk@Kuo{-u%b~Q29^?2Hvsj-=Ga$j3)LWQ$SA>=MwFi7j$w^;5 zYyHcAE@Sk()|#XRU;_8@Yz5yKTn0fL8n+_(TA*nK^)+*uyw*(PAm9L5A&qqa0t?t{ zX4GQ$Y72jZ(&)y$S<9HazO~k)?m7>cvG%E_6K7&QB=8?*=*~nYlJh~e3kXapy>%>w zBwoR_VueD%b&F5QQ-uaU?n4Zg;Qu%5c_V&c6agO_kqg6XxCDoDPlM>3jzy2Lrcup+ zz61#PiDXDRFiqy^VP=vK&wBy^gl4eb<*c<&%g5g!m*;5{J+Ucr%J104k;AKx?(?oe2v*J zymzq5_a^y3NhX2e9Nr|lKA-2O@f`X?zT|&FUoj*2n>dgMgBn`_N%{uUg()vY92288 zJgh;DGdMZylh<1KcdYXU&<$e<8W;f&&5v*U7NNftf$t*MaV7A+J$V`)gpd2-U@Yh7 zAie!GG`3?wxYBMIa9BBc(hvLLL7%$OG!-<07`_-KrBi&Z79Uirr3fBxfjadD1CW1u z7JhAtTarc%iWj$Q(V&CK`?5j&^mUpCBd)?sVg4KGnAZFE?_1(BZIvx?U$(yec6b3S zGF^+}L)?C?>2$jHszsMv3;wcuto8l(-?!Lh)%peguhnq9vlfSFcq&p}?LqzT_jp%g z7}OKxh_UD?azIp-It}e_J~;NlMu&g!!f!cPBYtbaFT8))pKoO@-X`pimL~27*as6U zz@E(%THpeP+5l@nl)oK7_@#C%T!)8HJoLzw_1J5-M5ItcV9$+MQzFfi$AiPiPm=*0 zw|=O8k0lB{sb#I#qofzl=i;$=8B!z|Can^QlV&w2rNxJq=Ss|WjQ1!P9kqs)W|d@r z>SmJ6aYQcQ@z-9O!Qx~Sw35k!08hiGJyi2~zk=PkdR-KG(QdtjfmOv4L&5A_EX!)| zG}(jAhSR_IDXnIE)hwY(DF2J0P%ALqO1hPvqH6&%N!F4i&fm=wxDHJ5Bir0#wfA$!BMJ zI#y#D_{*pP3oKfiBw7x1eF@O~T?&)}j1{TD>_fa5YI1!P^L)sclbN0PDqjNdI!b?= z&!@G*MSM=KW?dPswAWd!jqmeinf!g0By&6G$26;tkBWZ}N8HZ%3CO;@rvmRbI zdNR8dff}J5BS2=FOnSO=x@9Au}J>8 zOv;K~O08fW7LByj?nHdb{(T z+SQP8j~}Vtukl4ZjsG|P6sOeUckUJkK-Bm8hpra1g|-%6U#|vL*Hk5u`4U%sMV;5D z6bd27&?4yI_vwHvp4xE`PT}+G0UDa+Xehdb&u{u@lApJi=p7C|zd@I9d3%92_i203 zAD~}=ynTVj|M-1?_E~v<`y7q`@%u5__~-3YH2uf#CqZ}x-yehUSNi@c2;af?uR-`d zeSaNr&<;I{ZPSreI3kA`6+39ADq_^LFbm z6QW_ty;*#j0Ns*gduQmbf;91gY$=xu;97x@;e^E=V{&_~@JARoU^{xZW($=^z)ljG zf?9iwUO^5{(km^03Q_UGslb=loC=0;MR*6_kvm3IEFfsFpE)+ z1qbR_)A+|{M5k!zd88ePa#$UX6XeG`11T@3{)NP zEaAs0Ps4CPwy(T6ZnZ<{tDsHF17Ta&lrX$?4aYh0)in=Y?ST5K@l7#Ly{|CaHUkp3 zDQcd58&Vm6Yb)S2gS%RtONDih^$%uftZcrpSzM({2GVUafsWm`ZGF^CF)1|50pHec zO=kE2+X^)zK5=0LUMoSm9SxEVtswtcV3B~y&R0OS=r$oTU#EwB9rED5jb-f11ofoa z{>Djm@;<#-3a|9Q^5|FkM`kedHzuLuT(l=@3pLMwj&Y);(CHkRB}79aYJ)7OGL&Mv z$E+^J*z0JUC(ssqchRGq+x;<%#8mT-g>5H6Vz-?`+hilVp>1u*tnEB7*RRewx)*O$ z-yj6akH{duB*>f^pjo+h26tK>W>(-w_C@qC=5E1|dP?C~ex^33ifMHZSrl^*85PF3 zQ(g^!Xs}yv2|=Q41;g9Ta&2u@>2OOT)GnQr0aW0N+wvcfHx8x{z>*^g>d7%8Ot3 zm>i#GBHGF@X}*UrDY8kXNt33MH09pj2Naj`)?sPj1Dcrb&C_2QrXKE*mMFFp>7Dj} z)G*sH)A#f|7mQj$RraSI4E00)S5(kzvn3Md^K^CC{3@W&`JFg%@@9lb@Xl`hfkco2(j1Txg{y z*%-~ptW&Z^Hp&K#1VJksiGoB$D2tY_#@VPxn~VD_LMsqWobUmqY0#g`$z= zDl?av@fBp|L6~)-k}#!gFV#Y+=Ycjp$Ka4^gkhC@Sd7fzQEiO{O3UXY=BY=kdtlP; z+`?4R`t&QQkr#Gga3l1cL9wHMb?SVjb1q?AoG-c3zR@nr{*c4gZ)jU9xkLLEC4!MEP5Pt%~F z@68~deZ7@H6eYX$XI9y{M^rv*IzvWZqVUeWz@ogs=SIN6FY>Ex*HNo-n;!Xnmk@$6 zUs`nrSjwag9^=?KBD2XY1~sg6$&JkzoYXdR!=tn{V4AgV0iA|_{Lt5{d>J*1>)i=9 zwc#8rcIikjy<0yq+6?(g8f`AD;4ZBbr7&+M)M`Rby^`KpO?I%c*Ban&+p_~MZ_|4t zXg2j;gU(%g$Du!WgpBw0$|`Kx-Kd5+G={qBrPE{lXIRySg>%|zSggVq9TsbFHz3jK z+-iqd!QDVZt8=S=KDBp)t^3sK+^WyICn~)=`OeLX={-oXUegIfof}`GFwFJZ2tI1+wzN40GE@#!>joQttrbB<8QmjBwmFCc)3w(X z?Gyc(?gLCqsM*IEKB=K*{a(CBehl|w`2Rg=RT!*q<#EG+YB|2j@~hkImnR3N9JZuD zCOOhSZf?-1ORW;-Kj?=o8Urdp<>=hD_o+xLo)?7fSya%>ugQwy@$#LMf;DQ8y!jy*6-(i#OFt5paDcyZX8J%38<^{TFX#MxWi?3e3{-zb4#*<&qDP$HTe)HAKgEuc*;VeC$ z&6%xJbA?w2uMgk6Aw%0sG*Q^D^g2`p-@JK#*za3^1>eB`VWMjs-U`njJI2vi+8D?4 z{_{bt;ES(be?9Pw!&%|Y^EWRBu5mP#*2nQ=@cf(pQ>)-tFJ2Fxc*fzZ@O<$4eZVk?r}IPyy?Gq{N~Uxj>gjZH~=E+1)snA`tY@99L@@_ z9=~{h1&Q@>G?v!K@$&IkZybR1{OkT#?s0f3ynO!DwJ(jO4fr@X=)ZYk6@2>o>FYPI zJn-SF@Xd>FUO)v0d^D9d&daOA=U;tQA8`NW3(t9RS9mpe^^NPiG?g~iVL z)K&1QcN|R>T==x1w6PxiDlrO*TfsFBemOWR)W^|SS|7*bZ@zijKeP)T9=_~9c8{Z} zLVX;KrS);V_^RJOd{SGue*df29{6ae;DC>&()u_A>NM{cjs>0j!jPe}f@5ErN*m{Y z_VDnlH}=5-D0=8vAGH%6xvNlXNV>(404+;ashDZ!SZFKGs2PSVIn*fH=KRvA?>h|bi#*#qjQwsHBdnI&5 zW36*57I_+3T*_ZO6-HLMPA5!oa%iAF2jQT?TV&M6t= z(91eUVpN6x>)p%feqt+Nf9qSJN5!#PsO>9L->!(g9HSTjy@G2NJ5iy@1@w$BV$lD) zkSmmbM!5n8MtORGMxuGUKpRo`e2hk-d3%O7q9k=d8_}=PM3h-iE<6jxqNJBR)+E#O z&rGodxid%%Tk_Pf2G1Q9%ev)%m^6~_DI0k%`=W2%QGt3AQ`QLAaB}P;L)a4VX_Z`{ zgpTP6)(Wv?Q4UTpDzrjz7QvxboF%Jf*W2Aq?4~0})WbojeTi3<;X!y>& zS5qWxvPpjOn~7)6(kpb6bcH@mR^;~LEJxpBY?MItKEeOBm^-1tlkhBmo+N1}2?`b|P*-d_{8CVl?(k~eim|JULUl3KI8NdJWjpz{{@DJWKmS+ofMKErF)=Nl;d z{8Liq7tqfH{Vnj~G_*spuo@?k>dVgJ@#!DminV=#ek;g{(4{JJ0murrRTv1OGZ(;P zL?dg}XvPq8<(oxtCAA ztPGL!k1O$G#eb~B`L0e^9R4o^t}PYSS1;zEuQu8|878;Fev*sK~&u)D?6|OCRJ(Oh3SK&Q2-wsT&zlX>XmVc}9QehahPkDapF}A&fBu`U}NHQ!b zWie*s)ecOZbQXU8ORSyfZ=`p|@VV}$UYhOu&D%{|m9-9AWU|)C-Gpf*AM!Z;_beKS z5da#MxhI41@q@uo{|<9KMhNu9rbm`$I@PFjn% z!4#2+Eb2%i1^#heBjjbkp0^qN0sajQkHh44i^g!3n+aCTnl&(31)wops~`+`vN5tm zC*>G8qJ-8(;Fsb!j|`6!F-7798qQpp7~lZvM@6uI&YAuGb~E!DyIY3HVgcC2*$g=L z^cnYBIk;C69q~&TEy342ZU>vZAA#-w!urK+0J9)R5w)Ph967{hcTmD;S6ewwG~Wkgk~<|+a3(;j4aUZN?kMBzu(tu+xd~>uHqh7OxcP7okklLl0lFi z>y996nWKdL#Zc?S!w_59&U;q@EP;`-!WoJ?wLziS+aGndTTj-!jTVKM1;KpY_AxTLU-<<0j=fc!QR`Dt|kLev~7d`~+RoW^}JnQ~YrK47s-`M8%(84+%p zBH>oPouUJT%XFGd5ohexhQBw>;UAQWCs#n`_V#|{#fN*XP>FHW0tgEb7x`p4*KLB+ z8V?D8dL;v&)yYE0UWsfVDB*@d&&NQ2AL_0|ojyeCetW`x5DaTewFiThPVlOHPfT>f z3VGf@7WZ!;f0{Rt$L1Tz6XOl!=~H|J$=h@G2=er6d<4nc6ZDe_pWmRP%)EVuZZgyM zSAF!8nYS;|OD23CpqtFRy+S9M@c9_MWajNp=pz$8pP-Y>ynTf(GU4+OePrf;?RV%Q z6F#4!i_E%MT089wK3 zG+#vRy!~9c#B6-V35(#`dc6^k7cY9JMGAasjD11`+DA%u-LD`vBa8V>YZiUpB2LPq4QrISn1bP9H zUvniQBSA;p;7!(a3a3%kiA$y&S5-WjAy#+YN%Zos)>o-^i5h<}t*hEqi-u7gYq{mt#RTi*eWYz?_BsS;8^317e&$$9yO3XmtUa`FXsE`^P zT$7F`LOOo@ppP8BB}da5cQAEr^9YK86BfL=;ecMxlCKO#Dn$c-x3Q?f#uYy%wpT-dPwx!pZ#dQ(6h3xY2lUJ%NF?PJw+K zs*^qg;w9`~}= z&&B6XW17Ync{Z(oHGKZr4d+#@(bLauRJ^L&4S)RHhEYSJ*6OdH-KrBdzQ0@8;E|~8 zUS59g;E@5Xwfg#VTg4C|wN`)p>{g33&dwdj{D-@0`Bna@4j}aa2-~;LE8Yntv!@I3 zXsi*ba|*ca)__$6Kc~-X^@S<%<`xE?7FdF}KHVTJkh@NQD6(`GnJTIa{XU=~jH6AR zfDqRUDa|OZAZ2of5BUpHy4kEy%7$XsqjIvD@1PZwj2)?()k+YGtVb0tBD7VwhSs*Uh_;btLIeH;@Vk`roznK%td_Fb!Vj6 z$X2};d30ib9Io$6cOR^{w{1?K0;fvlyQk*Mp8&X9J2181nJ$#6~ zqWTtp!8Q!GUgV8lz&$XZzdd`!gdP;(12WKWDSN2pFWgel!ut>f#VsmT3wgWRsA$gG zsQ7nV#-i0E9F%tqjq^K86c0tpN~Gvv5)yUAc^f4$Rjpl=H`SV1H8r!+npvqTfhi-x z?SA;MK|7ME7@7hjj(i_JwD()>AQ7BDCIr@;$2jbgM^|-^u$(qwfiJDo^lqJwVUF zs1PkQJ*r|Q-%pA#j;fRQtBccoj^+X6i(?Gy^q`$b?IMbM8Sn+|Am~l=jC3_qu4yF* zfd|RWP0CL_?oTknE`!l}5~ECE7F?rj5PF}jVRoo#b&UgfkkiI99M~EgA3&#yqOi_? z8DG~@zOSUNhZcuc2W*LWZbS@X%@QB_`Ky5{NKX!^M(Ehdw;4sq+Ka0yxmZ;ArboKV z%L!CP-|ShJ+6F2{0tSK}xy<;JzGV&YDa-q|Q*#xf+vHGe>JK@P+h>xGk%DBMD?uC~ zjaJsRw+$JY4(naR^)}?;l>0ntZC}KH+U%{{T}(uxmTEbg0K zS5py76gBL4Fpzmcuz@lbmLv>0*7xFxb1$BZk6Rb%bc!+xJ+-cDq3sSAD(hT-iaqgt z3DC?b6Gc0%ZL`>|@>wm%1Z>9*}AI!UlwH#~6nrk;|mTb0r-)u1Yh zXi}?*vEQM$EgD~2aD-sid|=DZKCnXf**=JH0Tu4U7$4OSc1_5@ZQB4d6+&NV>q@~R zSHFyWn?-8X=-LUVEafBVR3ZBjqsB+po`wgg@-auH-U<8}jKc*l3YXGA zoP{MSf@JLlR2rqx8CIIXAE?Br>8LH9jB04eFc>@rSesAxTEkW==oFpS;%cwesVy*? zE{6KSUBVZNl4)2`Ym#6Ll2+|5>uH9RM}4}7UxFRX*i-2h8{)z^5kNSYaH+y`*LTUs8H~)?~(ru04~)n zMqRj)@EYGcoj5|9h2T1g`lM6OZoh*OVWh~{3^I?nO)mhc;NYWHJYUQJ2�_3e#?M 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

?02Pei1G(V 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 delta 725700 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

@0ml9%nDC=(rd!+J`I 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�B>jN)M%!k~CMg_SaZP_F;0G-MwoUtBK+}Sby&i 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%0D>IsmU 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

-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

UJh$xt&M-Z!-QvSX z(Dlr2MuYC*DPiLy-(J9st!uV+A`CcrA;?KSAM`YOtG07B2(&IHMFcc|x%79m;J5EW zxuEfy%|xE)%sGM{Rqu77qm0*MwC<^cgAn=$SgnCaSnV|33UpKzP8^^ zqW6!a%a=R5Bs`o5RvxiSNvRs4QpbnF&>Brs13R$#&}TSm@6}?^<5QU}Bzv*WO4rGU zj>x&0m2o)t?U?QT#8F#+bq>SC9UjG~t#%#P2G}UodAU}AJwwU;=*A43R3gfajo3Oimhf^i<7m zhFTj|;KSz8u-;^JKB3Vsa4b2UxTo|hH3ipQX8Suzft9SIB4f5*rPEzVva1eZIgrx-$Ec3;rj%Q zp>;X1H*erk_sQsgw%V5BR>riIAF5;hix%J76%hxqYE_j{WD;#Z0uL5yp!pVJ7I+k-I z14AU7uY0YGc){Hi+6I@HMqt-m8aIFOqX5W5Ps78v;#8o2l2r~9zLiB1`IoesNJzJ1 z2*my*)v$ z)ZCb+VoHc$$~qX43qWsb-CB(q�Q;ZI5w0VF1*w=N2sK4 z*UB8$-E{o1-OQKKyUzO1Jm)<3!aO!(1Kg(9R{u7CK$ILta@Wh%0ZJJF;ZO~Wa(t*UNpvl8h=>kxHv|X9IT9G z4vIsRGMB3yIHknvg;N|Ad5;tRx4Smbw6xv`W8&L|jZi46L0vA(xG#&E2smH04_^+L zoU#Ic#&=1O`{AE`-|kPokBlMGIHeF()x!4tWStuW_sH}$J-$~>0Cz)8)AjBh^7L6;~N0ZNewIjHuI!`8xaNsX-yheD_wut+)m_>bm zp;Jbe!li{1ht@!ESQAsf;!PGB`NUC79Vt-@u`3P{(bCAXS5TLwi@ES|ql@_As~)bY zzKkg?+3VR~blmcDr*n36_?atXP$2+?^Rv}874AP9O#kb_B#-ZO#gL=6-uy`E^MHD| zQYAUjE+mfsCG)5rX^86SM$8Te3F0Du%f#Rp8;)kOLj;yc0YfI0c)(myYyGx5$d%2x z&8i8lx#*_xlXV?GS!U~!>Jb4aC%U_O*PP*#PK%IKxwSCe2Rlc=>i!}mipVqPPRse$ zg2MwIV}z&ZHp^|L$t7V2x-d2N+HoFrV+~Aew`nlyM3&tb)v%&oGNo|4Xkd1Kc=KwI z=R5#!Z--gGFSPqE#)E8II$9_H)BY!&ak2mPqHBPSrdu{_sFFSvXH3LmU;D_iK;3hew6&iA?6OnCvSd`tGYBJRfVgsqKqHW z-Xp?uJ-eE(x!Gqsb8x^9E4?~@KIFrUx{qbb=|M63`LeXj}zd3s~X!>fvE%jjz5Hnp*X) zzSZ*Te6%whGW)Dyaxp6%#+VT?)vT~vvT{KL~BzUVrmfS(kJec)4 zrdZg2hGHnX`~J~R^0+?9+yj%4J2KLd96U#8h{*^o#s%pluOAriW=zur*t>@%oX0(>2C6wD;8HWR}3jt25#%sOC6dV zmrM(p1rz|Gaiev8wm&i>n$7|qx@V1vS2g7jEz zhJEOEKPXLfwZ*7&%Smq^SbYNA0V&tF_9xp@^uJDjJ^P{n#T|CnWGL@H=6A@>oVI#o z8jjm9|AT3BvT2*&eQKG88^;+5^+4Acu^m`Ag z9(H9?=*if#iF((6Y~+0Ldb2iJU34OQHP4x$k0K>XT+L|`-p2i)!8&jC-@wURYZ9 zin=KdEa6!4w1%gX_WrZcK6|Py80M3Rmc1cKKd-2)Zt*iO5{a5RK?ttq zrB8@;Vzfqt@E9zHOK085!7dE0weMyJ^0XuawqwZON0EOmUZw{QyuBw;NLZ#5i-Ar# zoyh2Za7=&!mw%`Xi~`ZHO7k-_hQZ{4D=M)37gul^ETj{YK)6kO-H{in^`P&0k_U*AgK{z>n=Apz2VAfg#P7AW*I z&yL3noJm%Q-%16I?9~Z#vggAo+t)9h(YCt{a}9_5#OG-J?PHu~f@T6VYHLer*Q$Fj9yydo^AnyWpE?LzHAs__bKZ*kTvj_$-8 zsNZHjmT~5a!I`ZOfLkT5t)sZ65g9u>;Q!GPLm5{Q>Vn{Yx6c05xy{_4W#*ZV(pH3@Wr)pxwJmJ?<*Xl&(mWQA?v^v*4Q^mbo!j+e zms3VFG9~#`2H%m*&FSFwnEns0aM)eZfX^qykKGd9-IbkrKSYGwu;bhj4Lys@_!&WF zIwzO`2^6osNBYM!A#5L^K70mxm}D&~?Oaz6>ti0aGZoC1BD#AEJzY@ejy1Gdw~a(L(a z-QQ^{>ALnhW^QnR?jZqY4LR6&F*m)kmk94&A=C@M21_qjYHK4Qk?W(Bq$g^vvr;2c zs5UVJx;rt(?d%_+laMnQCqC8``%7Pc#54j$qnQ1RmL0YbpGOt$v0?BL#TrBgiNtX2(U7srRK+BQ^m3hX|2< zagKar_2u_b3oq1UQ#W~==8=|&;&D6I;No8zUiApB$5ykSw@a0fyt6&%lm<&c?p@G%_bm@ur)4)<*%!#G7x5Sj1;dmC~kq2u~He z-??k#-?MxKs_#~I?UbptQ~y#~fZPXQA15*ZIy3P_h} zJ$vZ1?G3v4y*0bqsvUkl`^Mu$S)7r@ZjWa#huk}QN_H}}h~#zdt-M@Dk|rm}RVETi z*jw$kq)0T-&JR;meo~u%^}ErT?pr>mO(!1XHlFn!0 zV+n7YusKyH^peP2SV{Ka#%-C%8)h9z>CzeMwBEeLQ{Ox(r5^@hEpO7({GyYCy2J~D z{5lhuKRrW(7pMS#*PzW~#FFzynKM;+ws+}f<3HLA3w(F>d|1BigNPiL70soMjHa`l zjh`HLo*W}L48;UM+6U-xCpYITZ(05D0bwWcsg=WNa@IpN)Y`+wJpLNb>DZa@_s zU~{4M?#uNnhfvG}pAFO{JZJmL(=o1ySh6?%;FR9zrwsM_H*K_yBlpy0YIfH=eOqU{ z!a;v`0SyJIg^5gi>rfoEW7^h-i=_3%^0@MD*qPK>Z7@i29T=8w7Fv#&K{=7pfNzhz z?ei%~NbHk;vkbck&&)T3%q%dLahdmhG`9#U-nlJVx zKkSOi>^#h%6B)yuN}iO>kuzYt7sYZDP8oUM_w20%GNRg+!PxHwY2B7eTk3S5Y`;fy zD9g|=yo#|iK8eG&{>A>-9Ka*$yuyJ(C2jq#@FAIh!Wd;@LM*DgeNVd}8Dhh#tVc5s zv&1)IU(o#P>L4gzUn0hS2P(?XFnL(TJ>8jl7bJcN4fn#Zo-(Bw-?hNR`#okwDze!x zghMQBSZ;G~9*?&yCf!c@Z-1dewhbHHnkn=MIMC`S8P*TLRx6M56MVwAhIdHa%%@Qp z0+UyNuTRN8zdDfrQ+?iMCyzwC@`!7kzHw0JnVtYS@3!6v1hN&aX}}Vy{+6xSB*sNj z=Xc&vtJgy1S+d4_UV3VC^G9fL-_8urNR+yZ0ASCY_P5V5%nv@&r_Al$0{!}c<_DxN)Y&)^K5r2=R;&?w(CY(iyb9r}Uf!d9!E=3vrIMMOy;+0}h~!3^h9 z{K!AtF!{a)PJ!Qrp%Lm228GLclZBJx*xwI1nZc&xiv=ksP7)cpz5XdxF?F+?=nUb1 zog!{ezt-5?byXPsF2B2J)G!Rk%q02`%bq!g^Mwrzzam`A>PjaNO}H|`^^A_y&k!Za z1EikhPs$w2?4HJde*u?b@N4H@a*U}oo5hON!%i9J9#&)YzX3xsoNqLENr()P2J1m< zTTE{y*#0gEQ6!iXZPI|n=umKrQ|x$udcixZUsXFCI3|dBsUOA9i$U>_L&)HjjT4G) z>o-L3^5a7{|BNSP_@jJ5=bM(S5%vNV& zi9J+|k*)_%fm`7l2}kjWjTQK)mp>9myv3cHW^WYY_ok-8E6r@r4DCEpN6_OL@l-1xv5cf=y{q5ezf$hDhw?B#%nl#<9fdk%7Xm2hhvuNfNqvWm&QvOHT#v;xUhCSM~;W9 zYnG@pm}r+xwFjjy%H<&k@0fFJy$Rd=W^&J%CJ0=3UR8%&*^ybcZj>D*d!5w>Cuw{j z0qXZ12n1S>3vPZn-$DdXjzFcZmb6f^EG0(?v8yU%QF;{q$d#g#~dlQ}cyFt20iQOp+IB#0et$!T(LO;MqHH0-v_O!vgzZ{~N-6 zfmd@b8H;E?5N6(e+Wr22zh1%VhZUS7@=5}O&P zZCHHH9^bDyZNIU9*}>k(=O)v>v?=Z1!hUAbKLoIh?gb`C+zOF{ZG`Z=c3t-96DF=7Y&MiU!;aK7&y5GzZ{V) zX)HP5F#BG&`-dMSK7wbf%Y37Yi%UnO$$ec>h`UC4>XfB_PK&OtIJl>Ct}AP*(+vS; zp_f@wLhwcM;cZ%2j>hiIQT)t9l8L>vzWNRiKp;}`gg6tBr2Lw+e2}#+bmY+_Is!Oo z^i|y(sjCZxx^5te19=p;%J_Tk8pE5HIb!9742*-7T`ikFd9Yn`MCm>zd6 zLVOF00}?ua4o-}3bA7%%X%aTz3#Mm%xuyEUpD%*iDRnI*+@%Wx=^Kw6PCp2@kY3IA z3?~68^9{1AE{@Vo5Ax`GHJXsDniHhegh5E&4DB6il~c`z;AeJQHqA|0d{%rpaY>%e ztrP>3Fph;Kb`~qeB=tReB~Smw0j=(~cIr`954ACW{KYRF_2UT8FfnsFkEDODaMd1a z8-J34eJs%!kMd{o=|2wEHNSIf$UR-|%uzai>UHKkV(Rw%NNw~IM#m2=tsOENGqCbZ z7kpg2$$Y=xv$&K)OKxg{2@q~z6?Z#d)u-`E{gVZ59pvhJU)N{6v)rR(!44Ri_51$U z^~rI6EA`7*@z*$4zxs83S^=qFvB0P=x$&?5xPDFQTV{Pn*UvlVj+AwT^T?dJp*7!4 zo5nCN8E^25jZa_?oSl=-oJN*yDJ`X25giA{p;!;W}p$WYsY08-ZF(-fe*E7G7k&Q{(eY^jg z%@)gJX(Y}0V7m^FX>Z|%r#jqP?zxFZL!XD}T$1h3SZPD{EN>Vy|G5ek3qjmhylO503+DZK02zZA)%PXz7qgB7Zt3;7zlAP zIU@{5jXbq69_Vz55oHAl?4EaHqcYlm3k;B!+5*3P+24Rg&N;3ie)^SVv!zNaGnZxw zEg5BgSGt5TuJ}B zbr_FhWZnLJMUZ|8DJZDtjbga#vXn?APjmAXug&E(6Ot)aLhSdFK7PboA`~Qlo~mkD zM5L`bAtyfb64TY@|Gzum^ZkjfvK=X3Hcpzg@W~!aJ16@3iOouA!%0JmLGmF4^Vg*h zS;uR+0fQEnAGSizgPnhd-jOs$kCnk|7>Con=9!4!7FS78-DlcJ4gqHMJ1*kU&Z%kgw%Zy7?0lzz2E3+y=ZZ?LuA{$_7y07|Npuo$U-|5(yO0h*!C}fp;SI7xrts@BIFM=fmfm)qokvr>SF@7iBm8 z0Kp64C^M_#*q|Pz^Ttvyh_xEU67U_0-1H&Qti`$9=Pqww>$W_VcwTRrW(?jA&^=JO z?V)~_$-1KU5TN22L`;$EzHF{NoFYV3&iGh}`MJ4~+J>-bKP1y*-k zp^?GIsB8n3LAjD*sxsB_Ng~+nsm7akq}+i%2Wx-nu#7m&Eb^TWs-;PwN|7F!E?@-0lc{XKa- z@E-P!bvdz?CSU0PbJjw?TVD$}h4SuItq}kdwhsy9+p*<+#J zI77967m@`;f14uHAVgNL8BNS+$sv(JT>v>i#=q5&r-`~IpG{!w;0cwE4So&>D{g8Q zN@S5labL4V&Z{P#+o$3vi)u>xdqcSW)52W$sm3WcLfzy4uKj zKI1>V)cz-#i|L_m-=;5+PFxe+mmXRwXj7esdM#$of48KtP#8N`2kl&YO8*?Qq<>D2 z9eDjvmshFNcsf{_k*FCe4J6vRNWt`4vt(u|6t@!;U!wAv`*J1GUq>{48oC1;%$SPD z$1?16VwvZBqw@w1iUMt5rgKrJ&`}}$guBm3M*ECwKqpMs8YP5H_Nm*rIYKY7#>xO) z#PmEYfAY2>y=ys}-&!@6sQ3C1-hzIUG4#YXfo(Otbpe~UR>#J*3$3Fjh;YGSJR!mG z=-NwO_ON2Xnt=_ENU^T%*n-G^XUv}cRg;#3>piN2KlV&bQBFRtDJR3ta&N!^6m_k? zrZ`+KG7;M!YvwRFx}aJ8o3hETIOd|Q!aDcBe@r8}?qxLH=JMa$))X@Np#Gas9YjSH zuR0l-Livum`#`U*I&wEtdqPO}l)7xImTC`+HUc)iz;eQ*+gDjFM zdf=Sxv}P`Y;im zLt99!+Z)HsuK2SnC-_FNPvpxFbybMMtvr^(0o@z?9j$pd@I$O=-?s9K%z8{XFOCV0FH@m-n zZdxleypY@g`61ZlO8vR4AX=#eWa%eO)+z_=!%Tih%wWAN@CEl1{k{Moiw&d+GsJyAj8M z9@NaaBKxr3ibFMGT%V*jX*_9Zyx2!=oKXO;$SN0<+lNvsIgIQfI;i!Wf9YerRpe0| zSTQ2mk3gY>k_g8~C0jX#Cm*89(?aTG|D%(F>W7&K-G3%_@yCkNsg=;TZkD966yBrf2d+#qV^VW{F-2s ztIAbJx|TFNHkp{;Z^za^A8B6S_na20n=qaV#}HeXO=(%(X>GC0o0C)nyiV4CpM+PNf0cw! z??J)mX!LM}hSv-Me@0H{nT*S6Ty~SkHsyAkhH}^C?;HTm#9Od+`z3j7)9Z3GO|M^$ zCzX)A0OZ2wn(v~S2~Bv8F2`xksk7A2KPB9ur5;b3|3W>cqrNvlC{D=FSA>~d|Bq;A z%j;jz&P`<91{e9NMJa6!wq@K47p8u$_W`4D#%k~NN@AU7f6+)6)lR$!#kB2sa~`HC zhlaM+ir#$3;@tAOthZWAp;+s#BrFZsvnAe-B1q6jS2z}8&3yLY3H<^)j9U|R`|bKF zsUl1D>hd&MBag_zy4=Ws3Xd$3*6(CcoU&^e5wsKJ;+!LBgIN-M=EuxKb2fhO#&W?}G5q8f0k?xXzKZY}h!)u?2&zbVo z_tH(7&XuNAz6A;X6qpG-du^eTJCt&wJh$#ll^vuER~##KI<%KDT+_LD zL8Py0G3NxOF6xkIo87J&QI4~i?fv{EvjA+f3L;cf4CMGYdK*plo#4vC|A~U zFFW^(8t)7=yR=qDeHU;1<>`2`;o$T;XYS#3Y zE|Oq&(#%&*mt^vF_^k7JZg`BsHXSkD;C&l2f70s8O-cfDmduJz?VCa|kh96`hzAIL zM>qBZ?$ofpf>Vk_RutRtZWXKKURfdc&>PD8tqtnk;R8|+fw;JIaqF*2$Vp&1th)@; zZ`Y6`I))vt-=q+{ePdHX*aD?+FlSP^FH3ZF<=6S$Rbwf6mI3N=OP>at8<5vUr>_-uh}t# z)|j;wM2}wunWxODw^_IyQcE_N-7xiLf9?wXMPtr5{7+6GON&Es|K^`Ms=tKU4z^du zarCdh=3Da$4RNBT@=|@H4SzJ@v53>;24CJzzg~VdUN*z@MBn@=Gw2lo?0XKdWejX{ z0gS=4LfErzVF7t~MS|^s3m{65#uY5DtnLPqfy;5rHR(YZjk`!n%W{>oW13b(v@yNA{6JrmBbWV zA}Js~qzBnf(zsmR)^ zETgy9ssh$HFgj9QlBjQwf{X)FZ3hvkSEnWmx;b#8%21sITUXI3D;{85q5}OKfB956 zPbCmSrhnRdoBaC2{JIy6oTL~U;Y-ThWp<0FW_GKXdE~Fv80h%`$1&;Ge{Y2|0!ToU z)6t{#4oI}vPjXJ*zeiX8=^NOmubdBjZQlK}(?`JLcMWiZ<1%bB^yT%HBiX+^k_o!X zQdO*CO^MrCg?Z@uLu{mW_YW7_e{Zq<>x;F{Mm&nFOAYUaBXz9`Z1G6PU*^%X7Mdt5 z(fs%aDg6FtHd}3N*q?QDw3LKTN(Os8pAjWFe;rV?srde@%+uRO zz~WaI4d|z%+T~YbUREfHsU{1EjKc&iRI>OXZ_H2TK*%krstn8m8k6kQiAB%h=YIx9 zd|;_@_z9XECDE}4y~a%$@DcdIpLu1_k;+VHjL3$KDk0|L>lrkg9tU3lIu^QS3_4VS z%sT%4P2+2K=dYD@e=+@qiX?=?aW^D-Gl=x;rjgoFX+0d#PPSHwQq*i#9 z4)c!<^SgO%f*|+)=IufxwSP9ltB9uWj^A>GPQ7oAGvj4ef84Tnrv9HFzc!q;Jza0+ zPAWcIIcp$Gk-j?FR^DWdGnI;5@UCI86FuIg3$1R^TZz--g4=H}K#TApP-SDSmWG!@U}xyO zu5|WITHz`4GtOf>JDRWNz->W@=xuIN9V}*W0`=zji)b`d$pd9#vcl&7Ukvw!sbC+q z4$5VgaI0$elqFI-scl=tZrP_JhD;^~SSL(Hw`Y5Ff9ll6SIOwhqr5>!W;dXJ!5ksm zV}+W04w`EGg6sbPO})WGUg-a+kPwOiBS>k2go%T)*IGs`Zg&II<%v7}#h>6)L`GV@ zz)nZVxEz*^-KZi(C??X$U6okBBeP&vD&Hgz-8$q4Sm8cu2I2M z@(jUQf3QiNDZpO3Ht=CBzRBP36p1%U**hM#&{}(^s`1j!niuOINiv#QqzHIpo@4C|4>GsB$<;mt{6I7(OH2k}n&**8kEA=h6c=89UNhZ`w| zKxu&Lh<{z1W}hv+iQqVU`W?aXKiEStDYFA2X07s)xU_K}%NiuMcjKT!B~tgEtLNPf z>eyWeo4d|jt%5Z1{ggu9nE8Jjf5D%GhEEMcQvTuE>_uaOr7(>t(mi6)rDA5>q5g1i zfKKXKsVKhCtxWgrG#_(3c89XelhBRMuf5xbp`IG!U9!g`()#i-# z_CgZz1nWYFoocES;ugfDDiw5Hj;wvyq1QXAzy_!(^ia=OK#T-X;de=hf9jVH2F zD0ST@wyK!`{8+G_qIV2zt9DFzbsIH#`d?T)WSc}Ejq7WU1lCYIUSp1r^}iVFL+dl( zFr`Sqd}i^g1}fh@zw{twNM;TD6Y>AX8Vx@5@R-O5t`#d_FA@sUpE_gz_TiH2<^Vmf zkhZ^K$^IT{ILTN&;LhuOe`nNi#irn(vOP3SN2=tQ^S@0$;%2+-2Wxp>V?8O^esqt@AVP#KuC&kfB$J?#4c$GQrKES zK-|`Aa|fe+e>_L%*#wcG6KMlPoezf8XBjTsqy9(-B&o* z-rp+IL@d=YsC(1o-IUfUU6S&SDJZ)cr=^d!GnE-x%ZyxB3@IV1n;yGuq{otA1x~)W z7`xAmrLbLuX;gRFf3b_q*iA)Jf>sw`Cz+vd6$uqtUksgPhB{yPZj`@d#zh$nNISrF z7E@WAE+GW=W<{MDdCZJ_Vj=b=Gb+rCx~-uruUpH)%g&GjROw7?FV^g4Mjk4N^9(OW z7BeGH2Iu<^abBtz?$+1V)iHccz-G;f}@-r>#s9oe_QMY%_OtRmBlX-64!nPGCepJxVE z3|g-;gXCPlEX<%cMRuR)@>~T|S>P)b6w6>i&Q!Nt)8`4fnL#-4?S;U3zCy2Oy}3E?bgYo<*q5a)bRaOG*uZ78zO6r+LcL8# z?ART)wT%^%9s0gE+ltS$-kTHN^13Z=A1kI~Eqy3te=jy9*)ddc;eNFa?au`d?O3jT zwG!>t4d&zPm2_0aTun1yuC(H*3+iOQ{vq1f1O8C{>y^k|lqSLZY6aT&9r8Aw4{PyZ z;)osvjx8JC=p9n)h#Pb4#13;wbzm_lDp;%I2Y8%VXT~`3UU2zN{-}R+g!8i z9e4ymf4#C@@8gl3u)alA{gYZ5oRy$j+OGETl;mV%l-02E2i1a;`F|Xm$+4~_X&FgF zEFi24s9-8kMf3Ih~{Kn{vy2=0v25Al(cf(cm@X2Z2 z&m~XX$kTDj;t1TH#!nz88EqM*+XZ;S@%*ijGcOH9XJ+Zu{6|u0`ddm*8an1Z5R&e` z>5RPFnnYEVHq=YW2{IkAkSw`XI0S>Obo>uLV=UGlM8869NqBMr-bAxWwlMDfA~@15#O*V?vHD_xFA{=DXLdFlO;t4C}$HK zhJbfd&f$h{E=MudaR}kDN11y#$j~WO*@?;-a^#9~autQw1(*NdoFj;ZM-|$9hVD|+ zlL{R+|86b6Q;(#{yVJnhl`uE1|4aN;`n-*Ki2JjG@92TK&)r%4>5nRblrfG&f59EA z%*hrzlVSvxpFkCNv~dB4g8$*cMJI!QV$NYt9>Y{qt( zLeo=m%?%l*MqLRK&ynMFykTvLSQR^WbAjjA-$UgU8y1gyDxkn8Xk+%jf6Z1#?32_P z-y79v5-E-pHB{ZMQF&$hdlEnm4m*_+I$s8*9|@ZIy=~cZ+@z>h>dl_g=n(6_b%(ns zhU$eja$eN0^x%ne26ZJ^#tVxPQYN2>eFZ=m9JHj4lC`S4$cOO+p9h;JBggu|O%KtX zy+_n9gs_x2u1VdUg>Yqt!OpVshcUSCk?;NIBE1uqTU#~SD@B~!wWU=mwl zx#lk;?1x#Kh%EXbiW#4#CyjZ@RhVt;lJ)b>$;&rnB~!Q2MO``w5D!x^L=GR9ZV05` zbQ)PiuL*uRnMZYOR*9*(`cbY#zp1GHO@aG?jO+*O)5$9FayCA}f0m9S!_G*woq`pE zE)6rXjEgP2`Y4g-g_Y4cEch=&J z(lRpSSZ?1d>uNdVBJ98;5?bub(ee@%i7z*SNSIcQiOg^l$no?}* z@3DSJJIB8pOT8*@e+9obttK%HGm`iM_NJU9d(Sw1MSsGG?N4bxR-{GLsbxH*zx{jB zx&Fxx?>UWM;Eq^74ym~-SXU*E_zXxyc~c9SR!wh6nBmL-XV)qo++G~#?Pp`pC9%D3 zYZRi)_`k;9pB$6zfyU?0^#bXfDnXIXFPNFa1zi+OT&8>leL;<~y-@-J?6avxb+PL9GZiv?E<^I4@JTva~tUjWsdl#LY2c`$o|C z8F9J~Id)T8QMNj2OXE(1wP5_Ij=0cp{rN4O)}l8 zh*%Q~%b9YWe$9BTlkp-!Z&^?RxU{5uJocjkf9x>b(=G*%oNrdGl_Z?yT3M?WKGHZ{ z)biG9_8-aDoDK8C(!Z3|xEb)_YHVMRM*dK*Xt1`~y@1uH6geNct6f}{Hvt%S+TDwa z?2)@Qaw;ImXKM7|LLIoDqK&f``u)L;qaof;CFCNdid%Pw-8oQ47+jYK;b<*(GAok& zf0-ZXl+eNcm(=Z7Qa{6s57}Gc>_Q2I+QgAUT>XccsIPqXGFMTkn zHEr-GCMCTeLFs;y96Y$qDX`)~HI zcXj_JO<8*ypRy1Lq#tggv*2ostqDm%f6(4@gkT6P&K1N-EF~|(3Ed}QyvyZNJ&)NFwZ`5_jaX)5F`ReG%qgQ`SIVWkhWDFJe|yfb<4%{U zRp|22VpX4#7@`%pQ3N|lNpYX3Q^B$;1t$ZzfLGII(a=kxN|uJ;OiF3U6rNEMt{pU^ z@1$3XPnpckxrVtZRlwk$E9Td<^T*6hZiMztE9eYx6;n*J2ktT_V%B#^M(>vc@7!Ka zn>;heO+XXg40HUlFV-%Ge=44p14hb88pjBgX5mWN<9Ay1gaN7YO;totn`R8rX!;|X z@y27(ohGH!(bHWoims(@%&~chqSfC_pu3x*W8K??`ZPAhAtca<`s`hj_^I2AnY+C@ zU1U9|uW{B}goP$<0bonJ3;sZ`^YoV%d9mf^tpeq+z)GNY$5P-nf1#Q`tyx1%A-MAC zf@B1D+SHz+Ir3L_ZW8Ka8B|eibziUx;RG$sYiEQ&3}G4>C(fD(dqQ4x&&L3!mJgdP z2khUCwVBgt^Ml$SVSeReYww zHu1dBgdA%^GeaM}DgdlLuR8QlHS*g_Csn;X9aMQQl?|7g?UyT0rE=&YlTD}^KXO#D zDx(dZU6Lxsk77{K(_@X#@7UZO@x%6w{VATV%&%4Ta$`{Cf4TQ`Wrjcf?og^;&aYL~ z-mknc(qUYU6Lnd~+@ZXM)RT1)o=XXp;yahr>Q$*2pHx_mzcEU@a2W9-(ByI$bl!cr zGQ-N`can~CoHe4+kWlB4jUCCPbkT!E~zl*bz$HccHUvc8fe{G`*I87}e>|3!ddDL6dE+7+H zKqxsALX~ct0>s5B)eTwiFWafQ(vFrcs#O(hYOkA$7m2kNh{^&YR>GPAndaz@Q?>Zo z^)wJVLs;x+J7VUa4h+cYRo%D)*nuO!8HC~2G6e;pc2Z+3n}F$C>LseMi__iKauM+E zjwKttgJ2ZBU&BLGiyecSq_UpcZUCF2rKF3je>x>miyvyiqF!jlcSRFfpLVBD^UYd0 zjmeKpzv@TSXmu-%ZWK9PiX(|+1b#X(=)-%JC9KZ$!nk_~zeyg|aK_rp%zXMSKH9Ml zX4pd5%ewQH^&x_Nj?&mwO;DC1JJ)tgpj_>vpvdo7ZRziO354uO{ujMvEf>?H7B*HM ze`yPoJx3Xc2-tVmJ|3iw|ui%)-W+8W#;6eAH zYM+Hu(ae24gi2za1CS4UgL~o)E)Fl=f1P%CIi(`)JmIiWBH9MwOi7Lco%fyk_U?GE z`vrnZ34d(oI*pou)B2)bU`MXz9k9!cha#90B?hFZUk0JlP(b@!yd6<@@K(!MbqGl( zAScKAQ7Rd2F)&7AThI%PRqmoK`u_3S_g@@us^t4oP-W{E(g-yx--VLzBj@Jcf3z7+ zZl6L1&a!}o6g~#0+;YlV1F~VXhqbkRre~J$^4$U#_J<8jaI(iqoP;N?(}-WYG)+?o)*iBjFvfN4#!%#-45JPKQq{;ABO# zq4#SrvnkK4WVsf>uYu@W-Ii)$WX~v~Se~b(0jG*94zGcAR?@w_ofRe@n5Y&c|o$w%Zs?~0U9HaiM zt)M4yn!MT1!ETVS@;%L{&z^L!=XgI-c`+#m3x2<@ifd7@*Y7t~F?TnEW{=O>(!=7jS9oAwXzp6&)(8DESa-Nc(ny`%$YqtLXlEQU8%Vfys2g zKCp7z%aj#n)#u6LR)Qv<19??esrl0mT!_U9h$EY4kMV z;ug>iu5z7VaYX?Jf9j@yK4=$1o$zWSxWl^@=I_CJTjGntTe`x_0z5%!@B{|k2?QI^ zDeW*Dj1rlZCtk#Z>4>~S!*I1NN=EOa03tT&=v3uXr8HX;ZwRoxA=~BU2z-kbG%X!r z^3M{nmxIQ(JqK!eJ9|WYs+(hjQxBVC+rMmMAGT4*i!-v_f5z4w_(mJekD3s&)LR=( zbOQ;?6+GxsAZ7BAoln0!v=qqe%iiwR`A>#6D1DIa|YPRKwwMDA=9+ zB0xsEuJ_upa^P`X;d&sMLr=V$@2Ya0Z}>gv&eYvXsa^0tg@^5REpFAjt4gbjvkJoo zd}rB^5EpiJe~SU9#1T@0>yKxx_b87TbA|PF{paXW+6BYYFIzY#E5WNZz*UASBS7rN z!=jrL__Vz7bgSS+)tg#?FEcbckHAxcMi+Rvw7vvf(2<0>@KbNCHc(?c@h*D?5)1u( zx*5B9c))f>D)Iq70)EqF1y|=p9G&{UdSUu?o&h^)f0qJI+BU^nnmcGP+dLX|54%{K z!z)`4$oPXVL})I3qVM<~quq4Uc?*K0MK@{%Xg{rTK0-K{x+P3nOD^ASm5q5t*NTc9 z6`*i+2p0<8mkmkd9YkC zcvjE%@g{=}x|a~Ry)?-w!DCn(sK@w6{?g5gZ*MNxhLL_+!S>D@AYB!>)IwFl1n5pY z^Wj#-T4CVfHOXz9bi3?_#Doa^gz;2quh$FZj1<#l? ziS<}4MZFVJ!}j-9y{cXB%aP)K7%3k6BGCc)Vrk$Z^5fq4qF+t!sR0a73F^W0RDc(6{Y0mY^8S z&*^^8rQfBqLXwBGKy68zC4_RfC!A*}e+>M^V**=AF1|kCv2filQ=pycdezVB<$wm& zpBwdp?mbAK%ZMoF#~fB##cj^(Ct>xpTyrxJG5kuWe70IW;zEoy`Yy|0KGt32tOv`R zKOeb%uhzAXt0zr>@%2aPoCIyh-lpBNAD<3B1DvxpaZdDybu7C1xa+inOOT8of8o}l zM%S`+IE`MgbC$l@?m_bsGzl`_{7mIlVoAhZXU&quCAi0|Jzca% z0Z;?({ZSd+KhhPNG-XUcSf1;NOUK1mdPfyC-#oH+cB4>&OB1i+5-HB}0@3GSRAUAI|VzxIl^knrzIP$xaiI55YV_He_?2fR!%*f zBm@8+D-!QHBp$DmcDKsxcNESWu*MQCTHzEocU5e!&w_isD7ZKDeDHLJ{d?b!KLj!er~$USACirb5BBP*&jI;~Z(T%D^}m zA;;$Ht8H&MAxfhdf?UEB@s#z8DmG=KUF49^ zE53h=a=V{b$Qv<$@Y~n|0HBfb1LD*oIEmXnfcWos$cPL2S{?)G(Q^6KU1!?!1topAx=NnT8;>@9(vwMlOL=DQAc(rqL-MJKQKABDR@JX*I zDg5%r8crnpjI1T%2o!wX_8ZPM5PZnmXY$!ll+KBW#TZg8R4Hq6HNN11znML$R~e~ zm*A+n`@FG30GzzZYxn+q964En93jlKOGPQTt^_H}&;TD;;^uH*i1Q)7ke5dvJg@Lx1Yd&Jw05Xg`agCj{q6OWqL7z*7TCDFKv`q1T0Sa1NjY zUUem`Yb}iEF8Cjy%=@7=z@+5dhGgeCgP z4#n+UMJOK`?)+`74E=bFyO$>543b}nUj-lUe~}1RWBlJ0Qu@Npys-*=TH_z@lI*7i zs0-;p0Uda`V~SEM^0weBKSzAce9-VN6qlRw zs!-ZNQr}WW)RyLlH5^`Ky`**C)R}b~0oVZOW@@=jVyAaN#hbeFx_N}|6j}9}f57`{ zgMDwmGOZARoGs3KUW^cvk%x>^AR)~mGY3Njem8+vpvFibQLc~^;j9@4B8ard^ z&)cM_|8;fJ*}V73e9Nxt&F3{ee`tofD}hS)C|gdzyA54i-@m9@=di_;5F5~tUVFjS z{%2E`1-i_fp&MCoEW5%7TIb(q}nUg)jyIYKKD=cN>7YMP}KME!#@syqy%#yzrICN-zNbk~Uc(!LdWIsx^u3+Lz1f8(MN@HyPn zV}pFM8;(~$50mb}5?u5kqo=`S_Ks|woYyLH^UZUZa|j>p0}Z#4bvH0Xw#N89D=Iu=7x^TKk1Ot2FE%AT--+ z*=Yq5sN27)b+i1$RAaKO9Kb3H$?~k-)d(&HI^@p{CnS&L5<5R8YA)G-Li<6^_vSP$ zWtwtJ=)lU;gr&`gOREPhUOWBquWy|7ylg*zVL2r9=2^h!CFlW&e{gV2XKzW{f8u5t zq|WJQ_BA{>1GVn>`3cb9-qX+e)Fp}Bd>+(AQYWXOJ0`Cf>_q@!&ybxy-FkmAsX%>8 z+<(i9{da9@C&35FVqE3@*I2sd2Aq+lJ+F1#Bf9*(yY0wkdf?Aq7A**Gw$WU26*irA zQSA?wxPGWcjs!*Qf8f3BVBE*;Uqf3Jf2tbUZHcZ%)>Np$G&Pq)hN}>hmURmvw~ggW zltPmYF`>a-l4V_iSGSE>l`=Gz+Lw>N?R*m_z2KzQOJYYHZg7H&B;7sj-IF!iOx2+8 z)uN{FEk_X7x`;@e-kKlZ06hS)T}QzPW37INyZOWUUr zm^UO2Q!p=(Z0r2sav8PerJTAVo^l%bqFdq_@EntA;<&J7RE!c}(TBTLm9^>Bplr~e z{5m2)0e6IKYD*HZt7L5RZ@Cq|-zV{&5mHcCE$ zC2X^N<4=7E#JC6#AulGXx~7NkL&cPm!;d`w!257S z63r7GU;f?VWF)Lz+Q1(ty%EF#s&%_|;d#~P0MO$?E81=Izc*?}(o4$D&P2;}@=rK)!WzV;PlZNN^He{ezI2OG|^IDggb+2gzh83Gtl z7}68+gZ41n;?`RULs{q|t_dbknkz6Cllm!(P*_7I%JW*QAFr$*-us3k?gRbslhgf~ zS(^4ePh4O?j8sUB3?WrTE`DDlQJo7Cl|sy0cbK%7+hsMjpO4HvUbOaj5q|nCll)kB zqnlPGfA05QR;IutZt;D~sgP4Ng{r=w9iSYvZ0(tr)A-GAz54OxFV9&Zv{mDCwyV~( z2Gc*g`9wA_SsjAyT-lJBulutYQ|^}ScrwgxQ7sehuLil-$CSgfvSA&zmT6Wn72R7p z*+2PdeM;s1TtiXwokog0(|q@AD#hl#&o?BQ8xX z71CLd$2h&5!Rr5$;$6kn$o~mt67szxZ?Tr)HjqvFM;4c~DchO@Djkd-j)J_ksF}is zf0whj#+qQa>v^B}<_Sm;qvu$;B_7!aX2HfT0yG3lDtAJ!@$!Sx4QbjLKmlUv}*lTG(~ z#|Z-J*loY)T2v=+k6ffhyfcm{c|(vde|7d$`**{uScW`ao}tA+nC$V6ublqcW-*9a zB`7Kv(3RPYWe7R&$@ZrlSxL3$$l+WPT#pjM{d>AmD6ceZlUThBN4yi#dtOd@g~hxs zWl#<$y#V5MrtHOD=r`Ccvos$}<_X>r^;oK8M~tCOlxYe;$XH z^=PnH5t}KO?ONGNj#*t_)5K4*5nMX}{|&X#Qmc*HmujQ#-rZVu-o;);Osl~a`Mf}U z=%I0WIhVsO$g$b&ZI#hf<-Q7|^=Ia5#oTj?EDq|fs` zQFLDH7eCDXG5O8(MRIXy2Ch8DE-&9iHRN)7K#iAJ4Q&;TGJFKL)SM$EKGAgsn`x=+ zflX3YUh*~XAb%VtVXxOVY>xDr0tjc?x<_w3bNjc@&`t22csOQv!?*R#e>X<;C`i`a zsYKfro^>e>b>I%}SP%B{upC%jOo-_X#5jqJ-GLE%n!^^WrP)~qw*K;3(A{Ij3mh-^ zUKZ=nPPQMQrVtriuFduClu9K9dqUN&wUcmqr1MVKma%FTrQ?;mX?JgrjlwwILkNg` z`x^k=8~Sb^t}ik(=Wmm&e-4;^kzEI<)z`;Em(Av+wU)Tzbc@Qiq#q6j%Qr^E;~7Q- z)=Sr&ilqZKr=LBT8RF$V;?;eess-*=CluD07?3ua0VtAPN2w$0WM5HUhc}#cs5A+; zw*h_ez|}7_i@v0rz^|Le*!TGA@|FlXuRt5)t5~Afo+LhDEkM1@e{mYhtH8r4#Y9hi zZ(#C30$VvSgB+X{P`1%td<99+TO#VZb+#f6;jKzEtW8#z<;8B|5PD`R6(+DzK@`wK z)$S4S=GAxqqaICk{yZ}Mtp7%jR1}1$%giKKUxfhryrD4F6}c|*GS{222h70A<-O(2 zYeitB$IjJSdsm+1f5@-UI*++LhqR}+5_`jXS|?SRcml>imv}%T%I?w9ijUG^&^5Erf6%cEF~cJ`QnmM5VTg|9 z4iR}Mx*1l^wYQk@W^NK9I8UvRE_hr9yjU7)tH!u>F|SS|v#;rUkP`GFYPYQsQR1Fu zCE)?afQl)*teokj9}-Ki9sudHfneOGL^es~a(t@Eu?P}j=Omp1!Apxm`ON)q@5J@| zIDj@$v5Krkf8Ge*cSwKrHl$M$og|=`_t-rmiuv!mAMn?Ha{PN->P>)QjF5Eq*Z7rr zBJULM=;j-7@}tR~PmF1JFlVmQ`Ej<+Oaj7(&Se;5 zOe#tn-U#AM7!5_5Nq{^zZnfTp?87?%-h6!Aig0G@n5vBQw(!{FCX=*|0jV&7gO{P5A}IjywP zY?!^qJ@Weu<=gX(uzqA-9Dq;j&Ee7F>rloxe-WE5FL!akYo#QmM(!vE`N}8F03WJF zl%1}K;z1hN1KzGX0gOv;K!nPhyCNF)hYjx9_WDjWJz)1St4uUp4t<{tK5GkmUUW#eZ+av3-tLl6QZ3j-MeNRZni}vXL;+|+z z3O61iUs$bKn&F&&W6Fvc(@>8IcCQJKNs{7hFs7I4hhut&=+U8UNJdT@$!Rgbe(RU5 zF=h3b#M-v7#5(Jb_RW-yFBNf7)B7 zBI&Xi8|^(Ut?jrqf2}x+*;7%l%EXbAN3k2i5DZt(u!!J9rI~X16JXJpUVo0if@Y}9 zN#G+^scqHZY}3uL+S`+sDn|`^npa?}`IN2Zs=l_!XsDO#P`sNkMSo~7moL# z^-e|N|4+;pxD|4KxG!iazcgtUH9bcaU(%DW5r zy%~Byme&e0!`mI_=y}iv2Ga_mews!I@B3Cf06&f5HgDg(vq> zoiS;jcndsf-AHrDA(l_%NaWq&Yg^Iwe#R~Y1QSevJ`*MJ8?WZ#X9Aui9?UY`jfh?2 zp&JS}EVhUPOJ^-Q(=lTu{7yPa!b@?s)U%rsEkL0bo~NNJ=vW~m6+2JCO7GpXi^!(TUDH?Ucpmmz>M8*>8NXbh#HKk9qH z;TGIv3K zAmP|k7P?kZZKm1wT6U4elCrM8h{lKfC|UjZ1AL6}yxU%U)Yi8jQS}~~WamvLuLVBg>R!@tw<$ui_iF2NNJ$tHIAlW;0++DHfu!{+I>N-L z{JgON^4&icRp;BQf0G_88KZR99Y+W&VaL{yjENk28a%O$9Z-ZWJ)F+2ULm&c-I?d$DqY9tjFCd|Hn_|Fu8ND6Ra~d5_Pu@pK|sF0MY&b|o60S3 z>lXMj;sr}vOG%W)bP_s_o658`92Z6N<^jXIF?{=yQf&kB*4b9#{79Fe zJM*yvBlk%T_B8nBRBF+kC|bHJS46-Ub)2Vd%nC@nr;!sGp})fOeNO4e1%bdyI<=l) z>rcaj>f@kh)^=#Aw11x|!_um?GejT>wW_EJKfZPwX#a>Jt^_3L%ul?8uaF$lII1Hb zy3m&{il2pZ2qObPK?w}F&R_&2rK-IhuP3;EWQjyDx^n zOj%3YG)_kbppKoibi@iNpSvenWl@A^cVrTigSV`9J_WLOmw!NYCb2^AkctZ;H(8Hc zoG)@)b2zL8c~Ox|x1DA`$u@#EC+~c16^1p$P88XFPNi!(SmwhiPl>B=c0!iQ#@3B! zshG`o(4i;W%eSGuJlJq`UG#E28x$TFk1mev=#8Q)w)W`e_UY!Xe&*2=UAeMw;3L%Y zd8KdOw$s-)uYYVG;j5lIj!G|cf*dMFFeMs9rT6@a{t%{x%jnMfNYhrq7 z^Fr_Do96Wn5w9^tkrbPI@+!*;i!Yk|K@G~5-M^P?_ov`AOzst!gEGQ(UMe8ffc0R= z!!VahOMis((!_V6k zW>Q!|`3ysq_|JFd;&NxsKHZuA1KimJ-FjkxTYtkAYG7Nx3A8obbs59M6SqC;#4i3pgB&anwT+*I+e$>sSfc^i*XN})&N27OSP1ONc7Gh z@qWvfFK~^6UpI>#^UB_MC%8`}*#Oav2>Y`{3ZLqsA|%Axv@vieKp#+dQ|(n5@I67F zZhv+q#ThZ^hMxK1 z!(kXh|LE?g$#A+Ew9Cq;qxucr0X&xloLi9N?M4q}@9>XOFzd4Nvr918qj;LWgVEVu zg27Ip$7zv1ho_jKlw#PU+X(g56I8Rx34f0KV>zy7n*;I6PN!=|nLsZ!(r}A)%1+kAPJdNu zE}#~%!bc4o!ybR*+oZux6OpJE+@W?}l|}g|J29ss136s$raBJGbJ~RIe&^9D)V#b& zHacVY`w9|E^pKhSonrVnwH3>E(rf2!x?=uS#M zHenyO$b>;-{*4PYpR`$9$B|&44S&aO())9&mVkO@)c!vXaT-@@M_nM)XpZiEW^*XK zK%beIPgQc)_Oh-l9eVjI1JI>p-RYX>!o8wVRvL@RrU$JpK*2gg>n;cpf&-Cx*|;`Y zeBG@t^1bJ$NfXcx*0jD>q+g@rI`RAYO5qoZG=td!bmM958a-UOI#5+@6@N=RFLKaM zb%5hpKkuvF$DNevXlG?d2Gs~`P<>VpsEpORQ7QdtB{_*t8Y%m$^@PB*G!Pw+E#SJV zA5N(r8npev7W=q3Msx>l{#uH}pJEjv&t!VBKkxiLPYIn)u-MEgDaNS;7jVqklV`CPl#gJGjq2 zLBuQsh>5m9Amz}#pLPkA$>84PcBn9xE_pdB$49(RqXG$m?tumZUnJ+aR&tl7h;k!F zamcK&|Ak?QR84)R^m|dCiDyko!ifSD5|kQJbQ%r9j6=;^xG1w~vmwq;ycbt)bsF)w z)By3g+#7){$5!LsAb(VhPj4RNG0O@k|9is3w5rIJ;2n8btrLq<-kI}H6(xqV#e8vV zFp-oG>z#yj`i`FsL7<5rC#$n&$5T`7f||BF|5g<^ZmID$=D0WHaqLvtTrcJPbqGeNjItnU0!AsSdtDt7eyXe?DH;CzX~zjE{W)%# z87HggJ`8i#g+xsV02P}Oc)NOeG3Ed($PpC3@SIYmCx4QFr$UQoGZE2YNJ&}3Hb0vn zN?MN;{x>u*jk5jB1Za?wd@Dr9NK3=fNV#`t+^QEZomNJ`;rQW^Z8BZ9F8^?FqBT9A zAx`+sgr}IR3ZJIdlJUE>&k(3|m0vZB45xI~omivf$}E`x z87&23kii+&0yvI}KgX`Qh{BaiS$~+J$>MTSGSsw2%`PWFud> zz({NnHY#Bx`XLX{W_z@M4G_>q^3#mia7PVx%74VK87C*guZ}XT#OOnLW8+uLEhY9w zjTAlHC*ey|8*Q?q#V8;MRSgP}#CB2QHla-pKB%fhy+}VjazAMFV>Q8!p9W3Gviw{F z+qT;dQ3BW3fVSJgrcvpwMY$rlbtT)cum(dPo3RxD(Z*1%=|%Zb5)ZWU#sXc>G31O+ zF@Ih}kbcswy+wOiidXoHS}^DgAL)y@T9MpF32Bgwwqy-nQ;?qdx6xv0Xf~Mw7C<`& zK)&HP0j){YQ-5E9nKO<9UtmCo&hTP(e=;q@9sD4=Xy18tJ_)q;Fc^B+=Z4Z01?E4M zybtJLiW9QadsX%f?kbTkJ<*+!9(`J_Pk-U88q0xb-DoJu0Ek*FXJ9hKfGAq=_wkr{ zu5w-Lo+0aa_gYW>!3P=NMfj7{t-Pe7i8tzOMETG&{aTAN>B?z!nSrZvDT=`~*sy(rl@ymCtn(A%Y~&VOaw zP>^Evx?sP|Xj3av`#Ce65NA6R-asmpxPloiyW}~3N(&?wrZ!+&!NT?^9Xl;iDpwN+ zA9{K~!sGqSUJs}r!}(`!V1_kZMja;~q-uS}L+g?EP?9i}1;fNVjF-y^Trk)sFOy?K zq6a^N8M`%6_Mg~bF+0oJ9}Si|GkwRQEC&1O~#x;K=1T8IbAHY)ioJo)uvnn+$I)QlKylRhCi%g$^AyNq-A&LqTW) zF(XFkH&fXID-<+3K*9kI=rprCb<##U4>JY=eTkJ{j%zWW25;+TU#^kLE~lPSVKAD$ zG(IIwT{e)03@al$FvHytzWiog->Xbhw{A)zQ4mhz z?{!2aS4$|zo@ zyYD+5zH)MG?{iSpdBUN#A?G!L+pEDy#7!9)pYRSXOTavoL>8^eOEkhht7o@_<%SE( zA&_uktmQrOG=drV2Y*n}6m1mMpWxxcv?{@D1R)sw(|!b-rs31~1_{n%qqQzJOVuun z{j$~McQE(9mG~~bMX@oy-Pj=tI>B+K7QQ=at$&-tla9YObLSPi{@k;A0Uu=;gSWmoR)6`?@rU1$^zKbGaQ4g5 zh*qZww7#>Oo<&A}rW0)4(}sA%^iPpiuEeI86Fft7E$>v;vR90GK3~rBR7R-F=gZe8 zyd9joy5R|jaZTLgm06cI+k1P~TcppT32zw_E(c|8cc;C)KH<}Z35Ro7ZkRaXcv%?o zgrC8>EUOnYD1Rf@njFmBTuH7Rjc^PUC-obTWBPr2`%K;DBdFPTOew4NsqQitFiYO)h)sB6=nLP#I{jU?o1=nTpa?P`hRo*?F#b<=Z zchnh*=Abnh_TqcUNDwo9D7fl7?C;d# z4}1==;ytd+P9nHX_dJUjo#5)_n4|F*y1a4G=bOLZ=T!ZB0oDh9x1}DR$K%^AetQo$gpo;ZB>Hc~JyQ79T2q`XTN&0$Dro z&CHwMZ69FJl3sw8otow|cB8JU43@-h1RZThR)4XmkxXnTlqW{Gb`bau$z$)qZ8H~N zL*XaGF|-eoCo`KBi#Vhn776@Hl|gpy`KHcJ*``_t@qLPDZw1G;eU!brU~cDW0YZ6O z#p|AfYfK112KK;t9lD(0m`f@L$T)x8GE5OwD=$_=U8200LiD$c?TnNquN#O}(2>6} zAb+9~O}XgJNALrOx>#`R$wbfyrRZ8MMZ$)|U@_{kh~z~WMoDtYX6<2YWEkaK+@d1G zD7L`mL*v#ev6HVt^w)&D{;LRw-z>{+12@AGV6TdBkqX%RB@z^OrxJ0nfV^`QFMX71 z@6M5~x+U?nTVE2+4_p$T*%VDj8kVcEdw&=s-N07T?#OISz>2?3$DZ|@F#4z?sgs#e z2x@UsT$F1$hI@bdU6uVxB39_kl}0n+mOX4u99cl=g?pw&*`WMaZhx9GIE6pkt<+@7 z#RZgii^|-)A`)5B?@?6{O|v|h1_l#kbQk-f!92gm{PbX6z1ai!#lAI4WkDqv35oBQLXNnR39diDh|A#2b}fx zgryK~dB+2qfp|&_BfOj6fyY08)_)!|`(blRTQUtZt;oq<6WM>AC9;-iW4;5WXh}Kum@N8 zqog*=Y+Xd3dyfCSU53F{>IXyyPKy2u1~R_4kW8MbE4c~=e=Za`;y1xO0Ds4T3FW{& zcvhfD!>YZMM8uPz`XZ{{2zZEE2^ zTVfIyW?)pLIcQaD@X*j-iGQ*biisLpiFIfR@|~PZS3%b0U>NTvdPUywU})Bc;mCi4 z1hv9KwdUoR?{H(R_~OhzFf>-^cJI1}+ z_{m4+DfWf6e1YF~-q8AtLmh6dPZ#sbX#FPz)n?tE)d6uW$Z{~6mwy*u?Oa_)0W^LJ znpJ`4>_@as%d$;RNNK}I%C*`qm%`XVokG;I)p3(f`#!SRiA{%HYHy-XrR7s2j{25R zlUrkGD^@pm7**!Glhr64b$s4)TCeH49+f62fGzE0d?S%_)20zO|Hc1J$6$F>m} zO76U?KREF@kHN;BCV!P%DqU`d*5((b8ngubYs+%B^K>N%JR`v-BY83`Bwj6i#AG(; zCbl0DnloJPwEwM~x|ORP(VbTE8#<}-X6M6@F9IXI;jI}yA(xZkEdng`wjkgJYDn6s z%!QP!neF$_+PyTxxs{w8Z=zxCI7V}mZ&i0*f{Oto_{Jd=e6wCwU?6NVBlx8 zfwinpyLqaH3(KLP$t8J@==7Xc8znaW7M0`*%vg!{taS{ASz@fUynFUP?+m-=>(1!Y z7fi-)efoR`6<$d~bG@ai;no{1-~@U%mPRHE&e_zyFWRKpaEe%JrwBeM>W7?>1-bQh z9;z0tHEj8k5`VTD*3}>_5^0+Qq;*So&6t;9n7=`&)ZH8UYNmKUpA5L-^q^tt36n%w3Z!*E?VNZ# zhb1%NrGMn>mCn%7+Nyj4d5-EK`&>91bbD4^JtsQel2JwkJdsl!-^|mND~Lr6B=@E- ze&-(c7D*~M`RgO}`MfkA z5aHH@K3#X_i)e?@2loqC?_AZ&brb-h~eJRju4FV#+9mMsyL3lg#Ppi z2|)eSFYQqoMf(&YnA}7+UzG^5a{bzC<8n%0wA~8?+S--w(f)%UuDSolVYG8U^wF9A z!-ZKut-;A9i^jq{O)nN^uSQsy-Y_K#Gk;>SWB|oa?+&~ez}mg+$19W4D|5DoE**N} zm3cgWv@#3!7o*_K#3p)0tjs#LGUn^6E3?3=uWMJjNAld+Es8!3dU+1#6}|jf>*ckI zVWLFEPy)~+T%p?#(Px5pK7WKdZY~KJB_@v(sQl9T%1ii~_9;R(n5C(0|^1 zJ=d=fc-%gkuf1_td*NxhM~&URY^u})bl$-xcoqDj4e*KDP;m%YQ9*oOtMEoN21g+# z?pB&RF?Z__kq=8d;qWgMA-`4-n`riGS~gZcYT62~eu%3z;;*GvB)!*nx-*}I{@e+OG#rVck^o=Lu8|~;DO{e=ak8yVgI5mZ_p?`DCPb7z> zY@aXgSGtvqx0EeV>DLMS*C@V2Ci1kaUnlHmqxgXv>!#f^{9pATO4cA)X{GHp1F=DD z;Sb-;jXBEYeLpgHj2hRD3-M=@EwzOPgDVhOK}5m(uupPFTIn69d$2OoX(pT(g)`Nn zn}Okaa&#Lw{cWFqzHe9vO@9Mf{acEFoX!l4p(k+SW>-A%4?K>QW_o0TVArVphOLgB zP;dG6_0F&6#J=Ux%00^qGgpKbX$9_wjZ?fCuUM02Kv2}ZCMBf>;5A5b(}riIF)KCg zs}vsKX0@ujUGR1wEYK-rm-x&eZ0{Qn0hsrMtk9IXi@>IV^yVb2Zr^&atEq7FOqcE(G?%>O?U;f zdW|xlN4J&ACfw`st1hWgT)@U#hD$ao6lWBA4}x&l?46-&D6k~(fMgMW6%J5J~Bf+LixX~WTis_4cp zn2=r8cUCz=WYf>PLjaO>H-(y@F^nz2tb?(%COZ7W8IsFfk0A45GQ+#NMyP9 zU;BbpV>Iz1QD+S&Ib>0AMhGX9XvTIi%{+b9)gZ~xI~0JF$gepIK}-jcXDr%w?gv(k zB$A6qlz(+nCOp(}G@Q;_yKn2xP9}z*WHm1qq4|%nCT;8`KX1?7<-J+AGWHC7Ov=6` zX^>~Eh9;Iq`%`HfffQi;qu2PK?Cb2azWwn# z9p1S0wlQh{C~f!wjb3Vp!W1jwHtq-winfY=gQ+R zRpvxvQm@bTUcXokK`759-Q(Bf9y2++tetkH;uF{V^~Gw?Km4qq?i-o>)bQe)M1c}2 z&;L#3vMcp^T<`ghtMQS(@=cCHzN`#{)W?)8>+e5YR;kzj{U^%`aHZD)T+b#hV{#;% zK!5hzzP6A5O?5A-K9cH}XE3R{Pg-=T`GShSzgSOtJ<`1%|D!?wi|SrfeI(WYV9-+Y zW&B5jW_$V6ouKl;Wrt#wz4$Bxm|dfm|Ej)k)Za<{^Ox#3{z`q%sK1f=$1m0AgwYed z-qS1VojmflywYO);UrI4g)874B9KeU0Do) z$`G>q2yTSqIv7O6`2J+7wG$xyVIA^1eX};;@T8V#o~-hlf%IUnaSgeb`Bm5qbAZ9a z=K;PdCVzVLC}C5DT2xBR%EA@WqhC6;jqynQxhp%k^bv>gim?Zi_mE|57IjyEHh-5s zsneT`CG}2HH_8Z=2D{pG{MXX&SW*A=-}X2KoHgq3FLXHQ*@H~iz?H1k#I?$bfBz=I z1e(|PNu4Uwi*7K$s54e)!RoMAvLG0|4Pn3LY@YCnwLflw4D{+>jOn;5tn|9h%C=JLXX@BCQwATGcF}hn!Drxsp6-|DXk)v@gt%_wePZ zsaR9<*#Ls6iG7~U&at^kn?+dkb+RGek==AkXF+I+W5k+G?4H#G8={@_XMatw^9QEl zJ=!b>Gv`jGEa`7p-2m~{iT-5gNhMdD9^%JeO&wsTrrXB{##_6Zq1&+YP%Ky~?VPP8 z_bEjQ{kwLvI`KRk^I4fybF_KhG}=GwhjDA0tZc_LWJMa9yLh>7!e6BRWNw^h;el5H zKUOh<{wb5h6N zKI}yMS|>b7&ekYFHQClmt4rfNr38nXZhNHzjJ{A|W@_)21R1(=L$7|}fOVzNN%-C> z(#4cGk~vmp$7P1Dq?E}~8HXdif{J-OEO5oSp^`Og7Q>qDuytE;%zxJ!m;Nm+5{jrU z+ljS@uw3>a*F~;QY{Tij7Gn+*6EnPBKo`?)`pC2TBgHl#1@O$atvnRJ+%x?}OM z6_11Vp$vZRZ1T=Z66tW%oWLrzi|~JEpOuDWtdpfK;6PIr5BkYUDaO{xdU2NpYaqk( z-y6tD29o_x48*?}NPlG#dIYp!Tu$UJ7utc&TnK>Y5cfC)(G%MGP72T0{*oTM_D-X=-+MrdiZc9 zREI5T3%0VfO~X#ZNx4J!V~ZV+GzHMt=8<*CY_>rx(Q(fn+*@T6#&)4(RUnfL`5Em| zeEdoAsubVa#ebQSafFSCq$vQBvmK=^0fjds-e9k$?S;I=(vTQCl5o8h{fS_tjy|`Y zgJ98}?^)e_;6CZD!L;L@BSQ^Fz^kGAv)+Onz~XifO0Jz%`CMrDLBG0SQ%t+XNkcDq3wX`6;ap zUve$zVH&UHEHoJq|7M2g>oo59`XY|6kQWASB{9*_mRxn{r&wtbpPI`gl=X&6QWHt6 z2QzLu_J7vX7lis{ySy_Ob+jT!f=9n8MV@MKkZi4;HNsuzVYq99)Tv7Me}b4ye5jqm zL>8G~6Ua!P5Q?XQ`7`+%tbf*q^$#S)UqwjY{~ARdc#3Z#c~#-)W}}{w(;sk*&dn;ghiOp$08P zPV;scHqIW4I_s4eF!GGaKqJn55;opGD}?Fi663=Ct&Y8Ee1sPVP*OUfRXBGg1dwa^ zIDZa%u)6KZ&%?ZvgUC6|`zT@F z2W0GQZ)fo&SW{_TN;H=<(YEv{O%p!A9Di#N&&H*@4S`@HVZl901!{Nfe{66$qL?p& z%Y!0UgUd;6OGIuhh;@42hO?+2;xL$sA%96*T@gI#E1fA%tlpF$mxMIyF8p*W?9g#m zGgf2c#%G0KrRg|p5NfM80!1x^Aw5^u`je|se+nD$qZ$YNPQKi9I(x+4@BcUS9>nK= zbm+b0rsl|-v${OkUk4ocO4bC}>{-aB=0b?Az^|RXNsWs3a!dDh<}=$$u!# zk=?;L5Om*u7+Tegp!@wNLH9o|ZY%H6vDO|D_s-LgBr>W4=&}~Pz`mA5?V?6v zG%(f($do$QE+|ygf=RSu)qnAwQGbgO6!!PZTeCEZVtL`I-2l7u2f_TS5?a*J*+%?! zASgYviGvS9U6(M!*26FHUJH0JGJ<8eN%fFa!Pjx_*IVIz)|jh*6uj=ogV*&!&8KEP z`?FV07q11inT`e0W9b0W|51bH;YMS@2}ujEy05bAyr5WRZu+FeVy zz@lBNw$`rQD6NB5X-KbY0M+Xw><65;YwvXANJVV&8z6?RxQxhGO9NTnv{7he18U!Hmq?yDQG~X zWn2cX#y-`r$6?-+_85cJZ{px-<-Y`;mbbbW$-5>1hQ&b?Sl-S5FL;{BB(1ELN&aIZ z>>rAbCPYgvmtiRf{( zil(G!-YP2mch)M(4_ox&+B!?v6E z^(vvHIt#AtlTM){M}3v%geyl^tPg-?S+H{cjX(yPlns_QK0SIU0e9e?IKHtf*vc_h z5^aX9&`rc>hw?ymHUm5Y1P!yRGSSLK_fGv&_&nDxgH&@;uH= zGIk6<LReH*<)G=6o|IGeouoh-!*JhmN!L3XM84K!zaQ^o<#`KE=^&c%lM>~BA4o3ki z|Fo@tb;diSFW5l2m$7LIi7``EMrnx=<7@K~(qks$0gHWB$pnr^?XBG}_2+nbD42^^d3F5SGLg%r z(#v$Euz#I#xJ4O<%ce}XGi18$1<;h1=_EI5MN&V`x3IIj#c+QH{l4jfeGC44&Tyb+ za0JOoMgC0}SlaYT1=o5>nxo-)6n_b6TEOIBTJISC!w3Gjfg|nUpPS z!WE8TOVN-~lwHJK;T~TbqU2EFtoF+m-c%w872y9OxGK+?)y7IMyc-FfEXMcFuCXkg0<$TO#W&K%Y3z!oo69aQ z%X$HodZ&+&kxva=$uS8JyqzSMO;qQ}CTXYP7$b!pX#oCi^e~VI3KBmaK6@kRlCQUl z$8F+ad0x{Df2rPiMy4*CkJ}SgM0i7Yx_^`_9-4`^XhS-iCHp#UqXObbv4#DN3-q0C z(H+AVTrXB?T{Aqf^;R>}2EW|L#MQDoCglQtS&w5@Sub7^NrvyRe^M@6T@up@&&RUK z28w7TFxGXKcQ?An-rn7|EYiI)1D>7JI7<;&ebV9$;ewW7+BR0j z`t^-EaPu~SYG&8CQC`hkEB=xa^bsyqJ-3vAsv&O3J|CEON>@TzpP@WTt=RF%M;7=S zX!MG);&sd$euO zE5hPbvmDZuGk)gN7Ie(Mt0-@eMK;i$gMLgY8hI{P|l`a5>Ho8UvSsZ+?s%O{9 zM|YO1NwUG^5^yg^oZ+VmyPbL2+UHfPS!|dIPmq5MgOzfH8WdGC;?deww~Uq5w68ET zQvE`>($Ja7RyS-(Vq@20EJd~>3bSW8lZi!eIp=jtduEY~tttv=`hW3j6+LjCqzqA~ znHYJBu^Cy)|D^+;CmqjrJl4!5-i7;{o_5D`*0Gem4A`5ujrbalSD2$+Fuw89CAN6~M zD6{59>J}FX#k{Pm14Xp6%$Dc=ca`aNGb4P=aOqu^^2)B}@pS;X6VRIGGc>c3g~>Eo zC`m7{*+Ah)A`j7T$wk?q)Y}aAuOH}wl>+#xr959uJ(%^Dv44UoDY%yBD_wAHd?Jvt zZs$fz0h@ZeG%CDEuFJ-fqfebZo1Bz$@<*)8XJC$Rw4D~D{us?TmktL}8| z6F9ROUjg5XQ-1`7a2P&Bk)VsvV=jRi&|I(&k@`KJAXjJ!IS`wa^68x<1?ZMu&gfBd z1&1bY>aN+Ry(csFlV?n)JoRpmQhuLtBP-Rv8D&7+1r)Zkl5A|`#f%(qd^Yp2La>&q zPfC7K5jahWZ8B&O6WnF+2ib(YGrU=2eAmof3B1yHBYy^y4OoVWn}_F%f587wMNHpI z7O_3G5eRrcyG&xn0)};)lN@k?=s9t-?5eVKXLFr-g16C`p^?0`yYF!;v+(;x`F;u^ z5X}viB^cCs6!s)o?{sZ}1rOaX7GWD@X`{*u*_IFs)En23byL-sg0c|0Z-n)$*Xq-y z%ij%$5`WtNb+QJ)I&}}&UFPdhSJPn!E`%kWFJ=*g<>kkf3A06iyZMx;lXEHa%Kh=& z4QG#}H`ZOMs*9rl31x~vt)9JyW{dD16K|4$XDK2W3(FXErlfcv&kRu=T!qrLXcc+- zkj_hp5~i=Yu2pe0FYbUqbZ1I6LIHsRcHZc$gMV6=;xx*y2wPX2W|C$HVA|~gkGpYT z*CO?JRD41u2?z?%uKBTJ2yH6uyJBkaLzhOQFbkD+c@xvs0{e zn=7ow)5CdhDH|5{!WRF+!pgngKmUV;U4J7>`Ie^bZ!YcsQP-AsAxnGy!=+W>(k9J! zmgoD^g@@CIwfY%z^#gu+`^myn;uiLxzgXIhy|f<@@hujXD7k;>z!&4}T1Q^kU?oaq zi1Ti6<6p)*RNX{HTIe4!|`6EhUfcycSa#HCa||JCEW&Sbu{5 zU}lo&yaopy>yQO|bp1Q2?D1nMUkkDGTHH}iq+VzMBEg=Pw5ay>x2zQ%v%{vPG{E^D z*N%2IxnSi6X)UMh*1zfbr{`(f=$@i|-1o^EXBfk9&Po2&Ol z_TuZoK!fk-kqV`b^rPc-;uMVBBgdGkeQi6sP>%4Dm#@{NcykIYtsSe@C4ZaI)1J2b zp9!b^`02D~qOW{3?NPDySEfB&gh*l)-)S4J%35b&R(zR8>w>a1(i?ribs_&;W_?>cT__mnIczX9;V)9 z*?@A}W!nqBAbj{`H}Gcb0hLfPqBE$xFJ4|VHvcu}O!e+^>=V<2^72Wb&ARxfB~kZJ zS{_nUWNmCO1Pz--B(~M>UG_Kir&gx~kfh7t3gmVu9G)V+t@(YZ^M7Ztw7O=bhP|t8 z)swA}4!(%=J>>8Sm3tZgw{~zaKCJ~^dJcxnAF)2lzc0%&9^@jU?I~tr8sxbheyc~` zMU>i*EIHcmZAQ=4{XG0dZ3R=cz5IP@omdr`k2cn3WG1Ih`EMUf2Vo|trlC(B#r z?j`EE4}EE9oG-!0sai6u`&AbXaowRV%PFRkvPo6&>COu3jNX>B+4@s=14T^lw+0$) zF5UOAh;4Zd7EdOW<|?2FcgyX?37~C9`oF7|Q5+M$93ClJ+J9i{-sfW*VL8&M;=BU+ zwo$qxTS^SELBy0v#LU^)&LSGkGs&UL#SK&(HyU_ z9H4Z4wG0u?oc3`W9oQE_n+Z?s_1SoLI?toMz3h~UIKrGlx-qY)wjjwHKK|-X%+>(~ z3@+M@`y<;huDny(xbu$X_@(Db%-D=+_5jAlic3eYJ%9EfNi?N(@>j}nK3($=B z`Rh4IA9KZif}7+c*>rYQ78kCrI#gx&IA*@ zRJb})<$E371k;`Ncb9MW$0yyD(f}oSk zT>M9=aCRGdD=n&haj_J7)6d!;fU&6wgID=O?tGdFNUo%B?d z$`a!BKe3z_mV^C1EXRh9Mj>u~Uhd=XdVk#Bzbr>|nbeRSDmqw(xu*ka z{b`f%kcir(J!2MJ>w?^1|MPM@H@&ML-d<_%YB{2h6?x5>Fe-G8M>S5)9kqqWNn@d*mpR(NO?Y zRKFrmQ;KEvDFl--ah;(mA=0uf?jbFXa$vV^9q~djiVe(gtp<+w;cAuO{@LqGhxQhX zM+c#ERq^-bQ0a#%e`D@$u+>}A9@Dx&gnxgWRb11eGv8?+g=cxKqfmY{!}$bU=2 ztLNFLdU~-Fauc%|r&$_G@}Ct#tUoN+Bkz!}6eJ3~p5p&5<{PnQ69iDV^l8$S4kJab)>-W^z>)g|Nr^)-_;CkYN+BR9_!`gO#B4u1y?luwI% z;1tfv;qk_(XwunCWXsz;ki>VHgbo74sU*q~IzZ?5>)(@H?tV`Q(J zbp8l)y0!s%e%g)%TwwS){b&id>=PPa3WV>o3Y}4vmfIhy=TD3GoMzEofb0a@e;eg1 z-n+SN%@UUSl-~0OCFjEkMt}Y6F5n_!i&a}BC+X#bc@Yf?iQ0=a9MzcKsPknZk_a~_ zM8u>~R+8qVS6+l+GHgXfA%?rphAkO|*mn+vNPzUyE-6v`2jEOBNn_Bt0~v%fQzS&M zwB{J;Ci#;)d2q3OJIAU>!M>l-D3z&JmItCgA2L^TX@E?*liGe{| z&e)d}7}VA3l(4II zSK@(^y!!+0Ke&&MWyF}umTYXXq;Kqluy&=s{Z>7eFCSl81!jEwyuI4P(k`(J*}C!8 z&q{7x>MT$e1j{YGk-nWkJ%y<+-e*@=;=zQ9gB=V zsyRd?lh-*fb%~VQYN$ai%|?Qm-gp$oZ8jpos@~Au4{IOvi%6=!lw`mQ`1DoaGuh6z zu)?fw8CbQk_ry~kQ{X%;HNJSoby{WGGIvgSqSJ=a<(jF6S^>wW1hK3rPlMUru#Js1 z``)pZ-G5o+DI{SR&Ue|+Z&ymD;f%qV%Glwp^^mVyWIV(f^tNu*|96`z;4scAySDcK zLIt7pS$q}V6iGs#4z?o*K`{Aba$~^o_!T&sL!hUM%uf! zf`2arp}c*Qd0kx2Yvxdkm>^+f*9ptX!J2v{uXOtTKh^23?sO@*+a$#XXJ^?U3XEt` z4Qq{b8{NIE8efIa2(cy+@-foE$A0>+ zHyX%Oc^xZlOFSWd`-YF&)6SN7&R>*xChrlFfj4#u4B;~Ys1?v*`}+A%s`S*w#gSGK07ml0k`$_6mJ~vffV|9xZf5cK`G0;d zf$tBx|C$GB)crU3#H!{K<@{4nb!eUqwqRb1j$|43?v@slN9-SRdo$|MGdjAEv1On(JGxmaiHfKYTR&;OS)yWSOMcfn>x7*tzJxExp< z@DeO%={e+aDa`)Alf7*@{_C=lunqroqlH_E)rUFGbc|`-O!a>-@~U0p$%}+Bi)|#%XGA?wO)_WlkLl#DDS<|II0M zI5hUL%*^jQTmUmb%)b=AaawBmyTt^~gHe`pXXBG;`j&r_f{WlOj7J!b;88YUp}CVK z_3AGW?gscy@|UFCIu8Z9bzAl2n??5Dv}B?DF{89)wF6;c2j}7Y;Z71>YKba%aR^>K z7IzXLiITmcyM%XBNR*2@2PemrR84B8AggunS|_J^s+@S*NjTXoA4m z#fT!bqHDMGljpn4y#Le{vLX^m(Yo*sVc+_k#5$Bn2m*m@`@*XwlbFM-LJEqnT7L4>pj7qhs_+L-?DOQJ_;9@*(V3`8Rp$FzgiG4sd^m_W*#) z+!qt|1v?Nqn%|{Sl~;VAdf!&c`7yjHvj0MxY|O-k?)QRf_eOWmsHus9|G<@ZFjO-b z(K~m5zc_M_V+pxssFH4E(O4PDiZHM>LTOTw^_UY9Ik0@>@P(J*8tac}L;bjq>lY#` zLp;36%zNw^CTUP{-}af3JmG&3LB++}XE^h$F>j^sC;Z>9GL~^bQ}F*t*lpS?Y%F`> z0E{P${FYu;Z;*(BNyZ3vh$n*Nrf=p}ViHEylkY~E7gp`9T+;ft%0mD~y=V84XKNsj z=JtZ9z~-`G%TOF+K>EgbZt#gCH}B3)f->3X*iH@lXAMM;*JPTYUvMh{_I51V146sQN^2!y&YPtrc>IZQb=ru0lYoOjwbs zepN+FI6AN+pSl|##9d!-gii&*8%s;c$-xT~#|CW5^bp!1$SJWHWA)2Z&}3%jv+wZr zW?Zs0yeiKphU0nMtRa6}Qg449_nzkM8MVcf9=rA@ytJ!1{llpyM3`lVqkEJwFAj+2 zzFSIXS3CxFx7LF_z{8qXft{P*n23`_NDXU4DVE_N-(H!tox8a^rVY8AyUq?f>m~h0 zH^*angnb(vi_V>xW@!=@?%0Qzgf#*cejdwqA|6sQDGh+&(@VJfaD$-Fakfd$E&nM zk9*=vsf+a;@0k{oJx`>1@V($d_&IG|@5F}qO7CvXktTaxaknAwS@m;%FfCmCm}t%( zHyZzb3ckCAS$Th{tJB=|w9i3rI5(eqooF&ia&s?cQ~MBa-OPK~fKQ?SEJZvs`GHw>rn|FULd!ybQzxC$Orow;Ika>^nRIVOy`L=PZwl^=tqW;P=t1LNqCF#uptM_)4K}UU{km82+dIkKg zx20qbxL#*G;d!vJ?G)sr-6MS{ukydquVClhv0bPO%H>~-!XLY9(PYrJdM>AwkY5DF zoHcDch@O;#t%6#5O1?6HfU#cJAiFgj`a;V-_soAza2yH4a()X9LL&wevy~x5HAAHP zJ0XSXfXQHQPr%B&XLXPj9iF_Kf!*+Z4R3%R92+L!juyXoi~Yc5?u9v5@-DxRK9M1x zzVH)%7^08`hY=NAD910mDZwY*{nBxN_Bbf}ac!`(3XR;YZe&y=jzl+7dgG~IPh^JY zVKslc(#ynTBorf8j~1!=^0G36BO{;P4Ug8X_|%6!{1`C?Z={i}&c*wx6Fb7?Tl2P@ z`>}Ctb?h4objE%-F~R+(vts2FgWb3aXkNG> zluoK-nK5ltRY_cex^W^Eveg${^`Cq_?^%CQN5%&b(zKQ%_9xgG{(V_rBTqJ`GILk(-aNXImugmf7JWCal|XWzU3jMM z#1dbg$7Bo1m$`AP5*nA|YRwEd{^p)xb-a5jdWQ^C?L4U`6v6l1I4BOmELN$thIoI# zV8Z^xKz%qcop=zUzIg3u+5m2za8;CEZ(g78ln ztNz{NnY{-#09_wy>VtcFf^iRdnQnhXV58^=!KZoJPP`~yQ>=Y15Qv*usD}80@aAq# zy8PRsIz^i5X4PFF=!HVO%mrGx+@`qp<$%xA8gAl5eymagXHqqZ{Lrmn<{H}t9<$;h zVAyWMTZ@EMUVycm9(tNn@7bI>DClM`ycB-28G%SheB>2asb-{fBTS0yeR0 zPQ}h$z4FJ`ui#kZ{7B+kFgV?@h4aE`Nd$o}E&F<+7$Kid)Lyqc@|0y$hF*b`@u* z!fsQ+&g5RL-y?mYdN{C3r@cuchj?NYxq8TNL{&D3te>7b57=5K`Sbx6{v!wJEJh>tKL{?})ZI0rT;gSWE5Dfs3I^*28fTfp3dMACL9_x{nsEHvd`LKb@^R)-0&{g@pn zg8Faz9Wfusy%6a)Mvy$;#}j0GpCFjDCArh!yx9gkLQPiYt91x5pq8-7Do0GpaN~x% zY=1g=_Pl$7?apyoRY7(EUr0l7{e1&yNA&UiULWtAh+HMzY_Uf zh!GQaSl8#zBhGVyHG5z3|6UrWlh0aRG#e2+xwBYgLYOC_Im#=IT+Z?FUeUd%Sy1Hf zgl~P)2UUMoy83t=sZ^db5HZ>z&XC9lQn*Q~KYy$Kql;Kd$s&gQE}2Pf1*&t=E2ZtX zND?)dHPp$F4#JX<`x%>IOIXH!d1K>*90QJr3Y^`_Mi3vs)HIhHSnU_UNpEg<;-Btu z>?=Y~dV49o-$|YzJnt5_JQ%nm{Mzl%#+us*RwI9l8PV#Tvq0S*)|zy)h_gM}TAvYE z`s@Om*cEE4Ur(TRfZOM~X7F4_PPx~*B46=rJ)3I;Tg$S`&VT3`omtPU`TEL4G z`A&Zoy@Fsf6T;9x5)qg6F_?TB&pnjGR}|W(nOJ}!SA~)f@1tH`;v;RTrfNC+0Mz#C`Td)>fP@<@8D=7p*| z19edc0L)WYa{aOX`i^m<2JTGZB=Y(`K+S)+Ld4bsUppJuLCF=zk?sBS?KSl~eKV#? zUrGStNzVks@|I7LeUr^4NO4B&N^`9Q=?wu&NCQ_{M=S7K9D?8?AV;Ng^2F!GBN#t8 z>A=j%W27h$ZKO+`STXUE7jwIimI1@dC`1)3WJ1pT;ee1Y;i5b^teqA6)pF;Zm{gl)F0r@91hfxV&pa3929-XybDW1NUbIDX^u0RE+9R;Eq0R8s+TI-EU$c#?l;qgZog zcc|Ghx{TMXqIvyeF~eI+w^pyZS8D0%PMl=<_K97{|A)HJG`o;FV=)wQkHx_d{$YK61UUEKn|t|un;+&P4?7ix~I0^U(+R!{O0&fpo?(eCEP zWBQ3O`0??|OC7mD=21^Dx~_i~YGR8L^hyJ=Ownrgu#FtbTO^qjM37&^%=I~Y3M30? z24;!s^pBYkZ(1+Gal1ESMa{4DQsjnEE)ceZ)l&hnbHLKG4whdpG*_aSoP3~DO)&EW zH(@aFXZ>o=>SZ+%gU{NnoFuv2bND`(@!w+UG#_^Yx)1eg>^tJ0A<=)CHxY>@pW zp+Rbj@k7pVu}yJsxBsx5M7*K8^hIEwop3vr&PdPXmL(TO>Y(MBsx~VFNW21;z6mqk z@)Tw_6+A8S<4D)_#(1$l?S&S`T5U{fC`B2^y+li+K9R+lu?kgfX^f6f{_I)hw_qTB zoY>g$)-QK}ploef(g=U}Q=U2U!ED?@?dd<9PjJ>?llO_&mtxDY(Bg|JaK=wgW1SpX zqWv)|yMNV*uFt<1EISnsynoR6< zAK?o}c;ZhC;6ISfsR(hD$~jof9=zUp-Bk4F_A&ZfzQ7u$A~@?&1|(>?mt3%7@SkLO zD~;UYw)O|@j%(8HEF&_}77ee%T<#fwMFv&;-^+{+=GBPkFBB!XmdA*?Dhyrn$3G8U zXT#>Lmkb-v9=Cs*4EGIZi!M>F6X%*xH{xM9)E^%KjdlDvy6O|%CSg78t0w+%F&DPD z%gKhL3Di(+1>H)<>&lqXnZEMuBhuO0)tOkCXp2 znizyoGJT|5{GNhI*7uDv#*7$$8XYwLOx^-UkCJEFC}7OA@n>?i z|B#2(HybB>HZledfU zO`~jbuakFV@-if^NHSGQZtTjIH5STf!uZpex@3PcYJAQpaJgn`JRrt|vV_ns|C!CQ zHoQIppU?-OLv6_*VD3vxX-j4XPV;z18B(R>uMM4qd z#)cla744_QCi(Z90#xqvsxTx~@WACP4WPx5ns*a7i`a%=n*vbjidjLr;=VS%A1e?s zGm?Mr4%&@AG&0cpNuI0yPgy_!+^hRw;y2-4uD-KW9Xr%$kLiyOszb{rDD-x3R~tj3LN8 z52-Q(CE3Ew7VMT`GMl(L+k)04mB8V}9B)&45{O;;uq@Qf==MrrJZ|B|;h&C-!6tziLlidni-L^eN z-!e_M1=y$rV2H5F(>G!Isrh3w!wazTuR^&2AyyU^ZG0Cq8B08MICZ| zs&Z(qe?Q*IFgk{2J5(~2&LW5w{~>?T^!N3`o{1J`x>QRyD-0p=VR}=Qfd?C7uKrx>5ncGN@7P0B`>$6{|L(5!m-Pj<4ae7v-Dx#iUxIbo+nXjw z#r&;Wt|Dy(dj%?>>Cm|c4o2%NIa^oAOxJ~4xhd2~vbF)M!-q>>b5979-dT;{fybJ! z#!#|k`xy306scPY`PZ5hIOcyh$Xh+221E9<)Ib!Zmw^&g^fHYUf)~3-AxfK>2&$Bs7m2Od~A1 zA1H(&QRG=&Cm6eIDn`Gktz*2cbD49xkcQRU*LA)vz4Iyjj-4KhFIs=I5p&jezL~xu zvK#cRlV(*XC)M5SBA*_rKx%H=iVermYwX?=_ttP}ZAZD)OqE(IyxHclr+l}mbZrML zo+T?F8}mE#-4D}N?*!5EEcghMCBA)jqm>PI@>{qKg-Jq-0e7|d2{k!Cv(FD^ESM$H zw;9KZTq-X^-M+qch&0xL$V->uJ{pY=O$S>JFf;(vUc)mg2O zg|amj%h@0mX0|R$de$c0HQO}v2BC6slmh)6ry^Y}ZTzZa2GhrIfkdps5>{dq{9j@C zm$5vdEU>xYNy(kclUeXT*`y2ZT%Ig~|4(eCUdoeI@PDxT$Pa&|5uDlYYk9sYArI2g z=$7b$9jv?7635^8MKFg;82B2+vKyO_BcJVn(O4scZ)4tymB^Nfdsk_WF!*j9u)P}o#3@O^ zl_qT!MNmNVNW0lvYlV3!YSuQ?ld(drv6B>u6>CGasK5X@O}dmQ zkp(6sDWpGWDXf zR!2z(t2e{8DEsb-c7W`=K^oT3^TqZ)>+LN?`g>jfjr_@_{wOW7X!fFkqHaLSyd8A| zBY?c%?IaC9p8Q1vd)7I=dWJ7RtTn@a~?Vt#@0xIulm3zr%qo}a6JH54EmLrVy zqf37Yug$k-{k9bXit0$Qq69EpTvaWDo7OMq#yF~a9QsC_xXX)?RIQOjcjws{OHq%- zcx{X(AC4w^e>BFEPaaRgJxw0ydPLFdsWGN;Y{ zr$>1lyQNkAd|AC3eY_lgJh8SP)?TIcW~p8rn`)SeIITZX)Qc0)Srx8M^nRI(j`mmy zY1yQ4u+kS_$cJ|)ioBF{`xFZi?r8mXty}NYc9+(L7vd$iTMsiSYj$a^TOTm?#o2#; zTh7Yc7QuB$>!t88ZLiNy#40ZJ7Z&FHMDL6G8$Dxwb}~Q1($)EqA}`g%`O$B;dVV;A zv)%g3_z323D{zdYA)_neyuoQku3+{+^K=G+LmG2CzUWyvw^HOOt$VgJ=T^Vn>z;M! zrSwd{oW^=~O5@_+@64WgI=w+gZkm7jMW@1>MvC;Q-#ziWQ{h#k-=1}+_~MjK>6gp+ zbfsmw>`rB+Qw8bN`g*6NNPnK#Dg8E|3&~&9DgAOA>r^QX882^lN+)y(6|Z^AZ6$^6 z7&MMiklW|Jb{BgMf@1UUE@Z*1S6(-L? zx$4IQrh`g6MbRyPTyUp5xc~UWhqQe7_;I<69!U1%as{41zsg8m7am2QfMgwZ-v4oe zB04WgB@NK5YT9&@GEU|xb#?|M4`gK;0gw>~iTD>b? zo2Wictlpt)S(6(qav-@Stg>9;E6E-e=pOxVSJTJ4~`_D3*$S)j6+1`G;g3h(OoJW7CJh$rxTt21u zrYC7T!-$chu$};J_|l33{aslnQ)-8*r^g5)s4*SXjrM~!`Ejer-opx-Ha$A-Bz^OH zl;T-ocA5nk&bbU6rdva+X~(Y=Sc(W_Gzm<;YPJy|oYr(D1T=28$*}uMxmJYz=c>Kt z5NqhdUZWezV}#Y2t@M9qBSEVqW5d5_@f+tq8CGmfDv{i*=r->ojT@%=d-MQ+{KZfy z7xX~1=Z%qoY)F(JZ@Olb9=sVIgssX*9LW>xL<0sfeEv`AYPW>^?A;bcSF3%HwK929 z!I3tO5v&DTMP1fgIdrOSQbv^hF15qkR?kcVIz*eW7dEkT~lyaj|+gPdn zP%%u98Y9tXqlhTx9HXPC$Eqy%u!AkfU-W*a1qJnhK?~c8^CTV-+9t`AK^rC)-$5l| z@WHdAc8vENK?#2oUn@kodh^YYm0gT}kBKc!h?BIWt3Pt@78aQF7Y#`Z+X|6;+ ze{eTT|4p_|KeToJuVvAb&UjBFB@i4Uo$vMFW)xGX}%)!4r5~(Ay^rnq9}A~!|j!Ru&O)z!>KT( zd#Q4!m$NwgbsA#ikqfnbnHs<(gI;b_l+dfF+%@NTu=a+>E_h-A{S z!H3>+Z&xcaJFo^AP1((XX&Jf05|3?D%LCKPc-3GXUTrJ0wA(>uT}$r<_+K~v{Ksv3 zXBJNPN`GOG+&P^&a8x@5Ahu0Bsee{dKf?sdBXB=&Tt7Y?UDwM&*S1whA169nY2F4!(BuIlbH5ZnSXmMeRSvxwz+(Bru1=5Z3ZLDnyWtOc z$PKerM4XdE;j6Hv(hHCcXo0S}DqzE4UxD@{Q#0m|45-V~N zYoM-7@%L3PY|)pf`;M-VlEX0vhn@wTWjDoeNNU|`f`a)@ldwme-y0Z(Q_N;AUB=N{ zsw#_xZNj!Ej_VR)2kokL*ioBw>ArQtMdoFgxK)Dn@zzRq=+Rw-o4G~Xa=WbAvon7P zW@i%3j$kasW+$J=Whb0Y-jgfsJ=_#8JW1R5%n>{DwVBI*mzfJLv9TKx;+`G&IC3jb zAaK0-&d=-{&S4`SUkD7t?mV0sMU%ObM}Dh_3Gwb2NNC~?$Uq-lDU=qFB{IH)2nv)A z?_CW~`q7j0vxpQlcQZoIR1ciZLK=UZ-q1xtaI@Zfk@bj6x57B=?HrwA#i%ZKd8m6< zEtWo3ECuXo(|P1etoq#ds`jntCr^xm#J_vGgcH37j{F1iyHMUYukP?ww(&!GTG{e+ z?2K==z~g|>v*3O7HiS6e8||@X=@_v=CFnoOwGFT6`}9hsF{e&(*iF$(*Cu}{-XuF2 zJ#UT!%Z7d#^dRq^uxp>1%!dqDu}zzz7`@c^Ih0+?nMc+z_&SM3= z<4;Ix!6j4;lzU5qfSu1DwD z3&f|=$CClN{4uGivPk}v5%iA_Nr<0q3JGaac)F$_gBaxBCkG(M2jGc<{J-vEZ-Kfk z7>}17E52t^+;Q?_R=*h>#nGvt0Ef^{H%Ll4yAz0>FIDiQV*})E2KRri)-n}gxd{O* zFg8LzPl?O`OIC6n=Ad+foJC52>6x3!xV)0cuFHl6Kq;MtMVQEHTsil;wdQ(QzjAR^ z*o%5uucqK4hGDgf4-DtK5MTeJ!2KUel-n*C4L_c_S$SSr5;v`~?og6qM9mQ4p2@)z z9;m%5ads%bz_V6WP>+9-PLX|!+Pn`d9EhRvIK(eBx8Cm~TIyGj+OL-j2Cmgi82X_M z<*=%z*)Vn<|PB>u~!0C;#BEzWSN8Hl#pF&fsQTMnJkV`p@aRg z1^ihrgD}2RiUsZ`PU4uY6DZ{s@(#cxeK;D^P)50_9a(hkPSt-G9mP4XX3D@DI{F$S zjruR=hx;&h*HA0*%zq&hvzr!Zc4BY<4A`EHBH$q( zVv;v^liQX~Ee18SQ>@);88QFjTy zXxc{en;1?L@M2`fou54?rwO;~t`!h0Vs zJf!>L%nUcqjxE&<7)NqO(D<7 zKsvHv&hFwES@8Vj5h*`Owb~F0Ztm!hdd3qwyDXgi;k7%K=c61SFyG$r~ro+~NO$c~2sYc<|ZM>p!$-px+& zI5V{#rwiJJkJ!fOv)gV+56MaEH_fY;VM`{1?nPbNA^`b?xev8~!hBM?R^&{nN{A0G zm9Kvlsj36|TDe-JtVR%Uo>s0=giNj&19?ZN<1g-SZe@GDr%%;th$T8&BO28r z60lX98*XNBXH;~Dlz}v$3wz`lIk*u$8xrJJ!ayn+oT>@yfjZ@ZLA-`;cEN5kUZ#Hx zWAf1I^>`gkU|vm92-O&0EptwoWS*h#Mvv6s7@zUWGI?a9KRp<Ec)Dfe7%H2w%I4*1&VGNoMLb(>tBkKr%j_QN9hShSJr}MW$+Z&Le>s^S zp10z{T;}~xbD1+0Y`eG$EWssKg&0#gx_`bm$~EySBDa`m!qa;NjdN-r&3M@zGs}OVymb}p zF`HbQ&aFBPuqwywwbOT%#GP^U2YaKVL-&kh+&x_-RAaS*!2L9^H}QD|vVKgv5mHrz z`$W2mWo=d!o5a+hICFP{MBDwX@i>rtFNs2fQ1?shA*SlpDJ!|X(@90%y818j$ZI3Z z1Le9(-RZx*=XI`Ta8k^T-<5y6-@@$P`OxP}z1F^kdA+BhB(Cl%^Gmkm3F>~T!+jvF zN-f+&Kc3-k5d8UlDOg^?-w&^7v_W3Z0#ryDBWt>}_hWEY;T`@YiCOhG-lK24MBjKZ zzVQ@&Of3OsN=fyY-KywK&U~{9{ae+~MN=Mhw0}{`gf@Imz578;Pf+U~xrW;KN0u5Q)KHzhXazEiDk`Jc z87OJSU*ud$ItcBOJraLii~ds$YcQI1}`+$A@p*ro0TN#>;>d=l7+?^`4fNasJYXDm8t3`zm^pu z2au-Te%{?~U5jV~Z4bSD_;du6czOae*XKsIuO)?ZO$PJ*&X)1|%EMn#wYeWOApo}PqgCBx+f(<`{{%$H}F8?h4ITgBWRuebBImtwT;Z=8RRLKh3j<5A5eN}`UqP?{

&1WQ-;*vuB03T_LPpyNf!kk$hJllwGHl#ni+;&hT2_nvpdI za89{-8%Ip;FhH`(VV`J0kWSI$a}0G#U>ZqGp&u}h|~ za{o~A))hVhHiClDE;Tw9F>h+IOc%>+?Pgl4NawWm8-s~=t&}31j7&494{_^B$QVJ| zNHiJB;N$f1c3wzhr?8!LJU*LjaQ!Og{uD!<7b@h|vT2=potsVY@hn-Xtk! zz!XroOjEL%?mPmYQmD-sDod6dcx0(n1#TXEX5U$cdoZgFFGEJW&^lAHxSeCTQ(mSf zfo!Q+%{5$fDHSq1M$6NPxoZi+H#QBj4&D65X5PUH$)zssf9m=xk`C132QMi*3K0br zQm|vvE1fh&l4doU0J1%v;ql=dck*?cvbjBxk;Xmgh)$xy%N^X1iRd}`@pZ^$a4so_ zbFvk4H+k2l?W`b;^(yH^3Q;hV@e<4vldfQmB7hi**qoekq1=5^7lzV_Xmb_3hu6t4 zFynW7k_*ycf8RT#5e)w94ctFU>KSGjCbBG)WpTFj_mI2{9}k1g#%A0+1puNQ%Nq%MOqwLFay@; zNX&K!iG19)dC_7Ff5;}$m8oF+D1aNL`hWz%H}nG79|Iq+cxl`Nd-N>;nWc-372Ur8 z*ai(Fh3C+R#>{N22&6{`6Wl&6XDcyIq=?Q7e*n9o8YqP2rl6g0X7LaYXNR$*83bHm z64}I(bYg$Vc!h&UZ==-^k#2n8JS`d1!~~FDBWx2kF{!#Em+wGGjd^T3F}_R_#Mo7X z=P{PDwkVz5Hyzf7$f&~oKRTxkYYwEPRI%ZvdSwNp`Ce79;JRF&_XnUXF^CY<7HPc! ze@_WdJ6qA@t%C#c2&nMD0-3Y4uDm0KDV}J@F`2{oV3|vKg_Ts6;I1~9YkaL>J;7u= zy=d3z&Y`g~V!KkRmBckJfth8eJ4BpwV3_UH3!kh5G0u_)@^EWnu^)=3(Z#v`p}HT3 zX;xcU{3GLK|Ay%4!hqNkeXc0_0)2J)F~yo-VdCCqy$;Dc${WED|0SP5{FOI%Gf z!?ZB9YlV1g?r+t+6=#f4hmO^BAgTV#mzlPy^0j`HM1eyK!POC)t)?u|==tZFEEbnWNBG%F)=QTTv8kj-c9tf)WfI73 zN##($xnGMmW#kDM%<0ZsUFJ*{Iz4v`e|@#0T`vTF z+$|jzcS_`DgA(hWYxHu;mA~&td%Ao~&Yd(1U=((a@%Whv*j5ieB>f#6@p+uVhKTcVg?h_eTlx zj3anlyH~!&wluY8|M&pnfBkhM01R#qGT^H*Ot~!5RfF#X#S`%kmm{S=BhF8vjKU2Y zkb4xI-Ez|HK{4#n#hFrk4wCE@C;?(g+e{bFW0%`?Wk2Ays@f=it1negwpSP5Jl!*ekHfY$5hWB6uy@ec6%q_C*WZkf+>C zm|yR()>W_gW%O`QfAH_cbvk;XzV6#;|J%M?_Sdxphpae z?5X#^BcpL5e-WQs#zG`zU!R~u<9`9?`cT~s2lKvj$8pYXJ(#!UcnAOLT6>7jrYY$F zSZBMrduFb4+>T!CHHUjJGPAsMFreZy()g1C1@6RJYHpkTe=h7u%$o+CWO6T9>6>+% zjQ8{IcJ4r$q-SPMY1hifg~S++M@+8CAWdjtRL>01y8JsGip5X@BZfRJbonjyYBP`C zPY4_h&(6+{VarL>4>!(-hH_L@eUo}6poh1@A8jx{8ZFi7 zo8-pRV5UTwM%pvm?!#c#UU@KW-lOgwLdKZWq$zoG%3n5akKQK9;~rzS3vjR6^02jir0f&;Ia1cd*-%Oj~x643##+;Wq14p-TH= zU+-qHFi zxIh^~e?GKiormpB6PxK27fj3ix(o}i@7&Ecr@ZYqC;q52=53-4X?6VYUA?b4?btol zg}Zp^H94M=cf?kz#C-_4=%#J$dC5vNh09{#Io&K{zHaNH3bXf)s{6GY;C_;ZyAz)O zr!H5z;ynsHJn?_+J!x|r$CaO>UomE?LNEpae^SSm3$j$D!)t33OO7Qcn^LK)Auu3D z1~JUcKoYFdf8TfZH9dm?59e6QvPhus?$@v1{ZQZw=>B7Vwm#EQS@7;L@lfMC*+X9= z4}AdUL|JuU;)ZnZX~y`gE($W8#x24?Wn`}zT?c%cvS>jjv&)rb`t)fUk)rh{G)S5% ze`}Y32%BO}P>tejW3-1WMWIZ^ON|j4I1!~&je%F{2ooHECGF}bClbKj!=pQgw~v#f zqY3?W;}LM#S8mzsGCK#(d9pu)8?xDd^Vu;jOC5h&hA2D&_6g*va$|!mJYyqIT5Vv* zQQ{5oNDqN-M77!b>|kP~Z8-*9!Ur6Gf6{Y|zu^13+!##oN_IA-ny|(pT%+kP33_0> z#7J>7v@EF{`%d31?0Xo|+DN^MUvI%LLMe?0Qs z_;ETUd}1w&p^M0yf$SMH78hCma4jK7YK>gf`mVJ^IofR#E-Q~_(}+IOXs+2Ui{?7* zZ)zN_;@^rYl^YMmoR&?&co@9E`V!&i5u({Z)+;3>ms%8M{wu1Mml4^oTTxx7wm7M@ z?aX$Oh&SKZUd1ILw~t!HAc%#5f1k?FNXkrmV+oIwtp1Q?D`DIfSK4>!x>kqd?XtS# zD_9-so6+*$9yKl4_`-1{tv-UT9anvOuNBm;cn6%Nb#KNsFVS9-D_)>EtR0sZeHPM> z*CTLy>CwnfU2&UQ`-Hx!qA5k5=p^$9ZVI4zl5GmQn?Pqtzq`=64l#ate}?9zFm#G- zJx-uWvWO3m;_86uQTteQMM(DU937p1-0OFE&6ng#4-et(Iu4Kf-Rbc1)wLa-tnxQM zJlK{Ft#lkebl9$$qp-{SuprN&sBsMrKQlpTMR%xSXt4pX2{UUuoLJ?u$KqmRN9()O znW76c>(;JJ-C^NT^&aYIf9)$kcvxdDH?7O%mqZE<*=SKeu<4Z=EHhd)V_Zs$@0{c= zn#kv-oycFKP*~F^bFle@;Y_6_T)7+r- z<6BRJjT%$69e^cheI31&mK;H9i>1X*2c{+#zx|o9K5;heJ~eLnfA4c#u9nnDYoc|& zb^T?o<7mH+SR-7^!5TAPLfaED1vV#&#YU&Ap*={sD^VoWI{W5a`<`ormbj{uW$9Wr zGd9Zh_MT+8?R3aDN7d`7evFy~{TA4jjgcB}B3fR_HQa6zlv+yU(w0HjeCDNV`F9;h z8PkgHa*l>B`}+Lhe-9FGJdJ8U$s*clPMv6;{3T2KO?QckPAYQyD9<=RBGJexsS`K6 z9W?+E-dk7o==5UT3q%#!G&FbPFV+i5Pl2<6N=}SNr_U)SCoElcxOm*_PH46i3Mfv$ zPoS$5AY$*~-yZ$={MqwwC&^EhC_<;{njz;2?;1^+C|?fie^ad`L<7Rx5`zdQ=~=NB z^{Z^;ixt`Z$DC*+uY>h?Eml+F5p`opr<<4TvPMuS3a#W%S$0l6D#tf>?QI<|63tC` zme(3vK>2gJaP#a#vRJQXrQA7`lb9{LE+KMJ=BU!dulh)mo$B4eQh}OCEA3_%Jc&~ZLEOi zYI1@ys4XxQ`t-?z@fM>R)iy=7vEdYEtNPKdCZ&w)scq`-4OE9 zXOnM?f0vP3-@QQs0j6+UqP{x5#8Nb?fb!gte@yR0NpV_DNVEehwwp5QRLtD40(QOsUVSE7OG2Oh|iTrp~QsSu55z=pZP z0YxJh`au9TYWxT+WeKEozs0Q5h69RW>BJDQF9S(O=*12#d=Fee{JghCd`6kY){eD%x{cI@Hadr{3-VF@EiY2 zW_CF!?hccCyGT7cBhX%*%Zn3=_7YAnXo8rxxxGl} z1;^*b8MW8_uK$^KF5~G@2tcuqSVZe~f6GL) zR)aO`5QAu0oS^2wy0q0FF`NwIkQmrpYeTZi&CY*sc6PDeRZ|4uhk^U=kZL|NY|)0e;tPO(I{X_ z2%C)4)QWhPRHKVkTB=#95s7f1GbjGEx|bQv(hlSj=>^&)-SPOGf($79U59xk>l}9S zPwF#eYaw+tT$sJ8z3jZKbr+ES(}iqQm}9(Q?X}&u$=a_Og7^{&!QVx8?N8ZeC&_Hv z;cnTeT;hevPN~Wl6Hl-+e-B35BFQu||I+X8;*t4KmRn@3EF+Hxl+>ro8kRyyqv~?W zzapmrtVN2S{&~CJ0MMJxD-LtO)1~Y z*p&K39sPV=%2B7QsLgPaJoS9qvwr{@Rt^6#F2p9V-)ZyO+&fxcf8;IuCDy6ex?j*R zvRzxObZ;d=)O`-D+DymZ%pY#99{TqcWnBf%X&m^yYL6g#rh_yOVIc#5-H1(&jMyJm zC)N4=c=*uW;)Kp-tRu&@3|`}N@g{jage`b;5I_EQ8)b7&m>h%B;klywG80C-={!X= zL=e(LI8`)7u>kNxe;~-H9m^dJ#xDY!=i*IdW@{oC2B~T^kR%xn^G#|W&;+H{;Tob1 zZxBP{bd6zUXr^~7nwd$QwI?rMGSG-S{M-pbz?%qrJY=6$iBZj=(T&}(R>H85n9u=E z!a79qEF@8ZM&RQ#GBl3HWlGCk(8w&S>ay4jnvfKsTc2{}e}G$i6*xePu@cjQXYiri zjK~hdi805bcGi^v7O7EO!tdG?DHXJqZp{=ETgE)E2d{;Firk85b{KTX_D~xWCXVzt zuhCcA$;IQuJqtpf&I>r`K|VWZFdX*vZbm`WM6B`=bEZ=36uob-@+5I0$9ZlJ7(KbsMBpN z{>vI(|Mq^{3Z-ACc;o{2*yd@*PZsoh-EX;G2)y~M!sqYGZ@X2-i@8=ZKvPH0VBmmp z6veJ)?UMwNZbuA&nGPcGd4mjYkiq{iWN(vzxKuItP-*HAATZv@_u zEd%_$V*tYqUab3%&9342QVKwS>A7z@I=|$+T^@CS_whi@1^naN){j_jyxOI^p=GIYqr4{a+OWq6&6pkjXGlgT}B-2#mF0lyDsgfQb5|wiS!sNEVqxg!>(1nObVCPYu8xc?n|ZIl)_}&=31!1zGbTl4d{s= zOOf?~ru&tl%Bsz3x+sekMLQQ8{%V2#+Hn8M_o!~iVeAvqPNy-eDpU>7M_H-SbZeLm zLEp2NFW7{O$)ug)6m`qie|m4bfm9`Sqw4T(RRA?5PwhaQb^&$vMR#l~Z0EC9P4bR< z?4ElIt4Rl+kmO|(2L6`=iBBY;_%JLMhg152WuJRr1afZDaPaEkjb4Q4us=#37e4Fc z<*MadL;ex)0K;nnw_<9Pw{a9H=RIq(*? z@^Q0r;1Wj;Q*J1G&yzOv5-**Mhk?&sNAB>UCJ)CuH!a}aSLYa=&tc;Iq~W{4YIrn# zaW8EPTC=g-oT0A~e~&M~mN&*SB3dVJc8eZd7$L2f47d;Zw}sGOngOV4@Pv= z6h;jbs$pG6*)_9a$uK~WX%n^I$jB}zBkLk|`COE$y%DGVCyCQ4qc9)|KIQ$m0E+5X zB6v>0p2i@mE4XrL`!jw6tY31Fj?J5j4av81*%zBG$9AKrYMISzz@#dxxRLJPNcV5h zQ6F?@$XUopjDZBh!u??Jvp9)IMEs)lH+^o`s$+jtaw)~^4*h|=eCS>R-c zrP;tFD@nPAvilHE6gJ{xeU`1(|NeU- zK_NPJ#`D0|NU(lNKG~53w}ed_QAUmczCItCH~u7Br0?@WL&nN=B6$pjLn_dQY_c6& zcvsjtj0Q6FF~^S-MwnLm#Xek4mKIeb#>284f1y_fK0@pd8yqeE$$!RukJGmQ_ui^yt$ zhLd#K*)&~qm`_eS0EEaG{Y`t3R_@V-0nn2<##c=|;Yt)30T%|Tw)2iQE=c*nli`qanSQXcRF3q9rJB43S~|Y( zk~<+s`PuOopKx^qDIq6HIK&JA*+0rDm6dS(LfB!dg)gfJz>AWsgb z5rO1jXtxx&Zo^1Bz=CJ1$$ur`1|Tv*m@L*{nFeAkC)zV*a&QAabAE2>CQvaAe?Hjw zuukr=N#acRzyTVZ5ZPY`3aB7a+F8&<4KzvasLQY^m(C?9sGlyYs}GTIYEL?JqYwLL z;r>w2ni+=?cDv?mRPGiBbIa?X#Z%5=5~M2e4yRshOLk)V)Anw_I0 z!4)GL+s=_2?Kfza>Ufx)=^f*!l;mt zOWcba*()~oq^B5ZJk}2FtXdazs~N6N=gdGZs0uozPnf?MO&xE2W*Jd)q%EuH9PkqX zP&%7UL@S!u;Zq58VlR{jgVfUI7&0B891Fl-npx+y<;H12)+gG;Z$W%Ke;yQ>LvVsD z3QkPTStJ(jlz_E!U-Y6hf!;tn^!FKdwJCg5tSyp90lBfl8_8CUk+O+yQP(4&xw7^A6`8?FVZo7S%XRW2H+-y) zGAm*Zo<=q6el(j6m@p3wyAwyw;k-VvJdPuc@0+8DA6@9&K(huhf3kfrJu4;*AqvGb zc5d)c=oI;h=`+jDw1r|wXp=T=&e3`pU<8RWeC9dP!7NXg#i{rOSSo{=SY1M#6PRxITs#gUUuNzuJL%<;fsnNaBgb5x z9bT<5F5hCSQ70N~e+)2dF(?ZDY1mV;Wr|OnEzvIy5{zei!|n1zx-l`2qNE37W5-HQ zCsnx~Da{mJZIo-niFabBCA+Q5C?eu4p0>JdGPUyZ?kqG&%yDX=E8vnJGUfANdA&h?e%6-TbFlDC3S z-VT$u1Zr=Y)K`mQXz~_d@2y0&!hoW1Xi}AGQn8z$%?g{U@|&Pkkk{e~(iFU(u?+cYH~UplIiR8O z4N_lO1R7^KWgK+*!5?+JTYp`ND$uom4c^f$oSLYjD3PmS0-h_8QDhyuX=YzrogQxa zqrbkZoAbTj%8!r^_e&^kz}KW z01uZ(_*?fzV%Zdd2DIRk&vf1iZmB1lWIkYwcfR`JIKjI%T+;LH&-7&PV$Wbd_j!u{ z%Ye`Gb3;Rt@?I7VX9s0dSwIQ%A<2tv%MHvgxaU~|3qma7p&IJNBj@`!7<8g8vXL_fIV{%Eb8F}& zmM1=!7zBt39w+gpm+9Q@0$y}%-%6%PYFyg-&<`nfK+wN`;G5g)4Ks3amt$`PsyAV^ zU(y=_SI)pB?AOiS>2kMMSnGUH)Zahp!y@sQnPt4>K6S_iy4nk!0siOvgE^&A8;IxXICa`RSYsv4Cj%qp z9GMEB4~Q8B4pcLcHWaGdqnSs^m&7jN^>S0>=klw@9W|X64T+#d1$MdIw7PHL&PTFD|T|IOZ_7m}k`tUhxU0 z`hC{>qN2=)Y<*Oa9vS35>r=$d-1F)^(Sp%@uU*jsZIa<26f>B(lH}Vu>UbQ{o*Jwz zAyR2GdUf$RB0|;V z7}ck;3>A6Q9MiDLeKJPkz~Ch<`q(oLOuQ5=3oSBIJC4;F5{N?hN)^P=p& zIep9`Zyx^?dwY5qzVT1QWxZ!R1N?1klxUS3vgbI>d}4draXY%QvCnIZ8o$iTFa!o3 z=q?ic^*EhTlG&N8VoL(q3V~julFJDxYeQDiaU$Gg$ty*@iyQQg9cPxE!yY4)+v610 zoD+N45WZC@pX#+Rf@6%{Z)~y0Nx=Hs|NYR*;*SDDajRGgSUMRDytm3rE5;XTB=CO_AS(qs!V8Eq=rb@qByZ8HZ)B zm4h^=8&`2A7p+GR`8~ruNURk$WU{#*?o0fOMY zvDo0XL^`uI1vnyM3}F#j75I$&);;?pPn;wnmIn5(N-Vl@7K6vI?qg$xGFIUGjE?-2X8hpi$gO&%U zU8Pey!rX`&F#51v6qzt&-gh0hJ%SWjZX~#UfH(X0jgh1}2{PT?O}l;65deip8b{BJ z%beP4G2?%It~&uYgy@#aa(Hr*<%Nc^kWr91OLe%tup-dF^J0ewpP&tZ)`~Lcl44{c zK%RrFOB9YY?EWz-Yegx22zhENd!aDXIwL<65T1Q8$LK~^9HC`?#o~m!?-Wq3P|_0} zPXH2-ArEKuCqp!t1#Sz`6R^Zz;wqAYI3Cq-hBjdpI=&3t`uhWg=|1lZ0hbRrQ7ylY zQ@v#759mOcDtvGQrnmOAi5R=NMG5_&)9G7u>;ii86AEUi_3HxKXrzP!IrZNCy$RL~ znm!2$rUU77%Hc+dzo}37=KOJ$c1~#6#!j|f5aOFOZGNR6X{LLi3c!1T+j;-sMwk)= z61Z5))dS(FLskeg^A}r_u@g|VAsK$t1~nb6&VZ(Y=tIZ70!VZUM|&!5o`y4#IItNE zEi$l6ry`%XclR|dyJ`sqa+FS}&QP;gF2FAY>zJhM7uB+3@8%pG;vYM9uR> z;a-OlnTXiqI{4)-!SOxgd~q>{yZ_)Ya7REdJ~`>5Mh@VenS6IRBJRv4^-UBH%DVr{ zVMj4~b@X^G;J@vayp1pFEo!hp+?{HD8g!@Ns`zFJwV27d4rnJ_nwchYlI9rwg3gk! z$+s2rpd@y)w8~DNT-wumCjk7NJkxmTqi{6y@9_5E%tk+Ye*R6|+|WUCe^0_A;NRB= z42>d+Je+*hRn6j6t(5`}A;~B*N}n#B2nz(ue^XI8ZK>^fd}vx6h!@+X!Ddv5p5+{8 z7%w<^Pjzwe17L_GuY$ADkXnX$`7iBR{lA7ADqkS!{&KF1{_y>gRjIH>kzz3{5x%-a ztjhbQnA~0T`B#1DFtm2Ng`}j^XE2O$z02OJjy}~64)~Ex6QbmRgJP5Zj)|%M~4;AVv_sKO;7AFcUAtCnySQl|CR$*8>A#PwS)unlQ(BjP!3%8LkT=yQp*u9m^+6l$0W#|EbZnRx6>v)~ z3HY$KlHj`l5z#oVV^E9J${lr3Yzj&Zw-5*#TFD-*q7uKvK%f$+MX;N?pl|yZzD}lO z+U_x&AA6}So_#%9MANdy--H&GFUVa6wj+nU65gYR+f{307_71yL)H>QOXKjww$$ zHYbqIa2N6H&Ei}ObU8tIKWh{+EFo@29eaOZ?c6ixx1E1|uMaBaoD z&f19zh>ZNs=C zxP3iZz*Ej!CkF94k+P96zlN~SWL_qI*}FR&Hyp3>((3m?#}qw%!$N*jh6EAEypwKK zJDp9T_Ch_`ADqlw)-(8976fw@!b$SxZu{?YOm6;hf&NzF(gd=PM(1x~jbQsI=RQKf zBl?YHJZ54xycYWjl8gI~Lbba#;qcv2H7qr}9x*u-3+T!#!lq~`RoPpF%WUdgd}YPo z)P1SVDwzn`kV{h;e6so-65Uo6Q{67`@NZ7p8iHAGaYbxiJ&^oMvh^mTouQw_3=Q1Y z+;daz<|11C-i?Hmvrbos#s#{3`CBW1CRwOOnJ`eOz03b{Xb6Rcqc&pljkqM5w{)cb z2xAvtNf|>|`qwBH*QD~=XMvT5_tYvNdeU6H~R zgZaQc0$+V}X_|F^Z@fr4km4^(Aw+<(@Cu`ZCx=3%BM*5!>bvp{o4{^Kxzqw!7KoaR zydoQSxZwGLH9$EyI4z?4h_VDiQ|u-<(ck_%d7FCQZYFOn%g$V0hApWGs^g1}C|y{` zmx;E{Sw=xBdZiu0m4WeIAPsjx&r}->jb0V@5Nd}kpA@fQXI8XA-8{3+S6%(jcK@Um zCe8hjX|jKcb=g))caViXvmEh>}z#%ik^<6IQ@~lfLCgDJzOI2-!nJZt7 zH-~{UFJtxguz*OWy4?Kfo1Hq z2xw@!{d}Y1ZedWkB4WK3g!=kLr(q4C(VzMSsp?%`^=)S{U32GdBW%b(eWfST5eqmk zKZCtU-S#ZE6S<gvuTUYS&>U3>rsV%0LQ~^PA0a-}bh|1Xf z5a->l+1E9ejw^^+%yBb#if7+tqWXr2j(`|P-ECkzvC`oST=w9;%B%NJ{AFVA-|r?K znA}Q(RMW5zmeJ;In>b@Yuk`qP8^mSH{mMc{)WyjwZmp#PwJ==X4p{O$S#$m@Z#TM#3>h?%N) ziyag1Yl!X%*H{G?=BDgI3YhLUk`UK2P$tWYFK$`aUn|vQ9m>|{8utWwCyX1TMeHK4 zX8k>!{&S8Km{>Fe0@lS@>L>xP`vR5tBDme4O>wn)ul;Tz9l!Ms;Qq8L#mz}$ra2=-zA4&0k zVtO#(1D~yh^Lt_5GXft{2eS4)e)%gGA2wGiJvH{hbOFrEYVRVrq}}Bpf<*)!9FZ%w zB7r*^-&xl{ouuY6k+6QBqV6(;Vp7FbqBH%GBXwamLX;EDt_|Db^W;Pr^ICwH#lk~?c;Y>y8TxdegK zJzwY#_0`jEg`zm$l2O)!c&|1P|0`0S2Ock=D1x}m%+sV}$Y&CbcO3fQ4}dq8fWU_D zQap^5yF;@MKZID%zNzJM71!c^cFxc1hbc=+ov%%J0YP3Kt%%Gl1A7-8>99)ARSu)4 ztoj&4Sh(gTuzg{bN$n?;r{u%yi!|Sxx>x9U+-= z%poARU)ax}P?(g&^0IX1lTNa;v2+P^QBh}#lxle(k# zNEcwA4TWyPOLl_?{Y@3R8sb+JF0xHN9pjscXPHHLU#3vX`mSI>{~i>6ZfYbfP-9wR zLJeaADNcaJ1%}cc6ZoBQ2u)eS#k2?)x7{1`5iT{rA+rPi7Wnof4lU)!YeN=*)lu#g zRGz>QWZ^(MFlHJQ1$IX{RDsZ8fpwV2x55}uCaROzZWtu|(yS8z{;nw*KNRCWgeJ}>!at`xZ<&kUPKf%=Ua`-r zjkQ$ikG2-DI#Y2U)HEQ;z|-VctI>dsX^!koZJPKN>_0#2xk=PzaN$RY{*y zB&l?Im2hCJ?}r2;X^L6@P$SYQFi(5lGL2X)Ix@v4xw)afs&HH`V{&jg)b1L145fdV z_+-~#i)uAf%n_JGu&o=%aEf~iE6^;X#m8o0&Vymk4YfjTi^~90u=L;HTBBXW$rVS@ z%QDJ@3I@+y%u@=ih(s_YYZ6K%Rb8<=H8eYYf(BnjYI1liWHhEu#D`Cva9QcHO;Ml+ zb|-U`Hf7j3L>#h?jp4T3H?k~tlv=n^rg!!YLP|y+&8VcrVz0H_u*Gi`T+syK6T!I&wt2X8$uohT{VX2s zCG>rt^)EiuPVpmTT>M^tvc${yTib@5C26cn#4o#UVqwhqVHb^rek|!Y>+^-|!fNA*=8YxSEk5EK{&1CF0GvFoCz_lW$HNxttH+TU}UVVa9 zrlD7pnF03>th4gex)d5IsAvb5CN^<`an!QYYnLd>+vLv(WS9xmV^8iNG?Hs%?d?bQ zm)2On^XgVVY75z^OrE2{%Ms%4BlnI79Pwo}QvNij_J?iQ=%@^|03l_1#sK+ZG9=IyDrBg^DBW@sy# zs2ZRyMFkIYMN&i3=2suBL*n#qqmQu|?uQlyhEi1KZF>sBUZm5`kpTJa73BG{?-!2l zx4sp>@{ql{D{m_4R(&lNL51g6dyALy=EWvclasNeJlr=Ock2u1f~&ivD@&}~{uH$Y zhUpU@KJnWuf%CfyT9js`uO?if0#Sp=UdBLfcUMHBlyJ_(Ky1SeGH5I^g-8MSwRs`s zI31s)xK-2pQ%+K5oW!bc9VpjVG@?Ez)#F|fCb4sgwu?zf{!yjP7B`&GmFvuI3Q)H< zSWLlwYr{*>oBhqfGS#;3_qC-*LN1|Loga-{&W!ECY?C-pX>;>O!Nye51{kqm{5g}G>{7g=x^ z`@|2X1PEUrysX}0wL{eSNL@A~e8nJExOLXrcEvqdxxa;lR3?2Z&H3La#0_tZooTjq zJTdSm&TVObh|ImVM&_X}x^vx=_p<@kWQRqI_qqOI)`Kf_4@ul@_=l#1`<@h_lH}x2 z2S~0y7=0u>R7!U-X5RtUWE?`BTZB!RJMlP^=d{ESTEc~m<#y*QmZh5aEXGE7mZSyq z7!;-o72Lj?O+{7_Ib`G{urVJ9d>(k-!@{#^EymrId-CkAcOC!YWn-M=CSRbk5zD;R zR~*j~0$K4X;{Xv^I2z*bZClfg#9UaGY=EeNJ-WVvA?BNG(!H=$IYLvf6V=RzPx zB}hvRz9fjg%s3EkHprU+P7G|Ln_ECpf3&D>Wi=AMDCnneZgRN5y&CZM<#v_#MT}n8 zD43-?kcZvmf((&wl#>Wm9JW9?(Ntmv7iv;As?6)Vbr`AFL1kgiD7DzqcPG9qQ93&| z?pQ$ymbe32&6t%YM$Mtf+=+EW-Zpwx#+7@I`jA*57+o02hB;n|a9hZy--$d8RWKqs zKM$uCY9^U@5!eD2u{wb=b688YzhPA1g#7$mktKE>cl4KOye5n74%fF!6h)X3FF&xv zSH2YNo)p%;akzPhx6P%VL19Ji*KakojRpMu$L>Y1H zu+@)6D!DrZg zP$BV@e9g#mPO=K*pRi~=VD;txia4f=B8Ko%A46RFIl<{wb7^_WWY9-O+}7^g#%bw5 z$e@Wsl_d%o!Je*LGPf5wMNO-E4WV`h3qMW{;)Pi?>6L*~dFnC!;N1{;(8O+^LNx+ zu3`#qrrf}l8Qw(3)%%I=M36 z(-M*_YN=zk!_JTsLUfD+ZtUR}Dm**qs@q3kU>#Z6g+G(Lzrn0D;r{WLlRUD;r=*3B zA(QTxj{t8O&@xti?jjQH%A1HORqP*@-4B1hHb4(EJD(Pn81aXr?hO+9a@=;?~G;CjT)$9;+Q$u$n zd)VwL{udri5z4bO9N1r*)*IS}NAJK+J0_xtnwd!kn+T^WLdAyZ1b6Bd?VBC&7=>B;=D>0LbNb|p<3zz)ahX=tBmc@3W|_oU z{t2A*dw!qeuCIg3D10DELq6GRF$C_p%?=s`xd`;u9*ZVtZ7lM=RPUX(Z*3C&!0{OH&X79y#RXGQN<-dp=J%$#>P^NzIBeqWx7AJZva z2Ddw8kG28fbWG!J`(%MW`^kl0eF6L23aLp7Ic^iXEy!YxX{-6yY3!%Bp1X#{iL%*H@MFiKwKXq8>or@<6uK9B}nY5`{9BExSz*#vpCI_2v zP7iPc->?jv?m-BlW)v*i^vbrgqh)xn?jABK{q}tt=VnclVmdQ&=ZtSOe6%URC1?0a zKlAK}PWpZjHN5A+n18Ejufjb4$+ICGW7tbwnSf}0SGxk=(Z)-ST4V;U^!>Y)>j>#Z zmZNQ4(2s7dYd0C|M{nNEl03G67Uenz{c4t&Yd2(h0HdAql=y_AQd&@F{)O7m$$Df0 zq0#eP)L3a7-NJzxdle$^Ap9pLSWnd2^aS`f4Kxa|1Q9*-LShInR1vl&`BdX1=QzAf ziKS5vi@QR^5$a9sE?gi0;)@XArLyvKcpp?S-Y&9BWPY*X2cv<7Q(#&Cu%O=OSAZ(b zY3awEXfZISu_k*c)s^47fBMeZkQ6VM)6*OMbeqAsNFg6LN?!L`B&PTLW*2??SnO+N zy&|8mHiF4gvgZx2VHd+!?Ec5CirmZGb(l~DW^^m4V6;_|xHMp)5M3}8< z5l@mv>c+uViO{XF`B%dyK_;$=<{ zC9CF3`>dF~mO#GztYjIfve-C%HObd&)mES9(LaoxgCE_TyfIy)x3KaRo?+~FWG}dk z;Hjqa%RcQ73a*|{F*bfIkxXWhd0|}20-u6!VmgP$5Wl1V&QJ-~D4FD#GQ?&}Q8T7I z7%u~Y?hmsZG`NFwWSyWWh%x=MG~vNIpBjCz!Htqpd?z}Sn{tuLcrT_Pe?p|B8*s3u zITbm~-gwGqP2vLj9MKI@an(bZ9U2Dw7GEX? z3On#_X$u!Nc!K_Y`w1` z>b1-+$`fa{(AiXU{c`1g`}uO_$yXtltq z??jZyRCUM4_Ek)%+}aQV+E-c_u4VD9RjlbIpl-jQ=V+{W-j6B{=Z4Q`A7-xvf6M`b z`Q`otiikKID=?0ihO5~02_@+{Dz0DOYLi7(jSZJr?SbtN^bbjsg+FG%@cPS?CU*&` z&z1gn#E92hqLJhv8@oG9Gi1;$k+Q4mA0wkRyl{Vl166iYZ{=dNoY=XsIJLpkI0eH? zAl=d0AK0O1PK+p;Q0)br#*dtW3?MfA>^ll*+uy-<9|$jfH(K4!YTQLJ{ycAFaxA%? z+X@`XvfFSLpYeWR{*%mTpV;9q|AL33li_Ip&B}k0tt%OB77zR%9&u6~9QA+919fno zF#nnbI{uFw{s&W>3Ut76fPbz{?LEdMZCUStTciO0-wb1d)VW@GYMcX7P>xx~gCiS^jnXv**9B*gp#( z;1K!$dqIm79HKkKzrlS-h*JM;PGwSnB1yGGMr2Mk|B4v?umAchqQd{IU#}n{3jrs1Mh1K2Oe@#^uOT~ zrO4Sl|2{LjJ!H!NJj$#+o3h$x62VO4WzNDfdsxJ&QYmJyG;2D7kQq}Y(!CE6qG1anA!T( z6QH{TE&xL8^g?1%*8)Yx^OC++fj0iVp(VH4-v50EAGb7V+qvd@w`NcOjF?CW0`1rJ z?sdTAdM-C2ndS478To9qcnabg1CIRyr`%ri6JJsbW^C^2hwnyL6a|yQ0nt~4Lop+2 z;p4|Y8==<{1@kQXs7^DjKa6oCq)u6Lqy_K|o_5u}3*-#6Wy6?%@LJM*hu$sFV2Ni) zP95R=p>!OhHWzPk!YOUN3c>u=hk~rjS`-ch`#$~Ic#R&4-`ZV5d^5o`}b8yTZuB#`*R{kPh_vDAmxre!6QQd%wJ8p~WBqNBab{GyrXo)fu0TD)}b zKKT^U_6*V2#5F9X1!mUn2>S(84Emqc8F`{_KC~nyh2Ci2=)JQZ$ zYQ{ST=aC?^Fhd4_t=M}oUHVrvl)b3i=7qSl8^zn?ZGRl5TzhMa0!Y@{rP5KQi>B|D ztmzj+Hu_gRzVR0m3Y>EL8W(ud42Ni7$mapBG6wHGs*IM*J}ZLtM}K;W19!AhZpkkF z#o}y-4%C9xd-|5M-s&_~&r`0N2bx%+;4efkMw#N$l)O%FS~zP^7q3QYbTFFmvJViVYPPTKFz?6t)%TK=*blkgvwzR>HDgtAVgm#@@QM}zJk7t= z7-4^f_NO$_ppYLKa6(?s!$re5IhX~vQd`F1T9q+l<3AgrW^=$Ehe+yvow5qf^qZwE zDe>J=BlV1PGXFv+^1sjsB^k0QRf6Xs1+$8nIEdJfW7*_(S!`lyAX;p)EB{L*Ge^l9 zvS5JY0&bZYR0#)0K(oV=efs91e7r8JZ9I&+gDyp{ck@K7x-nx;qHwKw~K0_gC8h!Sm3*Em3wuZ?> zdgo}71%mRaRV(0euH2}AV+}pusbdJk?l9QL*_M~Nn?J7`w3>?GC3B{6Mr9+u^81!q z+GcrG9cJf5{hTtfOm9BHX^H23Tdqr6Wd!?HDdL6~1A&tHMyz=4VN#RbU&4R1BVa(U zqwZ0HEI7@0LO;0mbw#YOO8Yj!7nq%z#)rYbH~TT|Yk{CjTmwOG?wMd;<C;k8`>>dBOysEhHq~96dQh zwj{!L8$C{QA10qpuF?2&v$Ks>kbQ5F!b>em8K&a$w?yN&ZEh7`2?Bj|{XPqpUdj1T+ELG5oIq?u_kHd);2W8hA2s=I& zOXEeSXuOfkWi!$whaadz){9bkx@Zd_KI8>&9V3@@x@(79pvuuO;UCE=y&>y zb&kCP!XXexS-yp|Em+f`z*-jATq%ecvEZpb@F|2~N`4#VSM%^rM6eLFFvY<Wp3@Dh<$Be7S*E5;IekU}MFl(Iif|;2j(s<6 z!P5j`1Y`NhQyWw#s1W^EQiT9JFV8UOX9fskEt?%NeB1*~fA;}jFq~*0WwFMH;%Yu% zHaG)9=(c^zTMHRGiXN<8pU|yKLC_#bnmssq>8FN0^3%{sUNrtFrk>JE>-#GN#*J(~bpaFgYXHkDpHb+}9CumF9hn~A`0(!1)p z-X^|CpZd)ODkTO3y+jVh4|!)8hA{HBjoQ(jRIv)c3DQwpdpo?ISXt;ul^f$8p(=!s zBdhfFa(8=rr>?;Ze)-ba{?2017Ai7<^zd-KG5Y!_r}C=7Px(9K70Yo7+no})isyHq z?r@1(Uk)^Xu_*_)3@zx)SHI0HGqKiQQ?MAfWR?Pr7ZhKc5JHz zpSa7MzQ9L`RD4!_ekbxW>f=nrzpN;?JbQzrY9cf@2wECVlPT;l=W?hBQpg2a5B2uQ zxP4ZxI8y|IUTke9C=-SnfFA&a8<1BVj2#A1SSd_?N4pOEaw;RRT=f8@`^zP4Go>6d zQvZSlG;TtRoM0;XE_n?O$;FhDIzC4-PmlrHukUJdMd^J3MEzU}*|=wsL8%VwaG8n{ zNfh!U5f-WZ_kn+3DF;#UeA-vubPG5J6)V=ZMaS+bVTH9Rk=w|N{&_k8>(>wQS|shF zi5#A6I&ga$Lq4fyaw#$A!sExcV+D@!)5F7Gx%Odn-IB@PzIMX2 z@_eXdmas9MSm<;za=|1HG=sUEt6c668BPKdb)Ccq;Le#_UuK`jt1feYOpER0rquB`g%? zB-~FXv7uTU3-9B>8H3}9Q8tn}Q+mPpIEL;c)S0WkaOsH&T7AV^b=>J_>f44t&frfe zw2(vHuCjQR7aF*LZ>}5^NqNoOq~Me%*uCAfK#_{Sj0<1kUvU}b%THp+BI6pyOIEnY zV36F58Q3>T>SZ6CGDK2?s(3tkgCGLjLW_DXNZ5u3g55K;kl&Ub<1nBh8K&jp^mM#J z<-~bY$Hgbg3KaSn*ZYMk(XBEx8>kF)XI0z6OW`P>V;BOMK!@ z%%ijcs>nvwS;k9kNiq+hggpVA1Z@En$ZjfYSN;!V#t&|Fhw?JYT4CQb@NbLWakK!N zM2!(YhgENhsW4%|GavSO-!=;oIrY&B4kffN1ecVRjWj_!Ru>a32)mUIDr^&ijMf^Emrmb|@@C23caD{sS zR7j^`CWD*xhYS4F-OZAdl(#b!--~QKC5pwq<D&ORYBwfvA_wRZB92o(y8}NI$G(8vHby^55ALde5Je@;-aJn}zalAZ`7= zDPLyYL$BJi=J1pdH_2A6q&ZQ3=Mp0U>=H3PU!o`iaQ&u|^pes9dapOdwbJjj2w9@x zcF%`~ROtpuo&C|v5fgtZNR4E|B|!?-e-mpvZyPTbI(r(ZMj=)l|{oOFvc9;2%3b%j0ZKAp5{OGsZX#Boz3uqH8%I=TLeqeTf!m3@umsFR`%V-Ds8=!#GAMJ?&( zo?M#>B-N;#Rl_XdGRN~sep=8gg;g`ylF(sNmTsG*7yeETW*epJ&Y}b`pkv^`Y<6}8QC-ztc!eA*(Or=dE983QiJ>lSq5U zk>G@eM0cjOA}pr4bh+_b9xUQtL-c$EJod-H@CPD-uH}NwnmopsGd6f+T@vTo-=V>&eRg)9{KtSz=sgur(7GUg($&GqYxYb8q0g?;u-{JhzGi- z>r`kXN)~^dB}{~OF!b_Cq)K}Hzz#!18WwIGmYr?sF!~y+cEq?C`MdCRcM{b}y4@~K z6jjv&8;RQV5tSbYbcXQ$czj=^=1M;uag2|4?ie(iwy@FFCyHV}N|}Z-*|_d{zxK-r zCsbZDldWx-J?T>n;G>`XBu+B#h3@39ASkhLLkg1JDVI5*3sw9M{bM7(}Z&SeC3?+ z!gxtoYI@2c3#G$~`73ONkiAfP;ook+heQOH2Ywl|fk9ashW9kB>DUg;h1^7gD5bb~ zgTul0B+EzpX8cJwlA~P}MXHY{;f0*DGp6iF^8sTVBH#WZ$jNVB6f1}jqwqK5AAf}6 z4?Vqp*2~Uo09Fc6YsY0Jbxipn$$bzEenHH4ayXlF@!1TVG6r%Fg=%qb$Z7#v(qEEH zsnb&qtG}l-heDQ)mT;V`>OWVrYVEqOdxSwFk5WR^Q(cSepT3Y;Qft=l+&i@!N^p$9 zdSJ8Z2d#|_S(YO!)mclYMPI-Yj^T#ZiftACNg&^c2aaDuZjkiXM@(J9W0t-M zN}LC&^6uy?eg9v6dy?Y31=dN)d4`Ou!>paN%Kbri%dG-=wX`Ao8qpnX`EP<`MBS&~ zDGP!H0qkbkT^UKdA|xYl-!WpU9Hr-#h*ClMqBuj4TTkIll$E^F{DMUawk5b2VlJ}R3O`e+AydIKQg#!*_R^6i(d zoS;?Y0EDR>4jRX1w?5aS(m6 z#&(85lFT1wzb!#+=XsqXcrzBcQe&y$sG`zi#ga0}^ z0I?Rx7`zdR{;;4mhdfh++Y5KaNQ9Li`=I(19FK!XN?rMwVenv)L`)j)-(u=)>uExa z$ZIN zzXnPI28iL)2-H*?aq3?LI#)Bt%l7+HYCjfZKT3|gn=E(yzfj`Ax*Pc)+KSiYuxIAq z!lEX#pP8(CEV&gX{!ShYAb-?Gf@MFfx{KadezjdH9Ktw32t^Q%p7$3sO<3iP1Gdyt zS@)bm9foi@@xC?hJBN~*B^S88#+>~~yL;;$Z`Ed+- zk~Oz6R=$w?Y>@btvWyw8UOKL*4Folvm14P0LK447N6~X8ilrQ5Ud~#HB2oW*vzkJD zMT4cD8wyHFtrQee>typyX8!(5oQ%!JdydPGlCw)K(K=J{v-uC=lGc5`=GYOOIIfTS z6GAvH^y>t97z|#6z^f7%s51M~A!00NP)8v!b3va|baaksI{}6qcio+a^Jm%jy~#iB z?Se7J&rv2Qg-=rPA*ci+9f;%y>W7XQzEy3G*68SPAk|L3DE+c?J3WD-vB{~W*59O= z6o*r?n{8vX2%a=Z_BZ3CHpb+>3~qBIs=W2_(}(!|O)1U}-NC2XW6BgNOA1$)ft7(U zAUa|Qkp{hp{(up~xm(@|`;eu@K5HM>Zt(CDq}qCH0L|s7GI`@?E^s(Y$8(qAV6aQN zKxhZ@6&yuPMi6JJ@Z6x$x`A|p*u47J2FtjGrhv|t=y;OKIq+sh6AODe9xF{pGXHIX9T0K&o}2x(qUdd)2Lx3( za&LS7kBn}2mp8fG(qc{-_8$F&JVmyP|H#R z0nO-t(e;kceYJ7h?=QA(HnwfsP8v0~y<*$8lg74fHBOqOvE88A*S+VNd(ZP?zghpm zIcpAlKS#=wKvwVM7D>78k1E$&&$}x=%wK&LNoMVuX`!hZZo{2_&a(d-_!0QdKvDX+ z9W>P%b?Yy+=`*(_<66m`6CXas3ax%CehkXh$wYU=L!P+0`L2rLD~rYp8qxV-v0SE8 zBt1MbDOYI{Ou*@VBf!+*8&M@gpo_yJ{ZBT{>E2Jbi3|euW*i`)|8E?a zfq{%p2jp?hu3R6v@#P^(1e4oE8-uAdZB7Eh-5n~W68~XrA2p)Bp|=}e{@F529Hw>* z@bdqBh>%Y{(-qn!I6#@SW+j5Eg&iA?T{Q2J-e=EcRg}$Dt;!^ZN>h425pAYl?z(K= zqZ1;5`nvjhtp3uQk*oeoX$cl3S)>d0uxl8v1F-%0nFW>CsLFC;rwU(15P~DHxIts$ zO5EJn$xGU^pS|2uZ<^h_s5&kNr`~u}_8&K>c9k_ziw~p8OkplYpIlc6-YYi7@8R&z zmTKY>?{4_*9~hfDSFU_ltX-NV>b>RQ3{9mZ4p|9bp zJpddcIq8?ScIlp@OQLLgd@xI_X<2a;3DJXk~1({e?r04fIuh=(eBh=cng<)YNP20y&v5n`Sh*sCU`GZuhinaW(prlEgW5 zb8gXoY8HzbT*Xm)wCo(deoz_kn|6|u0T4C%IM@4m5S4sKBjT%pqe__yZ~4fi6wQL& z49obz+rXZnG}L_S9|1$Fi7U_QTR!eMk@uSI0i-0Plpl(lXS178Nz{?er?F}_vggCbC-=` zLb@q}^{lPqOJQR~U?ed_(YT1Fs2V@_eUN$wwJd^#!xg0PRLI2z2hUM!Jmc*5eoNWa zCV)T;Y=lNST&UwvNHAP_;5(7x%g8(ci#iE6eNfHX5(`vZiRqvMM}07G&3e%A=O~Yq?Js5`lEUhM#E<@-;+v#VyQe$|Q>!4}lfm4De;49yHc!JJK zp4o7DOM)EHQb1N`QM-8nLUTlP)06DL@;@>OOEFO!W)Q1AD{KCWk8a8NY*AZ=eY*Ca zxUAi8`<5BSu0rAVoBpJw5XH>cF{oV5C1PY1aX$s~qDsMYk;eA65Vj9lg0cRM-KQ8R z3z-G-M>hrH2cb6)G9Wzhcl@>8UJ!D z3*oL`I%M$Q7T2~+M*#@2>e)TFDS2;`j}ZAo&@EyG~R#)oz|mEG4Qg(%WCkI&w9HurcJ&le?x+MGBAo2ib;rYcH*} zxMPR)qba_|%wl8hkKUC{_ow2)Frk`6^MaOv9SqdR-Nz1FR5@sCa|3>+843azjH?|> zP+{4n>Y0uBH5`+-gn5@3{R%%yPMz;7; z`$J5^ErQpU^)6kL*!0@dcsV`dsUjJz_WHUB;rddOk_n2}gOz z^5hYeUqOC8b;RU`iI1BLZ123XQo<=Eer`eDQ2%gq3WiTEamB5#%M7%1h`E!S6wDc@ z?!S$UhAYTxAo8=5sgI#b6Pme&_ik?fMq7060VIdelMs<0#U~6kWfmKXL$79) zrL+vGI4Dx^WI^uZ52{d(Hf{#mWOs|c2IAria=o| za|drEHEhn*x{CzhfS)&2RSm17X~R1VnP~VhDUAtdnqkAHI$cc~4U-SG<=~Ux*x$?8 z$w{*D0hXse7*Zch7()n!QX@yBPJ zgLBS&hy6E**lL<8w$2TMrjo@|K9HFL-54iM21r>`bRmyCZe?Q*mVt7 z+dZzcp1m#~sz&0#n&sI~H)BTuvkh&ljgRLiBT%&)14&g>nR~tImc!=fRxL%AXU?s$ zTHY%c7LEaj48C&VWlDF0PVeZdu+XoH!~<-;7Ei&S`RJ?u6B?QGt`9g)4o z9X~-bAhL|ktbjmPJ75-k6r9=hFwoMeKIQj!%Bpu&It6mnS(JshDu*e>x+dzI!IlXs zET9`b*Lbc&lFOnnwWi(r^TN!~Av~lW^^5tR(>auPAtwB(Rp)5#u>jm`;k@tbi??Ha z!zl*c@l)qbxqvSm8A56>*#&cTl|5A@HN$9J%rAA+am2t{h6>a*!aVkn1e}+eh0{Mp z{A|#bs#^j24v~Mhb~D9Gs2HqxiO=mmhyheD+(D>a191!ey`IL-;%?>rKB0l|HpmZ9 zx{f|G9)B}C1)nRb)t6jg^HQ-Z;xmew%Jce!F>cnys>-Ej1PK9bUAkN|-T~79g9bQR zXKr&a1KVp;dLQq}YJ}$kjU?x+9rbdS45qFV3t!pY7EPc5giE3tyv)vHvXdh<2Y@o! zoys67St~43sB=){yv#(!0AnR>>vS;qmmY>ZQZAhwBv83o8nBQ58(Fme?|nE636oW6 z3)x9|p=e+O0RbB)LsUe-0Lzj4EAEdlIvS7sx@~aQppN1y+mE^{ULK!FBC?HkO|)O> ze;2Mk5#>T8AjHr0wnrm-_W9;y5P|b@Xdgx}5u!Nhf2~PHbyaH|b9#6j5@-va4s4YC z%YPo&Ilh(t*ObE|*uujL|J92w9;F92GMxWDOAAB@}E* z@h7>ca0M+<1ZTptAbQ*EWw6=fY462E5Yq|o6b!vIDfsYT8kShnZHmdW5u3>IRtFGF z$v9&bRsL&h#+9ufdg&8@8=Tq^@V2o~qG*luBE|xttwf2_{Lz+DIKWRgkSMt6(J*=~ zpUHjh6~!R8N+gk2c>!9%=xZHI1uCNPs?pfJfwA3W%C0>3)O?M$3rehC@G|V{zvVR* z#5GQLtdz1ADm)do4*i%{x&Sx@tz2cFzr0~Yue(IigC|{EzKpmyiGzGBV|QVog1l^) zr58wu8JvDA77*FW9I$um%~wH4If>@g!{QrXfDi431Od|uAxv6ztJ2O)<;p~t#$52* zsk2Ehah`9gm2CgUM1=fIWA!=6Q6y0Vex|VJ0{)k8g`mKCoG`KgZuHlG3(AurSa;0u zC~ad^zro-ff?y`H MjXCg>x+G&(Rf0{wq0@*@LjLw{BLRBQej3AHg`s>iiZP&1 zulRz?@2$-c&0bny9bZHOMJB}kuMjkmvb!SRO{4!KrP4v!hS z*bgP+_JcLS%^j@mK4UxEQ^+eL&I6s-3~+=7E5ZqzN`f;v%PRM{R$@ZR9Fxz8D6Al|Kl-(HXW^nQ-9UG!?I^>bDd5i_)`|B4MwsFS1Z%9=-JK*m=A@5i~b;mHgsS zuKfAuuo}=RCR*{6TXIr3tau9QTZG$Iqpgy?x8X{x_l&wft3TN2qa4o9!KcMQj`i6+NfL=U!xn9Lp1UwF9QRN$venmlf2#d@=_~n4*}rm~8ln zUgYalUG{o&X&R{AI1%zTf9c{($FIN^CO&9iuv)m_+ZOIP390_H=9|I0% zd5KbqVE=4!#&)Xu9)E%UFLf-XyynwOfB^y#DuY0HAVQG2qnT?4J`p-T@PA6$n(kf* zATY>N2oUK1{ahJbxNb=$f7SJy&iEzzO9rFJrXH#ExO_zRrj681ba(#LnBs(lK9T`J z4L~959dh&a1MZX)Ia>oJ3xom;d zrHu}|>Og71orZH#>T&g%jB6{Zu3|wXbvvcmqGrT9&m^!#^1Z+FJk%}fyWr~|KDs(` zE<=~I9hoHx5^UQ^e_8O~C#*9vNzjf<+&l3znbf_+f2Cl*X-cW<@S7d|dEz{Knu=j& z!!~jksK1flDCpcJ_Pf9xD%F!#V8T_8$IgABP$O-VUn;h$FVM`0HRT7^HmXgo^BDRzQQ4T=h1FC&#Vu!;_?#{^`w|0%Tvf9+M z`up^4K-!Ah3qe=uvCa4;=(s=WvlI0pvRB5cMXRuuacfsNgTh_h)xFJ-DchM1I?X5$ z$&x(!nT4cRRp~@zaxXB_Ry_19SlFW4mK}pHqGG;}>+qs#y`T2m@jzh$CgCq^-ITt& zh!h|Tc1?mZsc=wJ`o{m0>=3Rl4x0t;zgLKsc3+*c@F&)y7c0|oip{dN4EfZbMmd^m z2f3sg1C<{|IUP};;hk=A{8jLq+5#dNGFtaTr-wk<-|J=zL*Z`t>#nx?YvJiM^r#=T zf0s702O2PQ4KWurnhM3it1EkBk1{W=*=B)bT(ds568_fdE|P5LO*2p0R|M?Blz1m% ze=JWp1=s_MG544RmPSSp!BEwEbXuPj7$GZEz6$7&y#bt!N3BLsB`U#DYlan)5-FlD*HULo)hHrCzHU+@ad`UQVpweCX;Hmtx>(~jxpWvV% zPy6G66b@}{l&{T2sj8sg)a;Kb4lqDAJ(v}BTxM`QIpXv{X~Xx@VecJeS&H-Kut-uj z19u~ck+}&*{dx)P39jhPp-F{rkpEu5v6lpb!z2$NEFD>W6Zzi0yN=dzo&n05>FlxN zd(qUs+eRdCj#jR9Q@15BAQbF$NdeE)pz$AQi~R`a*<8Bu4Hl3GQC#^vUxu1)0nX6A!Fmk#+YHJ~uvg^v{6Hb!PUu}PYD`zJ~^6QV_3f z*)0F+@8g4p82lj0BY-Dzu`zj;IQMoK^Pv99%_GcPRN{m=w3mWLfHFSl<)t+K8&{~H zpy03-;}tu0=T`wBpUuDig05p=9^&OVOlR)5l;#OvQqp%IuLUnFN&HuXvBPg|BQUI+Q7Nw%)*9y^hPTa z)T4vB>~__ULQ$qPLz1U=Ef|&OmQudLfc0g5Ju#yzfXOInFA!7{Iu9(5G(g6H23>Nm$bQdlUi|L1@|Naz171|}`N z2hu2!SX2qeh(XAIosZlFQt)yJFqzkg*;48*(=iU|-k z_}Q^=Wwr%EPL%#&*G!vT)qx@db+hj%pDO}bkjJ!;iqFW4U&&HwNM><=R`JzPuKUMM zA97C*;%t#S+2m8(%e)XL@x+Pl=Juy?k zS)XboIuIp9lOa?q6mE5NO5m0>CBcBJHSO)$u^KcFJKPKTj?j`?^oeNW*uay4{gDTV zk2tC!#XMj-v*Jf!BMKZ%3&ke+m^RSDk&a`SqSM8Tr^+!}Gyj499+skz+)hhRY)3QK zD==xi8ExmX{(55>UGp1UsmA4iR#$rn@$W-Jt+Z0xg4v=L!kxv$vRe8@!Y$aivGz>& zAMv>wi((Vx1jbt@EhLsmVNFGvqGAgS<)tr7P~3<$Ve*Lw| z@CZ31Yg~i~W*P*^X%U7(=|GNDv!fNRExTRcj>`S%(32bOwjJmE&1^d~N$O50;Z({pG|UPM{1~ ziCv-ydrIxFNI3SBjt)}uYH_nRfen4_VBS~aID0y$vqDI;o_||oxC&I#_;|}JwG?^4 zG#A(k#V@K2DCJ!CBb}j!x?Xc2jITbBa;FT}e6UF)OXiqCeC!Pmf;H8`hYsqj=og6_ z8t=e-v-E)pXTzHHUH~!p^XBiuC%9AOxUr2ec+FO85+RT*?~H@eGmz!fu*1g5b?T>HmRs{|Tc+o+SNd_CTbAat*}%XyC%0ZsK`CVARor zlp9hQq55ZGHz~j`S8{!`EUCO4(o6|MXg}DK@jy9EX6xkb2JY(yNGG}7QIP6+mb@=gw z6*w67Y=FB2Um`l5$aY24mEAFxEBwg{31q)wx+CtoHAkkKR83=LzK zjxj>AS@kK)u*e6%=<=lkl^Bm(IaTmW1P@30WY8C=j&0hlLoISRj!}GDdq?pc60C=t zUO)n) zzWNIG>QD6bcMBix)LmFte-3K6cvmd*Lknv_*=}j`E`;R88r~xq; z*;f@>KD*#z#>*L(6p*w|LDOhjw!kK~tlP+cJ4s2Rn2@npm&-36O0A~>R|DasUI_!- zZ_VI)LEHu;s5d_@#}(_Y=aGY9EM)ziKG=ZU2W{vPX_I-6LO+o-t8ocpK_22vj3?2D zFXzIQq*}L9JI8~z0&UCI_WxQxo&K5B4WwJqoyl$JwrYF9aAl9WB%ov2s>kS)(Z{O& z`^oC_C^SK`aXeKp0*+Z0V^_ax5F)M@r|!AFYdu zdSRrb7ndL7eQadfFcI-z($X=@>(sR7(y6<0xz=K|(yLvHTI>i)p+&p-$zQqX=hs}9 z1C+68o#?E)!G(*P*YGI74?87xfij?;UYx!sC&&|9jDhk_A|g_n4@RpoRI66+Y$INk z-teVz61pV$>)Ri3zZbA7J+`-PYsq=m5eE)J$UtR*WCQJuZBZ6_<^RUCb2)x4#Wh13 zoHzUIlS9HiD43YvyRszWB7{uT)}^OvEeR-!R*#k-z87l46$c_41hSR&E_CKKV^#KDIyu&0? z!+Q4OeDgPYBlVK;t9%G2GXzBZn6jUL`E9x>QQw|Dm=tln&GEu}uI!%4f}y-ziHM#= zZCYnh+r)(Yurmu`{nAT-5l^s0r7SJZW988Q}dr7`n*8sL_ca&f*=U5 zdkrMAkGRWpx)#Z_g}D>6cs=&C-9l~(^?vnKR+ir!+Z%H3B=vaKM?f6xdO+7L^sgoz z@y(O|vGiAo(D#D{&Zt@J8k3KLXYRc*OmdN61i7_Q_?}hNj>~`SY+6w4|HYIqMHai_ zHv(-Ypx)i=wG$;-x-+|N`txrn9xkQfq(o63J$%MwjIY$%?a88X%HyISYDxb?_`m%( zi6iv}cq9;rf(it}{XhO2v%?QJ&kP1ubj<%h6K+<|-f@cu{a^m~K^tKnULCDm9BM^7 z2>WFR-_y1js@`64Rm>KN4FyV7EZXktX`tUyMmC9v|LWR3NFG(6GJ<{Bn}lu{2B*Hj z;Pd3A!p>sJyobG%IsMj-?_T0KE`oiqD&gf~7>cWMl}8Ptp~@pfzrC5zAp#M}3fD0SWw{AG)O75|GyQtULuN$;aRL-V zS%EEHb3=H{Ei5JN+Vdakjy=P-hqo*AM%D+dWn59fyYWkuoU6kTrM0^Eof~CwmCi<% z=q^P9?!2an-T(q#)&|W`me}tt(Tqt2{7H=O5dvr>|DYw3oTMWi{Ta z;xZhI9M7ALl5&1ez@O{hRH(uPg@m&(i3;told_eyp!Y~#6JM()9|NJ+WWUg3I~}HP zo|yhe3#}LOQkbza6LZ#0yY)OgT0)NzGi)m|6{i~t#r$2_EE}2+RcMtiS&udwGgQtn zzQ!QPk3>tnLGPA4*M7L$z6Pob05F^%KF-@S#uetxr@XKmxy4TCVr0~uaGnp&XqSH| z;ak$x1xo%2_YkKepWGN%!&GaD2Vc1{pFxMfy!`!cvsRUxl;C3?^~M03y4ITtz?aOt z;ch&$u4lnS^rq|%UUg(lA=;5yttveX^B{Ou7VhzbkJ+>!?S*(Q#K!LJ0VQcYsACge zXQj6LMQLUZsU8heRtO*2^PM?QgkJ-|&yX{l+TN3ey>ZQEpXmp>wr)1JcQ<(7{6PRA zjdBl7@J|Z5sQu9=hJpbf6(Q^=k46SE1{Ac!f3-KLt-WK?_6b18MoO_Lh(5lu!{ge- zSp9g;skr!?x^A%-$9=66kkOCBRx%t^E;wEz{pIsNLkKIL#t{6sfQC%i5GTCcF2{HJVA2%)+T!$aDI5=fJc@K>+jgv zm1=rIVWxZ;tso3ilt`6FA2PE%OGT9%9!rPd;fDy$wl;iiNG{{?85@_bq;U}#21Du|(c>Zg{5105U6Kw~YVBjzio zKjLick>h&pntRv)>#JHr@b53Qd`V`6%XuL#^I7!7&XKk|>Z2|0E#K9!(qQFwU%6jI zED50pZiNdAC~frMu33oz=qc=RnnZiQ_dxK?TSy6}>Z}4$nfVp+BfZ+nucqveN$SQq zdXt|E|5A?sTB1g&{>=#U3Q5+pDycCOaBY^6a(JUAp%yIz;_{)}9+w1n5&+!P$#kq0 zue0po^{VsE#O182l%VORm(GwG7tFOfyRTE-ik82BL$=-q>nQSzsl{~DsfR!+qt4yo zHXj+Ul_hoK_n{G{<>;mHNiUdrB7+ViE=AEYd*h4#XXd7C;lje`tjrjwTDq{4yDBLq z_C+qVaUCr{?M-$uX6go@iPDGh3~uT-tw&UyE8wS5Oj?`cXXF|lNsn$JOmN*s)Rbqk zgIrB;ogzCs5^Ym`9S#0(j7Fct;o`two^w>rtdiff^{$}{QM{<#_EDK6z0tB-V$FHu z=d5_7_wo_9R#owMej=R8y$!_o4BE%TU(iQAD+Kd^go$AS-Y9Hn->gD|4)*5C^P~nY zIktI`*X?p?mx+(P4emf#&D+9Hjqm*Qs^QsXRUFMO2TVNZ93Dxq`=Gdh>d;Twz4Gff z+Bi~?ETycU?M3Ki-!!=_W0hOvP)+B_l0Rav3fKwcE|($2(4Yi;Y7F%!)K^`%Q}r;@ zWc9`XWMxUe%>-rd2^i^=NpU}7qCBbh#mRte;qCGByWgq>%E5zYlV|}i%E%~xMg33@ z-)}__-$JYwgnx&41)ij&U}W=;(C|gVP=`cNORswh@PIxB_kZt$`U4>~1aJ|p9D+Z` z#~q$Rtq8|MD2$8KLPR5bbp$U-i1!^u3SbTZbCMP%)GKt2f_V++5G_2i@K3tg2NyNX z3bJ_(D)BB_Yk4t}XRj&Ynpo!T*_0Hyz#dN3ta4P>lxP&KauRZ*Z3XlWm#;!$p3|3m zJ2{UycpI~{xr1c2PWCum;6pAG%K4-up(F;)jpx&blSCN4YWCM!brG?ulYmQ$pWF^$ z#TTbPu^{=h9)^ybY{}O8%^|~I3x4)+#RzMJj)4=p*Cg@RBg%OF6%nc$Wxj2bwn*`I zPj5JBX*~b&6b;v*tLQZsTCI@oh&eQ$!bZ2O#f>ZZn)5p!WAWd0Uhh$%$&w;yQyK+$ zLUhDmDTU&z@Fl{R3+*$`l-|C=!9t~gDNH#*Yvc|s{bG{BCK_^9zg)v9xw}8vY6l5Q zTyBh(i;d5+A$y9?d^aOOz}*<<_c_s1QgUi>jkG?kv$h|v%T;<| zc9g!-nl&ws2nD}O1Nj4eQUvYB^VP>4ZkRu8cho$M;1*U{=qq;Nf~TNmUV452d=39e zk*k?SlV2$m&rpaw1OmG1NsEdSZWiy0 z4xCw$oia?4a|qX_4qsmVMlt4OV%%HazKdt3@OJ&Zr%f^KhR^qk8NJ@RK{hhC+$I+A zGj6D6EguYgkcNVu^ycJE1btV)!d`n`-b`3rK6a~(M-BT;9>p(_zEs=;O$b0w3fPQ--isFeOvB+gp5?pyt7l+9!!$3C-E|>)>3e7SU^{U^;oA9J6C;bI$WZiA$(cakWI>QQD*HF>dnK!h^<7JnX(7N zYD{aKL!DjU6FOmq5HM|Di|>Ax@Q{A=(k(~PWdCN72*u@A;y}DyXR6Oo$ZWFld3uZ9 z;Ak;aZb<}7!pJ=YKi19wxVe_sUkE0XQ=zcRf`4(z<`l8!_!(%*^2M4HBKS~@?zcfH z=$03c8;u}h>Kavc#-b|H>8&Ts($33~FWOi1he?cxrZ;MkUTeA~6(V6*3|@k3Li`w! z62f-QxRzNQG25IN0bgddJQb~GWb`pto3Qejf+H}=;%MsDh9j^9Do#bUM%`f%#F^?s zjWK>xU1_zg>h?~RWT@mJ$&#UU=cWI4@5*ailJ^?<%Xw<+^aUR$E(f4-Qlxtk~3Xu&|K1+JVy*6j_54CNcF7ACYJRV`@Owo zjV6H=BZ3)Zl%*RlU}O{WcHSK4qm@!QY9|U#ZzWe`FIO41Le;JHte?fz9?U{fF z6DOU<=M+Fj%1ctZM@~`a?i33RzVE&SlPZUH*6FIu377dtJOpE)u%0bhZ>NLD74Du z-sFehZ0fcvY7{lNULU7>5LidY3_aWpOU{>P_UPKSx-R%#YHXV{f3KPzPHJF9Zd6_I zUqhQ%f?5>-!`dt-@Sj~IHsUqW;?@Mg+)+4(MCaWgOEOxlkkN%j>r6h+`FwPigFt8IZhQ-y{(k5fM zmq~<`s!({YqWVfW{$4j*(Ru~pU7JU(d6HF9NP77LEe>Q}xj96(G4O@-CvAr_&JzWy94%l991#@Q@4OUI~>o$%+h82(_29uvAN``9{9n0smz|)@2QBA53lOzpoC3 zLygr>3P&19d>MMP>M2-hW3EKlDWa83?uA{CP2b##5f~30h$nQAJoG?ebSP|j*qfAC zI*dqvYBMuy%M^=ZbdZ?cci)p^>Rx5BTvH4q7a*HyIZ|PPF3;@~i}{ZE2M6sQ&hm*E zg>n#^`oYnqf?GGXMQsWK>!b$9>7&ml>HIszuPzuzqNFOXg~=Gn+WRQAuwkg*`4?{G zBV}@8DR5SP7%Sjg$8r{f=2+XBhEQyN3bSK$-1=NPrmB3FyfqFCvH;c!w*FbS0K9tG4Hl*p_o9;VE zavc|-NHeKSac*ZhOIqJjs^2srr4AFOTM#nY4HVJ4mbvVybsw9TfyOzUnMrOS$Xqv< zKFEm_inE}CSOJOod~?CLQ1Qc9vRri&nJtPp;>824W=0yql>51BPP<21$Oh`EVOk*i z{U!cOgI9pXMz7I9J5S9AEaG0PS(qBwdR7C>qXV`(#2S5Og7+SGtlQg_+`C??6%du^ z#4zjBs(9yQUhu1{6;{ozT&xds2zP!gs5^O7a5K^@>zM8`QU$EEJA)I-eL{AGjeB za@frZpWs4;Q!(30hrUcu2pK>Oi8r5dMHQvA(OXb~LpZQqFiLMT;GM+<86JJ<8XjJ< zg}C0|B}?d*JO_Va`EQY|h;sgt-Sbo7sZiN63=E)%(*#3O#MCr|VD68MSneW98e>zz zU@_L@I_-h@#fgDq14e9{RnWsu;a~Dz2BE zMq!wPZTD2i_0NBa9aeL4utIQ>x69#8oqn z#uXn5MK-jebdCiG)>z}kg2%eEX2sEflbYRfh^@ka-Cme+U)J<&ckL{5K!Ts2bvzm` z3I><4c1j_f$V{Mhm=)T5N4Q6B{~if3XVCX*UU80kafMt zN!EK5YqKT7yq7F`-g*LGnjJ*M4$}O-TPpAWT?n&uc)#Nxi@ zZr6tHW%(4=`(C?O?A=%xVeA*5czZfMlhs z$~r=l6FqX!UmRT8U%Z|F@u;HUu($_sX=V0#WmJ%gso@aI&HDz>0?8^9;<~^Vbd55r zCaBpo|6;q6`>C&h_MQq}t1Db$_b`*$v(D30!3fui*E3PgW*6}cXtNj!*>9OHNwTs| zWY|)o@FszN%p@_K1205U~WnV`UJX1|X53YJZ#99EwR)%13A4 zCnB&9%fiVLghX)Z!EV+>MWEyF6;=P`4Bv=Mik|J^12(olmJxNx^?3-!t-T!KTf$x7 zV~-jdH}Ms2uVeQ9o|DCfJ3KYDaSKcixJam|rJA;D*X2`-l##L2e3zmp6I^WhCeQD( zQHul2N&gdw{^7ES7r-##vf4nq1djP_-iCB$M#}3_7px9%?1aM5C0hT#e$F=21_lX5 zwNq_kjT#;}kr*aPC5)(ydZ7^99`;k_1y4Ay3x-8M6t`h=J+P6aDw-R>_rj_TMh=!Q zI1xwEvZyVAN0azMmuH1o3icX@x_&AKw+|1nYR5`ig@$v-p&Q*Y$ZVqekrRSjR7iFBlMMvN zXr(&1zCL7DV;;*8oG63h0LE#|LkV@xk}gC>(Ng|7wBAg$kYS=&C%WPR;2wc}7?EgVQX=6c+H8u7bU z5-j^$aWMGr+W=5As(NmXM4h#&772z(^s8>h<~J^AOd&?Wbdogq&{0$tcPW~%3pK=F zXcg{fDodsiE}!-WJ!8d=!*Ga&vYxLWl}sPJdqVZ=aS=U7vB z_hWYcs0P`jPKzaBWK4M?mY?94{u6e09Co)n<1;?vbGqIox85altJj9rol6MZ=R3kQ zYK?{B+wy#N>seg0l&1Ux6Jnv!Xo*&Hw?XqX=R3WvQQg=^RPT7piZnN2r&st!WuOAP z>zNXt44!^7ggai1pD?T@3SAQ*YT#@hC-7ZPgTFfQ{;d_}_X>eXCzCS`r@Nw=5c9@- z^p8%=waWEJjJ>9=&G_4)XjRGj1z*MFH=`1wL+i5zJn9;IWcP2Z+bJ)MQlCjP?zgtc z?`+aD=?bVVV;j_-bU7<6gjw?4XbG9Gkh1GwwNGHSfs3P|3JJt8<2`V|sRz>u%JPGG zhFi!i`XsMhq_T0q)#mdmsUD+&XUu{_Z|@$7(A{v?^BN!Y>qkS~XSaMlBv5brv%(51 zsOT0?7pzwJg-OLJL+ozcesF{<(p=U(yiBu|Pi|xFa|N@_bv4#DLN&oD{mH;c|KLyS zJ%YhLZQj;~e>b{a5~mcvD7JeDotJ00KEd~g(8oWqK_&I;oaDs>V8@=|oFBCXj zG`zhUszbw+xr)`kr)?!|L&$&|MI6GI$M2qQItH(42dU0z%B`7LQo(wuYly!AyfNgw zBu8)&<0Gs64SU^Cy9T*}+07GZIES#JDIq?y(k& zqpsE*d>k&?8N|oZrA%jJ_jK9g5=qf+}?Yi#qKb^E}Ot_`QnRj*S^oE~U z=`0^EA-4l#i5q1=D?!QrgA}O(wgO8em4WenkqZPjgxx(;4BR1!|!9D<1?>js_33S@>yILe?yhE&-8yo#cTw{6uc-NxkV@ z9WE|pS*=Lqo5uW&@zf>^LrLa%C)lVvB~48*{7$+TW#6+;?*(Hn@p@|! z_@>zeX=6B0U~eJrCu3;Kkg>DbeV?4ZQ~Rg4j^IIJBaYL*WY2}WyCn5f$MWaZ_$=Kg z-Db~a&vt$FxwQ<&}CcZrW?ATbtPg!GG5roQE(|yu%rhR?j<{*peKMLtW7gap=k9$}-LsiaC zIkc*alyIAap-I$-1(8(htJX}XzOLs~Wlu+&{fDj$f>rklar9ZW6_l24faymUJ3~Rn z>bDo<2*F^@m@5dHL8{$a4YDBJ(j^^I0wSe!N;lFSzRT`c^z;7C z-*fgH=FaW8F*EBvkAZ(xl>@6mY`L*oDrMw4rHiQTRu~}@Gnz?}U$!(z_;KU2wERnz zFAbBUMa(-|MEkB5EgN%=hs}(O2V%azgGbikf1h3)wPG;w`bfRGt*|doy8$+!HXDBb zC~-itn)qoVaqi2G3})|+7@ky`=5^SR5tF>fOWRD3wHe1T^UE>Zm*L|W?gU*a1gM{R zW;;I`$m3_>tA`2@A$u~kgQ^81>3v&2JkQu*F@N2{IFGx%Fo|+%oulHeMrQIhPdE2s z<_80ps#(e><{q{n30;%n@727dyPlt{IlJF;(F;V8rIxh0)1ai0yV@1z&6%O5l`qXm zS?0efWq7IOE6Mh4v}fhH;177xx3-$6@99^@-!XpkcX6e2C$X|e0s%l)E!T&cXhWV< z?=)2c>mVyhU9tN^^3;^;0(Y5UeR^~$@NA65c1u5m>1S8oP3bOejf9f1nV}Fx74hcu zSr(dyoh0C5G~r{n)SgQ42gi%IL^SIoJyz)-5XNGLjaju^E{#gRLsimLY-KC2G)0)OX_ zrg}=^`I&Lp2nonjZfg=wmr>z*l)o@Ee@`V!L3-CD;bTvHVeW@~T~P84VNJ7?YsW?P zd};E|gmyZM3F$DR0f5^{^DCtnQ+SBZpXfCQ&dum8Ln6af3;K}%MRuhSOSlDluTqPtFZFaN9aT!tUV48tSW|mr zpE2IT(R+b#rz zyPG&VRj0|BAHeq`t!7`i5^u&Od9Av1$fi4G?e&$5bnD}FD^0nXy_Ve;Gh^R5!W#Kf z21Xo?9G3IqF#Bdzr7g%v3l&bButhY^g{Hd`b*3RS96vw%iVtT z>=|W|koLx$2yOi`cRz}ExBG7bKn-mLwa%WshaQjes^a7VdgNc@qcX~Sd`J+tr<0-t zr|%|=*&)paq9zfgm^v*n%PW7S=;*yc$T$92`IW>_ki7uwt3F{kr_9SeuBvG3g#l-^ z%LdkGj^AC~B|wZfmntGwjXo_D17||7<}}Ga&6#rT+wpaa$p#KOSe>Uw3sOo9+Zy=@ zf7>3f(toedg=Tuoh@ir6+9%FDDwIEyKs?XHzvt6S;QnYwyGcN0}PAX)6$%n@T{pXLO>SrjL2Q5%hgfb#RIW zJ<_pojWIqX&%-lo-z=cEw~m>naRkMTuv%-TD5Zg8A2yebi5L1-t@i8sC+nS=YG6Lw zb!l|-6|rw$)5k%g+|H7qZ5iEdCrs&^0tGf?^!P}8a?atzZA#0?pMxbs{lfgp5q#BnZiwDirMcX4g|AoW;OOj|zT43d z8lOQ`&6ku%q}uPZVo{z9+mQc!d>ocLP_2Dt!)ASE&$H zdNJKfRFeV9q^UI{*g1^M`}zop;&z?$S~kl8)cEK2?Qh3w3?(FOF^?Df^Xgh66h4tP9MIZ=N!e~JwRSUN1`2SpK^&}xMlgw?8~zztCR>AvVw!R z^T=se@vyHtsBgFYbM#sEMpnNSZOM8oOHqX>(GB7G(BiFJh$SX&x_-5E%<{f4r-{?2 zu6kR{EtLS$w4AD{M?{_T%%UMC?sR+}T-R^W!Hgj5=9RXoTw2o_SC*AqUnIlE#m^#$ zfvmUBPHbdmW&Kf#iewQ_G@qGA-b$*-u7`{p`smQ)XO&5dRVSVgTaq`)S zov1d*pg5zU{zY_;JBRH^W3_adm;+700J}$pdHWoP%ULImf7XgZBZHiR!^KN^tcni9 zfj5yKxJdgkJQ+?+H+#N2N+zEMspOwe6w@>9j(12J86q4-g|@#}1rFIsa`B3q7+0m5 zTqL8{&it<3MZ)9kM}Ks5tE~l51_PoDM?C z4D>Yp{AciGalaDPK0Ffx;uA;7X}7%1UgQ)Z7VCNabkX50Ua#j-Vi_OTxTh8>Wd!t* zKq=UoI1U*qUMWMJKkTVRJ#X~!-=K><%t-lWxJ{Z9PuM)DdnI4L)su`_`d+$+C>K8w zH(HX%GJ=+H(D%AY(CnLnBPnz0WB7WhCqN@Mty1j0n2b2SMX7NACWZxZ#-JWX@8h@{6a=jW?eK4*^0bEQfHaF`;bIO zTYu#leMpO!IF2g&G>4)qURvnc!BDGew`-h%1II(1|C&B_ zb2z9G6P@r`>+2Rv>S|B)pGk&J?@Hzgf}RI{eUHkxLmIU2E9`_o&fabaSV1IvSIDj-cV84?(+47f$V4g=He0Yn*XAxo_&Yfkm1Q2CaO?=!H_HmK~8lyond5y+06K|V zlGu+AiK!~%UZ^53O5bw~IvP2-ifmtBg#9oUp14Q?P;t%|1qK7J1s9a40zKJO}N_g_G`v zQ0(KGa-?(aKVhDf_=5b37m1s=?vYf2=ZF4b;&8zV2jP{NF@8nP!$u&bGNWT|Ryw6+ z9I@xmT%s3k>$a|@ZP^F-vd^w+7CTc28!paFUKLOLb}~V)3oU;@oFPs8=HzUi^X4jg zNFr;mz(+1RCw!KxWxas9{VRaY^awwPx!d*cp@%^(|Tze(_iQ^EGkEs{QW90QBS zIX%8*4TqN8B22xJY_`Q7P~7t_8tWA>RiczL(ANC%gS;m%`uK9MmDjp#Rcc=&YU;dF zkNT!*orJ~b-P!&qEb}GCb8Bq9N%-S574^XW0|e3l5#uA)s92X)IWEURTH}gdT&fR2 zZ)WraW1~U^AI&59sHx**?138VizVYUc%KQ`=~BktE}fbLuuB|5+aW>uTNt(L!N*`+9C1mXWX3_i3A{fszTfr_?RR z?2bA0H>kTg4cpke9&33moCUr~SrSM(hKh=-L^Y9SvEWs<=wUOH{&Vs4Y|=w<@~$tx zXv*wamEqK`pX9Pzj`uagd^(z}O6K*nA*EV^ zpludGPWY3zBJ#z(Y`ctDuD>gOposDOpeRp=$9XmT7Hn>!LJBg(u|v=NthM^dXjMu_ zFQ_5H%=#Eu#g<4i`Ea5`+0JcyKC_K%ie89#(t?ztK#ysW#_Cr(C?cB;nFkx`nTKOZ zPOl{AxKW|m&C6osT~T)T>GF#FttgLRnnja>&hr#Lqr zD-eXujy+({)F=(k(W?q`;(uYh_)(|{FRIr623^taVbJpD@2}X4bXDc23t!N8o1{CR zIWS|jo{3B-+}<#y`GeZ#$rkG74x(p01^r|W!^NzXe%;_m$6i~Crr(m;nPBQ}XqdlX z*Ql(Czq{*J0lJQ+1Uz6Qo zGn^o%&$%a@;6~E2$H4iGbBNmwum?RKP}y4<=$vacUFl0F&cwwkiLh4n=4d5r(&UxRCLa2JXngG zl|&anpVLp;J$*sW~L6|r_i zHP}RTla}ZYD#_jdapKBT(?cvG-hrdXmq0;+{uHKWoLwF8W|R(=YB$R3^PiRRbT9IMxi^*H9BdV|L=N!&D*K9uL<7Bb1V z0yJl-f;dq3T)F2=9yJLf|O{ISkINHZP|8h+gwWE==$&E_-4ks9{dx`8>3%+QF|rQG8SG9DMu% zkYNg%3vs1)g(UA}Le3mCtcoyq;l%i)yQjo4L z$m!thKC?9Y6U|;a&GD?!>OgenqKxr@3HZA-S-?ATO!7!k!MCM$GSO9UVxBi5pe6W@ zjOX^PZ&^r#MD*jo_1zdd{m}EWh|$-T91|;cXV}}YZfoZ)#6NA>T;wq;=f?_Zj(z&Q z#&nD+*VwBw&*ArX5~L_Ekx{8rjjfYGNA+E?H-L%ecf`C?2M-hu$?~ccW&q6EBO}_m z73Y0uF?0yy-~Biy0-As8VtoE;6CWy2y;%6KUVU(!10h|u37 z=3ThNDibM9K81U#oaQ&I;{Wx-R6H*yvx@Vkoy={-iXe!RH0KIYyUo}Ap|gWT%H-La znWyWXyV=i_z1Zou=@pSx{wsi1I25ypnd5p(oJvU$9nvaBaW#4u3&BzX%1)$=Fc0Dp zNn~jyMON$-0=`XI2tnE#4410*nS8O=RG)teEAvT~BGKqqhHb>hl?^W&D(>m1S@g7@ zQofb6x7IZDikvocWM^hZDRQc_+n~!OkJCw)*Itfb(Sf(g2VgvR5l;R{AI2X5Qc8Yt zg=%&R+7Qk%ihu8#u;(tZzHC0Rd+|X3=){L2{=@C32%28Ou8Kp9t4bu7x*E8Xl*ySX zOHPNLqb`><0?F3V3ja^XIWzjH7P5-{td*uhRM^XUDi6+(RKgA~vv|>LXEwm&$75e^ ze-_)giem2GwlL3qpGo^QCh?&{PH)W&4teUb4}{---?J6OVaN2^8=ywc&VEAbyR^cbrN+fS!-)c zJ!UM5$}Ush^6Hg!434%&gx|7C0qw0)<{T)x4f4LZx7gJ|IjNIEXfMfEFb9+6-v5{i z?+7%Yem>#zoR@vo&}n-xtkgp>=v=;{)E>hqzr~<43}N+m(|D<_vf}0XR)I@0Nu2E4 zjrH_~^1QOG$5pgvWBiZT*Scq!4Lfi6hRWD}t@YN%Wjb&2mb`h>vS`-W0@_it4uraF%xBJJZu6p|i79axV9l zvleC?Q!oFJ>@OJRJgN6SJU;-P(s}yDgHpB17_b^;KwlY}S{x&muHb}1r!GZmSk$Q` z>TypaA6Ii90y=(&3nLCvaj8shHJ3i>`>Iu^xS!cRwk&Ni)<>n-f)i%0U3TS%u)0@W-s zTw)(AQ*r)I+xpHWD)(a$OGcnIyPS*@!^6;<=zxh{i@n$1;n(8#^%|~-M&O~$jWy## zegrZK@vjzg*ICiXir#*$dp!lmpSu;FgCCr!A(J@FEHP#o9yHCSvSS8_qoUzyxlP{8 z4}A5nAzyiTLi+{R%;mFGf_(x#r!WX;YC81oai0s{ZF8VE{~RXVZB&%J-vhySuT*5Z z0c{j;n>2*x%~WP9UzCInBI>SW51Uno4rx({Y(5e-J<462{K3zm;H)oKDb(_G?m7H3 z(yPUo2SQPNg0e|20Qq1Iiqr}eM@UJLI0*0Fvz0ah5?vH9_=$&rQj}ZeDgr@dtJF4n zWu~uvJq(zLzkvD%dUHd9dV~|cZph`$kuotFFUHMc#f#Wp&2GANa9m>Q64;TP)Aqbd zn}`p}W0tReiog=bDwC@!MG>Te;hJO0(nFocCziVM6;s7l#0FtQoHSE$P=rpQtOl*R zo01xRFCCc^*Q-e>)BQrhSy~I!{|+Hw%8hTQ^heq$qezXR7eShuGFCv0D$*)XI+Og4 zT)7K%0#5dX+Y1LGpl1wTB7O^HP#>5SE!6kGNedS(ZqT z`M+2%m~<&y-Zs8f^uF_sYz~ z!OqtLOK#uID(m>-DIP08~rPy=zvnFgy24JXJF zd8!VvSRUume8L@OIHv${Dt($^KitP;9j*-aoJ5msyLtDOk1p=%Q-0+Uv+J50cn@cB zkF{}L+!w)u2OCvFKSq&BxD%M#^CekWcXz~Di}+bJr88VF)l8o&$!=z8c+r|CrQV|T zkwtuExIUiS_5L#A+GJzIMU?wnCs&I5^)`OgIcNZ7^;+b&X_aL==ywpk#(Ar@0JUwW zDt!8~o(DclzHEvZ=5-eTZnN9NrZ232t8L<;YX7uX?(~h zRF{KRY84B$GV_1boz-t5@m>bUl!qT6JQD7}*!c3I6lGvC%jVxT)3Sr z(+Lw50`th$cckB+!a;@6cHYhOsEI=0b7t!xtY5F$6Vo;xs6TkdN2ES-u6McOmMj^P zz@u#3_&m9nQAJ9e8!3|7dkOpPSH*P)qQ$BrhjnBJzp6KazQ_0;(Jl>mGR+b54+lQy z<-~6oMB^i9WIycS^L0~dQuI7+ny&sSGURLOb?WtmE_8n(jPno_`ZQK5i4Ip%Jahgd zoTu`Xr8t%NBUurbNsa0s)?B1lxwyoN+@`G&>Ehts)j;Vuu?F!tH)=`8=^%&tS8*F~ z_-}L1yOlan4zkc?QW%xW@d=oOhbmB~vR|@M-d%8pGA|T-l;`9Cymy#VY14Qj`@;C@fND zNv>)yh)ZWfVyRAw9*+9d9(vwjlMVmEptI7Prid+Bn<4q7qFpgReNomFQ_XPWS`kkY z>45dpiQF?%Bn1Ce5^^`zU5y9yL{2JT6Qg8tF`XD|{#?6TP^Obh5U-8PfUVrzx``bd zi_iB@UCYdFT~XfMdO3bChE1L)e;X*)UDZv!@yj@S;CVg!SzRmoRI&(B@th~mYkvr{ zz~48qzk3YH0d!L%h$k`zy7|F+EqOEC!|U^lWMu8yoPWuZ=XVe1%Vu z#E?MynU8%zBxhu&Ytxu{>vV1rIeT>}; z3ue6tOZ99}mKZ|JV}>IRs=io`p4`x{3Fe2>v71$efuM*V>eS&MEmj0u9Z)2)`(|u`7)Z?j;3mT>Nw3NJk9(tA#);Dex1JQ`Vd7~J?SE>&K z^yKmt9)$9}v<8KP~6AZzvTl=94Tl zdL-jWWqAjIKCBwYl#*#w=7!VLJ>PzN%`J07mx#4{N@rAjte`QbZOwI}$ zCBjs*zduMlG5dPXUR{?XBomc31I+x*O3}7vk?Y}2AyE{6!V>%yTt-qy2|VBTo+Aqm z#h$v%@^`=7Z!b|r8xv;>Pv%+8_>mQyXosv{Y4dWvkPD+F<2%D;bBJ zMW1h7m503N-YIUZE{`9L&Plo^!+pkVjBWu+$WpGXF-9%~Xx4vQe*Z+s-pdY4K-f@G znycZ&+u{4oo+bS+38Ni-iw=di-Rjo8Wiuh{k`x^+fktIK)jHguP8l)$%_9TcwF$^q zrpam73hHT@GXqvA-vwq+J+tQ@8jARhOWMV7t~4EQNlIZFgUu=*UNz>%>uG6#U*;uQYd z^r|J*5y8v%{ABT9F{d+~I-q(JaGr7ldPL;bmwx$9WkPk^$3NZX)l0c~%6vkm)X3de zK2p7mdftn?9yXch!MxtH@6@UuOvhw>1mzMFkxMHY{$PAvZ0pS7HW#XPxGi+y%^Pa} z)})Ml?G-~(@5l?aG!gxZIhGOC4W}3@UC{y-%ANjhEr!?lF;N5;Os-S2;4z2GZLdDA z88NR-#irEG$1=jFjO1a>cs{>Jg3r0^BS?*z2@xKVs@ZEl+Hw~KJfp5oA!9+rK>}HC zE|K;=j`Z{^VPebDV;rgOB=+X$J!YcLk&cMASov9Jf~v03Y!KjE;T&uJppg}YmYOb} zzz#8n7i(});ibLxsJ#~vPh7%kyUqUTuQJ4WE(8=*v>Ee$o*upfqlG>vVylMn2B zci_UJqOd62@+>4p-pYJi=zU}r@r7OXtI`~8#3NPoa^h+;UpJv(c~raAD0nx}xL!0{ zFl+V&+m?uI(oBhZ>b0Fg3L1`1xbN--GtkIgqF%#X(jui>Xt<02x|JdPfFaY?^k=k> zEvIUq74UT0F46teYk!VvXR#}aou${h!+!}RM$cZ-ulV8h6nus`4`(P~q>#Hgl9`#P z`^C#g(bib3t%p%Geq$AJRNbYZfU+=yhg5yvNTV4W{g(y%GO_&%%?&y|g~L;+T^kGr5At3fT56sq4$lc_fF61`ea3%J zojSek_ASez;yFroP{!BE^IuJ2V@1yg#dAZ!_?#~b+h|8a*@YP*v*u6Cbd4U>NWWZ9 zaNvF?oB-z;PaIn;xsHLW(UP%!`j+lpgjbgWxvV4sPCBBMvRW(MCm$;1rNTFQWKt3W zCQEfG!=4edhKn>mh-f<8Z0$gu`IJ4*#`9+QdAM=PY+}*&QJLWG6v>}hbyv30IX8@y zZSM7YgaJKnvD+t8TDehD;r_t7&+H^P?bEcHL zI#ZaTFIQr;=CP874TMOawSGzE#3= zGD4Nf_fR2Q=&33Z#dx!jn49NL_qUIxpByHy4g&K|0i6<33PAO9DKpALgej zdUy`D$qFScqb_3CSNsN`LiO`@(0{oD0;7glo_6Op0fz>%Yg zJ*7pXE{kyek6sy?tQ=Ge+T?@+@~Gh=!vUc zPk!?)x)NWN&swItT$XIy9mA!pe3g8pJpJ)lv$%+4diR%t+-&P$kmN)%>GHBiEga*#jk3kA!+droIkvN!yYz*GNG^ST#4$fNO&e>xwyPO)x zttFyg5TG%eZR6l6J^_zAib;nJ9lm)U3Ko5Y*_b6#hshX1_(OUale-Y1SzL63T1VlV z_am(M!*g(RuR=M=5vU+KLwtK#no`_5swsq)GJD{9Gr+%9|1=qpEjyL{I5AP7{)BP68CR60?W0zK&sHW} z64)ka&H2%X1(`4uVk=xX5@jptcAFEnp+kgD+2sLU`rb)gK+O*Oe)K`H; z`DdvUJT8=;3PT_D`LV<^q_yQAsA&h04NGhzen96NQnk6UOlYM*v|R4H$j0}^5Z_3l z@rX0$;EKZ1J-!|Sou^)PFDh|h$!R;!o1Q~1l-KO-LaC1Yz6v{i^SR8!c}VY?@-R`- zm7GA5g1zCv8-Ea5F1YzD^w+z$q7M{;s03^guQ-`K-m=A8ak#Huar9=Q#veu@fLJIv z8iPn)<2St~ZBHFq@a<+ecrMfLyje4B)7o2O{sng_wrCH9Hn`VY*FTNsvG95P$7X|A zf|!QaDHzY=Y7E0nS%@fr1yV@2k1@#^x?>`G8TCCxA5@(8&R}XYbdYyu_wMqBc&o5C1@|Wr zKP)YXWU|<8_IN1K6{7w)tCy)dmMvJuiw4E&c_iei`Q%#C=knw-qJD)a0vtPDC53NC z`ED^JhBCrnV#94A3VXJ?o+A7;BW_4Iee| zc%fqJV=z-4QSFTvIsjZHv>P(`UfaFU3)#VjZh2a{Hv}C#thD z7>`=Sz@ABT>e}15L)#ns@Vmv#rnAKEyXeu}rdw3cgC%x=J6`28HyxGGRG$CyLdF0b=jE1fElY=mUqjus%IoQ78)3E&Rw4!i{_B zGigl)x?ZPab+{UNHU7J|0rjI&#g6o6*2ff0?gw-6J%YtQ7^r-+i4S(O>w|o$J7>LR z={LDI?Siz(e^X+UEayk%eU0yl{#2%@wU0ljY_#%jie*#~gr=jROjLdOPF=R`FpP-3A*5+ zy#1>QIPQ6WswSv|iF9Zu;Jydvwi7TTLa_(C2pI3dmt6$gkXOqX=#5FQGjqes(H;o;!25yAfEgcM+`5g_J0G1UmL z79NWBb4yd>3*@o#(I_yqZBD|!Xg8dMKM|oae)1ANxTgj@AY6bs;Yy8=_YW9+z)nV3 zr=U()4kJ0&BINrsSNHxLNDL3%ojDVV-Gd>&-6BPTV(YjOvfYD&+z9gppu9Ot2zl;#KQAG?L4#sHulYyqv>L(@ zSR}bNL$LouX;CwwE-XqBS|PUoQBb^<&=@8%wS$oT9(%BZ(B2;^Qc{lSK1#ta<%pIM zpLq>~wd9FtQ5hKg{-(tp^u0Wh3>12o7IX4MPc@*(q6tI~@4-O{L~aUD@Xho;*zz+( zbB0hbqY&|5CiX(aU#+2FkxXLQdnN&y#4n#h)!VxyriL2xC;p+(2Uo-__a>TM5sSkd zk_k^D2sP1mv8HYgo}>*3bzdg=|G-eSAp>+Mn1qq!uS1j=Nf42syfs)!{=UsHkd*`h z=DxR_B!8X#nUf?^3Ccv%jpXmL2e^@NYe2!Dx=8+})NU8a6guLa@UMd;QLvDEI{ZI& z5LH8Che_&Uhe>e=S?`kjpGpOX4k=YH-k8}t*}eE*t-4$9J74f3;gTWUp@Y|!N&l9J zJ1|rO-W5`q27i#D(9ji9A*hG`xD)%1#Sm4=Mkqw=8hG)Hlpc(`N=o!6QowAhq*+kX z!BtY(KhQeTHPRcHA)kLRlY!It0Hj#ZQu?oYP%`HYQssNH_6<@mOek3Dm{j8)oN!Dk z4NI4aGg6s9U@-ML=@}FmctNUo50xPY@YkhWkg8%q=Qfc6a`$r({`7VFD1dZWJe*?z z9{)SXR~G^~ePToD&d2}{|IF1vcwWQUNwWa%)dfS?@zr&*09r7hB!PSYg+C;BbM#<{ zDEvAkegF+j9ZoB!SRA)`2fUF9$<`WHhc_7d;C*k{9XXK;h_|iB=!c%q;POwh2h}%|Djm5 z1d!hAhG+$_Acfj)jERDXdUUf*?!xr%=)R0Rmx}Rv7d@CGRq3KL~)22=xZi zTYwnU8#xfL!dt)#nB8UX{#k#{cmPEmaRk5-=G@RIfaJY8{ZRlCn1IzdzvQ~*ToHDRd)EWwn=t^xerXFRF_m>@w#>RP1|i9z}{2^t(62TUYS4FDB9 z+W-Lk;R5T(IE?^VL}>jqJ_68#TbtO>U`zj>+6`G`a6t<|s3kl*o)^|%o@D-2)^IZKm2=70hL+=M5qaeQa=>X&Z z0Pv&YRNMb;B6o_|`~ci1b6wq!yXCzDe;fOocy;9C07!`3fvKke@_*C@8%Y2Gb%9fW zI@p}V+&{X9&jD1CpkgN%A(?$A_D)Hx$tX%Uoh~?4u=2bjl&iI`@eZ} zpL42P|2Qvo3xENmE!+jD{!y;(Y8PON{AVe6pkDfuWl&2hj{tw`=j9Q=2?dI5e+h}- zKQ67m1dza3f4}*sJdxi5YGL3}c;MfN1|k6WU|>uXAS|!%Ox8vLhQbyXQb6dzztR4; zH~fz_TdaDRpfJ?) zci0lDJ?1(mPzeKy>51QT9uCQ9eoSbJ z-C;f!2GZPPdI>#@Ej&Q)Ey{(FQv~NC=A0!_WfsJlzo9982DQd5Vm>0_1FqVu85Ghy>ajU`R+XqduQa{cqtA2LEI3D=^R-#`-7)2;21C zN#scd?jZgDyl|EMkM~4!fX`rbsRjSYUMK)I!_3Vn{wK2Li-GhoFjDzH!llcB4Tw-p zud5*7J53?N!90yXin_9||F`wcuPHyJEW{;VjJnFBW&thPd!g*I@LK|bVl4crvyP0;BtTNJReekTiO zn__4R+GG~GC^`RcN85dMW>& z2_U_eyl%LcQU&G?%0bG%TWPC7${cj4Q0z%c@%zrEHA!iPj0QLHL1pF{!$s@$m_Z3U(s8gW_US4ML#{*i^drC0-nd z3K4dFq>J+Yn;OKImI!z1vw)?x*a-f}y3;Zim&y{BCzp7Ch1IFzQ{}^&-!Xtn3Cj0B znmq&lBdr-oHKPJm;=^+)oqHvYpHqE@vF^2`(*6Sm(^^rjL6I@6sf_zl&~Ti z_40q_{YM~*EtTaxva2nX`3jWBq$aiDA8@Fs7ImGd7EJkl?gPklXbh*aKIe&ruMIB@JKDg11K_D9mA7*9#(Y>`zX+;e%i_)dmpJetqcW- z(C%_qp};mZEO=n|4hD|@G#r_`TMlqJF%z(kvXjAG06H9EV+7QdpEFQCfZl;XhQh+o z39Wr5qB<%I#uL%ML$-9rG1w4FMmEJ5Ck`cpFh#s41Jn(uGmSwfz)-xFaHfraq_wp% zMRG&QATlienHXebRuzFtgOc%^GPA>m5IjJgXA(0=^gjk6fyqXg<)EC*MwkWQp`_4j zf&NiuLt^L;l3Ic{lBF8wJi9Ue}?qnJ#SXLy7YFIgnxutce9W{t*Y}MV^Kx9L#`W|VKKjV z8k7vb&U%hz9^nrwzB=y(7Sey5@pX?S?0!gJ_vSZ?5b7Uf=!FYj-6{%e4dNddU)?YU ztKU5Zo&}c@f_B_TOf*DRt`j@yZ#7PD_|9cR+#_P z>!JeIznuW-BkMyXXlsu&<@uon*~Cdm!@&u`3~M7`Cj$GGu#)~MQ{eOxR(i-Yz2DB2 zq_j<;G|6Cm+UQiGcz3K#;U@ezJNIIbQbq8qYHVi?20We8x^G5SbgSR@(0^CeDrTv~RJ$5s=+<2sW!}tHtqbf|y@(kHW&0_N#|r& zUGvv2=!L$Tf*v1ADp1x5o}%2eny+>~1k0AQ(!&dZEz4P%;pM zs9+@r;U+!msB)jmQDQ{AVdQ8cPGJNsq%C@B31^CBhd4HgjZ|=CO>vJsPx{599NK8q zhuRu%7mVKYNwPBLcL@A__-!vGr*9r)Ab0(< zd`K-+$tXIsCsgT5^9nbX30K>WDHM^GF{JjFRRUtx?1)y&(JWtI;HwKfHa{)epbs)1 zK_Wp_+bd@yJAjERZ&xfn%kgd%hY5i?FU`o8shCURcdm!Ho z@>Ln3pIe~LN#uTc<%}5Wcs<@H@&FHX%^I;dFp5=_J4*MXWs0N5)WCy5%`vOfp)_;1 zIm=$&=x9Of3CXcC5fjqXP@@WJ{(AhTXHwQqQI#2u3!;urWwArp4qXm#TeeQ!C!n=} zo4oeObJBp@;7kzqVEv$Rg{eS&tgz)X3O=4FAV4vY?+CbKi|xQLpKl6W-p{8g+eGcY zu5q&TdHr)g;y_UN@z1xQXVfp9)^2(cuij4_(=K1H`}+(W$@rXH?)N*7HXrso_qTca zU6rFA&Zh*Pz@3?XUTd*3Qp6tYX9xX6IhlGwAz7bsC9vm%xBlVARmNw&us*i=%`+44 z;WFImllEqQw*m2e%}9&fR&1P6D-&>ObLIu#DXA3Pki|Wco z#CVb?k6iq&-^ce_?68oQbpRXA`Zk)EwICwZ)5T-xwT3$PFJryn$_vvN-3FJ4+=g%a(E2t!& z;8K@_;vP!E9Z~psptpg95h|##aUv{&P~m$&!<9I~jSC@dqexDmEKrR9uqxvgW=2_< zo$5%wK^zJtGkR8wDd}Ff^Wg{~y$*H3d%6R7gV}ymfkFzHFvPSvE^kjhA`Mu_=S<}V zVdD(EYrqX&_)N}UAA3FZ?DnOR^{oizn=*ocAxut+kB&k510wmL1CP(aeCxpLvt+zf zi-%4)woX}dyoNYTw_!24@rmn6*=415zJuFd4(a-d&-@X% zJeprljhFL!xpx_KgFX6Xv3&W>sT8Nt@%69$^-AzY*_>-FS6$tM{% zP0jo{u%$a!6~oao^X?bP__4X@N$8?HSG=9iQ1$EA>(kB!L>9x{k(nVp*?6!To zcjnCY>%f*VH-olXy>iFLwE_9r*zz_)ciZVV%;Jxetge|lz^!SZWqg@C5wg6HHV%u= zTaatc$L*v&hB@8vX<~yntHAsQJ5Rskf z2)ADuAGeD4q9m6XZ690I-wiJ!n2mr51-!h%2=}{V{r6@Y#8t+}L$-Tb`Bla_*oXF( zev47*H*&q-7UOf6hilb_)IeVo$eBt!*bo{B*-`8=Vm>sq_r&mfjJ}V3=<7p>!oROu z_8l@hJ~rTjr;L(+c)mGhynVzDxnTVF0Bhue5$*9vfBE`fqri~UY2y0lH;kH(9dr86 ze>&!Sxhp>*ukC%sTfdsD$z$jweehX&iESIiLt!!3J^2y_olq!-WAhATemA!Gn29h5MqC+0M4kbUP>36@&<5Z zuFTN)6`F#Qz>-NKKJJNrT0$E-XB$_WeHLfs16mHQY1{jGdRvkSi`*BM8IzHcX`X#| z)ePq}cH?Pjxs9^O0S%?wHqvNMG|m`gHPfn@roTODn~h0O9;j_}NN{Rn+Pdc7IlQ`B zO4XcCVhzjUX zh~?aax#ouP_-KC%FTp3t;@e7b>j0>@Mo4G#YxVG#qtI(h&B273>uoBho#$>n4iYGy z*sP1!qn#~!V-i~4A#)-E0`GV2r}rCo<0Ye|YL_A|8IYyhIbNDWig~h0N9xT2~(diO{=`>DxONrZBa&7oF z37xTm8f-S!@QrcHR^~9*1kSJ1X{=t%Z09jspLPX_#_u=_HSA84pK7rPb8Me~DSV4( z2TIcHPNnO8`qk0qRS6jjd0SZFhuT|z!!Z>(g>yw=`k45o7c&AEkk^jcNL!U_mk|q! z6S6$ZS}Rv-HNd$@10xvdKlUiZ)hrHsW}$mQwH^;AoGNdAvV%BhNJxG9h0f+ zq~hr820=7W*Ny8t==oS&>n4YA>dr(EcBWobpy7|zi67)*9i&e5Ey;V4%`O(1yx*9Q zu^T-x;`4BlQzcn4GY#pEudh~1Q9k8R`s1bjc+=Ws*>}J%sY`3qRJJ7_pLS7@50^fT zoBD1Xs-l|HDM(34$;fbgb=$H^c!Yw(+xfd>QsCPKW35Ten7F<9r0bv^=CZSRkWT}f zHJ3#}_24>mqdddsVkW3SD(GWFj$}>r3$X%G17`wJfe0jkZa1vB+5UZ@UU-12zW+w63u>`BWhfW^%U z4J9nxp1&gSm6z|*>mH95K|=HHG(9?jaWD%n^D_V|392MicPW_E;W!46Z=3{3m-ugT z>kDf8e^Op-k^M-k+d}DbRF{dCrc#(Nlg+$w8hJc{Iyp&7VjKDma||S^GgB`+-$7;e zj+$7W>r;mkW`cco_d)T+;$n0}lg8K4;ESjmoXv*rxz*Ff{7tE?z%O+$e$W!)%^|ue zUXhF}#}j3~EMH^aAj>JqPiG09h?AzUu!rq$H@0g|P4%SjlopifixF|#)tO)PE>j}EoOaA14!n!Tpvz_BC zK#Ixw1u8Q^h20-EnThbNT0F-E%c&L7=_DP(SoTxPAhFGMZgYlh^MpH|WA=6SWHJ9X z-yg1E=F%~)>ii;`aT|AErntM>mcg&Bxebcvr4&ng@$ED3s>LKg%wg`GXtGb1$lKa< zbcbZPDn68%W(6W1UZ>6pW?2`Uiu1s&qf;#b_w4g?85eW=&YdHbE}h1@2h?0Aw_h;%_VC@2ISJirLQRP#4mHN zz!?}mHZ&12*i@(n0{N*X0cpGn7W>Pi5nf$4Zbu@32Eh z%+1u;v#1in&sS0Ver{Y_oFz*Ohx`asj2B9n(UFKZqgd*o9X&41 z2#!ff-MUX|SlejK88Xt%{8>@h>^_9c$iKGl9Jxnx)j;Z3<8IcTYlJv=Zo- zQn_eDZK2nWaDu_%v$tzTmHz!jHGYc3l!@xoe3O<71vwr)tgR8gJLrpp9I99A1`+QL4pW zMwj)Ws2Fh$>Z$ONjK;`ZjR0>XPRdlpg-d!6GqDpslB;eIMOW;gOe*Ygi&m z%hx}Ke#uaTo@HHBsY$BevQi9-@o8R5sVs*1Pn63*FrK%ZR7HIw_dIW*B9WR}TU8T2 z=*Z>r;~er3?@1}67G-XW)9w{p9d-VgZ@jhl7c)8{c~$FY1RU-bg0k1T%jsvcJKc=T znL)zA5;M&q2gg6IE~nDIJN1;<_rkwIwO2LCE?6FVZbtZ;z((P@;ruJTQHG;kZMHd^ zZfu*n{8MIC9~xseQ>+BR0mHChk;oyBU64KB(zX2cK3izuU6*E2Y9uBjP(RW`(H=JO zqZ}pO?3H{BJ=OPxjqE12Ex%zK(wW-qZ_}$OTUnLL&?SRWfNlR5#q~^}9dkZzxnM=v z89P%(xADW2v@KJ2!T;6G_7f~DZ0J!k&Sv=HRP*eFQjlA2%e3&sEJmg)QaeXB0rDV_qcYC( z_OOu{)?|AP1+bO$0LoG(UuGnMPP>CwcNcnUS_}?n@8a|X+10Xf-cIhfdF;Cg)OW?! z;H}Bjh&pkS%04bZsSnQT38B*>yYe7&%`HyVYtiMBj52t{M6!kgYb=zQnf$)e^40Y0 zaLzmWivv&R{M{@rw7AZ1I&pXMXFT16+=>^f8SEgW!@J0db$R?t$ChE$Nkb6O8b{`? zp5rj}S|l#FtR|P0*R7KHn@dPw^>QVf$FMRcla`ren9vPwpvhW$un1WeLIo&7ob zQiCIGCb-MXO$)t7cU)5Rl_t5t^XfNUC zTR#ww=W(6%lpEroS3R>J7O35>v;pVR7S~}ZE5fjhB3UO+%V7d(;-)G$C-U6fP}bt! zkb12q;EAc&g++qGvQDnWn+?7 zo=l|tl+)jvC=c3GIk*s?-))le$iqv@|Db`=m@e`@@8S()&nk4zWu1tE221$l#dqv90CfPFNR(A z8ji5j+?VA}05pvH(D(2UDT3JNQ`o@z|w>B;nDgGFUUo~FX?#7&%@_8E>y@l)Zau+EyA z*FEn?mfnyF=K3(4wQMo*8Os0i`HByk5DlIFs7b3*&Iwg{pvJ5DV4M}9tXRTack7*| ziw@_@k#hvy&<~Bs$2ppDeIFckE1|gIg(rMnu}sIpii^p`b3nwHIL&Y*S=->?di4G^ zJYYd_AhnZA9L3&NsAVAMLX>aQ$N*>J?uhIPpY127mGD>H%I0lU-L@ZfK9pYcqID@# z;A&VH3KGVc;k-T^)2fK>RleHjey#pGN}>kVru!uoTIEWp2geELEbw{+f$bFpyfe#RVaSj?Wz=nMfaVA7gyP^iZXcaaNjVkgnZ^Gw}!Xhgoo6X?LNB)Gv&$VOMq(qe=V(5DK#DLkW~ zxN;eAiX@O1)c1-PE8I}RO=PMK33%4t#Wr_#P3hYYe)+ZfM=+`KEJNtK&m~mxJlJ}C zU-A^~dLx<`_A0~#@pY(uxML%r7l<#-m$Xt``-AMos4`*@5F#%aHKk69nn@&c^-<+f zcLLtP=5~utw6PV({fd1iK^}nneN$$fz4bkL05#ny6UbQpY>_y=FDqG85oS*^;U}Y% zM-{0~Wsl+MCj=sGM+_SmRh_F+gb1DIhZ2TS zp3WaCZv$Z7R%v6dAt6-fz-^(dt6FwPExIQXT+Z4TyPOqF$1)D~m)XlTT&tv9lnE^c z(v660&w%oxOQtImx~McS_76eEsnzhS6fd+|g=`+$nT}K8 z`xL*_RAY$Kba+MIz%KowZXlG39=(Gnd9Fig>k1?~Cq6>6cYMv_wn4MaC`1LGA1`)3=py2*b+X4o=Yx?>Hvq^)iZo3VxiX#(dYOKg7jR32qq~c?*s3Irr6itV4e_iY5ck zf%D`?pAdH!iSsFI8RL0HDA)uAY$7|2$mG}WL9NCbbSkFWEXoc~4kpaWnqE>pL;p@D z%|0}7DlcC@-vNj)f+~I9x8tgot8EY(N<<^|{+E8~b&G$t z)QC7hcHFBRnoD~Q_vxkF;H*y-g}*a3`t#SG$Z^(uJSPHK_0LNgW2N39L0MiiR_{*_ z&Vo9*pmn}HLoqRQH8zgs3!+(>GAi)gitc`4QjaC_)~q~FOv<4qX=fpw3@AWX%E7f7 zKa8`tA^*w`|0>E|1P4}76fXsx+$a(OWC8NjD1Lh~QjJS{bSaKY6sJiICUSYcHF}<) zLM_-n4_6NI{x-Ucuq-A&Bc$P`VAUOzlnW9iqg7TK$wFx7>!QSE)|T#zXrs`10qN!z z?j&&chGKGYj{^-j&q2YfvH<`Giy8K+GuH|khPc2SO@%(WjAyRSS8S^iip^BMML8yH zyXI#rR29f{u9w(3(e5y(1FvK#1-rN7v@L~jvhZLHw1vITS6k%mpf}m^3o@Oa=!0Z& z#9)8CfSnDsro0>5JuB#m#_kZg!_lEM9jZ(hR;`2nq4LBK-wV?r%b~={X+VS5mjoM5 z2XLMr62a-FjkGLYsH|}qu!qSTb<2T4V_!3!i_U{65tJe!zuki^%3aDS%j>A(9#VM3 zerlMHK8M)R#ZtYCKdNT1$;#HQZwDI59`!P!6Ax?$a-IyDD&ZAm=UkF+I8dV<$^>$y z_7RrP3bruqUv6A`qh|0eN228QHVRZO$WSSiK8LDJ!tU@iD1vFQ5d3T%_Qc&=XB#^Y z?I|?#+dd0Ileo#5t-Gj3lY(1VppAh=$OjO)o8a?7U>F=OqVG7kV&YBA8U~2CpsLxH zFZzWTovdx@^bGZ=*3!vQ3E0vwK+tx)sfWZeH0Mniql&%6MMRGU9ueu`P9;&}CVOm+ zOR2s&d?T)!C3(4D-5p%ug5wBwH%|!#&ofT*Mtm58Vk2&& zSiuA#XF%$a5q==R79>MEy^mzaJw5AgYb zFuPJxTI4;Hex~HIKS28oF3=XSx=b8rb`Cc{;RrE}-5lR%pbw`{OgA2IuxKNz%NcjJ z#XdPpW0DyKTc@9mCuGqnUUcAsRPmk@LH6=vBa#8 zo-PB2d>)kEo;ugjbc`0z)eOlw`kr~Z#0GWX*i`gH;`3l?i{9S4xisQie-gmu#;y*! zL;eysH43$H7A$l-wR?xF%VpVsd*=EmRXjpkEnGx~&RZ|F>-2`{5jH^+w#*{>aUls2do*ssHj7pIq>Zd%ZPiY7NS zSV-gW$-EPQ5>HgiMNV1#!YG_!=}qX+dbcJdg}Q1LP3idoI=J8P1=QQAP3#+&;TL25 z<8mx~8o%I-Fgsi+p}4;aow2n{yIrMTcKNcF?@b}ULoIDPrKkXb?v@rc;IQAXq;QeD z)RmWvN-HqswE7>jyBrZJq9Zl~ZNfKJ53@aK%aK8^&wc`0CAk+devt zLD2>y$%9~nLu|r8BZJ$`ABG&~$tcT%;_`H}1JO5ucP);YHs#If+?x{oTQoO@yHA0) z)$U(Ebg;3)N*zWn=x%8Icx#d5UA~Ov&BB&Q)HaaWg^I zfjmrzu|}m;)ub{6RMACG0LrFt)kTKiR-mlNwf2-cftxYeA)S+o&LJZ9YGux+uk(cMhz9# zcyf~X!dPwgz1rHkSfyL#&)#UR0A6-y2@)x8U70&Zeryn>q-H!WIUT(}(st*3{t7Ow zvQ~&A=K1LC2_I0AF_}lybl+YyI-f?enez>OsUalTKE?3r0z{^ZHj`@vUTo&V4D!y5}vQM68y$-Fk zWqCR}`N_^RX0O+;uk3qX*Iiey(706bmd-NiV#$E8oi*f>Uxk~@km_kurmJ(r9at<- z%Lt1)K^}!(5o%v!-R!*yZrM~yw<;?Z=*@kNR7x}uu3Ae|TS|{n2I#K^@}CQe=|aX? zEOfqev?1RrKk0r5&H9$V<{O0>W>^(2UH4gSJ}Ml;QK7dKFKjO&fC z(&hwqS@_PBf~*dl$hCS+1wNU|w&Kf?Wj_lvXAs>;^Gld`Es>TEj8$UeLlY$&a#dN? zO;x$ZmZyqv1S)9038>r_7ijto#os5R-%2>m3n3mz?Uh+AqQmOKIy$RJztT@oF?zSW zfd|l?DP!wq2)QPR?MAYkmeqDSJTAzgh~}SCPatUPvFScP@MJ)HC1K9WSzqLUrtg?l zgaL9ce)gLd1SDv6k`4AWAFg3t0S4+jcvU$)`aqgcqkaoZF6z3_)0`KH~u@et2`v`I^?)i zk=@YJxxl&ySnFi3t5XCnG78>bDz^Th&l0!P$vQ zH9`a=_@boAz=j1|4_a+thKZcrHB3d;bG~?y1mb*a#1k8oH;4R8ypC(=(=rvwr39eKjg{0=k*+|)6#(jN->Zm66trK@& zeTbo3%|CPg3X<0;t?MnH!gh^YU@I~=ef1`rBDp(nwt<;N74DAk!cUT*jDm+$e?LQf z8#RW^Y*yRD&^zO0Yn1hhyOM)qlDMIZ{b3&O!rGZquSD(jZlcVF!(4t_OhO#(r{@m zyw)DQuxJgIW5)0!J)6Z7rVTAU{s9nihX=>|KH*)Hm1g}Bg4k90;tL=i+?i+u)u+#0 zVMIuYiXYedg|>@HlQfIZv#EBFCSK$ciU(>~c8CmRaGJhk98uLY8O1u_15Pgaogr8i z^_>+ZSMGC=Fy}yCXg5OcLIz-6f+vSt`6h5ncajOjSHe0Qy-~(^Z~j#7S!5Gva^_0G z%A5uNB8bqNlykdpfNXr@dP&qWzp8^Q)jQuk7BkFWKwp65TIOMOt6BA^rLZcS+7XG40Yd?5%8Gx7xTlZWM(TB z$iuCz7@{sXH0~q1E=0x+_>lJO^Js4`lol4?Jqv~c7HeoZ6rR|uRJ-gH6TB9>>M!@p zpZmFz@7@tubN3Sp;l%g*v{QV_nZz^6ZVP%Zgl{#8ZzeGrS+?`qo+WtsgXnx^ravR_ zDt?%f^-nF^X;)$NnskM# ze6t8E>OzqI7Dv=u$g>!`_Y^Xsw!8~&yZNnX2~Vd7?nWa@!cE;Lsw%G;Q-okN$1JEm zIsIOlbVHBm?8b@ipKrXl@zSx$c$7OM^JAc7(wwv(1%DL}sdUMjPl#AL_pcwh9FgSh8S78&t z=8exuj&tr8(wc?{d)X13tk6A4bymLsTAQM)c&o6in(z0pfcm{kaOIu-J*m(N$zE;w zR6q7_Rt-c*2Yy^dwXwbcjlAEwS?H10_vo$6FNU^V%TyQBJiK`3fK`nVp$L7%azTgj zykz9lP9E;1fg%Txh-8xS_MDn`iu2 zy0oVtkCTu~XGgVAxeO`swY43Z2$(GNuVHIXpp_SV-dyH$z)l(b0KJ7xQqIvLdGZdh zR#u#)HTg~fV`Vg2XfBk3EJk(nT8XHTEsl05GC5)+$Zlf2NSZT_d0#L4I~>w(=}Ib0 z`WJ!a+7|YypEeAkZ!R#oo1U_>x|>f`O$s!Gu~QYnMII){y{|B5e_FG=qDJ!gz>KO^isQumyCPWb(J&R?Cx~QF_PEp1<*)JI@ zZhvw1XQ<@1=Xb2+cfRFri8)@uV$e6{g56Z7F*ihURHvRdvG4~$ZV{Q-#pzt`;XX)C zO%J|9z8tq8mwm~RvRu2;x)YQb5q@@|Aj`lE#U5wc!T1?7+*6vz?$dn8mYg<0)4qk` z>ps=J7$*ItXDBs51a#v+8e-Zagc_U7|{rt`xkfoi-#|%=EB1uXPa{0)Z?q@iSDJUXm z7hLwu5VL|_nEPdDG zL-s^78TnqL}3iM{a0gvkf>7Xvb*SbIw(2v1+%u5?}#w&*caWIi%_xi>gs!;a~ zPI$cO^bTWM5^gwkW(~~$1sPIJ{ipQn- zX~1fYhxc>}64uCq-CCtO!blp4c~Zx>B3(W=yY>H|M)_HRvoWFZiibV_5rUg;^#2CZAk-?MDIb&aSYFBLM<8I} zassI7=Lya-BaZ%$OC0Dyt~`YX`L7E6O;*+$6s#cquLUgE^h zD$ZhjHNl~wp>aP2YK4zO*Ye#MeT&yNaQ0k%MKiV-6X1r_a6~S9@g=5oOS{~1$BS|X zqvJj&RD8uI*ET>+G8>$c)6n{@?Y4W4&bY1qSmNeWJNeN>!V$|12^3H zv8>+uP!^RVAJe$`(fUz_!G7vzd$IFc@ajo0NTrqaius1Zb5fSl-&2INT-x@vBvtSm z`O51RS@oC(i~KIuMw}#xQ!2mk4#&fQL5`g#zMsU2t$34&3Q>I;XL61vW6@?{9R3`Gp|O{~pf-~AtR4mV z=4l=CN*3g1D=~%Ljs4pRJ#?b{R5>iD=@NZiL-(l5>gAKgmnQac-ioC|7^c~!L@`H9 z4OAf1?{rFCt~{>~1<|&H6XcXr3onK{gH1qpCUyFO%qRHfjWp-Iw8sDoqj1VXpt=rb z@`q&Jq`AV}CIphvy`pGtxMuQj%l4PHn2O4*onB8G3YmuRml~>(U*t9hEas&1yXEQ zoF(xjX13=!n2GIr@2Ar=$%%o{^xZMe<2=N;+xi`T)zLt<`N<^SIJ-pXH+%D&eo!A8 zX5jLz#*1XqRu`xG)o`6LVLQ}YHA(@@&hP=u zmfSrA&j^e(WYl>R$ArDO)L+_I4)l@>;;kxW-J5RO^>1~CpQxz^(Ew_NyARDX0 zPQS>U@n~J>O=-A)0iR|4j-)B0-0MIGhfkb*ROn{jlD1I5pI@3og4%8TUk#_?WJRrC z`fV6E$eiHu_shune+KUI#oyg3=7B0eIHuyLsti2ZQ42a)E^MM+qmG9=wQ{=^FxS`4 zg|d=pIsh)!NSir+bt@z?^f@jiKPC)&@Y+cc7mC?;GEI>3PAXG{6`j>7qB>)qq>R#5yP%w-cV z;LLawO2KC7Qprvm1XcLbsZ-JKyrK?i!kNh7#}VEx=ZyidnE$zaP**ug3ym9ES%EUS zlEnOJ(dLnuE^O+zq$ax}^7ofwhno8(uvgMebU92@w;T&Ps&hZ;nQk-@KCT0%owN2y zJFxH2>?2lwQh!v@iCKkD0fNrUv%D&l)>?>SS466*t2{qScri;AY&#ghzq0jO4rZkJ zal{+8=t7hkN~kA7@-8^#ZCbq!93s9s6JgsrTJS3Cn8;iHIsACbiX-)ix>bNMmvUa) zM|l11rU;4jgUAL)UgdyV#NgvvRBFt= zWl9mcbd&0z=N?!0A3fth=#oB-RFYhGKabd(TB-qP*TgvV%2Jvr$4`h3?BbRZ1gVR+ zhJUG*?zAxx^zd;Nf=2AD)zihRc7yYop4)R+8^oO_&=_y3_sh}B@0zFYSz{*plHJ9Tu^q_)Q+RNh(O9eCsgwI=o`732p`W(mO5W<1aI6^mTqnTr z=e&g;#dbdF)`D2vK4l9(Vv*KZOMQeIf?qht@-m0odJ$oyy;Lfg)(l7rQd~70t;g5^ z1B$RKw`<<7i=Jjg88wJwR1KXR9m=Cf>f0H94+i=@wIlo(Kvo|hINR9JNZl*F(=yIJ z;-IVXl4kRnCjPu9CSmpmLT}C{Fv!DXw5n`cq zejmA`te)1f(A9(=LtxEX?ex)4;;VGIQhIf~M>p(!#(`#m++v4F6AHALggN4LyY4M>ndoW3Y#VKyCq#@dxUZV zUqeu0g3(7ZxcSCjpoEm3X!MAuF*d<3sb0MRwH(^J`$A{8u&6fP7c`J`ilgQKZL;Iq zyo!ztR$9`tL8KfDd)`tiQh)FO)xLOz_%)U@Ld>ffyhxkGHayaw>+dJlPfoJ#K4Nv$ zEr*2CZMCGLqNZ$qMp>sUsu-s8Q*r!y;$eGy^j$witdvKZU%l|7v}rJ}N8@WNzq$)L zF7(d~Iu4DUN6^_u!A&5`AaOa|#HX~Ir1fGdq}HNH2y~I*ndfr1AslP0d~TJZcQ0x2 z3Z6>0mo~okEM)6fjI$~3>bW(P8%2zm`iKjc{Qk{zXm_utiIih$iaR@z^m|@s6!l(j znmfU!D8q<~GSDnV2OUeolBcA%$J;nJ$D<$1yhZpIEWVN}8E@Z!f}8?TaVIMk!y^wq zV;0&}L1xXweFJVb>V}(VTP?F&fwCjOCT3iIyC1qtNoz%c#ZS)sLOkFwoIgj9~Aq%u_-JXt|%Xu#rlaT zkvQe>7w~k)sT%*W;;ME*r7zXsxw*7ssr_>r{(bg_CVlL=&V3l%HcQDY(rf|6*kSsS z!YI1hC?{;sKHt98RY4?l4vE9C7i(>~Z*KX!>;{X%HHE)O;=M$sPlH7|iMhc^^MSWj z(gE+d=jlhQc!Q!!fQR;)7=fWt#oKuSgj_hIcG`_9s$`j;I6*Ms9F%>d@f4Ai+P5H&c+u?N-Bx^mVc+V4%iszNRGO4u(RPU^a>v}Nw&kMbmc5n!KB>9)WrKzM$7I) z!sqE7Eh1r1UbXm0GRiU2>Ceoid=>8*(q%#V{`YExR}En@SXT~5ud&YwE=%OEKQbGc zF&1Cr{gmA^wfJbj!6Sz7m8*`U=Jn?5}FDe;=fdR zYyU`Q9R$RH(f;kH2lG;cAgW~hJ;M8ffH;46!rt=)|GI~##XQ1UgMsKUT7S_S1w-J^ zvL4|v_we7V1^d9i?H=A;@d!T(20r-%r?}@2cb!^nj|BkS|C0T!bH_am?Sr}xoHeM)NO+AHN0?K{0?uUjv_j$wDAXDE$L|P=XCH z_Olwq-xmidkpPb{|oeK`c&A1`16+Qs6kkpbpT zX7{t#AwGc2s(v8izn5_z>c4-`|3h>rHu{_B@4Wk6WW?{O51MKl?F0aT^Iwo)|I0#x zntw$8p|)`}xA0=Mc6YG0Wudk8+a+|Io%A>E%P25fXb@;=g-c!=lMO_GE0szvy z|0^t05HiOANcONk_vjBJc4H%e#L&$0;IarH>EDopdkD8R7%37+{AW!cXdo4q7V2nLhHK=SG@uu=>JZ1&}znjM@T14Q}*ri4&Sg+X;0e1gPmC*)V) zkMHj*c3jUrjnHp(?&T%l0Aaz>Zy`3c^rC@dG;*cOgsfO+G9TG0H4;J0x= zk%tu+i-W8UdMfxR4)WFT+wcEIIw5uz)?<)3TDW^Ux!OI($?w#nxDR`CTlZC1A^^a| z=YQiwCky;89ug z5n~q?cn1xe^8b)1Py4hGL%!lklmP(3ztT=`0t@^p0Z9J02#F1~N@O$ufST@qOF`cj z7MLLMKY>koZy%U0a-{Pq0AR%m^*?D%`wa{HLInFE>3-YzPzhv$f}yQQ0089w;}U*$ z?7#hKVQyvN_II)Q;|wx#i&tC_O%+)F{dRtI#)$$pm@);M;{Q0~O}Ig{1Z2iG7i1#$ z?{DTu5+7Y`a7jKk*>95j3c>lm6$0^3lwtx7#c(YDQTE}*J^xuMiu>pubGT6}hVZU~ zhD==j%kLVNV6kK%>z`zJSogSO$hsR_V}s*runB)F@sMZ`B_JcHAy7pRY;ZsaHp%~i zDu98+#AV+9YU5z?Z@>3DejYL*2Z9OR^9tMwhAjJEx%%rKa+(h&NrB|T?;7wp2BZqo zc#&GJ{L9|i)xzD~#?t#S+W%rxkpfY)Y6Tk{sE&hw{~{p7du{(h!FmTldB66Eg6`&G z|GP8&jrC9*tkI;ue}SZps4OIO|8igJ7Q{*KAm!^f{)4-Zdwa2qATv#V!2j>c&O?D$ z(|`nE%7$q5Ff{NV89-)Y|KByPy2toI@Q9&{N`(AhCq5`{AB-CN7GkFXWH#jA znaDx(NcL*+Kbk#MzsztrO)$jJw~*fYZyH=u9I%u%&Y$ePPaM(vEHuVJ&JKb2Cjyf6 zcz=Zv6gAFcsexp#yOWiby@k4oslCPj2IGUW@4elp?jT&$A#cE-{fo;q9atp`$oywf z9z2+t1+ku!3ETwv`v>x1LI2K8)jEU;kP-kO`il|d6;b!8j|*nX214FR^H0%#kWN## zx$_AU))El2|4xPHw&0i9kd4w`tJ9bbk*?|jp2-GM{tLOUB1Ab5eO6un5u}&{3C-Vv z9`yFVhx>ZsfJ-}Z2>!cb0{4ZmB~5Li50WhskZ}Bat4VtOk1PMDZ@Xvy|LVF9u&R!x zeK{ydRp0{mUZiT2dyZiDw+qGs1`!l%V!;9$1&m;n&sflW`4f#T8rP^%Y*+xn7<&Or zA_^*M&}c$p%V$Nw-uY*C@7a46zTfBZ@j1Ki%+Aiv&d$!RchQg1-`@_|Ap3YXe{De~ zq$HH;zn;n)57Td}4X0z%ug(KX*V0xM zCIH*Hr-uijhv{^4psi*?JBEQIev{mq!l@E)1ZYHeHqVn;9&8rGz_K&yxq9H313@s{ zlOVWs7i`2WUqhIhmJZgc?l**S9KIPeGyW$Q`B6=Mmqnawm%X7-Dg$!@nsrGPBew z107pb4;|Z#mEPJHvNZ8DTT3w;BAr-Cu5Xj|)_|JxSa(r2)~N_@@B;!g5jO&;FF+es z{{(V-!)PRd(gce`rfdhPkJ6e(Wa4&6I;bN=JGBO@b5~(wjaK}}+eMx8TprhK06bqq zmS)RAqPSF=Jq>So#)D_Yzpc46I$cFZ%#TRZQEaXPx%q9Q+{omo-ZU~41e%xwh&?$R zVNdG6^tP)d)}IJ_3EMaji}>WqUbG#qq!&)l^0vSX!oQ&!u{LEC9bhyjJ41t7T+h4* zu9uH8gxLk2(b5bb)z?Qm0CDLYL(Ja+c?Oi8YwHMB`jN^kmaHWE}x_vxOyd9C;LOBKvo0#)S5yYA1*qYea4)vg9Y(Q8Xut8Tu1oa;+F|vA3tN z+Ra2+tk?zn5J4AVyP$Td4{yMoR3sRj)gh#jG|tik2#aXVVUA?YEQ7Gv1)viiKj(S= z1PD!xj#d+5UEJG-(Wd+iPF8TcIZz^f-GNo#{8`qB4;v-Ya5q%n?98e|zBbT2mbx#Z zdX0*idhIiai3UQ9quMQNbRncDQE{1jV5mxVLxM`^`x|7P@FBzGFEY5->h^>^fH={c zb77`QwSvFBcNMF%`mpNC?+u>F0DgFpF3ikxMePO8wImuLdIC?5>AAH~*;S{6|Ek+e z%$8Mz`@}LDd^5~C=-4zRJUw>g^dc~(QZS~*f-xm)2+6^HHM0v9`#|R9kcUNqfVp?A zP7m7;hz`Rzf<9SByT%P2V~!GpT^-I~_+}ZCQeEe%X*N3mn9vbc3>kMovxTBPNwyiA zupD~wEd+S#{AR-!9j_t$8(4|M*YF@Pj~b`JRGu(+2;D(B7b2|J1P(LvP=vmZ;BW}4 zyFr2(^?}_Wz{Qz7DrT+@N0WL;cnhtUcC^%81{DxGJFNH( z2zSClr|ot{M#rx-gi{JMKA+l6P65c2KA&OmNjGr@P>fq4U@llOjfIiNo-IH`3&{QB z&>|Od3QG6{r13Si;#4U$wFrel}e>&Lx=VC}gB8Fn>RW%k*AIVY<})*aP& zE*j+aSn)36EeyI0gChE+r>hv@lGg^h_fp%V{fasUQV&_HVg2^qe=&;!gnhh$!7AZH zoE#y?q58Wl4VQ%DHJ3@cRE^ojFz~`$?G5Q0_}aE9G!WmD za){XEq?1@xWFUu|8b8qLj&3J}*Y1SLWj<>lk56hcUKB69c_-la|85|oisV+jb&9vX zd{;Bov8~)dE);3@!GW-*^{VIc>?~@v98N{W1YE-#2GSOO{e!P?l>Z6Wgp>Ht)M!X4 ziq0YFu7Ny{Ft!l7jH-Q7U{|yNNY26zM?J4%Gs^#wfozR71|f-{-cL@04sD+q$hUFE zrUFB-m|m;5oJ%+f3_H2O>z;y6!d@B3sUgPNz9FO-7>=$skdKNr$swB8o>&S?_KLcs z>Lg@xjup$zsT(jE7X{fs8+pz(7u;-n;#MLnTXuq`j z6jq=2VAV;fM!vjq3opC0HQ5iw!3g`=CPJTF4J7tVO(V-Z0}Q|QV+@058EY@=E@uJJ z{{!rno^(A6hq}V#{0ys$&8#}{8>3#UWh(O@i12I0ns7d+O?bk4e{90kDGX2h9}-w9 zdoYg;uj;WZ1y1aB=YT;0t0w2pSwe2!58c;iz<@=!NJ&zR2%>a04t#TVXX54ZKkVV|HYVQ3!1*v2 zre*2CwG}KOVw9IPh>=MbYnoQ)i@$a1I=q}08)-_KBwv=hNM~2_;?Yu@ zRs6$9Ai*3drL57EKu-B1>Em^p5=bLQO8WJhl2@x`7xL;7Y$|VG0Vl9`qoxir!jaO9 zEt(Qc0+al!AV=~xUQDHSC0k16Agaqge*mKg+j+f_VCt8w`UAS3m7^)fd@p%^3CZ!=4x<|;5Ac=%=r^W@=iXh!jZ%Qs=ey^mILgYy&Og#O=P=WoO)Eq@5(_) z+e5q+XL6=oZb@6Q`3uMmM>x3?IpS-oy+KSu*sbFTgU5UtnQ8|KR}gW%h%x#i*i_r) zwL9~n@dzyH?ZNGd8{}3cjO>hJ;@J|FI9Ww zEr2QWHL%&YEb%9G_!w#k&pZlCT*M+q2(Lcst;31UH~a_qu3m!G2Bu53*#KlYsj%ze z<*-Vp!#SzAYTjowB=;W>L!dcuVB_QzaI#^L)D0HI_%(V*^nSw4(dmlYO1f@BBe!c(ll}KC znM|(5iu>S30_*yruW3!XKB$>{nfw6i``KISof7>7KT5;t;(d=>+k%$ofBP$uZ`U$B?p_7vnYoCQ=cF8&!&;vO3vP#Ri4teU2TIf?Niro1KhT>Iw z68=aI!{;_xG8k1z`)^EHjOKqEE?)xAF}fq%w-ned9&C{zYHwrFwWH7b^a=32K7vBL@%>pJ?i1N%rha7* zhTVMv2a_8{HzwzQ|GNNgpZ0*>|-Tsw#B>oLt zTUv6gu_Fn84JEx&u_TD(yoSIs)AG^hVpA95{|17p6KPmIPZ~U*!Ro!0M@pdtKNPb3 zEnHRVyqSGGsuS!=npHzLqTWILb7vPTUhNU=!HP?;IPf?Yhmy-d!EUU$?|UeYKhKKE zdpTCBe*-_75wB`_kmOp)YSvWCL!@T!@FR$H+Z0^y`v4`zcDW;5sPqU9WF>2qezx~r zEhP;k#h$E54)$ct#M&q(+tq=zQYO(E!FrNoqlDSEZe_&}w*9_`m0uI$Yp*mR)Esv#r^cka|i#Y1RQ&;^m+WltD5r5*nux*eI+6WTcF2~69=OkfcuP$6`FBCMi8#0^)-xrl z&zOB_8RtQtmq8*~=u&VvqnYWZSPz;gjWPfFa(8IwInao^kKsKSP4z~z7+RonjxM8T z&lh?lMo&f+n=PpiA(C6-4kpkt!ipi+wwU==hH4VSSK)P3LGJTW8d`WPl|}%(2^3_B z2Q=~BAP&=$G7r$DilKeX=`yBU9HdvijHwwz*^J$xfsf$Xqa;Bb-U%?`!}C*kOd_&CtMJdBGGBFp4)| z=FZY!CRWsLuV0Qj;u$ z638bi^&@w&I$}PnhBwpr#REPQXODI`76&%G7Lt_WR>pA=CDW&lj~|;dt;Q^*^mr@v zll1Dc8#vd1UOY!CT#EGVM1eY(Kp>|TSmRHoniO^nPmKmmA_uF-!95932629Ersu0% zuedkx^8rNAI))hP18P@Y8tw1`tiHN|RsX83rq*nIkgcZ2n~+6ia{qrk4yDF8RsAC# zy>{MC2fD%J@#(1()c-c13Px$$PwSqCK4}r;<;2b0Vn$08N4Zh0*tav@4Op{-&muS{ zah3T^Np41TDk(dewc*omES~38Y>*9v_V6(J{$-4odv1oQnM~1azI?a{zFwtt{D6e zWaYr!C(J?Ceb_HLu770rfpL-1y;UUq$1<9Zrb#cmNwSz`bB0^~fe^!l8_AYHh(+ug Xl9z!>u + + + Timeline | Editable Groups + + + + + + + + +

+ This example demonstrates editable groups (for now only reordering). +

+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html index 21554b14..228a0ac5 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ - +

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ⅅ|&3m)W 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