diff --git a/dist/vis-graph3d.min.js b/dist/vis-graph3d.min.js index 165c2ecb..48950c2b 100644 --- a/dist/vis-graph3d.min.js +++ b/dist/vis-graph3d.min.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 4.19.1 - * @date 2017-03-19 + * @version 4.20.0 + * @date 2017-05-21 * * @license * Copyright (C) 2011-2017 Almende B.V, http://almende.com @@ -22,13 +22,13 @@ * * 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(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){e.util=n(1),e.DOMutil=n(87),e.DataSet=n(88),e.DataView=n(92),e.Queue=n(91),e.Graph3d=n(93),e.graph3d={Camera:n(101),Filter:n(106),Point2d:n(100),Point3d:n(99),Slider:n(107),StepNumber:n(108)},e.moment=n(82),e.Hammer=n(111),e.keycharm=n(114)},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}var r=n(2),o=i(r),s=n(55),a=i(s),h=n(58),u=i(h),l=n(62),c=i(l),f=n(82),d=n(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,n,i){if(e==t)return.5;var r=1/(e-t);return Math.max(0,(i-t)*r)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){var n=p.exec(t);if(n)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return d.v4()},e.assignAllKeys=function(t,e){for(var n in t)t.hasOwnProperty(n)&&"object"!==(0,c.default)(t[n])&&(t[n]=e)},e.fillIfDefined=function(t,n){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var r in t)void 0!==n[r]&&("object"!==(0,c.default)(n[r])?void 0!==n[r]&&null!==n[r]||void 0===t[r]||i!==!0?t[r]=n[r]:delete t[r]:"object"===(0,c.default)(t[r])&&e.fillIfDefined(t[r],n[r],i))},e.protoExtend=function(t,e){for(var n=1;n3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o=2;o3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o in i)if(i.hasOwnProperty(o)&&t.indexOf(o)==-1)if(i[o]&&i[o].constructor===Object)void 0===n[o]&&(n[o]={}),n[o].constructor===Object?e.deepExtend(n[o],i[o]):null===i[o]&&void 0!==n[o]&&r===!0?delete n[o]:n[o]=i[o];else if(Array.isArray(i[o])){n[o]=[];for(var s=0;s=0&&(e="DOMMouseScroll"),t.addEventListener(e,n,i)):t.attachEvent("on"+e,n)},e.removeEventListener=function(t,e,n,i){t.removeEventListener?(void 0===i&&(i=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,n,i)):t.detachEvent("on"+e,n)},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 n=t;n;){if(n===e)return!0;n=n.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,n){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":n||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,n,i){return e+e+n+n+i+i});var n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null},e.overrideOpacity=function(t,n){if(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){var i=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+i[0]+","+i[1]+","+i[2]+","+n+")"}var i=e.hexToRGB(t);return null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+n+")"},e.RGBToHex=function(t,e,n){return"#"+((1<<24)+(t<<16)+(e<<8)+n).toString(16).slice(1)},e.parseColor=function(t){var n;if(e.isString(t)===!0){if(e.isValidRGB(t)===!0){var i=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(i[0],i[1],i[2])}if(e.isValidHex(t)===!0){var r=e.hexToHSV(t),o={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},s={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},a=e.HSVToHex(s.h,s.s,s.v),h=e.HSVToHex(o.h,o.s,o.v);n={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else n={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else n={},n.background=t.background||void 0,n.border=t.border||void 0,e.isString(t.highlight)?n.highlight={border:t.highlight,background:t.highlight}:(n.highlight={},n.highlight.background=t.highlight&&t.highlight.background||void 0,n.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?n.hover={border:t.hover,background:t.hover}:(n.hover={},n.hover.background=t.hover&&t.hover.background||void 0,n.hover.border=t.hover&&t.hover.border||void 0);return n},e.RGBToHSV=function(t,e,n){t/=255,e/=255,n/=255;var i=Math.min(t,Math.min(e,n)),r=Math.max(t,Math.max(e,n));if(i==r)return{h:0,s:0,v:i};var o=t==i?e-n:n==i?t-e:n-t,s=t==i?3:n==i?1:5,a=60*(s-o/(r-i))/360,h=(r-i)/r,u=r;return{h:a,s:h,v:u}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var n=t.split(":"),i=n[0].trim(),r=n[1].trim();e[i]=r}}),e},join:function(t){return(0,u.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,n){var i=m.split(t.style.cssText),r=m.split(n),o=e.extend(i,r);t.style.cssText=m.join(o)},e.removeCssText=function(t,e){var n=m.split(t.style.cssText),i=m.split(e);for(var r in i)i.hasOwnProperty(r)&&delete n[r];t.style.cssText=m.join(n)},e.HSVToRGB=function(t,e,n){var i,r,o,s=Math.floor(6*t),a=6*t-s,h=n*(1-e),u=n*(1-a*e),l=n*(1-(1-a)*e);switch(s%6){case 0:i=n,r=l,o=h;break;case 1:i=u,r=n,o=h;break;case 2:i=h,r=n,o=l;break;case 3:i=h,r=u,o=n;break;case 4:i=l,r=h,o=n;break;case 5:i=n,r=h,o=u}return{r:Math.floor(255*i),g:Math.floor(255*r),b:Math.floor(255*o)}},e.HSVToHex=function(t,n,i){var r=e.HSVToRGB(t,n,i);return e.RGBToHex(r.r,r.g,r.b)},e.hexToHSV=function(t){var n=e.hexToRGB(t);return e.RGBToHSV(n.r,n.g,n.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,n){if("object"==("undefined"==typeof n?"undefined":(0,c.default)(n))){for(var i=(0,a.default)(n),r=0;r0&&e(i,t[r-1])<0;r--)t[r]=t[r-1];t[r]=i}return t},e.mergeOptions=function(t,e,n){var i=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[n])t[n]=(0,a.default)(i[n]);else if(void 0!==e[n])if("boolean"==typeof e[n])t[n].enabled=e[n];else{void 0===e[n].enabled&&(t[n].enabled=!0);for(var r in e[n])e[n].hasOwnProperty(r)&&(t[n][r]=e[n][r])}},e.binarySearchCustom=function(t,e,n,i){for(var r=1e4,o=0,s=0,a=t.length-1;s<=a&&o0)return"before"==i?Math.max(0,h-1):h;if(r(s,e)<0&&r(a,e)>0)return"before"==i?h:Math.min(t.length-1,h+1);r(s,e)<0?c=h+1:f=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var n=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;return n==i&&(i=e.clientWidth),document.body.removeChild(e),n-i},e.topMost=function(t,e){var n=void 0;Array.isArray(e)||(e=[e]);var i=!0,r=!1,s=void 0;try{for(var a,h=(0,o.default)(t);!(i=(a=h.next()).done);i=!0){var u=a.value;if(u){n=u[e[0]];for(var l=1;l=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,n){var i=n(10),r=n(12);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var i=n(14),r=n(15),o=n(30),s=n(20),a=n(31),h=n(8),u=n(32),l=n(46),c=n(48),f=n(47)("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",m="keys",v="values",y=function(){return this};t.exports=function(t,e,n,g,_,w,x){u(n,e,g);var b,S,T,D=function(t){if(!d&&t in E)return E[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},M=e+" Iterator",k=_==v,O=!1,E=t.prototype,C=E[f]||E[p]||_&&E[_],P=C||D(_),L=_?k?D("entries"):P:void 0,Y="Array"==e?E.entries||C:C;if(Y&&(T=c(Y.call(new t)),T!==Object.prototype&&(l(T,M,!0),i||a(T,f)||s(T,f,y))),k&&C&&C.name!==v&&(O=!0,P=function(){return C.call(this)}),i&&!x||!d&&!O&&E[f]||s(E,f,P),h[e]=P,h[M]=y,_)if(b={values:k?P:D(v),keys:w?P:D(m),entries:L},x)for(S in b)S in E||o(E,S,b[S]);else r(r.P+r.F*(d||O),e,b);return b}},function(t,e){t.exports=!0},function(t,e,n){var i=n(16),r=n(17),o=n(18),s=n(20),a="prototype",h=function(t,e,n){var u,l,c,f=t&h.F,d=t&h.G,p=t&h.S,m=t&h.P,v=t&h.B,y=t&h.W,g=d?r:r[e]||(r[e]={}),_=g[a],w=d?i:p?i[e]:(i[e]||{})[a];d&&(n=e);for(u in n)l=!f&&w&&void 0!==w[u],l&&u in g||(c=l?w[u]:n[u],g[u]=d&&"function"!=typeof w[u]?n[u]:v&&l?o(c,i):y&&w[u]==c?function(t){var e=function(e,n,i){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,i)}return t.apply(this,arguments)};return e[a]=t[a],e}(c):m&&"function"==typeof c?o(Function.call,c):c,m&&((g.virtual||(g.virtual={}))[u]=c,t&h.R&&_&&!_[u]&&s(_,u,c)))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){var i=n(19);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var i=n(21),r=n(29);t.exports=n(25)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var i=n(22),r=n(24),o=n(28),s=Object.defineProperty;e.f=n(25)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var i=n(23);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){t.exports=!n(25)&&!n(26)(function(){return 7!=Object.defineProperty(n(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){t.exports=!n(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var i=n(23),r=n(16).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e,n){var i=n(23);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){t.exports=n(20)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var i=n(33),r=n(29),o=n(46),s={};n(20)(s,n(47)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=i(s,{next:r(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var i=n(22),r=n(34),o=n(44),s=n(41)("IE_PROTO"),a=function(){},h="prototype",u=function(){var t,e=n(27)("iframe"),i=o.length,r="<",s=">";for(e.style.display="none",n(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(r+"script"+s+"document.F=Object"+r+"/script"+s),t.close(),u=t.F;i--;)delete u[h][o[i]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(a[h]=i(t),n=new a,a[h]=null,n[s]=t):n=u(),void 0===e?n:r(n,e)}},function(t,e,n){var i=n(21),r=n(22),o=n(35);t.exports=n(25)?Object.defineProperties:function(t,e){r(t);for(var n,s=o(e),a=s.length,h=0;a>h;)i.f(t,n=s[h++],e[n]);return t}},function(t,e,n){var i=n(36),r=n(44);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){var i=n(31),r=n(9),o=n(37)(!1),s=n(41)("IE_PROTO");t.exports=function(t,e){var n,a=r(t),h=0,u=[];for(n in a)n!=s&&i(a,n)&&u.push(n);for(;e.length>h;)i(a,n=e[h++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var i=n(9),r=n(38),o=n(40);t.exports=function(t){return function(e,n,s){var a,h=i(e),u=r(h.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if(a=h[l++],a!=a)return!0}else for(;u>l;l++)if((t||l in h)&&h[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var i=n(39),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){var i=n(39),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(42)("keys"),r=n(43);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e,n){var i=n(16),r="__core-js_shared__",o=i[r]||(i[r]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){t.exports=n(16).document&&document.documentElement},function(t,e,n){var i=n(21).f,r=n(31),o=n(47)("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(42)("wks"),r=n(43),o=n(16).Symbol,s="function"==typeof o,a=t.exports=function(t){return i[t]||(i[t]=s&&o[t]||(s?o:r)("Symbol."+t))};a.store=i},function(t,e,n){var i=n(31),r=n(49),o=n(41)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){var i=n(12);t.exports=function(t){return Object(i(t))}},function(t,e,n){var i=n(51)(!0);n(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var i=n(39),r=n(12);t.exports=function(t){return function(e,n){var o,s,a=String(r(e)),h=i(n),u=a.length;return h<0||h>=u?t?"":void 0:(o=a.charCodeAt(h),o<55296||o>56319||h+1===u||(s=a.charCodeAt(h+1))<56320||s>57343?t?a.charAt(h):o:t?a.slice(h,h+2):(o-55296<<10)+(s-56320)+65536)}}},function(t,e,n){var i=n(22),r=n(53);t.exports=n(17).getIterator=function(t){var e=r(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return i(e.call(t))}},function(t,e,n){var i=n(54),r=n(47)("iterator"),o=n(8);t.exports=n(17).getIteratorMethod=function(t){if(void 0!=t)return t[r]||t["@@iterator"]||o[i(t)]}},function(t,e,n){var i=n(11),r=n(47)("toStringTag"),o="Arguments"==i(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),r))?n:o?i(e):"Object"==(a=i(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){t.exports={default:n(56),__esModule:!0}},function(t,e,n){n(57);var i=n(17).Object;t.exports=function(t,e){return i.create(t,e)}},function(t,e,n){var i=n(15);i(i.S,"Object",{create:n(33)})},function(t,e,n){t.exports={default:n(59),__esModule:!0}},function(t,e,n){n(60),t.exports=n(17).Object.keys},function(t,e,n){var i=n(49),r=n(35);n(61)("keys",function(){return function(t){return r(i(t))}})},function(t,e,n){var i=n(15),r=n(17),o=n(26);t.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],s={};s[t]=e(n),i(i.S+i.F*o(function(){n(1)}),"Object",s)}},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var r=n(63),o=i(r),s=n(66),a=i(s),h="function"==typeof a.default&&"symbol"==typeof o.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(o.default)?function(t){return"undefined"==typeof t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":h(t)}},function(t,e,n){t.exports={default:n(64),__esModule:!0}},function(t,e,n){n(50),n(4),t.exports=n(65).f("iterator")},function(t,e,n){e.f=n(47)},function(t,e,n){t.exports={default:n(67),__esModule:!0}},function(t,e,n){n(68),n(79),n(80),n(81),t.exports=n(17).Symbol},function(t,e,n){var i=n(16),r=n(31),o=n(25),s=n(15),a=n(30),h=n(69).KEY,u=n(26),l=n(42),c=n(46),f=n(43),d=n(47),p=n(65),m=n(70),v=n(71),y=n(72),g=n(75),_=n(22),w=n(9),x=n(28),b=n(29),S=n(33),T=n(76),D=n(78),M=n(21),k=n(35),O=D.f,E=M.f,C=T.f,P=i.Symbol,L=i.JSON,Y=L&&L.stringify,R="prototype",A=d("_hidden"),I=d("toPrimitive"),N={}.propertyIsEnumerable,W=l("symbol-registry"),z=l("symbols"),F=l("op-symbols"),j=Object[R],V="function"==typeof P,G=i.QObject,B=!G||!G[R]||!G[R].findChild,U=o&&u(function(){return 7!=S(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a})?function(t,e,n){var i=O(j,e);i&&delete j[e],E(t,e,n),i&&t!==j&&E(j,e,i)}:E,H=function(t){var e=z[t]=S(P[R]);return e._k=t,e},X=V&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},Z=function(t,e,n){return t===j&&Z(F,e,n),_(t),e=x(e,!0),_(n),r(z,e)?(n.enumerable?(r(t,A)&&t[A][e]&&(t[A][e]=!1),n=S(n,{enumerable:b(0,!1)})):(r(t,A)||E(t,A,b(1,{})),t[A][e]=!0),U(t,e,n)):E(t,e,n)},q=function(t,e){_(t);for(var n,i=y(e=w(e)),r=0,o=i.length;o>r;)Z(t,n=i[r++],e[n]);return t},$=function(t,e){return void 0===e?S(t):q(S(t),e)},J=function(t){var e=N.call(this,t=x(t,!0));return!(this===j&&r(z,t)&&!r(F,t))&&(!(e||!r(this,t)||!r(z,t)||r(this,A)&&this[A][t])||e)},Q=function(t,e){if(t=w(t),e=x(e,!0),t!==j||!r(z,e)||r(F,e)){var n=O(t,e);return!n||!r(z,e)||r(t,A)&&t[A][e]||(n.enumerable=!0),n}},K=function(t){for(var e,n=C(w(t)),i=[],o=0;n.length>o;)r(z,e=n[o++])||e==A||e==h||i.push(e);return i},tt=function(t){for(var e,n=t===j,i=C(n?F:w(t)),o=[],s=0;i.length>s;)!r(z,e=i[s++])||n&&!r(j,e)||o.push(z[e]);return o};V||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(n){this===j&&e.call(F,n),r(this,A)&&r(this[A],t)&&(this[A][t]=!1),U(this,t,b(1,n))};return o&&B&&U(j,t,{configurable:!0,set:e}),H(t)},a(P[R],"toString",function(){return this._k}),D.f=Q,M.f=Z,n(77).f=T.f=K,n(74).f=J,n(73).f=tt,o&&!n(14)&&a(j,"propertyIsEnumerable",J,!0),p.f=function(t){return H(d(t))}),s(s.G+s.W+s.F*!V,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)d(et[nt++]);for(var et=k(d.store),nt=0;et.length>nt;)m(et[nt++]);s(s.S+s.F*!V,"Symbol",{for:function(t){return r(W,t+="")?W[t]:W[t]=P(t)},keyFor:function(t){if(X(t))return v(W,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){B=!0},useSimple:function(){B=!1}}),s(s.S+s.F*!V,"Object",{create:$,defineProperty:Z,defineProperties:q,getOwnPropertyDescriptor:Q,getOwnPropertyNames:K,getOwnPropertySymbols:tt}),L&&s(s.S+s.F*(!V||u(function(){var t=P();return"[null]"!=Y([t])||"{}"!=Y({a:t})||"{}"!=Y(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!X(t)){for(var e,n,i=[t],r=1;arguments.length>r;)i.push(arguments[r++]);return e=i[1],"function"==typeof e&&(n=e),!n&&g(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!X(e))return e}),i[1]=e,Y.apply(L,i)}}}),P[R][I]||n(20)(P[R],I,P[R].valueOf),c(P,"Symbol"),c(Math,"Math",!0),c(i.JSON,"JSON",!0)},function(t,e,n){var i=n(43)("meta"),r=n(23),o=n(31),s=n(21).f,a=0,h=Object.isExtensible||function(){return!0},u=!n(26)(function(){return h(Object.preventExtensions({}))}),l=function(t){s(t,i,{value:{i:"O"+ ++a,w:{}}})},c=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[i].i},f=function(t,e){if(!o(t,i)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[i].w},d=function(t){return u&&p.NEED&&h(t)&&!o(t,i)&&l(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:c,getWeak:f,onFreeze:d}},function(t,e,n){var i=n(16),r=n(17),o=n(14),s=n(65),a=n(21).f;t.exports=function(t){var e=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,n){var i=n(35),r=n(9);t.exports=function(t,e){for(var n,o=r(t),s=i(o),a=s.length,h=0;a>h;)if(o[n=s[h++]]===e)return n}},function(t,e,n){var i=n(35),r=n(73),o=n(74);t.exports=function(t){var e=i(t),n=r.f;if(n)for(var s,a=n(t),h=o.f,u=0;a.length>u;)h.call(t,s=a[u++])&&e.push(s);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var i=n(11);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,e,n){var i=n(9),r=n(77).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return r(t)}catch(t){return s.slice()}};t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?a(t):r(i(t))}},function(t,e,n){var i=n(36),r=n(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},function(t,e,n){var i=n(74),r=n(29),o=n(9),s=n(28),a=n(31),h=n(24),u=Object.getOwnPropertyDescriptor;e.f=n(25)?u:function(t,e){if(t=o(t),e=s(e,!0),h)try{return u(t,e)}catch(t){}if(a(t,e))return r(!i.f.call(t,e),t[e])}},function(t,e){},function(t,e,n){n(70)("asyncIterator")},function(t,e,n){n(70)("observable")},function(t,e,n){t.exports="undefined"!=typeof window&&window.moment||n(83)},function(t,e,n){(function(t){!function(e,n){t.exports=n()}(this,function(){function e(){return wi.apply(null,arguments)}function n(t){wi=t}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){var e;for(e in t)return!1;return!0}function s(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n0)for(n=0;n0?"future":"past"];return M(n)?n(e):n.replace(/%s/i,e)}function I(t,e){var n=t.toLowerCase();Ai[n]=Ai[n+"s"]=Ai[e]=t}function N(t){return"string"==typeof t?Ai[t]||Ai[t.toLowerCase()]:void 0}function W(t){var e,n,i={};for(n in t)l(t,n)&&(e=N(n),e&&(i[e]=t[n]));return i}function z(t,e){Ii[t]=e}function F(t){var e=[];for(var n in t)e.push({unit:n,priority:Ii[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,n){return function(i){return null!=i?(G(this,t,i),e.updateOffset(this,n),this):V(this,t)}}function V(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function G(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function B(t){return t=N(t),M(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=W(t);for(var n=F(t),i=0;i=0;return(o?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+i}function X(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return this[i]()}),t&&(Fi[t]=r),e&&(Fi[e[0]]=function(){return H(r.apply(this,arguments),e[1],e[2])}),n&&(Fi[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function Z(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function q(t){var e,n,i=t.match(Ni);for(e=0,n=i.length;e=0&&Wi.test(t);)t=t.replace(Wi,n),Wi.lastIndex=0,i-=1;return t}function Q(t,e,n){rr[t]=M(e)?e:function(t,i){return t&&n?n:e}}function K(t,e){return l(rr,t)?rr[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,r){return e||n||i||r}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function nt(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),a(e)&&(i=function(t,n){n[e]=x(t)}),n=0;n=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function wt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function xt(t,e,n){var i=7+e-n,r=(7+wt(t,0,i).getUTCDay()-e)%7;return-r+i-1}function bt(t,e,n,i,r){var o,s,a=(7+n-i)%7,h=xt(t,i,r),u=1+7*(e-1)+a+h;return u<=0?(o=t-1,s=vt(o)+u):u>vt(t)?(o=t+1,s=u-vt(t)):(o=t,s=u),{year:o,dayOfYear:s}}function St(t,e,n){var i,r,o=xt(t.year(),e,n),s=Math.floor((t.dayOfYear()-o-1)/7)+1;return s<1?(r=t.year()-1,i=s+Tt(r,e,n)):s>Tt(t.year(),e,n)?(i=s-Tt(t.year(),e,n),r=t.year()+1):(r=t.year(),i=s),{week:i,year:r}}function Tt(t,e,n){var i=xt(t,e,n),r=xt(t+1,e,n);return(vt(t)-i+r)/7}function Dt(t){return St(t,this._week.dow,this._week.doy).week}function Mt(){return this._week.dow}function kt(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=St(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ct(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Lt(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Yt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Rt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function At(t,e,n){var i,r,o,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)o=f([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===e?(r=mr.call(this._weekdaysParse,s),r!==-1?r:null):"ddd"===e?(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:null):(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null):"dddd"===e?(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null))):"ddd"===e?(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null))):(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:null)))}function It(t,e,n){var i,r,o;if(this._weekdaysParseExact)return At.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(r=f([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(r,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(r,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(r,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(o="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function Nt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ct(t,this.localeData()),this.add(t-e,"d")):e}function Wt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function zt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ft(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Mr),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function jt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=kr),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Vt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Or),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Gt(){function t(t,e){return e.length-t.length}var e,n,i,r,o,s=[],a=[],h=[],u=[];for(e=0;e<7;e++)n=f([2e3,1]).day(e),i=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),o=this.weekdays(n,""),s.push(i),a.push(r),h.push(o),u.push(i),u.push(r),u.push(o);for(s.sort(t),a.sort(t),h.sort(t),u.sort(t),e=0;e<7;e++)a[e]=et(a[e]),h[e]=et(h[e]),u[e]=et(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Bt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function Ht(t,e){X(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Xt(t,e){return e._meridiemParse}function Zt(t){return"p"===(t+"").toLowerCase().charAt(0)}function qt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function $t(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,n,i,r,o=0;o0;){if(i=Qt(r.slice(0,e).join("-")))return i;if(n&&n.length>=e&&b(r,n,!0)>=e-1)break;e--}o++}return null}function Qt(e){var n=null;if(!Yr[e]&&"undefined"!=typeof t&&t&&t.exports)try{n=Er._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Kt(n)}catch(t){}return Yr[e]}function Kt(t,e){var n;return t&&(n=s(e)?ne(t):te(t,e),n&&(Er=n)),Er._abbr}function te(t,e){if(null!==e){var n=Lr;if(e.abbr=t,null!=Yr[t])D("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Yr[t]._config;else if(null!=e.parentLocale){if(null==Yr[e.parentLocale])return Rr[e.parentLocale]||(Rr[e.parentLocale]=[]),Rr[e.parentLocale].push({name:t,config:e}),null;n=Yr[e.parentLocale]._config}return Yr[t]=new E(O(n,e)),Rr[t]&&Rr[t].forEach(function(t){te(t.name,t.config)}),Kt(t),Yr[t]}return delete Yr[t],null}function ee(t,e){if(null!=e){var n,i=Lr;null!=Yr[t]&&(i=Yr[t]._config),e=O(i,e),n=new E(e),n.parentLocale=Yr[t],Yr[t]=n,Kt(t)}else null!=Yr[t]&&(null!=Yr[t].parentLocale?Yr[t]=Yr[t].parentLocale:null!=Yr[t]&&delete Yr[t]);return Yr[t]}function ne(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Er;if(!i(t)){if(e=Qt(t))return e;t=[t]}return Jt(t)}function ie(){return Oi(Yr)}function re(t){var e,n=t._a;return n&&p(t).overflow===-2&&(e=n[ar]<0||n[ar]>11?ar:n[hr]<1||n[hr]>ot(n[sr],n[ar])?hr:n[ur]<0||n[ur]>24||24===n[ur]&&(0!==n[lr]||0!==n[cr]||0!==n[fr])?ur:n[lr]<0||n[lr]>59?lr:n[cr]<0||n[cr]>59?cr:n[fr]<0||n[fr]>999?fr:-1,p(t)._overflowDayOfYear&&(ehr)&&(e=hr),p(t)._overflowWeeks&&e===-1&&(e=dr),p(t)._overflowWeekday&&e===-1&&(e=pr),p(t).overflow=e),t}function oe(t){var e,n,i,r,o,s,a=t._i,h=Ar.exec(a)||Ir.exec(a);if(h){for(p(t).iso=!0,e=0,n=Wr.length;e10?"YYYY ":"YY "),o="HH:mm"+(n[4]?":ss":""),n[1]){var c=new Date(n[2]),f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][c.getDay()];if(n[1].substr(0,3)!==f)return p(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(n[5].length){case 2:0===h?a=" +0000":(h=l.indexOf(n[5][1].toUpperCase())-12,a=(h<0?" -":" +")+(""+h).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=u[n[5]];break;default:a=u[" GMT"]}n[5]=a,t._i=n.splice(1).join(""),s=" ZZ",t._f=i+r+o+s,fe(t),p(t).rfc2822=!0}else t._isValid=!1}function ae(t){var n=Fr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(oe(t),void(t._isValid===!1&&(delete t._isValid,se(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function he(t,e,n){return null!=t?t:null!=e?e:n}function ue(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function le(t){var e,n,i,r,o=[];if(!t._d){for(i=ue(t),t._w&&null==t._a[hr]&&null==t._a[ar]&&ce(t),null!=t._dayOfYear&&(r=he(t._a[sr],i[sr]),(t._dayOfYear>vt(r)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=wt(r,0,t._dayOfYear),t._a[ar]=n.getUTCMonth(),t._a[hr]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=o[e]=i[e];for(;e<7;e++)t._a[e]=o[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ur]&&0===t._a[lr]&&0===t._a[cr]&&0===t._a[fr]&&(t._nextDay=!0,t._a[ur]=0),t._d=(t._useUTC?wt:_t).apply(null,o),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ur]=24)}}function ce(t){var e,n,i,r,o,s,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)o=1,s=4,n=he(e.GG,t._a[sr],St(we(),1,4).year),i=he(e.W,1),r=he(e.E,1),(r<1||r>7)&&(h=!0);else{o=t._locale._week.dow,s=t._locale._week.doy;var u=St(we(),o,s);n=he(e.gg,t._a[sr],u.year),i=he(e.w,u.week),null!=e.d?(r=e.d,(r<0||r>6)&&(h=!0)):null!=e.e?(r=e.e+o,(e.e<0||e.e>6)&&(h=!0)):r=o}i<1||i>Tt(n,o,s)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=bt(n,i,r,o,s),t._a[sr]=a.year,t._dayOfYear=a.dayOfYear)}function fe(t){if(t._f===e.ISO_8601)return void oe(t);if(t._f===e.RFC_2822)return void se(t);t._a=[],p(t).empty=!0;var n,i,r,o,s,a=""+t._i,h=a.length,u=0;for(r=J(t._f,t._locale).match(Ni)||[],n=0;n0&&p(t).unusedInput.push(s),a=a.slice(a.indexOf(i)+i.length),u+=i.length),Fi[o]?(i?p(t).empty=!1:p(t).unusedTokens.push(o),rt(o,i,t)):t._strict&&!i&&p(t).unusedTokens.push(o);p(t).charsLeftOver=h-u,a.length>0&&p(t).unusedInput.push(a),t._a[ur]<=12&&p(t).bigHour===!0&&t._a[ur]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[ur]=de(t._locale,t._a[ur],t._meridiem),le(t),re(t)}function de(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function pe(t){var e,n,i,r,o;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function je(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?f(t._a):we(t._a);this._isDSTShifted=this.isValid()&&b(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Ve(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Be(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var n,i,r,o=t,s=null;return Oe(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(o={},e?o[e]=t:o.milliseconds=t):(s=Xr.exec(t))?(n="-"===s[1]?-1:1,o={y:0,d:x(s[hr])*n,h:x(s[ur])*n,m:x(s[lr])*n,s:x(s[cr])*n,ms:x(Ee(1e3*s[fr]))*n}):(s=Zr.exec(t))?(n="-"===s[1]?-1:1,o={y:He(s[2],n),M:He(s[3],n),w:He(s[4],n),d:He(s[5],n),h:He(s[6],n),m:He(s[7],n),s:He(s[8],n)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=Ze(we(o.from),we(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),i=new ke(o),Oe(t)&&l(t,"_locale")&&(i._locale=t._locale),i}function He(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Xe(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ze(t,e){var n;return t.isValid()&&e.isValid()?(e=Le(e,t),t.isBefore(e)?n=Xe(t,e):(n=Xe(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function qe(t,e){return function(n,i){var r,o;return null===i||isNaN(+i)||(D(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=i,i=o),n="string"==typeof n?+n:n,r=Ue(n,i),$e(this,r,t),this}}function $e(t,n,i,r){var o=n._milliseconds,s=Ee(n._days),a=Ee(n._months);t.isValid()&&(r=null==r||r,o&&t._d.setTime(t._d.valueOf()+o*i),s&&G(t,"Date",V(t,"Date")+s*i),a&<(t,V(t,"Month")+a*i),r&&e.updateOffset(t,s||a))}function Je(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Qe(t,n){var i=t||we(),r=Le(i,this).startOf("day"),o=e.calendarFormat(this,r)||"sameElse",s=n&&(M(n[o])?n[o].call(this,i):n[o]);return this.format(s||this.localeData().calendar(o,this,we(i)))}function Ke(){return new g(this)}function tn(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&(e=N(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()9999?$(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):M(Date.prototype.toISOString)?this.toDate().toISOString():$(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function cn(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r="-MM-DD[T]HH:mm:ss.SSS",o=e+'[")]';return this.format(n+i+r+o)}function fn(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=$(this,t);return this.localeData().postformat(n)}function dn(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function pn(t){return this.from(we(),t)}function mn(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function vn(t){return this.to(we(),t)}function yn(t){var e;return void 0===t?this._locale._abbr:(e=ne(t),null!=e&&(this._locale=e),this)}function gn(){return this._locale}function _n(t){switch(t=N(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function wn(t){return t=N(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function xn(){return this._d.valueOf()-6e4*(this._offset||0)}function bn(){return Math.floor(this.valueOf()/1e3)}function Sn(){return new Date(this.valueOf())}function Tn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Dn(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Mn(){return this.isValid()?this.toISOString():null}function kn(){return m(this)}function On(){return c({},p(this))}function En(){return p(this).overflow}function Cn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Pn(t,e){X(0,[t,t.length],0,e)}function Ln(t){return In.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Yn(t){return In.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Rn(){return Tt(this.year(),1,4)}function An(){var t=this.localeData()._week;return Tt(this.year(),t.dow,t.doy)}function In(t,e,n,i,r){var o;return null==t?St(this,i,r).year:(o=Tt(t,i,r),e>o&&(e=o),Nn.call(this,t,e,n,i,r))}function Nn(t,e,n,i,r){var o=bt(t,e,n,i,r),s=wt(o.year,0,o.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function Wn(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function zn(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 Fn(t,e){e[fr]=x(1e3*("0."+t))}function jn(){return this._isUTC?"UTC":""}function Vn(){return this._isUTC?"Coordinated Universal Time":""}function Gn(t){return we(1e3*t)}function Bn(){return we.apply(null,arguments).parseZone()}function Un(t){return t}function Hn(t,e,n,i){var r=ne(),o=f().set(i,e);return r[n](o,t)}function Xn(t,e,n){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Hn(t,e,n,"month");var i,r=[];for(i=0;i<12;i++)r[i]=Hn(t,i,n,"month");return r}function Zn(t,e,n,i){"boolean"==typeof t?(a(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,a(e)&&(n=e,e=void 0),e=e||"");var r=ne(),o=t?r._week.dow:0;if(null!=n)return Hn(e,(n+o)%7,i,"day");var s,h=[];for(s=0;s<7;s++)h[s]=Hn(e,(s+o)%7,i,"day");return h; -}function qn(t,e){return Xn(t,e,"months")}function $n(t,e){return Xn(t,e,"monthsShort")}function Jn(t,e,n){return Zn(t,e,n,"weekdays")}function Qn(t,e,n){return Zn(t,e,n,"weekdaysShort")}function Kn(t,e,n){return Zn(t,e,n,"weekdaysMin")}function ti(){var t=this._data;return this._milliseconds=oo(this._milliseconds),this._days=oo(this._days),this._months=oo(this._months),t.milliseconds=oo(t.milliseconds),t.seconds=oo(t.seconds),t.minutes=oo(t.minutes),t.hours=oo(t.hours),t.months=oo(t.months),t.years=oo(t.years),this}function ei(t,e,n,i){var r=Ue(e,n);return t._milliseconds+=i*r._milliseconds,t._days+=i*r._days,t._months+=i*r._months,t._bubble()}function ni(t,e){return ei(this,t,e,1)}function ii(t,e){return ei(this,t,e,-1)}function ri(t){return t<0?Math.floor(t):Math.ceil(t)}function oi(){var t,e,n,i,r,o=this._milliseconds,s=this._days,a=this._months,h=this._data;return o>=0&&s>=0&&a>=0||o<=0&&s<=0&&a<=0||(o+=864e5*ri(ai(a)+s),s=0,a=0),h.milliseconds=o%1e3,t=w(o/1e3),h.seconds=t%60,e=w(t/60),h.minutes=e%60,n=w(e/60),h.hours=n%24,s+=w(n/24),r=w(si(s)),a+=r,s-=ri(ai(r)),i=w(a/12),a%=12,h.days=s,h.months=a,h.years=i,this}function si(t){return 4800*t/146097}function ai(t){return 146097*t/4800}function hi(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if(t=N(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+si(e),"month"===t?n:n/12;switch(e=this._days+Math.round(ai(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function ui(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*x(this._months/12):NaN}function li(t){return function(){return this.as(t)}}function ci(t){return t=N(t),this.isValid()?this[t+"s"]():NaN}function fi(t){return function(){return this.isValid()?this._data[t]:NaN}}function di(){return w(this.days()/7)}function pi(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}function mi(t,e,n){var i=Ue(t).abs(),r=bo(i.as("s")),o=bo(i.as("m")),s=bo(i.as("h")),a=bo(i.as("d")),h=bo(i.as("M")),u=bo(i.as("y")),l=r<=So.ss&&["s",r]||r0,l[4]=n,pi.apply(null,l)}function vi(t){return void 0===t?bo:"function"==typeof t&&(bo=t,!0)}function yi(t,e){return void 0!==So[t]&&(void 0===e?So[t]:(So[t]=e,"s"===t&&(So.ss=e-1),!0))}function gi(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=mi(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function _i(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,i=To(this._milliseconds)/1e3,r=To(this._days),o=To(this._months);t=w(i/60),e=w(t/60),i%=60,t%=60,n=w(o/12),o%=12;var s=n,a=o,h=r,u=e,l=t,c=i,f=this.asSeconds();return f?(f<0?"-":"")+"P"+(s?s+"Y":"")+(a?a+"M":"")+(h?h+"D":"")+(u||l||c?"T":"")+(u?u+"H":"")+(l?l+"M":"")+(c?c+"S":""):"P0D"}var wi,xi;xi=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i68?1900:2e3)};var xr=j("FullYear",!0);X("w",["ww",2],"wo","week"),X("W",["WW",2],"Wo","isoWeek"),I("week","w"),I("isoWeek","W"),z("week",5),z("isoWeek",5),Q("w",Hi),Q("ww",Hi,Vi),Q("W",Hi),Q("WW",Hi,Vi),it(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=x(t)});var br={dow:0,doy:6};X("d",0,"do","day"),X("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),X("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),X("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),X("e",0,0,"weekday"),X("E",0,0,"isoWeekday"),I("day","d"),I("weekday","e"),I("isoWeekday","E"),z("day",11),z("weekday",11),z("isoWeekday",11),Q("d",Hi),Q("e",Hi),Q("E",Hi),Q("dd",function(t,e){return e.weekdaysMinRegex(t)}),Q("ddd",function(t,e){return e.weekdaysShortRegex(t)}),Q("dddd",function(t,e){return e.weekdaysRegex(t)}),it(["dd","ddd","dddd"],function(t,e,n,i){var r=n._locale.weekdaysParse(t,i,n._strict);null!=r?e.d=r:p(n).invalidWeekday=t}),it(["d","e","E"],function(t,e,n,i){e[i]=x(t)});var Sr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Tr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Dr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Mr=ir,kr=ir,Or=ir;X("H",["HH",2],0,"hour"),X("h",["hh",2],0,Bt),X("k",["kk",2],0,Ut),X("hmm",0,0,function(){return""+Bt.apply(this)+H(this.minutes(),2)}),X("hmmss",0,0,function(){return""+Bt.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)}),X("Hmm",0,0,function(){return""+this.hours()+H(this.minutes(),2)}),X("Hmmss",0,0,function(){return""+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)}),Ht("a",!0),Ht("A",!1),I("hour","h"),z("hour",13),Q("a",Xt),Q("A",Xt),Q("H",Hi),Q("h",Hi),Q("k",Hi),Q("HH",Hi,Vi),Q("hh",Hi,Vi),Q("kk",Hi,Vi),Q("hmm",Xi),Q("hmmss",Zi),Q("Hmm",Xi),Q("Hmmss",Zi),nt(["H","HH"],ur),nt(["k","kk"],function(t,e,n){var i=x(t);e[ur]=24===i?0:i}),nt(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),nt(["h","hh"],function(t,e,n){e[ur]=x(t),p(n).bigHour=!0}),nt("hmm",function(t,e,n){var i=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i)),p(n).bigHour=!0}),nt("hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i,2)),e[cr]=x(t.substr(r)),p(n).bigHour=!0}),nt("Hmm",function(t,e,n){var i=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i))}),nt("Hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i,2)),e[cr]=x(t.substr(r))});var Er,Cr=/[ap]\.?m?\.?/i,Pr=j("Hours",!0),Lr={calendar:Ei,longDateFormat:Ci,invalidDate:Pi,ordinal:Li,dayOfMonthOrdinalParse:Yi,relativeTime:Ri,months:yr,monthsShort:gr,week:br,weekdays:Sr,weekdaysMin:Dr,weekdaysShort:Tr,meridiemParse:Cr},Yr={},Rr={},Ar=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ir=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nr=/Z|[+-]\d\d(?::?\d\d)?/,Wr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],zr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Fr=/^\/?Date\((\-?\d+)/i,jr=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=T("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Vr=T("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:v()}),Br=function(){return Date.now?Date.now():+new Date},Ur=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ce("Z",":"),Ce("ZZ",""),Q("Z",er),Q("ZZ",er),nt(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Pe(er,t)});var Hr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xr=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Zr=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=ke.prototype,Ue.invalid=Me;var qr=qe(1,"add"),$r=qe(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Jr=T("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)});X(0,["gg",2],0,function(){return this.weekYear()%100}),X(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Pn("gggg","weekYear"),Pn("ggggg","weekYear"),Pn("GGGG","isoWeekYear"),Pn("GGGGG","isoWeekYear"),I("weekYear","gg"),I("isoWeekYear","GG"),z("weekYear",1),z("isoWeekYear",1),Q("G",Ki),Q("g",Ki),Q("GG",Hi,Vi),Q("gg",Hi,Vi),Q("GGGG",$i,Bi),Q("gggg",$i,Bi),Q("GGGGG",Ji,Ui),Q("ggggg",Ji,Ui),it(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=x(t)}),it(["gg","GG"],function(t,n,i,r){n[r]=e.parseTwoDigitYear(t)}),X("Q",0,"Qo","quarter"),I("quarter","Q"),z("quarter",7),Q("Q",ji),nt("Q",function(t,e){e[ar]=3*(x(t)-1)}),X("D",["DD",2],"Do","date"),I("date","D"),z("date",9),Q("D",Hi),Q("DD",Hi,Vi),Q("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),nt(["D","DD"],hr),nt("Do",function(t,e){e[hr]=x(t.match(Hi)[0],10)});var Qr=j("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),I("dayOfYear","DDD"),z("dayOfYear",4),Q("DDD",qi),Q("DDDD",Gi),nt(["DDD","DDDD"],function(t,e,n){n._dayOfYear=x(t)}),X("m",["mm",2],0,"minute"),I("minute","m"),z("minute",14),Q("m",Hi),Q("mm",Hi,Vi),nt(["m","mm"],lr);var Kr=j("Minutes",!1);X("s",["ss",2],0,"second"),I("second","s"),z("second",15),Q("s",Hi),Q("ss",Hi,Vi),nt(["s","ss"],cr);var to=j("Seconds",!1);X("S",0,0,function(){return~~(this.millisecond()/100)}),X(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,function(){return 10*this.millisecond()}),X(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),X(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),X(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),X(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),X(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),I("millisecond","ms"),z("millisecond",16),Q("S",qi,ji),Q("SS",qi,Vi),Q("SSS",qi,Gi);var eo;for(eo="SSSS";eo.length<=9;eo+="S")Q(eo,Qi);for(eo="S";eo.length<=9;eo+="S")nt(eo,Fn);var no=j("Milliseconds",!1);X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");var io=g.prototype;io.add=qr,io.calendar=Qe,io.clone=Ke,io.diff=an,io.endOf=wn,io.format=fn,io.from=dn,io.fromNow=pn,io.to=mn,io.toNow=vn,io.get=B,io.invalidAt=En,io.isAfter=tn,io.isBefore=en,io.isBetween=nn,io.isSame=rn,io.isSameOrAfter=on,io.isSameOrBefore=sn,io.isValid=kn,io.lang=Jr,io.locale=yn,io.localeData=gn,io.max=Gr,io.min=Vr,io.parsingFlags=On,io.set=U,io.startOf=_n,io.subtract=$r,io.toArray=Tn,io.toObject=Dn,io.toDate=Sn,io.toISOString=ln,io.inspect=cn,io.toJSON=Mn,io.toString=un,io.unix=bn,io.valueOf=xn,io.creationData=Cn,io.year=xr,io.isLeapYear=gt,io.weekYear=Ln,io.isoWeekYear=Yn,io.quarter=io.quarters=Wn,io.month=ct,io.daysInMonth=ft,io.week=io.weeks=Ot,io.isoWeek=io.isoWeeks=Et,io.weeksInYear=An,io.isoWeeksInYear=Rn,io.date=Qr,io.day=io.days=Nt,io.weekday=Wt,io.isoWeekday=zt,io.dayOfYear=zn,io.hour=io.hours=Pr,io.minute=io.minutes=Kr,io.second=io.seconds=to,io.millisecond=io.milliseconds=no,io.utcOffset=Re,io.utc=Ie,io.local=Ne,io.parseZone=We,io.hasAlignedHourOffset=ze,io.isDST=Fe,io.isLocal=Ve,io.isUtcOffset=Ge,io.isUtc=Be,io.isUTC=Be,io.zoneAbbr=jn,io.zoneName=Vn,io.dates=T("dates accessor is deprecated. Use date instead.",Qr),io.months=T("months accessor is deprecated. Use month instead",ct),io.years=T("years accessor is deprecated. Use year instead",xr),io.zone=T("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ae),io.isDSTShifted=T("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",je);var ro=E.prototype;ro.calendar=C,ro.longDateFormat=P,ro.invalidDate=L,ro.ordinal=Y,ro.preparse=Un,ro.postformat=Un,ro.relativeTime=R,ro.pastFuture=A,ro.set=k,ro.months=st,ro.monthsShort=at,ro.monthsParse=ut,ro.monthsRegex=pt,ro.monthsShortRegex=dt,ro.week=Dt,ro.firstDayOfYear=kt,ro.firstDayOfWeek=Mt,ro.weekdays=Lt,ro.weekdaysMin=Rt,ro.weekdaysShort=Yt,ro.weekdaysParse=It,ro.weekdaysRegex=Ft,ro.weekdaysShortRegex=jt,ro.weekdaysMinRegex=Vt,ro.isPM=Zt,ro.meridiem=qt,Kt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===x(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),e.lang=T("moment.lang is deprecated. Use moment.locale instead.",Kt),e.langData=T("moment.langData is deprecated. Use moment.localeData instead.",ne);var oo=Math.abs,so=li("ms"),ao=li("s"),ho=li("m"),uo=li("h"),lo=li("d"),co=li("w"),fo=li("M"),po=li("y"),mo=fi("milliseconds"),vo=fi("seconds"),yo=fi("minutes"),go=fi("hours"),_o=fi("days"),wo=fi("months"),xo=fi("years"),bo=Math.round,So={ss:44,s:45,m:45,h:22,d:26,M:11},To=Math.abs,Do=ke.prototype;return Do.isValid=De,Do.abs=ti,Do.add=ni,Do.subtract=ii,Do.as=hi,Do.asMilliseconds=so,Do.asSeconds=ao,Do.asMinutes=ho,Do.asHours=uo,Do.asDays=lo,Do.asWeeks=co,Do.asMonths=fo,Do.asYears=po,Do.valueOf=ui,Do._bubble=oi,Do.get=ci,Do.milliseconds=mo,Do.seconds=vo,Do.minutes=yo,Do.hours=go,Do.days=_o,Do.weeks=di,Do.months=wo,Do.years=xo,Do.humanize=gi,Do.toISOString=_i,Do.toString=_i,Do.toJSON=_i,Do.locale=yn,Do.localeData=gn,Do.toIsoString=T("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",_i),Do.lang=Jr,X("X",0,0,"unix"),X("x",0,0,"valueOf"),Q("x",Ki),Q("X",nr),nt("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),nt("x",function(t,e,n){n._d=new Date(x(t))}),e.version="2.18.0",n(we),e.fn=io,e.min=be,e.max=Se,e.now=Br,e.utc=f,e.unix=Gn,e.months=qn,e.isDate=h,e.locale=Kt,e.invalid=v,e.duration=Ue,e.isMoment=_,e.weekdays=Jn,e.parseZone=Bn,e.localeData=ne,e.isDuration=Oe,e.monthsShort=$n,e.weekdaysMin=Kn,e.defineLocale=te,e.updateLocale=ee,e.locales=ie,e.weekdaysShort=Qn,e.normalizeUnits=N,e.relativeTimeRounding=vi,e.relativeTimeThreshold=yi,e.calendarFormat=Je,e.prototype=io,e})}).call(e,n(84)(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 n(t){throw new Error("Cannot find module '"+t+"'.")}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id=85},function(t,e){(function(e){function n(t,e,n){var i=e&&n||0,r=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){r<16&&(e[i+r++]=c[t])});r<16;)e[i+r++]=0;return e}function i(t,e){var n=e||0,i=l;return i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]}function r(t,e,n){var r=e&&n||0,o=e||[];t=t||{};var s=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:y+1,u=a-v+(h-y)/1e4;if(u<0&&void 0===t.clockseq&&(s=s+1&16383),(u<0||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,y=h,m=s,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;o[r++]=l>>>24&255,o[r++]=l>>>16&255,o[r++]=l>>>8&255,o[r++]=255&l;var c=a/4294967296*1e4&268435455;o[r++]=c>>>8&255,o[r++]=255&c,o[r++]=c>>>24&15|16,o[r++]=c>>>16&255,o[r++]=s>>>8|128,o[r++]=255&s;for(var f=t.node||p,d=0;d<6;d++)o[r+d]=f[d];return e?e:i(o)}function o(t,e,n){var r=e&&n||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var o=t.random||(t.rng||s)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e)for(var a=0;a<16;a++)e[r+a]=o[a];return e||i(o)}var s,a="undefined"!=typeof window?window:"undefined"!=typeof e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);s=function(){return crypto.getRandomValues(h),h}}if(!s){var u=new Array(16);s=function(){for(var t,e=0;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),u[e]=t>>>((3&e)<<3)&255;return u}}for(var l=[],c={},f=0;f<256;f++)l[f]=(f+256).toString(16).substr(1),c[l[f]]=f;var d=s(),p=[1|d[0],d[1],d[2],d[3],d[4],d[5]],m=16383&(d[6]<<8|d[7]),v=0,y=0,g=o;g.v1=r,g.v4=o,g.parse=n,g.unparse=i,t.exports=g}).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 n=0;n0?(i=e[t].redundant[0],e[t].redundant.shift()):(i=document.createElementNS("http://www.w3.org/2000/svg",t),n.appendChild(i)):(i=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},n.appendChild(i)),e[t].used.push(i),i},e.getDOMElement=function(t,e,n,i){var r;return e.hasOwnProperty(t)?e[t].redundant.length>0?(r=e[t].redundant[0],e[t].redundant.shift()):(r=document.createElement(t),void 0!==i?n.insertBefore(r,i):n.appendChild(r)):(r=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==i?n.insertBefore(r,i):n.appendChild(r)),e[t].used.push(r),r},e.drawPoint=function(t,n,i,r,o,s){var a;if("circle"==i.style?(a=e.getSVGElement("circle",r,o),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",n),a.setAttributeNS(null,"r",.5*i.size)):(a=e.getSVGElement("rect",r,o),a.setAttributeNS(null,"x",t-.5*i.size),a.setAttributeNS(null,"y",n-.5*i.size),a.setAttributeNS(null,"width",i.size),a.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&a.setAttributeNS(null,"style",i.styles),a.setAttributeNS(null,"class",i.className+" vis-point"),s){var h=e.getSVGElement("text",r,o);s.xOffset&&(t+=s.xOffset),s.yOffset&&(n+=s.yOffset),s.content&&(h.textContent=s.content),s.className&&h.setAttributeNS(null,"class",s.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",n)}return a},e.drawBar=function(t,n,i,r,o,s,a,h){if(0!=r){r<0&&(r*=-1,n-=r);var u=e.getSVGElement("rect",s,a);u.setAttributeNS(null,"x",t-.5*i),u.setAttributeNS(null,"y",n),u.setAttributeNS(null,"width",i),u.setAttributeNS(null,"height",r),u.setAttributeNS(null,"class",o),h&&u.setAttributeNS(null,"style",h)}}},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(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 n=(0,l.default)(this._options.type),i=0,r=n.length;ir?1:is)&&(o=h,s=u)}return o},r.prototype.min=function(t){var e,n,i=this._data,r=(0,l.default)(i),o=null,s=null;for(e=0,n=r.length;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)}},n.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=n},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var n=this;this.listener=function(){n._onEvent.apply(n,arguments)},this.setData(t)}var o=n(58),s=i(o),a=n(1),h=n(88);r.prototype.setData=function(t){var e,n,i,r,o;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),o=[],i=0,r=e.length;io)&&(i=o)}return i},r.prototype.getColumnRange=function(t,e){for(var n=new g,i=0;i0&&(h[i-1].pointNext=s),h.push(s);return h},r.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),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);var e=this,n=function(t){e._onMouseDown(t)},i=function(t){e._onTouchStart(t)},r=function(t){e._onWheel(t)},o=function(t){e._onTooltip(t)},s=function(t){e._onClick(t)};f.addEventListener(this.frame.canvas,"mousedown",n),f.addEventListener(this.frame.canvas,"touchstart",i),f.addEventListener(this.frame.canvas,"mousewheel",r),f.addEventListener(this.frame.canvas,"mousemove",o),f.addEventListener(this.frame.canvas,"click",s),this.containerElement.appendChild(this.frame)},r.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},r.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},r.prototype.animationStart=function(){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()},r.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},r.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},r.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},r.prototype._readData=function(t){this._dataInitialize(t,this.style),this.dataFilter?this.dataPoints=this.dataFilter._getDataPoints():this.dataPoints=this._getDataPoints(this.dataTable),this._redrawFilter()},r.prototype.setData=function(t){this._readData(t),this.redraw(),this.animationAutoStart&&this.dataFilter&&this.animationStart()},r.prototype.setOptions=function(t){this.animationStop(),_.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.dataTable&&this.setData(this.dataTable),this.animationAutoStart&&this.dataFilter&&this.animationStart()},r.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case r.STYLE.BAR:t=r.prototype._redrawBarGraphPoint;break;case r.STYLE.BARCOLOR:t=r.prototype._redrawBarColorGraphPoint;break;case r.STYLE.BARSIZE:t=r.prototype._redrawBarSizeGraphPoint;break;case r.STYLE.DOT:t=r.prototype._redrawDotGraphPoint;break;case r.STYLE.DOTLINE:t=r.prototype._redrawDotLineGraphPoint;break;case r.STYLE.DOTCOLOR:t=r.prototype._redrawDotColorGraphPoint;break;case r.STYLE.DOTSIZE:t=r.prototype._redrawDotSizeGraphPoint;break;case r.STYLE.SURFACE:t=r.prototype._redrawSurfaceGraphPoint;break;case r.STYLE.GRID:t=r.prototype._redrawGridGraphPoint;break;case r.STYLE.LINE:t=r.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},r.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},r.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},r.prototype._redrawClear=function(){var t=this.frame.canvas,e=t.getContext("2d");e.clearRect(0,0,t.width,t.height)},r.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},r.prototype._getLegendWidth=function(){var t;if(this.style===r.STYLE.DOTSIZE){var e=this._dotSize();t=e/2+2*e}else t=this.style===r.STYLE.BARSIZE?this.xBarWidth:20;return t},r.prototype._redrawLegend=function(){if(this.showLegend===!0&&this.style!==r.STYLE.LINE&&this.style!==r.STYLE.BARSIZE){var t=this.style===r.STYLE.BARSIZE||this.style===r.STYLE.DOTSIZE,e=this.style===r.STYLE.DOTSIZE||this.style===r.STYLE.DOTCOLOR||this.style===r.STYLE.BARCOLOR,n=Math.max(.25*this.frame.clientHeight,100),i=this.margin,o=this._getLegendWidth(),s=this.frame.clientWidth-this.margin,a=s-o,h=i+n,u=this._getContext();if(u.lineWidth=1,u.font="14px arial",t===!1){var l,c=0,f=n;for(l=c;l0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},r.prototype.drawAxisLabelY=function(t,e,n,i,r){void 0===r&&(r=0);var o=this._convert3Dto2D(e);Math.cos(2*i)<0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},r.prototype.drawAxisLabelZ=function(t,e,n,i){void 0===i&&(i=0);var r=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(n,r.x-i,r.y)},r.prototype._line3d=function(t,e,n,i){var r=this._convert3Dto2D(e),o=this._convert3Dto2D(n);this._line(t,r,o,i)},r.prototype._redrawAxis=function(){var t,e,n,i,r,o,s,a,h,u,l,c=this._getContext();c.font=24/this.camera.getArmLength()+"px arial";var f=.025/this.scale.x,m=.025/this.scale.y,v=5/this.camera.getArmLength(),g=this.camera.getArmRotation().horizontal,_=new p(Math.cos(g),Math.sin(g)),w=this.xRange,x=this.yRange,b=this.zRange;for(c.lineWidth=1,i=void 0===this.defaultXStep,n=new y(w.min,w.max,this.xStep,i),n.start(!0);!n.end();){var S=n.getCurrent();if(this.showGrid?(t=new d(S,x.min,b.min),e=new d(S,x.max,b.min),this._line3d(c,t,e,this.gridColor)):this.showXAxis&&(t=new d(S,x.min,b.min),e=new d(S,x.min+f,b.min),this._line3d(c,t,e,this.axisColor),t=new d(S,x.max,b.min),e=new d(S,x.max-f,b.min),this._line3d(c,t,e,this.axisColor)),this.showXAxis){s=_.x>0?x.min:x.max;var T=new d(S,s,b.min),D=" "+this.xValueLabel(S)+" ";this.drawAxisLabelX(c,T,D,g,v)}n.next()}for(c.lineWidth=1,i=void 0===this.defaultYStep,n=new y(x.min,x.max,this.yStep,i),n.start(!0);!n.end();){var M=n.getCurrent();if(this.showGrid?(t=new d(w.min,M,b.min),e=new d(w.max,M,b.min),this._line3d(c,t,e,this.gridColor)):this.showYAxis&&(t=new d(w.min,M,b.min),e=new d(w.min+m,M,b.min),this._line3d(c,t,e,this.axisColor),t=new d(w.max,M,b.min),e=new d(w.max-m,M,b.min),this._line3d(c,t,e,this.axisColor)),this.showYAxis){o=_.y>0?w.min:w.max,T=new d(o,M,b.min);var D=" "+this.yValueLabel(M)+" ";this.drawAxisLabelY(c,T,D,g,v)}n.next()}if(this.showZAxis){for(c.lineWidth=1,i=void 0===this.defaultZStep,n=new y(b.min,b.max,this.zStep,i),n.start(!0),o=_.x>0?w.min:w.max,s=_.y<0?x.min:x.max;!n.end();){var k=n.getCurrent(),O=new d(o,s,k),E=this._convert3Dto2D(O);e=new p(E.x-v,E.y),this._line(c,E,e,this.axisColor);var D=this.zValueLabel(k)+" ";this.drawAxisLabelZ(c,O,D,5),n.next()}c.lineWidth=1,t=new d(o,s,b.min),e=new d(o,s,b.max),this._line3d(c,t,e,this.axisColor)}if(this.showXAxis){var C,P;c.lineWidth=1,C=new d(w.min,x.min,b.min),P=new d(w.max,x.min,b.min),this._line3d(c,C,P,this.axisColor),C=new d(w.min,x.max,b.min),P=new d(w.max,x.max,b.min),this._line3d(c,C,P,this.axisColor)}this.showYAxis&&(c.lineWidth=1,t=new d(w.min,x.min,b.min),e=new d(w.min,x.max,b.min),this._line3d(c,t,e,this.axisColor),t=new d(w.max,x.min,b.min),e=new d(w.max,x.max,b.min),this._line3d(c,t,e,this.axisColor));var L=this.xLabel;L.length>0&&this.showXAxis&&(l=.1/this.scale.y,o=(w.max+3*w.min)/4,s=_.x>0?x.min-l:x.max+l,r=new d(o,s,b.min),this.drawAxisLabelX(c,r,L,g));var Y=this.yLabel;Y.length>0&&this.showYAxis&&(u=.1/this.scale.x,o=_.y>0?w.min-u:w.max+u,s=(x.max+3*x.min)/4,r=new d(o,s,b.min),this.drawAxisLabelY(c,r,Y,g));var R=this.zLabel;R.length>0&&this.showZAxis&&(h=30,o=_.x>0?w.min:w.max,s=_.y<0?x.min:x.max,a=(b.max+3*b.min)/4,r=new d(o,s,a),this.drawAxisLabelZ(c,r,R,h))},r.prototype._hsv2rgb=function(t,e,n){var i,r,o,s,a,h;switch(s=n*e,a=Math.floor(t/60),h=s*(1-Math.abs(t/60%2-1)),a){case 0:i=s,r=h,o=0;break;case 1:i=h,r=s,o=0;break;case 2:i=0,r=s,o=h;break;case 3:i=0,r=h,o=s;break;case 4:i=h,r=0,o=s;break;case 5:i=s,r=0,o=h;break;default:i=0,r=0,o=0}return"RGB("+parseInt(255*i)+","+parseInt(255*r)+","+parseInt(255*o)+")"},r.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-(this.eye.z/this.camera.getArmLength())*this.dataColor.strokeWidth:this.dataColor.strokeWidth},r.prototype._redrawBar=function(t,e,n,i,r,o){var s,a,h=this,u=e.point,l=this.zRange.min,c=[{point:new d(u.x-n,u.y-i,u.z)},{point:new d(u.x+n,u.y-i,u.z)},{point:new d(u.x+n,u.y+i,u.z)},{point:new d(u.x-n,u.y+i,u.z)}],f=[{point:new d(u.x-n,u.y-i,l)},{point:new d(u.x+n,u.y-i,l)},{point:new d(u.x+n,u.y+i,l)},{point:new d(u.x-n,u.y+i,l)}];c.forEach(function(t){t.screen=h._convert3Dto2D(t.point)}),f.forEach(function(t){t.screen=h._convert3Dto2D(t.point)});var p=[{corners:c,center:d.avg(f[0].point,f[2].point)},{corners:[c[0],c[1],f[1],f[0]],center:d.avg(f[1].point,f[0].point)},{corners:[c[1],c[2],f[2],f[1]],center:d.avg(f[2].point,f[1].point)},{corners:[c[2],c[3],f[3],f[2]],center:d.avg(f[3].point,f[2].point)},{corners:[c[3],c[0],f[0],f[3]],center:d.avg(f[0].point,f[3].point)}];for(e.surfaces=p,s=0;s0}if(a){var f,p=(e.point.z+n.point.z+i.point.z+r.point.z)/4,m=240*(1-(p-this.zRange.min)*this.scale.z/this.verticalRatio),v=1;this.showShadow?(f=Math.min(1+l.x/c/2,1),o=this._hsv2rgb(m,v,f),s=o):(f=1,o=this._hsv2rgb(m,v,f),s=this.axisColor)}else o="gray",s=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var y=[e,n,r,i];this._polygon(t,y,o,s)}},r.prototype._drawGridLine=function(t,e,n){if(void 0!==e&&void 0!==n){var i=(e.point.z+n.point.z)/2,r=240*(1-(i-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(r,1,1),this._line(t,e.screen,n.screen)}},r.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},r.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},r.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t0?1:t<0?-1:0}var i=e[0],r=e[1],o=e[2],s=n((r.x-i.x)*(t.y-i.y)-(r.y-i.y)*(t.x-i.x)),a=n((o.x-r.x)*(t.y-r.y)-(o.y-r.y)*(t.x-r.x)),h=n((i.x-o.x)*(t.y-o.y)-(i.y-o.y)*(t.x-o.x));return!(0!=s&&0!=a&&s!=a||0!=a&&0!=h&&a!=h||0!=s&&0!=h&&s!=h)},r.prototype._dataPointFromXY=function(t,e){var n,i=100,o=null,s=null,a=null,h=new p(t,e);if(this.style===r.STYLE.BAR||this.style===r.STYLE.BARCOLOR||this.style===r.STYLE.BARSIZE)for(n=this.dataPoints.length-1;n>=0;n--){o=this.dataPoints[n];var u=o.surfaces;if(u)for(var l=u.length-1;l>=0;l--){var c=u[l],f=c.corners,d=[f[0].screen,f[1].screen,f[2].screen],m=[f[2].screen,f[3].screen,f[0].screen];if(this._insideTriangle(h,d)||this._insideTriangle(h,m))return o}}else for(n=0;n"+this.xLabel+":"+t.point.x+""+this.yLabel+":"+t.point.y+""+this.zLabel+":"+t.point.z+"", -e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(n),this.frame.appendChild(i);var r=e.offsetWidth,o=e.offsetHeight,s=n.offsetHeight,a=i.offsetWidth,u=i.offsetHeight,l=t.screen.x-r/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-r),n.style.left=t.screen.x+"px",n.style.top=t.screen.y-s+"px",e.style.left=l+"px",e.style.top=t.screen.y-s-o+"px",i.style.left=t.screen.x-a/2+"px",i.style.top=t.screen.y-u/2+"px"},r.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)}}},r.prototype.setCameraPosition=function(t){_.setCameraPosition(t,this),this.redraw()},r.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=r},function(t,e,n){t.exports={default:n(95),__esModule:!0}},function(t,e,n){n(96),t.exports=n(17).Object.assign},function(t,e,n){var i=n(15);i(i.S+i.F,"Object",{assign:n(97)})},function(t,e,n){var i=n(35),r=n(73),o=n(74),s=n(49),a=n(10),h=Object.assign;t.exports=!h||n(26)(function(){var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach(function(t){e[t]=t}),7!=h({},t)[n]||Object.keys(h({},e)).join("")!=i})?function(t,e){for(var n=s(t),h=arguments.length,u=1,l=r.f,c=o.f;h>u;)for(var f,d=a(arguments[u++]),p=l?i(d).concat(l(d)):i(d),m=p.length,v=0;m>v;)c.call(d,f=p[v++])&&(n[f]=d[f]);return n}:h},function(t,e){function n(t){if(t)return i(t)}function i(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},n.prototype.once=function(t,e){function n(){i.off(t,n),e.apply(this,arguments)}var i=this;return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i,r=0;ro&&(t=i(t)*o),n(e)>o&&(e=i(e)*o),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},r.prototype.getOffset=function(t,e){return this.cameraOffset},r.prototype.setArmLocation=function(t,e,n){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=n,this.calculateCameraOrientation()},r.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()},r.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},r.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())},r.prototype.getArmLength=function(){return this.armLength},r.prototype.getCameraLocation=function(){return this.cameraLocation},r.prototype.getCameraRotation=function(){return this.cameraRotation},r.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;var t=this.cameraRotation.x,e=(this.cameraRotation.y,this.cameraRotation.z),n=this.cameraOffset.x,i=this.cameraOffset.y,r=Math.sin,o=Math.cos;this.cameraLocation.x=this.cameraLocation.x+n*o(e)+i*-r(e)*o(t),this.cameraLocation.y=this.cameraLocation.y+n*r(e)+i*o(e)*o(t),this.cameraLocation.z=this.cameraLocation.z+i*r(t)},t.exports=r},function(t,e,n){t.exports={default:n(103),__esModule:!0}},function(t,e,n){n(104),t.exports=n(17).Math.sign},function(t,e,n){var i=n(15);i(i.S,"Math",{sign:n(105)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){function i(t,e,n){this.data=t,this.column=e,this.graph=n,this.index=void 0,this.value=void 0,this.values=n.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:t0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,n.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var r=n(92);i.prototype.isLoaded=function(){return this.loaded},i.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},i.prototype.getLabel=function(){return this.graph.filterLabel},i.prototype.getColumn=function(){return this.column},i.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},i.prototype.getValues=function(){return this.values},i.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},i.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 n={};n.column=this.column,n.value=this.values[t];var i=new r(this.data,{filter:function(t){return t[n.column]==n.value}}).get();e=this.graph._getDataPoints(i),this.dataPoints[t]=e}return e},i.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},i.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},i.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},i.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},i.prototype.setIndex=function(t){if(!(tthis.values.length-1&&(i=this.values.length-1),i},i.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,n=t/(this.values.length-1)*e,i=n+3;return i},i.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,n=this.startSlideX+e,i=this.leftToIndex(n);this.setIndex(i),r.preventDefault()},i.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",r.removeEventListener(document,"mousemove",this.onmousemove),r.removeEventListener(document,"mouseup",this.onmouseup),r.preventDefault()},t.exports=i},function(t,e){function n(t,e,n,i){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,n,i)}n.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},n.prototype.setRange=function(t,e,n,i){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(n))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t?t:0,this._end=e?e:0,this.setStep(n,i)},n.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),this.prettyStep===!0?this._step=n.calculatePrettyStep(t):this._step=t)},n.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},n=Math.pow(10,Math.round(e(t))),i=2*Math.pow(10,Math.round(e(t/2))),r=5*Math.pow(10,Math.round(e(t/5))),o=n;return Math.abs(i-t)<=Math.abs(o-t)&&(o=i),Math.abs(r-t)<=Math.abs(o-t)&&(o=r),o<=0&&(o=1),o},n.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},n.prototype.getStep=function(){return this._step},n.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()this._end},t.exports=n},function(t,e){function n(){this.min=void 0,this.max=void 0}n.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.maxn)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=n}},n.prototype.range=function(){return this.max-this.min},n.prototype.center=function(){return(this.min+this.max)/2},t.exports=n},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function o(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+o(e)}function a(t,e,n,i){var r,o;for(var a in n)r=n[a],o=s(i,r),e[o]=t[r]}function h(t,e,n,i){var r,o;for(var a in n)r=n[a],void 0!==t[r]&&(o=s(i,r),e[o]=t[r])}function u(t,e){if(void 0===t||r(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");O=t,a(t,e,M),a(t,e,k,"default"),c(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new S(0,0,-1)}function l(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===O||r(O))throw new Error("DEFAULTS not set for module Settings");h(t,e,M),h(t,e,k,"default"),c(t,e)}}function c(t,e){void 0!==t.backgroundColor&&v(t.backgroundColor,e),y(t.dataColor,e),m(t.style,e),f(t.showLegend,e),g(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&x.selectiveDeepExtend(["tooltipStyle"],e,t)}function f(t,e){if(void 0===t){var n=void 0===O.showLegend;if(n){var i=e.style===T.DOTCOLOR||e.style===T.DOTSIZE;e.showLegend=i}}else e.showLegend=t}function d(t){var e=D[t];return void 0===e?-1:e}function p(t){var e=!1;for(var n in T)if(T[n]===t){e=!0;break}return e}function m(t,e){if(void 0!==t){var n;if("string"==typeof t){if(n=d(t),n===-1)throw new Error("Style '"+t+"' is invalid")}else{if(!p(t))throw new Error("Style '"+t+"' is invalid");n=t}e.style=n}}function v(t,e){var n="white",i="gray",r=1;if("string"==typeof t)n=t,i="none",r=0;else{if("object"!==("undefined"==typeof t?"undefined":(0,w.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(n=t.fill),void 0!==t.stroke&&(i=t.stroke),void 0!==t.strokeWidth&&(r=t.strokeWidth)}e.frame.style.backgroundColor=n,e.frame.style.borderColor=i,e.frame.style.borderWidth=r+"px",e.frame.style.borderStyle="solid"}function y(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function g(t,e){var n=t;void 0!==n&&(void 0===e.camera&&(e.camera=new b),e.camera.setArmRotation(n.horizontal,n.vertical),e.camera.setArmLength(n.distance))}var _=n(62),w=i(_),x=n(1),b=n(101),S=n(99),T={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},D={dot:T.DOT,"dot-line":T.DOTLINE,"dot-color":T.DOTCOLOR,"dot-size":T.DOTSIZE,line:T.LINE,grid:T.GRID,surface:T.SURFACE,bar:T.BAR,"bar-color":T.BARCOLOR,"bar-size":T.BARSIZE},M=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],k=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],O=void 0;t.exports.STYLE=T,t.exports.setDefaults=u,t.exports.setOptions=l,t.exports.setCameraPosition=g},function(t,e,n){if("undefined"!=typeof window){var i=n(112),r=window.Hammer||n(113);t.exports=i(r,{preventDefault:"mouse"})}else t.exports=function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,n){var i,r,o;!function(n){r=[],i=n,o="function"==typeof i?i.apply(e,r):i,!(void 0!==o&&(t.exports=o))}(function(){var t=null;return function e(n,i){function r(t){return t.match(/[^ ]+/g)}function o(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 n=!1;e.stopPropagation=function(){n=!0};var i=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof i&&(e.srcEvent.stopPropagation=function(){i(),e.stopPropagation()}),e.firstTarget=t;for(var r=t;r&&!n;){var o=r.hammer;if(o)for(var s,a=0;a0?u._handlers[t]=i:(n.off(t,o),delete u._handlers[t]))}),u},u.emit=function(e,i){t=i.target,n.emit(e,i)},u.destroy=function(){var t=n.element.hammer,e=t.indexOf(u);e!==-1&&t.splice(e,1),t.length||delete n.element.hammer,u._handlers={},n.destroy()},u}})},function(t,e,n){var i;/*! Hammer.JS - v2.0.7 - 2016-04-22 +"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(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){e.util=n(1),e.DOMutil=n(87),e.DataSet=n(88),e.DataView=n(92),e.Queue=n(91),e.Graph3d=n(93),e.graph3d={Camera:n(101),Filter:n(106),Point2d:n(100),Point3d:n(99),Slider:n(107),StepNumber:n(108)},e.moment=n(82),e.Hammer=n(111),e.keycharm=n(114)},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}var r=n(2),o=i(r),s=n(55),a=i(s),h=n(58),u=i(h),l=n(62),c=i(l),f=n(82),d=n(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,n,i){if(e==t)return.5;var r=1/(e-t);return Math.max(0,(i-t)*r)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){var n=p.exec(t);if(n)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return d.v4()},e.assignAllKeys=function(t,e){for(var n in t)t.hasOwnProperty(n)&&"object"!==(0,c.default)(t[n])&&(t[n]=e)},e.fillIfDefined=function(t,n){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var r in t)void 0!==n[r]&&("object"!==(0,c.default)(n[r])?void 0!==n[r]&&null!==n[r]||void 0===t[r]||i!==!0?t[r]=n[r]:delete t[r]:"object"===(0,c.default)(t[r])&&e.fillIfDefined(t[r],n[r],i))},e.protoExtend=function(t,e){for(var n=1;n3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o=2;o3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o in i)if(i.hasOwnProperty(o)&&t.indexOf(o)==-1)if(i[o]&&i[o].constructor===Object)void 0===n[o]&&(n[o]={}),n[o].constructor===Object?e.deepExtend(n[o],i[o]):null===i[o]&&void 0!==n[o]&&r===!0?delete n[o]:n[o]=i[o];else if(Array.isArray(i[o])){n[o]=[];for(var s=0;s=0&&(e="DOMMouseScroll"),t.addEventListener(e,n,i)):t.attachEvent("on"+e,n)},e.removeEventListener=function(t,e,n,i){t.removeEventListener?(void 0===i&&(i=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,n,i)):t.detachEvent("on"+e,n)},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 n=t;n;){if(n===e)return!0;n=n.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,n){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":n||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,n,i){return e+e+n+n+i+i});var n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null},e.overrideOpacity=function(t,n){if(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){var i=t.substr(t.indexOf("(")+1).replace(")","").split(",");return"rgba("+i[0]+","+i[1]+","+i[2]+","+n+")"}var i=e.hexToRGB(t);return null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+n+")"},e.RGBToHex=function(t,e,n){return"#"+((1<<24)+(t<<16)+(e<<8)+n).toString(16).slice(1)},e.parseColor=function(t){var n;if(e.isString(t)===!0){if(e.isValidRGB(t)===!0){var i=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(i[0],i[1],i[2])}if(e.isValidHex(t)===!0){var r=e.hexToHSV(t),o={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},s={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},a=e.HSVToHex(s.h,s.s,s.v),h=e.HSVToHex(o.h,o.s,o.v);n={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else n={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else n={},n.background=t.background||void 0,n.border=t.border||void 0,e.isString(t.highlight)?n.highlight={border:t.highlight,background:t.highlight}:(n.highlight={},n.highlight.background=t.highlight&&t.highlight.background||void 0,n.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?n.hover={border:t.hover,background:t.hover}:(n.hover={},n.hover.background=t.hover&&t.hover.background||void 0,n.hover.border=t.hover&&t.hover.border||void 0);return n},e.RGBToHSV=function(t,e,n){t/=255,e/=255,n/=255;var i=Math.min(t,Math.min(e,n)),r=Math.max(t,Math.max(e,n));if(i==r)return{h:0,s:0,v:i};var o=t==i?e-n:n==i?t-e:n-t,s=t==i?3:n==i?1:5,a=60*(s-o/(r-i))/360,h=(r-i)/r,u=r;return{h:a,s:h,v:u}};var m={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var n=t.split(":"),i=n[0].trim(),r=n[1].trim();e[i]=r}}),e},join:function(t){return(0,u.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,n){var i=m.split(t.style.cssText),r=m.split(n),o=e.extend(i,r);t.style.cssText=m.join(o)},e.removeCssText=function(t,e){var n=m.split(t.style.cssText),i=m.split(e);for(var r in i)i.hasOwnProperty(r)&&delete n[r];t.style.cssText=m.join(n)},e.HSVToRGB=function(t,e,n){var i,r,o,s=Math.floor(6*t),a=6*t-s,h=n*(1-e),u=n*(1-a*e),l=n*(1-(1-a)*e);switch(s%6){case 0:i=n,r=l,o=h;break;case 1:i=u,r=n,o=h;break;case 2:i=h,r=n,o=l;break;case 3:i=h,r=u,o=n;break;case 4:i=l,r=h,o=n;break;case 5:i=n,r=h,o=u}return{r:Math.floor(255*i),g:Math.floor(255*r),b:Math.floor(255*o)}},e.HSVToHex=function(t,n,i){var r=e.HSVToRGB(t,n,i);return e.RGBToHex(r.r,r.g,r.b)},e.hexToHSV=function(t){var n=e.hexToRGB(t);return e.RGBToHSV(n.r,n.g,n.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,n){if("object"==("undefined"==typeof n?"undefined":(0,c.default)(n))){for(var i=(0,a.default)(n),r=0;r0&&e(i,t[r-1])<0;r--)t[r]=t[r-1];t[r]=i}return t},e.mergeOptions=function(t,e,n){var i=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[n])t[n]=(0,a.default)(i[n]);else if(void 0!==e[n])if("boolean"==typeof e[n])t[n].enabled=e[n];else{void 0===e[n].enabled&&(t[n].enabled=!0);for(var r in e[n])e[n].hasOwnProperty(r)&&(t[n][r]=e[n][r])}},e.binarySearchCustom=function(t,e,n,i){for(var r=1e4,o=0,s=0,a=t.length-1;s<=a&&o0)return"before"==i?Math.max(0,h-1):h;if(r(s,e)<0&&r(a,e)>0)return"before"==i?h:Math.min(t.length-1,h+1);r(s,e)<0?c=h+1:f=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var n=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;return n==i&&(i=e.clientWidth),document.body.removeChild(e),n-i},e.topMost=function(t,e){var n=void 0;Array.isArray(e)||(e=[e]);var i=!0,r=!1,s=void 0;try{for(var a,h=(0,o.default)(t);!(i=(a=h.next()).done);i=!0){var u=a.value;if(u){n=u[e[0]];for(var l=1;l=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,n){var i=n(10),r=n(12);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var i=n(14),r=n(15),o=n(30),s=n(20),a=n(31),h=n(8),u=n(32),l=n(46),c=n(48),f=n(47)("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",m="keys",v="values",y=function(){return this};t.exports=function(t,e,n,g,_,w,x){u(n,e,g);var b,S,T,M=function(t){if(!d&&t in E)return E[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},D=e+" Iterator",k=_==v,O=!1,E=t.prototype,C=E[f]||E[p]||_&&E[_],P=C||M(_),L=_?k?M("entries"):P:void 0,Y="Array"==e?E.entries||C:C;if(Y&&(T=c(Y.call(new t)),T!==Object.prototype&&(l(T,D,!0),i||a(T,f)||s(T,f,y))),k&&C&&C.name!==v&&(O=!0,P=function(){return C.call(this)}),i&&!x||!d&&!O&&E[f]||s(E,f,P),h[e]=P,h[D]=y,_)if(b={values:k?P:M(v),keys:w?P:M(m),entries:L},x)for(S in b)S in E||o(E,S,b[S]);else r(r.P+r.F*(d||O),e,b);return b}},function(t,e){t.exports=!0},function(t,e,n){var i=n(16),r=n(17),o=n(18),s=n(20),a="prototype",h=function(t,e,n){var u,l,c,f=t&h.F,d=t&h.G,p=t&h.S,m=t&h.P,v=t&h.B,y=t&h.W,g=d?r:r[e]||(r[e]={}),_=g[a],w=d?i:p?i[e]:(i[e]||{})[a];d&&(n=e);for(u in n)l=!f&&w&&void 0!==w[u],l&&u in g||(c=l?w[u]:n[u],g[u]=d&&"function"!=typeof w[u]?n[u]:v&&l?o(c,i):y&&w[u]==c?function(t){var e=function(e,n,i){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,i)}return t.apply(this,arguments)};return e[a]=t[a],e}(c):m&&"function"==typeof c?o(Function.call,c):c,m&&((g.virtual||(g.virtual={}))[u]=c,t&h.R&&_&&!_[u]&&s(_,u,c)))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){var i=n(19);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var i=n(21),r=n(29);t.exports=n(25)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var i=n(22),r=n(24),o=n(28),s=Object.defineProperty;e.f=n(25)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var i=n(23);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){t.exports=!n(25)&&!n(26)(function(){return 7!=Object.defineProperty(n(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){t.exports=!n(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var i=n(23),r=n(16).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e,n){var i=n(23);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){t.exports=n(20)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var i=n(33),r=n(29),o=n(46),s={};n(20)(s,n(47)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=i(s,{next:r(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var i=n(22),r=n(34),o=n(44),s=n(41)("IE_PROTO"),a=function(){},h="prototype",u=function(){var t,e=n(27)("iframe"),i=o.length,r="<",s=">";for(e.style.display="none",n(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(r+"script"+s+"document.F=Object"+r+"/script"+s),t.close(),u=t.F;i--;)delete u[h][o[i]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(a[h]=i(t),n=new a,a[h]=null,n[s]=t):n=u(),void 0===e?n:r(n,e)}},function(t,e,n){var i=n(21),r=n(22),o=n(35);t.exports=n(25)?Object.defineProperties:function(t,e){r(t);for(var n,s=o(e),a=s.length,h=0;a>h;)i.f(t,n=s[h++],e[n]);return t}},function(t,e,n){var i=n(36),r=n(44);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){var i=n(31),r=n(9),o=n(37)(!1),s=n(41)("IE_PROTO");t.exports=function(t,e){var n,a=r(t),h=0,u=[];for(n in a)n!=s&&i(a,n)&&u.push(n);for(;e.length>h;)i(a,n=e[h++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var i=n(9),r=n(38),o=n(40);t.exports=function(t){return function(e,n,s){var a,h=i(e),u=r(h.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if(a=h[l++],a!=a)return!0}else for(;u>l;l++)if((t||l in h)&&h[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var i=n(39),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){var i=n(39),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(42)("keys"),r=n(43);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e,n){var i=n(16),r="__core-js_shared__",o=i[r]||(i[r]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){t.exports=n(16).document&&document.documentElement},function(t,e,n){var i=n(21).f,r=n(31),o=n(47)("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(42)("wks"),r=n(43),o=n(16).Symbol,s="function"==typeof o,a=t.exports=function(t){return i[t]||(i[t]=s&&o[t]||(s?o:r)("Symbol."+t))};a.store=i},function(t,e,n){var i=n(31),r=n(49),o=n(41)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){var i=n(12);t.exports=function(t){return Object(i(t))}},function(t,e,n){var i=n(51)(!0);n(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var i=n(39),r=n(12);t.exports=function(t){return function(e,n){var o,s,a=String(r(e)),h=i(n),u=a.length;return h<0||h>=u?t?"":void 0:(o=a.charCodeAt(h),o<55296||o>56319||h+1===u||(s=a.charCodeAt(h+1))<56320||s>57343?t?a.charAt(h):o:t?a.slice(h,h+2):(o-55296<<10)+(s-56320)+65536)}}},function(t,e,n){var i=n(22),r=n(53);t.exports=n(17).getIterator=function(t){var e=r(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return i(e.call(t))}},function(t,e,n){var i=n(54),r=n(47)("iterator"),o=n(8);t.exports=n(17).getIteratorMethod=function(t){if(void 0!=t)return t[r]||t["@@iterator"]||o[i(t)]}},function(t,e,n){var i=n(11),r=n(47)("toStringTag"),o="Arguments"==i(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),r))?n:o?i(e):"Object"==(a=i(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){t.exports={default:n(56),__esModule:!0}},function(t,e,n){n(57);var i=n(17).Object;t.exports=function(t,e){return i.create(t,e)}},function(t,e,n){var i=n(15);i(i.S,"Object",{create:n(33)})},function(t,e,n){t.exports={default:n(59),__esModule:!0}},function(t,e,n){n(60),t.exports=n(17).Object.keys},function(t,e,n){var i=n(49),r=n(35);n(61)("keys",function(){return function(t){return r(i(t))}})},function(t,e,n){var i=n(15),r=n(17),o=n(26);t.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],s={};s[t]=e(n),i(i.S+i.F*o(function(){n(1)}),"Object",s)}},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var r=n(63),o=i(r),s=n(66),a=i(s),h="function"==typeof a.default&&"symbol"==typeof o.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(o.default)?function(t){return"undefined"==typeof t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":h(t)}},function(t,e,n){t.exports={default:n(64),__esModule:!0}},function(t,e,n){n(50),n(4),t.exports=n(65).f("iterator")},function(t,e,n){e.f=n(47)},function(t,e,n){t.exports={default:n(67),__esModule:!0}},function(t,e,n){n(68),n(79),n(80),n(81),t.exports=n(17).Symbol},function(t,e,n){var i=n(16),r=n(31),o=n(25),s=n(15),a=n(30),h=n(69).KEY,u=n(26),l=n(42),c=n(46),f=n(43),d=n(47),p=n(65),m=n(70),v=n(71),y=n(72),g=n(75),_=n(22),w=n(9),x=n(28),b=n(29),S=n(33),T=n(76),M=n(78),D=n(21),k=n(35),O=M.f,E=D.f,C=T.f,P=i.Symbol,L=i.JSON,Y=L&&L.stringify,R="prototype",A=d("_hidden"),I=d("toPrimitive"),N={}.propertyIsEnumerable,z=l("symbol-registry"),W=l("symbols"),F=l("op-symbols"),j=Object[R],V="function"==typeof P,G=i.QObject,B=!G||!G[R]||!G[R].findChild,U=o&&u(function(){return 7!=S(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a})?function(t,e,n){var i=O(j,e);i&&delete j[e],E(t,e,n),i&&t!==j&&E(j,e,i)}:E,H=function(t){var e=W[t]=S(P[R]);return e._k=t,e},X=V&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},Z=function(t,e,n){return t===j&&Z(F,e,n),_(t),e=x(e,!0),_(n),r(W,e)?(n.enumerable?(r(t,A)&&t[A][e]&&(t[A][e]=!1),n=S(n,{enumerable:b(0,!1)})):(r(t,A)||E(t,A,b(1,{})),t[A][e]=!0),U(t,e,n)):E(t,e,n)},q=function(t,e){_(t);for(var n,i=y(e=w(e)),r=0,o=i.length;o>r;)Z(t,n=i[r++],e[n]);return t},$=function(t,e){return void 0===e?S(t):q(S(t),e)},J=function(t){var e=N.call(this,t=x(t,!0));return!(this===j&&r(W,t)&&!r(F,t))&&(!(e||!r(this,t)||!r(W,t)||r(this,A)&&this[A][t])||e)},Q=function(t,e){if(t=w(t),e=x(e,!0),t!==j||!r(W,e)||r(F,e)){var n=O(t,e);return!n||!r(W,e)||r(t,A)&&t[A][e]||(n.enumerable=!0),n}},K=function(t){for(var e,n=C(w(t)),i=[],o=0;n.length>o;)r(W,e=n[o++])||e==A||e==h||i.push(e);return i},tt=function(t){for(var e,n=t===j,i=C(n?F:w(t)),o=[],s=0;i.length>s;)!r(W,e=i[s++])||n&&!r(j,e)||o.push(W[e]);return o};V||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(n){this===j&&e.call(F,n),r(this,A)&&r(this[A],t)&&(this[A][t]=!1),U(this,t,b(1,n))};return o&&B&&U(j,t,{configurable:!0,set:e}),H(t)},a(P[R],"toString",function(){return this._k}),M.f=Q,D.f=Z,n(77).f=T.f=K,n(74).f=J,n(73).f=tt,o&&!n(14)&&a(j,"propertyIsEnumerable",J,!0),p.f=function(t){return H(d(t))}),s(s.G+s.W+s.F*!V,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)d(et[nt++]);for(var et=k(d.store),nt=0;et.length>nt;)m(et[nt++]);s(s.S+s.F*!V,"Symbol",{for:function(t){return r(z,t+="")?z[t]:z[t]=P(t)},keyFor:function(t){if(X(t))return v(z,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){B=!0},useSimple:function(){B=!1}}),s(s.S+s.F*!V,"Object",{create:$,defineProperty:Z,defineProperties:q,getOwnPropertyDescriptor:Q,getOwnPropertyNames:K,getOwnPropertySymbols:tt}),L&&s(s.S+s.F*(!V||u(function(){var t=P();return"[null]"!=Y([t])||"{}"!=Y({a:t})||"{}"!=Y(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!X(t)){for(var e,n,i=[t],r=1;arguments.length>r;)i.push(arguments[r++]);return e=i[1],"function"==typeof e&&(n=e),!n&&g(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!X(e))return e}),i[1]=e,Y.apply(L,i)}}}),P[R][I]||n(20)(P[R],I,P[R].valueOf),c(P,"Symbol"),c(Math,"Math",!0),c(i.JSON,"JSON",!0)},function(t,e,n){var i=n(43)("meta"),r=n(23),o=n(31),s=n(21).f,a=0,h=Object.isExtensible||function(){return!0},u=!n(26)(function(){return h(Object.preventExtensions({}))}),l=function(t){s(t,i,{value:{i:"O"+ ++a,w:{}}})},c=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[i].i},f=function(t,e){if(!o(t,i)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[i].w},d=function(t){return u&&p.NEED&&h(t)&&!o(t,i)&&l(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:c,getWeak:f,onFreeze:d}},function(t,e,n){var i=n(16),r=n(17),o=n(14),s=n(65),a=n(21).f;t.exports=function(t){var e=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,n){var i=n(35),r=n(9);t.exports=function(t,e){for(var n,o=r(t),s=i(o),a=s.length,h=0;a>h;)if(o[n=s[h++]]===e)return n}},function(t,e,n){var i=n(35),r=n(73),o=n(74);t.exports=function(t){var e=i(t),n=r.f;if(n)for(var s,a=n(t),h=o.f,u=0;a.length>u;)h.call(t,s=a[u++])&&e.push(s);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var i=n(11);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,e,n){var i=n(9),r=n(77).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return r(t)}catch(t){return s.slice()}};t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?a(t):r(i(t))}},function(t,e,n){var i=n(36),r=n(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},function(t,e,n){var i=n(74),r=n(29),o=n(9),s=n(28),a=n(31),h=n(24),u=Object.getOwnPropertyDescriptor;e.f=n(25)?u:function(t,e){if(t=o(t),e=s(e,!0),h)try{return u(t,e)}catch(t){}if(a(t,e))return r(!i.f.call(t,e),t[e])}},function(t,e){},function(t,e,n){n(70)("asyncIterator")},function(t,e,n){n(70)("observable")},function(t,e,n){t.exports="undefined"!=typeof window&&window.moment||n(83)},function(t,e,n){(function(t){!function(e,n){t.exports=n()}(this,function(){function e(){return wi.apply(null,arguments)}function n(t){wi=t}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){var e;for(e in t)return!1;return!0}function s(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n0)for(n=0;n0?"future":"past"];return D(n)?n(e):n.replace(/%s/i,e)}function I(t,e){var n=t.toLowerCase();Ai[n]=Ai[n+"s"]=Ai[e]=t}function N(t){return"string"==typeof t?Ai[t]||Ai[t.toLowerCase()]:void 0}function z(t){var e,n,i={};for(n in t)l(t,n)&&(e=N(n),e&&(i[e]=t[n]));return i}function W(t,e){Ii[t]=e}function F(t){var e=[];for(var n in t)e.push({unit:n,priority:Ii[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,n){return function(i){return null!=i?(G(this,t,i),e.updateOffset(this,n),this):V(this,t)}}function V(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function G(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function B(t){return t=N(t),D(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=z(t);for(var n=F(t),i=0;i=0;return(o?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+i}function X(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return this[i]()}),t&&(Fi[t]=r),e&&(Fi[e[0]]=function(){return H(r.apply(this,arguments),e[1],e[2])}),n&&(Fi[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function Z(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function q(t){var e,n,i=t.match(Ni);for(e=0,n=i.length;e=0&&zi.test(t);)t=t.replace(zi,n),zi.lastIndex=0,i-=1;return t}function Q(t,e,n){rr[t]=D(e)?e:function(t,i){return t&&n?n:e}}function K(t,e){return l(rr,t)?rr[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,r){return e||n||i||r}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function nt(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),a(e)&&(i=function(t,n){n[e]=x(t)}),n=0;n=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function wt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function xt(t,e,n){var i=7+e-n,r=(7+wt(t,0,i).getUTCDay()-e)%7;return-r+i-1}function bt(t,e,n,i,r){var o,s,a=(7+n-i)%7,h=xt(t,i,r),u=1+7*(e-1)+a+h;return u<=0?(o=t-1,s=vt(o)+u):u>vt(t)?(o=t+1,s=u-vt(t)):(o=t,s=u),{year:o,dayOfYear:s}}function St(t,e,n){var i,r,o=xt(t.year(),e,n),s=Math.floor((t.dayOfYear()-o-1)/7)+1;return s<1?(r=t.year()-1,i=s+Tt(r,e,n)):s>Tt(t.year(),e,n)?(i=s-Tt(t.year(),e,n),r=t.year()+1):(r=t.year(),i=s),{week:i,year:r}}function Tt(t,e,n){var i=xt(t,e,n),r=xt(t+1,e,n);return(vt(t)-i+r)/7}function Mt(t){return St(t,this._week.dow,this._week.doy).week}function Dt(){return this._week.dow}function kt(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=St(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ct(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Lt(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Yt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Rt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function At(t,e,n){var i,r,o,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)o=f([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===e?(r=mr.call(this._weekdaysParse,s),r!==-1?r:null):"ddd"===e?(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:null):(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null):"dddd"===e?(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null))):"ddd"===e?(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:null))):(r=mr.call(this._minWeekdaysParse,s),r!==-1?r:(r=mr.call(this._weekdaysParse,s),r!==-1?r:(r=mr.call(this._shortWeekdaysParse,s),r!==-1?r:null)))}function It(t,e,n){var i,r,o;if(this._weekdaysParseExact)return At.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(r=f([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(r,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(r,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(r,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(o="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function Nt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ct(t,this.localeData()),this.add(t-e,"d")):e}function zt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Wt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ft(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Dr),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function jt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=kr),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Vt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Or),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Gt(){function t(t,e){return e.length-t.length}var e,n,i,r,o,s=[],a=[],h=[],u=[];for(e=0;e<7;e++)n=f([2e3,1]).day(e),i=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),o=this.weekdays(n,""),s.push(i),a.push(r),h.push(o),u.push(i),u.push(r),u.push(o);for(s.sort(t),a.sort(t),h.sort(t),u.sort(t),e=0;e<7;e++)a[e]=et(a[e]),h[e]=et(h[e]),u[e]=et(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Bt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function Ht(t,e){X(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Xt(t,e){return e._meridiemParse}function Zt(t){return"p"===(t+"").toLowerCase().charAt(0)}function qt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function $t(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,n,i,r,o=0;o0;){if(i=Qt(r.slice(0,e).join("-")))return i;if(n&&n.length>=e&&b(r,n,!0)>=e-1)break;e--}o++}return null}function Qt(e){var n=null;if(!Yr[e]&&"undefined"!=typeof t&&t&&t.exports)try{n=Er._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Kt(n)}catch(t){}return Yr[e]}function Kt(t,e){var n;return t&&(n=s(e)?ne(t):te(t,e),n&&(Er=n)),Er._abbr}function te(t,e){if(null!==e){var n=Lr;if(e.abbr=t,null!=Yr[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Yr[t]._config;else if(null!=e.parentLocale){if(null==Yr[e.parentLocale])return Rr[e.parentLocale]||(Rr[e.parentLocale]=[]),Rr[e.parentLocale].push({name:t,config:e}),null;n=Yr[e.parentLocale]._config}return Yr[t]=new E(O(n,e)),Rr[t]&&Rr[t].forEach(function(t){te(t.name,t.config)}),Kt(t),Yr[t]}return delete Yr[t],null}function ee(t,e){if(null!=e){var n,i=Lr;null!=Yr[t]&&(i=Yr[t]._config),e=O(i,e),n=new E(e),n.parentLocale=Yr[t],Yr[t]=n,Kt(t)}else null!=Yr[t]&&(null!=Yr[t].parentLocale?Yr[t]=Yr[t].parentLocale:null!=Yr[t]&&delete Yr[t]);return Yr[t]}function ne(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Er;if(!i(t)){if(e=Qt(t))return e;t=[t]}return Jt(t)}function ie(){return Oi(Yr)}function re(t){var e,n=t._a;return n&&p(t).overflow===-2&&(e=n[ar]<0||n[ar]>11?ar:n[hr]<1||n[hr]>ot(n[sr],n[ar])?hr:n[ur]<0||n[ur]>24||24===n[ur]&&(0!==n[lr]||0!==n[cr]||0!==n[fr])?ur:n[lr]<0||n[lr]>59?lr:n[cr]<0||n[cr]>59?cr:n[fr]<0||n[fr]>999?fr:-1,p(t)._overflowDayOfYear&&(ehr)&&(e=hr),p(t)._overflowWeeks&&e===-1&&(e=dr),p(t)._overflowWeekday&&e===-1&&(e=pr),p(t).overflow=e),t}function oe(t){var e,n,i,r,o,s,a=t._i,h=Ar.exec(a)||Ir.exec(a);if(h){for(p(t).iso=!0,e=0,n=zr.length;e10?"YYYY ":"YY "),o="HH:mm"+(n[4]?":ss":""),n[1]){var c=new Date(n[2]),f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][c.getDay()];if(n[1].substr(0,3)!==f)return p(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(n[5].length){case 2:0===h?a=" +0000":(h=l.indexOf(n[5][1].toUpperCase())-12,a=(h<0?" -":" +")+(""+h).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=u[n[5]];break;default:a=u[" GMT"]}n[5]=a,t._i=n.splice(1).join(""),s=" ZZ",t._f=i+r+o+s,fe(t),p(t).rfc2822=!0}else t._isValid=!1}function ae(t){var n=Fr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(oe(t),void(t._isValid===!1&&(delete t._isValid,se(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function he(t,e,n){return null!=t?t:null!=e?e:n}function ue(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function le(t){var e,n,i,r,o=[];if(!t._d){for(i=ue(t),t._w&&null==t._a[hr]&&null==t._a[ar]&&ce(t),null!=t._dayOfYear&&(r=he(t._a[sr],i[sr]),(t._dayOfYear>vt(r)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=wt(r,0,t._dayOfYear),t._a[ar]=n.getUTCMonth(),t._a[hr]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=o[e]=i[e];for(;e<7;e++)t._a[e]=o[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ur]&&0===t._a[lr]&&0===t._a[cr]&&0===t._a[fr]&&(t._nextDay=!0,t._a[ur]=0),t._d=(t._useUTC?wt:_t).apply(null,o),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ur]=24)}}function ce(t){var e,n,i,r,o,s,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)o=1,s=4,n=he(e.GG,t._a[sr],St(we(),1,4).year),i=he(e.W,1),r=he(e.E,1),(r<1||r>7)&&(h=!0);else{o=t._locale._week.dow,s=t._locale._week.doy;var u=St(we(),o,s);n=he(e.gg,t._a[sr],u.year),i=he(e.w,u.week),null!=e.d?(r=e.d,(r<0||r>6)&&(h=!0)):null!=e.e?(r=e.e+o,(e.e<0||e.e>6)&&(h=!0)):r=o}i<1||i>Tt(n,o,s)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=bt(n,i,r,o,s),t._a[sr]=a.year,t._dayOfYear=a.dayOfYear)}function fe(t){if(t._f===e.ISO_8601)return void oe(t);if(t._f===e.RFC_2822)return void se(t);t._a=[],p(t).empty=!0;var n,i,r,o,s,a=""+t._i,h=a.length,u=0;for(r=J(t._f,t._locale).match(Ni)||[],n=0;n0&&p(t).unusedInput.push(s),a=a.slice(a.indexOf(i)+i.length),u+=i.length),Fi[o]?(i?p(t).empty=!1:p(t).unusedTokens.push(o),rt(o,i,t)):t._strict&&!i&&p(t).unusedTokens.push(o);p(t).charsLeftOver=h-u,a.length>0&&p(t).unusedInput.push(a),t._a[ur]<=12&&p(t).bigHour===!0&&t._a[ur]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[ur]=de(t._locale,t._a[ur],t._meridiem),le(t),re(t)}function de(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function pe(t){var e,n,i,r,o;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;rthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function je(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?f(t._a):we(t._a);this._isDSTShifted=this.isValid()&&b(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Ve(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Be(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var n,i,r,o=t,s=null;return Oe(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(o={},e?o[e]=t:o.milliseconds=t):(s=Xr.exec(t))?(n="-"===s[1]?-1:1,o={y:0,d:x(s[hr])*n,h:x(s[ur])*n,m:x(s[lr])*n,s:x(s[cr])*n,ms:x(Ee(1e3*s[fr]))*n}):(s=Zr.exec(t))?(n="-"===s[1]?-1:1,o={y:He(s[2],n),M:He(s[3],n),w:He(s[4],n),d:He(s[5],n),h:He(s[6],n),m:He(s[7],n),s:He(s[8],n)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=Ze(we(o.from),we(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),i=new ke(o),Oe(t)&&l(t,"_locale")&&(i._locale=t._locale),i}function He(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Xe(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ze(t,e){var n;return t.isValid()&&e.isValid()?(e=Le(e,t),t.isBefore(e)?n=Xe(t,e):(n=Xe(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function qe(t,e){return function(n,i){var r,o;return null===i||isNaN(+i)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=i,i=o),n="string"==typeof n?+n:n,r=Ue(n,i),$e(this,r,t),this}}function $e(t,n,i,r){var o=n._milliseconds,s=Ee(n._days),a=Ee(n._months);t.isValid()&&(r=null==r||r,o&&t._d.setTime(t._d.valueOf()+o*i),s&&G(t,"Date",V(t,"Date")+s*i),a&<(t,V(t,"Month")+a*i),r&&e.updateOffset(t,s||a))}function Je(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Qe(t,n){var i=t||we(),r=Le(i,this).startOf("day"),o=e.calendarFormat(this,r)||"sameElse",s=n&&(D(n[o])?n[o].call(this,i):n[o]);return this.format(s||this.localeData().calendar(o,this,we(i)))}function Ke(){return new g(this)}function tn(t,e){var n=_(t)?t:we(t);return!(!this.isValid()||!n.isValid())&&(e=N(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()9999?$(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):D(Date.prototype.toISOString)?this.toDate().toISOString():$(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function cn(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r="-MM-DD[T]HH:mm:ss.SSS",o=e+'[")]';return this.format(n+i+r+o)}function fn(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=$(this,t);return this.localeData().postformat(n)}function dn(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function pn(t){return this.from(we(),t)}function mn(t,e){return this.isValid()&&(_(t)&&t.isValid()||we(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function vn(t){return this.to(we(),t)}function yn(t){var e;return void 0===t?this._locale._abbr:(e=ne(t),null!=e&&(this._locale=e),this)}function gn(){return this._locale}function _n(t){switch(t=N(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function wn(t){return t=N(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function xn(){return this._d.valueOf()-6e4*(this._offset||0)}function bn(){return Math.floor(this.valueOf()/1e3)}function Sn(){return new Date(this.valueOf())}function Tn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Mn(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Dn(){return this.isValid()?this.toISOString():null}function kn(){return m(this)}function On(){return c({},p(this))}function En(){return p(this).overflow}function Cn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Pn(t,e){X(0,[t,t.length],0,e)}function Ln(t){return In.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Yn(t){return In.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Rn(){return Tt(this.year(),1,4)}function An(){var t=this.localeData()._week;return Tt(this.year(),t.dow,t.doy)}function In(t,e,n,i,r){var o;return null==t?St(this,i,r).year:(o=Tt(t,i,r),e>o&&(e=o),Nn.call(this,t,e,n,i,r))}function Nn(t,e,n,i,r){var o=bt(t,e,n,i,r),s=wt(o.year,0,o.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function zn(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Wn(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 Fn(t,e){e[fr]=x(1e3*("0."+t))}function jn(){return this._isUTC?"UTC":""}function Vn(){return this._isUTC?"Coordinated Universal Time":""}function Gn(t){return we(1e3*t)}function Bn(){return we.apply(null,arguments).parseZone()}function Un(t){return t}function Hn(t,e,n,i){var r=ne(),o=f().set(i,e);return r[n](o,t)}function Xn(t,e,n){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Hn(t,e,n,"month");var i,r=[];for(i=0;i<12;i++)r[i]=Hn(t,i,n,"month");return r}function Zn(t,e,n,i){"boolean"==typeof t?(a(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,a(e)&&(n=e,e=void 0),e=e||"");var r=ne(),o=t?r._week.dow:0; +if(null!=n)return Hn(e,(n+o)%7,i,"day");var s,h=[];for(s=0;s<7;s++)h[s]=Hn(e,(s+o)%7,i,"day");return h}function qn(t,e){return Xn(t,e,"months")}function $n(t,e){return Xn(t,e,"monthsShort")}function Jn(t,e,n){return Zn(t,e,n,"weekdays")}function Qn(t,e,n){return Zn(t,e,n,"weekdaysShort")}function Kn(t,e,n){return Zn(t,e,n,"weekdaysMin")}function ti(){var t=this._data;return this._milliseconds=oo(this._milliseconds),this._days=oo(this._days),this._months=oo(this._months),t.milliseconds=oo(t.milliseconds),t.seconds=oo(t.seconds),t.minutes=oo(t.minutes),t.hours=oo(t.hours),t.months=oo(t.months),t.years=oo(t.years),this}function ei(t,e,n,i){var r=Ue(e,n);return t._milliseconds+=i*r._milliseconds,t._days+=i*r._days,t._months+=i*r._months,t._bubble()}function ni(t,e){return ei(this,t,e,1)}function ii(t,e){return ei(this,t,e,-1)}function ri(t){return t<0?Math.floor(t):Math.ceil(t)}function oi(){var t,e,n,i,r,o=this._milliseconds,s=this._days,a=this._months,h=this._data;return o>=0&&s>=0&&a>=0||o<=0&&s<=0&&a<=0||(o+=864e5*ri(ai(a)+s),s=0,a=0),h.milliseconds=o%1e3,t=w(o/1e3),h.seconds=t%60,e=w(t/60),h.minutes=e%60,n=w(e/60),h.hours=n%24,s+=w(n/24),r=w(si(s)),a+=r,s-=ri(ai(r)),i=w(a/12),a%=12,h.days=s,h.months=a,h.years=i,this}function si(t){return 4800*t/146097}function ai(t){return 146097*t/4800}function hi(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if(t=N(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+si(e),"month"===t?n:n/12;switch(e=this._days+Math.round(ai(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function ui(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*x(this._months/12):NaN}function li(t){return function(){return this.as(t)}}function ci(t){return t=N(t),this.isValid()?this[t+"s"]():NaN}function fi(t){return function(){return this.isValid()?this._data[t]:NaN}}function di(){return w(this.days()/7)}function pi(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}function mi(t,e,n){var i=Ue(t).abs(),r=bo(i.as("s")),o=bo(i.as("m")),s=bo(i.as("h")),a=bo(i.as("d")),h=bo(i.as("M")),u=bo(i.as("y")),l=r<=So.ss&&["s",r]||r0,l[4]=n,pi.apply(null,l)}function vi(t){return void 0===t?bo:"function"==typeof t&&(bo=t,!0)}function yi(t,e){return void 0!==So[t]&&(void 0===e?So[t]:(So[t]=e,"s"===t&&(So.ss=e-1),!0))}function gi(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=mi(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function _i(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,i=To(this._milliseconds)/1e3,r=To(this._days),o=To(this._months);t=w(i/60),e=w(t/60),i%=60,t%=60,n=w(o/12),o%=12;var s=n,a=o,h=r,u=e,l=t,c=i,f=this.asSeconds();return f?(f<0?"-":"")+"P"+(s?s+"Y":"")+(a?a+"M":"")+(h?h+"D":"")+(u||l||c?"T":"")+(u?u+"H":"")+(l?l+"M":"")+(c?c+"S":""):"P0D"}var wi,xi;xi=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i68?1900:2e3)};var xr=j("FullYear",!0);X("w",["ww",2],"wo","week"),X("W",["WW",2],"Wo","isoWeek"),I("week","w"),I("isoWeek","W"),W("week",5),W("isoWeek",5),Q("w",Hi),Q("ww",Hi,Vi),Q("W",Hi),Q("WW",Hi,Vi),it(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=x(t)});var br={dow:0,doy:6};X("d",0,"do","day"),X("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),X("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),X("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),X("e",0,0,"weekday"),X("E",0,0,"isoWeekday"),I("day","d"),I("weekday","e"),I("isoWeekday","E"),W("day",11),W("weekday",11),W("isoWeekday",11),Q("d",Hi),Q("e",Hi),Q("E",Hi),Q("dd",function(t,e){return e.weekdaysMinRegex(t)}),Q("ddd",function(t,e){return e.weekdaysShortRegex(t)}),Q("dddd",function(t,e){return e.weekdaysRegex(t)}),it(["dd","ddd","dddd"],function(t,e,n,i){var r=n._locale.weekdaysParse(t,i,n._strict);null!=r?e.d=r:p(n).invalidWeekday=t}),it(["d","e","E"],function(t,e,n,i){e[i]=x(t)});var Sr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Tr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Mr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Dr=ir,kr=ir,Or=ir;X("H",["HH",2],0,"hour"),X("h",["hh",2],0,Bt),X("k",["kk",2],0,Ut),X("hmm",0,0,function(){return""+Bt.apply(this)+H(this.minutes(),2)}),X("hmmss",0,0,function(){return""+Bt.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)}),X("Hmm",0,0,function(){return""+this.hours()+H(this.minutes(),2)}),X("Hmmss",0,0,function(){return""+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)}),Ht("a",!0),Ht("A",!1),I("hour","h"),W("hour",13),Q("a",Xt),Q("A",Xt),Q("H",Hi),Q("h",Hi),Q("k",Hi),Q("HH",Hi,Vi),Q("hh",Hi,Vi),Q("kk",Hi,Vi),Q("hmm",Xi),Q("hmmss",Zi),Q("Hmm",Xi),Q("Hmmss",Zi),nt(["H","HH"],ur),nt(["k","kk"],function(t,e,n){var i=x(t);e[ur]=24===i?0:i}),nt(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),nt(["h","hh"],function(t,e,n){e[ur]=x(t),p(n).bigHour=!0}),nt("hmm",function(t,e,n){var i=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i)),p(n).bigHour=!0}),nt("hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i,2)),e[cr]=x(t.substr(r)),p(n).bigHour=!0}),nt("Hmm",function(t,e,n){var i=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i))}),nt("Hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[ur]=x(t.substr(0,i)),e[lr]=x(t.substr(i,2)),e[cr]=x(t.substr(r))});var Er,Cr=/[ap]\.?m?\.?/i,Pr=j("Hours",!0),Lr={calendar:Ei,longDateFormat:Ci,invalidDate:Pi,ordinal:Li,dayOfMonthOrdinalParse:Yi,relativeTime:Ri,months:yr,monthsShort:gr,week:br,weekdays:Sr,weekdaysMin:Mr,weekdaysShort:Tr,meridiemParse:Cr},Yr={},Rr={},Ar=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ir=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nr=/Z|[+-]\d\d(?::?\d\d)?/,zr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Fr=/^\/?Date\((\-?\d+)/i,jr=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=T("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Vr=T("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=we.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:v()}),Br=function(){return Date.now?Date.now():+new Date},Ur=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ce("Z",":"),Ce("ZZ",""),Q("Z",er),Q("ZZ",er),nt(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Pe(er,t)});var Hr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xr=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Zr=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=ke.prototype,Ue.invalid=De;var qr=qe(1,"add"),$r=qe(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Jr=T("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)});X(0,["gg",2],0,function(){return this.weekYear()%100}),X(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Pn("gggg","weekYear"),Pn("ggggg","weekYear"),Pn("GGGG","isoWeekYear"),Pn("GGGGG","isoWeekYear"),I("weekYear","gg"),I("isoWeekYear","GG"),W("weekYear",1),W("isoWeekYear",1),Q("G",Ki),Q("g",Ki),Q("GG",Hi,Vi),Q("gg",Hi,Vi),Q("GGGG",$i,Bi),Q("gggg",$i,Bi),Q("GGGGG",Ji,Ui),Q("ggggg",Ji,Ui),it(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=x(t)}),it(["gg","GG"],function(t,n,i,r){n[r]=e.parseTwoDigitYear(t)}),X("Q",0,"Qo","quarter"),I("quarter","Q"),W("quarter",7),Q("Q",ji),nt("Q",function(t,e){e[ar]=3*(x(t)-1)}),X("D",["DD",2],"Do","date"),I("date","D"),W("date",9),Q("D",Hi),Q("DD",Hi,Vi),Q("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),nt(["D","DD"],hr),nt("Do",function(t,e){e[hr]=x(t.match(Hi)[0],10)});var Qr=j("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),I("dayOfYear","DDD"),W("dayOfYear",4),Q("DDD",qi),Q("DDDD",Gi),nt(["DDD","DDDD"],function(t,e,n){n._dayOfYear=x(t)}),X("m",["mm",2],0,"minute"),I("minute","m"),W("minute",14),Q("m",Hi),Q("mm",Hi,Vi),nt(["m","mm"],lr);var Kr=j("Minutes",!1);X("s",["ss",2],0,"second"),I("second","s"),W("second",15),Q("s",Hi),Q("ss",Hi,Vi),nt(["s","ss"],cr);var to=j("Seconds",!1);X("S",0,0,function(){return~~(this.millisecond()/100)}),X(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,function(){return 10*this.millisecond()}),X(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),X(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),X(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),X(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),X(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),I("millisecond","ms"),W("millisecond",16),Q("S",qi,ji),Q("SS",qi,Vi),Q("SSS",qi,Gi);var eo;for(eo="SSSS";eo.length<=9;eo+="S")Q(eo,Qi);for(eo="S";eo.length<=9;eo+="S")nt(eo,Fn);var no=j("Milliseconds",!1);X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");var io=g.prototype;io.add=qr,io.calendar=Qe,io.clone=Ke,io.diff=an,io.endOf=wn,io.format=fn,io.from=dn,io.fromNow=pn,io.to=mn,io.toNow=vn,io.get=B,io.invalidAt=En,io.isAfter=tn,io.isBefore=en,io.isBetween=nn,io.isSame=rn,io.isSameOrAfter=on,io.isSameOrBefore=sn,io.isValid=kn,io.lang=Jr,io.locale=yn,io.localeData=gn,io.max=Gr,io.min=Vr,io.parsingFlags=On,io.set=U,io.startOf=_n,io.subtract=$r,io.toArray=Tn,io.toObject=Mn,io.toDate=Sn,io.toISOString=ln,io.inspect=cn,io.toJSON=Dn,io.toString=un,io.unix=bn,io.valueOf=xn,io.creationData=Cn,io.year=xr,io.isLeapYear=gt,io.weekYear=Ln,io.isoWeekYear=Yn,io.quarter=io.quarters=zn,io.month=ct,io.daysInMonth=ft,io.week=io.weeks=Ot,io.isoWeek=io.isoWeeks=Et,io.weeksInYear=An,io.isoWeeksInYear=Rn,io.date=Qr,io.day=io.days=Nt,io.weekday=zt,io.isoWeekday=Wt,io.dayOfYear=Wn,io.hour=io.hours=Pr,io.minute=io.minutes=Kr,io.second=io.seconds=to,io.millisecond=io.milliseconds=no,io.utcOffset=Re,io.utc=Ie,io.local=Ne,io.parseZone=ze,io.hasAlignedHourOffset=We,io.isDST=Fe,io.isLocal=Ve,io.isUtcOffset=Ge,io.isUtc=Be,io.isUTC=Be,io.zoneAbbr=jn,io.zoneName=Vn,io.dates=T("dates accessor is deprecated. Use date instead.",Qr),io.months=T("months accessor is deprecated. Use month instead",ct),io.years=T("years accessor is deprecated. Use year instead",xr),io.zone=T("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ae),io.isDSTShifted=T("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",je);var ro=E.prototype;ro.calendar=C,ro.longDateFormat=P,ro.invalidDate=L,ro.ordinal=Y,ro.preparse=Un,ro.postformat=Un,ro.relativeTime=R,ro.pastFuture=A,ro.set=k,ro.months=st,ro.monthsShort=at,ro.monthsParse=ut,ro.monthsRegex=pt,ro.monthsShortRegex=dt,ro.week=Mt,ro.firstDayOfYear=kt,ro.firstDayOfWeek=Dt,ro.weekdays=Lt,ro.weekdaysMin=Rt,ro.weekdaysShort=Yt,ro.weekdaysParse=It,ro.weekdaysRegex=Ft,ro.weekdaysShortRegex=jt,ro.weekdaysMinRegex=Vt,ro.isPM=Zt,ro.meridiem=qt,Kt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===x(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),e.lang=T("moment.lang is deprecated. Use moment.locale instead.",Kt),e.langData=T("moment.langData is deprecated. Use moment.localeData instead.",ne);var oo=Math.abs,so=li("ms"),ao=li("s"),ho=li("m"),uo=li("h"),lo=li("d"),co=li("w"),fo=li("M"),po=li("y"),mo=fi("milliseconds"),vo=fi("seconds"),yo=fi("minutes"),go=fi("hours"),_o=fi("days"),wo=fi("months"),xo=fi("years"),bo=Math.round,So={ss:44,s:45,m:45,h:22,d:26,M:11},To=Math.abs,Mo=ke.prototype;return Mo.isValid=Me,Mo.abs=ti,Mo.add=ni,Mo.subtract=ii,Mo.as=hi,Mo.asMilliseconds=so,Mo.asSeconds=ao,Mo.asMinutes=ho,Mo.asHours=uo,Mo.asDays=lo,Mo.asWeeks=co,Mo.asMonths=fo,Mo.asYears=po,Mo.valueOf=ui,Mo._bubble=oi,Mo.get=ci,Mo.milliseconds=mo,Mo.seconds=vo,Mo.minutes=yo,Mo.hours=go,Mo.days=_o,Mo.weeks=di,Mo.months=wo,Mo.years=xo,Mo.humanize=gi,Mo.toISOString=_i,Mo.toString=_i,Mo.toJSON=_i,Mo.locale=yn,Mo.localeData=gn,Mo.toIsoString=T("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",_i),Mo.lang=Jr,X("X",0,0,"unix"),X("x",0,0,"valueOf"),Q("x",Ki),Q("X",nr),nt("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),nt("x",function(t,e,n){n._d=new Date(x(t))}),e.version="2.18.1",n(we),e.fn=io,e.min=be,e.max=Se,e.now=Br,e.utc=f,e.unix=Gn,e.months=qn,e.isDate=h,e.locale=Kt,e.invalid=v,e.duration=Ue,e.isMoment=_,e.weekdays=Jn,e.parseZone=Bn,e.localeData=ne,e.isDuration=Oe,e.monthsShort=$n,e.weekdaysMin=Kn,e.defineLocale=te,e.updateLocale=ee,e.locales=ie,e.weekdaysShort=Qn,e.normalizeUnits=N,e.relativeTimeRounding=vi,e.relativeTimeThreshold=yi,e.calendarFormat=Je,e.prototype=io,e})}).call(e,n(84)(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 n(t){throw new Error("Cannot find module '"+t+"'.")}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id=85},function(t,e){(function(e){function n(t,e,n){var i=e&&n||0,r=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){r<16&&(e[i+r++]=c[t])});r<16;)e[i+r++]=0;return e}function i(t,e){var n=e||0,i=l;return i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]}function r(t,e,n){var r=e&&n||0,o=e||[];t=t||{};var s=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:y+1,u=a-v+(h-y)/1e4;if(u<0&&void 0===t.clockseq&&(s=s+1&16383),(u<0||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,y=h,m=s,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;o[r++]=l>>>24&255,o[r++]=l>>>16&255,o[r++]=l>>>8&255,o[r++]=255&l;var c=a/4294967296*1e4&268435455;o[r++]=c>>>8&255,o[r++]=255&c,o[r++]=c>>>24&15|16,o[r++]=c>>>16&255,o[r++]=s>>>8|128,o[r++]=255&s;for(var f=t.node||p,d=0;d<6;d++)o[r+d]=f[d];return e?e:i(o)}function o(t,e,n){var r=e&&n||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var o=t.random||(t.rng||s)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e)for(var a=0;a<16;a++)e[r+a]=o[a];return e||i(o)}var s,a="undefined"!=typeof window?window:"undefined"!=typeof e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);s=function(){return crypto.getRandomValues(h),h}}if(!s){var u=new Array(16);s=function(){for(var t,e=0;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),u[e]=t>>>((3&e)<<3)&255;return u}}for(var l=[],c={},f=0;f<256;f++)l[f]=(f+256).toString(16).substr(1),c[l[f]]=f;var d=s(),p=[1|d[0],d[1],d[2],d[3],d[4],d[5]],m=16383&(d[6]<<8|d[7]),v=0,y=0,g=o;g.v1=r,g.v4=o,g.parse=n,g.unparse=i,t.exports=g}).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 n=0;n0?(i=e[t].redundant[0],e[t].redundant.shift()):(i=document.createElementNS("http://www.w3.org/2000/svg",t),n.appendChild(i)):(i=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},n.appendChild(i)),e[t].used.push(i),i},e.getDOMElement=function(t,e,n,i){var r;return e.hasOwnProperty(t)?e[t].redundant.length>0?(r=e[t].redundant[0],e[t].redundant.shift()):(r=document.createElement(t),void 0!==i?n.insertBefore(r,i):n.appendChild(r)):(r=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==i?n.insertBefore(r,i):n.appendChild(r)),e[t].used.push(r),r},e.drawPoint=function(t,n,i,r,o,s){var a;if("circle"==i.style?(a=e.getSVGElement("circle",r,o),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",n),a.setAttributeNS(null,"r",.5*i.size)):(a=e.getSVGElement("rect",r,o),a.setAttributeNS(null,"x",t-.5*i.size),a.setAttributeNS(null,"y",n-.5*i.size),a.setAttributeNS(null,"width",i.size),a.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&a.setAttributeNS(null,"style",i.styles),a.setAttributeNS(null,"class",i.className+" vis-point"),s){var h=e.getSVGElement("text",r,o);s.xOffset&&(t+=s.xOffset),s.yOffset&&(n+=s.yOffset),s.content&&(h.textContent=s.content),s.className&&h.setAttributeNS(null,"class",s.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",n)}return a},e.drawBar=function(t,n,i,r,o,s,a,h){if(0!=r){r<0&&(r*=-1,n-=r);var u=e.getSVGElement("rect",s,a);u.setAttributeNS(null,"x",t-.5*i),u.setAttributeNS(null,"y",n),u.setAttributeNS(null,"width",i),u.setAttributeNS(null,"height",r),u.setAttributeNS(null,"class",o),h&&u.setAttributeNS(null,"style",h)}}},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(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 n=(0,l.default)(this._options.type),i=0,r=n.length;ir?1:is)&&(o=h,s=u)}return o},r.prototype.min=function(t){var e,n,i=this._data,r=(0,l.default)(i),o=null,s=null;for(e=0,n=r.length;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)}},n.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=n},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var n=this;this.listener=function(){n._onEvent.apply(n,arguments)},this.setData(t)}var o=n(58),s=i(o),a=n(1),h=n(88);r.prototype.setData=function(t){var e,n,i,r,o;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),o=[],i=0,r=e.length;io)&&(i=o)}return i},r.prototype.getColumnRange=function(t,e){for(var n=new g,i=0;i0&&(h[i-1].pointNext=s),h.push(s);return h},r.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),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);var e=this,n=function(t){e._onMouseDown(t)},i=function(t){e._onTouchStart(t)},r=function(t){e._onWheel(t)},o=function(t){e._onTooltip(t)},s=function(t){e._onClick(t)};f.addEventListener(this.frame.canvas,"mousedown",n),f.addEventListener(this.frame.canvas,"touchstart",i),f.addEventListener(this.frame.canvas,"mousewheel",r),f.addEventListener(this.frame.canvas,"mousemove",o),f.addEventListener(this.frame.canvas,"click",s),this.containerElement.appendChild(this.frame)},r.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},r.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},r.prototype.animationStart=function(){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()},r.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},r.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},r.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},r.prototype._readData=function(t){this._dataInitialize(t,this.style),this.dataFilter?this.dataPoints=this.dataFilter._getDataPoints():this.dataPoints=this._getDataPoints(this.dataTable),this._redrawFilter()},r.prototype.setData=function(t){this._readData(t),this.redraw(),this.animationAutoStart&&this.dataFilter&&this.animationStart()},r.prototype.setOptions=function(t){this.animationStop(),_.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.dataTable&&this.setData(this.dataTable),this.animationAutoStart&&this.dataFilter&&this.animationStart()},r.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case r.STYLE.BAR:t=r.prototype._redrawBarGraphPoint;break;case r.STYLE.BARCOLOR:t=r.prototype._redrawBarColorGraphPoint;break;case r.STYLE.BARSIZE:t=r.prototype._redrawBarSizeGraphPoint;break;case r.STYLE.DOT:t=r.prototype._redrawDotGraphPoint;break;case r.STYLE.DOTLINE:t=r.prototype._redrawDotLineGraphPoint;break;case r.STYLE.DOTCOLOR:t=r.prototype._redrawDotColorGraphPoint;break;case r.STYLE.DOTSIZE:t=r.prototype._redrawDotSizeGraphPoint;break;case r.STYLE.SURFACE:t=r.prototype._redrawSurfaceGraphPoint;break;case r.STYLE.GRID:t=r.prototype._redrawGridGraphPoint;break;case r.STYLE.LINE:t=r.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},r.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},r.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},r.prototype._redrawClear=function(){var t=this.frame.canvas,e=t.getContext("2d");e.clearRect(0,0,t.width,t.height)},r.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},r.prototype._getLegendWidth=function(){var t;if(this.style===r.STYLE.DOTSIZE){var e=this._dotSize();t=e*this.dotSizeMaxFraction}else t=this.style===r.STYLE.BARSIZE?this.xBarWidth:20;return t},r.prototype._redrawLegend=function(){if(this.showLegend===!0&&this.style!==r.STYLE.LINE&&this.style!==r.STYLE.BARSIZE){var t=this.style===r.STYLE.BARSIZE||this.style===r.STYLE.DOTSIZE,e=this.style===r.STYLE.DOTSIZE||this.style===r.STYLE.DOTCOLOR||this.style===r.STYLE.BARCOLOR,n=Math.max(.25*this.frame.clientHeight,100),i=this.margin,o=this._getLegendWidth(),s=this.frame.clientWidth-this.margin,a=s-o,h=i+n,u=this._getContext();if(u.lineWidth=1,u.font="14px arial",t===!1){var l,c=0,f=n;for(l=c;l0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},r.prototype.drawAxisLabelY=function(t,e,n,i,r){void 0===r&&(r=0);var o=this._convert3Dto2D(e);Math.cos(2*i)<0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},r.prototype.drawAxisLabelZ=function(t,e,n,i){void 0===i&&(i=0);var r=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(n,r.x-i,r.y)},r.prototype._line3d=function(t,e,n,i){var r=this._convert3Dto2D(e),o=this._convert3Dto2D(n);this._line(t,r,o,i)},r.prototype._redrawAxis=function(){var t,e,n,i,r,o,s,a,h,u,l,c=this._getContext();c.font=24/this.camera.getArmLength()+"px arial";var f=.025/this.scale.x,m=.025/this.scale.y,v=5/this.camera.getArmLength(),g=this.camera.getArmRotation().horizontal,_=new p(Math.cos(g),Math.sin(g)),w=this.xRange,x=this.yRange,b=this.zRange;for(c.lineWidth=1,i=void 0===this.defaultXStep,n=new y(w.min,w.max,this.xStep,i),n.start(!0);!n.end();){var S=n.getCurrent();if(this.showGrid?(t=new d(S,x.min,b.min),e=new d(S,x.max,b.min),this._line3d(c,t,e,this.gridColor)):this.showXAxis&&(t=new d(S,x.min,b.min),e=new d(S,x.min+f,b.min),this._line3d(c,t,e,this.axisColor),t=new d(S,x.max,b.min),e=new d(S,x.max-f,b.min),this._line3d(c,t,e,this.axisColor)),this.showXAxis){s=_.x>0?x.min:x.max;var T=new d(S,s,b.min),M=" "+this.xValueLabel(S)+" ";this.drawAxisLabelX(c,T,M,g,v)}n.next()}for(c.lineWidth=1,i=void 0===this.defaultYStep,n=new y(x.min,x.max,this.yStep,i),n.start(!0);!n.end();){var D=n.getCurrent();if(this.showGrid?(t=new d(w.min,D,b.min),e=new d(w.max,D,b.min),this._line3d(c,t,e,this.gridColor)):this.showYAxis&&(t=new d(w.min,D,b.min),e=new d(w.min+m,D,b.min),this._line3d(c,t,e,this.axisColor),t=new d(w.max,D,b.min),e=new d(w.max-m,D,b.min),this._line3d(c,t,e,this.axisColor)),this.showYAxis){o=_.y>0?w.min:w.max,T=new d(o,D,b.min);var M=" "+this.yValueLabel(D)+" ";this.drawAxisLabelY(c,T,M,g,v)}n.next()}if(this.showZAxis){for(c.lineWidth=1,i=void 0===this.defaultZStep,n=new y(b.min,b.max,this.zStep,i),n.start(!0),o=_.x>0?w.min:w.max,s=_.y<0?x.min:x.max;!n.end();){var k=n.getCurrent(),O=new d(o,s,k),E=this._convert3Dto2D(O);e=new p(E.x-v,E.y),this._line(c,E,e,this.axisColor);var M=this.zValueLabel(k)+" ";this.drawAxisLabelZ(c,O,M,5),n.next()}c.lineWidth=1,t=new d(o,s,b.min),e=new d(o,s,b.max),this._line3d(c,t,e,this.axisColor)}if(this.showXAxis){var C,P;c.lineWidth=1,C=new d(w.min,x.min,b.min),P=new d(w.max,x.min,b.min),this._line3d(c,C,P,this.axisColor),C=new d(w.min,x.max,b.min),P=new d(w.max,x.max,b.min),this._line3d(c,C,P,this.axisColor)}this.showYAxis&&(c.lineWidth=1,t=new d(w.min,x.min,b.min),e=new d(w.min,x.max,b.min),this._line3d(c,t,e,this.axisColor),t=new d(w.max,x.min,b.min),e=new d(w.max,x.max,b.min),this._line3d(c,t,e,this.axisColor));var L=this.xLabel;L.length>0&&this.showXAxis&&(l=.1/this.scale.y,o=(w.max+3*w.min)/4,s=_.x>0?x.min-l:x.max+l,r=new d(o,s,b.min),this.drawAxisLabelX(c,r,L,g));var Y=this.yLabel;Y.length>0&&this.showYAxis&&(u=.1/this.scale.x,o=_.y>0?w.min-u:w.max+u,s=(x.max+3*x.min)/4,r=new d(o,s,b.min),this.drawAxisLabelY(c,r,Y,g));var R=this.zLabel;R.length>0&&this.showZAxis&&(h=30,o=_.x>0?w.min:w.max,s=_.y<0?x.min:x.max,a=(b.max+3*b.min)/4,r=new d(o,s,a),this.drawAxisLabelZ(c,r,R,h))},r.prototype._hsv2rgb=function(t,e,n){var i,r,o,s,a,h;switch(s=n*e,a=Math.floor(t/60),h=s*(1-Math.abs(t/60%2-1)),a){case 0:i=s,r=h,o=0;break;case 1:i=h,r=s,o=0;break;case 2:i=0,r=s,o=h;break;case 3:i=0,r=h,o=s;break;case 4:i=h,r=0,o=s;break;case 5:i=s,r=0,o=h;break;default:i=0,r=0,o=0}return"RGB("+parseInt(255*i)+","+parseInt(255*r)+","+parseInt(255*o)+")"},r.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-(this.eye.z/this.camera.getArmLength())*this.dataColor.strokeWidth:this.dataColor.strokeWidth},r.prototype._redrawBar=function(t,e,n,i,r,o){var s,a,h=this,u=e.point,l=this.zRange.min,c=[{point:new d(u.x-n,u.y-i,u.z)},{point:new d(u.x+n,u.y-i,u.z)},{point:new d(u.x+n,u.y+i,u.z)},{point:new d(u.x-n,u.y+i,u.z)}],f=[{point:new d(u.x-n,u.y-i,l)},{point:new d(u.x+n,u.y-i,l)},{point:new d(u.x+n,u.y+i,l)},{point:new d(u.x-n,u.y+i,l)}];c.forEach(function(t){t.screen=h._convert3Dto2D(t.point)}),f.forEach(function(t){t.screen=h._convert3Dto2D(t.point)});var p=[{corners:c,center:d.avg(f[0].point,f[2].point)},{corners:[c[0],c[1],f[1],f[0]],center:d.avg(f[1].point,f[0].point)},{corners:[c[1],c[2],f[2],f[1]],center:d.avg(f[2].point,f[1].point)},{corners:[c[2],c[3],f[3],f[2]],center:d.avg(f[3].point,f[2].point)},{corners:[c[3],c[0],f[0],f[3]],center:d.avg(f[0].point,f[3].point)}];for(e.surfaces=p,s=0;s0}if(a){var f,p=(e.point.z+n.point.z+i.point.z+r.point.z)/4,m=240*(1-(p-this.zRange.min)*this.scale.z/this.verticalRatio),v=1;this.showShadow?(f=Math.min(1+l.x/c/2,1),o=this._hsv2rgb(m,v,f),s=o):(f=1,o=this._hsv2rgb(m,v,f),s=this.axisColor)}else o="gray",s=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var y=[e,n,r,i];this._polygon(t,y,o,s)}},r.prototype._drawGridLine=function(t,e,n){if(void 0!==e&&void 0!==n){var i=(e.point.z+n.point.z)/2,r=240*(1-(i-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(r,1,1),this._line(t,e.screen,n.screen)}},r.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},r.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},r.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t0?1:t<0?-1:0}var i=e[0],r=e[1],o=e[2],s=n((r.x-i.x)*(t.y-i.y)-(r.y-i.y)*(t.x-i.x)),a=n((o.x-r.x)*(t.y-r.y)-(o.y-r.y)*(t.x-r.x)),h=n((i.x-o.x)*(t.y-o.y)-(i.y-o.y)*(t.x-o.x));return!(0!=s&&0!=a&&s!=a||0!=a&&0!=h&&a!=h||0!=s&&0!=h&&s!=h)},r.prototype._dataPointFromXY=function(t,e){var n,i=100,o=null,s=null,a=null,h=new p(t,e);if(this.style===r.STYLE.BAR||this.style===r.STYLE.BARCOLOR||this.style===r.STYLE.BARSIZE)for(n=this.dataPoints.length-1;n>=0;n--){o=this.dataPoints[n];var u=o.surfaces;if(u)for(var l=u.length-1;l>=0;l--){var c=u[l],f=c.corners,d=[f[0].screen,f[1].screen,f[2].screen],m=[f[2].screen,f[3].screen,f[0].screen];if(this._insideTriangle(h,d)||this._insideTriangle(h,m))return o}}else for(n=0;n"+this.xLabel+":"+t.point.x+""+this.yLabel+":"+t.point.y+""+this.zLabel+":"+t.point.z+"", +e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(n),this.frame.appendChild(i);var r=e.offsetWidth,o=e.offsetHeight,s=n.offsetHeight,a=i.offsetWidth,u=i.offsetHeight,l=t.screen.x-r/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-r),n.style.left=t.screen.x+"px",n.style.top=t.screen.y-s+"px",e.style.left=l+"px",e.style.top=t.screen.y-s-o+"px",i.style.left=t.screen.x-a/2+"px",i.style.top=t.screen.y-u/2+"px"},r.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)}}},r.prototype.setCameraPosition=function(t){_.setCameraPosition(t,this),this.redraw()},r.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=r},function(t,e,n){t.exports={default:n(95),__esModule:!0}},function(t,e,n){n(96),t.exports=n(17).Object.assign},function(t,e,n){var i=n(15);i(i.S+i.F,"Object",{assign:n(97)})},function(t,e,n){var i=n(35),r=n(73),o=n(74),s=n(49),a=n(10),h=Object.assign;t.exports=!h||n(26)(function(){var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach(function(t){e[t]=t}),7!=h({},t)[n]||Object.keys(h({},e)).join("")!=i})?function(t,e){for(var n=s(t),h=arguments.length,u=1,l=r.f,c=o.f;h>u;)for(var f,d=a(arguments[u++]),p=l?i(d).concat(l(d)):i(d),m=p.length,v=0;m>v;)c.call(d,f=p[v++])&&(n[f]=d[f]);return n}:h},function(t,e){function n(t){if(t)return i(t)}function i(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},n.prototype.once=function(t,e){function n(){i.off(t,n),e.apply(this,arguments)}var i=this;return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i,r=0;ro&&(t=i(t)*o),n(e)>o&&(e=i(e)*o),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},r.prototype.getOffset=function(t,e){return this.cameraOffset},r.prototype.setArmLocation=function(t,e,n){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=n,this.calculateCameraOrientation()},r.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()},r.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},r.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())},r.prototype.getArmLength=function(){return this.armLength},r.prototype.getCameraLocation=function(){return this.cameraLocation},r.prototype.getCameraRotation=function(){return this.cameraRotation},r.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;var t=this.cameraRotation.x,e=(this.cameraRotation.y,this.cameraRotation.z),n=this.cameraOffset.x,i=this.cameraOffset.y,r=Math.sin,o=Math.cos;this.cameraLocation.x=this.cameraLocation.x+n*o(e)+i*-r(e)*o(t),this.cameraLocation.y=this.cameraLocation.y+n*r(e)+i*o(e)*o(t),this.cameraLocation.z=this.cameraLocation.z+i*r(t)},t.exports=r},function(t,e,n){t.exports={default:n(103),__esModule:!0}},function(t,e,n){n(104),t.exports=n(17).Math.sign},function(t,e,n){var i=n(15);i(i.S,"Math",{sign:n(105)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){function i(t,e,n){this.data=t,this.column=e,this.graph=n,this.index=void 0,this.value=void 0,this.values=n.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:t0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,n.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var r=n(92);i.prototype.isLoaded=function(){return this.loaded},i.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},i.prototype.getLabel=function(){return this.graph.filterLabel},i.prototype.getColumn=function(){return this.column},i.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},i.prototype.getValues=function(){return this.values},i.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},i.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 n={};n.column=this.column,n.value=this.values[t];var i=new r(this.data,{filter:function(t){return t[n.column]==n.value}}).get();e=this.graph._getDataPoints(i),this.dataPoints[t]=e}return e},i.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},i.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},i.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},i.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},i.prototype.setIndex=function(t){if(!(tthis.values.length-1&&(i=this.values.length-1),i},i.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,n=t/(this.values.length-1)*e,i=n+3;return i},i.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,n=this.startSlideX+e,i=this.leftToIndex(n);this.setIndex(i),r.preventDefault()},i.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",r.removeEventListener(document,"mousemove",this.onmousemove),r.removeEventListener(document,"mouseup",this.onmouseup),r.preventDefault()},t.exports=i},function(t,e){function n(t,e,n,i){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,n,i)}n.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},n.prototype.setRange=function(t,e,n,i){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(n))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t?t:0,this._end=e?e:0,this.setStep(n,i)},n.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),this.prettyStep===!0?this._step=n.calculatePrettyStep(t):this._step=t)},n.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},n=Math.pow(10,Math.round(e(t))),i=2*Math.pow(10,Math.round(e(t/2))),r=5*Math.pow(10,Math.round(e(t/5))),o=n;return Math.abs(i-t)<=Math.abs(o-t)&&(o=i),Math.abs(r-t)<=Math.abs(o-t)&&(o=r),o<=0&&(o=1),o},n.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},n.prototype.getStep=function(){return this._step},n.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()this._end},t.exports=n},function(t,e){function n(){this.min=void 0,this.max=void 0}n.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.maxn)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=n}},n.prototype.range=function(){return this.max-this.min},n.prototype.center=function(){return(this.min+this.max)/2},t.exports=n},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function o(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+o(e)}function a(t,e,n,i){var r,o;for(var a in n)r=n[a],o=s(i,r),e[o]=t[r]}function h(t,e,n,i){var r,o;for(var a in n)r=n[a],void 0!==t[r]&&(o=s(i,r),e[o]=t[r])}function u(t,e){if(void 0===t||r(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");O=t,a(t,e,D),a(t,e,k,"default"),c(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new S(0,0,-1)}function l(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===O||r(O))throw new Error("DEFAULTS not set for module Settings");h(t,e,D),h(t,e,k,"default"),c(t,e)}}function c(t,e){void 0!==t.backgroundColor&&v(t.backgroundColor,e),y(t.dataColor,e),m(t.style,e),f(t.showLegend,e),g(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&x.selectiveDeepExtend(["tooltipStyle"],e,t)}function f(t,e){if(void 0===t){var n=void 0===O.showLegend;if(n){var i=e.style===T.DOTCOLOR||e.style===T.DOTSIZE;e.showLegend=i}}else e.showLegend=t}function d(t){var e=M[t];return void 0===e?-1:e}function p(t){var e=!1;for(var n in T)if(T[n]===t){e=!0;break}return e}function m(t,e){if(void 0!==t){var n;if("string"==typeof t){if(n=d(t),n===-1)throw new Error("Style '"+t+"' is invalid")}else{if(!p(t))throw new Error("Style '"+t+"' is invalid");n=t}e.style=n}}function v(t,e){var n="white",i="gray",r=1;if("string"==typeof t)n=t,i="none",r=0;else{if("object"!==("undefined"==typeof t?"undefined":(0,w.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(n=t.fill),void 0!==t.stroke&&(i=t.stroke),void 0!==t.strokeWidth&&(r=t.strokeWidth)}e.frame.style.backgroundColor=n,e.frame.style.borderColor=i,e.frame.style.borderWidth=r+"px",e.frame.style.borderStyle="solid"}function y(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function g(t,e){var n=t;void 0!==n&&(void 0===e.camera&&(e.camera=new b),e.camera.setArmRotation(n.horizontal,n.vertical),e.camera.setArmLength(n.distance))}var _=n(62),w=i(_),x=n(1),b=n(101),S=n(99),T={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},M={dot:T.DOT,"dot-line":T.DOTLINE,"dot-color":T.DOTCOLOR,"dot-size":T.DOTSIZE,line:T.LINE,grid:T.GRID,surface:T.SURFACE,bar:T.BAR,"bar-color":T.BARCOLOR,"bar-size":T.BARSIZE},D=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],k=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],O=void 0;t.exports.STYLE=T,t.exports.setDefaults=u,t.exports.setOptions=l,t.exports.setCameraPosition=g},function(t,e,n){if("undefined"!=typeof window){var i=n(112),r=window.Hammer||n(113);t.exports=i(r,{preventDefault:"mouse"})}else t.exports=function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,n){var i,r,o;!function(n){r=[],i=n,o="function"==typeof i?i.apply(e,r):i,!(void 0!==o&&(t.exports=o))}(function(){var t=null;return function e(n,i){function r(t){return t.match(/[^ ]+/g)}function o(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 n=!1;e.stopPropagation=function(){n=!0};var i=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof i&&(e.srcEvent.stopPropagation=function(){i(),e.stopPropagation()}),e.firstTarget=t;for(var r=t;r&&!n;){var o=r.hammer;if(o)for(var s,a=0;a0?u._handlers[t]=i:(n.off(t,o),delete u._handlers[t]))}),u},u.emit=function(e,i){t=i.target,n.emit(e,i)},u.destroy=function(){var t=n.element.hammer,e=t.indexOf(u);e!==-1&&t.splice(e,1),t.length||delete n.element.hammer,u._handlers={},n.destroy()},u}})},function(t,e,n){var i;/*! Hammer.JS - v2.0.7 - 2016-04-22 * http://hammerjs.github.io/ * * Copyright (c) 2016 Jorik Tangelder; * Licensed under the MIT license */ -!function(r,o,s,a){function h(t,e,n){return setTimeout(d(t,n),e)}function u(t,e,n){return!!Array.isArray(t)&&(l(t,n[e],n),!0)}function l(t,e,n){var i;if(t)if(t.forEach)t.forEach(e,n);else if(t.length!==a)for(i=0;i\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=r.console&&(r.console.warn||r.console.log);return o&&o.call(r.console,i,n),t.apply(this,arguments)}}function f(t,e,n){var i,r=e.prototype;i=t.prototype=Object.create(r),i.constructor=t,i._super=r,n&&mt(i,n)}function d(t,e){return function(){return t.apply(e,arguments)}}function p(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,n){l(w(e),function(e){t.addEventListener(e,n,!1)})}function y(t,e,n){l(w(e),function(e){t.removeEventListener(e,n,!1)})}function g(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function _(t,e){return t.indexOf(e)>-1}function w(t){return t.trim().split(/\s+/g)}function x(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;in[e]}):i.sort()),i}function T(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),o=0;o1&&!n.firstMultiple?n.firstMultiple=Y(e):1===r&&(n.firstMultiple=!1);var o=n.firstInput,s=n.firstMultiple,a=s?s.center:o.center,h=e.center=R(i);e.timeStamp=xt(),e.deltaTime=e.timeStamp-o.timeStamp,e.angle=W(a,h),e.distance=N(a,h),P(n,e),e.offsetDirection=I(e.deltaX,e.deltaY);var u=A(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=u.x,e.overallVelocityY=u.y,e.overallVelocity=wt(u.x)>wt(u.y)?u.x:u.y,e.scale=s?F(s.pointers,i):1,e.rotation=s?z(s.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,L(n,e);var l=t.element;g(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},o=t.prevInput||{};e.eventType!==Rt&&o.eventType!==It||(r=t.prevDelta={x:o.deltaX||0,y:o.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y}),e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}function L(t,e){var n,i,r,o,s=t.lastInterval||e,h=e.timeStamp-s.timeStamp;if(e.eventType!=Nt&&(h>Yt||s.velocity===a)){var u=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,c=A(h,u,l);i=c.x,r=c.y,n=wt(c.x)>wt(c.y)?c.x:c.y,o=I(u,l),t.lastInterval=e}else n=s.velocity,i=s.velocityX,r=s.velocityY,o=s.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=o}function Y(t){for(var e=[],n=0;n=wt(e)?t<0?zt:Ft:e<0?jt:Vt}function N(t,e,n){n||(n=Ht);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function W(t,e,n){n||(n=Ht);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return 180*Math.atan2(r,i)/Math.PI}function z(t,e){return W(e[1],e[0],Xt)+W(t[1],t[0],Xt)}function F(t,e){return N(e[0],e[1],Xt)/N(t[0],t[1],Xt)}function j(){this.evEl=qt,this.evWin=$t,this.pressed=!1,k.apply(this,arguments)}function V(){this.evEl=Kt,this.evWin=te,k.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function G(){this.evTarget=ne,this.evWin=ie,this.started=!1,k.apply(this,arguments)}function B(t,e){var n=b(t.touches),i=b(t.changedTouches);return e&(It|Nt)&&(n=S(n.concat(i),"identifier",!0)),[n,i]}function U(){this.evTarget=oe,this.targetIds={},k.apply(this,arguments)}function H(t,e){var n=b(t.touches),i=this.targetIds;if(e&(Rt|At)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,o,s=b(t.changedTouches),a=[],h=this.target;if(o=n.filter(function(t){return g(t.target,h)}),e===Rt)for(r=0;r-1&&i.splice(t,1)};setTimeout(r,se)}}function $(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i-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){n.manager.emit(e,t)}var n=this,i=this.state;i=we&&e(n.options.event+et(i))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=Se)},canEmit:function(){for(var t=0;te.threshold&&r&e.direction},attrTest:function(t){return rt.prototype.attrTest.call(this,t)&&(this.state&ge||!(this.state&ge)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=nt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),f(st,rt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[de]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ge)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),f(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ce]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distancee.time;if(this._input=t,!i||!n||t.eventType&(It|Nt)&&!r)this.reset();else if(t.eventType&Rt)this.reset(),this._timer=h(function(){this.state=xe,this.tryEmit()},e.time,this);else if(t.eventType&It)return xe;return Se},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===xe&&(t&&t.eventType&It?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=xt(),this.manager.emit(this.options.event,this._input)))}}),f(ht,rt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[de]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ge)}}),f(ut,rt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Gt|Bt,pointers:1},getTouchAction:function(){return ot.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(Gt|Bt)?e=t.overallVelocity:n&Gt?e=t.overallVelocityX:n&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&wt(e)>this.options.velocity&&t.eventType&It},emit:function(t){var e=nt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),f(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[fe]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=r.console&&(r.console.warn||r.console.log);return o&&o.call(r.console,i,n),t.apply(this,arguments)}}function f(t,e,n){var i,r=e.prototype;i=t.prototype=Object.create(r),i.constructor=t,i._super=r,n&&mt(i,n)}function d(t,e){return function(){return t.apply(e,arguments)}}function p(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,n){l(w(e),function(e){t.addEventListener(e,n,!1)})}function y(t,e,n){l(w(e),function(e){t.removeEventListener(e,n,!1)})}function g(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function _(t,e){return t.indexOf(e)>-1}function w(t){return t.trim().split(/\s+/g)}function x(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;in[e]}):i.sort()),i}function T(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),o=0;o1&&!n.firstMultiple?n.firstMultiple=Y(e):1===r&&(n.firstMultiple=!1);var o=n.firstInput,s=n.firstMultiple,a=s?s.center:o.center,h=e.center=R(i);e.timeStamp=xt(),e.deltaTime=e.timeStamp-o.timeStamp,e.angle=z(a,h),e.distance=N(a,h),P(n,e),e.offsetDirection=I(e.deltaX,e.deltaY);var u=A(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=u.x,e.overallVelocityY=u.y,e.overallVelocity=wt(u.x)>wt(u.y)?u.x:u.y,e.scale=s?F(s.pointers,i):1,e.rotation=s?W(s.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,L(n,e);var l=t.element;g(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},o=t.prevInput||{};e.eventType!==Rt&&o.eventType!==It||(r=t.prevDelta={x:o.deltaX||0,y:o.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y}),e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}function L(t,e){var n,i,r,o,s=t.lastInterval||e,h=e.timeStamp-s.timeStamp;if(e.eventType!=Nt&&(h>Yt||s.velocity===a)){var u=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,c=A(h,u,l);i=c.x,r=c.y,n=wt(c.x)>wt(c.y)?c.x:c.y,o=I(u,l),t.lastInterval=e}else n=s.velocity,i=s.velocityX,r=s.velocityY,o=s.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=o}function Y(t){for(var e=[],n=0;n=wt(e)?t<0?Wt:Ft:e<0?jt:Vt}function N(t,e,n){n||(n=Ht);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function z(t,e,n){n||(n=Ht);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return 180*Math.atan2(r,i)/Math.PI}function W(t,e){return z(e[1],e[0],Xt)+z(t[1],t[0],Xt)}function F(t,e){return N(e[0],e[1],Xt)/N(t[0],t[1],Xt)}function j(){this.evEl=qt,this.evWin=$t,this.pressed=!1,k.apply(this,arguments)}function V(){this.evEl=Kt,this.evWin=te,k.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function G(){this.evTarget=ne,this.evWin=ie,this.started=!1,k.apply(this,arguments)}function B(t,e){var n=b(t.touches),i=b(t.changedTouches);return e&(It|Nt)&&(n=S(n.concat(i),"identifier",!0)),[n,i]}function U(){this.evTarget=oe,this.targetIds={},k.apply(this,arguments)}function H(t,e){var n=b(t.touches),i=this.targetIds;if(e&(Rt|At)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,o,s=b(t.changedTouches),a=[],h=this.target;if(o=n.filter(function(t){return g(t.target,h)}),e===Rt)for(r=0;r-1&&i.splice(t,1)};setTimeout(r,se)}}function $(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i-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){n.manager.emit(e,t)}var n=this,i=this.state;i=we&&e(n.options.event+et(i))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=Se)},canEmit:function(){for(var t=0;te.threshold&&r&e.direction},attrTest:function(t){return rt.prototype.attrTest.call(this,t)&&(this.state&ge||!(this.state&ge)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=nt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),f(st,rt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[de]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ge)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),f(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ce]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distancee.time;if(this._input=t,!i||!n||t.eventType&(It|Nt)&&!r)this.reset();else if(t.eventType&Rt)this.reset(),this._timer=h(function(){this.state=xe,this.tryEmit()},e.time,this);else if(t.eventType&It)return xe;return Se},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===xe&&(t&&t.eventType&It?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=xt(),this.manager.emit(this.options.event,this._input)))}}),f(ht,rt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[de]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ge)}}),f(ut,rt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Gt|Bt,pointers:1},getTouchAction:function(){return ot.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(Gt|Bt)?e=t.overallVelocity:n&Gt?e=t.overallVelocityX:n&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&wt(e)>this.options.velocity&&t.eventType&It},emit:function(t){var e=nt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),f(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[fe]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&t.indexOf(s)==-1)if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&n===!0?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){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),d=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:d,border:a},hover:{background:d,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,d=(n-o)/n,h=n;return{h:a,s:d,v:h}};var v={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(0,h.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=v.split(t.style.cssText),n=v.split(i),s=e.extend(o,n);t.style.cssText=v.join(s)},e.removeCssText=function(t,e){var i=v.split(t.style.cssText),o=v.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=v.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,d=i*(1-e),h=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=d;break;case 1:o=h,n=i,s=d;break;case 2:o=d,n=i,s=l;break;case 3:o=d,n=h,s=i;break;case 4:o=l,n=d,s=i;break;case 5:o=i,n=d,s=h}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==("undefined"==typeof i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;r<=a&&s0)return"before"==o?Math.max(0,d-1):d;if(n(r,e)<0&&n(a,e)>0)return"before"==o?d:Math.min(t.length-1,d+1);n(r,e)<0?u=d+1:c=d-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,d=(0,s.default)(t);!(o=(a=d.next()).done);o=!0){var h=a.value;if(h){i=h[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),d=i(8),h=i(32),l=i(46),u=i(48),c=i(47)("iterator"),f=!([].keys&&"next"in[].keys()),p="@@iterator",v="keys",g="values",y=function(){return this};t.exports=function(t,e,i,m,b,_,w){h(i,e,m);var k,x,O,M=function(t){if(!f&&t in C)return C[t];switch(t){case v:return function(){return new i(this,t)};case g:return function(){return new i(this,t)}}return function(){return new i(this,t)}},S=e+" Iterator",E=b==g,D=!1,C=t.prototype,T=C[c]||C[p]||b&&C[b],P=T||M(b),F=b?E?M("entries"):P:void 0,B="Array"==e?C.entries||T:T;if(B&&(O=u(B.call(new t)),O!==Object.prototype&&(l(O,S,!0),o||a(O,c)||r(O,c,y))),E&&T&&T.name!==g&&(D=!0,P=function(){return T.call(this)}),o&&!w||!f&&!D&&C[c]||r(C,c,P),d[e]=P,d[S]=y,b)if(k={values:E?P:M(g),keys:_?P:M(v),entries:F},w)for(x in k)x in C||s(C,x,k[x]);else n(n.P+n.F*(f||D),e,k);return k}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a="prototype",d=function(t,e,i){var h,l,u,c=t&d.F,f=t&d.G,p=t&d.S,v=t&d.P,g=t&d.B,y=t&d.W,m=f?n:n[e]||(n[e]={}),b=m[a],_=f?o:p?o[e]:(o[e]||{})[a];f&&(i=e);for(h in i)l=!c&&_&&void 0!==_[h],l&&h in m||(u=l?_[h]:i[h],m[h]=f&&"function"!=typeof _[h]?i[h]:g&&l?s(u,o):y&&_[h]==u?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e[a]=t[a],e}(u):v&&"function"==typeof u?s(Function.call,u):u,v&&((m.virtual||(m.virtual={}))[h]=u,t&d.R&&b&&!b[h]&&r(b,h,u)))};d.F=1,d.G=2,d.S=4,d.P=8,d.B=16,d.W=32,d.U=64,d.R=128,t.exports=d},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},d="prototype",h=function(){var t,e=i(27)("iframe"),o=s.length,n="<",r=">";for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(n+"script"+r+"document.F=Object"+n+"/script"+r),t.close(),h=t.F;o--;)delete h[d][s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a[d]=o(t),i=new a,a[d]=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e,i){var o=i(21),n=i(22),s=i(35);t.exports=i(25)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,d=0;a>d;)o.f(t,i=r[d++],e[i]);return t}},function(t,e,i){var o=i(36),n=i(44);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){var o=i(31),n=i(9),s=i(37)(!1),r=i(41)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),d=0,h=[];for(i in a)i!=r&&o(a,i)&&h.push(i);for(;e.length>d;)o(a,i=e[d++])&&(~s(h,i)||h.push(i));return h}},function(t,e,i){var o=i(9),n=i(38),s=i(40);t.exports=function(t){return function(e,i,r){var a,d=o(e),h=n(d.length),l=s(r,h);if(t&&i!=i){for(;h>l;)if(a=d[l++],a!=a)return!0}else for(;h>l;l++)if((t||l in d)&&d[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(39),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(39),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(42)("keys"),n=i(43);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(16),n="__core-js_shared__",s=o[n]||(o[n]={});t.exports=function(t){return s[t]||(s[t]={})}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){t.exports=i(16).document&&document.documentElement},function(t,e,i){var o=i(21).f,n=i(31),s=i(47)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(42)("wks"),n=i(43),s=i(16).Symbol,r="function"==typeof s,a=t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))};a.store=o},function(t,e,i){var o=i(31),n=i(49),s=i(41)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(12);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(51)(!0);i(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){var o=i(39),n=i(12);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),d=o(i),h=a.length;return d<0||d>=h?t?"":void 0:(s=a.charCodeAt(d),s<55296||s>56319||d+1===h||(r=a.charCodeAt(d+1))<56320||r>57343?t?a.charAt(d):s:t?a.slice(d,d+2):(s-55296<<10)+(r-56320)+65536)}}},function(t,e,i){var o=i(22),n=i(53);t.exports=i(17).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(11),n=i(47)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){t.exports={default:i(56),__esModule:!0}},function(t,e,i){i(57);var o=i(17).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(15);o(o.S,"Object",{create:i(33)})},function(t,e,i){t.exports={default:i(59),__esModule:!0}},function(t,e,i){i(60),t.exports=i(17).Object.keys},function(t,e,i){var o=i(49),n=i(35);i(61)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(15),n=i(17),s=i(26);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(63),s=o(n),r=i(66),a=o(r),d="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===d(s.default)?function(t){return"undefined"==typeof t?"undefined":d(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":d(t)}},function(t,e,i){t.exports={default:i(64),__esModule:!0}},function(t,e,i){i(50),i(4),t.exports=i(65).f("iterator")},function(t,e,i){e.f=i(47)},function(t,e,i){t.exports={default:i(67),__esModule:!0}},function(t,e,i){i(68),i(79),i(80),i(81),t.exports=i(17).Symbol},function(t,e,i){var o=i(16),n=i(31),s=i(25),r=i(15),a=i(30),d=i(69).KEY,h=i(26),l=i(42),u=i(46),c=i(43),f=i(47),p=i(65),v=i(70),g=i(71),y=i(72),m=i(75),b=i(22),_=i(9),w=i(28),k=i(29),x=i(33),O=i(76),M=i(78),S=i(21),E=i(35),D=M.f,C=S.f,T=O.f,P=o.Symbol,F=o.JSON,B=F&&F.stringify,I="prototype",z=f("_hidden"),N=f("toPrimitive"),R={}.propertyIsEnumerable,A=l("symbol-registry"),j=l("symbols"),H=l("op-symbols"),L=Object[I],W="function"==typeof P,Y=o.QObject,V=!Y||!Y[I]||!Y[I].findChild,U=s&&h(function(){return 7!=x(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=D(L,e);o&&delete L[e],C(t,e,i),o&&t!==L&&C(L,e,o)}:C,q=function(t){var e=j[t]=x(P[I]);return e._k=t,e},G=W&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},X=function(t,e,i){return t===L&&X(H,e,i),b(t),e=w(e,!0),b(i),n(j,e)?(i.enumerable?(n(t,z)&&t[z][e]&&(t[z][e]=!1),i=x(i,{enumerable:k(0,!1)})):(n(t,z)||C(t,z,k(1,{})),t[z][e]=!0),U(t,e,i)):C(t,e,i)},K=function(t,e){b(t);for(var i,o=y(e=_(e)),n=0,s=o.length;s>n;)X(t,i=o[n++],e[i]);return t},Z=function(t,e){return void 0===e?x(t):K(x(t),e)},Q=function(t){var e=R.call(this,t=w(t,!0));return!(this===L&&n(j,t)&&!n(H,t))&&(!(e||!n(this,t)||!n(j,t)||n(this,z)&&this[z][t])||e)},$=function(t,e){if(t=_(t),e=w(e,!0),t!==L||!n(j,e)||n(H,e)){var i=D(t,e);return!i||!n(j,e)||n(t,z)&&t[z][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=T(_(t)),o=[],s=0;i.length>s;)n(j,e=i[s++])||e==z||e==d||o.push(e);return o},tt=function(t){for(var e,i=t===L,o=T(i?H:_(t)),s=[],r=0;o.length>r;)!n(j,e=o[r++])||i&&!n(L,e)||s.push(j[e]);return s};W||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===L&&e.call(H,i),n(this,z)&&n(this[z],t)&&(this[z][t]=!1),U(this,t,k(1,i))};return s&&V&&U(L,t,{configurable:!0,set:e}),q(t)},a(P[I],"toString",function(){return this._k}),M.f=$,S.f=X,i(77).f=O.f=J,i(74).f=Q,i(73).f=tt,s&&!i(14)&&a(L,"propertyIsEnumerable",Q,!0),p.f=function(t){return q(f(t))}),r(r.G+r.W+r.F*!W,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;et.length>it;)f(et[it++]);for(var et=E(f.store),it=0;et.length>it;)v(et[it++]);r(r.S+r.F*!W,"Symbol",{for:function(t){return n(A,t+="")?A[t]:A[t]=P(t)},keyFor:function(t){if(G(t))return g(A,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){V=!0},useSimple:function(){V=!1}}),r(r.S+r.F*!W,"Object",{create:Z,defineProperty:X,defineProperties:K,getOwnPropertyDescriptor:$,getOwnPropertyNames:J,getOwnPropertySymbols:tt}),F&&r(r.S+r.F*(!W||h(function(){var t=P();return"[null]"!=B([t])||"{}"!=B({a:t})||"{}"!=B(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!G(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&m(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!G(e))return e}),o[1]=e,B.apply(F,o)}}}),P[I][N]||i(20)(P[I],N,P[I].valueOf),u(P,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(43)("meta"),n=i(23),s=i(31),r=i(21).f,a=0,d=Object.isExtensible||function(){return!0},h=!i(26)(function(){return d(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!d(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!d(t))return!0;if(!e)return!1;l(t)}return t[o].w},f=function(t){return h&&p.NEED&&d(t)&&!s(t,o)&&l(t),t},p=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:f}},function(t,e,i){var o=i(16),n=i(17),s=i(14),r=i(65),a=i(21).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e,i){var o=i(35),n=i(9);t.exports=function(t,e){for(var i,s=n(t),r=o(s),a=r.length,d=0;a>d;)if(s[i=r[d++]]===e)return i}},function(t,e,i){var o=i(35),n=i(73),s=i(74);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),d=s.f,h=0;a.length>h;)d.call(t,r=a[h++])&&e.push(r);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){var o=i(11);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(9),n=i(77).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(36),n=i(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(74),n=i(29),s=i(9),r=i(28),a=i(31),d=i(24),h=Object.getOwnPropertyDescriptor;e.f=i(25)?h:function(t,e){if(t=s(t),e=r(e,!0),d)try{return h(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(70)("asyncIterator")},function(t,e,i){i(70)("observable")},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(83)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return _o.apply(null,arguments)}function i(t){_o=t}function o(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function n(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){var e;for(e in t)return!1;return!0}function r(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function d(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return S(i)?i(e):i.replace(/%s/i,e)}function N(t,e){var i=t.toLowerCase();zo[i]=zo[i+"s"]=zo[e]=t}function R(t){return"string"==typeof t?zo[t]||zo[t.toLowerCase()]:void 0}function A(t){var e,i,o={};for(i in t)l(t,i)&&(e=R(i),e&&(o[e]=t[i]));return o}function j(t,e){No[t]=e}function H(t){var e=[];for(var i in t)e.push({unit:i,priority:No[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function L(t,i){return function(o){return null!=o?(Y(this,t,o),e.updateOffset(this,i),this):W(this,t)}}function W(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Y(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function V(t){return t=R(t),S(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=A(t);for(var i=H(t),o=0;o=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function G(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Ho[t]=n),e&&(Ho[e[0]]=function(){return q(n.apply(this,arguments),e[1],e[2])}),i&&(Ho[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function K(t){var e,i,o=t.match(Ro);for(e=0,i=o.length;e=0&&Ao.test(t);)t=t.replace(Ao,i),Ao.lastIndex=0,o-=1;return t}function $(t,e,i){sn[t]=S(e)?e:function(t,o){return t&&i?i:e}}function J(t,e){return l(sn,t)?sn[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),a(e)&&(o=function(t,i){i[e]=w(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i,n=(7+_t(t,0,o).getUTCDay()-e)%7;return-n+o-1}function kt(t,e,i,o,n){var s,r,a=(7+i-o)%7,d=wt(t,o,n),h=1+7*(e-1)+a+d;return h<=0?(s=t-1,r=gt(s)+h):h>gt(t)?(s=t+1,r=h-gt(t)):(s=t,r=h),{year:s,dayOfYear:r}}function xt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+Ot(n,e,i)):r>Ot(t.year(),e,i)?(o=r-Ot(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function Ot(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(gt(t)-o+n)/7}function Mt(t){return xt(t,this._week.dow,this._week.doy).week}function St(){return this._week.dow}function Et(){return this._week.doy}function Dt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ct(t){var e=xt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Ft(t,e){return t?o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone}function Bt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function It(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function zt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=c([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null):"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null)))}function Nt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return zt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=c([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Rt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function At(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function jt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ht(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=En),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Lt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Cn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Yt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],d=[],h=[];for(e=0;e<7;e++)i=c([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),d.push(s),h.push(o),h.push(n),h.push(s);for(r.sort(t),a.sort(t),d.sort(t),h.sort(t),e=0;e<7;e++)a[e]=et(a[e]),d[e]=et(d[e]),h[e]=et(h[e]);this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Vt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function qt(t,e){G(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Gt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Kt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Zt(t){return t?t.toLowerCase().replace("_","-"):t}function Qt(t){for(var e,i,o,n,s=0;s0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&k(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!In[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=Tn._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Jt(i)}catch(t){}return In[e]}function Jt(t,e){var i;return t&&(i=r(e)?ie(t):te(t,e),i&&(Tn=i)),Tn._abbr}function te(t,e){if(null!==e){var i=Bn;if(e.abbr=t,null!=In[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=In[t]._config;else if(null!=e.parentLocale){if(null==In[e.parentLocale])return zn[e.parentLocale]||(zn[e.parentLocale]=[]),zn[e.parentLocale].push({name:t,config:e}),null;i=In[e.parentLocale]._config}return In[t]=new C(D(i,e)),zn[t]&&zn[t].forEach(function(t){te(t.name,t.config)}),Jt(t),In[t]}return delete In[t],null}function ee(t,e){if(null!=e){var i,o=Bn;null!=In[t]&&(o=In[t]._config),e=D(o,e),i=new C(e),i.parentLocale=In[t],In[t]=i,Jt(t)}else null!=In[t]&&(null!=In[t].parentLocale?In[t]=In[t].parentLocale:null!=In[t]&&delete In[t]);return In[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Tn;if(!o(t)){if(e=$t(t))return e;t=[t]}return Qt(t)}function oe(){return Do(In)}function ne(t){var e,i=t._a;return i&&p(t).overflow===-2&&(e=i[dn]<0||i[dn]>11?dn:i[hn]<1||i[hn]>st(i[an],i[dn])?hn:i[ln]<0||i[ln]>24||24===i[ln]&&(0!==i[un]||0!==i[cn]||0!==i[fn])?ln:i[un]<0||i[un]>59?un:i[cn]<0||i[cn]>59?cn:i[fn]<0||i[fn]>999?fn:-1,p(t)._overflowDayOfYear&&(ehn)&&(e=hn),p(t)._overflowWeeks&&e===-1&&(e=pn),p(t)._overflowWeekday&&e===-1&&(e=vn),p(t).overflow=e),t}function se(t){var e,i,o,n,s,r,a=t._i,d=Nn.exec(a)||Rn.exec(a);if(d){for(p(t).iso=!0,e=0,i=jn.length;e10?"YYYY ":"YY "),s="HH:mm"+(i[4]?":ss":""),i[1]){var u=new Date(i[2]),c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][u.getDay()];if(i[1].substr(0,3)!==c)return p(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(i[5].length){case 2:0===d?a=" +0000":(d=l.indexOf(i[5][1].toUpperCase())-12,a=(d<0?" -":" +")+(""+d).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=h[i[5]];break;default:a=h[" GMT"]}i[5]=a,t._i=i.splice(1).join(""),r=" ZZ",t._f=o+n+s+r,ce(t),p(t).rfc2822=!0}else t._isValid=!1}function ae(t){var i=Ln.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(se(t),void(t._isValid===!1&&(delete t._isValid,re(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function de(t,e,i){return null!=t?t:null!=e?e:i}function he(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function le(t){var e,i,o,n,s=[];if(!t._d){for(o=he(t),t._w&&null==t._a[hn]&&null==t._a[dn]&&ue(t),null!=t._dayOfYear&&(n=de(t._a[an],o[an]),(t._dayOfYear>gt(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[dn]=i.getUTCMonth(),t._a[hn]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ln]&&0===t._a[un]&&0===t._a[cn]&&0===t._a[fn]&&(t._nextDay=!0,t._a[ln]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ln]=24)}}function ue(t){var e,i,o,n,s,r,a,d;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=de(e.GG,t._a[an],xt(_e(),1,4).year),o=de(e.W,1),n=de(e.E,1),(n<1||n>7)&&(d=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var h=xt(_e(),s,r);i=de(e.gg,t._a[an],h.year),o=de(e.w,h.week),null!=e.d?(n=e.d,(n<0||n>6)&&(d=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(d=!0)):n=s}o<1||o>Ot(i,s,r)?p(t)._overflowWeeks=!0:null!=d?p(t)._overflowWeekday=!0:(a=kt(i,o,n,s,r),t._a[an]=a.year,t._dayOfYear=a.dayOfYear)}function ce(t){if(t._f===e.ISO_8601)return void se(t);if(t._f===e.RFC_2822)return void re(t);t._a=[],p(t).empty=!0;var i,o,n,s,r,a=""+t._i,d=a.length,h=0;for(n=Q(t._f,t._locale).match(Ro)||[],i=0;i0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),h+=o.length),Ho[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),nt(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=d-h,a.length>0&&p(t).unusedInput.push(a),t._a[ln]<=12&&p(t).bigHour===!0&&t._a[ln]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[ln]=fe(t._locale,t._a[ln],t._meridiem),le(t),ne(t)}function fe(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function pe(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Le(){if(!r(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?c(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&k(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ye(){return!!this.isValid()&&this._isUTC}function Ve(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var i,o,n,s=t,r=null;return De(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(s={},e?s[e]=t:s.milliseconds=t):(r=Xn.exec(t))?(i="-"===r[1]?-1:1,s={y:0,d:w(r[hn])*i,h:w(r[ln])*i,m:w(r[un])*i,s:w(r[cn])*i,ms:w(Ce(1e3*r[fn]))*i}):(r=Kn.exec(t))?(i="-"===r[1]?-1:1,s={y:qe(r[2],i),M:qe(r[3],i),w:qe(r[4],i),d:qe(r[5],i),h:qe(r[6],i),m:qe(r[7],i),s:qe(r[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Xe(_e(s.from),_e(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ee(s),De(t)&&l(t,"_locale")&&(o._locale=t._locale),o}function qe(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function Ge(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 Xe(t,e){var i;return t.isValid()&&e.isValid()?(e=Fe(e,t),t.isBefore(e)?i=Ge(t,e):(i=Ge(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function Ke(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ue(i,o),Ze(this,n,t),this}}function Ze(t,i,o,n){var s=i._milliseconds,r=Ce(i._days),a=Ce(i._months);t.isValid()&&(n=null==n||n,s&&t._d.setTime(t._d.valueOf()+s*o),r&&Y(t,"Date",W(t,"Date")+r*o),a&<(t,W(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function Qe(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function $e(t,i){var o=t||_e(),n=Fe(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(S(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,_e(o)))}function Je(){return new m(this)}function ti(t,e){var i=b(t)?t:_e(t);return!(!this.isValid()||!i.isValid())&&(e=R(r(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?Z(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):S(Date.prototype.toISOString)?this.toDate().toISOString():Z(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function li(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",s=e+'[")]';return this.format(i+o+n+s)}function ui(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=Z(this,t);return this.localeData().postformat(i)}function ci(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function fi(t){return this.from(_e(),t)}function pi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function vi(t){return this.to(_e(),t)}function gi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function yi(){return this._locale}function mi(t){switch(t=R(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function bi(t){return t=R(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function _i(){return this._d.valueOf()-6e4*(this._offset||0)}function wi(){return Math.floor(this.valueOf()/1e3)}function ki(){return new Date(this.valueOf())}function xi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Oi(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Mi(){return this.isValid()?this.toISOString():null}function Si(){return v(this)}function Ei(){return u({},p(this))}function Di(){return p(this).overflow}function Ci(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ti(t,e){G(0,[t,t.length],0,e)}function Pi(t){return zi.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fi(t){return zi.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Bi(){return Ot(this.year(),1,4)}function Ii(){var t=this.localeData()._week;return Ot(this.year(),t.dow,t.doy)}function zi(t,e,i,o,n){var s;return null==t?xt(this,o,n).year:(s=Ot(t,o,n),e>s&&(e=s),Ni.call(this,t,e,i,o,n))}function Ni(t,e,i,o,n){var s=kt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Ri(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Ai(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 ji(t,e){e[fn]=w(1e3*("0."+t))}function Hi(){return this._isUTC?"UTC":""}function Li(){return this._isUTC?"Coordinated Universal Time":""}function Wi(t){return _e(1e3*t)}function Yi(){return _e.apply(null,arguments).parseZone()}function Vi(t){return t}function Ui(t,e,i,o){var n=ie(),s=c().set(o,e);return n[i](s,t)}function qi(t,e,i){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ui(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ui(t,o,i,"month");return n}function Gi(t,e,i,o){"boolean"==typeof t?(a(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e, -t=!1,a(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ui(e,(i+s)%7,o,"day");var r,d=[];for(r=0;r<7;r++)d[r]=Ui(e,(r+s)%7,o,"day");return d}function Xi(t,e){return qi(t,e,"months")}function Ki(t,e){return qi(t,e,"monthsShort")}function Zi(t,e,i){return Gi(t,e,i,"weekdays")}function Qi(t,e,i){return Gi(t,e,i,"weekdaysShort")}function $i(t,e,i){return Gi(t,e,i,"weekdaysMin")}function Ji(){var t=this._data;return this._milliseconds=rs(this._milliseconds),this._days=rs(this._days),this._months=rs(this._months),t.milliseconds=rs(t.milliseconds),t.seconds=rs(t.seconds),t.minutes=rs(t.minutes),t.hours=rs(t.hours),t.months=rs(t.months),t.years=rs(t.years),this}function to(t,e,i,o){var n=Ue(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function eo(t,e){return to(this,t,e,1)}function io(t,e){return to(this,t,e,-1)}function oo(t){return t<0?Math.floor(t):Math.ceil(t)}function no(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,d=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*oo(ro(a)+r),r=0,a=0),d.milliseconds=s%1e3,t=_(s/1e3),d.seconds=t%60,e=_(t/60),d.minutes=e%60,i=_(e/60),d.hours=i%24,r+=_(i/24),n=_(so(r)),a+=n,r-=oo(ro(n)),o=_(a/12),a%=12,d.days=r,d.months=a,d.years=o,this}function so(t){return 4800*t/146097}function ro(t){return 146097*t/4800}function ao(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if(t=R(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+so(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ro(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 ho(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN}function lo(t){return function(){return this.as(t)}}function uo(t){return t=R(t),this.isValid()?this[t+"s"]():NaN}function co(t){return function(){return this.isValid()?this._data[t]:NaN}}function fo(){return _(this.days()/7)}function po(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function vo(t,e,i){var o=Ue(t).abs(),n=ks(o.as("s")),s=ks(o.as("m")),r=ks(o.as("h")),a=ks(o.as("d")),d=ks(o.as("M")),h=ks(o.as("y")),l=n<=xs.ss&&["s",n]||n0,l[4]=i,po.apply(null,l)}function go(t){return void 0===t?ks:"function"==typeof t&&(ks=t,!0)}function yo(t,e){return void 0!==xs[t]&&(void 0===e?xs[t]:(xs[t]=e,"s"===t&&(xs.ss=e-1),!0))}function mo(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=vo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function bo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Os(this._milliseconds)/1e3,n=Os(this._days),s=Os(this._months);t=_(o/60),e=_(t/60),o%=60,t%=60,i=_(s/12),s%=12;var r=i,a=s,d=n,h=e,l=t,u=o,c=this.asSeconds();return c?(c<0?"-":"")+"P"+(r?r+"Y":"")+(a?a+"M":"")+(d?d+"D":"")+(h||l||u?"T":"")+(h?h+"H":"")+(l?l+"M":"")+(u?u+"S":""):"P0D"}var _o,wo;wo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var kn=L("FullYear",!0);G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),j("week",5),j("isoWeek",5),$("w",qo),$("ww",qo,Wo),$("W",qo),$("WW",qo,Wo),ot(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=w(t)});var xn={dow:0,doy:6};G("d",0,"do","day"),G("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),G("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),G("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),$("d",qo),$("e",qo),$("E",qo),$("dd",function(t,e){return e.weekdaysMinRegex(t)}),$("ddd",function(t,e){return e.weekdaysShortRegex(t)}),$("dddd",function(t,e){return e.weekdaysRegex(t)}),ot(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:p(i).invalidWeekday=t}),ot(["d","e","E"],function(t,e,i,o){e[o]=w(t)});var On="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Mn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Sn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),En=nn,Dn=nn,Cn=nn;G("H",["HH",2],0,"hour"),G("h",["hh",2],0,Vt),G("k",["kk",2],0,Ut),G("hmm",0,0,function(){return""+Vt.apply(this)+q(this.minutes(),2)}),G("hmmss",0,0,function(){return""+Vt.apply(this)+q(this.minutes(),2)+q(this.seconds(),2)}),G("Hmm",0,0,function(){return""+this.hours()+q(this.minutes(),2)}),G("Hmmss",0,0,function(){return""+this.hours()+q(this.minutes(),2)+q(this.seconds(),2)}),qt("a",!0),qt("A",!1),N("hour","h"),j("hour",13),$("a",Gt),$("A",Gt),$("H",qo),$("h",qo),$("k",qo),$("HH",qo,Wo),$("hh",qo,Wo),$("kk",qo,Wo),$("hmm",Go),$("hmmss",Xo),$("Hmm",Go),$("Hmmss",Xo),it(["H","HH"],ln),it(["k","kk"],function(t,e,i){var o=w(t);e[ln]=24===o?0:o}),it(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),it(["h","hh"],function(t,e,i){e[ln]=w(t),p(i).bigHour=!0}),it("hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o)),p(i).bigHour=!0}),it("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[cn]=w(t.substr(n)),p(i).bigHour=!0}),it("Hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o))}),it("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[cn]=w(t.substr(n))});var Tn,Pn=/[ap]\.?m?\.?/i,Fn=L("Hours",!0),Bn={calendar:Co,longDateFormat:To,invalidDate:Po,ordinal:Fo,dayOfMonthOrdinalParse:Bo,relativeTime:Io,months:mn,monthsShort:bn,week:xn,weekdays:On,weekdaysMin:Sn,weekdaysShort:Mn,meridiemParse:Pn},In={},zn={},Nn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Rn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,An=/Z|[+-]\d\d(?::?\d\d)?/,jn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Hn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ln=/^\/?Date\((\-?\d+)/i,Wn=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=O("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Yn=O("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:g()}),Un=function(){return Date.now?Date.now():+new Date},qn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Te("Z",":"),Te("ZZ",""),$("Z",en),$("ZZ",en),it(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Pe(en,t)});var Gn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xn=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Kn=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=Ee.prototype,Ue.invalid=Se;var Zn=Ke(1,"add"),Qn=Ke(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var $n=O("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ti("gggg","weekYear"),Ti("ggggg","weekYear"),Ti("GGGG","isoWeekYear"),Ti("GGGGG","isoWeekYear"),N("weekYear","gg"),N("isoWeekYear","GG"),j("weekYear",1),j("isoWeekYear",1),$("G",Jo),$("g",Jo),$("GG",qo,Wo),$("gg",qo,Wo),$("GGGG",Zo,Vo),$("gggg",Zo,Vo),$("GGGGG",Qo,Uo),$("ggggg",Qo,Uo),ot(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=w(t)}),ot(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),G("Q",0,"Qo","quarter"),N("quarter","Q"),j("quarter",7),$("Q",Lo),it("Q",function(t,e){e[dn]=3*(w(t)-1)}),G("D",["DD",2],"Do","date"),N("date","D"),j("date",9),$("D",qo),$("DD",qo,Wo),$("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),it(["D","DD"],hn),it("Do",function(t,e){e[hn]=w(t.match(qo)[0],10)});var Jn=L("Date",!0);G("DDD",["DDDD",3],"DDDo","dayOfYear"),N("dayOfYear","DDD"),j("dayOfYear",4),$("DDD",Ko),$("DDDD",Yo),it(["DDD","DDDD"],function(t,e,i){i._dayOfYear=w(t)}),G("m",["mm",2],0,"minute"),N("minute","m"),j("minute",14),$("m",qo),$("mm",qo,Wo),it(["m","mm"],un);var ts=L("Minutes",!1);G("s",["ss",2],0,"second"),N("second","s"),j("second",15),$("s",qo),$("ss",qo,Wo),it(["s","ss"],cn);var es=L("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,function(){return 10*this.millisecond()}),G(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),G(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),G(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),G(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),G(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),N("millisecond","ms"),j("millisecond",16),$("S",Ko,Lo),$("SS",Ko,Wo),$("SSS",Ko,Yo);var is;for(is="SSSS";is.length<=9;is+="S")$(is,$o);for(is="S";is.length<=9;is+="S")it(is,ji);var os=L("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var ns=m.prototype;ns.add=Zn,ns.calendar=$e,ns.clone=Je,ns.diff=ri,ns.endOf=bi,ns.format=ui,ns.from=ci,ns.fromNow=fi,ns.to=pi,ns.toNow=vi,ns.get=V,ns.invalidAt=Di,ns.isAfter=ti,ns.isBefore=ei,ns.isBetween=ii,ns.isSame=oi,ns.isSameOrAfter=ni,ns.isSameOrBefore=si,ns.isValid=Si,ns.lang=$n,ns.locale=gi,ns.localeData=yi,ns.max=Vn,ns.min=Yn,ns.parsingFlags=Ei,ns.set=U,ns.startOf=mi,ns.subtract=Qn,ns.toArray=xi,ns.toObject=Oi,ns.toDate=ki,ns.toISOString=hi,ns.inspect=li,ns.toJSON=Mi,ns.toString=di,ns.unix=wi,ns.valueOf=_i,ns.creationData=Ci,ns.year=kn,ns.isLeapYear=mt,ns.weekYear=Pi,ns.isoWeekYear=Fi,ns.quarter=ns.quarters=Ri,ns.month=ut,ns.daysInMonth=ct,ns.week=ns.weeks=Dt,ns.isoWeek=ns.isoWeeks=Ct,ns.weeksInYear=Ii,ns.isoWeeksInYear=Bi,ns.date=Jn,ns.day=ns.days=Rt,ns.weekday=At,ns.isoWeekday=jt,ns.dayOfYear=Ai,ns.hour=ns.hours=Fn,ns.minute=ns.minutes=ts,ns.second=ns.seconds=es,ns.millisecond=ns.milliseconds=os,ns.utcOffset=Ie,ns.utc=Ne,ns.local=Re,ns.parseZone=Ae,ns.hasAlignedHourOffset=je,ns.isDST=He,ns.isLocal=We,ns.isUtcOffset=Ye,ns.isUtc=Ve,ns.isUTC=Ve,ns.zoneAbbr=Hi,ns.zoneName=Li,ns.dates=O("dates accessor is deprecated. Use date instead.",Jn),ns.months=O("months accessor is deprecated. Use month instead",ut),ns.years=O("years accessor is deprecated. Use year instead",kn),ns.zone=O("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",ze),ns.isDSTShifted=O("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Le);var ss=C.prototype;ss.calendar=T,ss.longDateFormat=P,ss.invalidDate=F,ss.ordinal=B,ss.preparse=Vi,ss.postformat=Vi,ss.relativeTime=I,ss.pastFuture=z,ss.set=E,ss.months=rt,ss.monthsShort=at,ss.monthsParse=ht,ss.monthsRegex=pt,ss.monthsShortRegex=ft,ss.week=Mt,ss.firstDayOfYear=Et,ss.firstDayOfWeek=St,ss.weekdays=Ft,ss.weekdaysMin=It,ss.weekdaysShort=Bt,ss.weekdaysParse=Nt,ss.weekdaysRegex=Ht,ss.weekdaysShortRegex=Lt,ss.weekdaysMinRegex=Wt,ss.isPM=Xt,ss.meridiem=Kt,Jt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=O("moment.lang is deprecated. Use moment.locale instead.",Jt),e.langData=O("moment.langData is deprecated. Use moment.localeData instead.",ie);var rs=Math.abs,as=lo("ms"),ds=lo("s"),hs=lo("m"),ls=lo("h"),us=lo("d"),cs=lo("w"),fs=lo("M"),ps=lo("y"),vs=co("milliseconds"),gs=co("seconds"),ys=co("minutes"),ms=co("hours"),bs=co("days"),_s=co("months"),ws=co("years"),ks=Math.round,xs={ss:44,s:45,m:45,h:22,d:26,M:11},Os=Math.abs,Ms=Ee.prototype;return Ms.isValid=Me,Ms.abs=Ji,Ms.add=eo,Ms.subtract=io,Ms.as=ao,Ms.asMilliseconds=as,Ms.asSeconds=ds,Ms.asMinutes=hs,Ms.asHours=ls,Ms.asDays=us,Ms.asWeeks=cs,Ms.asMonths=fs,Ms.asYears=ps,Ms.valueOf=ho,Ms._bubble=no,Ms.get=uo,Ms.milliseconds=vs,Ms.seconds=gs,Ms.minutes=ys,Ms.hours=ms,Ms.days=bs,Ms.weeks=fo,Ms.months=_s,Ms.years=ws,Ms.humanize=mo,Ms.toISOString=bo,Ms.toString=bo,Ms.toJSON=bo,Ms.locale=gi,Ms.localeData=yi,Ms.toIsoString=O("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",bo),Ms.lang=$n,G("X",0,0,"unix"),G("x",0,0,"valueOf"),$("x",Jo),$("X",on),it("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,i){i._d=new Date(w(t))}),e.version="2.18.0",i(_e),e.fn=ns,e.min=ke,e.max=xe,e.now=Un,e.utc=c,e.unix=Wi,e.months=Xi,e.isDate=d,e.locale=Jt,e.invalid=g,e.duration=Ue,e.isMoment=b,e.weekdays=Zi,e.parseZone=Yi,e.localeData=ie,e.isDuration=De,e.monthsShort=Ki,e.weekdaysMin=$i,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=Qi,e.normalizeUnits=R,e.relativeTimeRounding=go,e.relativeTimeThreshold=yo,e.calendarFormat=Qe,e.prototype=ns,e})}).call(e,i(84)(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=85},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){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:v,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),d=void 0!==t.nsecs?t.nsecs:y+1,h=a-g+(d-y)/1e4;if(h<0&&void 0===t.clockseq&&(r=r+1&16383),(h<0||a>g)&&void 0===t.nsecs&&(d=0),d>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,y=d,v=r,a+=122192928e5;var l=(1e4*(268435455&a)+d)%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||p,f=0;f<6;f++)s[n+f]=c[f];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;a<16;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 d=new Uint8Array(16);r=function(){return crypto.getRandomValues(d),d}}if(!r){var h=new Array(16);r=function(){for(var t,e=0;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),h[e]=t>>>((3&e)<<3)&255;return h}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var f=r(),p=[1|f[0],f[1],f[2],f[3],f[4],f[5]],v=16383&(f[6]<<8|f[7]),g=0,y=0,m=s;m.v1=n,m.v4=s,m.parse=i,m.unparse=o,t.exports=m}).call(e,function(){return this}())},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var d=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(d.textContent=r.content),r.className&&d.setAttributeNS(null,"class",r.className+" vis-label"),d.setAttributeNS(null,"x",t),d.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,d){if(0!=n){n<0&&(n*=-1,i-=n);var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*o),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",o),h.setAttributeNS(null,"height",n),h.setAttributeNS(null,"class",s),d&&h.setAttributeNS(null,"style",d)}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(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=(0,l.default)(this._options.type),o=0,n=i.length;on?1:or)&&(s=d,r=h)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;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){return t&&t.__esModule?t:{default:t}}function n(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 s=i(58),r=o(s),a=i(1),d=i(88);n.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;o0){var i=this.groupIndex%this.groupsArray.length;this.groupIndex++,e={},e.color=this.groups[this.groupsArray[i]],this.groups[t]=e}else{var o=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,e={},e.color=this.defaultGroups[o],this.groups[t]=e}return e}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(95),s=o(n),r=i(96),a=o(r),d=i(102),h=o(d),l=i(103),u=o(l),c=i(1),f=i(88),p=i(92),v=function(){function t(e,i,o,n){var r=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},c.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){c.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(this.nodeOptions=t,void 0!==t){if(h.default.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font){u.default.parseOptions(this.options.font,t);for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i]._reset())}if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o]._reset();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof f||t instanceof p)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new f,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new f}if(i&&c.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;c.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}e===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:h.default;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions,this.nodeOptions)}},{key:"refresh",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.body.nodes;for(var i in e){var o=void 0;e.hasOwnProperty(i)&&(o=e[i]);var n=this.body.data.nodes._data[i];void 0!==o&&void 0!==n&&(t===!0&&o.setOptions({x:null,y:null}),o.setOptions({fixed:!1}),o.setOptions(n))}}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(Array.isArray(t)===!0){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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["color","font","fixed","shadow"];if(L.selectiveNotDeepExtend(n,t,e,i),L.mergeOptions(t,e,"shadow",i,o),void 0!==e.color&&null!==e.color){var s=L.parseColor(e.color);L.fillIfDefined(t.color,s)}else i===!0&&null===e.color&&(t.color=L.bridgeObject(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),void 0!==e.font&&null!==e.font?u.default.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=L.bridgeObject(o.font)),void 0!==e.scaling&&L.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)}}]),t}();e.default=W},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(104),s=o(n),r=i(2),a=o(r),d=i(62),h=o(d),l=i(95),u=o(l),c=i(96),f=o(c),p=i(1),v=function(){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,u.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,f.default)(t,[{key:"setOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.elementOptions=e,this.fontOptions=p.deepExtend({},e.font,!0),void 0!==e.label&&(this.labelDirty=!0),void 0!==e.font&&(t.parseOptions(this.fontOptions,e,i),"string"==typeof e.font?this.baseSize=this.fontOptions.size:"object"===(0,h.default)(e.font)&&void 0!==e.font.size&&(this.baseSize=e.font.size))}},{key:"constrain",value:function(t,e,i){this.fontOptions.constrainWidth=!1,this.fontOptions.maxWdt=-1,this.fontOptions.minWdt=-1;var o=[e,t,i],n=p.topMost(o,"widthConstraint");if("number"==typeof n)this.fontOptions.maxWdt=Number(n),this.fontOptions.minWdt=Number(n);else if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))){var s=p.topMost(o,["widthConstraint","maximum"]);"number"==typeof s&&(this.fontOptions.maxWdt=Number(s));var r=p.topMost(o,["widthConstraint","minimum"]);"number"==typeof r&&(this.fontOptions.minWdt=Number(r))}this.fontOptions.constrainHeight=!1,this.fontOptions.minHgt=-1,this.fontOptions.valign="middle";var a=p.topMost(o,"heightConstraint");if("number"==typeof a)this.fontOptions.minHgt=Number(a);else if("object"===("undefined"==typeof a?"undefined":(0,h.default)(a))){var d=p.topMost(o,["heightConstraint","minimum"]);"number"==typeof d&&(this.fontOptions.minHgt=Number(d));var l=p.topMost(o,["heightConstraint","valign"]);"string"==typeof l&&("top"!==l&&"bottom"!==l||(this.fontOptions.valign=l))}}},{key:"choosify",value:function(t,e,i){this.fontOptions.chooser=!0;var o=[e,t,i],n=p.topMost(o,"chosen");if("boolean"==typeof n)this.fontOptions.chooser=n;else if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))){var s=p.topMost(o,["chosen","label"]);"boolean"!=typeof s&&"function"!=typeof s||(this.fontOptions.chooser=s)}}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"propagateFonts",value:function(t,e,i){if(this.fontOptions.multi){var o=["bold","ital","boldital","mono"],n=!0,s=!1,r=void 0;try{for(var d,h=(0,a.default)(o);!(n=(d=h.next()).done);n=!0){var l=d.value,u=void 0;if(t.font&&(u=t.font[l]),"string"==typeof u){var c=u.split(" ");this.fontOptions[l].size=c[0].replace("px",""),this.fontOptions[l].face=c[1],this.fontOptions[l].color=c[2],this.fontOptions[l].vadjust=this.fontOptions.vadjust,this.fontOptions[l].mod=i.font[l].mod}else{if(u&&u.hasOwnProperty("face")?this.fontOptions[l].face=u.face:e.font&&e.font[l]&&e.font[l].hasOwnProperty("face")?this.fontOptions[l].face=e.font[l].face:"mono"===l?this.fontOptions[l].face=i.font[l].face:e.font&&e.font.hasOwnProperty("face")?this.fontOptions[l].face=e.font.face:this.fontOptions[l].face=this.fontOptions.face,u&&u.hasOwnProperty("color")?this.fontOptions[l].color=u.color:e.font&&e.font[l]&&e.font[l].hasOwnProperty("color")?this.fontOptions[l].color=e.font[l].color:e.font&&e.font.hasOwnProperty("color")?this.fontOptions[l].color=e.font.color:this.fontOptions[l].color=this.fontOptions.color,u&&u.hasOwnProperty("mod")?this.fontOptions[l].mod=u.mod:e.font&&e.font[l]&&e.font[l].hasOwnProperty("mod")?this.fontOptions[l].mod=e.font[l].mod:e.font&&e.font.hasOwnProperty("mod")?this.fontOptions[l].mod=e.font.mod:this.fontOptions[l].mod=i.font[l].mod,u&&u.hasOwnProperty("size"))this.fontOptions[l].size=u.size;else if(e.font&&e.font[l]&&e.font[l].hasOwnProperty("size"))this.fontOptions[l].size=e.font[l].size;else if(this.fontOptions[l].face===i.font[l].face&&this.fontOptions.face===i.font.face){var f=this.fontOptions.size/Number(i.font.size);this.fontOptions[l].size=i.font[l].size*f}else e.font&&e.font.hasOwnProperty("size")?this.fontOptions[l].size=e.font.size:this.fontOptions[l].size=this.fontOptions.size;if(u&&u.hasOwnProperty("vadjust"))this.fontOptions[l].vadjust=u.vadjust;else if(e.font&&e.font[l]&&e.font[l].hasOwnProperty("vadjust"))this.fontOptions[l].vadjust=e.font[l].vadjust;else if(this.fontOptions[l].face===i.font[l].face&&this.fontOptions.face===i.font.face){var p=this.fontOptions.size/Number(i.font.size);this.fontOptions[l].vadjust=i.font[l].vadjust*Math.round(p)}else e.font&&e.font.hasOwnProperty("vadjust")?this.fontOptions[l].vadjust=e.font.vadjust:this.fontOptions[l].vadjust=this.fontOptions.vadjust}this.fontOptions[l].size=Number(this.fontOptions[l].size),this.fontOptions[l].vadjust=Number(this.fontOptions[l].vadjust)}}catch(t){s=!0,r=t}finally{try{!n&&h.return&&h.return()}finally{if(s)throw r}}}}},{key:"draw",value:function(t,e,i,o,n){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r5&&void 0!==arguments[5]?arguments[5]:"middle",a=this.fontOptions.size,d=a*this.body.view.scale;d>=this.elementOptions.scaling.label.maxVisible&&(a=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale);var h=this.size.yLine,l=this._setAlignment(t,o,h,r),u=(0,s.default)(l,2);o=u[0],h=u[1],t.textAlign="left",o-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(h-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(h+=(this.size.height-this.size.labelHeight)/2));for(var c=0;c0&&(t.lineWidth=v.strokeWidth,t.strokeStyle=b,t.lineJoin="round"),t.fillStyle=m,v.strokeWidth>0&&t.strokeText(v.text,o+f,h+v.vadjust),t.fillText(v.text,o+f,h+v.vadjust),f+=v.width}h+=this.lines[c].height}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&this.pointToSelf===!1){e=0,i=0;var n=2;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=2*n):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=2*n):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=p.overrideOpacity(o,s),n=p.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this.labelDirty===!0&&this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4),this.labelDirty=!1}},{key:"decodeMarkupSystem",value:function(t){var e="none";return"markdown"===t||"md"===t?e="markdown":t!==!0&&"html"!==t||(e="html"),e}},{key:"splitBlocks",value:function(t,e){var i=this.decodeMarkupSystem(e);return"none"===i?[{text:t,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(t):"html"===i?this.splitHtmlBlocks(t):void 0}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position/.test(t.substr(i.position,3))?i.mono||i.ital||!//.test(t.substr(i.position,3))?!i.mono&&//.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/</.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"getFormattingValues",value:function(t,e,i,o){var n={color:"normal"===o?this.fontOptions.color:this.fontOptions[o].color,size:"normal"===o?this.fontOptions.size:this.fontOptions[o].size,face:"normal"===o?this.fontOptions.face:this.fontOptions[o].face,mod:"normal"===o?"":this.fontOptions[o].mod,vadjust:"normal"===o?this.fontOptions.vadjust:this.fontOptions[o].vadjust,strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};return"normal"===o?(e||i)&&(this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?n.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,n,this.elementOptions.id,e,i)):(e||i)&&"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,n,this.elementOptions.id,e,i),t.font=(n.mod+" "+n.size+"px "+n.face).replace(/"/g,""),n.font=t.font,n.height=n.size,n}},{key:"differentState",value:function(t,e){return t!==this.fontOptions.selectedState&&e!==this.fontOptions.hoverState}},{key:"_processLabel",value:function(t,e,i){var o=0,n=0,s=[],r=0;if(s.add=function(t,e,i,o,n,s,r,a,d,h){this.length==t&&(this[t]={width:0,height:0,blocks:[]}),this[t].blocks.push({text:e,font:i,color:o,width:n,height:s,vadjust:r,mod:a,strokeWidth:d,strokeColor:h})},s.accumulate=function(t,e,i){this[t].width+=e,this[t].height=i>this[t].height?i:this[t].height},s.addAndAccumulate=function(t,e,i,o,n,s,r,a,d,h){this.add(t,e,i,o,n,s,r,a,d,h),this.accumulate(t,n,s)},void 0!==this.elementOptions.label){var a=String(this.elementOptions.label).split("\n"),d=a.length;if(this.elementOptions.font.multi)for(var h=0;h0)for(var v=this.getFormattingValues(t,e,i,l[p].mod),g=l[p].text.split(" "),y=!0,m="",b={width:0},_=void 0,w=0;wthis.fontOptions.maxWdt&&0!=_.width?(c=v.height>c?v.height:c,s.add(r,m,v.font,v.color,_.width,v.height,v.vadjust,l[p].mod,v.strokeWidth,v.strokeColor),s.accumulate(r,_.width,c),m="",y=!0,u=0,o=s[r].width>o?s[r].width:o,n+=s[r].height,r++):(m=m+k+g[w],w===g.length-1&&(c=v.height>c?v.height:c,u+=b.width,s.add(r,m,v.font,v.color,b.width,v.height,v.vadjust,l[p].mod,v.strokeWidth,v.strokeColor),s.accumulate(r,b.width,c),p===l.length-1&&(o=s[r].width>o?s[r].width:o,n+=s[r].height,r++)),w++,y=!1)}else{var x=this.getFormattingValues(t,e,i,l[p].mod),O=t.measureText(l[p].text);s.addAndAccumulate(r,l[p].text,x.font,x.color,O.width,x.height,x.vadjust,l[p].mod,x.strokeWidth,x.strokeColor),o=s[r].width>o?s[r].width:o,l.length-1===p&&(n+=s[r].height,r++)}}}else for(var M=0;M0)for(var E=a[M].split(" "),D="",C={width:0},T=void 0,P=0;Pthis.fontOptions.maxWdt&&0!=T.width?(s.addAndAccumulate(r,D,S.font,S.color,T.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,D="",r++):(D=D+F+E[P],P===E.length-1&&(s.addAndAccumulate(r,D,S.font,S.color,C.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++),P++)}else{var B=a[M],I=t.measureText(B);s.addAndAccumulate(r,B,S.font,S.color,I.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++}}}this.fontOptions.minWdt>0&&o0&&n2&&void 0!==arguments[2]&&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],t.vadjust=0}else"object"===(0,h.default)(e.font)&&p.fillIfDefined(t,e.font,i);t.size=Number(t.size),t.vadjust=Number(t.vadjust)}}]),t}();e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(105),s=o(n),r=i(2),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,d=(0,a.default)(t);!(o=(r=d.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&d.return&&d.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e,i){t.exports={default:i(106),__esModule:!0}},function(t,e,i){i(4),i(50),t.exports=i(107)},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).isIterable=function(t){var e=Object(t);return void 0!==e[n]||"@@iterator"in e||s.hasOwnProperty(o(e))}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;(void 0===this.width||this.labelModule.differentState(e,i))&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=this.width/2)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,t.strokeStyle=s.borderColor,t.lineWidth=s.borderWidth,t.lineWidth/=this.body.view.scale,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=s.color,t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),s.borderWidth>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2;var s=this.options.shapeProperties.borderRadius;this.boundingBox.left=this.left-s,this.boundingBox.top=this.top-s,this.boundingBox.bottom=this.top+this.height+s,this.boundingBox.right=this.left+this.width+s}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(v.default);e.default=g},function(t,e,i){t.exports={default:i(110),__esModule:!0}},function(t,e,i){i(111),t.exports=i(17).Object.getPrototypeOf},function(t,e,i){var o=i(49),n=i(48);i(61)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(62),s=o(n);e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==("undefined"==typeof e?"undefined":(0,s.default)(e))&&"function"!=typeof e?t:e}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(114),s=o(n),r=i(55),a=o(r),d=i(62),h=o(d);e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":(0,h.default)(e)));t.prototype=(0,a.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(s.default?(0,s.default)(t,e):t.__proto__=e)}},function(t,e,i){t.exports={default:i(115),__esModule:!0}},function(t,e,i){i(116),t.exports=i(17).Object.setPrototypeOf},function(t,e,i){var o=i(15);o(o.S,"Object",{setPrototypeOf:i(117).set})},function(t,e,i){var o=i(23),n=i(22),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(18)(Function.call,i(78).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(62),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,h.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"_setMargins",value:function(t){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(t,e){var i=this.options.borderWidth;return this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:"enableShadow",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(t,e){if(e.borderDashes!==!1)if(void 0!==t.setLineDash){var i=e.borderDashes;i===!0&&(i=[5,15]),t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:"disableBorderDashes",value:function(t,e){e.borderDashes!==!1&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(120),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(void 0===this.width||this.labelModule.differentState(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=Math.max(this.textSize.width+this.margin.right+this.margin.left,this.textSize.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,o,n,s),this.boundingBox.top=i-s.size,this.boundingBox.left=e-s.size,this.boundingBox.right=e+s.size,this.boundingBox.bottom=i+s.size,this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n.labelOffset=0,n.imageLoaded=!1,n.selected=!1,n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"setOptions",value:function(t,e,i){this.options=t,this.setImages(e,i)}},{key:"setImages",value:function(t,e){t&&(this.imageObj=t,e&&(this.imageObjAlt=e))}},{key:"switchImages",value:function(t){if(t&&!this.selected||!t&&this.selected){var e=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=e}this.selected=t}},{key:"_resizeImage",value:function(){var t=!1;if(this.imageObj.width&&this.imageObj.height?this.imageLoaded===!1&&(this.imageLoaded=!0,t=!0):this.imageLoaded=!1,!this.width||!this.height||t===!0){var e,i,o;this.imageObj.width&&this.imageObj.height&&(e=0,i=0),this.options.shapeProperties.useImageSize===!1?this.imageObj.width>this.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=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.circle(e,i,s.size),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore()}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=this.imageObj.width/this.width/this.body.view.scale;if(i>2&&this.options.shapeProperties.interpolation===!0){var o=this.imageObj.width,n=this.imageObj.height,s=document.createElement("canvas");s.width=o,s.height=o;var r=s.getContext("2d");i*=.5,o*=.5,n*=.5,r.drawImage(this.imageObj,0,0,o,n);for(var a=0,d=1;i>2&&d<4;)r.drawImage(s,a,0,o,n,a+o,0,o/2,n/2),a+=o,i*=.5,o*=.5,n*=.5,d+=1;t.drawImage(s,a,0,o,n,this.left,this.top,this.width,this.height)}else t.drawImage(this.imageObj,this.left,this.top,this.width,this.height);this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(120),v=o(p),g=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return d.setImages(n,r),d._swapToImageResizeWhenImageLoaded=!0,d}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){ -var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height||this.labelModule.differentState(e,i)){var o=2*this.options.size;this.width=o,this.height=o,this._swapToImageResizeWhenImageLoaded=!0,this.radius=.5*this.width}else this._swapToImageResizeWhenImageLoaded&&(this.width=void 0,this.height=void 0,this._swapToImageResizeWhenImageLoaded=!1),this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.imageObjAlt&&this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2;Math.min(.5*this.height,.5*this.width);this._drawRawCircle(t,e,i,o,n,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){if(void 0===this.width||this.labelModule.differentState(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width+this.margin.right+this.margin.left;this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments[3];this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_resizeShape",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.selected,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.hover,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{size:this.options.size};if(void 0===this.width||this.labelModule.differentState(t,e)){var o=2*i.size;this.width=o,this.height=o,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){this._resizeShape(s,r,a),this.left=o-this.width/2,this.top=n-this.height/2;var d=a.borderWidth/this.body.view.scale;if(t.lineWidth=Math.min(this.width,d),t.strokeStyle=a.borderColor,t.fillStyle=a.color,t[e](o,n,a.size),this.enableShadow(t,a),t.fill(),this.disableShadow(t,a),t.save(),d>0&&(this.enableBorderDashes(t,a),t.stroke(),this.disableBorderDashes(t,a)),t.restore(),void 0!==this.options.label){var h=n+.5*this.height+3;this.labelModule.draw(t,o,h,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+3))}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments[3];this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.width||this.labelModule.differentState(e,i)){var o=this.labelModule.getTextSize(t,e,i);this.height=2*o.height,this.width=o.width+this.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.ellipse(this.left,this.top,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){(void 0===this.width||this.labelModule.differentState(e,i))&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){var r=5;this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+r,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){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,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(120),v=o(p),g=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return d.setImages(n,r),d}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(){this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.imageObjAlt&&this.switchImages(o),this.selected=o,this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this.options.shapeProperties.useBorderWithImage===!0){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,d=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),t.save(),d>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i,o){this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(118),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){(void 0===this.width||this.labelModule.differentState(e,i))&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(124),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(89),s=o(n),r=i(62),a=o(r),d=i(58),h=o(d),l=i(95),u=o(l),c=i(96),f=o(c),p=i(1),v=!1,g=void 0,y="background: #FFeeee; color: #dd0000",m=function(){function t(){(0,u.default)(this,t)}return(0,f.default)(t,null,[{key:"validate",value:function(e,i,o){v=!1,g=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),v}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){void 0===o[e]&&void 0===o.__any__?t.getSuggestion(e,o,n):void 0===o[e]&&void 0!==o.__any__?"object"===t.getType(i[e])&&void 0!==o.__any__.__type__?t.checkFields(e,i,o,"__any__",o.__any__.__type__,n):t.checkFields(e,i,o,"__any__",o.__any__,n):void 0!==o[e].__type__?t.checkFields(e,i,o,e,o[e].__type__,n):t.checkFields(e,i,o,e,o[e],n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=t.getType(i[e]),d=s[a];void 0!==d?"array"===t.getType(d)&&d.indexOf(i[e])===-1?(console.log('%cInvalid option detected in "'+e+'". Allowed values are:'+t.print(d)+' not "'+i[e]+'". '+t.printLocation(r,e),y),v=!0):"object"===a&&"__any__"!==n&&(r=p.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(console.log('%cInvalid type received for "'+e+'". Expected: '+t.print((0,h.default)(s))+". Received ["+a+'] "'+i[e]+'"'+t.printLocation(r,e),y),v=!0)}},{key:"getType",value:function(t){var e="undefined"==typeof t?"undefined":(0,a.default)(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":void 0!==t.nodeType?"dom":t._isAMomentObject===!0?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,g,[],!0),r=8,a=4;void 0!==n.indexMatch?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n',y):s.distance<=a&&n.distance>s.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,""),y):n.distance<=r?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),y):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print((0,h.default)(i))+t.printLocation(o,e),y),v=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],d=e.toLowerCase(),h=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&n===!0){var c=t.findInOptions(e,i[l],p.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,h=c.indexMatch)}else l.toLowerCase().indexOf(d)!==-1&&(h=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=p.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:h}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof f||t instanceof p)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new f,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new f}if(o&&c.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){c.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}i===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;ni.shape.height?(r=i.x+.5*i.shape.width,a=i.y-d):(r=i.x+d,a=i.y-.5*i.shape.height),s=this._pointOnCircle(r,a,d,.125),this.labelModule.draw(t,s.x,s.y,n,this.hover)}}}},{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,d=this.edgeType.getDistanceToEdge(i,o,n,s,r,a);return d0&&i<0)&&(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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["arrowStrikethrough","id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width"];if(O.selectiveDeepExtend(n,t,e,i),O.mergeOptions(t,e,"smooth",i,o),O.mergeOptions(t,e,"shadow",i,o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=(0,a.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),O.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)):i===!0&&null===e.scaling&&(t.scaling=(0,a.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();t.arrows.to.enabled=r.indexOf("to")!=-1,t.arrows.middle.enabled=r.indexOf("middle")!=-1,t.arrows.from.enabled=r.indexOf("from")!=-1}else{if("object"!==(0,h.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));O.mergeOptions(t.arrows,e.arrows,"to",i,o.arrows),O.mergeOptions(t.arrows,e.arrows,"middle",i,o.arrows),O.mergeOptions(t.arrows,e.arrows,"from",i,o.arrows)}else i===!0&&null===e.arrows&&(t.arrows=(0,a.default)(o.arrows));if(void 0!==e.color&&null!==e.color)if(t.color=O.deepExtend({},t.color,!0),O.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var d=!1;void 0!==e.color.color&&(t.color.color=e.color.color,d=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,d=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,d=!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&&d===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=O.bridgeObject(o.color));void 0!==e.font&&null!==e.font?v.default.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=O.bridgeObject(o.font))}}]),t}();e.default=M},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(104),s=o(n),r=i(109),a=o(r),d=i(95),h=o(d),l=i(96),u=o(l),c=i(112),f=o(c),p=i(113),v=o(p),g=i(138),y=o(g),m=function(t){function e(t,i,o){return(0,h.default)(this,e),(0,f.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,v.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i||void 0===o.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.bezierCurveTo(o.x,o.y,n.x,n.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||this.options.smooth.forceDirection===!0||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),d=(0,s.default)(a,2),h=d[0],l=d[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,h,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3);var d=a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,h=a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y;return{x:d,y:h}}}]),e}(y.default);e.default=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(139),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var d=1e9,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=t,v=e,g=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,g[0]=Math.pow(1-u,3),g[1]=3*u*Math.pow(1-u,2),g[2]=3*Math.pow(u,2)*(1-u),g[3]=Math.pow(u,3),c=g[0]*t+g[1]*r.x+g[2]*a.x+g[3]*i,f=g[0]*e+g[1]*r.y+g[2]*a.y+g[3]*o,l>0&&(h=this._getDistanceToLine(p,v,c,f,n,s),d=h2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),d=10,h=0,l=0,u=1,c=.2,f=this.to,p=!1;for(t.id===this.from.id&&(f=this.from,p=!0);l<=u&&h0&&(d=this._getDistanceToLine(f,p,u,c,n,s),a=do.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,d=10,h=0,l=this.options.selfReferenceSize,u=void 0,c=void 0,f=void 0,p=void 0,v=void 0,g=.05,y=.5*(s+r);s<=r&&h0?a>0?s=y:r=y:a>0?r=y:s=y,h++;return u.t=y,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,o){if(e.inheritsColor!==!1){if("both"===e.inheritsColor&&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,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,this.from.selected===!1&&this.to.selected===!1?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):this.from.selected===!0&&this.to.selected===!1?r=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,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle",value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,d){var h=0;if(this.from!=this.to)h=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],f=u[1],p=u[2],v=c-n,g=f-r;h=Math.abs(Math.sqrt(v*v+g*g)-p)}return this.labelModule.size.leftn&&this.labelModule.size.topr?0:h}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,d=r*r+a*a,h=((n-t)*r+(s-e)*a)/d;h>1?h=1:h<0&&(h=0);var l=t+h*r,u=e+h*a,c=l-n,f=u-s;return Math.sqrt(c*c+f*f)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,d=void 0,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=r.width;if("from"===e?(h=this.from,l=this.to,u=.1,c=r.fromArrowScale,f=r.fromArrowType):"to"===e?(h=this.to,l=this.from,u=-.1,c=r.toArrowScale,f=r.toArrowType):(h=this.to,l=this.from,c=r.middleArrowScale,f=r.middleArrowType),h!=l)if("middle"!==e)if(this.options.smooth.enabled===!0){d=this.findBorderPosition(h,t,{via:i});var v=this.getPoint(Math.max(0,Math.min(1,d.t+u)),i);a=Math.atan2(d.y-v.y,d.x-v.x)}else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.findBorderPosition(h,t);else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.getPoint(.5,i);else{var g=this._getCircleData(t),y=(0,s.default)(g,3),m=y[0],b=y[1],_=y[2];"from"===e?(d=this.findBorderPosition(this.from,t,{x:m,y:b,low:.25,high:.6,direction:-1}),a=d.t*-2*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(d=this.findBorderPosition(this.from,t,{x:m,y:b,low:.6,high:1,direction:1}),a=d.t*-2*Math.PI+1.5*Math.PI-1.1*Math.PI):(d=this._pointOnCircle(m,b,_,.175),a=3.9269908169872414)}var w=15*c+3*p,k=d.x-.9*w*Math.cos(a),x=d.y-.9*w*Math.sin(a),O={x:k,y:x};return{point:d,core:O,angle:a,length:w,type:f}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,n.type&&"circle"===n.type.toLowerCase()?t.circleEndpoint(n.point.x,n.point.y,n.angle,n.length):t.arrowEndpoint(n.point.x,n.point.y,n.angle,n.length),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(104),s=o(n),r=i(109),a=o(r),d=i(95),h=o(d),l=i(96),u=o(l),c=i(112),f=o(c),p=i(113),v=o(p),g=i(139),y=o(g),m=function(t){function e(t,i,o){(0,h.default)(this,e);var n=(0,f.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o));return n._boundFunction=function(){n.positionBezierNode()},n.body.emitter.on("_repositionBezierNodes",n._boundFunction),n}return(0,v.default)(e,t),(0,u.default)(e,[{key:"setOptions",value:function(t){var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),e===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||this.options.physics===!1?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var t="edgeId:"+this.id,e=this.body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this.body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),d=a[0],h=a[1],l=a[2],u=2*Math.PI*(1-i);o=d+l*Math.sin(u),n=h+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(y.default);e.default=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(139),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o)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*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=nMath.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=sMath.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.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(109),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(112),u=o(l),c=i(113),f=o(c),p=i(140),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),d=t.distanceToBorder(e,n),h=(a-d)/a,l={};return l.x=(1-h)*o.x+h*i.x,l.y=(1-h)*o.y+h*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(95),a=o(r),d=i(96),h=o(d),l=i(145),u=o(l),c=i(146),f=o(c),p=i(147),v=o(p),g=i(148),y=o(g),m=i(149),b=o(m),_=i(150),w=o(_),k=i(151),x=o(k),O=i(152),M=o(O),S=i(1),E=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},S.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,h.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),t.ready===!0&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){t.ready===!0&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(t===!1?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):(this.physicsEnabled=!0,S.selectiveNotDeepExtend(["stabilization"],this.options,t),S.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new x.default(this.body,this.physicsBody,t),this.edgesSolver=new y.default(this.body,this.physicsBody,t),this.gravitySolver=new M.default(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new f.default(this.body,this.physicsBody,t),this.edgesSolver=new y.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new v.default(this.body,this.physicsBody,t),this.edgesSolver=new b.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new u.default(this.body,this.physicsBody,t),this.edgesSolver=new y.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,t===!0&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,t===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick();var e=Date.now()-t;(e<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilized===!1){if(this.adaptiveTimestep===!0&&this.adaptiveTimestepEnabled===!0){var t=1.2;this.adaptiveCounter%this.adaptiveInterval===0?(this.timestep=2*this.timestep,this.calculateForces(),this.moveNodes(),this.revert(),this.timestep=.5*this.timestep,this.calculateForces(),this.moveNodes(),this.calculateForces(),this.moveNodes(),this._evaluateStepQuality()===!0?this.timestep=t*this.timestep:this.timestep/ts))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=this.options.maxVelocity?this.options.maxVelocity:1e9,i=0,o=0,n=5,s=0;se?s[t].x>0?e:-e:s[t].x,i.x+=s[t].x*o}else n[t].x=0,s[t].x=0;if(i.options.fixed.y===!1){var d=this.modelOptions.damping*s[t].y,h=(n[t].y-d)/i.options.mass;s[t].y+=h*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]?arguments[0]:this.options.stabilization.iterations;return"number"!=typeof e&&(console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",this.options.stabilization.iterations),e=this.options.stabilization.iterations),0===this.physicsBody.physicsNodeIndices.length?void(this.ready=!0):(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,void setTimeout(function(){return t._stabilizationBatch()},0))}},{key:"_stabilizationBatch",value:function(){this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0);for(var t=0;this.stabilized===!1&&t0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s0&&(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&&o.shape.radius&&(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,d=1;d0&&(hr&&(r=h),la&&(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,f=Math.max(c,Math.abs(r-n)),p=.5*f,v=.5*(n+r),g=.5*(s+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m0&&this._placeInTree(y.root,i);return y}},{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=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(95),s=o(n),r=i(96),a=o(r),d=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,d=this.body.nodes,h=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,f=4/3,p=0;p0){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}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(62),a=o(r),d=i(95),h=o(d),l=i(96),u=o(l),c=i(154),f=o(c),p=i(155),v=o(p),g=i(1),y=function(){function t(e){var i=this;(0,h.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},g.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o=t&&i.push(n.id)}for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{},e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===t.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");t=this._checkOptions(t);for(var i={},o={},n=0;n2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o=[],n={},r=void 0,a=void 0,d=void 0,h=void 0,l=void 0,u=0;u0&&(0,s.default)(p).length>0&&g===!0&&o.push({nodes:c,edges:p})}}}for(var _=0;_1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,d=f.default.cloneOptions(o);n[a]=o;for(var h=0;h-1&&(r[y.id]=y)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,d=void 0,h=void 0,l=void 0,u=(0,s.default)(t),c=[],p=0;p0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){for(var n in t)if(t.hasOwnProperty(n)&&void 0!==this.clusteredNodes[n])return;var r=g.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var a=[];for(var d in t)if(t.hasOwnProperty(d)){var h=f.default.cloneOptions(t[d]);a.push(h)}var l=[];for(var u in e)if(e.hasOwnProperty(u)&&"clusterEdge:"!==u.substr(0,12)){var c=f.default.cloneOptions(e[u],"edge");l.push(c)}if(r=i.processProperties(r,a,l),!r)throw new Error("The processProperties function does not return properties!")}void 0===r.id&&(r.id="cluster:"+g.randomUUID());var p=r.id;void 0===r.label&&(r.label="cluster");var y=void 0;void 0===r.x&&(y=this._getClusterPosition(t),r.x=y.x),void 0===r.y&&(void 0===y&&(y=this._getClusterPosition(t)),r.y=y.y),r.id=p;var m=this.body.functions.createNode(r,v.default);m.isCluster=!0,m.containedNodes=t,m.containedEdges=e,m.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[r.id]=m,this._createClusterEdges(t,e,r,i.clusterEdgeProperties);for(var b in e)if(e.hasOwnProperty(b)&&void 0!==this.body.edges[b]){var _=this.body.edges[b];this._backupEdgeOptions(_),_.setOptions({physics:!1,hidden:!0})}for(var w in t)t.hasOwnProperty(w)&&(this.clusteredNodes[w]={clusterId:r.id,node:this.body.nodes[w]},this.body.nodes[w].setOptions({hidden:!0,physics:!1}));r.id=void 0,o===!0&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics,hidden:t.options.hidden})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics,hidden:e.hidden}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?this.body.nodes[t].isCluster===!0:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,d=1;do?a.x:o,n=a.yr?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||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 h=this.body.nodes[d];r[d]={x:h.x,y:h.y}}var l=e.releaseFunction(a,r);for(var u in n)if(n.hasOwnProperty(u)){var c=this.body.nodes[u];void 0!==l[u]&&(c.x=void 0===l[u].x?o.x:l[u].x,c.y=void 0===l[u].y?o.y:l[u].y)}}else for(var p in n)if(n.hasOwnProperty(p)){var v=this.body.nodes[p];v=n[p],v.options.fixed.x===!1&&(v.x=o.x),v.options.fixed.y===!1&&(v.y=o.y)}for(var y in n)if(n.hasOwnProperty(y)){var m=this.body.nodes[y];m.vx=o.vx,m.vy=o.vy,m.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[y]}for(var b=[],_=0;_o&&(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),d=Math.floor(t+2*a);return d>o&&(d=o),d}}]),t}();e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(95),s=o(n),r=i(96),a=o(r),d=i(1),h=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,null,[{key:"getRange",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),n0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,t.requiresTimeout===!0?clearTimeout(t.renderTimer):cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];d.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]&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e=this.canvas.frame.canvas.getContext("2d");0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),t===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&this._drawEdges(e),(this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),t===!0&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){var t=this.canvas.frame.canvas.getContext("2d");void 0===this.pixelRatio&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0),t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=20,a=this.canvas.DOMtoCanvas({x:-r,y:-r}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+r,y:this.canvas.frame.canvas.clientHeight+r}),h={top:a.y,left:a.x,bottom:d.y,right:d.x},l=0;l0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(t.indexOf("%")!==-1||t.indexOf("px")!==-1)return t;if(t.indexOf("%")===-1)return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new d(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_ALL}),h.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new d(this.frame),h.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.frame.canvas.getContext("2d"),r=this.pixelRatio;return this.pixelRatio=(window.devicePixelRatio||1)/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e?(this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0):(this.frame.canvas.width==Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&this.frame.canvas.height==Math.round(this.frame.canvas.clientHeight*this.pixelRatio)||this._getCameraState(r),this.frame.canvas.width!=Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&(this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),i=!0),this.frame.canvas.height!=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)&&(this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),i=!0)),i===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){if("undefined"!=typeof window){var o=i(159),n=window.Hammer||i(160);t.exports=o(n,{preventDefault:"mouse"})}else t.exports=function(){throw Error("hammer.js is only available in a browser, not in node.js.")}},function(t,e,i){var o,n,s;!function(i){n=[],o=i,s="function"==typeof o?o.apply(e,n):o,!(void 0!==s&&(t.exports=s))}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a0?h._handlers[t]=o:(i.off(t,s),delete h._handlers[t]))}),h},h.emit=function(e,o){t=o.target,i.emit(e,o)},h.destroy=function(){var t=i.element.hammer,e=t.indexOf(h);e!==-1&&t.splice(e,1),t.length||delete i.element.hammer,h._handlers={},i.destroy()},h}})},function(t,e,i){var o;/*! Hammer.JS - v2.0.7 - 2016-04-22 +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(87),e.DataSet=i(88),e.DataView=i(92),e.Queue=i(91),e.Network=i(93),e.network={Images:i(104),dotparser:i(96),gephiParser:i(97),allOptions:i(179)},e.network.convertDot=function(t){return e.network.dotparser.DOTToGraph(t)},e.network.convertGephi=function(t,i){return e.network.gephiParser.parseGephi(t,i)},e.moment=i(82),e.Hammer=i(100),e.keycharm=i(99)},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),d=i(58),h=o(d),l=i(62),u=o(l),c=i(82),f=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){var i=p.exec(t);if(i)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return f.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&t.indexOf(s)==-1)if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&n===!0?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){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),d=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:d,border:a},hover:{background:d,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,d=(n-o)/n,h=n;return{h:a,s:d,v:h}};var v={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(0,h.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=v.split(t.style.cssText),n=v.split(i),s=e.extend(o,n);t.style.cssText=v.join(s)},e.removeCssText=function(t,e){var i=v.split(t.style.cssText),o=v.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=v.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,d=i*(1-e),h=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=d;break;case 1:o=h,n=i,s=d;break;case 2:o=d,n=i,s=l;break;case 3:o=d,n=h,s=i;break;case 4:o=l,n=d,s=i;break;case 5:o=i,n=d,s=h}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==("undefined"==typeof i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;r<=a&&s0)return"before"==o?Math.max(0,d-1):d;if(n(r,e)<0&&n(a,e)>0)return"before"==o?d:Math.min(t.length-1,d+1);n(r,e)<0?u=d+1:c=d-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,d=(0,s.default)(t);!(o=(a=d.next()).done);o=!0){var h=a.value;if(h){i=h[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),d=i(8),h=i(32),l=i(46),u=i(48),c=i(47)("iterator"),f=!([].keys&&"next"in[].keys()),p="@@iterator",v="keys",g="values",y=function(){return this};t.exports=function(t,e,i,m,b,_,w){h(i,e,m);var k,x,O,M=function(t){if(!f&&t in C)return C[t];switch(t){case v:return function(){return new i(this,t)};case g:return function(){return new i(this,t)}}return function(){return new i(this,t)}},S=e+" Iterator",E=b==g,D=!1,C=t.prototype,T=C[c]||C[p]||b&&C[b],P=T||M(b),F=b?E?M("entries"):P:void 0,I="Array"==e?C.entries||T:T;if(I&&(O=u(I.call(new t)),O!==Object.prototype&&(l(O,S,!0),o||a(O,c)||r(O,c,y))),E&&T&&T.name!==g&&(D=!0,P=function(){return T.call(this)}),o&&!w||!f&&!D&&C[c]||r(C,c,P),d[e]=P,d[S]=y,b)if(k={values:E?P:M(g),keys:_?P:M(v),entries:F},w)for(x in k)x in C||s(C,x,k[x]);else n(n.P+n.F*(f||D),e,k);return k}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a="prototype",d=function(t,e,i){var h,l,u,c=t&d.F,f=t&d.G,p=t&d.S,v=t&d.P,g=t&d.B,y=t&d.W,m=f?n:n[e]||(n[e]={}),b=m[a],_=f?o:p?o[e]:(o[e]||{})[a];f&&(i=e);for(h in i)l=!c&&_&&void 0!==_[h],l&&h in m||(u=l?_[h]:i[h],m[h]=f&&"function"!=typeof _[h]?i[h]:g&&l?s(u,o):y&&_[h]==u?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e[a]=t[a],e}(u):v&&"function"==typeof u?s(Function.call,u):u,v&&((m.virtual||(m.virtual={}))[h]=u,t&d.R&&b&&!b[h]&&r(b,h,u)))};d.F=1,d.G=2,d.S=4,d.P=8,d.B=16,d.W=32,d.U=64,d.R=128,t.exports=d},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},d="prototype",h=function(){var t,e=i(27)("iframe"),o=s.length,n="<",r=">";for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(n+"script"+r+"document.F=Object"+n+"/script"+r),t.close(),h=t.F;o--;)delete h[d][s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a[d]=o(t),i=new a,a[d]=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e,i){var o=i(21),n=i(22),s=i(35);t.exports=i(25)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,d=0;a>d;)o.f(t,i=r[d++],e[i]);return t}},function(t,e,i){var o=i(36),n=i(44);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){var o=i(31),n=i(9),s=i(37)(!1),r=i(41)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),d=0,h=[];for(i in a)i!=r&&o(a,i)&&h.push(i);for(;e.length>d;)o(a,i=e[d++])&&(~s(h,i)||h.push(i));return h}},function(t,e,i){var o=i(9),n=i(38),s=i(40);t.exports=function(t){return function(e,i,r){var a,d=o(e),h=n(d.length),l=s(r,h);if(t&&i!=i){for(;h>l;)if(a=d[l++],a!=a)return!0}else for(;h>l;l++)if((t||l in d)&&d[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(39),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(39),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(42)("keys"),n=i(43);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(16),n="__core-js_shared__",s=o[n]||(o[n]={});t.exports=function(t){return s[t]||(s[t]={})}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){t.exports=i(16).document&&document.documentElement},function(t,e,i){var o=i(21).f,n=i(31),s=i(47)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(42)("wks"),n=i(43),s=i(16).Symbol,r="function"==typeof s,a=t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))};a.store=o},function(t,e,i){var o=i(31),n=i(49),s=i(41)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(12);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(51)(!0);i(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){var o=i(39),n=i(12);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),d=o(i),h=a.length;return d<0||d>=h?t?"":void 0:(s=a.charCodeAt(d),s<55296||s>56319||d+1===h||(r=a.charCodeAt(d+1))<56320||r>57343?t?a.charAt(d):s:t?a.slice(d,d+2):(s-55296<<10)+(r-56320)+65536)}}},function(t,e,i){var o=i(22),n=i(53);t.exports=i(17).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(11),n=i(47)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){t.exports={default:i(56),__esModule:!0}},function(t,e,i){i(57);var o=i(17).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(15);o(o.S,"Object",{create:i(33)})},function(t,e,i){t.exports={default:i(59),__esModule:!0}},function(t,e,i){i(60),t.exports=i(17).Object.keys},function(t,e,i){var o=i(49),n=i(35);i(61)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(15),n=i(17),s=i(26);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(63),s=o(n),r=i(66),a=o(r),d="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===d(s.default)?function(t){return"undefined"==typeof t?"undefined":d(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":d(t)}},function(t,e,i){t.exports={default:i(64),__esModule:!0}},function(t,e,i){i(50),i(4),t.exports=i(65).f("iterator")},function(t,e,i){e.f=i(47)},function(t,e,i){t.exports={default:i(67),__esModule:!0}},function(t,e,i){i(68),i(79),i(80),i(81),t.exports=i(17).Symbol},function(t,e,i){var o=i(16),n=i(31),s=i(25),r=i(15),a=i(30),d=i(69).KEY,h=i(26),l=i(42),u=i(46),c=i(43),f=i(47),p=i(65),v=i(70),g=i(71),y=i(72),m=i(75),b=i(22),_=i(9),w=i(28),k=i(29),x=i(33),O=i(76),M=i(78),S=i(21),E=i(35),D=M.f,C=S.f,T=O.f,P=o.Symbol,F=o.JSON,I=F&&F.stringify,B="prototype",N=f("_hidden"),z=f("toPrimitive"),R={}.propertyIsEnumerable,A=l("symbol-registry"),j=l("symbols"),H=l("op-symbols"),L=Object[B],W="function"==typeof P,Y=o.QObject,V=!Y||!Y[B]||!Y[B].findChild,U=s&&h(function(){return 7!=x(C({},"a",{get:function(){return C(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=D(L,e);o&&delete L[e],C(t,e,i),o&&t!==L&&C(L,e,o)}:C,q=function(t){var e=j[t]=x(P[B]);return e._k=t,e},G=W&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},X=function(t,e,i){return t===L&&X(H,e,i),b(t),e=w(e,!0),b(i),n(j,e)?(i.enumerable?(n(t,N)&&t[N][e]&&(t[N][e]=!1),i=x(i,{enumerable:k(0,!1)})):(n(t,N)||C(t,N,k(1,{})),t[N][e]=!0),U(t,e,i)):C(t,e,i)},K=function(t,e){b(t);for(var i,o=y(e=_(e)),n=0,s=o.length;s>n;)X(t,i=o[n++],e[i]);return t},Z=function(t,e){return void 0===e?x(t):K(x(t),e)},Q=function(t){var e=R.call(this,t=w(t,!0));return!(this===L&&n(j,t)&&!n(H,t))&&(!(e||!n(this,t)||!n(j,t)||n(this,N)&&this[N][t])||e)},$=function(t,e){if(t=_(t),e=w(e,!0),t!==L||!n(j,e)||n(H,e)){var i=D(t,e);return!i||!n(j,e)||n(t,N)&&t[N][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=T(_(t)),o=[],s=0;i.length>s;)n(j,e=i[s++])||e==N||e==d||o.push(e);return o},tt=function(t){for(var e,i=t===L,o=T(i?H:_(t)),s=[],r=0;o.length>r;)!n(j,e=o[r++])||i&&!n(L,e)||s.push(j[e]);return s};W||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===L&&e.call(H,i),n(this,N)&&n(this[N],t)&&(this[N][t]=!1),U(this,t,k(1,i))};return s&&V&&U(L,t,{configurable:!0,set:e}),q(t)},a(P[B],"toString",function(){return this._k}),M.f=$,S.f=X,i(77).f=O.f=J,i(74).f=Q,i(73).f=tt,s&&!i(14)&&a(L,"propertyIsEnumerable",Q,!0),p.f=function(t){return q(f(t))}),r(r.G+r.W+r.F*!W,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;et.length>it;)f(et[it++]);for(var et=E(f.store),it=0;et.length>it;)v(et[it++]);r(r.S+r.F*!W,"Symbol",{for:function(t){return n(A,t+="")?A[t]:A[t]=P(t)},keyFor:function(t){if(G(t))return g(A,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){V=!0},useSimple:function(){V=!1}}),r(r.S+r.F*!W,"Object",{create:Z,defineProperty:X,defineProperties:K,getOwnPropertyDescriptor:$,getOwnPropertyNames:J,getOwnPropertySymbols:tt}),F&&r(r.S+r.F*(!W||h(function(){var t=P();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!G(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&m(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!G(e))return e}),o[1]=e,I.apply(F,o)}}}),P[B][z]||i(20)(P[B],z,P[B].valueOf),u(P,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(43)("meta"),n=i(23),s=i(31),r=i(21).f,a=0,d=Object.isExtensible||function(){return!0},h=!i(26)(function(){return d(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!d(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!d(t))return!0;if(!e)return!1;l(t)}return t[o].w},f=function(t){return h&&p.NEED&&d(t)&&!s(t,o)&&l(t),t},p=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:f}},function(t,e,i){var o=i(16),n=i(17),s=i(14),r=i(65),a=i(21).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e,i){var o=i(35),n=i(9);t.exports=function(t,e){for(var i,s=n(t),r=o(s),a=r.length,d=0;a>d;)if(s[i=r[d++]]===e)return i}},function(t,e,i){var o=i(35),n=i(73),s=i(74);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),d=s.f,h=0;a.length>h;)d.call(t,r=a[h++])&&e.push(r);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){var o=i(11);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(9),n=i(77).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(36),n=i(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(74),n=i(29),s=i(9),r=i(28),a=i(31),d=i(24),h=Object.getOwnPropertyDescriptor;e.f=i(25)?h:function(t,e){if(t=s(t),e=r(e,!0),d)try{return h(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(70)("asyncIterator")},function(t,e,i){i(70)("observable")},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(83)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return _o.apply(null,arguments)}function i(t){_o=t}function o(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function n(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){var e;for(e in t)return!1;return!0}function r(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function d(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return S(i)?i(e):i.replace(/%s/i,e)}function z(t,e){var i=t.toLowerCase();No[i]=No[i+"s"]=No[e]=t}function R(t){return"string"==typeof t?No[t]||No[t.toLowerCase()]:void 0}function A(t){var e,i,o={};for(i in t)l(t,i)&&(e=R(i),e&&(o[e]=t[i]));return o}function j(t,e){zo[t]=e}function H(t){var e=[];for(var i in t)e.push({unit:i,priority:zo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function L(t,i){return function(o){return null!=o?(Y(this,t,o),e.updateOffset(this,i),this):W(this,t)}}function W(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Y(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function V(t){return t=R(t),S(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=A(t);for(var i=H(t),o=0;o=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function G(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Ho[t]=n),e&&(Ho[e[0]]=function(){return q(n.apply(this,arguments),e[1],e[2])}),i&&(Ho[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function K(t){var e,i,o=t.match(Ro);for(e=0,i=o.length;e=0&&Ao.test(t);)t=t.replace(Ao,i),Ao.lastIndex=0,o-=1;return t}function $(t,e,i){sn[t]=S(e)?e:function(t,o){return t&&i?i:e}}function J(t,e){return l(sn,t)?sn[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),a(e)&&(o=function(t,i){i[e]=w(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i,n=(7+_t(t,0,o).getUTCDay()-e)%7;return-n+o-1}function kt(t,e,i,o,n){var s,r,a=(7+i-o)%7,d=wt(t,o,n),h=1+7*(e-1)+a+d;return h<=0?(s=t-1,r=gt(s)+h):h>gt(t)?(s=t+1,r=h-gt(t)):(s=t,r=h),{year:s,dayOfYear:r}}function xt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+Ot(n,e,i)):r>Ot(t.year(),e,i)?(o=r-Ot(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function Ot(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(gt(t)-o+n)/7}function Mt(t){return xt(t,this._week.dow,this._week.doy).week}function St(){return this._week.dow}function Et(){return this._week.doy}function Dt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ct(t){var e=xt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Ft(t,e){return t?o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone}function It(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Bt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Nt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=c([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null):"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null)))}function zt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return Nt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=c([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Rt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function At(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function jt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ht(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=En),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Lt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Cn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Yt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],d=[],h=[];for(e=0;e<7;e++)i=c([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),d.push(s),h.push(o),h.push(n),h.push(s);for(r.sort(t),a.sort(t),d.sort(t),h.sort(t),e=0;e<7;e++)a[e]=et(a[e]),d[e]=et(d[e]),h[e]=et(h[e]);this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Vt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function qt(t,e){G(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Gt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Kt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Zt(t){return t?t.toLowerCase().replace("_","-"):t}function Qt(t){for(var e,i,o,n,s=0;s0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&k(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!Bn[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=Tn._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Jt(i)}catch(t){}return Bn[e]}function Jt(t,e){var i;return t&&(i=r(e)?ie(t):te(t,e),i&&(Tn=i)),Tn._abbr}function te(t,e){if(null!==e){var i=In;if(e.abbr=t,null!=Bn[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=Bn[t]._config;else if(null!=e.parentLocale){if(null==Bn[e.parentLocale])return Nn[e.parentLocale]||(Nn[e.parentLocale]=[]),Nn[e.parentLocale].push({name:t,config:e}),null;i=Bn[e.parentLocale]._config}return Bn[t]=new C(D(i,e)),Nn[t]&&Nn[t].forEach(function(t){te(t.name,t.config)}),Jt(t),Bn[t]}return delete Bn[t],null}function ee(t,e){if(null!=e){var i,o=In;null!=Bn[t]&&(o=Bn[t]._config),e=D(o,e),i=new C(e),i.parentLocale=Bn[t],Bn[t]=i,Jt(t)}else null!=Bn[t]&&(null!=Bn[t].parentLocale?Bn[t]=Bn[t].parentLocale:null!=Bn[t]&&delete Bn[t]);return Bn[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Tn;if(!o(t)){if(e=$t(t))return e;t=[t]}return Qt(t)}function oe(){return Do(Bn)}function ne(t){var e,i=t._a;return i&&p(t).overflow===-2&&(e=i[dn]<0||i[dn]>11?dn:i[hn]<1||i[hn]>st(i[an],i[dn])?hn:i[ln]<0||i[ln]>24||24===i[ln]&&(0!==i[un]||0!==i[cn]||0!==i[fn])?ln:i[un]<0||i[un]>59?un:i[cn]<0||i[cn]>59?cn:i[fn]<0||i[fn]>999?fn:-1,p(t)._overflowDayOfYear&&(ehn)&&(e=hn),p(t)._overflowWeeks&&e===-1&&(e=pn),p(t)._overflowWeekday&&e===-1&&(e=vn),p(t).overflow=e),t}function se(t){var e,i,o,n,s,r,a=t._i,d=zn.exec(a)||Rn.exec(a);if(d){for(p(t).iso=!0,e=0,i=jn.length;e10?"YYYY ":"YY "),s="HH:mm"+(i[4]?":ss":""),i[1]){var u=new Date(i[2]),c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][u.getDay()];if(i[1].substr(0,3)!==c)return p(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(i[5].length){case 2:0===d?a=" +0000":(d=l.indexOf(i[5][1].toUpperCase())-12,a=(d<0?" -":" +")+(""+d).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=h[i[5]];break;default:a=h[" GMT"]}i[5]=a,t._i=i.splice(1).join(""),r=" ZZ",t._f=o+n+s+r,ce(t),p(t).rfc2822=!0}else t._isValid=!1}function ae(t){var i=Ln.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(se(t),void(t._isValid===!1&&(delete t._isValid,re(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function de(t,e,i){return null!=t?t:null!=e?e:i}function he(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function le(t){var e,i,o,n,s=[];if(!t._d){for(o=he(t),t._w&&null==t._a[hn]&&null==t._a[dn]&&ue(t),null!=t._dayOfYear&&(n=de(t._a[an],o[an]),(t._dayOfYear>gt(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[dn]=i.getUTCMonth(),t._a[hn]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ln]&&0===t._a[un]&&0===t._a[cn]&&0===t._a[fn]&&(t._nextDay=!0,t._a[ln]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ln]=24)}}function ue(t){var e,i,o,n,s,r,a,d;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=de(e.GG,t._a[an],xt(_e(),1,4).year),o=de(e.W,1),n=de(e.E,1),(n<1||n>7)&&(d=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var h=xt(_e(),s,r);i=de(e.gg,t._a[an],h.year),o=de(e.w,h.week),null!=e.d?(n=e.d,(n<0||n>6)&&(d=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(d=!0)):n=s}o<1||o>Ot(i,s,r)?p(t)._overflowWeeks=!0:null!=d?p(t)._overflowWeekday=!0:(a=kt(i,o,n,s,r),t._a[an]=a.year,t._dayOfYear=a.dayOfYear)}function ce(t){if(t._f===e.ISO_8601)return void se(t);if(t._f===e.RFC_2822)return void re(t);t._a=[],p(t).empty=!0;var i,o,n,s,r,a=""+t._i,d=a.length,h=0;for(n=Q(t._f,t._locale).match(Ro)||[],i=0;i0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),h+=o.length),Ho[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),nt(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=d-h,a.length>0&&p(t).unusedInput.push(a),t._a[ln]<=12&&p(t).bigHour===!0&&t._a[ln]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[ln]=fe(t._locale,t._a[ln],t._meridiem),le(t),ne(t)}function fe(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function pe(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Le(){if(!r(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?c(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&k(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ye(){return!!this.isValid()&&this._isUTC}function Ve(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var i,o,n,s=t,r=null;return De(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(s={},e?s[e]=t:s.milliseconds=t):(r=Xn.exec(t))?(i="-"===r[1]?-1:1,s={y:0,d:w(r[hn])*i,h:w(r[ln])*i,m:w(r[un])*i,s:w(r[cn])*i,ms:w(Ce(1e3*r[fn]))*i}):(r=Kn.exec(t))?(i="-"===r[1]?-1:1,s={y:qe(r[2],i),M:qe(r[3],i),w:qe(r[4],i),d:qe(r[5],i),h:qe(r[6],i),m:qe(r[7],i),s:qe(r[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Xe(_e(s.from),_e(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ee(s),De(t)&&l(t,"_locale")&&(o._locale=t._locale),o}function qe(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function Ge(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 Xe(t,e){var i;return t.isValid()&&e.isValid()?(e=Fe(e,t),t.isBefore(e)?i=Ge(t,e):(i=Ge(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function Ke(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ue(i,o),Ze(this,n,t),this}}function Ze(t,i,o,n){var s=i._milliseconds,r=Ce(i._days),a=Ce(i._months);t.isValid()&&(n=null==n||n,s&&t._d.setTime(t._d.valueOf()+s*o),r&&Y(t,"Date",W(t,"Date")+r*o),a&<(t,W(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function Qe(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function $e(t,i){var o=t||_e(),n=Fe(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(S(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,_e(o)))}function Je(){return new m(this)}function ti(t,e){var i=b(t)?t:_e(t);return!(!this.isValid()||!i.isValid())&&(e=R(r(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?Z(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):S(Date.prototype.toISOString)?this.toDate().toISOString():Z(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function li(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",s=e+'[")]';return this.format(i+o+n+s)}function ui(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=Z(this,t);return this.localeData().postformat(i)}function ci(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function fi(t){return this.from(_e(),t)}function pi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function vi(t){return this.to(_e(),t)}function gi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function yi(){return this._locale}function mi(t){switch(t=R(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function bi(t){return t=R(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function _i(){return this._d.valueOf()-6e4*(this._offset||0)}function wi(){return Math.floor(this.valueOf()/1e3)}function ki(){return new Date(this.valueOf())}function xi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Oi(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Mi(){return this.isValid()?this.toISOString():null}function Si(){return v(this)}function Ei(){return u({},p(this))}function Di(){return p(this).overflow}function Ci(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ti(t,e){G(0,[t,t.length],0,e)}function Pi(t){return Ni.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fi(t){return Ni.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Ii(){return Ot(this.year(),1,4)}function Bi(){var t=this.localeData()._week;return Ot(this.year(),t.dow,t.doy)}function Ni(t,e,i,o,n){var s;return null==t?xt(this,o,n).year:(s=Ot(t,o,n),e>s&&(e=s),zi.call(this,t,e,i,o,n))}function zi(t,e,i,o,n){var s=kt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Ri(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Ai(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 ji(t,e){e[fn]=w(1e3*("0."+t))}function Hi(){return this._isUTC?"UTC":""}function Li(){return this._isUTC?"Coordinated Universal Time":""}function Wi(t){return _e(1e3*t)}function Yi(){return _e.apply(null,arguments).parseZone()}function Vi(t){return t}function Ui(t,e,i,o){var n=ie(),s=c().set(o,e);return n[i](s,t)}function qi(t,e,i){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ui(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ui(t,o,i,"month");return n}function Gi(t,e,i,o){"boolean"==typeof t?(a(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e, +t=!1,a(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ui(e,(i+s)%7,o,"day");var r,d=[];for(r=0;r<7;r++)d[r]=Ui(e,(r+s)%7,o,"day");return d}function Xi(t,e){return qi(t,e,"months")}function Ki(t,e){return qi(t,e,"monthsShort")}function Zi(t,e,i){return Gi(t,e,i,"weekdays")}function Qi(t,e,i){return Gi(t,e,i,"weekdaysShort")}function $i(t,e,i){return Gi(t,e,i,"weekdaysMin")}function Ji(){var t=this._data;return this._milliseconds=rs(this._milliseconds),this._days=rs(this._days),this._months=rs(this._months),t.milliseconds=rs(t.milliseconds),t.seconds=rs(t.seconds),t.minutes=rs(t.minutes),t.hours=rs(t.hours),t.months=rs(t.months),t.years=rs(t.years),this}function to(t,e,i,o){var n=Ue(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function eo(t,e){return to(this,t,e,1)}function io(t,e){return to(this,t,e,-1)}function oo(t){return t<0?Math.floor(t):Math.ceil(t)}function no(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,d=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*oo(ro(a)+r),r=0,a=0),d.milliseconds=s%1e3,t=_(s/1e3),d.seconds=t%60,e=_(t/60),d.minutes=e%60,i=_(e/60),d.hours=i%24,r+=_(i/24),n=_(so(r)),a+=n,r-=oo(ro(n)),o=_(a/12),a%=12,d.days=r,d.months=a,d.years=o,this}function so(t){return 4800*t/146097}function ro(t){return 146097*t/4800}function ao(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if(t=R(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+so(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ro(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 ho(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN}function lo(t){return function(){return this.as(t)}}function uo(t){return t=R(t),this.isValid()?this[t+"s"]():NaN}function co(t){return function(){return this.isValid()?this._data[t]:NaN}}function fo(){return _(this.days()/7)}function po(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function vo(t,e,i){var o=Ue(t).abs(),n=ks(o.as("s")),s=ks(o.as("m")),r=ks(o.as("h")),a=ks(o.as("d")),d=ks(o.as("M")),h=ks(o.as("y")),l=n<=xs.ss&&["s",n]||n0,l[4]=i,po.apply(null,l)}function go(t){return void 0===t?ks:"function"==typeof t&&(ks=t,!0)}function yo(t,e){return void 0!==xs[t]&&(void 0===e?xs[t]:(xs[t]=e,"s"===t&&(xs.ss=e-1),!0))}function mo(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=vo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function bo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Os(this._milliseconds)/1e3,n=Os(this._days),s=Os(this._months);t=_(o/60),e=_(t/60),o%=60,t%=60,i=_(s/12),s%=12;var r=i,a=s,d=n,h=e,l=t,u=o,c=this.asSeconds();return c?(c<0?"-":"")+"P"+(r?r+"Y":"")+(a?a+"M":"")+(d?d+"D":"")+(h||l||u?"T":"")+(h?h+"H":"")+(l?l+"M":"")+(u?u+"S":""):"P0D"}var _o,wo;wo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var kn=L("FullYear",!0);G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),j("week",5),j("isoWeek",5),$("w",qo),$("ww",qo,Wo),$("W",qo),$("WW",qo,Wo),ot(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=w(t)});var xn={dow:0,doy:6};G("d",0,"do","day"),G("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),G("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),G("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),$("d",qo),$("e",qo),$("E",qo),$("dd",function(t,e){return e.weekdaysMinRegex(t)}),$("ddd",function(t,e){return e.weekdaysShortRegex(t)}),$("dddd",function(t,e){return e.weekdaysRegex(t)}),ot(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:p(i).invalidWeekday=t}),ot(["d","e","E"],function(t,e,i,o){e[o]=w(t)});var On="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Mn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Sn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),En=nn,Dn=nn,Cn=nn;G("H",["HH",2],0,"hour"),G("h",["hh",2],0,Vt),G("k",["kk",2],0,Ut),G("hmm",0,0,function(){return""+Vt.apply(this)+q(this.minutes(),2)}),G("hmmss",0,0,function(){return""+Vt.apply(this)+q(this.minutes(),2)+q(this.seconds(),2)}),G("Hmm",0,0,function(){return""+this.hours()+q(this.minutes(),2)}),G("Hmmss",0,0,function(){return""+this.hours()+q(this.minutes(),2)+q(this.seconds(),2)}),qt("a",!0),qt("A",!1),z("hour","h"),j("hour",13),$("a",Gt),$("A",Gt),$("H",qo),$("h",qo),$("k",qo),$("HH",qo,Wo),$("hh",qo,Wo),$("kk",qo,Wo),$("hmm",Go),$("hmmss",Xo),$("Hmm",Go),$("Hmmss",Xo),it(["H","HH"],ln),it(["k","kk"],function(t,e,i){var o=w(t);e[ln]=24===o?0:o}),it(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),it(["h","hh"],function(t,e,i){e[ln]=w(t),p(i).bigHour=!0}),it("hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o)),p(i).bigHour=!0}),it("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[cn]=w(t.substr(n)),p(i).bigHour=!0}),it("Hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o))}),it("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[cn]=w(t.substr(n))});var Tn,Pn=/[ap]\.?m?\.?/i,Fn=L("Hours",!0),In={calendar:Co,longDateFormat:To,invalidDate:Po,ordinal:Fo,dayOfMonthOrdinalParse:Io,relativeTime:Bo,months:mn,monthsShort:bn,week:xn,weekdays:On,weekdaysMin:Sn,weekdaysShort:Mn,meridiemParse:Pn},Bn={},Nn={},zn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Rn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,An=/Z|[+-]\d\d(?::?\d\d)?/,jn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Hn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ln=/^\/?Date\((\-?\d+)/i,Wn=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=O("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Yn=O("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:g()}),Un=function(){return Date.now?Date.now():+new Date},qn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Te("Z",":"),Te("ZZ",""),$("Z",en),$("ZZ",en),it(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Pe(en,t)});var Gn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xn=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Kn=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=Ee.prototype,Ue.invalid=Se;var Zn=Ke(1,"add"),Qn=Ke(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var $n=O("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ti("gggg","weekYear"),Ti("ggggg","weekYear"),Ti("GGGG","isoWeekYear"),Ti("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),j("weekYear",1),j("isoWeekYear",1),$("G",Jo),$("g",Jo),$("GG",qo,Wo),$("gg",qo,Wo),$("GGGG",Zo,Vo),$("gggg",Zo,Vo),$("GGGGG",Qo,Uo),$("ggggg",Qo,Uo),ot(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=w(t)}),ot(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),G("Q",0,"Qo","quarter"),z("quarter","Q"),j("quarter",7),$("Q",Lo),it("Q",function(t,e){e[dn]=3*(w(t)-1)}),G("D",["DD",2],"Do","date"),z("date","D"),j("date",9),$("D",qo),$("DD",qo,Wo),$("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),it(["D","DD"],hn),it("Do",function(t,e){e[hn]=w(t.match(qo)[0],10)});var Jn=L("Date",!0);G("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),j("dayOfYear",4),$("DDD",Ko),$("DDDD",Yo),it(["DDD","DDDD"],function(t,e,i){i._dayOfYear=w(t)}),G("m",["mm",2],0,"minute"),z("minute","m"),j("minute",14),$("m",qo),$("mm",qo,Wo),it(["m","mm"],un);var ts=L("Minutes",!1);G("s",["ss",2],0,"second"),z("second","s"),j("second",15),$("s",qo),$("ss",qo,Wo),it(["s","ss"],cn);var es=L("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,function(){return 10*this.millisecond()}),G(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),G(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),G(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),G(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),G(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),j("millisecond",16),$("S",Ko,Lo),$("SS",Ko,Wo),$("SSS",Ko,Yo);var is;for(is="SSSS";is.length<=9;is+="S")$(is,$o);for(is="S";is.length<=9;is+="S")it(is,ji);var os=L("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var ns=m.prototype;ns.add=Zn,ns.calendar=$e,ns.clone=Je,ns.diff=ri,ns.endOf=bi,ns.format=ui,ns.from=ci,ns.fromNow=fi,ns.to=pi,ns.toNow=vi,ns.get=V,ns.invalidAt=Di,ns.isAfter=ti,ns.isBefore=ei,ns.isBetween=ii,ns.isSame=oi,ns.isSameOrAfter=ni,ns.isSameOrBefore=si,ns.isValid=Si,ns.lang=$n,ns.locale=gi,ns.localeData=yi,ns.max=Vn,ns.min=Yn,ns.parsingFlags=Ei,ns.set=U,ns.startOf=mi,ns.subtract=Qn,ns.toArray=xi,ns.toObject=Oi,ns.toDate=ki,ns.toISOString=hi,ns.inspect=li,ns.toJSON=Mi,ns.toString=di,ns.unix=wi,ns.valueOf=_i,ns.creationData=Ci,ns.year=kn,ns.isLeapYear=mt,ns.weekYear=Pi,ns.isoWeekYear=Fi,ns.quarter=ns.quarters=Ri,ns.month=ut,ns.daysInMonth=ct,ns.week=ns.weeks=Dt,ns.isoWeek=ns.isoWeeks=Ct,ns.weeksInYear=Bi,ns.isoWeeksInYear=Ii,ns.date=Jn,ns.day=ns.days=Rt,ns.weekday=At,ns.isoWeekday=jt,ns.dayOfYear=Ai,ns.hour=ns.hours=Fn,ns.minute=ns.minutes=ts,ns.second=ns.seconds=es,ns.millisecond=ns.milliseconds=os,ns.utcOffset=Be,ns.utc=ze,ns.local=Re,ns.parseZone=Ae,ns.hasAlignedHourOffset=je,ns.isDST=He,ns.isLocal=We,ns.isUtcOffset=Ye,ns.isUtc=Ve,ns.isUTC=Ve,ns.zoneAbbr=Hi,ns.zoneName=Li,ns.dates=O("dates accessor is deprecated. Use date instead.",Jn),ns.months=O("months accessor is deprecated. Use month instead",ut),ns.years=O("years accessor is deprecated. Use year instead",kn),ns.zone=O("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ne),ns.isDSTShifted=O("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Le);var ss=C.prototype;ss.calendar=T,ss.longDateFormat=P,ss.invalidDate=F,ss.ordinal=I,ss.preparse=Vi,ss.postformat=Vi,ss.relativeTime=B,ss.pastFuture=N,ss.set=E,ss.months=rt,ss.monthsShort=at,ss.monthsParse=ht,ss.monthsRegex=pt,ss.monthsShortRegex=ft,ss.week=Mt,ss.firstDayOfYear=Et,ss.firstDayOfWeek=St,ss.weekdays=Ft,ss.weekdaysMin=Bt,ss.weekdaysShort=It,ss.weekdaysParse=zt,ss.weekdaysRegex=Ht,ss.weekdaysShortRegex=Lt,ss.weekdaysMinRegex=Wt,ss.isPM=Xt,ss.meridiem=Kt,Jt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=O("moment.lang is deprecated. Use moment.locale instead.",Jt),e.langData=O("moment.langData is deprecated. Use moment.localeData instead.",ie);var rs=Math.abs,as=lo("ms"),ds=lo("s"),hs=lo("m"),ls=lo("h"),us=lo("d"),cs=lo("w"),fs=lo("M"),ps=lo("y"),vs=co("milliseconds"),gs=co("seconds"),ys=co("minutes"),ms=co("hours"),bs=co("days"),_s=co("months"),ws=co("years"),ks=Math.round,xs={ss:44,s:45,m:45,h:22,d:26,M:11},Os=Math.abs,Ms=Ee.prototype;return Ms.isValid=Me,Ms.abs=Ji,Ms.add=eo,Ms.subtract=io,Ms.as=ao,Ms.asMilliseconds=as,Ms.asSeconds=ds,Ms.asMinutes=hs,Ms.asHours=ls,Ms.asDays=us,Ms.asWeeks=cs,Ms.asMonths=fs,Ms.asYears=ps,Ms.valueOf=ho,Ms._bubble=no,Ms.get=uo,Ms.milliseconds=vs,Ms.seconds=gs,Ms.minutes=ys,Ms.hours=ms,Ms.days=bs,Ms.weeks=fo,Ms.months=_s,Ms.years=ws,Ms.humanize=mo,Ms.toISOString=bo,Ms.toString=bo,Ms.toJSON=bo,Ms.locale=gi,Ms.localeData=yi,Ms.toIsoString=O("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",bo),Ms.lang=$n,G("X",0,0,"unix"),G("x",0,0,"valueOf"),$("x",Jo),$("X",on),it("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,i){i._d=new Date(w(t))}),e.version="2.18.1",i(_e),e.fn=ns,e.min=ke,e.max=xe,e.now=Un,e.utc=c,e.unix=Wi,e.months=Xi,e.isDate=d,e.locale=Jt,e.invalid=g,e.duration=Ue,e.isMoment=b,e.weekdays=Zi,e.parseZone=Yi,e.localeData=ie,e.isDuration=De,e.monthsShort=Ki,e.weekdaysMin=$i,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=Qi,e.normalizeUnits=R,e.relativeTimeRounding=go,e.relativeTimeThreshold=yo,e.calendarFormat=Qe,e.prototype=ns,e})}).call(e,i(84)(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=85},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){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:v,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),d=void 0!==t.nsecs?t.nsecs:y+1,h=a-g+(d-y)/1e4;if(h<0&&void 0===t.clockseq&&(r=r+1&16383),(h<0||a>g)&&void 0===t.nsecs&&(d=0),d>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,y=d,v=r,a+=122192928e5;var l=(1e4*(268435455&a)+d)%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||p,f=0;f<6;f++)s[n+f]=c[f];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;a<16;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 d=new Uint8Array(16);r=function(){return crypto.getRandomValues(d),d}}if(!r){var h=new Array(16);r=function(){for(var t,e=0;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),h[e]=t>>>((3&e)<<3)&255;return h}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var f=r(),p=[1|f[0],f[1],f[2],f[3],f[4],f[5]],v=16383&(f[6]<<8|f[7]),g=0,y=0,m=s;m.v1=n,m.v4=s,m.parse=i,m.unparse=o,t.exports=m}).call(e,function(){return this}())},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var d=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(d.textContent=r.content),r.className&&d.setAttributeNS(null,"class",r.className+" vis-label"),d.setAttributeNS(null,"x",t),d.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,d){if(0!=n){n<0&&(n*=-1,i-=n);var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*o),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",o),h.setAttributeNS(null,"height",n),h.setAttributeNS(null,"class",s),d&&h.setAttributeNS(null,"style",d)}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(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=(0,l.default)(this._options.type),o=0,n=i.length;on?1:or)&&(s=d,r=h)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;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){return t&&t.__esModule?t:{default:t}}function n(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 s=i(58),r=o(s),a=i(1),d=i(88);n.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;o=.1;)f=n[l++%s],f>h&&(f=h),c=Math.sqrt(f*f/(1+d*d)),c=r<0?-c:c,t+=c,e+=d*c,u===!0?this.lineTo(t,e):this.moveTo(t,e),h-=f,u=!u})},function(t,e){function i(t){if(t)return o(t)}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;n=0;i--){var a=s[i];a.nodes||(a.nodes=[]),a.nodes.indexOf(n)===-1&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function c(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function f(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(j=I.NULL,A="";" "===R||"\t"===R||"\n"===R||"\r"===R;)r();do{var t=!1;if("#"===R){for(var e=z-1;" "===N.charAt(e)||"\t"===N.charAt(e);)e--;if("\n"===N.charAt(e)||""===N.charAt(e)){for(;""!=R&&"\n"!=R;)r();t=!0}}if("/"===R&&"/"===a()){for(;""!=R&&"\n"!=R;)r();t=!0}if("/"===R&&"*"===a()){for(;""!=R;){if("*"===R&&"/"===a()){r(),r();break}r()}t=!0}for(;" "===R||"\t"===R||"\n"===R||"\r"===R;)r()}while(t);if(""===R)return void(j=I.DELIMITER);var i=R+a();if(B[i])return j=I.DELIMITER,A=i,r(),void r();if(B[R])return j=I.DELIMITER,A=R,void r();if(d(R)||"-"===R){for(A+=R,r();d(R);)A+=R,r();return"false"===A?A=!1:"true"===A?A=!0:isNaN(Number(A))||(A=Number(A)),void(j=I.IDENTIFIER)}if('"'===R){for(r();""!=R&&('"'!=R||'"'===R&&'"'===a());)A+=R,'"'===R&&r(),r();if('"'!=R)throw x('End of string " expected');return r(),void(j=I.IDENTIFIER)}for(j=I.UNKNOWN;""!=R;)A+=R,r();throw new SyntaxError('Syntax error in part "'+O(A,30)+'"')}function v(){var t={};if(s(),p(),"strict"===A&&(t.strict=!0,p()),"graph"!==A&&"digraph"!==A||(t.type=A,p()),j===I.IDENTIFIER&&(t.id=A,p()),"{"!=A)throw x("Angle bracket { expected");if(p(),g(t),"}"!=A)throw x("Angle bracket } expected");if(p(),""!==A)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function g(t){for(;""!==A&&"}"!=A;)y(t),";"===A&&p()}function y(t){var e=m(t);if(e)return void w(t,e);var i=b(t);if(!i){if(j!=I.IDENTIFIER)throw x("Identifier expected");var o=A;if(p(),"="===A){if(p(),j!=I.IDENTIFIER)throw x("Identifier expected");t[o]=A,p()}else _(t,o)}}function m(t){var e=null;if("subgraph"===A&&(e={},e.type="subgraph",p(),j===I.IDENTIFIER&&(e.id=A,p())),"{"===A){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,g(e),"}"!=A)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function b(t){return"node"===A?(p(),t.node=k(),"node"):"edge"===A?(p(),t.edge=k(),"edge"):"graph"===A?(p(),t.graph=k(),"graph"):null}function _(t,e){var i={id:e},o=k();o&&(i.attr=o),u(t,i),w(t,e)}function w(t,e){for(;"->"===A||"--"===A;){var i,o=A;p();var n=m(t);if(n)i=n;else{if(j!=I.IDENTIFIER)throw x("Identifier or subgraph expected");i=A,u(t,{id:i}),p()}var s=k(),r=f(t,e,i,o,s);c(t,r),e=i}}function k(){for(var t=null;"["===A;){for(p(),t={};""!==A&&"]"!=A;){if(j!=I.IDENTIFIER)throw x("Attribute name expected");var e=A;if(p(),"="!=A)throw x("Equal sign = expected");if(p(),j!=I.IDENTIFIER)throw x("Attribute value expected");var i=A;l(t,e,i),p(),","==A&&p()}if("]"!=A)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+O(A,30)+'" (char '+z+")")}function O(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function M(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 S(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},N="",z=0,R="",A="",j=I.NULL,H=/[a-zA-Z_0-9.:#]/;e.parseDOT=n,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;a0?h._handlers[t]=o:(i.off(t,s),delete h._handlers[t]))}),h},h.emit=function(e,o){t=o.target,i.emit(e,o)},h.destroy=function(){var t=i.element.hammer,e=t.indexOf(h);e!==-1&&t.splice(e,1),t.length||delete i.element.hammer,h._handlers={},i.destroy()},h}})},function(t,e,i){var o;/*! Hammer.JS - v2.0.7 - 2016-04-22 * http://hammerjs.github.io/ * * Copyright (c) 2016 Jorik Tangelder; * Licensed under the MIT license */ -!function(n,s,r,a){function d(t,e,i){return setTimeout(f(t,i),e)}function h(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&vt(o,i)}function f(t,e){return function(){return t.apply(e,arguments)}}function p(t,e){return typeof t==mt?t.apply(e?e[0]||a:a,e):t}function v(t,e){return t===a?e:t}function g(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function y(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function m(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function O(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=B(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,d=e.center=I(o);e.timeStamp=wt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=A(a,d),e.distance=R(a,d),P(i,e),e.offsetDirection=N(e.deltaX,e.deltaY);var h=z(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=h.x,e.overallVelocityY=h.y,e.overallVelocity=_t(h.x)>_t(h.y)?h.x:h.y,e.scale=r?H(r.pointers,o):1,e.rotation=r?j(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,F(i,e);var l=t.element;m(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==It&&s.eventType!==Nt||(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 F(t,e){var i,o,n,s,r=t.lastInterval||e,d=e.timeStamp-r.timeStamp;if(e.eventType!=Rt&&(d>Bt||r.velocity===a)){var h=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=z(d,h,l);o=u.x,n=u.y,i=_t(u.x)>_t(u.y)?u.x:u.y,s=N(h,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 B(t){for(var e=[],i=0;i=_t(e)?t<0?jt:Ht:e<0?Lt:Wt}function R(t,e,i){i||(i=qt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function A(t,e,i){i||(i=qt);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 A(e[1],e[0],Gt)+A(t[1],t[0],Gt)}function H(t,e){return R(e[0],e[1],Gt)/R(t[0],t[1],Gt)}function L(){this.evEl=Kt,this.evWin=Zt,this.pressed=!1,E.apply(this,arguments)}function W(){this.evEl=Jt,this.evWin=te,E.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=ie,this.evWin=oe,this.started=!1,E.apply(this,arguments)}function V(t,e){var i=k(t.touches),o=k(t.changedTouches);return e&(Nt|Rt)&&(i=x(i.concat(o),"identifier",!0)),[i,o]}function U(){this.evTarget=se,this.targetIds={},E.apply(this,arguments)}function q(t,e){var i=k(t.touches),o=this.targetIds;if(e&(It|zt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=k(t.changedTouches),a=[],d=this.target;if(s=i.filter(function(t){return m(t.target,d)}),e===It)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,re)}}function Z(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<_e&&e(i.options.event+et(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=_e&&e(i.options.event+et(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=xe)},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return nt.prototype.attrTest.call(this,t)&&(this.state&me||!(this.state&me)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=it(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(rt,nt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[fe]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&me)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ue]},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&(Nt|Rt)&&!n)this.reset();else if(t.eventType&It)this.reset(),this._timer=d(function(){this.state=we,this.tryEmit()},e.time,this);else if(t.eventType&Nt)return we;return xe},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===we&&(t&&t.eventType&Nt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=wt(),this.manager.emit(this.options.event,this._input)))}}),c(dt,nt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[fe]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&me)}}),c(ht,nt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Yt|Vt,pointers:1},getTouchAction:function(){return st.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Yt|Vt)?e=t.overallVelocity:i&Yt?e=t.overallVelocityX:i&Vt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&_t(e)>this.options.velocity&&t.eventType&Nt},emit:function(t){var e=it(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ce]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),e===!0){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];r.predefinedPosition===!0&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=h.default.getRange(this.body.nodes,t.nodes);var a=this.body.nodeIndices.length;o=12.662/(a+7.4147)+.0964822;var d=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);o*=d}else{this.body.emitter.emit("_resizeNodes"),i=h.default.getRange(this.body.nodes,t.nodes);var l=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),c=this.canvas.frame.canvas.clientWidth/l,f=this.canvas.frame.canvas.clientHeight/u;o=c<=f?c:f}o>1?o=1:0===o&&(o=1);var p=h.default.findCenter(i),v={position:p,scale:o,animation:t.animation};this.moveTo(v)}},{key:"focus",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){return void 0===t?void(t={}):(void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),t.animation===!1&&(t.animation={duration:0}),t.animation===!0&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),void this.animateView(t))}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),t.locked===!0&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=t===!0?1:this.easingTime;var e=l.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=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(95),s=o(n),r=i(96),a=o(r),d=i(164),h=o(d),l=i(166),u=o(l),c=i(1),f=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new h.default(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},c.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];c.selectiveNotDeepExtend(e,this.options,t),c.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(c.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=c.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-c.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-c.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(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]&&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(),d=this.selectionHandler._getSelectedNodeCount(),h=this.selectionHandler.getSelection(),l=this._determineIfDifferent(s,h),u=l.nodesChanged,c=l.edgesChanged,f=!1;d-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,f=!0):u===!0&&d>0?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),f=!0,r=!0):d-n<0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0),a-o>0&&f===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a>0&&c===!0?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a-o<0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0),r===!0&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineIfDifferent",value:function(t,e){for(var i=!1,o=!1,n=0;n10&&(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 d=this.canvas.canvasToDOM(o);this.drag.pointer.x=d.x,this.drag.pointer.y=d.y}this.body.emitter.emit("_requestRedraw"),i0&&(this.popupObj=d[l[l.length-1]],s=!0)}if(void 0===this.popupObj&&s===!1){for(var f=this.body.edgeIndices,p=this.body.edges,v=void 0,g=[],y=0;y0&&(this.popupObj=p[g[g.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new u.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=void 0!==o&&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=f},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(95),s=o(n),r=i(96),a=o(r),d=(i(1),i(158)),h=i(161),l=i(165),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){this.options.navigationButtons===!0?this.iconsCreated===!1&&this.loadNavigationElements():this.iconsCreated===!0&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t700&&(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(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{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=l({container:window,preventDefault:!0}):this.keycharm=l({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=u},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;e<=122;e++)r[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;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){h(t,"keydown")},d=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;nn-this.padding&&(a=!0),s=a?this.x-i:this.x,r=d?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s4&&void 0!==arguments[4]&&arguments[4],s=void 0;s=n===!0?{nodes:[],edges:[]}:this.getSelection(),s.pointer={DOM:{x:i.x,y:i.y},canvas:this.canvas.DOMtoCanvas(i)},s.event=e,void 0!==o&&(s.previousSelection=o),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof h.default&&e===!0&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){t.isSelected()===!0&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?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;o1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties";if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}}]),t}();e.default=f},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(104),a=o(r),d=i(62),h=o(d),l=i(95),u=o(l),c=i(96),f=o(c),p=i(154),v=o(p),g=i(1),y=function(){function t(e){(0,u.default)(this,t),this.body=e,this.initialRandomSeed=Math.round(1e6*Math.random()),this.randomSeed=this.initialRandomSeed,this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:"UD",sortMethod:"hubsize"}},g.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,f.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",function(){t.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",function(){t.setupHierarchicalLayout()})}},{key:"setOptions",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical.enabled;if(g.selectiveDeepExtend(["randomSeed","improvedLayout"],this.options,t),g.mergeOptions(this.options,t,"hierarchical"),void 0!==t.randomSeed&&(this.initialRandomSeed=t.randomSeed),this.options.hierarchical.enabled===!0)return i===!0&&this.body.emitter.emit("refresh",!0),"RL"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?this.options.hierarchical.levelSeparation>0&&(this.options.hierarchical.levelSeparation*=-1):this.options.hierarchical.levelSeparation<0&&(this.options.hierarchical.levelSeparation*=-1),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(i===!0)return this.body.emitter.emit("refresh"),g.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={enabled:void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,solver:"hierarchicalRepulsion"},this.optionsBackup.physics.enabled=void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,this.optionsBackup.physics.solver=this.optionsBackup.physics.solver||"barnesHut"):"object"===(0,h.default)(t.physics)?(this.optionsBackup.physics.enabled=void 0===t.physics.enabled||t.physics.enabled,this.optionsBackup.physics.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):t.physics!==!1&&(this.optionsBackup.physics.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var e="horizontal";"RL"!==this.options.hierarchical.direction&&"LR"!==this.options.hierarchical.direction||(e="vertical"),void 0===t.edges?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1}):void 0===t.edges.smooth?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1):"boolean"==typeof t.edges.smooth?(this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:e}):(void 0!==t.edges.smooth.type&&"dynamic"!==t.edges.smooth.type&&(e=t.edges.smooth.type),this.optionsBackup.edges={smooth:void 0===t.edges.smooth.enabled||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&&t.edges.smooth.forceDirection},t.edges.smooth={enabled:void 0===t.edges.smooth.enabled||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&&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 d=this.body.nodeIndices.length;if(a==d&&n%3!==0||n>o)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*r)})}this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=70,l=0;l0){var t=void 0,e=void 0,i=!1,o=!0,n=!1;this.hierarchicalLevels={},this.lastNodeOnLevel={},this.hierarchicalChildrenReference={},this.hierarchicalParentReference={},this.hierarchicalTrees={},this.treeIndex=-1,this.distributionOrdering={},this.distributionIndex={},this.distributionOrderingPresence={};for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0===t.options.x&&void 0===t.options.y&&(o=!1),void 0!==t.options.level?(i=!0,this.hierarchicalLevels[e]=t.options.level):n=!0);if(n===!0&&i===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");n===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():"directed"===this.options.hierarchical.sortMethod?this._determineLevelsDirected():"custom"===this.options.hierarchical.sortMethod&&this._determineLevelsCustomCallback()); -for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&void 0===this.hierarchicalLevels[s]&&(this.hierarchicalLevels[s]=0);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(){for(var e=d(),i=0,o=0;o0)for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,s=1e9,r=-1e9;for(var d in e)if(e.hasOwnProperty(d)){var h=t.body.nodes[d],l=t.hierarchicalLevels[h.id],u=t._getPositionForHierarchy(h),c=t._getSpaceAroundNode(h,e),f=(0,a.default)(c,2),p=f[0],v=f[1];o=Math.min(p,o),n=Math.min(v,n),l<=i&&(s=Math.min(u,s),r=Math.max(u,r))}return[s,r,o,n]},u=function(e){var i={},o=function e(o){if(void 0!==i[o])return i[o];var n=t.hierarchicalLevels[o];if(t.hierarchicalChildrenReference[o]){var s=t.hierarchicalChildrenReference[o];if(s.length>0)for(var r=0;r1)for(var a=0;a2&&void 0!==arguments[2]&&arguments[2],s=t._getPositionForHierarchy(i),r=t._getPositionForHierarchy(o),d=Math.abs(r-s);if(d>t.options.hierarchical.nodeSpacing){var u={},f={};h(i,u),h(o,f);var p=c(i,o),v=l(u,p),g=(0,a.default)(v,4),y=(g[0],g[1]),m=(g[2],g[3],l(f,p)),b=(0,a.default)(m,4),_=b[0],w=(b[1],b[2]),k=(b[3],Math.abs(y-_));if(k>t.options.hierarchical.nodeSpacing){var x=y-_+t.options.hierarchical.nodeSpacing;x<-w+t.options.hierarchical.nodeSpacing&&(x=-w+t.options.hierarchical.nodeSpacing),x<0&&(t._shiftBlock(o.id,x),e=!0,n===!0&&t._centerParent(o))}}},g=function(o,n){for(var s=n.id,r=n.edges,d=t.hierarchicalLevels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},f=[],p=0;p0?v=Math.min(p,f-t.options.hierarchical.nodeSpacing):p<0&&(v=-Math.min(-p,c-t.options.hierarchical.nodeSpacing)),0!=v&&(t._shiftBlock(n.id,v),e=!0)},w=function(i){var o=t._getPositionForHierarchy(n),s=t._getSpaceAroundNode(n),r=(0,a.default)(s,2),d=r[0],h=r[1],l=i-o,u=o;l>0?u=Math.min(o+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(d-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t._setPositionForHierarchy(n,u,void 0,!0),e=!0)},k=b(o,f);_(k),k=b(o,r),w(k)},y=function(i){var o=(0,s.default)(t.distributionOrdering);o=o.reverse();for(var n=0;n0)for(var h=0;h0&&Math.abs(y)0&&(a=this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing),this._setPositionForHierarchy(r,a,e),this._validataPositionAndContinue(r,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){if(void 0!==this.hierarchicalChildrenReference[t]){for(var i=[],o=0;oe&&void 0===this.positionedNodes[s.id]))return;var a=void 0;a=0===n?this._getPositionForHierarchy(this.body.nodes[t]):this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing,this._setPositionForHierarchy(s,a,r),this._validataPositionAndContinue(s,r,a)}for(var d=1e9,h=-1e9,l=0;l0&&(e=this._getHubSize(),0!==e);)for(var o in this.body.nodes)if(this.body.nodes.hasOwnProperty(o)){var n=this.body.nodes[o];n.edges.length===e&&this._crawlNetwork(i,o)}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=1e5,i=function(t,e,i){},o=function(o,n,s){var r=t.hierarchicalLevels[o.id];void 0===r&&(t.hierarchicalLevels[o.id]=e);var a=i(v.default.cloneOptions(o,"node"),v.default.cloneOptions(n,"node"),v.default.cloneOptions(s,"edge"));t.hierarchicalLevels[n.id]=t.hierarchicalLevels[o.id]+a};this._crawlNetwork(o),this._setMinLevelToZero()}},{key:"_determineLevelsDirected",value:function(){var t=this,e=1e4,i=function(i,o,n){var s=t.hierarchicalLevels[i.id];void 0===s&&(t.hierarchicalLevels[i.id]=e),n.toId==o.id?t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]+1:t.hierarchicalLevels[o.id]=t.hierarchicalLevels[i.id]-1};this._crawlNetwork(i),this._setMinLevelToZero()}},{key:"_setMinLevelToZero",value:function(){var t=1e9;for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&void 0!==this.hierarchicalLevels[e]&&(t=Math.min(this.hierarchicalLevels[e],t));for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&void 0!==this.hierarchicalLevels[i]&&(this.hierarchicalLevels[i]-=t)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){if(t.hierarchicalLevels[i.id]>t.hierarchicalLevels[e.id]){var o=e.id,n=i.id;void 0===t.hierarchicalChildrenReference[o]&&(t.hierarchicalChildrenReference[o]=[]),t.hierarchicalChildrenReference[o].push(n),void 0===t.hierarchicalParentReference[n]&&(t.hierarchicalParentReference[n]=[]),t.hierarchicalParentReference[n].push(o)}};this._crawlNetwork(e)}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=0,s=function i(n,s){if(void 0===o[n.id]){void 0===t.hierarchicalTrees[n.id]&&(t.hierarchicalTrees[n.id]=s,t.treeIndex=Math.max(s,t.treeIndex)),o[n.id]=!0;for(var r=void 0,a=0;a3&&void 0!==arguments[3]&&arguments[3];o!==!0&&(void 0===this.distributionOrdering[i]&&(this.distributionOrdering[i]=[],this.distributionOrderingPresence[i]={}),void 0===this.distributionOrderingPresence[i][t.id]&&(this.distributionOrdering[i].push(t),this.distributionIndex[t.id]=this.distributionOrdering[i].length-1),this.distributionOrderingPresence[i][t.id]=!0),"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x=e:t.y=e}},{key:"_getPositionForHierarchy",value:function(t){return"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x:t.y}},{key:"_sortNodeArray",value:function(t){t.length>1&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.sort(function(t,e){return t.x-e.x}):t.sort(function(t,e){return t.y-e.y}))}}]),t}();e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(89),a=o(r),d=i(62),h=o(d),l=i(95),u=o(l),c=i(96),f=o(c),p=i(1),v=i(158),g=i(161),y=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},p.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,f.default)(t,[{key:"_restore",value:function(){this.inMode!==!1&&(this.options.initiallyActive===!0?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,p.deepExtend(this.options,t)),this.options.initiallyActive===!0&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){this.editMode===!0?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},this.guiEnabled===!0){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;this.options.addNode!==!1&&(this._createAddNodeButton(o),n=!0),this.options.addEdge!==!1&&(n===!0?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(n===!0?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&this.options.editEdge!==!1&&(n===!0?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&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=p.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",function(){}),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,h.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(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))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);o.selected===!1&&(o.x=e.from.x,o.y=e.from.y),n.selected===!1&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else 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=p.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+p.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},p.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&&(p.recursiveDOMDelete(this.editModeDiv),p.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;t0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){if(this.options.rtl)var e="vis-button vis-delete-rtl";else var e="vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){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=p.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"+p.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(this.temporaryIds.nodes.indexOf(n[r])===-1){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:p.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,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(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=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(89),s=o(n),r=i(62),a=o(r),d=i(95),h=o(d),l=i(96),u=o(l),c=i(171),f=o(c),p=i(1),v=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,h.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},p.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new f.default(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),this.options.filter===!1&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,this.options.enabled===!0&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):e!==!0&&e.indexOf(n)===-1||(o=!0),o!==!1&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&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&&t.indexOf(e)!==-1&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(e*l),h=a.max,d="range increased"),a.value=e}else a.value=o;var u=document.createElement("input");u.className="vis-configuration vis-config-rangeinput",u.value=a.value;var c=this;a.onchange=function(){u.value=this.value,c._update(Number(this.value),i)},a.oninput=function(){u.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,u);""!==d&&this.popupHistory[p]!==h&&(this.popupHistory[p]=h,this._setupPopup(d,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&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=p.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 h=this._getValue(d);if(a instanceof Array)this._handleArray(a,h,d);else if("string"==typeof a)this._makeTextInput(a,h,d);else if("boolean"==typeof a)this._makeCheckbox(a,h,d);else if(a instanceof Object){var l=!0;if(e.indexOf("physics")!==-1&&this.moduleOptions.physics.solver!==r&&(l=!1),l===!0)if(void 0!==a.enabled){var u=p.copyAndExtendArray(d,"enabled"),c=this._getValue(u);if(c===!0){var f=this._makeLabel(r,d,!0);this._makeItem(d,f),s=this._handleObject(a,d)||s}else this._makeCheckbox(a,c,d)}else{var v=this._makeLabel(r,d,!0);this._makeItem(d,v),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.initialized=!0,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||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;e0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,h.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),c.isString(t)===!0){if(c.isValidRGB(t)===!0){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(c.isValidRGBA(t)===!0){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(c.isValidHex(t)===!0){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var d=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:d}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e===!0&&(this.previousColor=c.extend({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e===!0&&(this.initialColor=c.extend({},t)),this.color=t;var i=c.RGBToHSV(t.r,t.g,t.b),o=2*Math.PI,n=this.r*i.s,s=this.centerCoordinates.x+n*Math.sin(o*i.h),r=this.centerCoordinates.y+n*Math.cos(o*i.h);this.colorPickerSelector.style.left=s-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,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+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(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);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,d=1/360,h=1/this.r,l=void 0;for(s=0;s<360;s++)for(r=0;r2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o);for(var n=.01,r=1,a=0,d=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,u=0,c=0,f=0,p=0,v=0;l>n&&ar&&v=.1;)f=n[l++%s],f>h&&(f=h),c=Math.sqrt(f*f/(1+d*d)),c=r<0?-c:c,t+=c,e+=d*c,u===!0?this.lineTo(t,e):this.moveTo(t,e),h-=f,u=!u})},function(t,e){function i(t){if(t)return o(t)}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;n=0;i--){var a=s[i];a.nodes||(a.nodes=[]),a.nodes.indexOf(n)===-1&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function c(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function f(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(j=B.NULL,A="";" "===R||"\t"===R||"\n"===R||"\r"===R;)r();do{var t=!1;if("#"===R){for(var e=N-1;" "===z.charAt(e)||"\t"===z.charAt(e);)e--;if("\n"===z.charAt(e)||""===z.charAt(e)){for(;""!=R&&"\n"!=R;)r();t=!0}}if("/"===R&&"/"===a()){for(;""!=R&&"\n"!=R;)r();t=!0}if("/"===R&&"*"===a()){for(;""!=R;){if("*"===R&&"/"===a()){r(),r();break}r()}t=!0}for(;" "===R||"\t"===R||"\n"===R||"\r"===R;)r()}while(t);if(""===R)return void(j=B.DELIMITER);var i=R+a();if(I[i])return j=B.DELIMITER,A=i,r(),void r();if(I[R])return j=B.DELIMITER,A=R,void r();if(d(R)||"-"===R){for(A+=R,r();d(R);)A+=R,r();return"false"===A?A=!1:"true"===A?A=!0:isNaN(Number(A))||(A=Number(A)),void(j=B.IDENTIFIER)}if('"'===R){for(r();""!=R&&('"'!=R||'"'===R&&'"'===a());)A+=R,'"'===R&&r(),r();if('"'!=R)throw x('End of string " expected');return r(),void(j=B.IDENTIFIER)}for(j=B.UNKNOWN;""!=R;)A+=R,r();throw new SyntaxError('Syntax error in part "'+O(A,30)+'"')}function v(){var t={};if(s(),p(),"strict"===A&&(t.strict=!0,p()),"graph"!==A&&"digraph"!==A||(t.type=A,p()),j===B.IDENTIFIER&&(t.id=A,p()),"{"!=A)throw x("Angle bracket { expected");if(p(),g(t),"}"!=A)throw x("Angle bracket } expected");if(p(),""!==A)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function g(t){for(;""!==A&&"}"!=A;)y(t),";"===A&&p()}function y(t){var e=m(t);if(e)return void w(t,e);var i=b(t);if(!i){if(j!=B.IDENTIFIER)throw x("Identifier expected");var o=A;if(p(),"="===A){if(p(),j!=B.IDENTIFIER)throw x("Identifier expected");t[o]=A,p()}else _(t,o)}}function m(t){var e=null;if("subgraph"===A&&(e={},e.type="subgraph",p(),j===B.IDENTIFIER&&(e.id=A,p())),"{"===A){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,g(e),"}"!=A)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function b(t){return"node"===A?(p(),t.node=k(),"node"):"edge"===A?(p(),t.edge=k(),"edge"):"graph"===A?(p(),t.graph=k(),"graph"):null}function _(t,e){var i={id:e},o=k();o&&(i.attr=o),u(t,i),w(t,e)}function w(t,e){for(;"->"===A||"--"===A;){var i,o=A;p();var n=m(t);if(n)i=n;else{if(j!=B.IDENTIFIER)throw x("Identifier or subgraph expected");i=A,u(t,{id:i}),p()}var s=k(),r=f(t,e,i,o,s);c(t,r),e=i}}function k(){for(var t=null;"["===A;){for(p(),t={};""!==A&&"]"!=A;){if(j!=B.IDENTIFIER)throw x("Attribute name expected");var e=A;if(p(),"="!=A)throw x("Equal sign = expected");if(p(),j!=B.IDENTIFIER)throw x("Attribute value expected");var i=A;l(t,e,i),p(),","==A&&p()}if("]"!=A)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+O(A,30)+'" (char '+N+")")}function O(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function M(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 S(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},z="",N=0,R="",A="",j=B.NULL,H=/[a-zA-Z_0-9.:#]/;e.parseDOT=n,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\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&vt(o,i)}function f(t,e){return function(){return t.apply(e,arguments)}}function p(t,e){return typeof t==mt?t.apply(e?e[0]||a:a,e):t}function v(t,e){return t===a?e:t}function g(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function y(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function m(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function O(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=I(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,d=e.center=B(o);e.timeStamp=wt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=A(a,d),e.distance=R(a,d),P(i,e),e.offsetDirection=z(e.deltaX,e.deltaY);var h=N(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=h.x,e.overallVelocityY=h.y,e.overallVelocity=_t(h.x)>_t(h.y)?h.x:h.y,e.scale=r?H(r.pointers,o):1,e.rotation=r?j(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,F(i,e);var l=t.element;m(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Bt&&s.eventType!==zt||(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 F(t,e){var i,o,n,s,r=t.lastInterval||e,d=e.timeStamp-r.timeStamp;if(e.eventType!=Rt&&(d>It||r.velocity===a)){var h=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=N(d,h,l);o=u.x,n=u.y,i=_t(u.x)>_t(u.y)?u.x:u.y,s=z(h,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 I(t){for(var e=[],i=0;i=_t(e)?t<0?jt:Ht:e<0?Lt:Wt}function R(t,e,i){i||(i=qt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function A(t,e,i){i||(i=qt);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 A(e[1],e[0],Gt)+A(t[1],t[0],Gt)}function H(t,e){return R(e[0],e[1],Gt)/R(t[0],t[1],Gt)}function L(){this.evEl=Kt,this.evWin=Zt,this.pressed=!1,E.apply(this,arguments)}function W(){this.evEl=Jt,this.evWin=te,E.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=ie,this.evWin=oe,this.started=!1,E.apply(this,arguments)}function V(t,e){var i=k(t.touches),o=k(t.changedTouches);return e&(zt|Rt)&&(i=x(i.concat(o),"identifier",!0)),[i,o]}function U(){this.evTarget=se,this.targetIds={},E.apply(this,arguments)}function q(t,e){var i=k(t.touches),o=this.targetIds;if(e&(Bt|Nt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=k(t.changedTouches),a=[],d=this.target;if(s=i.filter(function(t){return m(t.target,d)}),e===Bt)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,re)}}function Z(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<_e&&e(i.options.event+et(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=_e&&e(i.options.event+et(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=xe)},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return nt.prototype.attrTest.call(this,t)&&(this.state&me||!(this.state&me)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=it(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(rt,nt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[fe]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&me)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ue]},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&(zt|Rt)&&!n)this.reset();else if(t.eventType&Bt)this.reset(),this._timer=d(function(){this.state=we,this.tryEmit()},e.time,this);else if(t.eventType&zt)return we;return xe},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===we&&(t&&t.eventType&zt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=wt(),this.manager.emit(this.options.event,this._input)))}}),c(dt,nt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[fe]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&me)}}),c(ht,nt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Yt|Vt,pointers:1},getTouchAction:function(){return st.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Yt|Vt)?e=t.overallVelocity:i&Yt?e=t.overallVelocityX:i&Vt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&_t(e)>this.options.velocity&&t.eventType&zt},emit:function(t){var e=it(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ce]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance2&&this.initialized()){e*=.5;for(var r=0;e>2&&r=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);var a=this.coordinates[r];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,o,n,s)}else this._isImageOk()&&t.drawImage(this.image,i,o,n,s)}},{key:"_isImageOk",value:function(t){var t=this.image;return!!t.complete&&("undefined"==typeof t.naturalWidth||0!==t.naturalWidth)}}]),t}();e.default=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=i(1),h=function(){function t(){(0,s.default)(this,t),this.clear(),this.defaultIndex=0,this.groupsArray=[],this.groupIndex=0,this.defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},d.extend(this.options,this.defaultOptions)}return(0,a.default)(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(t.hasOwnProperty(i)&&e.indexOf(i)===-1){var o=t[i];this.add(i,o)}}},{key:"clear",value:function(){this.groups={},this.groupsArray=[]}},{key:"get",value:function(t){var e=this.groups[t];if(void 0===e)if(this.options.useDefaultGroups===!1&&this.groupsArray.length>0){var i=this.groupIndex%this.groupsArray.length;this.groupIndex++,e={},e.color=this.groups[this.groupsArray[i]],this.groups[t]=e}else{var o=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,e={},e.color=this.defaultGroups[o],this.groups[t]=e}return e}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=h},function(t,e,i){function o(t){ +return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=i(1),h=i(88),l=i(92),u=i(113).default,c=i(114).default,f=function(){function t(e,i,o,n){var r=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},d.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){d.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(this.nodeOptions=t,void 0!==t){if(u.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font){c.parseOptions(this.options.font,t);for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i].needsRefresh())}if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof h||t instanceof l)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new h,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new h}if(i&&d.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;d.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}e===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:u;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions,this.nodeOptions)}},{key:"refresh",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.body.nodes;for(var i in e){var o=void 0;e.hasOwnProperty(i)&&(o=e[i]);var n=this.body.data.nodes.get(i);void 0!==o&&void 0!==n&&(t===!0&&o.setOptions({x:null,y:null}),o.setOptions({fixed:!1}),o.setOptions(n))}}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(Array.isArray(t)===!0){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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["color","font","fixed","shadow"];if(l.selectiveNotDeepExtend(n,t,e,i),l.mergeOptions(t,e,"shadow",i,o),void 0!==e.color&&null!==e.color){var s=l.parseColor(e.color);l.fillIfDefined(t.color,s)}else i===!0&&null===e.color&&(t.color=l.bridgeObject(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),void 0!==e.font&&null!==e.font?u.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=l.bridgeObject(o.font)),void 0!==e.scaling&&l.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)}}]),t}());e.default=E},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(115),s=o(n),r=i(2),a=o(r),d=i(62),h=o(d),l=i(105),u=o(l),c=i(106),f=o(c),p=i(1),v=function(){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,u.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,f.default)(t,[{key:"setOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.elementOptions=e,this.fontOptions=p.deepExtend({},e.font,!0),void 0!==e.label&&(this.labelDirty=!0),void 0!==e.font&&(t.parseOptions(this.fontOptions,e,i),"string"==typeof e.font?this.baseSize=this.fontOptions.size:"object"===(0,h.default)(e.font)&&void 0!==e.font.size&&(this.baseSize=e.font.size))}},{key:"constrain",value:function(t,e,i){this.fontOptions.constrainWidth=!1,this.fontOptions.maxWdt=-1,this.fontOptions.minWdt=-1;var o=[e,t,i],n=p.topMost(o,"widthConstraint");if("number"==typeof n)this.fontOptions.maxWdt=Number(n),this.fontOptions.minWdt=Number(n);else if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))){var s=p.topMost(o,["widthConstraint","maximum"]);"number"==typeof s&&(this.fontOptions.maxWdt=Number(s));var r=p.topMost(o,["widthConstraint","minimum"]);"number"==typeof r&&(this.fontOptions.minWdt=Number(r))}this.fontOptions.constrainHeight=!1,this.fontOptions.minHgt=-1,this.fontOptions.valign="middle";var a=p.topMost(o,"heightConstraint");if("number"==typeof a)this.fontOptions.minHgt=Number(a);else if("object"===("undefined"==typeof a?"undefined":(0,h.default)(a))){var d=p.topMost(o,["heightConstraint","minimum"]);"number"==typeof d&&(this.fontOptions.minHgt=Number(d));var l=p.topMost(o,["heightConstraint","valign"]);"string"==typeof l&&("top"!==l&&"bottom"!==l||(this.fontOptions.valign=l))}}},{key:"choosify",value:function(t,e,i){this.fontOptions.chooser=!0;var o=[e,t,i],n=p.topMost(o,"chosen");if("boolean"==typeof n)this.fontOptions.chooser=n;else if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))){var s=p.topMost(o,["chosen","label"]);"boolean"!=typeof s&&"function"!=typeof s||(this.fontOptions.chooser=s)}}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"propagateFonts",value:function(e,i,o){if(this.fontOptions.multi){var n=function(t,e){if(!t||!t.font)return null;var i=t.font;if(e){if(!i[e])return null;i=i[e]}return i},s=function(t,e,i){var o=n(t,e);return o&&o.hasOwnProperty(i)?o[i]:null},r=["bold","ital","boldital","mono"],d=!0,h=!1,l=void 0;try{for(var u,c=(0,a.default)(r);!(d=(u=c.next()).done);d=!0){var f=u.value,p=this.fontOptions[f],v=o.font[f];if(t.parseFontString(p,n(e,f)))p.vadjust=this.fontOptions.vadjust,p.mod=v.mod;else{p.face=s(e,f,"face")||s(i,f,"face")||("mono"===f?v.face:null)||s(i,null,"face")||this.fontOptions.face,p.color=s(e,f,"color")||s(i,f,"color")||s(i,null,"color")||this.fontOptions.color,p.mod=s(e,f,"mod")||s(i,f,"mod")||s(i,null,"mod")||v.mod;var g=void 0;p.face===v.face&&this.fontOptions.face===o.font.face&&(g=this.fontOptions.size/Number(o.font.size)),p.size=s(e,f,"size")||s(i,f,"size")||(g?v.size*g:null)||s(i,null,"size")||this.fontOptions.size,p.vadjust=s(e,f,"vadjust")||s(i,f,"vadjust")||(g?v.vadjust*Math.round(g):null)||this.fontOptions.vadjust}p.size=Number(p.size),p.vadjust=Number(p.vadjust)}}catch(t){h=!0,l=t}finally{try{!d&&c.return&&c.return()}finally{if(h)throw l}}}}},{key:"draw",value:function(t,e,i,o,n){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r5&&void 0!==arguments[5]?arguments[5]:"middle",a=this.fontOptions.size,d=a*this.body.view.scale;d>=this.elementOptions.scaling.label.maxVisible&&(a=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale);var h=this.size.yLine,l=this._setAlignment(t,o,h,r),u=(0,s.default)(l,2);o=u[0],h=u[1],t.textAlign="left",o-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(h-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(h+=(this.size.height-this.size.labelHeight)/2));for(var c=0;c0&&(t.lineWidth=v.strokeWidth,t.strokeStyle=b,t.lineJoin="round"),t.fillStyle=m,v.strokeWidth>0&&t.strokeText(v.text,o+f,h+v.vadjust),t.fillText(v.text,o+f,h+v.vadjust),f+=v.width}h+=this.lines[c].height}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&this.pointToSelf===!1){e=0,i=0;var n=2;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=2*n):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=2*n):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=p.overrideOpacity(o,s),n=p.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this.labelDirty===!0&&this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4),this.labelDirty=!1}},{key:"decodeMarkupSystem",value:function(t){var e="none";return"markdown"===t||"md"===t?e="markdown":t!==!0&&"html"!==t||(e="html"),e}},{key:"splitBlocks",value:function(t,e){var i=this.decodeMarkupSystem(e);return"none"===i?[{text:t,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(t):"html"===i?this.splitHtmlBlocks(t):void 0}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position/.test(t.substr(i.position,3))?i.mono||i.ital||!//.test(t.substr(i.position,3))?!i.mono&&//.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/</.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"getFormattingValues",value:function(t,e,i,o){var n=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:t[e][i]?t[e][i]:t[i]},s={color:n(this.fontOptions,o,"color"),size:n(this.fontOptions,o,"size"),face:n(this.fontOptions,o,"face"),mod:n(this.fontOptions,o,"mod"),vadjust:n(this.fontOptions,o,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};return"normal"===o?(e||i)&&(this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?s.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,s,this.elementOptions.id,e,i)):(e||i)&&"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,s,this.elementOptions.id,e,i),t.font=(s.mod+" "+s.size+"px "+s.face).replace(/"/g,""),s.font=t.font,s.height=s.size,s}},{key:"differentState",value:function(t,e){return t!==this.fontOptions.selectedState&&e!==this.fontOptions.hoverState}},{key:"_processLabel",value:function(t,e,i){var o=0,n=0,s=[],r=0;if(s.add=function(t,e,i,o,n,s,r,a,d,h){this.length==t&&(this[t]={width:0,height:0,blocks:[]}),this[t].blocks.push({text:e,font:i,color:o,width:n,height:s,vadjust:r,mod:a,strokeWidth:d,strokeColor:h})},s.accumulate=function(t,e,i){this[t].width+=e,this[t].height=i>this[t].height?i:this[t].height},s.addAndAccumulate=function(t,e,i,o,n,s,r,a,d,h){this.add(t,e,i,o,n,s,r,a,d,h),this.accumulate(t,n,s)},void 0!==this.elementOptions.label){var a=String(this.elementOptions.label).split("\n"),d=a.length;if(this.elementOptions.font.multi)for(var h=0;h0)for(var v=this.getFormattingValues(t,e,i,l[p].mod),g=l[p].text.split(" "),y=!0,m="",b={width:0},_=void 0,w=0;wthis.fontOptions.maxWdt&&0!=_.width?(c=v.height>c?v.height:c,s.add(r,m,v.font,v.color,_.width,v.height,v.vadjust,l[p].mod,v.strokeWidth,v.strokeColor),s.accumulate(r,_.width,c),m="",y=!0,u=0,o=s[r].width>o?s[r].width:o,n+=s[r].height,r++):(m=m+k+g[w],w===g.length-1&&(c=v.height>c?v.height:c,u+=b.width,s.add(r,m,v.font,v.color,b.width,v.height,v.vadjust,l[p].mod,v.strokeWidth,v.strokeColor),s.accumulate(r,b.width,c),p===l.length-1&&(o=s[r].width>o?s[r].width:o,n+=s[r].height,r++)),w++,y=!1)}else{var x=this.getFormattingValues(t,e,i,l[p].mod),O=t.measureText(l[p].text);s.addAndAccumulate(r,l[p].text,x.font,x.color,O.width,x.height,x.vadjust,l[p].mod,x.strokeWidth,x.strokeColor),o=s[r].width>o?s[r].width:o,l.length-1===p&&(n+=s[r].height,r++)}}}else for(var M=0;M0)for(var E=a[M].split(" "),D="",C={width:0},T=void 0,P=0;Pthis.fontOptions.maxWdt&&0!=T.width?(s.addAndAccumulate(r,D,S.font,S.color,T.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,D="",r++):(D=D+F+E[P],P===E.length-1&&(s.addAndAccumulate(r,D,S.font,S.color,C.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++),P++)}else{var I=a[M],B=t.measureText(I);s.addAndAccumulate(r,I,S.font,S.color,B.width,S.size,S.vadjust,"normal",S.strokeWidth,S.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++}}}this.fontOptions.minWdt>0&&o0&&n2&&void 0!==arguments[2]&&arguments[2];t.parseFontString(e,i.font)?e.vadjust=0:"object"===(0,h.default)(i.font)&&p.fillIfDefined(e,i.font,o),e.size=Number(e.size),e.vadjust=Number(e.vadjust)}},{key:"parseFontString",value:function(t,e){if(!e||"string"!=typeof e)return!1;var i=e.split(" ");return t.size=i[0].replace("px",""),t.face=i[1],t.color=i[2],!0}}]),t}();e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(116),s=o(n),r=i(2),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,d=(0,a.default)(t);!(o=(r=d.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&d.return&&d.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e,i){t.exports={default:i(117),__esModule:!0}},function(t,e,i){i(4),i(50),t.exports=i(118)},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).isIterable=function(t){var e=Object(t);return void 0!==e[n]||"@@iterator"in e||s.hasOwnProperty(o(e))}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t), +(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=this.width/2)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,t.strokeStyle=s.borderColor,t.lineWidth=s.borderWidth,t.lineWidth/=this.body.view.scale,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=s.color,t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),s.borderWidth>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2;var s=this.options.shapeProperties.borderRadius;this.boundingBox.left=this.left-s,this.boundingBox.top=this.top-s,this.boundingBox.bottom=this.top+this.height+s,this.boundingBox.right=this.left+this.width+s}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(v.default);e.default=g},function(t,e,i){t.exports={default:i(121),__esModule:!0}},function(t,e,i){i(122),t.exports=i(17).Object.getPrototypeOf},function(t,e,i){var o=i(49),n=i(48);i(61)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(62),s=o(n);e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==("undefined"==typeof e?"undefined":(0,s.default)(e))&&"function"!=typeof e?t:e}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(125),s=o(n),r=i(55),a=o(r),d=i(62),h=o(d);e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":(0,h.default)(e)));t.prototype=(0,a.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(s.default?(0,s.default)(t,e):t.__proto__=e)}},function(t,e,i){t.exports={default:i(126),__esModule:!0}},function(t,e,i){i(127),t.exports=i(17).Object.setPrototypeOf},function(t,e,i){var o=i(15);o(o.S,"Object",{setPrototypeOf:i(128).set})},function(t,e,i){var o=i(23),n=i(22),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(18)(Function.call,i(78).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(62),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,h.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"_setMargins",value:function(t){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(t,e){var i=this.options.borderWidth;return this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:"enableShadow",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(t,e){if(e.borderDashes!==!1)if(void 0!==t.setLineDash){var i=e.borderDashes;i===!0&&(i=[5,15]),t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:"disableBorderDashes",value:function(t,e){e.borderDashes!==!1&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:"needsRefresh",value:function(t,e){return this.refreshNeeded===!0?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(131),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=Math.max(this.textSize.width+this.margin.right+this.margin.left,this.textSize.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),this.boundingBox.top=i-s.size,this.boundingBox.left=e-s.size,this.boundingBox.right=e+s.size,this.boundingBox.bottom=i+s.size,this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=i(110),y=(o(g),function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n.labelOffset=0,n.selected=!1,n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"setOptions",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:"setImages",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:"switchImages",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_resizeImage",value:function(){var t,e;if(this.options.shapeProperties.useImageSize===!1){var i=1,o=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:o=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*o}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,o){var n=o.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,n),t.strokeStyle=o.borderColor,t.fillStyle=o.color,t.circle(e,i,o.size),this.enableShadow(t,o),t.fill(),this.disableShadow(t,o),t.save(),n>0&&(this.enableBorderDashes(t,o),t.stroke(),this.disableBorderDashes(t,o)),t.restore()}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=1;this.options.shapeProperties.interpolation===!0&&(i=this.imageObj.width/this.width/this.body.view.scale),this.imageObj.drawImageAtPosition(t,i,this.left,this.top,this.width,this.height),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(v.default));e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(131),v=o(p),g=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return d.setImages(n,r),d}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(o){var n=2*this.options.size;return this.width=n,this.height=n,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){if(this.needsRefresh(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width+this.margin.right+this.margin.left;this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){this.labelModule.getTextSize(t,e,i);var n=2*o.size;this.width=n,this.height=n,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){this.resize(t,s,r,a),this.left=o-this.width/2,this.top=n-this.height/2;var d=a.borderWidth/this.body.view.scale;if(t.lineWidth=Math.min(this.width,d),t.strokeStyle=a.borderColor,t.fillStyle=a.color,t[e](o,n,a.size),this.enableShadow(t,a),t.fill(),this.disableShadow(t,a),t.save(),d>0&&(this.enableBorderDashes(t,a),t.stroke(),this.disableBorderDashes(t,a)),t.restore(),void 0!==this.options.label){this.labelModule.calculateLabelSize(t,s,r,o,n,"hanging");var h=n+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(t,o,h,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.labelModule.getTextSize(t,e,i);this.height=2*o.height,this.width=o.width+this.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.ellipse_vis(this.left,this.top,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){var r=5;this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+r,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){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,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(131),v=o(p),g=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return d.setImages(n,r),d}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this.options.shapeProperties.useBorderWithImage===!0){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,d=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),t.save(),d>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(129),v=o(p),g=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,f.default)(e,t),(0,h.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(135),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(89),s=o(n),r=i(62),a=o(r),d=i(58),h=o(d),l=i(105),u=o(l),c=i(106),f=o(c),p=i(1),v=!1,g=void 0,y="background: #FFeeee; color: #dd0000",m=function(){function t(){(0,u.default)(this,t)}return(0,f.default)(t,null,[{key:"validate",value:function(e,i,o){v=!1,g=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),v}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){void 0===o[e]&&void 0===o.__any__?t.getSuggestion(e,o,n):void 0===o[e]&&void 0!==o.__any__?"object"===t.getType(i[e])&&void 0!==o.__any__.__type__?t.checkFields(e,i,o,"__any__",o.__any__.__type__,n):t.checkFields(e,i,o,"__any__",o.__any__,n):void 0!==o[e].__type__?t.checkFields(e,i,o,e,o[e].__type__,n):t.checkFields(e,i,o,e,o[e],n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=t.getType(i[e]),d=s[a];void 0!==d?"array"===t.getType(d)&&d.indexOf(i[e])===-1?(console.log('%cInvalid option detected in "'+e+'". Allowed values are:'+t.print(d)+' not "'+i[e]+'". '+t.printLocation(r,e),y),v=!0):"object"===a&&"__any__"!==n&&(r=p.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(console.log('%cInvalid type received for "'+e+'". Expected: '+t.print((0,h.default)(s))+". Received ["+a+'] "'+i[e]+'"'+t.printLocation(r,e),y),v=!0)}},{key:"getType",value:function(t){var e="undefined"==typeof t?"undefined":(0,a.default)(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":void 0!==t.nodeType?"dom":t._isAMomentObject===!0?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,g,[],!0),r=8,a=4;void 0!==n.indexMatch?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n',y):s.distance<=a&&n.distance>s.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,""),y):n.distance<=r?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),y):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print((0,h.default)(i))+t.printLocation(o,e),y),v=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],d=e.toLowerCase(),h=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&n===!0){var c=t.findInOptions(e,i[l],p.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,h=c.indexMatch)}else l.toLowerCase().indexOf(d)!==-1&&(h=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=p.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:h}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof h||t instanceof l)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new h,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new h}if(o&&d.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){d.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}i===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;ni.shape.height?(r=i.x+.5*i.shape.width,a=i.y-d):(r=i.x+d,a=i.y-.5*i.shape.height),s=this._pointOnCircle(r,a,d,.125),this.labelModule.draw(t,s.x,s.y,n,this.hover)}}}},{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,d=this.edgeType.getDistanceToEdge(i,o,n,s,r,a);return d0&&i<0)&&(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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["arrowStrikethrough","id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width"];if(p.selectiveDeepExtend(n,t,e,i),p.mergeOptions(t,e,"smooth",i,o),p.mergeOptions(t,e,"shadow",i,o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=(0,a.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),p.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)):i===!0&&null===e.scaling&&(t.scaling=(0,a.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();t.arrows.to.enabled=r.indexOf("to")!=-1,t.arrows.middle.enabled=r.indexOf("middle")!=-1,t.arrows.from.enabled=r.indexOf("from")!=-1}else{if("object"!==(0,h.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));p.mergeOptions(t.arrows,e.arrows,"to",i,o.arrows),p.mergeOptions(t.arrows,e.arrows,"middle",i,o.arrows),p.mergeOptions(t.arrows,e.arrows,"from",i,o.arrows)}else i===!0&&null===e.arrows&&(t.arrows=(0,a.default)(o.arrows));if(void 0!==e.color&&null!==e.color)if(t.color=p.deepExtend({},t.color,!0),p.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var d=!1;void 0!==e.color.color&&(t.color.color=e.color.color,d=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,d=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,d=!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&&d===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=p.bridgeObject(o.color));void 0!==e.font&&null!==e.font?v.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=p.bridgeObject(o.font))}}]),t}();e.default=_},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(115),s=o(n),r=i(120),a=o(r),d=i(105),h=o(d),l=i(106),u=o(l),c=i(123),f=o(c),p=i(124),v=o(p),g=i(149),y=o(g),m=function(t){function e(t,i,o){return(0,h.default)(this,e),(0,f.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,v.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i||void 0===o.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.bezierCurveTo(o.x,o.y,n.x,n.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||this.options.smooth.forceDirection===!0||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),d=(0,s.default)(a,2),h=d[0],l=d[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,h,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3);var d=a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,h=a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y;return{x:d,y:h}}}]),e}(y.default);e.default=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(150),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var d=1e9,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=t,v=e,g=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,g[0]=Math.pow(1-u,3),g[1]=3*u*Math.pow(1-u,2),g[2]=3*Math.pow(u,2)*(1-u),g[3]=Math.pow(u,3),c=g[0]*t+g[1]*r.x+g[2]*a.x+g[3]*i,f=g[0]*e+g[1]*r.y+g[2]*a.y+g[3]*o,l>0&&(h=this._getDistanceToLine(p,v,c,f,n,s),d=h2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),d=10,h=0,l=0,u=1,c=.2,f=this.to,p=!1;for(t.id===this.from.id&&(f=this.from,p=!0);l<=u&&h0&&(d=this._getDistanceToLine(f,p,u,c,n,s),a=do.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,d=10,h=0,l=this.options.selfReferenceSize,u=void 0,c=void 0,f=void 0,p=void 0,v=void 0,g=.05,y=.5*(s+r);s<=r&&h0?a>0?s=y:r=y:a>0?r=y:s=y,h++;return u.t=y,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,o){if(e.inheritsColor!==!1){if("both"===e.inheritsColor&&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,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,this.from.selected===!1&&this.to.selected===!1?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):this.from.selected===!0&&this.to.selected===!1?r=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,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle",value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,d){var h=0;if(this.from!=this.to)h=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],f=u[1],p=u[2],v=c-n,g=f-r;h=Math.abs(Math.sqrt(v*v+g*g)-p)}return this.labelModule.size.leftn&&this.labelModule.size.topr?0:h}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,d=r*r+a*a,h=((n-t)*r+(s-e)*a)/d;h>1?h=1:h<0&&(h=0);var l=t+h*r,u=e+h*a,c=l-n,f=u-s;return Math.sqrt(c*c+f*f)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,d=void 0,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=r.width;if("from"===e?(h=this.from,l=this.to,u=.1,c=r.fromArrowScale,f=r.fromArrowType):"to"===e?(h=this.to,l=this.from,u=-.1,c=r.toArrowScale,f=r.toArrowType):(h=this.to,l=this.from,c=r.middleArrowScale,f=r.middleArrowType),h!=l)if("middle"!==e)if(this.options.smooth.enabled===!0){d=this.findBorderPosition(h,t,{via:i});var v=this.getPoint(Math.max(0,Math.min(1,d.t+u)),i);a=Math.atan2(d.y-v.y,d.x-v.x)}else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.findBorderPosition(h,t);else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.getPoint(.5,i);else{var g=this._getCircleData(t),y=(0,s.default)(g,3),m=y[0],b=y[1],_=y[2];"from"===e?(d=this.findBorderPosition(this.from,t,{x:m,y:b,low:.25,high:.6,direction:-1}),a=d.t*-2*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(d=this.findBorderPosition(this.from,t,{x:m,y:b,low:.6,high:1,direction:1}),a=d.t*-2*Math.PI+1.5*Math.PI-1.1*Math.PI):(d=this._pointOnCircle(m,b,_,.175),a=3.9269908169872414)}var w=15*c+3*p,k=d.x-.9*w*Math.cos(a),x=d.y-.9*w*Math.sin(a),O={x:k,y:x};return{point:d,core:O,angle:a,length:w,type:f}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,n.type&&"circle"===n.type.toLowerCase()?t.circleEndpoint(n.point.x,n.point.y,n.angle,n.length):t.arrowEndpoint(n.point.x,n.point.y,n.angle,n.length),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(115),s=o(n),r=i(120),a=o(r),d=i(105),h=o(d),l=i(106),u=o(l),c=i(123),f=o(c),p=i(124),v=o(p),g=i(150),y=o(g),m=function(t){function e(t,i,o){(0,h.default)(this,e);var n=(0,f.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o));return n._boundFunction=function(){n.positionBezierNode()},n.body.emitter.on("_repositionBezierNodes",n._boundFunction),n}return(0,v.default)(e,t),(0,u.default)(e,[{key:"setOptions",value:function(t){var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),e===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||this.options.physics===!1?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var t="edgeId:"+this.id,e=this.body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this.body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),d=a[0],h=a[1],l=a[2],u=2*Math.PI*(1-i);o=d+l*Math.sin(u),n=h+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(y.default);e.default=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(150),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o)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*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=nMath.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=sMath.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.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y; +return{x:o,y:n}}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(120),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(123),u=o(l),c=i(124),f=o(c),p=i(151),v=o(p),g=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,f.default)(e,t),(0,h.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),d=t.distanceToBorder(e,n),h=(a-d)/a,l={};return l.x=(1-h)*o.x+h*i.x,l.y=(1-h)*o.y+h*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(105),a=o(r),d=i(106),h=o(d),l=i(156).default,u=i(157).default,c=i(158).default,f=i(159).default,p=i(160).default,v=i(161).default,g=i(162).default,y=i(163).default,m=i(1),b=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},m.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,h.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),t.ready===!0&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){t.ready===!0&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(t===!1?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):(this.physicsEnabled=!0,m.selectiveNotDeepExtend(["stabilization"],this.options,t),m.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new g(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new y(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new u(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new v(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new c(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new v(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new l(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new v(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,t===!0&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,t===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick();var e=Date.now()-t;(e<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilized===!1){if(this.adaptiveTimestep===!0&&this.adaptiveTimestepEnabled===!0){var t=1.2;this.adaptiveCounter%this.adaptiveInterval===0?(this.timestep=2*this.timestep,this.calculateForces(),this.moveNodes(),this.revert(),this.timestep=.5*this.timestep,this.calculateForces(),this.moveNodes(),this.calculateForces(),this.moveNodes(),this._evaluateStepQuality()===!0?this.timestep=t*this.timestep:this.timestep/ts))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=this.options.maxVelocity?this.options.maxVelocity:1e9,i=0,o=0,n=5,s=0;se?s[t].x>0?e:-e:s[t].x,i.x+=s[t].x*o}else n[t].x=0,s[t].x=0;if(i.options.fixed.y===!1){var d=this.modelOptions.damping*s[t].y,h=(n[t].y-d)/i.options.mass;s[t].y+=h*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]?arguments[0]:this.options.stabilization.iterations;return"number"!=typeof e&&(console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",this.options.stabilization.iterations),e=this.options.stabilization.iterations),0===this.physicsBody.physicsNodeIndices.length?void(this.ready=!0):(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,void setTimeout(function(){return t._stabilizationBatch()},0))}},{key:"_stabilizationBatch",value:function(){this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0);for(var t=0;this.stabilized===!1&&t0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s0&&(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&&o.shape.radius&&(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,d=1;d0&&(hr&&(r=h),la&&(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,f=Math.max(c,Math.abs(r-n)),p=.5*f,v=.5*(n+r),g=.5*(s+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m0&&this._placeInTree(y.root,i);return y}},{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=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,d=this.body.nodes,h=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,f=4/3,p=0;p0){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}(v.default);e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(62),a=o(r),d=i(105),h=o(d),l=i(106),u=o(l),c=i(1),f=i(165).default,p=i(166).default,v=function(){function t(e){var i=this;(0,h.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o=t&&i.push(n.id)}for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{},e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===t.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");t=this._checkOptions(t);for(var i={},o={},n=0;n2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o=[],n={},r=void 0,a=void 0,d=void 0,h=void 0,l=void 0,u=0;u0&&(0,s.default)(p).length>0&&g===!0&&o.push({nodes:c,edges:p})}}}for(var _=0;_1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,d=f.cloneOptions(o);n[a]=o;for(var h=0;h-1&&(r[y.id]=y)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,d=void 0,h=void 0,l=void 0,u=(0,s.default)(t),p=[],v=0;v0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){for(var n in t)if(t.hasOwnProperty(n)&&void 0!==this.clusteredNodes[n])return;var r=c.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var a=[];for(var d in t)if(t.hasOwnProperty(d)){var h=f.cloneOptions(t[d]);a.push(h)}var l=[];for(var u in e)if(e.hasOwnProperty(u)&&"clusterEdge:"!==u.substr(0,12)){var v=f.cloneOptions(e[u],"edge");l.push(v)}if(r=i.processProperties(r,a,l),!r)throw new Error("The processProperties function does not return properties!")}void 0===r.id&&(r.id="cluster:"+c.randomUUID());var g=r.id;void 0===r.label&&(r.label="cluster");var y=void 0;void 0===r.x&&(y=this._getClusterPosition(t),r.x=y.x),void 0===r.y&&(void 0===y&&(y=this._getClusterPosition(t)),r.y=y.y),r.id=g;var m=this.body.functions.createNode(r,p);m.isCluster=!0,m.containedNodes=t,m.containedEdges=e,m.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[r.id]=m,this._createClusterEdges(t,e,r,i.clusterEdgeProperties);for(var b in e)if(e.hasOwnProperty(b)&&void 0!==this.body.edges[b]){var _=this.body.edges[b];this._backupEdgeOptions(_),_.setOptions({physics:!1,hidden:!0})}for(var w in t)t.hasOwnProperty(w)&&(this.clusteredNodes[w]={clusterId:r.id,node:this.body.nodes[w]},this.body.nodes[w].setOptions({hidden:!0,physics:!1}));r.id=void 0,o===!0&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics,hidden:t.options.hidden})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics,hidden:e.hidden}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?this.body.nodes[t].isCluster===!0:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,d=1;do?a.x:o,n=a.yr?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||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 h=this.body.nodes[d];r[d]={x:h.x,y:h.y}}var l=e.releaseFunction(a,r);for(var u in n)if(n.hasOwnProperty(u)){var p=this.body.nodes[u];void 0!==l[u]&&(p.x=void 0===l[u].x?o.x:l[u].x,p.y=void 0===l[u].y?o.y:l[u].y)}}else for(var v in n)if(n.hasOwnProperty(v)){var g=this.body.nodes[v];g=n[v],g.options.fixed.x===!1&&(g.x=o.x),g.options.fixed.y===!1&&(g.y=o.y)}for(var y in n)if(n.hasOwnProperty(y)){var m=this.body.nodes[y];m.vx=o.vx,m.vy=o.vy,m.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[y]}for(var b=[],_=0;_o&&(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),d=Math.floor(t+2*a);return d>o&&(d=o),d}}]),t}();e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=i(1),h=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,null,[{key:"getRange",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),n0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,t.requiresTimeout===!0?clearTimeout(t.renderTimer):cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];d.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]&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e=this.canvas.frame.canvas.getContext("2d");0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),t===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&this._drawEdges(e),(this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),t===!0&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){var t=this.canvas.frame.canvas.getContext("2d");void 0===this.pixelRatio&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0),t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=20,a=this.canvas.DOMtoCanvas({x:-r,y:-r}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+r,y:this.canvas.frame.canvas.clientHeight+r}),h={top:a.y,left:a.x,bottom:d.y,right:d.x},l=0;l0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(t.indexOf("%")!==-1||t.indexOf("px")!==-1)return t;if(t.indexOf("%")===-1)return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this._setPixelRatio(t),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new d(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_ALL}),h.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new d(this.frame),h.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.frame.canvas.getContext("2d"),r=this.pixelRatio;if(this._setPixelRatio(s),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var a=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),d=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===a&&this.frame.canvas.height===d||this._getCameraState(r),this.frame.canvas.width!==a&&(this.frame.canvas.width=a,i=!0),this.frame.canvas.height!==d&&(this.frame.canvas.height=d,i=!0)}return i===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"_setPixelRatio",value:function(t){this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){i(100);e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch,e.disablePreventDefaultVertically=function(t){var e="pan-y";return t.getTouchAction=function(){return[e]},t}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=i(1),h=i(165).default,l=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){o.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),e===!0){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];r.predefinedPosition===!0&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=h.getRange(this.body.nodes,t.nodes);var a=this.body.nodeIndices.length;o=12.662/(a+7.4147)+.0964822;var d=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600);o*=d}else{this.body.emitter.emit("_resizeNodes"),i=h.getRange(this.body.nodes,t.nodes);var l=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),c=this.canvas.frame.canvas.clientWidth/l,f=this.canvas.frame.canvas.clientHeight/u;o=c<=f?c:f}o>1?o=1:0===o&&(o=1);var p=h.findCenter(i),v={position:p,scale:o,animation:t.animation};this.moveTo(v)}},{key:"focus",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){return void 0===t?void(t={}):(void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),t.animation===!1&&(t.animation={duration:0}),t.animation===!0&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),void this.animateView(t))}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),t.locked===!0&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=t===!0?1:this.easingTime;var e=d.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=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=i(1),h=i(172).default,l=i(173).default,u=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new h(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},d.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];d.selectiveNotDeepExtend(e,this.options,t),d.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(d.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=d.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-d.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-d.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(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]&&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(),d=this.selectionHandler._getSelectedNodeCount(),h=this.selectionHandler.getSelection(),l=this._determineIfDifferent(s,h),u=l.nodesChanged,c=l.edgesChanged,f=!1;d-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,f=!0):u===!0&&d>0?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),f=!0,r=!0):d-n<0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0),a-o>0&&f===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a>0&&c===!0?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a-o<0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0),r===!0&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineIfDifferent",value:function(t,e){for(var i=!1,o=!1,n=0;n10&&(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 d=this.canvas.canvasToDOM(o);this.drag.pointer.x=d.x,this.drag.pointer.y=d.y}this.body.emitter.emit("_requestRedraw"),i0&&(this.popupObj=d[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&s===!1){for(var f=this.body.edgeIndices,p=this.body.edges,v=void 0,g=[],y=0;y0&&(this.popupObj=p[g[g.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new l(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=void 0!==o&&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},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=(i(1),i(100)),h=i(169),l=i(99),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){this.options.navigationButtons===!0?this.iconsCreated===!1&&this.loadNavigationElements():this.iconsCreated===!0&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t700&&(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(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{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=l({container:window,preventDefault:!0}):this.keycharm=l({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=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(105),s=o(n),r=i(106),a=o(r),d=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),t===!0){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,d=!0;this.y-en-this.padding&&(a=!0),s=a?this.x-i:this.x,r=d?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s4&&void 0!==arguments[4]&&arguments[4],s=void 0;s=n===!0?{nodes:[],edges:[]}:this.getSelection(),s.pointer={DOM:{x:i.x,y:i.y},canvas:this.canvas.DOMtoCanvas(i)},s.event=e,void 0!==o&&(s.previousSelection=o),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof d&&e===!0&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){t.isSelected()===!0&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?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;o1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties";if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(115),a=o(r),d=i(62),h=o(d),l=i(105),u=o(l),c=i(106),f=o(c),p=i(1),v=i(165).default,g=function(){function t(){(0,u.default)(this,t),this.childrenReference={},this.parentReference={},this.levels={},this.trees={},this.isTree=!1}return(0,f.default)(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={},o=function t(o){if(void 0!==i[o])return i[o];var n=e.levels[o];if(e.childrenReference[o]){var s=e.childrenReference[o];if(s.length>0)for(var r=0;r0&&(this.options.hierarchical.levelSeparation*=-1):this.options.hierarchical.levelSeparation<0&&(this.options.hierarchical.levelSeparation*=-1),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(i===!0)return this.body.emitter.emit("refresh"),p.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={enabled:void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,solver:"hierarchicalRepulsion"},this.optionsBackup.physics.enabled=void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,this.optionsBackup.physics.solver=this.optionsBackup.physics.solver||"barnesHut"):"object"===(0,h.default)(t.physics)?(this.optionsBackup.physics.enabled=void 0===t.physics.enabled||t.physics.enabled,this.optionsBackup.physics.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):t.physics!==!1&&(this.optionsBackup.physics.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var e="horizontal";"RL"!==this.options.hierarchical.direction&&"LR"!==this.options.hierarchical.direction||(e="vertical"),void 0===t.edges?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1}):void 0===t.edges.smooth?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1):"boolean"==typeof t.edges.smooth?(this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:e}):(void 0!==t.edges.smooth.type&&"dynamic"!==t.edges.smooth.type&&(e=t.edges.smooth.type),this.optionsBackup.edges={smooth:void 0===t.edges.smooth.enabled||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&&t.edges.smooth.forceDirection},t.edges.smooth={enabled:void 0===t.edges.smooth.enabled||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&&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=t.length+50,i=0;is){for(var a=this.body.nodeIndices.length;this.body.nodeIndices.length>s&&n<=o;){n+=1;var d=this.body.nodeIndices.length;n%3===0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r);var h=this.body.nodeIndices.length;if(d==h&&n%3!==0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*a)})}n>o&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._shiftToCenter();for(var l=70,u=0;u0){var t=void 0,e=void 0,i=!1,o=!0,n=!1;this.lastNodeOnLevel={},this.hierarchical=new g,this.treeIndex=-1,this.distributionOrdering={},this.distributionIndex={},this.distributionOrderingPresence={};for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0===t.options.x&&void 0===t.options.y&&(o=!1),void 0!==t.options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(n===!0&&i===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");n===!0&&("hubsize"===this.options.hierarchical.sortMethod?this._determineLevelsByHubsize():"directed"===this.options.hierarchical.sortMethod?this._determineLevelsDirected():"custom"===this.options.hierarchical.sortMethod&&this._determineLevelsCustomCallback());for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&this.hierarchical.ensureLevel(s);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(){for(var e=d(),i=0,o=0;o0)for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,s=1e9,r=-1e9;for(var d in e)if(e.hasOwnProperty(d)){var h=t.body.nodes[d],l=t.hierarchical.levels[h.id],u=t._getPositionForHierarchy(h),c=t._getSpaceAroundNode(h,e),f=(0,a.default)(c,2),p=f[0],v=f[1];o=Math.min(p,o),n=Math.min(v,n),l<=i&&(s=Math.min(u,s),r=Math.max(u,r))}return[s,r,o,n]},u=function(e,i){var o=t.hierarchical.getMaxLevel(e.id),n=t.hierarchical.getMaxLevel(i.id);return Math.min(o,n)},c=function(e,i){var o=t.hierarchical.parentReference[e.id],n=t.hierarchical.parentReference[i.id];if(void 0===o||void 0===n)return!1;for(var s=0;s1)for(var a=0;a2&&void 0!==arguments[2]&&arguments[2],s=t._getPositionForHierarchy(i),r=t._getPositionForHierarchy(o),d=Math.abs(r-s);if(d>t.options.hierarchical.nodeSpacing){var c={},f={};h(i,c),h(o,f);var p=u(i,o),v=l(c,p),g=(0,a.default)(v,4),y=(g[0],g[1]),m=(g[2],g[3],l(f,p)),b=(0,a.default)(m,4),_=b[0],w=(b[1],b[2]),k=(b[3],Math.abs(y-_));if(k>t.options.hierarchical.nodeSpacing){var x=y-_+t.options.hierarchical.nodeSpacing;x<-w+t.options.hierarchical.nodeSpacing&&(x=-w+t.options.hierarchical.nodeSpacing),x<0&&(t._shiftBlock(o.id,x),e=!0,n===!0&&t._centerParent(o))}}},v=function(o,n){for(var s=n.id,r=n.edges,d=t.hierarchical.levels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},f=[],p=0;p0?v=Math.min(p,f-t.options.hierarchical.nodeSpacing):p<0&&(v=-Math.min(-p,c-t.options.hierarchical.nodeSpacing)),0!=v&&(t._shiftBlock(n.id,v),e=!0)},w=function(i){var o=t._getPositionForHierarchy(n),s=t._getSpaceAroundNode(n),r=(0,a.default)(s,2),d=r[0],h=r[1],l=i-o,u=o;l>0?u=Math.min(o+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(d-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t._setPositionForHierarchy(n,u,void 0,!0),e=!0)},k=b(o,f);_(k),k=b(o,r),w(k)},g=function(i){var o=(0,s.default)(t.distributionOrdering);o=o.reverse();for(var n=0;n0)for(var h=0;h0&&Math.abs(y)0&&(a=this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing),this._setPositionForHierarchy(r,a,e),this._validatePositionAndContinue(r,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){if(void 0!==this.hierarchical.childrenReference[t]){for(var i=[],o=0;oe&&void 0===this.positionedNodes[s.id]))return;var a=void 0;a=0===n?this._getPositionForHierarchy(this.body.nodes[t]):this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing,this._setPositionForHierarchy(s,a,r),this._validatePositionAndContinue(s,r,a)}for(var d=1e9,h=-1e9,l=0;l0&&(e=this._getHubSize(),0!==e);)for(var o in this.body.nodes)if(this.body.nodes.hasOwnProperty(o)){var n=this.body.nodes[o];n.edges.length===e&&this._crawlNetwork(i,o)}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=1e5,i=function(t,e,i){},o=function(o,n,s){var r=t.hierarchical.levels[o.id];void 0===r&&(t.hierarchical.levels[o.id]=e);var a=i(v.cloneOptions(o,"node"),v.cloneOptions(n,"node"),v.cloneOptions(s,"edge"));t.hierarchical.levels[n.id]=t.hierarchical.levels[o.id]+a};this._crawlNetwork(o),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_determineLevelsDirected",value:function(){var t=this,e=1e4,i=function(i,o,n){var s=t.hierarchical.levels[i.id];void 0===s&&(t.hierarchical.levels[i.id]=e),n.toId==o.id?t.hierarchical.levels[o.id]=t.hierarchical.levels[i.id]+1:t.hierarchical.levels[o.id]=t.hierarchical.levels[i.id]-1};this._crawlNetwork(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)};this._crawlNetwork(e),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=0,s=function i(n,s){if(void 0===o[n.id]){void 0===t.hierarchical.trees[n.id]&&(t.hierarchical.trees[n.id]=s,t.treeIndex=Math.max(s,t.treeIndex)),o[n.id]=!0;for(var r=void 0,a=0;a3&&void 0!==arguments[3]&&arguments[3];o!==!0&&(void 0===this.distributionOrdering[i]&&(this.distributionOrdering[i]=[],this.distributionOrderingPresence[i]={}),void 0===this.distributionOrderingPresence[i][t.id]&&(this.distributionOrdering[i].push(t),this.distributionIndex[t.id]=this.distributionOrdering[i].length-1),this.distributionOrderingPresence[i][t.id]=!0),"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x=e:t.y=e}},{key:"_isVertical",value:function(){return"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction}},{key:"_getPositionForHierarchy",value:function(t){return"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x:t.y}},{key:"_sortNodeArray",value:function(t){t.length>1&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.sort(function(t,e){return t.x-e.x}):t.sort(function(t,e){return t.y-e.y}))}}]),t}();e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(89),a=o(r),d=i(62),h=o(d),l=i(105),u=o(l),c=i(106),f=o(c),p=i(1),v=i(100),g=i(169),y=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},p.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,f.default)(t,[{key:"_restore",value:function(){this.inMode!==!1&&(this.options.initiallyActive===!0?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,p.deepExtend(this.options,t)),this.options.initiallyActive===!0&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){this.editMode===!0?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},this.guiEnabled===!0){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;this.options.addNode!==!1&&(this._createAddNodeButton(o),n=!0),this.options.addEdge!==!1&&(n===!0?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(n===!0?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&this.options.editEdge!==!1&&(n===!0?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&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=p.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",function(){}),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,h.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(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))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);o.selected===!1&&(o.x=e.from.x,o.y=e.from.y),n.selected===!1&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else 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=p.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+p.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},p.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&&(p.recursiveDOMDelete(this.editModeDiv),p.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;t0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){if(this.options.rtl)var e="vis-button vis-delete-rtl";else var e="vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){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=p.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"+p.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(this.temporaryIds.nodes.indexOf(n[r])===-1){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:p.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,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===("undefined"==typeof n?"undefined":(0,h.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(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=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(89),s=o(n),r=i(62),a=o(r),d=i(105),h=o(d),l=i(106),u=o(l),c=i(1),f=i(178).default,p=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,h.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},c.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new f(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),this.options.filter===!1&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,this.options.enabled===!0&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):e!==!0&&e.indexOf(n)===-1||(o=!0),o!==!1&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&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&&t.indexOf(e)!==-1&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(e*l),h=a.max,d="range increased"),a.value=e}else a.value=o;var u=document.createElement("input");u.className="vis-configuration vis-config-rangeinput",u.value=a.value;var c=this;a.onchange=function(){u.value=this.value,c._update(Number(this.value),i)},a.oninput=function(){u.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,u);""!==d&&this.popupHistory[p]!==h&&(this.popupHistory[p]=h,this._setupPopup(d,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&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=c.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 h=this._getValue(d);if(a instanceof Array)this._handleArray(a,h,d);else if("string"==typeof a)this._makeTextInput(a,h,d);else if("boolean"==typeof a)this._makeCheckbox(a,h,d);else if(a instanceof Object){var l=!0;if(e.indexOf("physics")!==-1&&this.moduleOptions.physics.solver!==r&&(l=!1),l===!0)if(void 0!==a.enabled){var u=c.copyAndExtendArray(d,"enabled"),f=this._getValue(u);if(f===!0){var p=this._makeLabel(r,d,!0);this._makeItem(d,p),s=this._handleObject(a,d)||s}else this._makeCheckbox(a,f,d)}else{var v=this._makeLabel(r,d,!0);this._makeItem(d,v),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.initialized=!0,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||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;e0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,h.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),c.isString(t)===!0){if(c.isValidRGB(t)===!0){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(c.isValidRGBA(t)===!0){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(c.isValidHex(t)===!0){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var d=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:d}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e===!0&&(this.previousColor=c.extend({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e===!0&&(this.initialColor=c.extend({},t)),this.color=t;var i=c.RGBToHSV(t.r,t.g,t.b),o=2*Math.PI,n=this.r*i.s,s=this.centerCoordinates.x+n*Math.sin(o*i.h),r=this.centerCoordinates.y+n*Math.cos(o*i.h);this.colorPickerSelector.style.left=s-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,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+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(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);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,d=1/360,h=1/this.r,l=void 0;for(s=0;s<360;s++)for(r=0;r2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o),this._createE_matrix();for(var n=.01,r=1,a=0,d=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,u=0,c=0,f=0,p=0,v=0;l>n&&ar&&v2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&t.indexOf(s)==-1)if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&n===!0?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){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 m={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(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==("undefined"==typeof i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;r<=a&&s0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?u=h+1:p=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),p=i(47)("iterator"),c=!([].keys&&"next"in[].keys()),f="@@iterator",m="keys",g="values",v=function(){return this};t.exports=function(t,e,i,y,b,_,w){d(i,e,y);var x,D,S,k=function(t){if(!c&&t in O)return O[t];switch(t){case m:return function(){return new i(this,t)};case g:return function(){return new i(this,t)}}return function(){return new i(this,t)}},T=e+" Iterator",C=b==g,M=!1,O=t.prototype,E=O[p]||O[f]||b&&O[b],P=E||k(b),N=b?C?k("entries"):P:void 0,A="Array"==e?O.entries||E:E;if(A&&(S=u(A.call(new t)),S!==Object.prototype&&(l(S,T,!0),o||a(S,p)||r(S,p,v))),C&&E&&E.name!==g&&(M=!0,P=function(){return E.call(this)}),o&&!w||!c&&!M&&O[p]||r(O,p,P),h[e]=P,h[T]=v,b)if(x={values:C?P:k(g),keys:_?P:k(m),entries:N},w)for(D in x)D in O||s(O,D,x[D]);else n(n.P+n.F*(c||M),e,x);return x}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a="prototype",h=function(t,e,i){var d,l,u,p=t&h.F,c=t&h.G,f=t&h.S,m=t&h.P,g=t&h.B,v=t&h.W,y=c?n:n[e]||(n[e]={}),b=y[a],_=c?o:f?o[e]:(o[e]||{})[a];c&&(i=e);for(d in i)l=!p&&_&&void 0!==_[d],l&&d in y||(u=l?_[d]:i[d],y[d]=c&&"function"!=typeof _[d]?i[d]:g&&l?s(u,o):v&&_[d]==u?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e[a]=t[a],e}(u):m&&"function"==typeof u?s(Function.call,u):u,m&&((y.virtual||(y.virtual={}))[d]=u,t&h.R&&b&&!b[d]&&r(b,d,u)))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h="prototype",d=function(){var t,e=i(27)("iframe"),o=s.length,n="<",r=">";for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(n+"script"+r+"document.F=Object"+n+"/script"+r),t.close(),d=t.F;o--;)delete d[h][s[o]];return d()};t.exports=Object.create||function(t,e){var i;return null!==t?(a[h]=o(t),i=new a,a[h]=null,i[r]=t):i=d(),void 0===e?i:n(i,e)}},function(t,e,i){var o=i(21),n=i(22),s=i(35);t.exports=i(25)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(36),n=i(44);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){var o=i(31),n=i(9),s=i(37)(!1),r=i(41)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(9),n=i(38),s=i(40);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if(a=h[l++],a!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(39),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(39),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(42)("keys"),n=i(43);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(16),n="__core-js_shared__",s=o[n]||(o[n]={});t.exports=function(t){return s[t]||(s[t]={})}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){t.exports=i(16).document&&document.documentElement},function(t,e,i){var o=i(21).f,n=i(31),s=i(47)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(42)("wks"),n=i(43),s=i(16).Symbol,r="function"==typeof s,a=t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))};a.store=o},function(t,e,i){var o=i(31),n=i(49),s=i(41)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(12);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(51)(!0);i(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){var o=i(39),n=i(12);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):(s-55296<<10)+(r-56320)+65536)}}},function(t,e,i){var o=i(22),n=i(53);t.exports=i(17).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(11),n=i(47)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){t.exports={default:i(56),__esModule:!0}},function(t,e,i){i(57);var o=i(17).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(15);o(o.S,"Object",{create:i(33)})},function(t,e,i){t.exports={default:i(59),__esModule:!0}},function(t,e,i){i(60),t.exports=i(17).Object.keys},function(t,e,i){var o=i(49),n=i(35);i(61)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(15),n=i(17),s=i(26);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(63),s=o(n),r=i(66),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return"undefined"==typeof t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":h(t)}},function(t,e,i){t.exports={default:i(64),__esModule:!0}},function(t,e,i){i(50),i(4),t.exports=i(65).f("iterator")},function(t,e,i){e.f=i(47)},function(t,e,i){t.exports={default:i(67),__esModule:!0}},function(t,e,i){i(68),i(79),i(80),i(81),t.exports=i(17).Symbol},function(t,e,i){var o=i(16),n=i(31),s=i(25),r=i(15),a=i(30),h=i(69).KEY,d=i(26),l=i(42),u=i(46),p=i(43),c=i(47),f=i(65),m=i(70),g=i(71),v=i(72),y=i(75),b=i(22),_=i(9),w=i(28),x=i(29),D=i(33),S=i(76),k=i(78),T=i(21),C=i(35),M=k.f,O=T.f,E=S.f,P=o.Symbol,N=o.JSON,A=N&&N.stringify,I="prototype",R=c("_hidden"),L=c("toPrimitive"),F={}.propertyIsEnumerable,H=l("symbol-registry"),Y=l("symbols"),j=l("op-symbols"),G=Object[I],z="function"==typeof P,W=o.QObject,B=!W||!W[I]||!W[I].findChild,V=s&&d(function(){return 7!=D(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=M(G,e);o&&delete G[e],O(t,e,i),o&&t!==G&&O(G,e,o)}:O,U=function(t){var e=Y[t]=D(P[I]);return e._k=t,e},q=z&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},X=function(t,e,i){return t===G&&X(j,e,i),b(t),e=w(e,!0),b(i),n(Y,e)?(i.enumerable?(n(t,R)&&t[R][e]&&(t[R][e]=!1),i=D(i,{enumerable:x(0,!1)})):(n(t,R)||O(t,R,x(1,{})),t[R][e]=!0),V(t,e,i)):O(t,e,i)},Z=function(t,e){b(t);for(var i,o=v(e=_(e)),n=0,s=o.length;s>n;)X(t,i=o[n++],e[i]);return t},K=function(t,e){return void 0===e?D(t):Z(D(t),e)},$=function(t){var e=F.call(this,t=w(t,!0));return!(this===G&&n(Y,t)&&!n(j,t))&&(!(e||!n(this,t)||!n(Y,t)||n(this,R)&&this[R][t])||e)},J=function(t,e){if(t=_(t),e=w(e,!0),t!==G||!n(Y,e)||n(j,e)){var i=M(t,e);return!i||!n(Y,e)||n(t,R)&&t[R][e]||(i.enumerable=!0),i}},Q=function(t){for(var e,i=E(_(t)),o=[],s=0;i.length>s;)n(Y,e=i[s++])||e==R||e==h||o.push(e);return o},tt=function(t){for(var e,i=t===G,o=E(i?j:_(t)),s=[],r=0;o.length>r;)!n(Y,e=o[r++])||i&&!n(G,e)||s.push(Y[e]);return s};z||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(i){this===G&&e.call(j,i),n(this,R)&&n(this[R],t)&&(this[R][t]=!1),V(this,t,x(1,i))};return s&&B&&V(G,t,{configurable:!0,set:e}),U(t)},a(P[I],"toString",function(){return this._k}),k.f=J,T.f=X,i(77).f=S.f=Q,i(74).f=$,i(73).f=tt,s&&!i(14)&&a(G,"propertyIsEnumerable",$,!0),f.f=function(t){return U(c(t))}),r(r.G+r.W+r.F*!z,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;et.length>it;)c(et[it++]);for(var et=C(c.store),it=0;et.length>it;)m(et[it++]);r(r.S+r.F*!z,"Symbol",{for:function(t){return n(H,t+="")?H[t]:H[t]=P(t)},keyFor:function(t){if(q(t))return g(H,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){B=!0},useSimple:function(){B=!1}}),r(r.S+r.F*!z,"Object",{create:K,defineProperty:X,defineProperties:Z,getOwnPropertyDescriptor:J,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),N&&r(r.S+r.F*(!z||d(function(){var t=P();return"[null]"!=A([t])||"{}"!=A({a:t})||"{}"!=A(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!q(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&y(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!q(e))return e}),o[1]=e,A.apply(N,o)}}}),P[I][L]||i(20)(P[I],L,P[I].valueOf),u(P,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(43)("meta"),n=i(23),s=i(31),r=i(21).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(26)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},p=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},c=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:p,onFreeze:c}},function(t,e,i){var o=i(16),n=i(17),s=i(14),r=i(65),a=i(21).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e,i){var o=i(35),n=i(9);t.exports=function(t,e){for(var i,s=n(t),r=o(s),a=r.length,h=0;a>h;)if(s[i=r[h++]]===e)return i}},function(t,e,i){var o=i(35),n=i(73),s=i(74);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){var o=i(11);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(9),n=i(77).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(36),n=i(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(74),n=i(29),s=i(9),r=i(28),a=i(31),h=i(24),d=Object.getOwnPropertyDescriptor;e.f=i(25)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(70)("asyncIterator")},function(t,e,i){i(70)("observable")},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(83)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return _o.apply(null,arguments)}function i(t){_o=t}function o(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function n(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){var e;for(e in t)return!1;return!0}function r(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function d(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return T(i)?i(e):i.replace(/%s/i,e)}function L(t,e){var i=t.toLowerCase();Ro[i]=Ro[i+"s"]=Ro[e]=t}function F(t){return"string"==typeof t?Ro[t]||Ro[t.toLowerCase()]:void 0}function H(t){var e,i,o={};for(i in t)l(t,i)&&(e=F(i),e&&(o[e]=t[i]));return o}function Y(t,e){Lo[t]=e}function j(t){var e=[];for(var i in t)e.push({unit:i,priority:Lo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function G(t,i){return function(o){return null!=o?(W(this,t,o),e.updateOffset(this,i),this):z(this,t)}}function z(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function W(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function B(t){return t=F(t),T(this[t])?this[t]():this}function V(t,e){if("object"==typeof t){t=H(t);for(var i=j(t),o=0;o=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function q(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(jo[t]=n),e&&(jo[e[0]]=function(){return U(n.apply(this,arguments),e[1],e[2])}),i&&(jo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Z(t){var e,i,o=t.match(Fo);for(e=0,i=o.length;e=0&&Ho.test(t);)t=t.replace(Ho,i),Ho.lastIndex=0,o-=1;return t}function J(t,e,i){sn[t]=T(e)?e:function(t,o){return t&&i?i:e}}function Q(t,e){return l(sn,t)?sn[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),a(e)&&(o=function(t,i){i[e]=w(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i,n=(7+_t(t,0,o).getUTCDay()-e)%7;return-n+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=gt(s)+d):d>gt(t)?(s=t+1,r=d-gt(t)):(s=t,r=d),{year:s,dayOfYear:r}}function Dt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(gt(t)-o+n)/7}function kt(t){return Dt(t,this._week.dow,this._week.doy).week}function Tt(){return this._week.dow}function Ct(){return this._week.doy}function Mt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ot(t){var e=Dt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Et(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Nt(t,e){return t?o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone}function At(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function It(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Rt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=p([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null):"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null)))}function Lt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return Rt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=p([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Et(t,this.localeData()),this.add(t-e,"d")):e}function Ht(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Yt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Cn),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Gt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Mn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function zt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=On),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=p([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=et(a[e]),h[e]=et(h[e]),d[e]=et(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Bt(){return this.hours()%12||12}function Vt(){return this.hours()||24}function Ut(t,e){q(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function $t(t){for(var e,i,o,n,s=0;s0;){if(o=Jt(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&x(n,i,!0)>=e-1)break;e--}s++}return null}function Jt(e){var i=null;if(!In[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=En._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return In[e]}function Qt(t,e){var i;return t&&(i=r(e)?ie(t):te(t,e),i&&(En=i)),En._abbr}function te(t,e){if(null!==e){var i=An;if(e.abbr=t,null!=In[t])k("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=In[t]._config;else if(null!=e.parentLocale){if(null==In[e.parentLocale])return Rn[e.parentLocale]||(Rn[e.parentLocale]=[]),Rn[e.parentLocale].push({name:t,config:e}),null;i=In[e.parentLocale]._config}return In[t]=new O(M(i,e)),Rn[t]&&Rn[t].forEach(function(t){te(t.name,t.config)}),Qt(t),In[t]}return delete In[t],null}function ee(t,e){if(null!=e){var i,o=An;null!=In[t]&&(o=In[t]._config),e=M(o,e),i=new O(e),i.parentLocale=In[t],In[t]=i,Qt(t)}else null!=In[t]&&(null!=In[t].parentLocale?In[t]=In[t].parentLocale:null!=In[t]&&delete In[t]);return In[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return En;if(!o(t)){if(e=Jt(t))return e;t=[t]}return $t(t)}function oe(){return Mo(In)}function ne(t){var e,i=t._a;return i&&f(t).overflow===-2&&(e=i[hn]<0||i[hn]>11?hn:i[dn]<1||i[dn]>st(i[an],i[hn])?dn:i[ln]<0||i[ln]>24||24===i[ln]&&(0!==i[un]||0!==i[pn]||0!==i[cn])?ln:i[un]<0||i[un]>59?un:i[pn]<0||i[pn]>59?pn:i[cn]<0||i[cn]>999?cn:-1,f(t)._overflowDayOfYear&&(edn)&&(e=dn),f(t)._overflowWeeks&&e===-1&&(e=fn),f(t)._overflowWeekday&&e===-1&&(e=mn),f(t).overflow=e),t}function se(t){var e,i,o,n,s,r,a=t._i,h=Ln.exec(a)||Fn.exec(a);if(h){for(f(t).iso=!0,e=0,i=Yn.length;e10?"YYYY ":"YY "),s="HH:mm"+(i[4]?":ss":""),i[1]){var u=new Date(i[2]),p=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][u.getDay()];if(i[1].substr(0,3)!==p)return f(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(i[5].length){case 2:0===h?a=" +0000":(h=l.indexOf(i[5][1].toUpperCase())-12,a=(h<0?" -":" +")+(""+h).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=d[i[5]];break;default:a=d[" GMT"]}i[5]=a,t._i=i.splice(1).join(""),r=" ZZ",t._f=o+n+s+r,pe(t),f(t).rfc2822=!0}else t._isValid=!1}function ae(t){var i=Gn.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(se(t),void(t._isValid===!1&&(delete t._isValid,re(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function he(t,e,i){return null!=t?t:null!=e?e:i}function de(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function le(t){var e,i,o,n,s=[];if(!t._d){for(o=de(t),t._w&&null==t._a[dn]&&null==t._a[hn]&&ue(t),null!=t._dayOfYear&&(n=he(t._a[an],o[an]),(t._dayOfYear>gt(n)||0===t._dayOfYear)&&(f(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[hn]=i.getUTCMonth(),t._a[dn]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ln]&&0===t._a[un]&&0===t._a[pn]&&0===t._a[cn]&&(t._nextDay=!0,t._a[ln]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ln]=24)}}function ue(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=he(e.GG,t._a[an],Dt(_e(),1,4).year),o=he(e.W,1),n=he(e.E,1),(n<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=Dt(_e(),s,r);i=he(e.gg,t._a[an],d.year),o=he(e.w,d.week),null!=e.d?(n=e.d,(n<0||n>6)&&(h=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?f(t)._overflowWeeks=!0:null!=h?f(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[an]=a.year,t._dayOfYear=a.dayOfYear)}function pe(t){if(t._f===e.ISO_8601)return void se(t);if(t._f===e.RFC_2822)return void re(t);t._a=[],f(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=$(t._f,t._locale).match(Fo)||[],i=0;i0&&f(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),jo[s]?(o?f(t).empty=!1:f(t).unusedTokens.push(s),nt(s,o,t)):t._strict&&!o&&f(t).unusedTokens.push(s);f(t).charsLeftOver=h-d,a.length>0&&f(t).unusedInput.push(a),t._a[ln]<=12&&f(t).bigHour===!0&&t._a[ln]>0&&(f(t).bigHour=void 0),f(t).parsedDateParts=t._a.slice(0),f(t).meridiem=t._meridiem,t._a[ln]=ce(t._locale,t._a[ln],t._meridiem),le(t),ne(t)}function ce(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function fe(t){var e,i,o,n,s;if(0===t._f.length)return f(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ge(){if(!r(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=ve(t),t._a){var e=t._isUTC?p(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&x(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ze(){return!!this.isValid()&&!this._isUTC}function We(){return!!this.isValid()&&this._isUTC}function Be(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ve(t,e){var i,o,n,s=t,r=null;return Me(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(s={},e?s[e]=t:s.milliseconds=t):(r=Xn.exec(t))?(i="-"===r[1]?-1:1,s={y:0,d:w(r[dn])*i,h:w(r[ln])*i,m:w(r[un])*i,s:w(r[pn])*i,ms:w(Oe(1e3*r[cn]))*i}):(r=Zn.exec(t))?(i="-"===r[1]?-1:1,s={y:Ue(r[2],i),M:Ue(r[3],i),w:Ue(r[4],i),d:Ue(r[5],i),h:Ue(r[6],i),m:Ue(r[7],i),s:Ue(r[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Xe(_e(s.from),_e(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ce(s),Me(t)&&l(t,"_locale")&&(o._locale=t._locale),o}function Ue(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function qe(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 Xe(t,e){var i;return t.isValid()&&e.isValid()?(e=Ne(e,t),t.isBefore(e)?i=qe(t,e):(i=qe(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function Ze(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(k(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ve(i,o),Ke(this,n,t),this}}function Ke(t,i,o,n){var s=i._milliseconds,r=Oe(i._days),a=Oe(i._months);t.isValid()&&(n=null==n||n,s&&t._d.setTime(t._d.valueOf()+s*o),r&&W(t,"Date",z(t,"Date")+r*o),a&<(t,z(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function $e(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function Je(t,i){var o=t||_e(),n=Ne(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(T(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,_e(o)))}function Qe(){return new y(this)}function ti(t,e){var i=b(t)?t:_e(t);return!(!this.isValid()||!i.isValid())&&(e=F(r(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?K(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):T(Date.prototype.toISOString)?this.toDate().toISOString():K(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function li(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",s=e+'[")]';return this.format(i+o+n+s)}function ui(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=K(this,t);return this.localeData().postformat(i)}function pi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ve({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ci(t){return this.from(_e(),t)}function fi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ve({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function mi(t){return this.to(_e(),t)}function gi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function vi(){return this._locale}function yi(t){switch(t=F(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function bi(t){return t=F(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function _i(){return this._d.valueOf()-6e4*(this._offset||0)}function wi(){return Math.floor(this.valueOf()/1e3)}function xi(){return new Date(this.valueOf())}function Di(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Si(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function ki(){return this.isValid()?this.toISOString():null}function Ti(){return m(this)}function Ci(){return u({},f(this))}function Mi(){return f(this).overflow}function Oi(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ei(t,e){q(0,[t,t.length],0,e)}function Pi(t){return Ri.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ni(t){return Ri.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Ai(){return St(this.year(),1,4)}function Ii(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function Ri(t,e,i,o,n){var s;return null==t?Dt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Li.call(this,t,e,i,o,n))}function Li(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Fi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Hi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Yi(t,e){e[cn]=w(1e3*("0."+t))}function ji(){return this._isUTC?"UTC":""}function Gi(){return this._isUTC?"Coordinated Universal Time":""}function zi(t){return _e(1e3*t)}function Wi(){return _e.apply(null,arguments).parseZone()}function Bi(t){return t}function Vi(t,e,i,o){var n=ie(),s=p().set(o,e);return n[i](s,t)}function Ui(t,e,i){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Vi(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Vi(t,o,i,"month");return n; -}function qi(t,e,i,o){"boolean"==typeof t?(a(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,a(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Vi(e,(i+s)%7,o,"day");var r,h=[];for(r=0;r<7;r++)h[r]=Vi(e,(r+s)%7,o,"day");return h}function Xi(t,e){return Ui(t,e,"months")}function Zi(t,e){return Ui(t,e,"monthsShort")}function Ki(t,e,i){return qi(t,e,i,"weekdays")}function $i(t,e,i){return qi(t,e,i,"weekdaysShort")}function Ji(t,e,i){return qi(t,e,i,"weekdaysMin")}function Qi(){var t=this._data;return this._milliseconds=rs(this._milliseconds),this._days=rs(this._days),this._months=rs(this._months),t.milliseconds=rs(t.milliseconds),t.seconds=rs(t.seconds),t.minutes=rs(t.minutes),t.hours=rs(t.hours),t.months=rs(t.months),t.years=rs(t.years),this}function to(t,e,i,o){var n=Ve(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function eo(t,e){return to(this,t,e,1)}function io(t,e){return to(this,t,e,-1)}function oo(t){return t<0?Math.floor(t):Math.ceil(t)}function no(){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||s<=0&&r<=0&&a<=0||(s+=864e5*oo(ro(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=_(s/1e3),h.seconds=t%60,e=_(t/60),h.minutes=e%60,i=_(e/60),h.hours=i%24,r+=_(i/24),n=_(so(r)),a+=n,r-=oo(ro(n)),o=_(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function so(t){return 4800*t/146097}function ro(t){return 146097*t/4800}function ao(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if(t=F(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+so(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ro(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 ho(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN}function lo(t){return function(){return this.as(t)}}function uo(t){return t=F(t),this.isValid()?this[t+"s"]():NaN}function po(t){return function(){return this.isValid()?this._data[t]:NaN}}function co(){return _(this.days()/7)}function fo(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function mo(t,e,i){var o=Ve(t).abs(),n=xs(o.as("s")),s=xs(o.as("m")),r=xs(o.as("h")),a=xs(o.as("d")),h=xs(o.as("M")),d=xs(o.as("y")),l=n<=Ds.ss&&["s",n]||n0,l[4]=i,fo.apply(null,l)}function go(t){return void 0===t?xs:"function"==typeof t&&(xs=t,!0)}function vo(t,e){return void 0!==Ds[t]&&(void 0===e?Ds[t]:(Ds[t]=e,"s"===t&&(Ds.ss=e-1),!0))}function yo(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=mo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function bo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Ss(this._milliseconds)/1e3,n=Ss(this._days),s=Ss(this._months);t=_(o/60),e=_(t/60),o%=60,t%=60,i=_(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o,p=this.asSeconds();return p?(p<0?"-":"")+"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 _o,wo;wo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var xn=G("FullYear",!0);q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),Y("week",5),Y("isoWeek",5),J("w",Uo),J("ww",Uo,zo),J("W",Uo),J("WW",Uo,zo),ot(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=w(t)});var Dn={dow:0,doy:6};q("d",0,"do","day"),q("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),q("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),q("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),J("d",Uo),J("e",Uo),J("E",Uo),J("dd",function(t,e){return e.weekdaysMinRegex(t)}),J("ddd",function(t,e){return e.weekdaysShortRegex(t)}),J("dddd",function(t,e){return e.weekdaysRegex(t)}),ot(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:f(i).invalidWeekday=t}),ot(["d","e","E"],function(t,e,i,o){e[o]=w(t)});var Sn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),kn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Tn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cn=nn,Mn=nn,On=nn;q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Bt),q("k",["kk",2],0,Vt),q("hmm",0,0,function(){return""+Bt.apply(this)+U(this.minutes(),2)}),q("hmmss",0,0,function(){return""+Bt.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),q("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),q("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Ut("a",!0),Ut("A",!1),L("hour","h"),Y("hour",13),J("a",qt),J("A",qt),J("H",Uo),J("h",Uo),J("k",Uo),J("HH",Uo,zo),J("hh",Uo,zo),J("kk",Uo,zo),J("hmm",qo),J("hmmss",Xo),J("Hmm",qo),J("Hmmss",Xo),it(["H","HH"],ln),it(["k","kk"],function(t,e,i){var o=w(t);e[ln]=24===o?0:o}),it(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),it(["h","hh"],function(t,e,i){e[ln]=w(t),f(i).bigHour=!0}),it("hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o)),f(i).bigHour=!0}),it("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[pn]=w(t.substr(n)),f(i).bigHour=!0}),it("Hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o))}),it("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[pn]=w(t.substr(n))});var En,Pn=/[ap]\.?m?\.?/i,Nn=G("Hours",!0),An={calendar:Oo,longDateFormat:Eo,invalidDate:Po,ordinal:No,dayOfMonthOrdinalParse:Ao,relativeTime:Io,months:yn,monthsShort:bn,week:Dn,weekdays:Sn,weekdaysMin:Tn,weekdaysShort:kn,meridiemParse:Pn},In={},Rn={},Ln=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Hn=/Z|[+-]\d\d(?::?\d\d)?/,Yn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],jn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Gn=/^\/?Date\((\-?\d+)/i,zn=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=S("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Wn=S("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:g()}),Vn=function(){return Date.now?Date.now():+new Date},Un=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ee("Z",":"),Ee("ZZ",""),J("Z",en),J("ZZ",en),it(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Pe(en,t)});var qn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xn=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Zn=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ve.fn=Ce.prototype,Ve.invalid=Te;var Kn=Ze(1,"add"),$n=Ze(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Jn=S("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)});q(0,["gg",2],0,function(){return this.weekYear()%100}),q(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ei("gggg","weekYear"),Ei("ggggg","weekYear"),Ei("GGGG","isoWeekYear"),Ei("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),J("G",Qo),J("g",Qo),J("GG",Uo,zo),J("gg",Uo,zo),J("GGGG",Ko,Bo),J("gggg",Ko,Bo),J("GGGGG",$o,Vo),J("ggggg",$o,Vo),ot(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=w(t)}),ot(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),q("Q",0,"Qo","quarter"),L("quarter","Q"),Y("quarter",7),J("Q",Go),it("Q",function(t,e){e[hn]=3*(w(t)-1)}),q("D",["DD",2],"Do","date"),L("date","D"),Y("date",9),J("D",Uo),J("DD",Uo,zo),J("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),it(["D","DD"],dn),it("Do",function(t,e){e[dn]=w(t.match(Uo)[0],10)});var Qn=G("Date",!0);q("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),Y("dayOfYear",4),J("DDD",Zo),J("DDDD",Wo),it(["DDD","DDDD"],function(t,e,i){i._dayOfYear=w(t)}),q("m",["mm",2],0,"minute"),L("minute","m"),Y("minute",14),J("m",Uo),J("mm",Uo,zo),it(["m","mm"],un);var ts=G("Minutes",!1);q("s",["ss",2],0,"second"),L("second","s"),Y("second",15),J("s",Uo),J("ss",Uo,zo),it(["s","ss"],pn);var es=G("Seconds",!1);q("S",0,0,function(){return~~(this.millisecond()/100)}),q(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),q(0,["SSS",3],0,"millisecond"),q(0,["SSSS",4],0,function(){return 10*this.millisecond()}),q(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),q(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),q(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),q(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),q(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),Y("millisecond",16),J("S",Zo,Go),J("SS",Zo,zo),J("SSS",Zo,Wo);var is;for(is="SSSS";is.length<=9;is+="S")J(is,Jo);for(is="S";is.length<=9;is+="S")it(is,Yi);var os=G("Milliseconds",!1);q("z",0,0,"zoneAbbr"),q("zz",0,0,"zoneName");var ns=y.prototype;ns.add=Kn,ns.calendar=Je,ns.clone=Qe,ns.diff=ri,ns.endOf=bi,ns.format=ui,ns.from=pi,ns.fromNow=ci,ns.to=fi,ns.toNow=mi,ns.get=B,ns.invalidAt=Mi,ns.isAfter=ti,ns.isBefore=ei,ns.isBetween=ii,ns.isSame=oi,ns.isSameOrAfter=ni,ns.isSameOrBefore=si,ns.isValid=Ti,ns.lang=Jn,ns.locale=gi,ns.localeData=vi,ns.max=Bn,ns.min=Wn,ns.parsingFlags=Ci,ns.set=V,ns.startOf=yi,ns.subtract=$n,ns.toArray=Di,ns.toObject=Si,ns.toDate=xi,ns.toISOString=di,ns.inspect=li,ns.toJSON=ki,ns.toString=hi,ns.unix=wi,ns.valueOf=_i,ns.creationData=Oi,ns.year=xn,ns.isLeapYear=yt,ns.weekYear=Pi,ns.isoWeekYear=Ni,ns.quarter=ns.quarters=Fi,ns.month=ut,ns.daysInMonth=pt,ns.week=ns.weeks=Mt,ns.isoWeek=ns.isoWeeks=Ot,ns.weeksInYear=Ii,ns.isoWeeksInYear=Ai,ns.date=Qn,ns.day=ns.days=Ft,ns.weekday=Ht,ns.isoWeekday=Yt,ns.dayOfYear=Hi,ns.hour=ns.hours=Nn,ns.minute=ns.minutes=ts,ns.second=ns.seconds=es,ns.millisecond=ns.milliseconds=os,ns.utcOffset=Ie,ns.utc=Le,ns.local=Fe,ns.parseZone=He,ns.hasAlignedHourOffset=Ye,ns.isDST=je,ns.isLocal=ze,ns.isUtcOffset=We,ns.isUtc=Be,ns.isUTC=Be,ns.zoneAbbr=ji,ns.zoneName=Gi,ns.dates=S("dates accessor is deprecated. Use date instead.",Qn),ns.months=S("months accessor is deprecated. Use month instead",ut),ns.years=S("years accessor is deprecated. Use year instead",xn),ns.zone=S("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Re),ns.isDSTShifted=S("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ge);var ss=O.prototype;ss.calendar=E,ss.longDateFormat=P,ss.invalidDate=N,ss.ordinal=A,ss.preparse=Bi,ss.postformat=Bi,ss.relativeTime=I,ss.pastFuture=R,ss.set=C,ss.months=rt,ss.monthsShort=at,ss.monthsParse=dt,ss.monthsRegex=ft,ss.monthsShortRegex=ct,ss.week=kt,ss.firstDayOfYear=Ct,ss.firstDayOfWeek=Tt,ss.weekdays=Nt,ss.weekdaysMin=It,ss.weekdaysShort=At,ss.weekdaysParse=Lt,ss.weekdaysRegex=jt,ss.weekdaysShortRegex=Gt,ss.weekdaysMinRegex=zt,ss.isPM=Xt,ss.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=S("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=S("moment.langData is deprecated. Use moment.localeData instead.",ie);var rs=Math.abs,as=lo("ms"),hs=lo("s"),ds=lo("m"),ls=lo("h"),us=lo("d"),ps=lo("w"),cs=lo("M"),fs=lo("y"),ms=po("milliseconds"),gs=po("seconds"),vs=po("minutes"),ys=po("hours"),bs=po("days"),_s=po("months"),ws=po("years"),xs=Math.round,Ds={ss:44,s:45,m:45,h:22,d:26,M:11},Ss=Math.abs,ks=Ce.prototype;return ks.isValid=ke,ks.abs=Qi,ks.add=eo,ks.subtract=io,ks.as=ao,ks.asMilliseconds=as,ks.asSeconds=hs,ks.asMinutes=ds,ks.asHours=ls,ks.asDays=us,ks.asWeeks=ps,ks.asMonths=cs,ks.asYears=fs,ks.valueOf=ho,ks._bubble=no,ks.get=uo,ks.milliseconds=ms,ks.seconds=gs,ks.minutes=vs,ks.hours=ys,ks.days=bs,ks.weeks=co,ks.months=_s,ks.years=ws,ks.humanize=yo,ks.toISOString=bo,ks.toString=bo,ks.toJSON=bo,ks.locale=gi,ks.localeData=vi,ks.toIsoString=S("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",bo),ks.lang=Jn,q("X",0,0,"unix"),q("x",0,0,"valueOf"),J("x",Qo),J("X",on),it("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,i){i._d=new Date(w(t))}),e.version="2.18.0",i(_e),e.fn=ns,e.min=xe,e.max=De,e.now=Vn,e.utc=p,e.unix=zi,e.months=Xi,e.isDate=h,e.locale=Qt,e.invalid=g,e.duration=Ve,e.isMoment=b,e.weekdays=Ki,e.parseZone=Wi,e.localeData=ie,e.isDuration=Me,e.monthsShort=Zi,e.weekdaysMin=Ji,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=$i,e.normalizeUnits=F,e.relativeTimeRounding=go,e.relativeTimeThreshold=vo,e.calendarFormat=$e,e.prototype=ns,e})}).call(e,i(84)(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=85},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){n<16&&(e[o+n++]=u[t])});n<16;)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:v+1,d=a-g+(h-v)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>g)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,v=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 p=t.node||f,c=0;c<6;c++)s[n+c]=p[c];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;a<16;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;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},p=0;p<256;p++)l[p]=(p+256).toString(16).substr(1),u[l[p]]=p;var c=r(),f=[1|c[0],c[1],c[2],c[3],c[4],c[5]],m=16383&(c[6]<<8|c[7]),g=0,v=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,function(){return this}())},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(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){return t&&t.__esModule?t:{default:t}}function n(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=(0,l.default)(this._options.type),o=0,n=i.length;on?1:or)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;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){return t&&t.__esModule?t:{default:t}}function n(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 s=i(58),r=o(s),a=i(1),h=i(88);n.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;os)&&(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;this.range.setRange(r-a/2,r+a/2,h)}}},n.prototype.fit=function(t){var e,i=!t||void 0===t.animation||t.animation,o=this.itemsData&&this.itemsData.getDataSet();1===o.length&&void 0===o.get()[0].end?(e=this.getDataRange(),this.moveTo(e.min.valueOf(),{animation:i})):(e=this.getItemRange(),this.range.setRange(e.min,e.max,i))},n.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,n=null;if(null!=e&&null!=i){var s=function(t){return l.convert(t.data.start,"Date").valueOf()},r=function(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return l.convert(e,"Date").valueOf()},a=i-e;a<=0&&(a=10);var h=a/this.props.center.width;if(l.forEach(this.itemSet.items,function(t){t.groupShowing&&(t.show(),t.repositionX());var a=s(t),d=r(t);if(this.options.rtl)var l=a-(t.getWidthRight()+10)*h,u=d+(t.getWidthLeft()+10)*h;else var l=a-(t.getWidthLeft()+10)*h,u=d+(t.getWidthRight()+10)*h;li&&(i=u,n=t)}.bind(this)),o&&n){var d=o.getWidthLeft()+10,u=n.getWidthRight()+10,p=this.props.center.width-d-u;p>0&&(this.options.rtl?(e=s(o)-u*a/p,i=r(n)+d*a/p):(e=s(o)-d*a/p,i=r(n)+u*a/p))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},n.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=l.convert(i.start,"Date").valueOf(),n=l.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||oe)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},n.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY;if(this.options.rtl)var o=l.getAbsoluteRight(this.dom.centerContainer)-e;else var o=e-l.getAbsoluteLeft(this.dom.centerContainer);var n=i-l.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=v.customTimeFromTarget(t),h=this.itemSet.options.snap||null,d=this.body.util.getScale(),u=this.body.util.getStep(),p=this._toTime(o),c=h?h(p,d,u):p,f=l.getTarget(t),m=null;return null!=s?m="item":null!=a?m="custom-time":l.hasParent(f,this.timeAxis.dom.foreground)?m="axis":this.timeAxis2&&l.hasParent(f,this.timeAxis2.dom.foreground)?m="axis":l.hasParent(f,this.itemSet.dom.labelSet)?m="group-label":l.hasParent(f,this.currentTime.bar)?m="current-time":l.hasParent(f,this.dom.center)&&(m="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:m,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:p,snappedTime:c}},n.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(89),s=o(n),r=i(62),a=o(r),h=i(95),d=o(h),l=i(96),u=o(l),p=i(100),c=o(p),f=i(1),m=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},f.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new c.default(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),this.options.filter===!1&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,this.options.enabled===!0&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):e!==!0&&e.indexOf(n)===-1||(o=!0),o!==!1&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&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&&t.indexOf(e)!==-1&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(e*l),d=a.max,h="range increased"),a.value=e}else a.value=o;var u=document.createElement("input");u.className="vis-configuration vis-config-rangeinput",u.value=a.value;var p=this;a.onchange=function(){u.value=this.value,p._update(Number(this.value),i)},a.oninput=function(){u.value=this.value};var c=this._makeLabel(i[i.length-1],i),f=this._makeItem(i,c,a,u);""!==h&&this.popupHistory[f]!==d&&(this.popupHistory[f]=d,this._setupPopup(h,f))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&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],h=f.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,h,!0),this.allowCreation=i===!1)),o!==!1){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(e.indexOf("physics")!==-1&&this.moduleOptions.physics.solver!==r&&(l=!1),l===!0)if(void 0!==a.enabled){var u=f.copyAndExtendArray(h,"enabled"),p=this._getValue(u);if(p===!0){var c=this._makeLabel(r,h,!0);this._makeItem(h,c),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,p,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}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.initialized=!0,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||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;e0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),p.isString(t)===!0){if(p.isValidRGB(t)===!0){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(p.isValidRGBA(t)===!0){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(p.isValidHex(t)===!0){var a=p.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e===!0&&(this.previousColor=p.extend({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e===!0&&(this.initialColor=p.extend({},t)),this.color=t;var i=p.RGBToHSV(t.r,t.g,t.b),o=2*Math.PI,n=this.r*i.s,s=this.centerCoordinates.x+n*Math.sin(o*i.h),r=this.centerCoordinates.y+n*Math.cos(o*i.h);this.colorPickerSelector.style.left=s-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=p.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=p.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=p.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,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+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply", -this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(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);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/360,d=1/this.r,l=void 0;for(s=0;s<360;s++)for(r=0;r0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);e!==-1&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;/*! Hammer.JS - v2.0.7 - 2016-04-22 +"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={exports:{},id:o,loaded:!1};return t[o].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(87),e.DataSet=i(88),e.DataView=i(92),e.Queue=i(91),e.Timeline=i(93),e.Graph2d=i(129),e.timeline={Core:i(102),DateUtil:i(101),Range:i(98),stack:i(106),TimeStep:i(104),components:{items:{Item:i(108),BackgroundItem:i(112),BoxItem:i(110),PointItem:i(111),RangeItem:i(107)},BackgroundGroup:i(109),Component:i(100),CurrentTime:i(124),CustomTime:i(122),DataAxis:i(131),DataScale:i(132),GraphGroup:i(133),Group:i(105),ItemSet:i(103),Legend:i(137),LineGraph:i(130),TimeAxis:i(119)}},e.moment=i(82),e.Hammer=i(95),e.keycharm=i(121)},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),p=i(82),c=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){var i=f.exec(t);if(i)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return c.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&t.indexOf(s)==-1)if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&n===!0?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){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 m={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(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},e.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},e.isValidRGBA=function(t){t=t.replace(" ","");var e=/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t);return e},e.selectiveBridgeObject=function(t,i){if("object"==("undefined"==typeof i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=1e4,s=0,r=0,a=t.length-1;r<=a&&s0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?u=h+1:p=h-1,l++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?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 t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),p=i(47)("iterator"),c=!([].keys&&"next"in[].keys()),f="@@iterator",m="keys",g="values",v=function(){return this};t.exports=function(t,e,i,y,b,_,w){d(i,e,y);var x,D,S,k=function(t){if(!c&&t in O)return O[t];switch(t){case m:return function(){return new i(this,t)};case g:return function(){return new i(this,t)}}return function(){return new i(this,t)}},T=e+" Iterator",C=b==g,M=!1,O=t.prototype,E=O[p]||O[f]||b&&O[b],P=E||k(b),N=b?C?k("entries"):P:void 0,A="Array"==e?O.entries||E:E;if(A&&(S=u(A.call(new t)),S!==Object.prototype&&(l(S,T,!0),o||a(S,p)||r(S,p,v))),C&&E&&E.name!==g&&(M=!0,P=function(){return E.call(this)}),o&&!w||!c&&!M&&O[p]||r(O,p,P),h[e]=P,h[T]=v,b)if(x={values:C?P:k(g),keys:_?P:k(m),entries:N},w)for(D in x)D in O||s(O,D,x[D]);else n(n.P+n.F*(c||M),e,x);return x}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a="prototype",h=function(t,e,i){var d,l,u,p=t&h.F,c=t&h.G,f=t&h.S,m=t&h.P,g=t&h.B,v=t&h.W,y=c?n:n[e]||(n[e]={}),b=y[a],_=c?o:f?o[e]:(o[e]||{})[a];c&&(i=e);for(d in i)l=!p&&_&&void 0!==_[d],l&&d in y||(u=l?_[d]:i[d],y[d]=c&&"function"!=typeof _[d]?i[d]:g&&l?s(u,o):v&&_[d]==u?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e[a]=t[a],e}(u):m&&"function"==typeof u?s(Function.call,u):u,m&&((y.virtual||(y.virtual={}))[d]=u,t&h.R&&b&&!b[d]&&r(b,d,u)))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h="prototype",d=function(){var t,e=i(27)("iframe"),o=s.length,n="<",r=">";for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(n+"script"+r+"document.F=Object"+n+"/script"+r),t.close(),d=t.F;o--;)delete d[h][s[o]];return d()};t.exports=Object.create||function(t,e){var i;return null!==t?(a[h]=o(t),i=new a,a[h]=null,i[r]=t):i=d(),void 0===e?i:n(i,e)}},function(t,e,i){var o=i(21),n=i(22),s=i(35);t.exports=i(25)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(36),n=i(44);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){var o=i(31),n=i(9),s=i(37)(!1),r=i(41)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(9),n=i(38),s=i(40);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if(a=h[l++],a!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(39),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(39),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(42)("keys"),n=i(43);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(16),n="__core-js_shared__",s=o[n]||(o[n]={});t.exports=function(t){return s[t]||(s[t]={})}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){t.exports=i(16).document&&document.documentElement},function(t,e,i){var o=i(21).f,n=i(31),s=i(47)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(42)("wks"),n=i(43),s=i(16).Symbol,r="function"==typeof s,a=t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))};a.store=o},function(t,e,i){var o=i(31),n=i(49),s=i(41)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(12);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(51)(!0);i(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){var o=i(39),n=i(12);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):(s-55296<<10)+(r-56320)+65536)}}},function(t,e,i){var o=i(22),n=i(53);t.exports=i(17).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(11),n=i(47)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){t.exports={default:i(56),__esModule:!0}},function(t,e,i){i(57);var o=i(17).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(15);o(o.S,"Object",{create:i(33)})},function(t,e,i){t.exports={default:i(59),__esModule:!0}},function(t,e,i){i(60),t.exports=i(17).Object.keys},function(t,e,i){var o=i(49),n=i(35);i(61)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(15),n=i(17),s=i(26);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(63),s=o(n),r=i(66),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return"undefined"==typeof t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"==typeof t?"undefined":h(t)}},function(t,e,i){t.exports={default:i(64),__esModule:!0}},function(t,e,i){i(50),i(4),t.exports=i(65).f("iterator")},function(t,e,i){e.f=i(47)},function(t,e,i){t.exports={default:i(67),__esModule:!0}},function(t,e,i){i(68),i(79),i(80),i(81),t.exports=i(17).Symbol},function(t,e,i){var o=i(16),n=i(31),s=i(25),r=i(15),a=i(30),h=i(69).KEY,d=i(26),l=i(42),u=i(46),p=i(43),c=i(47),f=i(65),m=i(70),g=i(71),v=i(72),y=i(75),b=i(22),_=i(9),w=i(28),x=i(29),D=i(33),S=i(76),k=i(78),T=i(21),C=i(35),M=k.f,O=T.f,E=S.f,P=o.Symbol,N=o.JSON,A=N&&N.stringify,I="prototype",R=c("_hidden"),L=c("toPrimitive"),F={}.propertyIsEnumerable,H=l("symbol-registry"),Y=l("symbols"),j=l("op-symbols"),G=Object[I],z="function"==typeof P,W=o.QObject,U=!W||!W[I]||!W[I].findChild,V=s&&d(function(){return 7!=D(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=M(G,e);o&&delete G[e],O(t,e,i),o&&t!==G&&O(G,e,o)}:O,B=function(t){var e=Y[t]=D(P[I]);return e._k=t,e},q=z&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},X=function(t,e,i){return t===G&&X(j,e,i),b(t),e=w(e,!0),b(i),n(Y,e)?(i.enumerable?(n(t,R)&&t[R][e]&&(t[R][e]=!1),i=D(i,{enumerable:x(0,!1)})):(n(t,R)||O(t,R,x(1,{})),t[R][e]=!0),V(t,e,i)):O(t,e,i)},Z=function(t,e){b(t);for(var i,o=v(e=_(e)),n=0,s=o.length;s>n;)X(t,i=o[n++],e[i]);return t},K=function(t,e){return void 0===e?D(t):Z(D(t),e)},$=function(t){var e=F.call(this,t=w(t,!0));return!(this===G&&n(Y,t)&&!n(j,t))&&(!(e||!n(this,t)||!n(Y,t)||n(this,R)&&this[R][t])||e)},J=function(t,e){if(t=_(t),e=w(e,!0),t!==G||!n(Y,e)||n(j,e)){var i=M(t,e);return!i||!n(Y,e)||n(t,R)&&t[R][e]||(i.enumerable=!0),i}},Q=function(t){for(var e,i=E(_(t)),o=[],s=0;i.length>s;)n(Y,e=i[s++])||e==R||e==h||o.push(e);return o},tt=function(t){for(var e,i=t===G,o=E(i?j:_(t)),s=[],r=0;o.length>r;)!n(Y,e=o[r++])||i&&!n(G,e)||s.push(Y[e]);return s};z||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(i){this===G&&e.call(j,i),n(this,R)&&n(this[R],t)&&(this[R][t]=!1),V(this,t,x(1,i))};return s&&U&&V(G,t,{configurable:!0,set:e}),B(t)},a(P[I],"toString",function(){return this._k}),k.f=J,T.f=X,i(77).f=S.f=Q,i(74).f=$,i(73).f=tt,s&&!i(14)&&a(G,"propertyIsEnumerable",$,!0),f.f=function(t){return B(c(t))}),r(r.G+r.W+r.F*!z,{Symbol:P});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;et.length>it;)c(et[it++]);for(var et=C(c.store),it=0;et.length>it;)m(et[it++]);r(r.S+r.F*!z,"Symbol",{for:function(t){return n(H,t+="")?H[t]:H[t]=P(t)},keyFor:function(t){if(q(t))return g(H,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){U=!0},useSimple:function(){U=!1}}),r(r.S+r.F*!z,"Object",{create:K,defineProperty:X,defineProperties:Z,getOwnPropertyDescriptor:J,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),N&&r(r.S+r.F*(!z||d(function(){var t=P();return"[null]"!=A([t])||"{}"!=A({a:t})||"{}"!=A(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!q(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&y(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!q(e))return e}),o[1]=e,A.apply(N,o)}}}),P[I][L]||i(20)(P[I],L,P[I].valueOf),u(P,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(43)("meta"),n=i(23),s=i(31),r=i(21).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(26)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},p=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},c=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:p,onFreeze:c}},function(t,e,i){var o=i(16),n=i(17),s=i(14),r=i(65),a=i(21).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e,i){var o=i(35),n=i(9);t.exports=function(t,e){for(var i,s=n(t),r=o(s),a=r.length,h=0;a>h;)if(s[i=r[h++]]===e)return i}},function(t,e,i){var o=i(35),n=i(73),s=i(74);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){var o=i(11);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(9),n=i(77).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(36),n=i(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(74),n=i(29),s=i(9),r=i(28),a=i(31),h=i(24),d=Object.getOwnPropertyDescriptor;e.f=i(25)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(70)("asyncIterator")},function(t,e,i){i(70)("observable")},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(83)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(this,function(){function e(){return _o.apply(null,arguments)}function i(t){_o=t}function o(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function n(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){var e;for(e in t)return!1;return!0}function r(t){return void 0===t}function a(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function h(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function d(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return T(i)?i(e):i.replace(/%s/i,e)}function L(t,e){var i=t.toLowerCase();Ro[i]=Ro[i+"s"]=Ro[e]=t}function F(t){return"string"==typeof t?Ro[t]||Ro[t.toLowerCase()]:void 0}function H(t){var e,i,o={};for(i in t)l(t,i)&&(e=F(i),e&&(o[e]=t[i]));return o}function Y(t,e){Lo[t]=e}function j(t){var e=[];for(var i in t)e.push({unit:i,priority:Lo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function G(t,i){return function(o){return null!=o?(W(this,t,o),e.updateOffset(this,i),this):z(this,t)}}function z(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function W(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function U(t){return t=F(t),T(this[t])?this[t]():this}function V(t,e){if("object"==typeof t){t=H(t);for(var i=j(t),o=0;o=0;return(s?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function q(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(jo[t]=n),e&&(jo[e[0]]=function(){return B(n.apply(this,arguments),e[1],e[2])}),i&&(jo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Z(t){var e,i,o=t.match(Fo);for(e=0,i=o.length;e=0&&Ho.test(t);)t=t.replace(Ho,i),Ho.lastIndex=0,o-=1;return t}function J(t,e,i){sn[t]=T(e)?e:function(t,o){return t&&i?i:e}}function Q(t,e){return l(sn,t)?sn[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),a(e)&&(o=function(t,i){i[e]=w(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i,n=(7+_t(t,0,o).getUTCDay()-e)%7;return-n+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=gt(s)+d):d>gt(t)?(s=t+1,r=d-gt(t)):(s=t,r=d),{year:s,dayOfYear:r}}function Dt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(gt(t)-o+n)/7}function kt(t){return Dt(t,this._week.dow,this._week.doy).week}function Tt(){return this._week.dow}function Ct(){return this._week.doy}function Mt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ot(t){var e=Dt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Et(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Nt(t,e){return t?o(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone}function At(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function It(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Rt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=p([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null):"dddd"===e?(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):"ddd"===e?(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:null))):(n=gn.call(this._minWeekdaysParse,r),n!==-1?n:(n=gn.call(this._weekdaysParse,r),n!==-1?n:(n=gn.call(this._shortWeekdaysParse,r),n!==-1?n:null)))}function Lt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return Rt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=p([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Et(t,this.localeData()),this.add(t-e,"d")):e}function Ht(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Yt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Cn),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Gt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Mn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function zt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=On),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=p([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=et(a[e]),h[e]=et(h[e]),d[e]=et(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Ut(){return this.hours()%12||12}function Vt(){return this.hours()||24}function Bt(t,e){q(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function $t(t){for(var e,i,o,n,s=0;s0;){if(o=Jt(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&x(n,i,!0)>=e-1)break;e--}s++}return null}function Jt(e){var i=null;if(!In[e]&&"undefined"!=typeof t&&t&&t.exports)try{i=En._abbr,!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return In[e]}function Qt(t,e){var i;return t&&(i=r(e)?ie(t):te(t,e),i&&(En=i)),En._abbr}function te(t,e){if(null!==e){var i=An;if(e.abbr=t,null!=In[t])k("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=In[t]._config;else if(null!=e.parentLocale){if(null==In[e.parentLocale])return Rn[e.parentLocale]||(Rn[e.parentLocale]=[]),Rn[e.parentLocale].push({name:t,config:e}),null;i=In[e.parentLocale]._config}return In[t]=new O(M(i,e)),Rn[t]&&Rn[t].forEach(function(t){te(t.name,t.config)}),Qt(t),In[t]}return delete In[t],null}function ee(t,e){if(null!=e){var i,o=An;null!=In[t]&&(o=In[t]._config),e=M(o,e),i=new O(e),i.parentLocale=In[t],In[t]=i,Qt(t)}else null!=In[t]&&(null!=In[t].parentLocale?In[t]=In[t].parentLocale:null!=In[t]&&delete In[t]);return In[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return En;if(!o(t)){if(e=Jt(t))return e;t=[t]}return $t(t)}function oe(){return Mo(In)}function ne(t){var e,i=t._a;return i&&f(t).overflow===-2&&(e=i[hn]<0||i[hn]>11?hn:i[dn]<1||i[dn]>st(i[an],i[hn])?dn:i[ln]<0||i[ln]>24||24===i[ln]&&(0!==i[un]||0!==i[pn]||0!==i[cn])?ln:i[un]<0||i[un]>59?un:i[pn]<0||i[pn]>59?pn:i[cn]<0||i[cn]>999?cn:-1,f(t)._overflowDayOfYear&&(edn)&&(e=dn),f(t)._overflowWeeks&&e===-1&&(e=fn),f(t)._overflowWeekday&&e===-1&&(e=mn),f(t).overflow=e),t}function se(t){var e,i,o,n,s,r,a=t._i,h=Ln.exec(a)||Fn.exec(a);if(h){for(f(t).iso=!0,e=0,i=Yn.length;e10?"YYYY ":"YY "),s="HH:mm"+(i[4]?":ss":""),i[1]){var u=new Date(i[2]),p=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][u.getDay()];if(i[1].substr(0,3)!==p)return f(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(i[5].length){case 2:0===h?a=" +0000":(h=l.indexOf(i[5][1].toUpperCase())-12,a=(h<0?" -":" +")+(""+h).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=d[i[5]];break;default:a=d[" GMT"]}i[5]=a,t._i=i.splice(1).join(""),r=" ZZ",t._f=o+n+s+r,pe(t),f(t).rfc2822=!0}else t._isValid=!1}function ae(t){var i=Gn.exec(t._i);return null!==i?void(t._d=new Date(+i[1])):(se(t),void(t._isValid===!1&&(delete t._isValid,re(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))))}function he(t,e,i){return null!=t?t:null!=e?e:i}function de(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function le(t){var e,i,o,n,s=[];if(!t._d){for(o=de(t),t._w&&null==t._a[dn]&&null==t._a[hn]&&ue(t),null!=t._dayOfYear&&(n=he(t._a[an],o[an]),(t._dayOfYear>gt(n)||0===t._dayOfYear)&&(f(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[hn]=i.getUTCMonth(),t._a[dn]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ln]&&0===t._a[un]&&0===t._a[pn]&&0===t._a[cn]&&(t._nextDay=!0,t._a[ln]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ln]=24)}}function ue(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=he(e.GG,t._a[an],Dt(_e(),1,4).year),o=he(e.W,1),n=he(e.E,1),(n<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=Dt(_e(),s,r);i=he(e.gg,t._a[an],d.year),o=he(e.w,d.week),null!=e.d?(n=e.d,(n<0||n>6)&&(h=!0)):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?f(t)._overflowWeeks=!0:null!=h?f(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[an]=a.year,t._dayOfYear=a.dayOfYear)}function pe(t){if(t._f===e.ISO_8601)return void se(t);if(t._f===e.RFC_2822)return void re(t);t._a=[],f(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=$(t._f,t._locale).match(Fo)||[],i=0;i0&&f(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),jo[s]?(o?f(t).empty=!1:f(t).unusedTokens.push(s),nt(s,o,t)):t._strict&&!o&&f(t).unusedTokens.push(s);f(t).charsLeftOver=h-d,a.length>0&&f(t).unusedInput.push(a),t._a[ln]<=12&&f(t).bigHour===!0&&t._a[ln]>0&&(f(t).bigHour=void 0),f(t).parsedDateParts=t._a.slice(0),f(t).meridiem=t._meridiem,t._a[ln]=ce(t._locale,t._a[ln],t._meridiem),le(t),ne(t)}function ce(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function fe(t){var e,i,o,n,s;if(0===t._f.length)return f(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ge(){if(!r(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=ve(t),t._a){var e=t._isUTC?p(t._a):_e(t._a);this._isDSTShifted=this.isValid()&&x(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function ze(){return!!this.isValid()&&!this._isUTC}function We(){return!!this.isValid()&&this._isUTC}function Ue(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ve(t,e){var i,o,n,s=t,r=null;return Me(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:a(t)?(s={},e?s[e]=t:s.milliseconds=t):(r=Xn.exec(t))?(i="-"===r[1]?-1:1,s={y:0,d:w(r[dn])*i,h:w(r[ln])*i,m:w(r[un])*i,s:w(r[pn])*i,ms:w(Oe(1e3*r[cn]))*i}):(r=Zn.exec(t))?(i="-"===r[1]?-1:1,s={y:Be(r[2],i),M:Be(r[3],i),w:Be(r[4],i),d:Be(r[5],i),h:Be(r[6],i),m:Be(r[7],i),s:Be(r[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Xe(_e(s.from),_e(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ce(s),Me(t)&&l(t,"_locale")&&(o._locale=t._locale),o}function Be(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function qe(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 Xe(t,e){var i;return t.isValid()&&e.isValid()?(e=Ne(e,t),t.isBefore(e)?i=qe(t,e):(i=qe(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function Ze(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(k(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ve(i,o),Ke(this,n,t),this}}function Ke(t,i,o,n){var s=i._milliseconds,r=Oe(i._days),a=Oe(i._months);t.isValid()&&(n=null==n||n,s&&t._d.setTime(t._d.valueOf()+s*o),r&&W(t,"Date",z(t,"Date")+r*o),a&<(t,z(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function $e(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function Je(t,i){var o=t||_e(),n=Ne(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(T(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,_e(o)))}function Qe(){return new y(this)}function ti(t,e){var i=b(t)?t:_e(t);return!(!this.isValid()||!i.isValid())&&(e=F(r(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?K(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):T(Date.prototype.toISOString)?this.toDate().toISOString():K(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function li(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",s=e+'[")]';return this.format(i+o+n+s)}function ui(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=K(this,t);return this.localeData().postformat(i)}function pi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ve({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ci(t){return this.from(_e(),t)}function fi(t,e){return this.isValid()&&(b(t)&&t.isValid()||_e(t).isValid())?Ve({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function mi(t){return this.to(_e(),t)}function gi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function vi(){return this._locale}function yi(t){switch(t=F(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function bi(t){return t=F(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function _i(){return this._d.valueOf()-6e4*(this._offset||0)}function wi(){return Math.floor(this.valueOf()/1e3)}function xi(){return new Date(this.valueOf())}function Di(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Si(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function ki(){return this.isValid()?this.toISOString():null}function Ti(){return m(this)}function Ci(){return u({},f(this))}function Mi(){return f(this).overflow}function Oi(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ei(t,e){q(0,[t,t.length],0,e)}function Pi(t){return Ri.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ni(t){return Ri.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Ai(){return St(this.year(),1,4)}function Ii(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function Ri(t,e,i,o,n){var s;return null==t?Dt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Li.call(this,t,e,i,o,n))}function Li(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Fi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Hi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Yi(t,e){e[cn]=w(1e3*("0."+t))}function ji(){return this._isUTC?"UTC":""}function Gi(){return this._isUTC?"Coordinated Universal Time":""}function zi(t){return _e(1e3*t)}function Wi(){return _e.apply(null,arguments).parseZone()}function Ui(t){return t}function Vi(t,e,i,o){var n=ie(),s=p().set(o,e);return n[i](s,t)}function Bi(t,e,i){if(a(t)&&(e=t,t=void 0),t=t||"",null!=e)return Vi(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Vi(t,o,i,"month");return n; +}function qi(t,e,i,o){"boolean"==typeof t?(a(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,a(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Vi(e,(i+s)%7,o,"day");var r,h=[];for(r=0;r<7;r++)h[r]=Vi(e,(r+s)%7,o,"day");return h}function Xi(t,e){return Bi(t,e,"months")}function Zi(t,e){return Bi(t,e,"monthsShort")}function Ki(t,e,i){return qi(t,e,i,"weekdays")}function $i(t,e,i){return qi(t,e,i,"weekdaysShort")}function Ji(t,e,i){return qi(t,e,i,"weekdaysMin")}function Qi(){var t=this._data;return this._milliseconds=rs(this._milliseconds),this._days=rs(this._days),this._months=rs(this._months),t.milliseconds=rs(t.milliseconds),t.seconds=rs(t.seconds),t.minutes=rs(t.minutes),t.hours=rs(t.hours),t.months=rs(t.months),t.years=rs(t.years),this}function to(t,e,i,o){var n=Ve(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function eo(t,e){return to(this,t,e,1)}function io(t,e){return to(this,t,e,-1)}function oo(t){return t<0?Math.floor(t):Math.ceil(t)}function no(){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||s<=0&&r<=0&&a<=0||(s+=864e5*oo(ro(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=_(s/1e3),h.seconds=t%60,e=_(t/60),h.minutes=e%60,i=_(e/60),h.hours=i%24,r+=_(i/24),n=_(so(r)),a+=n,r-=oo(ro(n)),o=_(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function so(t){return 4800*t/146097}function ro(t){return 146097*t/4800}function ao(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if(t=F(t),"month"===t||"year"===t)return e=this._days+o/864e5,i=this._months+so(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ro(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 ho(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN}function lo(t){return function(){return this.as(t)}}function uo(t){return t=F(t),this.isValid()?this[t+"s"]():NaN}function po(t){return function(){return this.isValid()?this._data[t]:NaN}}function co(){return _(this.days()/7)}function fo(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function mo(t,e,i){var o=Ve(t).abs(),n=xs(o.as("s")),s=xs(o.as("m")),r=xs(o.as("h")),a=xs(o.as("d")),h=xs(o.as("M")),d=xs(o.as("y")),l=n<=Ds.ss&&["s",n]||n0,l[4]=i,fo.apply(null,l)}function go(t){return void 0===t?xs:"function"==typeof t&&(xs=t,!0)}function vo(t,e){return void 0!==Ds[t]&&(void 0===e?Ds[t]:(Ds[t]=e,"s"===t&&(Ds.ss=e-1),!0))}function yo(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=mo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function bo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Ss(this._milliseconds)/1e3,n=Ss(this._days),s=Ss(this._months);t=_(o/60),e=_(t/60),o%=60,t%=60,i=_(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o,p=this.asSeconds();return p?(p<0?"-":"")+"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 _o,wo;wo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var xn=G("FullYear",!0);q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),Y("week",5),Y("isoWeek",5),J("w",Bo),J("ww",Bo,zo),J("W",Bo),J("WW",Bo,zo),ot(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=w(t)});var Dn={dow:0,doy:6};q("d",0,"do","day"),q("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),q("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),q("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),J("d",Bo),J("e",Bo),J("E",Bo),J("dd",function(t,e){return e.weekdaysMinRegex(t)}),J("ddd",function(t,e){return e.weekdaysShortRegex(t)}),J("dddd",function(t,e){return e.weekdaysRegex(t)}),ot(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:f(i).invalidWeekday=t}),ot(["d","e","E"],function(t,e,i,o){e[o]=w(t)});var Sn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),kn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Tn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cn=nn,Mn=nn,On=nn;q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Ut),q("k",["kk",2],0,Vt),q("hmm",0,0,function(){return""+Ut.apply(this)+B(this.minutes(),2)}),q("hmmss",0,0,function(){return""+Ut.apply(this)+B(this.minutes(),2)+B(this.seconds(),2)}),q("Hmm",0,0,function(){return""+this.hours()+B(this.minutes(),2)}),q("Hmmss",0,0,function(){return""+this.hours()+B(this.minutes(),2)+B(this.seconds(),2)}),Bt("a",!0),Bt("A",!1),L("hour","h"),Y("hour",13),J("a",qt),J("A",qt),J("H",Bo),J("h",Bo),J("k",Bo),J("HH",Bo,zo),J("hh",Bo,zo),J("kk",Bo,zo),J("hmm",qo),J("hmmss",Xo),J("Hmm",qo),J("Hmmss",Xo),it(["H","HH"],ln),it(["k","kk"],function(t,e,i){var o=w(t);e[ln]=24===o?0:o}),it(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),it(["h","hh"],function(t,e,i){e[ln]=w(t),f(i).bigHour=!0}),it("hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o)),f(i).bigHour=!0}),it("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[pn]=w(t.substr(n)),f(i).bigHour=!0}),it("Hmm",function(t,e,i){var o=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o))}),it("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[ln]=w(t.substr(0,o)),e[un]=w(t.substr(o,2)),e[pn]=w(t.substr(n))});var En,Pn=/[ap]\.?m?\.?/i,Nn=G("Hours",!0),An={calendar:Oo,longDateFormat:Eo,invalidDate:Po,ordinal:No,dayOfMonthOrdinalParse:Ao,relativeTime:Io,months:yn,monthsShort:bn,week:Dn,weekdays:Sn,weekdaysMin:Tn,weekdaysShort:kn,meridiemParse:Pn},In={},Rn={},Ln=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Hn=/Z|[+-]\d\d(?::?\d\d)?/,Yn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],jn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Gn=/^\/?Date\((\-?\d+)/i,zn=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=S("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Wn=S("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=_e.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:g()}),Vn=function(){return Date.now?Date.now():+new Date},Bn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ee("Z",":"),Ee("ZZ",""),J("Z",en),J("ZZ",en),it(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Pe(en,t)});var qn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Xn=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Zn=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ve.fn=Ce.prototype,Ve.invalid=Te;var Kn=Ze(1,"add"),$n=Ze(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Jn=S("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)});q(0,["gg",2],0,function(){return this.weekYear()%100}),q(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ei("gggg","weekYear"),Ei("ggggg","weekYear"),Ei("GGGG","isoWeekYear"),Ei("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),J("G",Qo),J("g",Qo),J("GG",Bo,zo),J("gg",Bo,zo),J("GGGG",Ko,Uo),J("gggg",Ko,Uo),J("GGGGG",$o,Vo),J("ggggg",$o,Vo),ot(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=w(t)}),ot(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),q("Q",0,"Qo","quarter"),L("quarter","Q"),Y("quarter",7),J("Q",Go),it("Q",function(t,e){e[hn]=3*(w(t)-1)}),q("D",["DD",2],"Do","date"),L("date","D"),Y("date",9),J("D",Bo),J("DD",Bo,zo),J("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),it(["D","DD"],dn),it("Do",function(t,e){e[dn]=w(t.match(Bo)[0],10)});var Qn=G("Date",!0);q("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),Y("dayOfYear",4),J("DDD",Zo),J("DDDD",Wo),it(["DDD","DDDD"],function(t,e,i){i._dayOfYear=w(t)}),q("m",["mm",2],0,"minute"),L("minute","m"),Y("minute",14),J("m",Bo),J("mm",Bo,zo),it(["m","mm"],un);var ts=G("Minutes",!1);q("s",["ss",2],0,"second"),L("second","s"),Y("second",15),J("s",Bo),J("ss",Bo,zo),it(["s","ss"],pn);var es=G("Seconds",!1);q("S",0,0,function(){return~~(this.millisecond()/100)}),q(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),q(0,["SSS",3],0,"millisecond"),q(0,["SSSS",4],0,function(){return 10*this.millisecond()}),q(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),q(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),q(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),q(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),q(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),Y("millisecond",16),J("S",Zo,Go),J("SS",Zo,zo),J("SSS",Zo,Wo);var is;for(is="SSSS";is.length<=9;is+="S")J(is,Jo);for(is="S";is.length<=9;is+="S")it(is,Yi);var os=G("Milliseconds",!1);q("z",0,0,"zoneAbbr"),q("zz",0,0,"zoneName");var ns=y.prototype;ns.add=Kn,ns.calendar=Je,ns.clone=Qe,ns.diff=ri,ns.endOf=bi,ns.format=ui,ns.from=pi,ns.fromNow=ci,ns.to=fi,ns.toNow=mi,ns.get=U,ns.invalidAt=Mi,ns.isAfter=ti,ns.isBefore=ei,ns.isBetween=ii,ns.isSame=oi,ns.isSameOrAfter=ni,ns.isSameOrBefore=si,ns.isValid=Ti,ns.lang=Jn,ns.locale=gi,ns.localeData=vi,ns.max=Un,ns.min=Wn,ns.parsingFlags=Ci,ns.set=V,ns.startOf=yi,ns.subtract=$n,ns.toArray=Di,ns.toObject=Si,ns.toDate=xi,ns.toISOString=di,ns.inspect=li,ns.toJSON=ki,ns.toString=hi,ns.unix=wi,ns.valueOf=_i,ns.creationData=Oi,ns.year=xn,ns.isLeapYear=yt,ns.weekYear=Pi,ns.isoWeekYear=Ni,ns.quarter=ns.quarters=Fi,ns.month=ut,ns.daysInMonth=pt,ns.week=ns.weeks=Mt,ns.isoWeek=ns.isoWeeks=Ot,ns.weeksInYear=Ii,ns.isoWeeksInYear=Ai,ns.date=Qn,ns.day=ns.days=Ft,ns.weekday=Ht,ns.isoWeekday=Yt,ns.dayOfYear=Hi,ns.hour=ns.hours=Nn,ns.minute=ns.minutes=ts,ns.second=ns.seconds=es,ns.millisecond=ns.milliseconds=os,ns.utcOffset=Ie,ns.utc=Le,ns.local=Fe,ns.parseZone=He,ns.hasAlignedHourOffset=Ye,ns.isDST=je,ns.isLocal=ze,ns.isUtcOffset=We,ns.isUtc=Ue,ns.isUTC=Ue,ns.zoneAbbr=ji,ns.zoneName=Gi,ns.dates=S("dates accessor is deprecated. Use date instead.",Qn),ns.months=S("months accessor is deprecated. Use month instead",ut),ns.years=S("years accessor is deprecated. Use year instead",xn),ns.zone=S("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Re),ns.isDSTShifted=S("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ge);var ss=O.prototype;ss.calendar=E,ss.longDateFormat=P,ss.invalidDate=N,ss.ordinal=A,ss.preparse=Ui,ss.postformat=Ui,ss.relativeTime=I,ss.pastFuture=R,ss.set=C,ss.months=rt,ss.monthsShort=at,ss.monthsParse=dt,ss.monthsRegex=ft,ss.monthsShortRegex=ct,ss.week=kt,ss.firstDayOfYear=Ct,ss.firstDayOfWeek=Tt,ss.weekdays=Nt,ss.weekdaysMin=It,ss.weekdaysShort=At,ss.weekdaysParse=Lt,ss.weekdaysRegex=jt,ss.weekdaysShortRegex=Gt,ss.weekdaysMinRegex=zt,ss.isPM=Xt,ss.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),e.lang=S("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=S("moment.langData is deprecated. Use moment.localeData instead.",ie);var rs=Math.abs,as=lo("ms"),hs=lo("s"),ds=lo("m"),ls=lo("h"),us=lo("d"),ps=lo("w"),cs=lo("M"),fs=lo("y"),ms=po("milliseconds"),gs=po("seconds"),vs=po("minutes"),ys=po("hours"),bs=po("days"),_s=po("months"),ws=po("years"),xs=Math.round,Ds={ss:44,s:45,m:45,h:22,d:26,M:11},Ss=Math.abs,ks=Ce.prototype;return ks.isValid=ke,ks.abs=Qi,ks.add=eo,ks.subtract=io,ks.as=ao,ks.asMilliseconds=as,ks.asSeconds=hs,ks.asMinutes=ds,ks.asHours=ls,ks.asDays=us,ks.asWeeks=ps,ks.asMonths=cs,ks.asYears=fs,ks.valueOf=ho,ks._bubble=no,ks.get=uo,ks.milliseconds=ms,ks.seconds=gs,ks.minutes=vs,ks.hours=ys,ks.days=bs,ks.weeks=co,ks.months=_s,ks.years=ws,ks.humanize=yo,ks.toISOString=bo,ks.toString=bo,ks.toJSON=bo,ks.locale=gi,ks.localeData=vi,ks.toIsoString=S("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",bo),ks.lang=Jn,q("X",0,0,"unix"),q("x",0,0,"valueOf"),J("x",Qo),J("X",on),it("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,i){i._d=new Date(w(t))}),e.version="2.18.1",i(_e),e.fn=ns,e.min=xe,e.max=De,e.now=Vn,e.utc=p,e.unix=zi,e.months=Xi,e.isDate=h,e.locale=Qt,e.invalid=g,e.duration=Ve,e.isMoment=b,e.weekdays=Ki,e.parseZone=Wi,e.localeData=ie,e.isDuration=Me,e.monthsShort=Zi,e.weekdaysMin=Ji,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=$i,e.normalizeUnits=F,e.relativeTimeRounding=go,e.relativeTimeThreshold=vo,e.calendarFormat=$e,e.prototype=ns,e})}).call(e,i(84)(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=85},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){n<16&&(e[o+n++]=u[t])});n<16;)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:v+1,d=a-g+(h-v)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>g)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,v=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 p=t.node||f,c=0;c<6;c++)s[n+c]=p[c];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;a<16;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;e<16;e++)0===(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},p=0;p<256;p++)l[p]=(p+256).toString(16).substr(1),u[l[p]]=p;var c=r(),f=[1|c[0],c[1],c[2],c[3],c[4],c[5]],m=16383&(c[6]<<8|c[7]),g=0,v=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,function(){return this}())},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(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){return t&&t.__esModule?t:{default:t}}function n(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=(0,l.default)(this._options.type),o=0,n=i.length;on?1:or)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;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){return t&&t.__esModule?t:{default:t}}function n(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 s=i(58),r=o(s),a=i(1),h=i(88);n.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;os)&&(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;this.range.setRange(r-a/2,r+a/2,{animation:h})}}},o.prototype.fit=function(t){var e,i=!t||void 0===t.animation||t.animation,o=this.itemsData&&this.itemsData.getDataSet();1===o.length&&void 0===o.get()[0].end?(e=this.getDataRange(),this.moveTo(e.min.valueOf(),{animation:i})):(e=this.getItemRange(),this.range.setRange(e.min,e.max,{animation:i}))},o.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,n=null;if(null!=e&&null!=i){var r=function(t){return s.convert(t.data.start,"Date").valueOf()},a=function(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return s.convert(e,"Date").valueOf()},h=i-e;h<=0&&(h=10);var d=h/this.props.center.width;if(s.forEach(this.itemSet.items,function(t){t.groupShowing&&(t.show(),t.repositionX());var s=r(t),h=a(t);if(this.options.rtl)var l=s-(t.getWidthRight()+10)*d,u=h+(t.getWidthLeft()+10)*d;else var l=s-(t.getWidthLeft()+10)*d,u=h+(t.getWidthRight()+10)*d;li&&(i=u,n=t)}.bind(this)),o&&n){var l=o.getWidthLeft()+10,u=n.getWidthRight()+10,p=this.props.center.width-l-u;p>0&&(this.options.rtl?(e=r(o)-u*h/p,i=a(n)+l*h/p):(e=r(o)-l*h/p,i=a(n)+u*h/p))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):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||oe)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY;if(this.options.rtl)var o=s.getAbsoluteRight(this.dom.centerContainer)-e;else var o=e-s.getAbsoluteLeft(this.dom.centerContainer);var n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this.itemSet.itemFromTarget(t),a=this.itemSet.groupFromTarget(t),h=p.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),c=this._toTime(o),f=d?d(c,l,u):c,m=s.getTarget(t),g=null;return null!=r?g="item":null!=h?g="custom-time":s.hasParent(m,this.timeAxis.dom.foreground)?g="axis":this.timeAxis2&&s.hasParent(m,this.timeAxis2.dom.foreground)?g="axis":s.hasParent(m,this.itemSet.dom.labelSet)?g="group-label":s.hasParent(m,this.currentTime.bar)?g="current-time":s.hasParent(m,this.dom.center)&&(g="background"),{event:t,item:r?r.id:null,group:a?a.groupId:null,what:g,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:c,snappedTime:f}},o.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=o},function(t,e){function i(t){if(t)return o(t)}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;n0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);e!==-1&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;/*! Hammer.JS - v2.0.7 - 2016-04-22 * http://hammerjs.github.io/ * * Copyright (c) 2016 Jorik Tangelder; * Licensed under the MIT license */ -!function(n,s,r,a){function h(t,e,i){return setTimeout(c(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function p(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&mt(o,i)}function c(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==yt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function g(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function v(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=A(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=I(o);e.timeStamp=wt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=H(a,h),e.distance=F(a,h),P(i,e),e.offsetDirection=L(e.deltaX,e.deltaY);var d=R(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=_t(d.x)>_t(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?Y(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,N(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==It&&s.eventType!==Lt||(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!=Ft&&(h>At||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=R(h,d,l);o=u.x,n=u.y,i=_t(u.x)>_t(u.y)?u.x:u.y,s=L(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 A(t){for(var e=[],i=0;i=_t(e)?t<0?Yt:jt:e<0?Gt:zt}function F(t,e,i){i||(i=Ut);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function H(t,e,i){i||(i=Ut);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function Y(t,e){return H(e[1],e[0],qt)+H(t[1],t[0],qt)}function j(t,e){return F(e[0],e[1],qt)/F(t[0],t[1],qt)}function G(){this.evEl=Zt,this.evWin=Kt,this.pressed=!1,C.apply(this,arguments)}function z(){this.evEl=Qt,this.evWin=te,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function W(){this.evTarget=ie,this.evWin=oe,this.started=!1,C.apply(this,arguments)}function B(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Lt|Ft)&&(i=D(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=se,this.targetIds={},C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(It|Rt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===It)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,re)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<_e&&e(i.options.event+et(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=_e&&e(i.options.event+et(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=De)},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return nt.prototype.attrTest.call(this,t)&&(this.state&ye||!(this.state&ye)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=it(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),p(rt,nt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ce]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ye)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),p(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ue]},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&(Lt|Ft)&&!n)this.reset();else if(t.eventType&It)this.reset(),this._timer=h(function(){this.state=we,this.tryEmit()},e.time,this);else if(t.eventType&Lt)return we;return De},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===we&&(t&&t.eventType&Lt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=wt(),this.manager.emit(this.options.event,this._input)))}}),p(ht,nt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ce]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ye)}}),p(dt,nt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Wt|Bt,pointers:1},getTouchAction:function(){return st.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Wt|Bt)?e=t.overallVelocity:i&Wt?e=t.overallVelocityX:i&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&_t(e)>this.options.velocity&&t.eventType&Lt},emit:function(t){var e=it(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),p(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[pe]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distances.distance?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""),v):n.distance<=r?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),v):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print((0,d.default)(i))+t.printLocation(o,e),v),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&n===!0){var p=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>p.distance&&(r=p.closestMatch,a=p.path,s=p.distance,d=p.indexMatch)}else l.toLowerCase().indexOf(h)!==-1&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){o!==!0&&(o=!1);var s=void 0!=t?p.convert(t,"Date").valueOf():null,r=void 0!=e?p.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var h=this,l=this.start,c=this.end,f="object"===("undefined"==typeof i?"undefined":(0,u.default)(i))&&"duration"in i?i.duration:500,g="object"===("undefined"==typeof i?"undefined":(0,u.default)(i))&&"easingFunction"in i?i.easingFunction:"easeInOutQuad",v=p.easingFunctions[g];if(!v)throw new Error("Unknown easing function "+(0,d.default)(g)+". Choose from: "+(0,a.default)(p.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1,_=function t(){if(!h.props.touch.dragging){var e=(new Date).valueOf(),i=e-y,a=v(i/f),d=i>f,u=d||null===s?s:l+(s-l)*a,p=d||null===r?r:c+(r-c)*a;w=h._applyRange(u,p),m.updateHiddenDates(h.options.moment,h.body,h.options.hiddenDates),b=b||w;var g={start:new Date(h.start),end:new Date(h.end),byUser:o,event:n};w&&h.body.emitter.emit("rangechange",g),d?b&&h.body.emitter.emit("rangechanged",g):h.animationTimer=setTimeout(t,20)}};return _()}var w=this._applyRange(s,r);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),w){var x={start:new Date(this.start),end:new Date(this.end),byUser:o,event:n};this.body.emitter.emit("rangechange",x),this.body.emitter.emit("rangechanged",x)}},n.prototype.getMillisecondsPerPixel=function(){return(this.end-this.start)/this.body.dom.center.clientWidth},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?p.convert(t,"Date").valueOf():this.start,n=null!=e?p.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?p.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?p.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(ns&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o=this.start-h&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);d<0&&(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},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.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}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),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"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY; -i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start,n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);o-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;if(this.options.rtl)var a=i/r*o;else var a=-i/r*o;var h=this.props.touch.start+a,d=this.props.touch.end+a,l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),u=m.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(l!=h||u!=d)return this.deltaDifference+=i,this.props.touch.start=l,this.props.touch.end=u,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d);var p=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:p,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.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,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable){if(this.options.horizontalScroll){t.preventDefault();var i=e*(this.end-this.start)/20,o=this.start-i,n=this.end-i;this.setRange(o,n,!1,!0,t)}}else if(this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var s;s=e<0?1-e/5:1/(1+e/5);var r;if(this.rolling)r=(this.start+this.end)/2;else{var a=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);r=this._pointerToDate(a)}this.zoom(s,r,e,t),t.preventDefault()}},n.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},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d),this.setRange(r,a,!1,!0,t),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e=t.center?t.center.x:t.clientX;if(this.options.rtl)var i=e-p.getAbsoluteLeft(this.body.dom.centerContainer);else var i=p.getAbsoluteRight(this.body.dom.centerContainer)-e;var o=this.body.util.toTime(i);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(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},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:p.getAbsoluteRight(e)-t.x,y:t.y-p.getAbsoluteTop(e)}:{x:t.x-p.getAbsoluteLeft(e),y:t.y-p.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l),this.setRange(a,h,!1,!0,o),this.startToFront=!1,this.endToFront=!0},n.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},n.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,!1,!0,null)},t.exports=n},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(1);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.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=o},function(t,e){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n=4*a){var p=0,c=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-p,"days"),c.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"),c.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=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(p,"months"),c.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(p,"years"),c.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d=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&&nt.range.end){var h={start:t.range.start,end:i};i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale}i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a),d=new Date(h+a+t.range.start);return d},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n=e&&r=e&&r<=i&&(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?o<0?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&&t-1||h))return t.dataTransfer.dropEffect="move",h=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e.content)return}catch(t){return!1}return h=!1,t.center={x:t.clientX,y:t.clientY},s.itemSet._onAddItem(t),!1}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.rollingModeBtn=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.rollingModeBtn.className="vis-rolling-mode-btn",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.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),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.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){this.initialDrawDone===!0&&this._redraw()}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=p.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={};var a=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];a.forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var h=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(p.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),this.options.orientation={item:void 0,axis:void 0},"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(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 c(this.body);i.setOptions=function(t){var e=t?p.extend({},t):{};e.orientation="top",c.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);o!==-1&&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&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(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=p.deepExtend({},this.options);this.components.forEach(function(t){p.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.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},n.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 "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.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 "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?p.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 "+(0,r.default)(e)+" already exists");var n=new g(this.body,p.extend({},this.options,{time:i,id:e}));return this.customTimes.push(n),this.components.push(n),this._redraw(),e},n.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 "+(0,r.default)(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))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.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;this.range.setRange(o,n,s)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i){var o;if(1==arguments.length){var n=arguments[0];o=void 0===n.animation||n.animation,this.range.setRange(n.start,n.end,o)}else o=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,o)},n.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,o=p.convert(t,"Date").valueOf(),n=o-i/2,s=o+i/2,r=!e||void 0===e.animation||e.animation;this.range.setRange(n,s,r)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e){if(!(!t||t<0||t>1)){var i=this.getWindow(),o=i.start.valueOf(),n=i.end.valueOf(),s=n-o,r=s/(1+t),a=(s-r)/2,h=o+a,d=n-a;this.setWindow(h,d,e)}},n.prototype.zoomOut=function(t,e){if(!(!t||t<0||t>1)){var i=this.getWindow(),o=i.start.valueOf(),n=i.end.valueOf(),s=n-o,r=o-s*t/2,a=n+s*t/2;this.setWindow(r,a,e)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(p.addClassName(o.root,"vis-top"),p.removeClassName(o.root,"vis-bottom")):(p.removeClassName(o.root,"vis-top"),p.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=p.option.asSize(e.maxHeight,""),o.root.style.minHeight=p.option.asSize(e.minHeight,""),o.root.style.width=p.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,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=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&&(i.borderRootWidth=i.borderRootHeight),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 n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=p.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=p.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.heighti.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});var c=5;if(t){if(this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTope&&o.push(h.id):h.lefti&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;in)return}}if(i&&i!=this.groupTouchParams.group){var h=e.get(i.groupId),d=e.get(this.groupTouchParams.group.groupId);d&&h&&(this.options.groupOrderSwap(d,h,e),e.update(d),e.update(h));var l=e.getIds({order:this.options.groupOrder});if(!p.equalArray(l,this.groupTouchParams.originalOrder))for(var u=this.groupTouchParams.originalOrder,c=this.groupTouchParams.group.groupId,m=Math.min(u.length,l.length),g=0,v=0,y=0;g=m)break;if(l[g+v]!=c)if(u[g+y]!=c){var b=l.indexOf(u[g+y]),_=e.get(l[g+v]),w=e.get(u[g+y]);this.options.groupOrderSwap(_,w,e),e.update(_),e.update(w);var x=l[g+v];l[g+v]=u[g+y],l[b]=x,g++}else y=1;else v=1}}}},n.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=p.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(!p.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),l=o.get(s[a]);e.options.groupOrderSwap(d,l,o),o.update(d),o.update(l);var u=n[a];n[a]=s[a],n[h]=u,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.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})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){var i=this.itemFromRelatedTarget(t);if(e!==i){var o=e.getTitle();if(o){null==this.popup&&(this.popup=new l.default(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(o);var n=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-p.getAbsoluteLeft(n)+n.offsetLeft,t.clientY-p.getAbsoluteTop(n)+n.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){var i=this.itemFromRelatedTarget(t);e!==i&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){var e=this.itemFromTarget(t);if(e&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var i=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-p.getAbsoluteLeft(i)+i.offsetLeft,t.clientY-p.getAbsoluteTop(i)+i.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.options.snap||null,o=this.itemFromTarget(t);if(!o){if(this.options.rtl)var n=p.getAbsoluteRight(this.dom.frame),s=n-t.center.x;else var n=p.getAbsoluteLeft(this.dom.frame),s=t.center.x-n;var r=this.body.util.toTime(s),a=this.body.util.getScale(),h=this.body.util.getStep(),d={start:i?i(r,a,h):r,content:"new item"};if("drop"==t.type){var l=JSON.parse(t.dataTransfer.getData("text"));if(d.content=l.content,d.type=l.type||"box",d[this.itemsData._fieldId]=l.id||p.randomUUID(),"range"==l.type||l.end&&l.start)if(l.end)d.end=l.end,d.start=l.start;else{var u=this.body.util.toTime(s+this.props.width/5);d.end=i?i(u,a,h):u}}else if(d[this.itemsData._fieldId]=p.randomUUID(),"range"===this.options.type){var u=this.body.util.toTime(s+this.props.width/5);d.end=i?i(u,a,h):u}var c=this.groupFromTarget(t);c&&(d.group=c.groupId),d=this._cloneItemData(d),this.options.onAdd(d,function(i){i&&(e.itemsData.getDataSet().add(i),"drop"==t.type&&e.setSelection([i.id]))})}}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[],o=t.srcEvent&&t.srcEvent.shiftKey||!1;if(o&&this.options.multiselect){var s=this.itemsData.get(e.id).group,r=void 0;this.options.multiselectPerGroup&&i.length>0&&(r=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=r&&r!=s||i.push(e.id);var a=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||r==s){i=[];for(var h in this.items)if(this.items.hasOwnProperty(h)){var d=this.items[h],l=d.data.start,u=void 0!==d.data.end?d.data.end:l;!(l>=a.min&&u<=a.max)||this.options.multiselectPerGroup&&r!=this.itemsData.get(d.id).group||d instanceof x||i.push(d.id)}}}else{var p=i.indexOf(e.id);p==-1?i.push(e.id):i.splice(p,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._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}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){for(var e=t.center?t.center.y:t.clientY,i=0;ir&&er)return n}else if(0===i&&en-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s0&&this.current.milliseconds()0&&this.current.seconds()0&&this.current.minutes()0&&this.current.hours()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.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.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.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.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){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);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 e(a)+t(a.milliseconds()).trim();case"second":return e(a)+t(a.seconds()).trim();case"minute":return e(a)+t(a.minutes()).trim();case"hour":return"vis-h"+a.hours()+(4==this.step?"-h"+(a.hours()+4):"")+e(a)+t(a.hours());case"weekday":return"vis-"+a.format("dddd").toLowerCase()+e(a)+i(a)+t(a.date());case"day":return"vis-day"+a.date()+" vis-"+a.format("MMMM").toLowerCase()+e(a)+o(a)+(this.step<=2?e(a):"")+(this.step<=2?" vis-"+a.format("dddd").toLowerCase():""+t(a.date()-1));case"month":return"vis-"+a.format("MMMM").toLowerCase()+o(a)+t(a.month());case"year":var d=a.year();return"vis-year"+d+n(a)+t(d);default:return""}},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i){this.groupId=t,this.subgroups={},this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],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 s=i(58),r=o(s),a=i(1),h=i(115);i(116);n.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.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},n.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=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 e instanceof Object?i(t,this.dom.inner):void 0!==e&&null!==e?this.dom.inner.innerHTML=e:this.dom.inner.innerHTML=this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?a.removeClassName(this.dom.inner,"vis-hidden"):a.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),a.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(a.removeClassName(this.dom.label,o),a.addClassName(this.dom.label,"expanded")):(a.removeClassName(this.dom.label,"expanded"),a.addClassName(this.dom.label,o))}else if(this.nestedGroups){this.nestedGroups=null;var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";a.removeClassName(this.dom.label,o),a.removeClassName(this.dom.label,"expanded"),a.removeClassName(this.dom.label,"vis-nesting-group")}t&&t.nestedInGroup&&(a.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(a.removeClassName(this.dom.label,this.className),a.removeClassName(this.dom.foreground,this.className),a.removeClassName(this.dom.background,this.className),a.removeClassName(this.dom.axis,this.className)),a.addClassName(this.dom.label,n),a.addClassName(this.dom.foreground,n),a.addClassName(this.dom.background,n),a.addClassName(this.dom.axis,n),this.className=n),this.style&&(a.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(a.addCssText(this.dom.label,t.style),this.style=t.style)},n.prototype.getLabelWidth=function(){return this.props.label.width},n.prototype.redraw=function(t,e,i){var o=!1,n=this.dom.marker.clientHeight;n!=this.lastMarkerHeight&&(this.lastMarkerHeight=n,a.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()}),i=!0),this._calculateSubGroupHeights(e);var s=this.dom.foreground;if(this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth,this.isVisible=this._isGroupVisible(t,e),"function"==typeof this.itemSet.options.order){if(i){var r=this,d=!1;a.forEach(this.items,function(t){t.displayed||(t.redraw(),r.visibleItems.push(t)),t.repositionX(d)});var l=this.orderedItems.byStart.slice().sort(function(t,e){return r.itemSet.options.order(t.data,e.data)});h.stack(l,e,!0)}this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t)}else this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.itemSet.options.stack?h.stack(this.visibleItems,e,i):h.nostack(this.visibleItems,e,this.subgroups,this.itemSet.options.stackSubgroups);this._updateSubgroupsSizes();var u=this._calculateHeight(e),s=this.dom.foreground;this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth,o=a.updateProperty(this,"height",u)||o,o=a.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||o,o=a.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||o,this.dom.background.style.height=u+"px",this.dom.foreground.style.height=u+"px",this.dom.label.style.height=u+"px";for(var p=0,c=this.visibleItems.length;p0){var e=this;this.resetSubgroups(),a.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},n.prototype._isGroupVisible=function(t,e){var i=this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop;return i},n.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(a.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,a.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},n.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)},n.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)},n.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),this.visibleItems.indexOf(t)==-1){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},n.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),new Date(t.data.start)new Date(this.subgroups[e].end)&&(this.subgroups[e].end=t.data.end),this.subgroups[e].items.push(t)},n.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.end;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)new Date(o)&&(o=t.data.end)}),t.subgroups[e].start=i,t.subgroups[e].end=o}},n.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;i=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},n.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},n.prototype.order=function(){for(var t=a.toArray(this.items),e=[],i=[],o=0;o0)for(var l=0;lh}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;lh})}for(var l=0;l=0;s--){var r=e[s];if(n(r))break;void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}for(var s=t+1;so[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;ae.right&&t.top-o.vertical+ie.top:t.left-o.horizontal+ie.left&&t.top-o.vertical+ie.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.tope.top||e.start<=t.start&&e.end>=t.start&&e.topt.top}},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,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(101),i(117));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.visibleFrame=document.createElement("div"),t.visibleFrame.className="vis-item-visible-frame",t.box.appendChild(t.visibleFrame),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._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=this.editable.updateTime||this.editable.updateGroup,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._repaintOnItemUpdateTimeTooltip(t.box),this._repaintDeleteButton(t.box),this._repaintDragCenter(),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||(n<-o&&(n=-o),s>2*o&&(s=2*o));var r=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=r+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=r,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.options.align){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(r-i,0)+"px":this.dom.content.style.left=Math.max(r-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((r-i)/2,0)+"px":this.dom.content.style.left=Math.max((r-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+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){return t&&t.__esModule?t:{default:t}}function n(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.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(62),r=o(s),a=i(58),h=o(a),d=i(101),l=i(1),u=i(82);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){var e=void 0!=t.group&&this.data.group!=t.group;e&&this.parent.itemSet._moveToGroup(this,t.group),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this,new d(e).on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t)}),this.dom.box?this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(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)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||this.data.editable===!0)&&this.data.editable!==!1;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=50,s=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;var r=o+this.parent.top-n<-s;r?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var a,h;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(h=this.options.tooltipOnItemUpdateTime.template.bind(this),a=h(this.data)):(a="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(a+="
end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=a}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else{var h=this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o);if(h){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else{var h=this._contentToString(this.content)!==this._contentToString(e);if(h){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}}},n.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=(0,h.default)(this.data)}for(var i=0;it.start&&this.data.start.getTime()-ot.start&&this.data.start.getTime()t.start&&this.data.start.getTime()-o/2t.start&&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._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,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup,n=this.parent.subgroups;n[o].index;this.dom.box.style.height=this.parent.subgroups[o].height+"px","top"==i?this.dom.box.style.top=this.parent.top+this.parent.subgroups[o].top+"px":this.dom.box.style.top=this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:d.FORMAT,moment:u,timeAxis:null},this.options=a.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var s=i(62),r=o(s),a=i(1),h=i(108),d=i(113),l=i(109),u=i(82);n.prototype=new h,n.prototype.setOptions=function(t){t&&(a.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment","rtl"],this.options,t),a.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===(0,r.default)(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof u.locale?u.locale(t.locale):u.lang(t.locale)))},n.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"},n.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},n.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},n.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=a.convert(this.body.range.start,"Number"),i=a.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-l.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var s=new d(new Date(e),new Date(i),n,this.body.hiddenDates);s.setMoment(this.options.moment),this.options.format&&s.setFormat(this.options.format),this.options.timeAxis&&s.setScale(this.options.timeAxis),this.step=s;var r=this.dom;r.redundant.lines=r.lines,r.redundant.majorTexts=r.majorTexts,r.redundant.minorTexts=r.minorTexts,r.lines=[],r.majorTexts=[],r.minorTexts=[];var h,u,c,f,m,g,v,y,b,_,w=0,x=void 0,D=0,S=1e3;for(s.start(),u=s.getCurrent(),f=this.body.util.toScreen(u);s.hasNext()&&D=.4*v;if(this.options.showMinorLabels&&k){var T=this._repaintMinorText(c,b,t,_);T.style.width=w+"px"}m&&this.options.showMajorLabels?(c>0&&(void 0==x&&(x=c),T=this._repaintMajorText(c,s.getLabelMajor(),t,_)),y=this._repaintMajorLine(c,w,t,_)):k?y=this._repaintMinorLine(c,w,t,_):y&&(y.style.width=parseInt(y.style.width)+w+"px")}if(D!==S||p||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to "+S+" lines."),p=!0),this.options.showMajorLabels){var C=this.body.util.toTime(0),M=s.getLabelMajor(C),O=M.length*(this.props.majorCharWidth||10)+10;(void 0==x||O1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="array",r="date",a="object",h="dom",d="moment",l="any",u={configure:{enabled:{boolean:o},filter:{boolean:o,function:"function"},container:{dom:h},__type__:{object:a,boolean:o,function:"function"}},align:{string:i},rtl:{boolean:o,undefined:"undefined"},rollingMode:{boolean:o,undefined:"undefined"},verticalScroll:{boolean:o,undefined:"undefined"},horizontalScroll:{boolean:o,undefined:"undefined"},autoResize:{boolean:o},throttleRedraw:{number:n},clickToUse:{boolean:o},dataAttributes:{string:i,array:s},editable:{add:{boolean:o,undefined:"undefined"},remove:{boolean:o,undefined:"undefined"},updateGroup:{boolean:o,undefined:"undefined"},updateTime:{boolean:o,undefined:"undefined"},overrideItems:{boolean:o,undefined:"undefined"},__type__:{boolean:o,object:a}},end:{number:n,date:r,string:i,moment:d},format:{minorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:a,function:"function"}},majorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:a,function:"function"}},__type__:{object:a}},moment:{function:"function"},groupOrder:{string:i,function:"function"},groupEditable:{add:{boolean:o,undefined:"undefined"},remove:{boolean:o,undefined:"undefined"},order:{boolean:o,undefined:"undefined"},__type__:{boolean:o,object:a}},groupOrderSwap:{function:"function"},height:{string:i,number:n},hiddenDates:{start:{date:r,number:n,string:i,moment:d},end:{date:r,number:n,string:i,moment:d},repeat:{string:i},__type__:{object:a,array:s}},itemsAlwaysDraggable:{boolean:o},locale:{string:i},locales:{__any__:{any:l},__type__:{object:a}},margin:{axis:{number:n},item:{horizontal:{number:n,undefined:"undefined"},vertical:{number:n,undefined:"undefined"},__type__:{object:a,number:n}},__type__:{object:a,number:n}},max:{date:r,number:n,string:i,moment:d},maxHeight:{number:n,string:i},maxMinorChars:{number:n},min:{date:r,number:n,string:i,moment:d},minHeight:{number:n,string:i},moveable:{boolean:o},multiselect:{boolean:o},multiselectPerGroup:{boolean:o},onAdd:{function:"function"},onUpdate:{function:"function"},onMove:{function:"function"},onMoving:{function:"function"},onRemove:{function:"function"},onAddGroup:{function:"function"},onMoveGroup:{function:"function"},onRemoveGroup:{function:"function"},order:{function:"function"},orientation:{axis:{string:i,undefined:"undefined"},item:{string:i,undefined:"undefined"},__type__:{string:i,object:a}},selectable:{boolean:o},showCurrentTime:{boolean:o},showMajorLabels:{boolean:o},showMinorLabels:{boolean:o},stack:{boolean:o},stackSubgroups:{boolean:o},snap:{function:"function",null:"null"},start:{date:r,number:n,string:i,moment:d},template:{function:"function"},groupTemplate:{function:"function"},visibleFrameTemplate:{string:i,function:"function"},tooltip:{followMouse:{boolean:o},overflowMethod:{string:["cap","flip"]},__type__:{object:a}},tooltipOnItemUpdateTime:{template:{function:"function"},__type__:{boolean:o,object:a}},timeAxis:{scale:{string:i,undefined:"undefined"},step:{number:n,undefined:"undefined"},__type__:{object:a}},type:{string:i},width:{string:i,number:n},zoomable:{boolean:o},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:n},zoomMin:{number:n},__type__:{object:a}},p={global:{align:["center","left","right"],direction:!1,autoResize:!0,clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,stackSubgroups:!0,start:"",tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1,type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=u,e.configureOptions=p},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i,o){if(!(Array.isArray(i)||i instanceof u||i instanceof p)&&i instanceof Object){var n=o;o=i,i=n}o&&o.throttleRedraw&&console.warn('Graph2d option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var s=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:d,width:null,height:null,maxHeight:null,minHeight:null},this.options=l.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{toScreen:s._toScreen.bind(s),toGlobalScreen:s._toGlobalScreen.bind(s),toTime:s._toTime.bind(s),toGlobalTime:s._toGlobalTime.bind(s)}},this.range=new c(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new m(this.body),this.components.push(this.timeAxis),this.currentTime=new g(this.body),this.components.push(this.currentTime),this.linegraph=new y(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null, -this.on("tap",function(t){s.emit("click",s.getEventProperties(t))}),this.on("doubletap",function(t){s.emit("doubleClick",s.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){s.emit("contextmenu",s.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var s=i(94),r=o(s),a=i(105),h=o(a),d=(i(106),i(101),i(82)),l=i(1),u=i(88),p=i(92),c=i(107),f=i(110),m=i(122),g=i(127),v=i(125),y=i(130),b=i(105).printStyle,_=i(138).allOptions,w=i(138).configureOptions;n.prototype=new f,n.prototype.setOptions=function(t){var e=h.default.validate(t,_);e===!0&&console.log("%cErrors have been found in the supplied options object.",b),f.prototype.setOptions.call(this,t)},n.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof u||t instanceof p?t:new u(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},n.prototype.setGroups=function(t){var e;e=t?t instanceof u||t instanceof p?t:new u(t):null,this.groupsData=e,this.linegraph.setGroups(e)},n.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:'"+t+"'"},n.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]&&(this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]))},n.prototype.getDataRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var o=0;os?s:t,e=null==e?s:e0&&d.push(u.screenToValue(n)),!p.hidden&&this.itemsData.length>0&&d.push(p.screenToValue(n)),{event:t,what:h,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:s,value:d}},n.prototype._createConfigurator=function(){return new r.default(this,this.dom.container,w)},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.id=a.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=a.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=a.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var s=i(62),r=o(s),a=i(1),h=i(87),d=i(88),l=i(92),u=i(108),p=i(131),c=i(133),f=i(137),m=i(134),g=i(136),v=i(135),y="__ungrouped__";n.prototype=new u,n.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 p(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new p(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new f(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new f(this.body,this.options.legend,"right",this.options.groups),this.show()},n.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var a={};for(this._getRelevantData(r,a,n,s),this._applySampling(r,a),e=0;e0)switch(t.options.style){case"line":l.hasOwnProperty(r[e])||(l[r[e]]=g.calcPath(a[r[e]],t)),g.draw(l[r[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(a[r[e]],t,this.framework);break;case"bar":}}}return h.cleanupElements(this.svgElements),!1},n.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,0==o?t[a].y=t[a].orginalY+r.y:t[a].y=t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},n.prototype._getRelevantData=function(t,e,i,o){var n,s,r,h;if(t.length>0)for(s=0;s0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l0){for(s=0;s0&&(n=this.groups[t[s]],r.stack===!0&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));m.getStackedYRange(a,i,t,"__barStackLeft","left"),m.getStackedYRange(h,i,t,"__barStackRight","right")}},n.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=di?i:h,l=l=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),t.master===!0&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var a=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(a=this.props.titleCharHeight);var d=this.options.icons===!0?Math.max(this.options.iconWidth,a)+this.options.labelOffsetX+15:a+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-d&&this.options.visible===!0?(this.width=this.maxLabelSize+d,this.options.width=this.width+"px",h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+d),this.options.width=this.width+"px",h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),e=!1),e},n.prototype.convertValue=function(t){return this.scale.convertValue(t)},n.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},n.prototype._redrawLabel=function(t,e,i,o,n){var s=h.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>.5*(h.magnitudefactor*h.minorSteps[h.minorStepIdx])?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}i.prototype.setCharHeight=function(t){this.majorCharHeight=t},i.prototype.setHeight=function(t){this.containerHeight=t},i.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(n===!0)break}},i.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])===0},i.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},i.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},i.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},i.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},i.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&ue.x?1:-1})):this.itemsData=[]},n.prototype.getItems=function(){return this.itemsData},n.prototype.setZeroPosition=function(t){this.zeroPosition=t},n.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];a.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),a.mergeOptions(this.options,t,"interpolation"),a.mergeOptions(this.options,t,"drawPoints"),a.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,r.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},n.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},n.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){var s=document.createElementNS("http://www.w3.org/2000/svg","svg");i={svg:s,svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":d.drawIcon(this,o,n,t,e,i);break;case"points":case"point":l.drawIcon(this,o,n,t,e,i);break;case"bar":h.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},n.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=t0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){var i=[];return i=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o=e;if(i)for(var n=t.length-2;n>0;n--)o+=t[n][0]+","+t[n][1]+" ";else for(var n=1;n0&&(f=1/f),m=3*g*(g+v),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+p*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+p*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+c*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+c*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i")}this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},n.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,r.default)(this.groups);t.sort(function(t,e){return t\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function p(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&mt(o,i)}function c(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==yt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function g(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function v(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=A(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=I(o);e.timeStamp=wt(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=H(a,h),e.distance=F(a,h),P(i,e),e.offsetDirection=L(e.deltaX,e.deltaY);var d=R(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=_t(d.x)>_t(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?Y(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,N(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==It&&s.eventType!==Lt||(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!=Ft&&(h>At||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=R(h,d,l);o=u.x,n=u.y,i=_t(u.x)>_t(u.y)?u.x:u.y,s=L(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 A(t){for(var e=[],i=0;i=_t(e)?t<0?Yt:jt:e<0?Gt:zt}function F(t,e,i){i||(i=Bt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function H(t,e,i){i||(i=Bt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function Y(t,e){return H(e[1],e[0],qt)+H(t[1],t[0],qt)}function j(t,e){return F(e[0],e[1],qt)/F(t[0],t[1],qt)}function G(){this.evEl=Zt,this.evWin=Kt,this.pressed=!1,C.apply(this,arguments)}function z(){this.evEl=Qt,this.evWin=te,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function W(){this.evTarget=ie,this.evWin=oe,this.started=!1,C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Lt|Ft)&&(i=D(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=se,this.targetIds={},C.apply(this,arguments)}function B(t,e){var i=x(t.touches),o=this.targetIds;if(e&(It|Rt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===It)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,re)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<_e&&e(i.options.event+et(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=_e&&e(i.options.event+et(o))},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=De)},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return nt.prototype.attrTest.call(this,t)&&(this.state&ye||!(this.state&ye)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=it(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),p(rt,nt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ce]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ye)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),p(at,tt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ue]},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&(Lt|Ft)&&!n)this.reset();else if(t.eventType&It)this.reset(),this._timer=h(function(){this.state=we,this.tryEmit()},e.time,this);else if(t.eventType&Lt)return we;return De},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===we&&(t&&t.eventType&Lt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=wt(),this.manager.emit(this.options.event,this._input)))}}),p(ht,nt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ce]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ye)}}),p(dt,nt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Wt|Ut,pointers:1},getTouchAction:function(){return st.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Wt|Ut)?e=t.overallVelocity:i&Wt?e=t.overallVelocityX:i&Ut&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&_t(e)>this.options.velocity&&t.eventType&Lt},emit:function(t){var e=it(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),p(lt,tt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[pe]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o){i||(i={}),i.byUser!==!0&&(i.byUser=!1);var n=this,s=void 0!=t?p.convert(t,"Date").valueOf():null,r=void 0!=e?p.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i.animation){var h=this.start,l=this.end,c="object"===(0,u.default)(i.animation)&&"duration"in i.animation?i.animation.duration:500,f="object"===(0,u.default)(i.animation)&&"easingFunction"in i.animation?i.animation.easingFunction:"easeInOutQuad",g=p.easingFunctions[f];if(!g)throw new Error("Unknown easing function "+(0,d.default)(f)+". Choose from: "+(0,a.default)(p.easingFunctions).join(", "));var v=(new Date).valueOf(),y=!1,b=function t(){if(!n.props.touch.dragging){var e=(new Date).valueOf(),a=e-v,d=g(a/c),u=a>c,p=u||null===s?s:h+(s-h)*d,f=u||null===r?r:l+(r-l)*d;_=n._applyRange(p,f),m.updateHiddenDates(n.options.moment,n.body,n.options.hiddenDates),y=y||_;var b={start:new Date(n.start),end:new Date(n.end),byUser:i.byUser,event:i.event};if(_&&n.body.emitter.emit("rangechange",b),u){if(y&&(n.body.emitter.emit("rangechanged",b),o))return o()}else n.animationTimer=setTimeout(t,20)}};return b()}var _=this._applyRange(s,r);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:i.byUser,event:i.event};if(this.body.emitter.emit("rangechange",w),clearTimeout(n.timeoutID),n.timeoutID=setTimeout(function(){n.body.emitter.emit("rangechanged",w)},200),o)return o()}},n.prototype.getMillisecondsPerPixel=function(){return(this.end-this.start)/this.body.dom.center.clientWidth},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?p.convert(t,"Date").valueOf():this.start,n=null!=e?p.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?p.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?p.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(ns&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o=this.start-h&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);d<0&&(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},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.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}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),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"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start,n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);o-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;if(this.options.rtl)var a=i/r*o;else var a=-i/r*o;var h=this.props.touch.start+a,d=this.props.touch.end+a,l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),u=m.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(l!=h||u!=d)return this.deltaDifference+=i,this.props.touch.start=l,this.props.touch.end=u,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d);var p=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:p,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.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,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable){if(this.options.horizontalScroll){t.preventDefault();var i=e*(this.end-this.start)/20,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:t};this.setRange(o,n,s)}}else if(this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var r;r=e<0?1-e/5:1/(1+e/5);var a;if(this.rolling)a=this.start+(this.end-this.start)*this.options.rollingMode.offset;else{var h=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);a=this._pointerToDate(h)}this.zoom(r,a,e,t),t.preventDefault()}},n.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},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d);var l={animation:!1,byUser:!0,event:t};this.setRange(r,a,l),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e=t.center?t.center.x:t.clientX;if(this.options.rtl)var i=e-p.getAbsoluteLeft(this.body.dom.centerContainer);else var i=p.getAbsoluteRight(this.body.dom.centerContainer)-e;var o=this.body.util.toTime(i);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(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},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:p.getAbsoluteRight(e)-t.x,y:t.y-p.getAbsoluteTop(e)}:{x:t.x-p.getAbsoluteLeft(e),y:t.y-p.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l);var u={animation:!1,byUser:!0,event:o};this.setRange(a,h,u),this.startToFront=!1,this.endToFront=!0},n.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},n.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:null};this.setRange(o,n,s)},t.exports=n},function(t,e,i){i(95);e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch,e.disablePreventDefaultVertically=function(t){var e="pan-y";return t.getTouchAction=function(){return[e]},t}},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(1);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.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=o; +},function(t,e){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n=4*a){var p=0,c=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-p,"days"),c.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"),c.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=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(p,"months"),c.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(p,"years"),c.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d=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&&nt.range.end){var h={start:t.range.start,end:i};i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale}i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a),d=new Date(h+a+t.range.start);return d},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n=e&&r=e&&r<=i&&(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?o<0?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&&t-1||h))return t.dataTransfer.dropEffect="move",h=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e.content)return}catch(t){return!1}return h=!1,t.center={x:t.clientX,y:t.clientY},s.itemSet._onAddItem(t),s.emit("drop",s.getEventProperties(t)),!1}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.rollingModeBtn=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.rollingModeBtn.className="vis-rolling-mode-btn",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.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),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.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){this.initialDrawDone===!0&&this._redraw()}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=p.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={};var a=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];a.forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var h=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(p.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),this.options.orientation={item:void 0,axis:void 0},"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(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 c(this.body);i.setOptions=function(t){var e=t?p.extend({},t):{};e.orientation="top",c.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);o!==-1&&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&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(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=p.deepExtend({},this.options);this.components.forEach(function(t){p.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.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},n.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 "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.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 "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?p.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 "+(0,r.default)(e)+" already exists");var n=new g(this.body,p.extend({},this.options,{time:i,id:e}));return this.customTimes.push(n),this.components.push(n),this._redraw(),e},n.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 "+(0,r.default)(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))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.prototype.fit=function(t,e){var i=this.getDataRange();if(null!==i.min||null!==i.max){var o=i.max-i.min,n=new Date(i.min.valueOf()-.01*o),s=new Date(i.max.valueOf()+.01*o),r=!t||void 0===t.animation||t.animation;this.range.setRange(n,s,{animation:r},e)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i,o){"function"==typeof arguments[2]&&(o=arguments[2],i={});var n;if(1==arguments.length){var s=arguments[0];n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n})}else if(2==arguments.length&&"function"==typeof arguments[1]){var s=arguments[0];o=arguments[1],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n},o)}else n=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,{animation:n},o)},n.prototype.moveTo=function(t,e,i){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.range.end-this.range.start,n=p.convert(t,"Date").valueOf(),s=n-o/2,r=n+o/2,a=!e||void 0===e.animation||e.animation;this.range.setRange(s,r,{animation:a},i)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=r/(1+t),h=(r-a)/2,d=n+h,l=s-h;this.setWindow(d,l,e,i)}},n.prototype.zoomOut=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=n-r*t/2,h=s+r*t/2;this.setWindow(a,h,e,i)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(p.addClassName(o.root,"vis-top"),p.removeClassName(o.root,"vis-bottom")):(p.removeClassName(o.root,"vis-top"),p.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=p.option.asSize(e.maxHeight,""),o.root.style.minHeight=p.option.asSize(e.minHeight,""),o.root.style.width=p.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,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=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&&(i.borderRootWidth=i.borderRootHeight),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 n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=p.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=p.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.heighti.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});var c=5;if(t){if(this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTope&&o.push(h.id):h.lefti&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;in)return}}if(i&&i!=this.groupTouchParams.group){var h=e.get(i.groupId),d=e.get(this.groupTouchParams.group.groupId);d&&h&&(this.options.groupOrderSwap(d,h,e),e.update(d),e.update(h));var u=e.getIds({order:this.options.groupOrder});if(!l.equalArray(u,this.groupTouchParams.originalOrder))for(var c=this.groupTouchParams.originalOrder,f=this.groupTouchParams.group.groupId,m=Math.min(c.length,u.length),g=0,v=0,y=0;g=m)break;if(u[g+v]!=f)if(c[g+y]!=f){var b=u.indexOf(c[g+y]),_=e.get(u[g+v]),w=e.get(c[g+y]);this.options.groupOrderSwap(_,w,e),e.update(_),e.update(w);var x=u[g+v];u[g+v]=c[g+y],u[b]=x,g++}else y=1;else v=1}}}},n.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=l.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(!l.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),u=o.get(s[a]);e.options.groupOrderSwap(d,u,o),o.update(d),o.update(u);var p=n[a];n[a]=s[a],n[h]=p,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.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})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){var i=this.itemFromRelatedTarget(t);if(e!==i){var o=e.getTitle();if(this.options.showTooltips&&o){null==this.popup&&(this.popup=new w(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(o);var n=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(n)+n.offsetLeft,t.clientY-l.getAbsoluteTop(n)+n.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){var i=this.itemFromRelatedTarget(t);e!==i&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){var e=this.itemFromTarget(t);if(e&&this.options.showTooltips&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var i=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(i)+i.offsetLeft,t.clientY-l.getAbsoluteTop(i)+i.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.options.snap||null,o=this.itemFromTarget(t);if(!o){if(this.options.rtl)var n=l.getAbsoluteRight(this.dom.frame),s=n-t.center.x;else var n=l.getAbsoluteLeft(this.dom.frame),s=t.center.x-n;var r,a=this.body.util.toTime(s),h=this.body.util.getScale(),d=this.body.util.getStep();if("drop"==t.type){if(r=JSON.parse(t.dataTransfer.getData("text")),r.content=r.content?r.content:"new item",r.start=r.start?r.start:i?i(a,h,d):a,r.type=r.type||"box",r[this.itemsData._fieldId]=r.id||l.randomUUID(),"range"==r.type&&!r.end){var u=this.body.util.toTime(s+this.props.width/5);r.end=i?i(u,h,d):u}}else if(r={start:i?i(a,h,d):a,content:"new item"},r[this.itemsData._fieldId]=l.randomUUID(),"range"===this.options.type){var u=this.body.util.toTime(s+this.props.width/5);r.end=i?i(u,h,d):u}var p=this.groupFromTarget(t);p&&(r.group=p.groupId),r=this._cloneItemData(r),this.options.onAdd(r,function(i){i&&(e.itemsData.getDataSet().add(i),"drop"==t.type&&e.setSelection([i.id]))})}}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[],o=t.srcEvent&&t.srcEvent.shiftKey||!1;if(o&&this.options.multiselect){var s=this.itemsData.get(e.id).group,r=void 0;this.options.multiselectPerGroup&&i.length>0&&(r=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=r&&r!=s||i.push(e.id);var a=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||r==s){i=[];for(var h in this.items)if(this.items.hasOwnProperty(h)){var d=this.items[h],l=d.data.start,u=void 0!==d.data.end?d.data.end:l;!(l>=a.min&&u<=a.max)||this.options.multiselectPerGroup&&r!=this.itemsData.get(d.id).group||d instanceof _||i.push(d.id)}}}else{var p=i.indexOf(e.id);p==-1?i.push(e.id):i.splice(p,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._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}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){var e=t.center?t.center.y:t.clientY,i=this.groupIds;i.length<=0&&this.groupsData&&(i=this.groupsData.getIds({order:this.options.groupOrder}));for(var o=0;oa&&ea)return s}else if(0===o&&e0&&this.current.milliseconds()0&&this.current.seconds()0&&this.current.minutes()0&&this.current.hours()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.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("week"==e)o.weekday()>2?(o.weekday(0),o.add(1,"week")):o.weekday(0),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.scale){case"year":case"month":case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.scale){case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(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"week":return 1==t.date();case"month":return 0==t.month();case"year":return!1;default:return!1}},o.prototype.getLabelMinor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];switch(this.scale){case"week":if(this.isMajor()&&0!==t.weekday())return"";default:return e&&e.length>0?this.moment(t).format(e):""}},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);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,d=[];switch(this.scale){case"millisecond": +d.push(e(a)),d.push(t(a.milliseconds()));break;case"second":d.push(e(a)),d.push(t(a.seconds()));break;case"minute":d.push(e(a)),d.push(t(a.minutes()));break;case"hour":d.push("vis-h"+a.hours()+this.step==4?"-h"+(a.hours()+4):""),d.push(e(a)),d.push(t(a.hours()));break;case"weekday":d.push("vis-"+a.format("dddd").toLowerCase()),d.push(e(a)),d.push(i(a)),d.push(t(a.date()));break;case"day":d.push("vis-day"+a.date()),d.push("vis-"+a.format("MMMM").toLowerCase()),d.push(e(a)),d.push(o(a)),d.push(this.step<=2?e(a):""),d.push(this.step<=2?"vis-"+a.format("dddd").toLowerCase():""),d.push(t(a.date()-1));break;case"week":d.push("vis-week"+a.format("w")),d.push(i(a)),d.push(t(a.week()));break;case"month":d.push("vis-"+a.format("MMMM").toLowerCase()),d.push(o(a)),d.push(t(a.month()));break;case"year":d.push("vis-year"+a.year()),d.push(n(a)),d.push(t(a.year()))}return d.filter(String).join(" ")},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i){this.groupId=t,this.subgroups={},this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,this.stackDirty=!0,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],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 s=i(58),r=o(s),a=i(1),h=i(106);i(107);n.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.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},n.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=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 e instanceof Object?i(t,this.dom.inner):void 0!==e&&null!==e?this.dom.inner.innerHTML=e:this.dom.inner.innerHTML=this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?a.removeClassName(this.dom.inner,"vis-hidden"):a.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),a.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(a.removeClassName(this.dom.label,o),a.addClassName(this.dom.label,"expanded")):(a.removeClassName(this.dom.label,"expanded"),a.addClassName(this.dom.label,o))}else if(this.nestedGroups){this.nestedGroups=null;var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";a.removeClassName(this.dom.label,o),a.removeClassName(this.dom.label,"expanded"),a.removeClassName(this.dom.label,"vis-nesting-group")}t&&t.nestedInGroup&&(a.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(a.removeClassName(this.dom.label,this.className),a.removeClassName(this.dom.foreground,this.className),a.removeClassName(this.dom.background,this.className),a.removeClassName(this.dom.axis,this.className)),a.addClassName(this.dom.label,n),a.addClassName(this.dom.foreground,n),a.addClassName(this.dom.background,n),a.addClassName(this.dom.axis,n),this.className=n),this.style&&(a.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(a.addCssText(this.dom.label,t.style),this.style=t.style)},n.prototype.getLabelWidth=function(){return this.props.label.width},n.prototype.redraw=function(t,e,i){var o=!1,n=this.dom.marker.clientHeight;n!=this.lastMarkerHeight&&(this.lastMarkerHeight=n,a.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()}),i=!0),this._calculateSubGroupHeights(e);var s=this.dom.foreground;this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth;var r=this.isVisible;this.isVisible=this._isGroupVisible(t,e);var d=i||this.stackDirty||this.isVisible&&!r;if(d){if("function"==typeof this.itemSet.options.order){var l=this,u=!1;a.forEach(this.items,function(t){t.displayed||(t.redraw(),l.visibleItems.push(t)),t.repositionX(u)});var p=this.orderedItems.byStart.slice().sort(function(t,e){return l.itemSet.options.order(t.data,e.data)});h.stack(p,e,!0),this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t)}else this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.itemSet.options.stack?h.stack(this.visibleItems,e,!0):h.nostack(this.visibleItems,e,this.subgroups,this.itemSet.options.stackSubgroups);this.stackDirty=!1}this._updateSubgroupsSizes();var c=this._calculateHeight(e),s=this.dom.foreground;this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth,o=a.updateProperty(this,"height",c)||o,o=a.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||o,o=a.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||o,this.dom.background.style.height=c+"px",this.dom.foreground.style.height=c+"px",this.dom.label.style.height=c+"px";for(var f=0,m=this.visibleItems.length;f0){var e=this;this.resetSubgroups(),a.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},n.prototype._isGroupVisible=function(t,e){var i=this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop;return i},n.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(a.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,a.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},n.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)},n.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)},n.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),this.stackDirty=!0,void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),this.visibleItems.indexOf(t)==-1){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},n.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),new Date(t.data.start)new Date(this.subgroups[e].end)&&(this.subgroups[e].end=t.data.end),this.subgroups[e].items.push(t)},n.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.end;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)new Date(o)&&(o=t.data.end)}),t.subgroups[e].start=i,t.subgroups[e].end=o}},n.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;i=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},n.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},n.prototype.order=function(){for(var t=a.toArray(this.items),e=[],i=[],o=0;o0)for(var l=0;lh}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;lh})}for(var l=0;l=0;s--){var r=e[s];if(n(r))break;void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}for(var s=t+1;so[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;ae.right&&t.top-o.vertical+ie.top:t.left-o.horizontal+ie.left&&t.top-o.vertical+ie.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.tope.top||e.start<=t.start&&e.end>=t.start&&e.topt.top}},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,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(95),i(108));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.visibleFrame=document.createElement("div"),t.visibleFrame.className="vis-item-visible-frame",t.box.appendChild(t.visibleFrame),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._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=this.editable.updateTime||this.editable.updateGroup,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._repaintOnItemUpdateTimeTooltip(t.box),this._repaintDeleteButton(t.box),this._repaintDragCenter(),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||(n<-o&&(n=-o),s>2*o&&(s=2*o));var r=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=r+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=r,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.options.align){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(r-i,0)+"px":this.dom.content.style.left=Math.max(r-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((r-i)/2,0)+"px":this.dom.content.style.left=Math.max((r-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+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){return t&&t.__esModule?t:{default:t}}function n(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.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(62),r=o(s),a=i(58),h=o(a),d=i(95),l=i(1),u=i(82);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){var e=void 0!=t.group&&this.data.group!=t.group;e&&null!=this.parent&&this.parent.itemSet._moveToGroup(this,t.group),this.parent.stackDirty=!0;var i=void 0!=t.subgroup&&this.data.subgroup!=t.subgroup;i&&null!=this.parent&&this.parent.changeSubgroup(this,this.data.subgroup,t.subgroup),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this;var i=new d(e);i.on("tap",function(e){t.parent.itemSet.body.emitter.emit("click",{event:e,item:t.id})}),i.on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t),t.parent.itemSet.body.emitter.emit("doubleClick",{event:e,item:t.id})}),this.dom.box?this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(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)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||this.data.editable===!0)&&this.data.editable!==!1;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=50,s=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;var r=o+this.parent.top-n<-s;r?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var a,h;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(h=this.options.tooltipOnItemUpdateTime.template.bind(this),a=h(this.data)):(a="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(a+="
end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=a}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else{var h=this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o);if(h){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else{var h=this._contentToString(this.content)!==this._contentToString(e);if(h){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}}},n.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=(0,h.default)(this.data)}for(var i=0;it.start&&this.data.start.getTime()-ot.start&&this.data.start.getTime()t.start&&this.data.start.getTime()-o/2t.start&&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._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,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup,n=this.parent.subgroups;n[o].index;this.dom.box.style.height=this.parent.subgroups[o].height+"px","top"==i?this.dom.box.style.top=this.parent.top+this.parent.subgroups[o].top+"px":this.dom.box.style.top=this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(114),s=o(n),r=i(115),a=o(r),h=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),t===!0){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,h=!0;this.y-en-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s=.4*y}if(this.options.showMinorLabels&&v){var T=this._repaintMinorText(c,_,t,w);T.style.width=x+"px"}m&&this.options.showMajorLabels?(c>0&&(void 0==D&&(D=c),T=this._repaintMajorText(c,s.getLabelMajor(),t,w)),b=this._repaintMajorLine(c,x,t,w)):v?b=this._repaintMinorLine(c,x,t,w):b&&(b.style.width=parseInt(b.style.width)+x+"px")}if(S!==k||p||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to "+k+" lines."),p=!0),this.options.showMajorLabels){var C=this.body.util.toTime(0),M=s.getLabelMajor(C),O=M.length*(this.props.majorCharWidth||10)+10;(void 0==D||O1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(89),s=o(n),r=i(62),a=o(r),h=i(58),d=o(h),l=i(114),u=o(l),p=i(115),c=o(p),f=i(1),m=!1,g=void 0,v="background: #FFeeee; color: #dd0000",y=function(){function t(){(0,u.default)(this,t)}return(0,c.default)(t,null,[{key:"validate",value:function(e,i,o){m=!1,g=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),m}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){void 0===o[e]&&void 0===o.__any__?t.getSuggestion(e,o,n):void 0===o[e]&&void 0!==o.__any__?"object"===t.getType(i[e])&&void 0!==o.__any__.__type__?t.checkFields(e,i,o,"__any__",o.__any__.__type__,n):t.checkFields(e,i,o,"__any__",o.__any__,n):void 0!==o[e].__type__?t.checkFields(e,i,o,e,o[e].__type__,n):t.checkFields(e,i,o,e,o[e],n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=t.getType(i[e]),h=s[a];void 0!==h?"array"===t.getType(h)&&h.indexOf(i[e])===-1?(console.log('%cInvalid option detected in "'+e+'". Allowed values are:'+t.print(h)+' not "'+i[e]+'". '+t.printLocation(r,e),v),m=!0):"object"===a&&"__any__"!==n&&(r=f.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(console.log('%cInvalid type received for "'+e+'". Expected: '+t.print((0,d.default)(s))+". Received ["+a+'] "'+i[e]+'"'+t.printLocation(r,e),v),m=!0)}},{key:"getType",value:function(t){var e="undefined"==typeof t?"undefined":(0,a.default)(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":void 0!==t.nodeType?"dom":t._isAMomentObject===!0?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,g,[],!0),r=8,a=4;void 0!==n.indexMatch?console.log('%cUnknown option detected: "'+e+'" in '+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n',v):s.distance<=a&&n.distance>s.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,""),v):n.distance<=r?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),v):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print((0,d.default)(i))+t.printLocation(o,e),v),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&n===!0){var p=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>p.distance&&(r=p.closestMatch,a=p.path,s=p.distance,d=p.indexMatch)}else l.toLowerCase().indexOf(h)!==-1&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},p.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new c(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===("undefined"==typeof t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),this.options.filter===!1&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,this.options.enabled===!0&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):e!==!0&&e.indexOf(n)===-1||(o=!0),o!==!1&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&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&&t.indexOf(e)!==-1&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(e*l),d=a.max,h="range increased"),a.value=e}else a.value=o;var u=document.createElement("input");u.className="vis-configuration vis-config-rangeinput",u.value=a.value;var p=this;a.onchange=function(){u.value=this.value,p._update(Number(this.value),i)},a.oninput=function(){u.value=this.value};var c=this._makeLabel(i[i.length-1],i),f=this._makeItem(i,c,a,u);""!==h&&this.popupHistory[f]!==d&&(this.popupHistory[f]=d,this._setupPopup(h,f))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&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],h=p.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,h,!0),this.allowCreation=i===!1)),o!==!1){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(e.indexOf("physics")!==-1&&this.moduleOptions.physics.solver!==r&&(l=!1),l===!0)if(void 0!==a.enabled){var u=p.copyAndExtendArray(h,"enabled"),c=this._getValue(u);if(c===!0){var f=this._makeLabel(r,h,!0);this._makeItem(h,f),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,c,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}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.initialized=!0,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||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;e0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),p.isString(t)===!0){if(p.isValidRGB(t)===!0){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(p.isValidRGBA(t)===!0){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(p.isValidHex(t)===!0){var a=p.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e===!0&&(this.previousColor=p.extend({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e===!0&&(this.initialColor=p.extend({},t)),this.color=t;var i=p.RGBToHSV(t.r,t.g,t.b),o=2*Math.PI,n=this.r*i.s,s=this.centerCoordinates.x+n*Math.sin(o*i.h),r=this.centerCoordinates.y+n*Math.cos(o*i.h);this.colorPickerSelector.style.left=s-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=p.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=p.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=p.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,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+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(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);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/360,d=1/this.r,l=void 0;for(s=0;s<360;s++)for(r=0;rr?r:t,e=null==e?r:e0&&l.push(u.screenToValue(n)),!c.hidden&&this.itemsData.length>0&&l.push(c.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 v(this,this.dom.container,g)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.id=a.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=a.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=a.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var s=i(62),r=o(s),a=i(1),h=i(87),d=i(88),l=i(92),u=i(100),p=i(131),c=i(133),f=i(137),m=i(134),g=i(136),v=i(135),y="__ungrouped__";n.prototype=new u,n.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 p(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new p(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new f(this.body,this.options.legend,"left",this.options.groups), +this.legendRight=new f(this.body,this.options.legend,"right",this.options.groups),this.show()},n.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var a={};for(this._getRelevantData(r,a,n,s),this._applySampling(r,a),e=0;e0)switch(t.options.style){case"line":l.hasOwnProperty(r[e])||(l[r[e]]=g.calcPath(a[r[e]],t)),g.draw(l[r[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(a[r[e]],t,this.framework);break;case"bar":}}}return h.cleanupElements(this.svgElements),!1},n.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,0==o?t[a].y=t[a].orginalY+r.y:t[a].y=t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},n.prototype._getRelevantData=function(t,e,i,o){var n,s,r,h;if(t.length>0)for(s=0;s0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l0){for(s=0;s0&&(n=this.groups[t[s]],r.stack===!0&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));m.getStackedYRange(a,i,t,"__barStackLeft","left"),m.getStackedYRange(h,i,t,"__barStackRight","right")}},n.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=di?i:h,l=l=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),t.master===!0&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var a=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(a=this.props.titleCharHeight);var d=this.options.icons===!0?Math.max(this.options.iconWidth,a)+this.options.labelOffsetX+15:a+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-d&&this.options.visible===!0?(this.width=this.maxLabelSize+d,this.options.width=this.width+"px",h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+d),this.options.width=this.width+"px",h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(h.cleanupElements(this.DOMelements.lines),h.cleanupElements(this.DOMelements.labels),e=!1),e},n.prototype.convertValue=function(t){return this.scale.convertValue(t)},n.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},n.prototype._redrawLabel=function(t,e,i,o,n){var s=h.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>.5*(h.magnitudefactor*h.minorSteps[h.minorStepIdx])?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}i.prototype.setCharHeight=function(t){this.majorCharHeight=t},i.prototype.setHeight=function(t){this.containerHeight=t},i.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(n===!0)break}},i.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])===0},i.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},i.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},i.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},i.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},i.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&ue.x?1:-1})):this.itemsData=[]},n.prototype.getItems=function(){return this.itemsData},n.prototype.setZeroPosition=function(t){this.zeroPosition=t},n.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];a.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),a.mergeOptions(this.options,t,"interpolation"),a.mergeOptions(this.options,t,"drawPoints"),a.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,r.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},n.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},n.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){var s=document.createElementNS("http://www.w3.org/2000/svg","svg");i={svg:s,svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":d.drawIcon(this,o,n,t,e,i);break;case"points":case"point":l.drawIcon(this,o,n,t,e,i);break;case"bar":h.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},n.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=t0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){var i=[];return i=1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o=e;if(i)for(var n=t.length-2;n>0;n--)o+=t[n][0]+","+t[n][1]+" ";else for(var n=1;n0&&(f=1/f),m=3*g*(g+v),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+p*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+p*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+c*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+c*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i")}this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},n.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,r.default)(this.groups);t.sort(function(t,e){return t Array#indexOf // true -> Array#includes @@ -2203,9 +2204,9 @@ return /******/ (function(modules) { // webpackBootstrap }; }; -/***/ }, +/***/ }), /* 38 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength var toInteger = __webpack_require__(39) @@ -2214,9 +2215,9 @@ return /******/ (function(modules) { // webpackBootstrap return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 }; -/***/ }, +/***/ }), /* 39 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { // 7.1.4 ToInteger var ceil = Math.ceil @@ -2225,9 +2226,9 @@ return /******/ (function(modules) { // webpackBootstrap return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; -/***/ }, +/***/ }), /* 40 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(39) , max = Math.max @@ -2237,9 +2238,9 @@ return /******/ (function(modules) { // webpackBootstrap return index < 0 ? max(index + length, 0) : min(index, length); }; -/***/ }, +/***/ }), /* 41 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var shared = __webpack_require__(42)('keys') , uid = __webpack_require__(43); @@ -2247,9 +2248,9 @@ return /******/ (function(modules) { // webpackBootstrap return shared[key] || (shared[key] = uid(key)); }; -/***/ }, +/***/ }), /* 42 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(16) , SHARED = '__core-js_shared__' @@ -2258,9 +2259,9 @@ return /******/ (function(modules) { // webpackBootstrap return store[key] || (store[key] = {}); }; -/***/ }, +/***/ }), /* 43 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { var id = 0 , px = Math.random(); @@ -2268,24 +2269,24 @@ return /******/ (function(modules) { // webpackBootstrap return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; -/***/ }, +/***/ }), /* 44 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { // IE 8- don't enum bug keys module.exports = ( 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' ).split(','); -/***/ }, +/***/ }), /* 45 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(16).document && document.documentElement; -/***/ }, +/***/ }), /* 46 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var def = __webpack_require__(21).f , has = __webpack_require__(31) @@ -2295,9 +2296,9 @@ return /******/ (function(modules) { // webpackBootstrap if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); }; -/***/ }, +/***/ }), /* 47 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(42)('wks') , uid = __webpack_require__(43) @@ -2311,9 +2312,9 @@ return /******/ (function(modules) { // webpackBootstrap $exports.store = store; -/***/ }, +/***/ }), /* 48 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) var has = __webpack_require__(31) @@ -2329,9 +2330,9 @@ return /******/ (function(modules) { // webpackBootstrap } return O instanceof Object ? ObjectProto : null; }; -/***/ }, +/***/ }), /* 49 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 7.1.13 ToObject(argument) var defined = __webpack_require__(12); @@ -2339,9 +2340,9 @@ return /******/ (function(modules) { // webpackBootstrap return Object(defined(it)); }; -/***/ }, +/***/ }), /* 50 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; var $at = __webpack_require__(51)(true); @@ -2361,9 +2362,9 @@ return /******/ (function(modules) { // webpackBootstrap return {value: point, done: false}; }); -/***/ }, +/***/ }), /* 51 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var toInteger = __webpack_require__(39) , defined = __webpack_require__(12); @@ -2383,9 +2384,9 @@ return /******/ (function(modules) { // webpackBootstrap }; }; -/***/ }, +/***/ }), /* 52 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var anObject = __webpack_require__(22) , get = __webpack_require__(53); @@ -2395,9 +2396,9 @@ return /******/ (function(modules) { // webpackBootstrap return anObject(iterFn.call(it)); }; -/***/ }, +/***/ }), /* 53 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(54) , ITERATOR = __webpack_require__(47)('iterator') @@ -2408,9 +2409,9 @@ return /******/ (function(modules) { // webpackBootstrap || Iterators[classof(it)]; }; -/***/ }, +/***/ }), /* 54 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // getting tag from 19.1.3.6 Object.prototype.toString() var cof = __webpack_require__(11) @@ -2436,15 +2437,15 @@ return /******/ (function(modules) { // webpackBootstrap : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; -/***/ }, +/***/ }), /* 55 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(56), __esModule: true }; -/***/ }, +/***/ }), /* 56 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(57); var $Object = __webpack_require__(17).Object; @@ -2452,30 +2453,30 @@ return /******/ (function(modules) { // webpackBootstrap return $Object.create(P, D); }; -/***/ }, +/***/ }), /* 57 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(15) // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) $export($export.S, 'Object', {create: __webpack_require__(33)}); -/***/ }, +/***/ }), /* 58 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(59), __esModule: true }; -/***/ }, +/***/ }), /* 59 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(60); module.exports = __webpack_require__(17).Object.keys; -/***/ }, +/***/ }), /* 60 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 Object.keys(O) var toObject = __webpack_require__(49) @@ -2487,9 +2488,9 @@ return /******/ (function(modules) { // webpackBootstrap }; }); -/***/ }, +/***/ }), /* 61 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // most Object methods by ES6 should accept primitives var $export = __webpack_require__(15) @@ -2502,9 +2503,9 @@ return /******/ (function(modules) { // webpackBootstrap $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); }; -/***/ }, +/***/ }), /* 62 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2528,35 +2529,35 @@ return /******/ (function(modules) { // webpackBootstrap return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); }; -/***/ }, +/***/ }), /* 63 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(64), __esModule: true }; -/***/ }, +/***/ }), /* 64 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(50); __webpack_require__(4); module.exports = __webpack_require__(65).f('iterator'); -/***/ }, +/***/ }), /* 65 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { exports.f = __webpack_require__(47); -/***/ }, +/***/ }), /* 66 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(67), __esModule: true }; -/***/ }, +/***/ }), /* 67 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(68); __webpack_require__(79); @@ -2564,9 +2565,9 @@ return /******/ (function(modules) { // webpackBootstrap __webpack_require__(81); module.exports = __webpack_require__(17).Symbol; -/***/ }, +/***/ }), /* 68 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; // ECMAScript 6 symbols shim @@ -2804,9 +2805,9 @@ return /******/ (function(modules) { // webpackBootstrap // 24.3.3 JSON[@@toStringTag] setToStringTag(global.JSON, 'JSON', true); -/***/ }, +/***/ }), /* 69 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var META = __webpack_require__(43)('meta') , isObject = __webpack_require__(23) @@ -2862,9 +2863,9 @@ return /******/ (function(modules) { // webpackBootstrap onFreeze: onFreeze }; -/***/ }, +/***/ }), /* 70 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(16) , core = __webpack_require__(17) @@ -2876,9 +2877,9 @@ return /******/ (function(modules) { // webpackBootstrap if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); }; -/***/ }, +/***/ }), /* 71 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var getKeys = __webpack_require__(35) , toIObject = __webpack_require__(9); @@ -2891,9 +2892,9 @@ return /******/ (function(modules) { // webpackBootstrap while(length > index)if(O[key = keys[index++]] === el)return key; }; -/***/ }, +/***/ }), /* 72 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // all enumerable object keys, includes symbols var getKeys = __webpack_require__(35) @@ -2911,21 +2912,21 @@ return /******/ (function(modules) { // webpackBootstrap } return result; }; -/***/ }, +/***/ }), /* 73 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { exports.f = Object.getOwnPropertySymbols; -/***/ }, +/***/ }), /* 74 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { exports.f = {}.propertyIsEnumerable; -/***/ }, +/***/ }), /* 75 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 7.2.2 IsArray(argument) var cof = __webpack_require__(11); @@ -2933,9 +2934,9 @@ return /******/ (function(modules) { // webpackBootstrap return cof(arg) == 'Array'; }; -/***/ }, +/***/ }), /* 76 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = __webpack_require__(9) @@ -2958,9 +2959,9 @@ return /******/ (function(modules) { // webpackBootstrap }; -/***/ }, +/***/ }), /* 77 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) var $keys = __webpack_require__(36) @@ -2970,9 +2971,9 @@ return /******/ (function(modules) { // webpackBootstrap return $keys(O, hiddenKeys); }; -/***/ }, +/***/ }), /* 78 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var pIE = __webpack_require__(74) , createDesc = __webpack_require__(29) @@ -2991,27 +2992,27 @@ return /******/ (function(modules) { // webpackBootstrap if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); }; -/***/ }, +/***/ }), /* 79 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { -/***/ }, +/***/ }), /* 80 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(70)('asyncIterator'); -/***/ }, +/***/ }), /* 81 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(70)('observable'); -/***/ }, +/***/ }), /* 82 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -3019,12 +3020,12 @@ return /******/ (function(modules) { // webpackBootstrap // use this instance. Else, load via commonjs. module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(83); -/***/ }, +/***/ }), /* 83 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {//! moment.js - //! version : 2.18.0 + //! version : 2.18.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -3383,7 +3384,7 @@ return /******/ (function(modules) { // webpackBootstrap // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. // TODO: Remove "ordinalParse" fallback in next major release. this._dayOfMonthOrdinalParseLenient = new RegExp( - (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + (/\d{1,2}/).source); } @@ -7451,7 +7452,7 @@ return /******/ (function(modules) { // webpackBootstrap // Side effect imports - hooks.version = '2.18.0'; + hooks.version = '2.18.1'; setHookCallback(createLocal); @@ -7489,9 +7490,9 @@ return /******/ (function(modules) { // webpackBootstrap /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(84)(module))) -/***/ }, +/***/ }), /* 84 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { module.exports = function(module) { if(!module.webpackPolyfill) { @@ -7505,9 +7506,9 @@ return /******/ (function(modules) { // webpackBootstrap } -/***/ }, +/***/ }), /* 85 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { function webpackContext(req) { throw new Error("Cannot find module '" + req + "'."); @@ -7518,9 +7519,9 @@ return /******/ (function(modules) { // webpackBootstrap webpackContext.id = 85; -/***/ }, +/***/ }), /* 86 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { /* WEBPACK VAR INJECTION */(function(global) {'use strict'; @@ -7734,9 +7735,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = uuid; /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) -/***/ }, +/***/ }), /* 87 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -7765,9 +7766,9 @@ return /******/ (function(modules) { // webpackBootstrap exports.Hammer = __webpack_require__(112); exports.keycharm = __webpack_require__(115); -/***/ }, +/***/ }), /* 88 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { 'use strict'; @@ -7978,9 +7979,9 @@ return /******/ (function(modules) { // webpackBootstrap } }; -/***/ }, +/***/ }), /* 89 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -8935,15 +8936,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = DataSet; -/***/ }, +/***/ }), /* 90 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(91), __esModule: true }; -/***/ }, +/***/ }), /* 91 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var core = __webpack_require__(17) , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify}); @@ -8951,9 +8952,9 @@ return /******/ (function(modules) { // webpackBootstrap return $JSON.stringify.apply($JSON, arguments); }; -/***/ }, +/***/ }), /* 92 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { 'use strict'; @@ -9156,9 +9157,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Queue; -/***/ }, +/***/ }), /* 93 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -9557,9 +9558,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = DataView; -/***/ }, +/***/ }), /* 94 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -9627,7 +9628,10 @@ return /******/ (function(modules) { // webpackBootstrap showShadow: false, keepAspectRatio: true, verticalRatio: 0.5, // 0.1 to 1.0, where 1.0 results in a 'cube' + dotSizeRatio: 0.02, // size of the dots as a fraction of the graph width + dotSizeMinFraction: 0.5, // size of min-value dot as a fraction of dotSizeRatio + dotSizeMaxFraction: 2.5, // size of max-value dot as a fraction of dotSizeRatio showAnimationControls: autoByDefault, animationInterval: 1000, // milliseconds @@ -10537,7 +10541,8 @@ return /******/ (function(modules) { // webpackBootstrap if (this.style === Graph3d.STYLE.DOTSIZE) { var dotSize = this._dotSize(); - width = dotSize / 2 + dotSize * 2; + //width = dotSize / 2 + dotSize * 2; + width = dotSize * this.dotSizeMaxFraction; } else if (this.style === Graph3d.STYLE.BARSIZE) { width = this.xBarWidth; } else { @@ -10603,8 +10608,8 @@ return /******/ (function(modules) { // webpackBootstrap // draw the size legend box var widthMin; if (this.style === Graph3d.STYLE.DOTSIZE) { - var dotSize = this._dotSize(); - widthMin = dotSize / 2; // px + // Get the proportion to max and min right + widthMin = width * (this.dotSizeMinFraction / this.dotSizeMaxFraction); } else if (this.style === Graph3d.STYLE.BARSIZE) { //widthMin = this.xBarWidth * 0.2 this is wrong - barwidth measures in terms of xvalues } @@ -10613,7 +10618,7 @@ return /******/ (function(modules) { // webpackBootstrap ctx.beginPath(); ctx.moveTo(left, top); ctx.lineTo(right, top); - ctx.lineTo(right - width + widthMin, bottom); + ctx.lineTo(left + widthMin, bottom); ctx.lineTo(left, bottom); ctx.closePath(); ctx.fill(); @@ -11307,7 +11312,11 @@ return /******/ (function(modules) { // webpackBootstrap Graph3d.prototype._redrawDotSizeGraphPoint = function (ctx, point) { var dotSize = this._dotSize(); var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range(); - var size = dotSize / 2 + 2 * dotSize * fraction; + + var sizeMin = dotSize * this.dotSizeMinFraction; + var sizeRange = dotSize * this.dotSizeMaxFraction - sizeMin; + var size = sizeMin + sizeRange * fraction; + var colors = this._getColorsSize(); this._drawCircle(ctx, point, colors.fill, colors.border, size); @@ -11951,31 +11960,31 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Graph3d; -/***/ }, +/***/ }), /* 95 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(96), __esModule: true }; -/***/ }, +/***/ }), /* 96 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(97); module.exports = __webpack_require__(17).Object.assign; -/***/ }, +/***/ }), /* 97 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) var $export = __webpack_require__(15); $export($export.S + $export.F, 'Object', {assign: __webpack_require__(98)}); -/***/ }, +/***/ }), /* 98 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; // 19.1.2.1 Object.assign(target, source, ...) @@ -12011,9 +12020,9 @@ return /******/ (function(modules) { // webpackBootstrap } return T; } : $assign; -/***/ }, +/***/ }), /* 99 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { /** @@ -12181,9 +12190,9 @@ return /******/ (function(modules) { // webpackBootstrap }; -/***/ }, +/***/ }), /* 100 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { "use strict"; @@ -12264,9 +12273,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Point3d; -/***/ }, +/***/ }), /* 101 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { "use strict"; @@ -12282,9 +12291,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Point2d; -/***/ }, +/***/ }), /* 102 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -12474,40 +12483,40 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Camera; -/***/ }, +/***/ }), /* 103 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = { "default": __webpack_require__(104), __esModule: true }; -/***/ }, +/***/ }), /* 104 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { __webpack_require__(105); module.exports = __webpack_require__(17).Math.sign; -/***/ }, +/***/ }), /* 105 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { // 20.2.2.28 Math.sign(x) var $export = __webpack_require__(15); $export($export.S, 'Math', {sign: __webpack_require__(106)}); -/***/ }, +/***/ }), /* 106 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { // 20.2.2.28 Math.sign(x) module.exports = Math.sign || function sign(x){ return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; }; -/***/ }, +/***/ }), /* 107 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -12716,9 +12725,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Filter; -/***/ }, +/***/ }), /* 108 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -13064,9 +13073,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Slider; -/***/ }, +/***/ }), /* 109 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { 'use strict'; @@ -13242,9 +13251,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = StepNumber; -/***/ }, +/***/ }), /* 110 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { 'use strict'; @@ -13340,9 +13349,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Range; -/***/ }, +/***/ }), /* 111 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -13394,7 +13403,7 @@ return /******/ (function(modules) { // webpackBootstrap * Specifically, these are the fields which require no special handling, * and can be directly copied over. */ - var OPTIONKEYS = ['width', 'height', 'filterLabel', 'legendLabel', 'xLabel', 'yLabel', 'zLabel', 'xValueLabel', 'yValueLabel', 'zValueLabel', 'showXAxis', 'showYAxis', 'showZAxis', 'showGrid', 'showPerspective', 'showShadow', 'keepAspectRatio', 'verticalRatio', 'dotSizeRatio', 'showAnimationControls', 'animationInterval', 'animationPreload', 'animationAutoStart', 'axisColor', 'gridColor', 'xCenter', 'yCenter']; + var OPTIONKEYS = ['width', 'height', 'filterLabel', 'legendLabel', 'xLabel', 'yLabel', 'zLabel', 'xValueLabel', 'yValueLabel', 'zValueLabel', 'showXAxis', 'showYAxis', 'showZAxis', 'showGrid', 'showPerspective', 'showShadow', 'keepAspectRatio', 'verticalRatio', 'dotSizeRatio', 'dotSizeMinFraction', 'dotSizeMaxFraction', 'showAnimationControls', 'animationInterval', 'animationPreload', 'animationAutoStart', 'axisColor', 'gridColor', 'xCenter', 'yCenter']; /** * Field names in the options hash which are of relevance to the user. @@ -13731,9 +13740,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports.setOptions = setOptions; module.exports.setCameraPosition = setCameraPosition; -/***/ }, +/***/ }), /* 112 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -13751,9 +13760,9 @@ return /******/ (function(modules) { // webpackBootstrap }; } -/***/ }, +/***/ }), /* 113 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; @@ -13988,9 +13997,9 @@ return /******/ (function(modules) { // webpackBootstrap })); -/***/ }, +/***/ }), /* 114 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22 * http://hammerjs.github.io/ @@ -16637,9 +16646,9 @@ return /******/ (function(modules) { // webpackBootstrap })(window, document, 'Hammer'); -/***/ }, +/***/ }), /* 115 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; /** @@ -16836,9 +16845,9 @@ return /******/ (function(modules) { // webpackBootstrap -/***/ }, +/***/ }), /* 116 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -16855,33 +16864,33 @@ return /******/ (function(modules) { // webpackBootstrap exports.Timeline = __webpack_require__(117); exports.Graph2d = __webpack_require__(148); exports.timeline = { - Core: __webpack_require__(130), - DateUtil: __webpack_require__(129), - Range: __webpack_require__(127), - stack: __webpack_require__(135), - TimeStep: __webpack_require__(133), + Core: __webpack_require__(122), + DateUtil: __webpack_require__(121), + Range: __webpack_require__(118), + stack: __webpack_require__(126), + TimeStep: __webpack_require__(124), components: { items: { - Item: __webpack_require__(137), - BackgroundItem: __webpack_require__(141), - BoxItem: __webpack_require__(139), - PointItem: __webpack_require__(140), - RangeItem: __webpack_require__(136) + Item: __webpack_require__(128), + BackgroundItem: __webpack_require__(132), + BoxItem: __webpack_require__(130), + PointItem: __webpack_require__(131), + RangeItem: __webpack_require__(127) }, - BackgroundGroup: __webpack_require__(138), - Component: __webpack_require__(128), - CurrentTime: __webpack_require__(146), - CustomTime: __webpack_require__(144), + BackgroundGroup: __webpack_require__(129), + Component: __webpack_require__(120), + CurrentTime: __webpack_require__(143), + CustomTime: __webpack_require__(141), DataAxis: __webpack_require__(150), DataScale: __webpack_require__(151), GraphGroup: __webpack_require__(152), - Group: __webpack_require__(134), - ItemSet: __webpack_require__(131), + Group: __webpack_require__(125), + ItemSet: __webpack_require__(123), Legend: __webpack_require__(156), LineGraph: __webpack_require__(149), - TimeAxis: __webpack_require__(142) + TimeAxis: __webpack_require__(139) } }; @@ -16890,38 +16899,31 @@ return /******/ (function(modules) { // webpackBootstrap exports.Hammer = __webpack_require__(112); exports.keycharm = __webpack_require__(115); -/***/ }, +/***/ }), /* 117 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - var _Configurator = __webpack_require__(118); - - var _Configurator2 = _interopRequireDefault(_Configurator); - - var _Validator = __webpack_require__(126); - - var _Validator2 = _interopRequireDefault(_Validator); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var Emitter = __webpack_require__(99); var Hammer = __webpack_require__(112); var moment = __webpack_require__(82); var util = __webpack_require__(1); var DataSet = __webpack_require__(89); var DataView = __webpack_require__(93); - var Range = __webpack_require__(127); - var Core = __webpack_require__(130); - var TimeAxis = __webpack_require__(142); - var CurrentTime = __webpack_require__(146); - var CustomTime = __webpack_require__(144); - var ItemSet = __webpack_require__(131); + var Range = __webpack_require__(118); + var Core = __webpack_require__(122); + var TimeAxis = __webpack_require__(139); + var CurrentTime = __webpack_require__(143); + var CustomTime = __webpack_require__(141); + var ItemSet = __webpack_require__(123); - var printStyle = __webpack_require__(126).printStyle; - var allOptions = __webpack_require__(147).allOptions; - var configureOptions = __webpack_require__(147).configureOptions; + var printStyle = __webpack_require__(144).printStyle; + var allOptions = __webpack_require__(145).allOptions; + var configureOptions = __webpack_require__(145).configureOptions; + + var Configurator = __webpack_require__(146)['default']; + var Validator = __webpack_require__(144)['default']; /** * Create a timeline visualization @@ -17044,9 +17046,27 @@ return /******/ (function(modules) { // webpackBootstrap this.dom.root.onmouseover = function (event) { me.emit('mouseOver', me.getEventProperties(event)); }; - this.dom.root.onmousemove = function (event) { - me.emit('mouseMove', me.getEventProperties(event)); - }; + if (window.PointerEvent) { + this.dom.root.onpointerdown = function (event) { + me.emit('mouseDown', me.getEventProperties(event)); + }; + this.dom.root.onpointermove = function (event) { + me.emit('mouseMove', me.getEventProperties(event)); + }; + this.dom.root.onpointerup = function (event) { + me.emit('mouseUp', me.getEventProperties(event)); + }; + } else { + this.dom.root.onmousemove = function (event) { + me.emit('mouseMove', me.getEventProperties(event)); + }; + this.dom.root.onmousedown = function (event) { + me.emit('mouseDown', me.getEventProperties(event)); + }; + this.dom.root.onmouseup = function (event) { + me.emit('mouseUp', me.getEventProperties(event)); + }; + } //Single time autoscale/fit this.fitDone = false; @@ -17096,7 +17116,7 @@ return /******/ (function(modules) { // webpackBootstrap * @private */ Timeline.prototype._createConfigurator = function () { - return new _Configurator2['default'](this, this.dom.container, configureOptions); + return new Configurator(this, this.dom.container, configureOptions); }; /** @@ -17113,7 +17133,7 @@ return /******/ (function(modules) { // webpackBootstrap Timeline.prototype.setOptions = function (options) { // validate options - var errorFound = _Validator2['default'].validate(options, allOptions); + var errorFound = Validator.validate(options, allOptions); if (errorFound === true) { console.log('%cErrors have been found in the supplied options object.', printStyle); @@ -17281,7 +17301,7 @@ return /******/ (function(modules) { // webpackBootstrap var interval = Math.max(this.range.end - this.range.start, (end - start) * 1.1); var animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(middle - interval / 2, middle + interval / 2, animation); + this.range.setRange(middle - interval / 2, middle + interval / 2, { animation: animation }); } }; @@ -17307,7 +17327,7 @@ return /******/ (function(modules) { // webpackBootstrap } else { // exactly fit the items (plus a small margin) range = this.getItemRange(); - this.range.setRange(range.min, range.max, animation); + this.range.setRange(range.min, range.max, { animation: animation }); } }; @@ -17496,15 +17516,15 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Timeline; -/***/ }, +/***/ }), /* 118 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); var _stringify = __webpack_require__(90); @@ -17514,8737 +17534,8270 @@ return /******/ (function(modules) { // webpackBootstrap var _typeof3 = _interopRequireDefault(_typeof2); - var _classCallCheck2 = __webpack_require__(119); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(119); + var moment = __webpack_require__(82); + var Component = __webpack_require__(120); + var DateUtil = __webpack_require__(121); - var _createClass2 = __webpack_require__(120); + /** + * @constructor Range + * A Range controls a numeric range with a start and end value. + * The Range adjusts the range based on mouse events or programmatic changes, + * and triggers events when the range is changing or has been changed. + * @param {{dom: Object, domProps: Object, emitter: Emitter}} body + * @param {Object} [options] See description at Range.setOptions + */ + function Range(body, options) { + var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); + var start = now.clone().add(-3, 'days').valueOf(); + var end = now.clone().add(3, 'days').valueOf(); - var _createClass3 = _interopRequireDefault(_createClass2); + if (options === undefined) { + this.start = start; + this.end = end; + } else { + this.start = options.start || start; + this.end = options.end || end; + } - var _ColorPicker = __webpack_require__(124); + this.rolling = false; - var _ColorPicker2 = _interopRequireDefault(_ColorPicker); + this.body = body; + this.deltaDifference = 0; + this.scaleOffset = 0; + this.startToFront = false; + this.endToFront = true; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // default options + this.defaultOptions = { + rtl: false, + start: null, + end: null, + moment: moment, + direction: 'horizontal', // 'horizontal' or 'vertical' + moveable: true, + zoomable: true, + min: null, + max: null, + zoomMin: 10, // milliseconds + zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000, // milliseconds + rollingMode: { + follow: false, + offset: 0.5 + } + }; + this.options = util.extend({}, this.defaultOptions); + this.props = { + touch: {} + }; + this.animationTimer = null; - var util = __webpack_require__(1); + // drag listeners for dragging + this.body.emitter.on('panstart', this._onDragStart.bind(this)); + this.body.emitter.on('panmove', this._onDrag.bind(this)); + this.body.emitter.on('panend', this._onDragEnd.bind(this)); + + // mouse wheel for zooming + this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); + + // pinch to zoom + this.body.emitter.on('touch', this._onTouch.bind(this)); + this.body.emitter.on('pinch', this._onPinch.bind(this)); + + // on click of rolling mode button + this.body.dom.rollingModeBtn.addEventListener('click', this.startRolling.bind(this)); + + this.setOptions(options); + } + + Range.prototype = new Component(); /** - * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options. - * Boolean options are recognised as Boolean - * Number options should be written as array: [default value, min value, max value, stepsize] - * Colors should be written as array: ['color', '#ffffff'] - * Strings with should be written as array: [option1, option2, option3, ..] - * - * The options are matched with their counterparts in each of the modules and the values used in the configuration are - * - * @param parentModule | the location where parentModule.setOptions() can be called - * @param defaultContainer | the default container of the module - * @param configureOptions | the fully configured and predefined options set found in allOptions.js - * @param pixelRatio | canvas pixel ratio + * Set options for the range controller + * @param {Object} options Available options: + * {Number | Date | String} start Start date for the range + * {Number | Date | String} end End date for the range + * {Number} min Minimum value for start + * {Number} max Maximum value for end + * {Number} zoomMin Set a minimum value for + * (end - start). + * {Number} zoomMax Set a maximum value for + * (end - start). + * {Boolean} moveable Enable moving of the range + * by dragging. True by default + * {Boolean} zoomable Enable zooming of the range + * by pinching/scrolling. True by default */ - var Configurator = function () { - function Configurator(parentModule, defaultContainer, configureOptions) { - var pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; - (0, _classCallCheck3['default'])(this, Configurator); + Range.prototype.setOptions = function (options) { + if (options) { + // copy the options that we know + var fields = ['animation', 'direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'moment', 'activate', 'hiddenDates', 'zoomKey', 'rtl', 'showCurrentTime', 'rollingMode', 'horizontalScroll']; + util.selectiveExtend(fields, this.options, options); - this.parent = parentModule; - this.changedOptions = []; - this.container = defaultContainer; - this.allowCreation = false; + if (options.rollingMode && options.rollingMode.follow) { + this.startRolling(); + } + if ('start' in options || 'end' in options) { + // apply a new range. both start and end are optional + this.setRange(options.start, options.end); + } + } + }; - this.options = {}; - this.initialized = false; - this.popupCounter = 0; - this.defaultOptions = { - enabled: false, - filter: true, - container: undefined, - showButton: true + /** + * Test whether direction has a valid value + * @param {String} direction 'horizontal' or 'vertical' + */ + function validateDirection(direction) { + if (direction != 'horizontal' && direction != 'vertical') { + throw new TypeError('Unknown direction "' + direction + '". ' + 'Choose "horizontal" or "vertical".'); + } + } + + /** + * Start auto refreshing the current time bar + */ + Range.prototype.startRolling = function () { + var me = this; + + function update() { + me.stopRolling(); + me.rolling = true; + + var interval = me.end - me.start; + var t = util.convert(new Date(), 'Date').valueOf(); + + var start = t - interval * me.options.rollingMode.offset; + var end = t + interval * (1 - me.options.rollingMode.offset); + var animation = me.options && me.options.animation !== undefined ? me.options.animation : true; + + var options = { + animation: false }; - util.extend(this.options, this.defaultOptions); + me.setRange(start, end, options); - this.configureOptions = configureOptions; - this.moduleOptions = {}; - this.domElements = []; - this.popupDiv = {}; - this.popupLimit = 5; - this.popupHistory = {}; - this.colorPicker = new _ColorPicker2['default'](pixelRatio); - this.wrapper = undefined; + // determine interval to refresh + var scale = me.conversion(me.body.domProps.center.width).scale; + var interval = 1 / scale / 10; + if (interval < 30) interval = 30; + if (interval > 1000) interval = 1000; + + me.body.dom.rollingModeBtn.style.visibility = "hidden"; + // start a renderTimer to adjust for the new time + me.currentTimeTimer = setTimeout(update, interval); } - /** - * refresh all options. - * Because all modules parse their options by themselves, we just use their options. We copy them here. - * - * @param options - */ + update(); + }; + /** + * Stop auto refreshing the current time bar + */ + Range.prototype.stopRolling = function () { + if (this.currentTimeTimer !== undefined) { + clearTimeout(this.currentTimeTimer); + this.rolling = false; + this.body.dom.rollingModeBtn.style.visibility = "visible"; + } + }; - (0, _createClass3['default'])(Configurator, [{ - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - // reset the popup history because the indices may have been changed. - this.popupHistory = {}; - this._removePopup(); + /** + * Set a new start and end range + * @param {Date | Number | String} [start] + * @param {Date | Number | String} [end] + * @param {Object} options Available options: + * {Boolean | {duration: number, easingFunction: string}} [animation=false] + * If true, 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'. + * {Boolean} [byUser=false] + * {Event} event Mouse event + * {Function} a callback funtion to be executed at the end of this function + * + */ - var enabled = true; - if (typeof options === 'string') { - this.options.filter = options; - } else if (options instanceof Array) { - this.options.filter = options.join(); - } else if ((typeof options === 'undefined' ? 'undefined' : (0, _typeof3['default'])(options)) === 'object') { - if (options.container !== undefined) { - this.options.container = options.container; - } - if (options.filter !== undefined) { - this.options.filter = options.filter; - } - if (options.showButton !== undefined) { - this.options.showButton = options.showButton; - } - if (options.enabled !== undefined) { - enabled = options.enabled; - } - } else if (typeof options === 'boolean') { - this.options.filter = true; - enabled = options; - } else if (typeof options === 'function') { - this.options.filter = options; - enabled = true; - } - if (this.options.filter === false) { - enabled = false; - } + Range.prototype.setRange = function (start, end, options, callback) { + if (!options) { + options = {}; + } + if (options.byUser !== true) { + options.byUser = false; + } + var me = this; + var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null; + var finalEnd = end != undefined ? util.convert(end, 'Date').valueOf() : null; + this._cancelAnimation(); - this.options.enabled = enabled; - } - this._clean(); - } - }, { - key: 'setModuleOptions', - value: function setModuleOptions(moduleOptions) { - this.moduleOptions = moduleOptions; - if (this.options.enabled === true) { - this._clean(); - if (this.options.container !== undefined) { - this.container = this.options.container; - } - this._create(); - } + if (options.animation) { + // true or an Object + var initStart = this.start; + var initEnd = this.end; + var duration = (0, _typeof3['default'])(options.animation) === 'object' && 'duration' in options.animation ? options.animation.duration : 500; + var easingName = (0, _typeof3['default'])(options.animation) === 'object' && 'easingFunction' in options.animation ? options.animation.easingFunction : 'easeInOutQuad'; + var easingFunction = util.easingFunctions[easingName]; + if (!easingFunction) { + throw new Error('Unknown easing function ' + (0, _stringify2['default'])(easingName) + '. ' + 'Choose from: ' + (0, _keys2['default'])(util.easingFunctions).join(', ')); } - /** - * Create all DOM elements - * @private - */ + var initTime = new Date().valueOf(); + var anyChanged = false; - }, { - key: '_create', - value: function _create() { - var _this = this; + var next = function next() { + if (!me.props.touch.dragging) { + var now = new Date().valueOf(); + var time = now - initTime; + var ease = easingFunction(time / duration); + var done = time > duration; + var s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease; + var e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease; - this._clean(); - this.changedOptions = []; + changed = me._applyRange(s, e); + DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates); + anyChanged = anyChanged || changed; - var filter = this.options.filter; - var counter = 0; - var show = false; - for (var option in this.configureOptions) { - if (this.configureOptions.hasOwnProperty(option)) { - this.allowCreation = false; - show = false; - if (typeof filter === 'function') { - show = filter(option, []); - show = show || this._handleObject(this.configureOptions[option], [option], true); - } else if (filter === true || filter.indexOf(option) !== -1) { - show = true; - } + var params = { + start: new Date(me.start), + end: new Date(me.end), + byUser: options.byUser, + event: options.event + }; - if (show !== false) { - this.allowCreation = true; + if (changed) { + me.body.emitter.emit('rangechange', params); + } - // linebreak between categories - if (counter > 0) { - this._makeItem([]); + if (done) { + if (anyChanged) { + me.body.emitter.emit('rangechanged', params); + if (callback) { + return callback(); } - // a header for the category - this._makeHeader(option); - - // get the sub options - this._handleObject(this.configureOptions[option], [option]); } - counter++; + } else { + // animate with as high as possible frame rate, leave 20 ms in between + // each to prevent the browser from blocking + me.animationTimer = setTimeout(next, 20); } } + }; - if (this.options.showButton === true) { - var generateButton = document.createElement('div'); - generateButton.className = 'vis-configuration vis-config-button'; - generateButton.innerHTML = 'generate options'; - generateButton.onclick = function () { - _this._printOptions(); - }; - generateButton.onmouseover = function () { - generateButton.className = 'vis-configuration vis-config-button hover'; - }; - generateButton.onmouseout = function () { - generateButton.className = 'vis-configuration vis-config-button'; - }; - - this.optionsContainer = document.createElement('div'); - this.optionsContainer.className = 'vis-configuration vis-config-option-container'; + return next(); + } else { + var changed = this._applyRange(finalStart, finalEnd); + DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + if (changed) { + var params = { + start: new Date(this.start), + end: new Date(this.end), + byUser: options.byUser, + event: options.event + }; - this.domElements.push(this.optionsContainer); - this.domElements.push(generateButton); + this.body.emitter.emit('rangechange', params); + clearTimeout(me.timeoutID); + me.timeoutID = setTimeout(function () { + me.body.emitter.emit('rangechanged', params); + }, 200); + if (callback) { + return callback(); } - - this._push(); - //~ this.colorPicker.insertTo(this.container); } + } + }; - /** - * draw all DOM elements on the screen - * @private - */ + /** + * Get the number of milliseconds per pixel. + */ + Range.prototype.getMillisecondsPerPixel = function () { + return (this.end - this.start) / this.body.dom.center.clientWidth; + }; - }, { - key: '_push', - value: function _push() { - this.wrapper = document.createElement('div'); - this.wrapper.className = 'vis-configuration-wrapper'; - this.container.appendChild(this.wrapper); - for (var i = 0; i < this.domElements.length; i++) { - this.wrapper.appendChild(this.domElements[i]); - } + /** + * Stop an animation + * @private + */ + Range.prototype._cancelAnimation = function () { + if (this.animationTimer) { + clearTimeout(this.animationTimer); + this.animationTimer = null; + } + }; - this._showPopupIfNeeded(); - } + /** + * Set a new start and end range. This method is the same as setRange, but + * does not trigger a range change and range changed event, and it returns + * true when the range is changed + * @param {Number} [start] + * @param {Number} [end] + * @return {Boolean} changed + * @private + */ + Range.prototype._applyRange = function (start, end) { + var newStart = start != null ? util.convert(start, 'Date').valueOf() : this.start, + newEnd = end != null ? util.convert(end, 'Date').valueOf() : this.end, + max = this.options.max != null ? util.convert(this.options.max, 'Date').valueOf() : null, + min = this.options.min != null ? util.convert(this.options.min, 'Date').valueOf() : null, + diff; - /** - * delete all DOM elements - * @private - */ + // check for valid number + if (isNaN(newStart) || newStart === null) { + throw new Error('Invalid start "' + start + '"'); + } + if (isNaN(newEnd) || newEnd === null) { + throw new Error('Invalid end "' + end + '"'); + } - }, { - key: '_clean', - value: function _clean() { - for (var i = 0; i < this.domElements.length; i++) { - this.wrapper.removeChild(this.domElements[i]); - } + // prevent end < start + if (newEnd < newStart) { + newEnd = newStart; + } - if (this.wrapper !== undefined) { - this.container.removeChild(this.wrapper); - this.wrapper = undefined; - } - this.domElements = []; + // prevent start < min + if (min !== null) { + if (newStart < min) { + diff = min - newStart; + newStart += diff; + newEnd += diff; - this._removePopup(); + // prevent end > max + if (max != null) { + if (newEnd > max) { + newEnd = max; + } + } } + } - /** - * get the value from the actualOptions if it exists - * @param {array} path | where to look for the actual option - * @returns {*} - * @private - */ + // prevent end > max + if (max !== null) { + if (newEnd > max) { + diff = newEnd - max; + newStart -= diff; + newEnd -= diff; - }, { - key: '_getValue', - value: function _getValue(path) { - var base = this.moduleOptions; - for (var i = 0; i < path.length; i++) { - if (base[path[i]] !== undefined) { - base = base[path[i]]; - } else { - base = undefined; - break; + // prevent start < min + if (min != null) { + if (newStart < min) { + newStart = min; } } - return base; } + } - /** - * all option elements are wrapped in an item - * @param path - * @param domElements - * @private - */ - - }, { - key: '_makeItem', - value: function _makeItem(path) { - if (this.allowCreation === true) { - var item = document.createElement('div'); - item.className = 'vis-configuration vis-config-item vis-config-s' + path.length; - - for (var _len = arguments.length, domElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - domElements[_key - 1] = arguments[_key]; - } - - domElements.forEach(function (element) { - item.appendChild(element); - }); - this.domElements.push(item); - return this.domElements.length; + // prevent (end-start) < zoomMin + if (this.options.zoomMin !== null) { + var zoomMin = parseFloat(this.options.zoomMin); + if (zoomMin < 0) { + zoomMin = 0; + } + if (newEnd - newStart < zoomMin) { + // compensate for a scale of 0.5 ms + var compensation = 0.5; + if (this.end - this.start === zoomMin && newStart >= this.start - compensation && newEnd <= this.end) { + // ignore this action, we are already zoomed to the minimum + newStart = this.start; + newEnd = this.end; + } else { + // zoom to the minimum + diff = zoomMin - (newEnd - newStart); + newStart -= diff / 2; + newEnd += diff / 2; } - return 0; } + } - /** - * header for major subjects - * @param name - * @private - */ - - }, { - key: '_makeHeader', - value: function _makeHeader(name) { - var div = document.createElement('div'); - div.className = 'vis-configuration vis-config-header'; - div.innerHTML = name; - this._makeItem([], div); + // prevent (end-start) > zoomMax + if (this.options.zoomMax !== null) { + var zoomMax = parseFloat(this.options.zoomMax); + if (zoomMax < 0) { + zoomMax = 0; } - /** - * make a label, if it is an object label, it gets different styling. - * @param name - * @param path - * @param objectLabel - * @returns {HTMLElement} - * @private - */ - - }, { - key: '_makeLabel', - value: function _makeLabel(name, path) { - var objectLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var div = document.createElement('div'); - div.className = 'vis-configuration vis-config-label vis-config-s' + path.length; - if (objectLabel === true) { - div.innerHTML = '' + name + ':'; + if (newEnd - newStart > zoomMax) { + if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) { + // ignore this action, we are already zoomed to the maximum + newStart = this.start; + newEnd = this.end; } else { - div.innerHTML = name + ':'; + // zoom to the maximum + diff = newEnd - newStart - zoomMax; + newStart += diff / 2; + newEnd -= diff / 2; } - return div; } + } - /** - * make a dropdown list for multiple possible string optoins - * @param arr - * @param value - * @param path - * @private - */ + var changed = this.start != newStart || this.end != newEnd; - }, { - key: '_makeDropdown', - value: function _makeDropdown(arr, value, path) { - var select = document.createElement('select'); - select.className = 'vis-configuration vis-config-select'; - var selectedValue = 0; - if (value !== undefined) { - if (arr.indexOf(value) !== -1) { - selectedValue = arr.indexOf(value); - } - } + // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range) + if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) { + this.body.emitter.emit('checkRangedItems'); + } - for (var i = 0; i < arr.length; i++) { - var option = document.createElement('option'); - option.value = arr[i]; - if (i === selectedValue) { - option.selected = 'selected'; - } - option.innerHTML = arr[i]; - select.appendChild(option); - } + this.start = newStart; + this.end = newEnd; + return changed; + }; - var me = this; - select.onchange = function () { - me._update(this.value, path); - }; + /** + * Retrieve the current range. + * @return {Object} An object with start and end properties + */ + Range.prototype.getRange = function () { + return { + start: this.start, + end: this.end + }; + }; - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, select); - } + /** + * Calculate the conversion offset and scale for current range, based on + * the provided width + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion + */ + Range.prototype.conversion = function (width, totalHidden) { + return Range.conversion(this.start, this.end, width, totalHidden); + }; - /** - * make a range object for numeric options - * @param arr - * @param value - * @param path - * @private - */ + /** + * Static method to calculate the conversion offset and scale for a range, + * based on the provided start, end, and width + * @param {Number} start + * @param {Number} end + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion + */ + Range.conversion = function (start, end, width, totalHidden) { + if (totalHidden === undefined) { + totalHidden = 0; + } + if (width != 0 && end - start != 0) { + return { + offset: start, + scale: width / (end - start - totalHidden) + }; + } else { + return { + offset: 0, + scale: 1 + }; + } + }; - }, { - key: '_makeRange', - value: function _makeRange(arr, value, path) { - var defaultValue = arr[0]; - var min = arr[1]; - var max = arr[2]; - var step = arr[3]; - var range = document.createElement('input'); - range.className = 'vis-configuration vis-config-range'; - try { - range.type = 'range'; // not supported on IE9 - range.min = min; - range.max = max; - } catch (err) {} - range.step = step; + /** + * Start dragging horizontally or vertically + * @param {Event} event + * @private + */ + Range.prototype._onDragStart = function (event) { + this.deltaDifference = 0; + this.previousDelta = 0; - // set up the popup settings in case they are needed. - var popupString = ''; - var popupValue = 0; + // only allow dragging when configured as movable + if (!this.options.moveable) return; - if (value !== undefined) { - var factor = 1.20; - if (value < 0 && value * factor < min) { - range.min = Math.ceil(value * factor); - popupValue = range.min; - popupString = 'range increased'; - } else if (value / factor < min) { - range.min = Math.ceil(value / factor); - popupValue = range.min; - popupString = 'range increased'; - } - if (value * factor > max && max !== 1) { - range.max = Math.ceil(value * factor); - popupValue = range.max; - popupString = 'range increased'; - } - range.value = value; - } else { - range.value = defaultValue; - } + // only start dragging when the mouse is inside the current range + if (!this._isInsideRange(event)) return; - var input = document.createElement('input'); - input.className = 'vis-configuration vis-config-rangeinput'; - input.value = range.value; + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - var me = this; - range.onchange = function () { - input.value = this.value;me._update(Number(this.value), path); - }; - range.oninput = function () { - input.value = this.value; - }; + this.stopRolling(); - var label = this._makeLabel(path[path.length - 1], path); - var itemIndex = this._makeItem(path, label, range, input); + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.dragging = true; - // if a popup is needed AND it has not been shown for this value, show it. - if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) { - this.popupHistory[itemIndex] = popupValue; - this._setupPopup(popupString, itemIndex); - } - } + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'move'; + } + }; - /** - * prepare the popup - * @param string - * @param index - * @private - */ + /** + * Perform dragging operation + * @param {Event} event + * @private + */ + Range.prototype._onDrag = function (event) { + if (!event) return; - }, { - key: '_setupPopup', - value: function _setupPopup(string, index) { - var _this2 = this; + if (!this.props.touch.dragging) return; - 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 () { - _this2._removePopup(); - }; - this.popupCounter += 1; - this.popupDiv = { html: div, index: index }; - } - } + // only allow dragging when configured as movable + if (!this.options.moveable) return; - /** - * remove the popup from the dom - * @private - */ + // TODO: this may be redundant in hammerjs2 + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - }, { - key: '_removePopup', - value: function _removePopup() { - if (this.popupDiv.html !== undefined) { - this.popupDiv.html.parentNode.removeChild(this.popupDiv.html); - clearTimeout(this.popupDiv.hideTimeout); - clearTimeout(this.popupDiv.deleteTimeout); - this.popupDiv = {}; - } - } + var direction = this.options.direction; + validateDirection(direction); + var delta = direction == 'horizontal' ? event.deltaX : event.deltaY; + delta -= this.deltaDifference; + var interval = this.props.touch.end - this.props.touch.start; - /** - * Show the popup if it is needed. - * @private - */ + // normalize dragging speed if cutout is in between. + var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + interval -= duration; - }, { - key: '_showPopupIfNeeded', - value: function _showPopupIfNeeded() { - var _this3 = this; + var width = direction == 'horizontal' ? this.body.domProps.center.width : this.body.domProps.center.height; - 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 () { - _this3.popupDiv.html.style.opacity = 0; - }, 1500); - this.popupDiv.deleteTimeout = setTimeout(function () { - _this3._removePopup(); - }, 1800); - } - } + if (this.options.rtl) { + var diffRange = delta / width * interval; + } else { + var diffRange = -delta / width * interval; + } - /** - * make a checkbox for boolean options. - * @param defaultValue - * @param value - * @param path - * @private - */ + var newStart = this.props.touch.start + diffRange; + var newEnd = this.props.touch.end + diffRange; - }, { - key: '_makeCheckbox', - value: function _makeCheckbox(defaultValue, value, path) { - var checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.className = 'vis-configuration vis-config-checkbox'; - checkbox.checked = defaultValue; - if (value !== undefined) { - checkbox.checked = value; - if (value !== defaultValue) { - if ((typeof defaultValue === 'undefined' ? 'undefined' : (0, _typeof3['default'])(defaultValue)) === 'object') { - if (value !== defaultValue.enabled) { - this.changedOptions.push({ path: path, value: value }); - } - } else { - this.changedOptions.push({ path: path, value: value }); - } - } - } + // snapping times away from hidden zones + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.deltaDifference += delta; + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this._onDrag(event); + return; + } - var me = this; - checkbox.onchange = function () { - me._update(this.checked, path); - }; + this.previousDelta = delta; + this._applyRange(newStart, newEnd); - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, checkbox); - } + var startDate = new Date(this.start); + var endDate = new Date(this.end); - /** - * make a text input field for string options. - * @param defaultValue - * @param value - * @param path - * @private - */ + // fire a rangechange event + this.body.emitter.emit('rangechange', { + start: startDate, + end: endDate, + byUser: true, + event: event + }); - }, { - key: '_makeTextInput', - value: function _makeTextInput(defaultValue, value, path) { - var checkbox = document.createElement('input'); - checkbox.type = 'text'; - checkbox.className = 'vis-configuration vis-config-text'; - checkbox.value = value; - if (value !== defaultValue) { - this.changedOptions.push({ path: path, value: value }); - } + // fire a panmove event + this.body.emitter.emit('panmove'); + }; - var me = this; - checkbox.onchange = function () { - me._update(this.value, path); - }; + /** + * Stop dragging operation + * @param {event} event + * @private + */ + Range.prototype._onDragEnd = function (event) { + if (!this.props.touch.dragging) return; - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, checkbox); - } + // only allow dragging when configured as movable + if (!this.options.moveable) return; - /** - * make a color field with a color picker for color fields - * @param arr - * @param value - * @param path - * @private - */ + // TODO: this may be redundant in hammerjs2 + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - }, { - key: '_makeColorField', - value: function _makeColorField(arr, value, path) { - var _this4 = this; + this.props.touch.dragging = false; + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'auto'; + } - var defaultColor = arr[1]; - var div = document.createElement('div'); - value = value === undefined ? defaultColor : value; + // fire a rangechanged event + this.body.emitter.emit('rangechanged', { + start: new Date(this.start), + end: new Date(this.end), + byUser: true, + event: event + }); + }; - if (value !== 'none') { - div.className = 'vis-configuration vis-config-colorBlock'; - div.style.backgroundColor = value; - } else { - div.className = 'vis-configuration vis-config-colorBlock none'; - } + /** + * Event handler for mouse wheel event, used to zoom + * Code from http://adomas.org/javascript-mouse-wheel/ + * @param {Event} event + * @private + */ + Range.prototype._onMouseWheel = function (event) { + // 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; + } - value = value === undefined ? defaultColor : value; - div.onclick = function () { - _this4._showColorPicker(value, div, path); - }; + // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable + if (this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable || !this.options.zoomable && this.options.moveable) { + if (this.options.horizontalScroll) { + // Prevent default actions caused by mouse wheel + // (else the page and timeline both scroll) + event.preventDefault(); - var label = this._makeLabel(path[path.length - 1], path); - this._makeItem(path, label, div); + // calculate a single scroll jump relative to the range scale + var diff = delta * (this.end - this.start) / 20; + // calculate new start and end + var newStart = this.start - diff; + var newEnd = this.end - diff; + + var options = { + animation: false, + byUser: true, + event: event + }; + this.setRange(newStart, newEnd, options); } + return; + } - /** - * used by the color buttons to call the color picker. - * @param event - * @param value - * @param div - * @param path - * @private - */ + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - }, { - key: '_showColorPicker', - value: function _showColorPicker(value, div, path) { - var _this5 = this; - - // clear the callback from this div - div.onclick = function () {}; - - this.colorPicker.insertTo(div); - this.colorPicker.show(); + // only zoom when the mouse is inside the current range + if (!this._isInsideRange(event)) return; - this.colorPicker.setColor(value); - this.colorPicker.setUpdateCallback(function (color) { - var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')'; - div.style.backgroundColor = colorString; - _this5._update(colorString, path); - }); + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { + // perform the zoom action. Delta is normally 1 or -1 - // on close of the colorpicker, restore the callback. - this.colorPicker.setCloseCallback(function () { - div.onclick = function () { - _this5._showColorPicker(value, div, path); - }; - }); + // adjust a negative delta such that zooming in with delta 0.1 + // equals zooming out with a delta -0.1 + var scale; + if (delta < 0) { + scale = 1 - delta / 5; + } else { + scale = 1 / (1 + delta / 5); } - /** - * parse an object and draw the correct items - * @param obj - * @param path - * @private - */ - - }, { - key: '_handleObject', - value: function _handleObject(obj) { - var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var checkOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + // calculate center, the date to zoom around + var pointerDate; + if (this.rolling) { + pointerDate = this.start + (this.end - this.start) * this.options.rollingMode.offset; + } else { + var pointer = this.getPointer({ x: event.clientX, y: event.clientY }, this.body.dom.center); + pointerDate = this._pointerToDate(pointer); + } + this.zoom(scale, pointerDate, delta, event); - var show = false; - var filter = this.options.filter; - var visibleInSet = false; - for (var subObj in obj) { - if (obj.hasOwnProperty(subObj)) { - show = true; - var item = obj[subObj]; - var newPath = util.copyAndExtendArray(path, subObj); - if (typeof filter === 'function') { - show = filter(subObj, path); + // Prevent default actions caused by mouse wheel + // (else the page and timeline both scroll) + event.preventDefault(); + } + }; - // if needed we must go deeper into the object. - if (show === false) { - if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) { - this.allowCreation = false; - show = this._handleObject(item, newPath, true); - this.allowCreation = checkOnly === false; - } - } - } + /** + * Start of a touch gesture + * @private + */ + Range.prototype._onTouch = function (event) { + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.allowDragging = true; + this.props.touch.center = null; + this.scaleOffset = 0; + this.deltaDifference = 0; + }; - if (show !== false) { - visibleInSet = true; - var value = this._getValue(newPath); + /** + * Handle pinch event + * @param {Event} event + * @private + */ + Range.prototype._onPinch = function (event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - if (item instanceof Array) { - this._handleArray(item, value, newPath); - } else if (typeof item === 'string') { - this._makeTextInput(item, value, newPath); - } else if (typeof item === 'boolean') { - this._makeCheckbox(item, value, newPath); - } else if (item instanceof Object) { - // collapse the physics options that are not enabled - var draw = true; - if (path.indexOf('physics') !== -1) { - if (this.moduleOptions.physics.solver !== subObj) { - draw = false; - } - } + this.props.touch.allowDragging = false; - if (draw === true) { - // initially collapse options with an disabled enabled option. - if (item.enabled !== undefined) { - var enabledPath = util.copyAndExtendArray(newPath, 'enabled'); - var enabledValue = this._getValue(enabledPath); - if (enabledValue === true) { - var label = this._makeLabel(subObj, newPath, true); - this._makeItem(newPath, label); - visibleInSet = this._handleObject(item, newPath) || visibleInSet; - } else { - this._makeCheckbox(item, enabledValue, newPath); - } - } else { - var _label = this._makeLabel(subObj, newPath, true); - this._makeItem(newPath, _label); - visibleInSet = this._handleObject(item, newPath) || visibleInSet; - } - } - } else { - console.error('dont know how to handle', item, subObj, newPath); - } - } - } - } - return visibleInSet; - } + if (!this.props.touch.center) { + this.props.touch.center = this.getPointer(event.center, this.body.dom.center); + } - /** - * handle the array type of option - * @param optionName - * @param arr - * @param value - * @param path - * @private - */ + this.stopRolling(); - }, { - key: '_handleArray', - value: function _handleArray(arr, value, path) { - if (typeof arr[0] === 'string' && arr[0] === 'color') { - this._makeColorField(arr, value, path); - if (arr[1] !== value) { - this.changedOptions.push({ path: path, value: value }); - } - } else if (typeof arr[0] === 'string') { - this._makeDropdown(arr, value, path); - if (arr[0] !== value) { - this.changedOptions.push({ path: path, value: value }); - } - } else if (typeof arr[0] === 'number') { - this._makeRange(arr, value, path); - if (arr[0] !== value) { - this.changedOptions.push({ path: path, value: Number(value) }); - } - } - } + var scale = 1 / (event.scale + this.scaleOffset); + var centerDate = this._pointerToDate(this.props.touch.center); - /** - * called to update the network with the new settings. - * @param value - * @param path - * @private - */ + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - }, { - key: '_update', - value: function _update(value, path) { - var options = this._constructOptions(value, path); + // calculate new start and end + var newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; + var newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; - 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); - } - }, { - key: '_constructOptions', - value: function _constructOptions(value, path) { - var optionsObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + // snapping times away from hidden zones + this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times + this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times - var pointer = optionsObj; + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this.scaleOffset = 1 - event.scale; + newStart = safeStart; + newEnd = safeEnd; + } - // when dropdown boxes can be string or boolean, we typecast it into correct types - value = value === 'true' ? true : value; - value = value === 'false' ? false : value; + var options = { + animation: false, + byUser: true, + event: event + }; + this.setRange(newStart, newEnd, options); - for (var i = 0; i < path.length; i++) { - if (path[i] !== 'global') { - if (pointer[path[i]] === undefined) { - pointer[path[i]] = {}; - } - if (i !== path.length - 1) { - pointer = pointer[path[i]]; - } else { - pointer[path[i]] = value; - } - } - } - return optionsObj; - } - }, { - key: '_printOptions', - value: function _printOptions() { - var options = this.getOptions(); - this.optionsContainer.innerHTML = '
var options = ' + (0, _stringify2['default'])(options, null, 2) + '
'; - } - }, { - key: 'getOptions', - value: function getOptions() { - var options = {}; - for (var i = 0; i < this.changedOptions.length; i++) { - this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options); - } - return options; - } - }]); - return Configurator; - }(); + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default + }; - exports['default'] = Configurator; + /** + * Test whether the mouse from a mouse event is inside the visible window, + * between the current start and end date + * @param {Object} event + * @return {boolean} Returns true when inside the visible window + * @private + */ + Range.prototype._isInsideRange = function (event) { + // calculate the time where the mouse is, check whether inside + // and no scroll action should happen. + var clientX = event.center ? event.center.x : event.clientX; + if (this.options.rtl) { + var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer); + } else { + var x = util.getAbsoluteRight(this.body.dom.centerContainer) - clientX; + } + var time = this.body.util.toTime(x); -/***/ }, -/* 119 */ -/***/ function(module, exports) { + return time >= this.start && time <= this.end; + }; - "use strict"; + /** + * Helper function to calculate the center date for zooming + * @param {{x: Number, y: Number}} pointer + * @return {number} date + * @private + */ + Range.prototype._pointerToDate = function (pointer) { + var conversion; + var direction = this.options.direction; - exports.__esModule = true; + validateDirection(direction); - exports.default = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); + if (direction == 'horizontal') { + return this.body.util.toTime(pointer.x).valueOf(); + } else { + var height = this.body.domProps.center.height; + conversion = this.conversion(height); + return pointer.y / conversion.scale + conversion.offset; } }; -/***/ }, -/* 120 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - exports.__esModule = true; + /** + * Get the pointer location relative to the location of the dom element + * @param {{x: Number, y: Number}} touch + * @param {Element} element HTML DOM element + * @return {{x: Number, y: Number}} pointer + * @private + */ + Range.prototype.getPointer = function (touch, element) { + if (this.options.rtl) { + return { + x: util.getAbsoluteRight(element) - touch.x, + y: touch.y - util.getAbsoluteTop(element) + }; + } else { + return { + x: touch.x - util.getAbsoluteLeft(element), + y: touch.y - util.getAbsoluteTop(element) + }; + } + }; - var _defineProperty = __webpack_require__(121); + /** + * Zoom the range the given scale in or out. Start and end date will + * be adjusted, and the timeline will be redrawn. You can optionally give a + * date around which to zoom. + * For example, try scale = 0.9 or 1.1 + * @param {Number} scale Scaling factor. Values above 1 will zoom out, + * values below 1 will zoom in. + * @param {Number} [center] Value representing a date around which will + * be zoomed. + */ + Range.prototype.zoom = function (scale, center, delta, event) { + // if centerDate is not provided, take it half between start Date and end Date + if (center == null) { + center = (this.start + this.end) / 2; + } - var _defineProperty2 = _interopRequireDefault(_defineProperty); + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // calculate new start and end + var newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale; + var newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale; - exports.default = 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; - (0, _defineProperty2.default)(target, descriptor.key, descriptor); - } + // snapping times away from hidden zones + this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + newStart = safeStart; + newEnd = safeEnd; } - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; + var options = { + animation: false, + byUser: true, + event: event }; - }(); + this.setRange(newStart, newEnd, options); -/***/ }, -/* 121 */ -/***/ function(module, exports, __webpack_require__) { + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default + }; + + /** + * Move the range with a given delta to the left or right. Start and end + * value will be adjusted. For example, try delta = 0.1 or -0.1 + * @param {Number} delta Moving amount. Positive value will move right, + * negative value will move left + */ + Range.prototype.move = function (delta) { + // zoom start Date and end Date relative to the centerDate + var diff = this.end - this.start; - module.exports = { "default": __webpack_require__(122), __esModule: true }; + // apply new values + var newStart = this.start + diff * delta; + var newEnd = this.end + diff * delta; -/***/ }, -/* 122 */ -/***/ function(module, exports, __webpack_require__) { + // TODO: reckon with min and max range - __webpack_require__(123); - var $Object = __webpack_require__(17).Object; - module.exports = function defineProperty(it, key, desc){ - return $Object.defineProperty(it, key, desc); + this.start = newStart; + this.end = newEnd; }; -/***/ }, -/* 123 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Move the range to a new center point + * @param {Number} moveTo New center point of the range + */ + Range.prototype.moveTo = function (moveTo) { + var center = (this.start + this.end) / 2; - var $export = __webpack_require__(15); - // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) - $export($export.S + $export.F * !__webpack_require__(25), 'Object', {defineProperty: __webpack_require__(21).f}); + var diff = center - moveTo; -/***/ }, -/* 124 */ -/***/ function(module, exports, __webpack_require__) { + // calculate new start and end + var newStart = this.start - diff; + var newEnd = this.end - diff; + + var options = { + animation: false, + byUser: true, + event: null + }; + this.setRange(newStart, newEnd, options); + }; + + module.exports = Range; + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); + var Hammer = __webpack_require__(112); - var _stringify = __webpack_require__(90); + /** + * Register a touch event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) + */ + exports.onTouch = function (hammer, callback) { + callback.inputHandler = function (event) { + if (event.isFirst) { + callback(event); + } + }; - var _stringify2 = _interopRequireDefault(_stringify); + hammer.on('hammer.input', callback.inputHandler); + }; - var _classCallCheck2 = __webpack_require__(119); + /** + * Register a release event, taking place after a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) + */ + exports.onRelease = function (hammer, callback) { + callback.inputHandler = function (event) { + if (event.isFinal) { + callback(event); + } + }; - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + return hammer.on('hammer.input', callback.inputHandler); + }; - var _createClass2 = __webpack_require__(120); + /** + * Unregister a touch event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) + */ + exports.offTouch = function (hammer, callback) { + hammer.off('hammer.input', callback.inputHandler); + }; - var _createClass3 = _interopRequireDefault(_createClass2); + /** + * Unregister a release event, taking place before a gesture + * @param {Hammer} hammer A hammer instance + * @param {function} callback Callback, called as callback(event) + */ + exports.offRelease = exports.offTouch; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + /** + * Hack the PinchRecognizer such that it doesn't prevent default behavior + * for vertical panning. + * + * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932 + * + * @param {Hammer.Pinch} pinchRecognizer + * @return {Hammer.Pinch} returns the pinchRecognizer + */ + exports.disablePreventDefaultVertically = function (pinchRecognizer) { + var TOUCH_ACTION_PAN_Y = 'pan-y'; - var Hammer = __webpack_require__(112); - var hammerUtil = __webpack_require__(125); - var util = __webpack_require__(1); + pinchRecognizer.getTouchAction = function () { + // default method returns [TOUCH_ACTION_NONE] + return [TOUCH_ACTION_PAN_Y]; + }; - var ColorPicker = function () { - function ColorPicker() { - var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; - (0, _classCallCheck3['default'])(this, ColorPicker); + return pinchRecognizer; + }; - this.pixelRatio = pixelRatio; - this.generated = false; - this.centerCoordinates = { x: 289 / 2, y: 289 / 2 }; - this.r = 289 * 0.49; - this.color = { r: 255, g: 255, b: 255, a: 1.0 }; - this.hueCircle = undefined; - this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 }; - this.previousColor = undefined; - this.applied = false; +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { - // bound by - this.updateCallback = function () {}; - this.closeCallback = function () {}; + 'use strict'; - // create all DOM elements - this._create(); - } + var util = __webpack_require__(1); - /** - * this inserts the colorPicker into a div from the DOM - * @param container - */ - - - (0, _createClass3['default'])(ColorPicker, [{ - key: 'insertTo', - value: function insertTo(container) { - if (this.hammer !== undefined) { - this.hammer.destroy(); - this.hammer = undefined; - } - this.container = container; - this.container.appendChild(this.frame); - this._bindHammer(); + /** + * Prototype for visual components + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] + * @param {Object} [options] + */ + function Component(body, options) { + this.options = null; + this.props = null; + } - this._setSize(); - } + /** + * Set options for the component. The new options will be merged into the + * current options. + * @param {Object} options + */ + Component.prototype.setOptions = function (options) { + if (options) { + util.extend(this.options, options); + } + }; - /** - * the callback is executed on apply and save. Bind it to the application - * @param callback - */ + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + Component.prototype.redraw = function () { + // should be implemented by the component + return false; + }; - }, { - key: 'setUpdateCallback', - value: function setUpdateCallback(callback) { - if (typeof callback === 'function') { - this.updateCallback = callback; - } else { - throw new Error("Function attempted to set as colorPicker update callback is not a function."); - } - } + /** + * Destroy the component. Cleanup DOM and event listeners + */ + Component.prototype.destroy = function () { + // should be implemented by the component + }; - /** - * the callback is executed on apply and save. Bind it to the application - * @param callback - */ + /** + * Test whether the component is resized since the last time _isResized() was + * called. + * @return {Boolean} Returns true if the component is resized + * @protected + */ + Component.prototype._isResized = function () { + var resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height; - }, { - key: 'setCloseCallback', - value: function setCloseCallback(callback) { - if (typeof callback === 'function') { - this.closeCallback = callback; - } else { - throw new Error("Function attempted to set as colorPicker closing callback is not a function."); - } - } - }, { - key: '_isColorString', - value: function _isColorString(color) { - var htmlColors = { black: '#000000', navy: '#000080', darkblue: '#00008B', mediumblue: '#0000CD', blue: '#0000FF', darkgreen: '#006400', green: '#008000', teal: '#008080', darkcyan: '#008B8B', deepskyblue: '#00BFFF', darkturquoise: '#00CED1', mediumspringgreen: '#00FA9A', lime: '#00FF00', springgreen: '#00FF7F', aqua: '#00FFFF', cyan: '#00FFFF', midnightblue: '#191970', dodgerblue: '#1E90FF', lightseagreen: '#20B2AA', forestgreen: '#228B22', seagreen: '#2E8B57', darkslategray: '#2F4F4F', limegreen: '#32CD32', mediumseagreen: '#3CB371', turquoise: '#40E0D0', royalblue: '#4169E1', steelblue: '#4682B4', darkslateblue: '#483D8B', mediumturquoise: '#48D1CC', indigo: '#4B0082', darkolivegreen: '#556B2F', cadetblue: '#5F9EA0', cornflowerblue: '#6495ED', mediumaquamarine: '#66CDAA', dimgray: '#696969', slateblue: '#6A5ACD', olivedrab: '#6B8E23', slategray: '#708090', lightslategray: '#778899', mediumslateblue: '#7B68EE', lawngreen: '#7CFC00', chartreuse: '#7FFF00', aquamarine: '#7FFFD4', maroon: '#800000', purple: '#800080', olive: '#808000', gray: '#808080', skyblue: '#87CEEB', lightskyblue: '#87CEFA', blueviolet: '#8A2BE2', darkred: '#8B0000', darkmagenta: '#8B008B', saddlebrown: '#8B4513', darkseagreen: '#8FBC8F', lightgreen: '#90EE90', mediumpurple: '#9370D8', darkviolet: '#9400D3', palegreen: '#98FB98', darkorchid: '#9932CC', yellowgreen: '#9ACD32', sienna: '#A0522D', brown: '#A52A2A', darkgray: '#A9A9A9', lightblue: '#ADD8E6', greenyellow: '#ADFF2F', paleturquoise: '#AFEEEE', lightsteelblue: '#B0C4DE', powderblue: '#B0E0E6', firebrick: '#B22222', darkgoldenrod: '#B8860B', mediumorchid: '#BA55D3', rosybrown: '#BC8F8F', darkkhaki: '#BDB76B', silver: '#C0C0C0', mediumvioletred: '#C71585', indianred: '#CD5C5C', peru: '#CD853F', chocolate: '#D2691E', tan: '#D2B48C', lightgrey: '#D3D3D3', palevioletred: '#D87093', thistle: '#D8BFD8', orchid: '#DA70D6', goldenrod: '#DAA520', crimson: '#DC143C', gainsboro: '#DCDCDC', plum: '#DDA0DD', burlywood: '#DEB887', lightcyan: '#E0FFFF', lavender: '#E6E6FA', darksalmon: '#E9967A', violet: '#EE82EE', palegoldenrod: '#EEE8AA', lightcoral: '#F08080', khaki: '#F0E68C', aliceblue: '#F0F8FF', honeydew: '#F0FFF0', azure: '#F0FFFF', sandybrown: '#F4A460', wheat: '#F5DEB3', beige: '#F5F5DC', whitesmoke: '#F5F5F5', mintcream: '#F5FFFA', ghostwhite: '#F8F8FF', salmon: '#FA8072', antiquewhite: '#FAEBD7', linen: '#FAF0E6', lightgoldenrodyellow: '#FAFAD2', oldlace: '#FDF5E6', red: '#FF0000', fuchsia: '#FF00FF', magenta: '#FF00FF', deeppink: '#FF1493', orangered: '#FF4500', tomato: '#FF6347', hotpink: '#FF69B4', coral: '#FF7F50', darkorange: '#FF8C00', lightsalmon: '#FFA07A', orange: '#FFA500', lightpink: '#FFB6C1', pink: '#FFC0CB', gold: '#FFD700', peachpuff: '#FFDAB9', navajowhite: '#FFDEAD', moccasin: '#FFE4B5', bisque: '#FFE4C4', mistyrose: '#FFE4E1', blanchedalmond: '#FFEBCD', papayawhip: '#FFEFD5', lavenderblush: '#FFF0F5', seashell: '#FFF5EE', cornsilk: '#FFF8DC', lemonchiffon: '#FFFACD', floralwhite: '#FFFAF0', snow: '#FFFAFA', yellow: '#FFFF00', lightyellow: '#FFFFE0', ivory: '#FFFFF0', white: '#FFFFFF' }; - if (typeof color === 'string') { - return htmlColors[color]; - } - } + this.props._previousWidth = this.props.width; + this.props._previousHeight = this.props.height; - /** - * Set the color of the colorPicker - * Supported formats: - * 'red' --> HTML color string - * '#ffffff' --> hex string - * 'rbg(255,255,255)' --> rgb string - * 'rgba(255,255,255,1.0)' --> rgba string - * {r:255,g:255,b:255} --> rgb object - * {r:255,g:255,b:255,a:1.0} --> rgba object - * @param color - * @param setInitial - */ + return resized; + }; - }, { - key: 'setColor', - value: function setColor(color) { - var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + module.exports = Component; - if (color === 'none') { - return; - } +/***/ }), +/* 121 */ +/***/ (function(module, exports) { - var rgba = void 0; + "use strict"; - // if a html color shorthand is used, convert to hex - var htmlColor = this._isColorString(color); - if (htmlColor !== undefined) { - color = htmlColor; - } + /** + * used in Core to convert the options into a volatile variable + * + * @param {function} moment + * @param {Object} body + * @param {Array | Object} hiddenDates + */ + exports.convertHiddenOptions = function (moment, body, hiddenDates) { + if (hiddenDates && !Array.isArray(hiddenDates)) { + return exports.convertHiddenOptions(moment, body, [hiddenDates]); + } - // check format - if (util.isString(color) === true) { - if (util.isValidRGB(color) === true) { - var rgbaArray = color.substr(4).substr(0, color.length - 5).split(','); - rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 }; - } else if (util.isValidRGBA(color) === true) { - var _rgbaArray = color.substr(5).substr(0, color.length - 6).split(','); - rgba = { r: _rgbaArray[0], g: _rgbaArray[1], b: _rgbaArray[2], a: _rgbaArray[3] }; - } else if (util.isValidHex(color) === true) { - var rgbObj = util.hexToRGB(color); - rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 }; - } - } else { - if (color instanceof Object) { - if (color.r !== undefined && color.g !== undefined && color.b !== undefined) { - var alpha = color.a !== undefined ? color.a : '1.0'; - rgba = { r: color.r, g: color.g, b: color.b, a: alpha }; - } + body.hiddenDates = []; + if (hiddenDates) { + if (Array.isArray(hiddenDates) == true) { + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat === undefined) { + var dateItem = {}; + dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); + dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); + body.hiddenDates.push(dateItem); } } - - // set color - if (rgba === undefined) { - throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: " + (0, _stringify2['default'])(color)); - } else { - this._setColor(rgba, setInitial); - } + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time } + } + }; - /** - * this shows the color picker. - * The hue circle is constructed once and stored. - */ + /** + * create new entrees for the repeating hidden dates + * @param {function} moment + * @param {Object} body + * @param {Array | Object} hiddenDates + */ + exports.updateHiddenDates = function (moment, body, hiddenDates) { + if (hiddenDates && !Array.isArray(hiddenDates)) { + return exports.updateHiddenDates(moment, body, [hiddenDates]); + } - }, { - key: 'show', - value: function show() { - if (this.closeCallback !== undefined) { - this.closeCallback(); - this.closeCallback = undefined; - } + if (hiddenDates && body.domProps.centerContainer.width !== undefined) { + exports.convertHiddenOptions(moment, body, hiddenDates); - this.applied = false; - this.frame.style.display = 'block'; - this._generateHueCircle(); - } + var start = moment(body.range.start); + var end = moment(body.range.end); - // ------------------------------------------ PRIVATE ----------------------------- // + var totalRange = body.range.end - body.range.start; + var pixelTime = totalRange / body.domProps.centerContainer.width; - /** - * Hide the picker. Is called by the cancel button. - * Optional boolean to store the previous color for easy access later on. - * @param storePrevious - * @private - */ + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat !== undefined) { + var startDate = moment(hiddenDates[i].start); + var endDate = moment(hiddenDates[i].end); - }, { - key: '_hide', - value: function _hide() { - var _this = this; + if (startDate._d == "Invalid Date") { + throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); + } + if (endDate._d == "Invalid Date") { + throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); + } - var storePrevious = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var duration = endDate - startDate; + if (duration >= 4 * pixelTime) { - // store the previous color for next time; - if (storePrevious === true) { - this.previousColor = util.extend({}, this.color); - } + var offset = 0; + var runUntil = end.clone(); + switch (hiddenDates[i].repeat) { + case "daily": + // case of time + if (startDate.day() != endDate.day()) { + offset = 1; + } + startDate.dayOfYear(start.dayOfYear()); + startDate.year(start.year()); + startDate.subtract(7, 'days'); - if (this.applied === true) { - this.updateCallback(this.initialColor); - } + endDate.dayOfYear(start.dayOfYear()); + endDate.year(start.year()); + endDate.subtract(7 - offset, 'days'); - this.frame.style.display = 'none'; + runUntil.add(1, 'weeks'); + break; + case "weekly": + var dayOffset = endDate.diff(startDate, 'days'); + var day = startDate.day(); - // call the closing callback, restoring the onclick method. - // this is in a setTimeout because it will trigger the show again before the click is done. - setTimeout(function () { - if (_this.closeCallback !== undefined) { - _this.closeCallback(); - _this.closeCallback = undefined; - } - }, 0); - } + // set the start date to the range.start + startDate.date(start.date()); + startDate.month(start.month()); + startDate.year(start.year()); + endDate = startDate.clone(); - /** - * bound to the save button. Saves and hides. - * @private - */ + // force + startDate.day(day); + endDate.day(day); + endDate.add(dayOffset, 'days'); - }, { - key: '_save', - value: function _save() { - this.updateCallback(this.color); - this.applied = false; - this._hide(); - } + startDate.subtract(1, 'weeks'); + endDate.subtract(1, 'weeks'); - /** - * Bound to apply button. Saves but does not close. Is undone by the cancel button. - * @private - */ + runUntil.add(1, 'weeks'); + break; + case "monthly": + if (startDate.month() != endDate.month()) { + offset = 1; + } + startDate.month(start.month()); + startDate.year(start.year()); + startDate.subtract(1, 'months'); - }, { - key: '_apply', - value: function _apply() { - this.applied = true; - this.updateCallback(this.color); - this._updatePicker(this.color); - } + endDate.month(start.month()); + endDate.year(start.year()); + endDate.subtract(1, 'months'); + endDate.add(offset, 'months'); - /** - * load the color from the previous session. - * @private - */ + runUntil.add(1, 'months'); + break; + case "yearly": + if (startDate.year() != endDate.year()) { + offset = 1; + } + startDate.year(start.year()); + startDate.subtract(1, 'years'); + endDate.year(start.year()); + endDate.subtract(1, 'years'); + endDate.add(offset, 'years'); - }, { - key: '_loadLast', - value: function _loadLast() { - if (this.previousColor !== undefined) { - this.setColor(this.previousColor, false); - } else { - alert("There is no last color to load..."); + runUntil.add(1, 'years'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + while (startDate < runUntil) { + body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); + switch (hiddenDates[i].repeat) { + case "daily": + startDate.add(1, 'days'); + endDate.add(1, 'days'); + break; + case "weekly": + startDate.add(1, 'weeks'); + endDate.add(1, 'weeks'); + break; + case "monthly": + startDate.add(1, 'months'); + endDate.add(1, 'months'); + break; + case "yearly": + startDate.add(1, 'y'); + endDate.add(1, 'y'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + } + body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); + } } } + // remove duplicates, merge where possible + exports.removeDuplicates(body); + // ensure the new positions are not on hidden dates + var startHidden = exports.isHidden(body.range.start, body.hiddenDates); + var endHidden = exports.isHidden(body.range.end, body.hiddenDates); + var rangeStart = body.range.start; + var rangeEnd = body.range.end; + if (startHidden.hidden == true) { + rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1; + } + if (endHidden.hidden == true) { + rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1; + } + if (startHidden.hidden == true || endHidden.hidden == true) { + body.range._applyRange(rangeStart, rangeEnd); + } + } + }; - /** - * set the color, place the picker - * @param rgba - * @param setInitial - * @private - */ - - }, { - key: '_setColor', - value: function _setColor(rgba) { - var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - // store the initial color - if (setInitial === true) { - this.initialColor = util.extend({}, rgba); + /** + * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. + * Scales with N^2 + * @param body + */ + exports.removeDuplicates = function (body) { + var hiddenDates = body.hiddenDates; + var safeDates = []; + for (var i = 0; i < hiddenDates.length; i++) { + for (var j = 0; j < hiddenDates.length; j++) { + if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { + // j inside i + if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[j].remove = true; + } + // j start inside i + else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { + hiddenDates[i].end = hiddenDates[j].end; + hiddenDates[j].remove = true; + } + // j end inside i + else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[i].start = hiddenDates[j].start; + hiddenDates[j].remove = true; + } } + } + } - this.color = rgba; - var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - - var angleConvert = 2 * Math.PI; - var radius = this.r * hsv.s; - var x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h); - var y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h); - - this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px'; - this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - - this._updatePicker(rgba); + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].remove !== true) { + safeDates.push(hiddenDates[i]); } + } - /** - * bound to opacity control - * @param value - * @private - */ + body.hiddenDates = safeDates; + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time + }; - }, { - key: '_setOpacity', - value: function _setOpacity(value) { - this.color.a = value / 100; - this._updatePicker(this.color); - } + exports.printDates = function (dates) { + for (var i = 0; i < dates.length; i++) { + console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); + } + }; - /** - * bound to brightness control - * @param value - * @private - */ + /** + * Used in TimeStep to avoid the hidden times. + * @param {function} moment + * @param {TimeStep} timeStep + * @param previousTime + */ + exports.stepOverHiddenDates = function (moment, timeStep, previousTime) { + var stepInHidden = false; + var currentValue = timeStep.current.valueOf(); + for (var i = 0; i < timeStep.hiddenDates.length; i++) { + var startDate = timeStep.hiddenDates[i].start; + var endDate = timeStep.hiddenDates[i].end; + if (currentValue >= startDate && currentValue < endDate) { + stepInHidden = true; + break; + } + } - }, { - key: '_setBrightness', - value: function _setBrightness(value) { - var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); - hsv.v = value / 100; - var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); - rgba['a'] = this.color.a; - this.color = rgba; - this._updatePicker(); + if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { + var prevValue = moment(previousTime); + var newValue = moment(endDate); + //check if the next step should be major + if (prevValue.year() != newValue.year()) { + timeStep.switchedYear = true; + } else if (prevValue.month() != newValue.month()) { + timeStep.switchedMonth = true; + } else if (prevValue.dayOfYear() != newValue.dayOfYear()) { + timeStep.switchedDay = true; } - /** - * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing. - * @param rgba - * @private - */ + timeStep.current = newValue; + } + }; - }, { - key: '_updatePicker', - value: function _updatePicker() { - var rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.color; + ///** + // * Used in TimeStep to avoid the hidden times. + // * @param timeStep + // * @param previousTime + // */ + //exports.checkFirstStep = function(timeStep) { + // var stepInHidden = false; + // var currentValue = timeStep.current.valueOf(); + // for (var i = 0; i < timeStep.hiddenDates.length; i++) { + // var startDate = timeStep.hiddenDates[i].start; + // var endDate = timeStep.hiddenDates[i].end; + // if (currentValue >= startDate && currentValue < endDate) { + // stepInHidden = true; + // break; + // } + // } + // + // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { + // var newValue = moment(endDate); + // timeStep.current = newValue.toDate(); + // } + //}; - var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - var ctx = this.colorPickerCanvas.getContext('2d'); - if (this.pixelRation === undefined) { - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - } - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + /** + * replaces the Core toScreen methods + * @param Core + * @param time + * @param width + * @returns {number} + */ + exports.toScreen = function (Core, time, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return (time.valueOf() - conversion.offset) * conversion.scale; + } else { + var hidden = exports.isHidden(time, Core.body.hiddenDates); + if (hidden.hidden == true) { + time = hidden.startDate; + } - // clear the canvas - var w = this.colorPickerCanvas.clientWidth; - var h = this.colorPickerCanvas.clientHeight; - ctx.clearRect(0, 0, w, h); + var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + if (time < Core.range.start) { + var conversion = Core.range.conversion(width, duration); + var hiddenBeforeStart = exports.getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset); + time = Core.options.moment(time).toDate().valueOf(); + time = time + hiddenBeforeStart; + return -(conversion.offset - time.valueOf()) * conversion.scale; + } else if (time > Core.range.end) { + var rangeAfterEnd = { start: Core.range.start, end: time }; + time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time); + var conversion = Core.range.conversion(width, duration); + return (time.valueOf() - conversion.offset) * conversion.scale; + } else { + time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time); + var conversion = Core.range.conversion(width, duration); + return (time.valueOf() - conversion.offset) * conversion.scale; + } + } + }; - ctx.putImageData(this.hueCircle, 0, 0); - ctx.fillStyle = 'rgba(0,0,0,' + (1 - hsv.v) + ')'; - ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); - ctx.fill(); + /** + * Replaces the core toTime methods + * @param body + * @param range + * @param x + * @param width + * @returns {Date} + */ + exports.toTime = function (Core, x, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return new Date(x / conversion.scale + conversion.offset); + } else { + var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + var totalDuration = Core.range.end - Core.range.start - hiddenDuration; + var partialDuration = totalDuration * x / width; + var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); - this.brightnessRange.value = 100 * hsv.v; - this.opacityRange.value = 100 * rgba.a; + var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); + return newTime; + } + }; - 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 + ')'; + /** + * Support function + * + * @param hiddenDates + * @param range + * @returns {number} + */ + exports.getHiddenDurationBetween = function (hiddenDates, start, end) { + var duration = 0; + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= start && endDate < end) { + duration += endDate - startDate; } + } + return duration; + }; - /** - * used by create to set the size of the canvas. - * @private - */ - - }, { - key: '_setSize', - value: function _setSize() { - this.colorPickerCanvas.style.width = '100%'; - this.colorPickerCanvas.style.height = '100%'; + /** + * Support function + * + * @param hiddenDates + * @param start + * @param end + * @returns {number} + */ + exports.getHiddenDurationBeforeStart = function (hiddenDates, start, end) { + var duration = 0; + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; - this.colorPickerCanvas.width = 289 * this.pixelRatio; - this.colorPickerCanvas.height = 289 * this.pixelRatio; + if (startDate >= start && endDate <= end) { + duration += endDate - startDate; } + } + return duration; + }; - /** - * create all dom elements - * TODO: cleanup, lots of similar dom elements - * @private - */ - - }, { - key: '_create', - value: function _create() { - this.frame = document.createElement('div'); - this.frame.className = 'vis-color-picker'; + /** + * Support function + * @param moment + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} + */ + exports.correctTimeForHidden = function (moment, hiddenDates, range, time) { + time = moment(time).toDate().valueOf(); + time -= exports.getHiddenDurationBefore(moment, hiddenDates, range, time); + return time; + }; - this.colorPickerDiv = document.createElement('div'); - this.colorPickerSelector = document.createElement('div'); - this.colorPickerSelector.className = 'vis-selector'; - this.colorPickerDiv.appendChild(this.colorPickerSelector); + exports.getHiddenDurationBefore = function (moment, hiddenDates, range, time) { + var timeOffset = 0; + time = moment(time).toDate().valueOf(); - this.colorPickerCanvas = document.createElement('canvas'); - this.colorPickerDiv.appendChild(this.colorPickerCanvas); + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + if (time >= endDate) { + timeOffset += endDate - startDate; + } + } + } + return timeOffset; + }; - if (!this.colorPickerCanvas.getContext) { - var noCanvas = document.createElement('DIV'); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold'; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.colorPickerCanvas.appendChild(noCanvas); + /** + * sum the duration from start to finish, including the hidden duration, + * until the required amount has been reached, return the accumulated hidden duration + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} + */ + exports.getAccumulatedHiddenDuration = function (hiddenDates, range, requiredDuration) { + var hiddenDuration = 0; + var duration = 0; + var previousPoint = range.start; + //exports.printDates(hiddenDates) + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + duration += startDate - previousPoint; + previousPoint = endDate; + if (duration >= requiredDuration) { + break; } else { - var ctx = this.colorPickerCanvas.getContext("2d"); - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + hiddenDuration += endDate - startDate; + } + } + } - this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + return hiddenDuration; + }; + + /** + * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true + * @param hiddenDates + * @param time + * @param direction + * @param correctionEnabled + * @returns {*} + */ + exports.snapAwayFromHidden = function (hiddenDates, time, direction, correctionEnabled) { + var isHidden = exports.isHidden(time, hiddenDates); + if (isHidden.hidden == true) { + if (direction < 0) { + if (correctionEnabled == true) { + return isHidden.startDate - (isHidden.endDate - time) - 1; + } else { + return isHidden.startDate - 1; } + } else { + if (correctionEnabled == true) { + return isHidden.endDate + (time - isHidden.startDate) + 1; + } else { + return isHidden.endDate + 1; + } + } + } else { + return time; + } + }; - this.colorPickerDiv.className = 'vis-color'; + /** + * Check if a time is hidden + * + * @param time + * @param hiddenDates + * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} + */ + exports.isHidden = function (time, hiddenDates) { + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; - this.opacityDiv = document.createElement('div'); - this.opacityDiv.className = 'vis-opacity'; + if (time >= startDate && time < endDate) { + // if the start is entering a hidden zone + return { hidden: true, startDate: startDate, endDate: endDate }; + } + } + return { hidden: false, startDate: startDate, endDate: endDate }; + }; - this.brightnessDiv = document.createElement('div'); - this.brightnessDiv.className = 'vis-brightness'; +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { - this.arrowDiv = document.createElement('div'); - this.arrowDiv.className = 'vis-arrow'; + 'use strict'; - this.opacityRange = document.createElement('input'); - try { - this.opacityRange.type = 'range'; // Not supported on IE9 - this.opacityRange.min = '0'; - this.opacityRange.max = '100'; - } catch (err) {} - this.opacityRange.value = '100'; - this.opacityRange.className = 'vis-range'; + var _stringify = __webpack_require__(90); - this.brightnessRange = document.createElement('input'); - try { - this.brightnessRange.type = 'range'; // Not supported on IE9 - this.brightnessRange.min = '0'; - this.brightnessRange.max = '100'; - } catch (err) {} - this.brightnessRange.value = '100'; - this.brightnessRange.className = 'vis-range'; + var _stringify2 = _interopRequireDefault(_stringify); - this.opacityDiv.appendChild(this.opacityRange); - this.brightnessDiv.appendChild(this.brightnessRange); + var _typeof2 = __webpack_require__(62); - var me = this; - this.opacityRange.onchange = function () { - me._setOpacity(this.value); - }; - this.opacityRange.oninput = function () { - me._setOpacity(this.value); - }; - this.brightnessRange.onchange = function () { - me._setBrightness(this.value); - }; - this.brightnessRange.oninput = function () { - me._setBrightness(this.value); - }; + var _typeof3 = _interopRequireDefault(_typeof2); - this.brightnessLabel = document.createElement("div"); - this.brightnessLabel.className = "vis-label vis-brightness"; - this.brightnessLabel.innerHTML = 'brightness:'; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - this.opacityLabel = document.createElement("div"); - this.opacityLabel.className = "vis-label vis-opacity"; - this.opacityLabel.innerHTML = 'opacity:'; + var Emitter = __webpack_require__(99); + var Hammer = __webpack_require__(112); + var hammerUtil = __webpack_require__(119); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); + var Range = __webpack_require__(118); + var ItemSet = __webpack_require__(123); + var TimeAxis = __webpack_require__(139); + var Activator = __webpack_require__(140); + var DateUtil = __webpack_require__(121); + var CustomTime = __webpack_require__(141); - this.newColorDiv = document.createElement("div"); - this.newColorDiv.className = "vis-new-color"; - this.newColorDiv.innerHTML = 'new'; + /** + * Create a timeline visualization + * @constructor + */ + function Core() {} - this.initialColorDiv = document.createElement("div"); - this.initialColorDiv.className = "vis-initial-color"; - this.initialColorDiv.innerHTML = 'initial'; + // turn Core into an event emitter + Emitter(Core.prototype); - this.cancelButton = document.createElement("div"); - this.cancelButton.className = "vis-button vis-cancel"; - this.cancelButton.innerHTML = 'cancel'; - this.cancelButton.onclick = this._hide.bind(this, false); + /** + * Create the main DOM for the Core: a root panel containing left, right, + * top, bottom, content, and background panel. + * @param {Element} container The container element where the Core will + * be attached. + * @protected + */ + Core.prototype._create = function (container) { + this.dom = {}; - this.applyButton = document.createElement("div"); - this.applyButton.className = "vis-button vis-apply"; - this.applyButton.innerHTML = 'apply'; - this.applyButton.onclick = this._apply.bind(this); + this.dom.container = container; - this.saveButton = document.createElement("div"); - this.saveButton.className = "vis-button vis-save"; - this.saveButton.innerHTML = 'save'; - this.saveButton.onclick = this._save.bind(this); + 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.rollingModeBtn = document.createElement('div'); - this.loadButton = document.createElement("div"); - this.loadButton.className = "vis-button vis-load"; - this.loadButton.innerHTML = 'load last'; - this.loadButton.onclick = this._loadLast.bind(this); + 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.rollingModeBtn.className = 'vis-rolling-mode-btn'; - this.frame.appendChild(this.colorPickerDiv); - this.frame.appendChild(this.arrowDiv); - this.frame.appendChild(this.brightnessLabel); - this.frame.appendChild(this.brightnessDiv); - this.frame.appendChild(this.opacityLabel); - this.frame.appendChild(this.opacityDiv); - this.frame.appendChild(this.newColorDiv); - this.frame.appendChild(this.initialColorDiv); + this.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.root.appendChild(this.dom.bottom); + this.dom.root.appendChild(this.dom.rollingModeBtn); - this.frame.appendChild(this.cancelButton); - this.frame.appendChild(this.applyButton); - this.frame.appendChild(this.saveButton); - this.frame.appendChild(this.loadButton); - } + 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); - /** - * bind hammer to the color picker - * @private - */ + // size properties of each of the panels + this.props = { + root: {}, + background: {}, + centerContainer: {}, + leftContainer: {}, + rightContainer: {}, + center: {}, + left: {}, + right: {}, + top: {}, + bottom: {}, + border: {}, + scrollTop: 0, + scrollTopMin: 0 + }; - }, { - key: '_bindHammer', - value: function _bindHammer() { - var _this2 = this; + this.on('rangechange', function () { + if (this.initialDrawDone === true) { + this._redraw(); + } + }.bind(this)); + this.on('touch', this._onTouch.bind(this)); + this.on('panmove', this._onDrag.bind(this)); - this.drag = {}; - this.pinch = {}; - this.hammer = new Hammer(this.colorPickerCanvas); - this.hammer.get('pinch').set({ enable: true }); + var me = this; + this._origRedraw = this._redraw.bind(this); + this._redraw = util.throttle(this._origRedraw); - hammerUtil.onTouch(this.hammer, function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('tap', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panstart', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panmove', function (event) { - _this2._moveSelector(event); - }); - this.hammer.on('panend', function (event) { - _this2._moveSelector(event); - }); + this.on('_change', function (properties) { + if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) { + me._redraw(); + } else { + me._origRedraw(); } + }); - /** - * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown. - * @private - */ + // create event listeners for all interesting events, these events will be + // emitted via emitter + this.hammer = new Hammer(this.dom.root); + var pinchRecognizer = this.hammer.get('pinch').set({ enable: true }); + hammerUtil.disablePreventDefaultVertically(pinchRecognizer); + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); + this.listeners = {}; - }, { - key: '_generateHueCircle', - value: function _generateHueCircle() { - if (this.generated === false) { - var ctx = this.colorPickerCanvas.getContext('2d'); - if (this.pixelRation === undefined) { - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - } - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend' + // TODO: cleanup + //'touch', 'pinch', + //'tap', 'doubletap', 'hold', + //'dragstart', 'drag', 'dragend', + //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox + ]; + events.forEach(function (type) { + var listener = function listener(event) { + if (me.isActive()) { + me.emit(type, event); + } + }; + me.hammer.on(type, listener); + me.listeners[type] = listener; + }); - // clear the canvas - var w = this.colorPickerCanvas.clientWidth; - var h = this.colorPickerCanvas.clientHeight; - ctx.clearRect(0, 0, w, h); + // emulate a touch event (emitted before the start of a pan, pinch, tap, or press) + hammerUtil.onTouch(this.hammer, function (event) { + me.emit('touch', event); + }.bind(this)); - // draw hue circle - var x = void 0, - y = void 0, - hue = void 0, - sat = void 0; - this.centerCoordinates = { x: w * 0.5, y: h * 0.5 }; - this.r = 0.49 * w; - var angleConvert = 2 * Math.PI / 360; - var hfac = 1 / 360; - var sfac = 1 / this.r; - var rgb = void 0; - for (hue = 0; hue < 360; hue++) { - for (sat = 0; sat < this.r; sat++) { - x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue); - y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue); - rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1); - ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')'; - ctx.fillRect(x - 0.5, y - 0.5, 2, 2); - } - } - ctx.strokeStyle = 'rgba(0,0,0,1)'; - ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); - ctx.stroke(); + // emulate a release event (emitted after a pan, pinch, tap, or press) + hammerUtil.onRelease(this.hammer, function (event) { + me.emit('release', event); + }.bind(this)); - this.hueCircle = ctx.getImageData(0, 0, w, h); - } - this.generated = true; + function onMouseWheel(event) { + if (this.isActive()) { + this.emit('mousewheel', event); } - /** - * move the selector. This is called by hammer functions. - * - * @param event - * @private - */ - - }, { - key: '_moveSelector', - value: function _moveSelector(event) { - var rect = this.colorPickerDiv.getBoundingClientRect(); - var left = event.center.x - rect.left; - var top = event.center.y - rect.top; + // prevent scrolling if not specified explicitly or when horizontalScroll is true + if (!this.options.verticalScroll || this.options.horizontalScroll) return; - var centerY = 0.5 * this.colorPickerDiv.clientHeight; - var centerX = 0.5 * this.colorPickerDiv.clientWidth; + // prevent scrolling when zoomKey defined or activated + if (!this.options.zoomKey || event[this.options.zoomKey]) return; - var x = left - centerX; - var y = top - centerY; + // Prevent default actions caused by mouse wheel + // (else the page and timeline both scroll) + event.preventDefault(); - var angle = Math.atan2(x, y); - var radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX); + 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 newTop = Math.cos(angle) * radius + centerY; - var newLeft = Math.sin(angle) * radius + centerX; + var current = this.props.scrollTop; + var adjusted = current + delta * 120; - this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px'; + if (this.isActive()) { + this._setScrollTop(adjusted); + this._redraw(); + this.emit('scroll', event); + } + } - // set color - var h = angle / (2 * Math.PI); - h = h < 0 ? h + 1 : h; - var s = radius / this.r; - var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); - hsv.h = h; - hsv.s = s; - var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); - rgba['a'] = this.color.a; - this.color = rgba; + if (this.dom.centerContainer.addEventListener) { + // IE9, Chrome, Safari, Opera + this.dom.centerContainer.addEventListener("mousewheel", onMouseWheel.bind(this), false); + // Firefox + this.dom.centerContainer.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); + } else { + // IE 6/7/8 + this.dom.centerContainer.attachEvent("onmousewheel", onMouseWheel.bind(this)); + } - // update previews - this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; - this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; + function onMouseScrollSide(event) { + if (!me.options.verticalScroll) return; + event.preventDefault(); + if (me.isActive()) { + var adjusted = -event.target.scrollTop; + me._setScrollTop(adjusted); + me._redraw(); + me.emit('scrollSide', event); } - }]); - return ColorPicker; - }(); + } - exports['default'] = ColorPicker; + this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); + this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); -/***/ }, -/* 125 */ -/***/ function(module, exports, __webpack_require__) { + var itemAddedToTimeline = false; - 'use strict'; + function handleDragOver(event) { + if (event.preventDefault) { + event.preventDefault(); // Necessary. Allows us to drop. + } - var Hammer = __webpack_require__(112); + // make sure your target is a vis element + if (!event.target.className.indexOf("vis") > -1) return; - /** - * Register a touch event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.onTouch = function (hammer, callback) { - callback.inputHandler = function (event) { - if (event.isFirst) { - callback(event); - } - }; + // make sure only one item is added every time you're over the timeline + if (itemAddedToTimeline) return; - hammer.on('hammer.input', callback.inputHandler); - }; + event.dataTransfer.dropEffect = 'move'; + itemAddedToTimeline = true; + return false; + } - /** - * Register a release event, taking place after a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.onRelease = function (hammer, callback) { - callback.inputHandler = function (event) { - if (event.isFinal) { - callback(event); + function handleDrop(event) { + // prevent redirect to blank page - Firefox + if (event.preventDefault) { + event.preventDefault(); + } + if (event.stopPropagation) { + event.stopPropagation(); + } + // return when dropping non-vis items + try { + var itemData = JSON.parse(event.dataTransfer.getData("text")); + if (!itemData.content) return; + } catch (err) { + return false; } - }; - return hammer.on('hammer.input', callback.inputHandler); - }; + itemAddedToTimeline = false; + event.center = { + x: event.clientX, + y: event.clientY + }; + me.itemSet._onAddItem(event); + me.emit('drop', me.getEventProperties(event)); + return false; + } - /** - * Unregister a touch event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.offTouch = function (hammer, callback) { - hammer.off('hammer.input', callback.inputHandler); - }; + this.dom.center.addEventListener('dragover', handleDragOver.bind(this), false); + this.dom.center.addEventListener('drop', handleDrop.bind(this), false); - /** - * Unregister a release event, taking place before a gesture - * @param {Hammer} hammer A hammer instance - * @param {function} callback Callback, called as callback(event) - */ - exports.offRelease = exports.offTouch; + this.customTimes = []; - /** - * Hack the PinchRecognizer such that it doesn't prevent default behavior - * for vertical panning. - * - * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932 - * - * @param {Hammer.Pinch} pinchRecognizer - * @return {Hammer.Pinch} returns the pinchRecognizer - */ - exports.disablePreventDefaultVertically = function (pinchRecognizer) { - var TOUCH_ACTION_PAN_Y = 'pan-y'; + // store state information needed for touch events + this.touch = {}; - pinchRecognizer.getTouchAction = function () { - // default method returns [TOUCH_ACTION_NONE] - return [TOUCH_ACTION_PAN_Y]; - }; + this.redrawCount = 0; + this.initialDrawDone = false; - return pinchRecognizer; + // attach the root panel to the provided container + if (!container) throw new Error('No container provided'); + container.appendChild(this.dom.root); }; -/***/ }, -/* 126 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Set options. Options will be passed to all components loaded in the Timeline. + * @param {Object} [options] + * {String} orientation + * Vertical orientation for the Timeline, + * can be 'bottom' (default) or 'top'. + * {String | Number} width + * Width for the timeline, a number in pixels or + * a css string like '1000px' or '75%'. '100%' by default. + * {String | Number} height + * Fixed height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. If undefined, + * The Timeline will automatically size such that + * its contents fit. + * {String | Number} minHeight + * Minimum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {String | Number} maxHeight + * Maximum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {Number | Date | String} start + * Start date for the visible window + * {Number | Date | String} end + * End date for the visible window + */ + Core.prototype.setOptions = function (options) { + if (options) { + // copy the known options + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment', 'rtl', 'zoomKey', 'horizontalScroll', 'verticalScroll']; + util.selectiveExtend(fields, this.options, options); - 'use strict'; + this.dom.rollingModeBtn.style.visibility = 'hidden'; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.printStyle = undefined; + if (this.options.rtl) { + this.dom.container.style.direction = "rtl"; + this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical-rtl'; + } - var _stringify = __webpack_require__(90); + if (this.options.verticalScroll) { + if (this.options.rtl) { + this.dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll'; + } else { + this.dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll'; + } + } - var _stringify2 = _interopRequireDefault(_stringify); + this.options.orientation = { item: undefined, axis: undefined }; + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation = { + item: options.orientation, + axis: options.orientation + }; + } else if ((0, _typeof3['default'])(options.orientation) === 'object') { + if ('item' in options.orientation) { + this.options.orientation.item = options.orientation.item; + } + if ('axis' in options.orientation) { + this.options.orientation.axis = options.orientation.axis; + } + } + } - var _typeof2 = __webpack_require__(62); + if (this.options.orientation.axis === 'both') { + if (!this.timeAxis2) { + var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body); + timeAxis2.setOptions = function (options) { + var _options = options ? util.extend({}, options) : {}; + _options.orientation = 'top'; // override the orientation option, always top + TimeAxis.prototype.setOptions.call(timeAxis2, _options); + }; + this.components.push(timeAxis2); + } + } else { + if (this.timeAxis2) { + var index = this.components.indexOf(this.timeAxis2); + if (index !== -1) { + this.components.splice(index, 1); + } + this.timeAxis2.destroy(); + this.timeAxis2 = null; + } + } - var _typeof3 = _interopRequireDefault(_typeof2); + // 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 + }; + } - var _keys = __webpack_require__(58); + if ('hiddenDates' in this.options) { + DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates); + } - var _keys2 = _interopRequireDefault(_keys); + 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; + } + } + } - var _classCallCheck2 = __webpack_require__(119); + if ('showCustomTime' in options) { + throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); + } - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + // enable/disable autoResize + this._initAutoResize(); + } - var _createClass2 = __webpack_require__(120); + // propagate options to all components + this.components.forEach(function (component) { + return component.setOptions(options); + }); - var _createClass3 = _interopRequireDefault(_createClass2); + // enable/disable configure + if ('configure' in options) { + if (!this.configurator) { + this.configurator = this._createConfigurator(); + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + this.configurator.setOptions(options.configure); - var util = __webpack_require__(1); + // 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 }); + } + + this._redraw(); + }; - var errorFound = false; - var allOptions = void 0; - var printStyle = 'background: #FFeeee; color: #dd0000'; /** - * Used to validate options. + * Returns true when the Timeline is active. + * @returns {boolean} */ + Core.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; - var Validator = function () { - function Validator() { - (0, _classCallCheck3['default'])(this, Validator); - } + /** + * Destroy the Core, clean up all DOM elements and event listeners. + */ + Core.prototype.destroy = function () { + // unbind datasets + this.setItems(null); + this.setGroups(null); - /** - * Main function to be called - * @param options - * @param subObject - * @returns {boolean} - */ + // remove all event listeners + this.off(); + // stop checking for changed size + this._stopAutoResize(); - (0, _createClass3['default'])(Validator, null, [{ - key: 'validate', - value: function validate(options, referenceOptions, subObject) { - errorFound = false; - allOptions = referenceOptions; - var usedOptions = referenceOptions; - if (subObject !== undefined) { - usedOptions = referenceOptions[subObject]; - } - Validator.parse(options, usedOptions, []); - return errorFound; - } + // remove from DOM + if (this.dom.root.parentNode) { + this.dom.root.parentNode.removeChild(this.dom.root); + } + this.dom = null; - /** - * Will traverse an object recursively and check every value - * @param options - * @param referenceOptions - * @param path - */ + // remove Activator + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } - }, { - key: 'parse', - value: function parse(options, referenceOptions, path) { - for (var option in options) { - if (options.hasOwnProperty(option)) { - Validator.check(option, options, referenceOptions, path); - } - } + // 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; - /** - * Check every value. If the value is an object, call the parse function on that object. - * @param option - * @param options - * @param referenceOptions - * @param path - */ + // give all components the opportunity to cleanup + this.components.forEach(function (component) { + return component.destroy(); + }); - }, { - key: 'check', - value: function check(option, options, referenceOptions, path) { - if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) { - Validator.getSuggestion(option, referenceOptions, path); - } else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) { - // __any__ is a wildcard. Any value is accepted and will be further analysed by reference. - if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) { - // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object. - Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path); - } else { - Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path); - } - } else { - // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field. - if (referenceOptions[option].__type__ !== undefined) { - // if this should be an object, we check if the correct type has been supplied to account for shorthand options. - Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path); - } else { - Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path); - } - } - } + this.body = null; + }; - /** - * - * @param {String} option | the option property - * @param {Object} options | The supplied options object - * @param {Object} referenceOptions | The reference options containing all options and their allowed formats - * @param {String} referenceOption | Usually this is the same as option, except when handling an __any__ tag. - * @param {String} refOptionType | This is the type object from the reference options - * @param {Array} path | where in the object is the option - */ - - }, { - key: 'checkFields', - value: function checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) { - var optionType = Validator.getType(options[option]); - var refOptionType = refOptionObj[optionType]; - if (refOptionType !== undefined) { - // if the type is correct, we check if it is supposed to be one of a few select values - if (Validator.getType(refOptionType) === 'array') { - if (refOptionType.indexOf(options[option]) === -1) { - console.log('%cInvalid option detected in "' + option + '".' + ' Allowed values are:' + Validator.print(refOptionType) + ' not "' + options[option] + '". ' + Validator.printLocation(path, option), printStyle); - errorFound = true; - } else if (optionType === 'object' && referenceOption !== "__any__") { - path = util.copyAndExtendArray(path, option); - Validator.parse(options[option], referenceOptions[referenceOption], path); - } - } else if (optionType === 'object' && referenceOption !== "__any__") { - path = util.copyAndExtendArray(path, option); - Validator.parse(options[option], referenceOptions[referenceOption], path); - } - } else if (refOptionObj['any'] === undefined) { - // type of the field is incorrect and the field cannot be any - console.log('%cInvalid type received for "' + option + '". Expected: ' + Validator.print((0, _keys2['default'])(refOptionObj)) + '. Received [' + optionType + '] "' + options[option] + '"' + Validator.printLocation(path, option), printStyle); - errorFound = true; - } - } - }, { - key: 'getType', - value: function getType(object) { - var type = typeof object === 'undefined' ? 'undefined' : (0, _typeof3['default'])(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'; - } - if (object.nodeType !== undefined) { - return 'dom'; - } - if (object._isAMomentObject === true) { - return 'moment'; - } - return 'object'; - } else if (type === 'number') { - return 'number'; - } else if (type === 'boolean') { - return 'boolean'; - } else if (type === 'string') { - return 'string'; - } else if (type === undefined) { - return 'undefined'; - } - return type; - } - }, { - key: 'getSuggestion', - value: function getSuggestion(option, options, path) { - var localSearch = Validator.findInOptions(option, options, path, false); - var globalSearch = Validator.findInOptions(option, allOptions, [], true); - - var localSearchThreshold = 8; - var globalSearchThreshold = 4; - - if (localSearch.indexMatch !== undefined) { - console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was incomplete? Did you mean: "' + localSearch.indexMatch + '"?\n\n', printStyle); - } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) { - console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, ''), printStyle); - } else if (localSearch.distance <= localSearchThreshold) { - console.log('%cUnknown option detected: "' + option + '". Did you mean "' + localSearch.closestMatch + '"?' + Validator.printLocation(localSearch.path, option), printStyle); - } else { - console.log('%cUnknown option detected: "' + option + '". Did you mean one of these: ' + Validator.print((0, _keys2['default'])(options)) + Validator.printLocation(path, option), printStyle); - } - - errorFound = true; - } - - /** - * traverse the options in search for a match. - * @param option - * @param options - * @param path - * @param recursive - * @returns {{closestMatch: string, path: Array, distance: number}} - */ - - }, { - key: 'findInOptions', - value: function findInOptions(option, options, path) { - var recursive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var min = 1e9; - var closestMatch = ''; - var closestMatchPath = []; - var lowerCaseOption = option.toLowerCase(); - var indexMatch = undefined; - for (var op in options) { - var distance = void 0; - if (options[op].__type__ !== undefined && recursive === true) { - var result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path, op)); - if (min > result.distance) { - closestMatch = result.closestMatch; - closestMatchPath = result.path; - min = result.distance; - indexMatch = result.indexMatch; - } - } else { - if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) { - indexMatch = op; - } - distance = Validator.levenshteinDistance(option, op); - if (min > distance) { - closestMatch = op; - closestMatchPath = util.copyArray(path); - min = distance; - } - } - } - return { closestMatch: closestMatch, path: closestMatchPath, distance: min, indexMatch: indexMatch }; - } - }, { - key: 'printLocation', - value: function printLocation(path, option) { - var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Problem value found at: \n'; - - var str = '\n\n' + prefix + 'options = {\n'; - for (var i = 0; i < path.length; i++) { - for (var j = 0; j < i + 1; j++) { - str += ' '; - } - str += path[i] + ': {\n'; - } - for (var _j = 0; _j < path.length + 1; _j++) { - str += ' '; - } - str += option + '\n'; - for (var _i = 0; _i < path.length + 1; _i++) { - for (var _j2 = 0; _j2 < path.length - _i; _j2++) { - str += ' '; - } - str += '}\n'; - } - return str + '\n\n'; - } - }, { - key: 'print', - value: function print(options) { - return (0, _stringify2['default'])(options).replace(/(\")|(\[)|(\])|(,"__type__")/g, "").replace(/(\,)/g, ', '); - } - - // Compute the edit distance between the two given strings - // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript - /* - Copyright (c) 2011 Andrei Mackenzie - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - }, { - key: 'levenshteinDistance', - value: function levenshteinDistance(a, b) { - if (a.length === 0) return b.length; - if (b.length === 0) return a.length; - - var matrix = []; - - // increment along the first column of each row - var i; - for (i = 0; i <= b.length; i++) { - matrix[i] = [i]; - } - - // increment each column in the first row - var j; - for (j = 0; j <= a.length; j++) { - matrix[0][j] = j; - } - - // Fill in the rest of the matrix - for (i = 1; i <= b.length; i++) { - for (j = 1; j <= a.length; j++) { - if (b.charAt(i - 1) == a.charAt(j - 1)) { - matrix[i][j] = matrix[i - 1][j - 1]; - } else { - matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution - Math.min(matrix[i][j - 1] + 1, // insertion - matrix[i - 1][j] + 1)); // deletion - } - } - } - - return matrix[b.length][a.length]; - } - }]); - return Validator; - }(); - - exports['default'] = Validator; - exports.printStyle = printStyle; - -/***/ }, -/* 127 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _keys = __webpack_require__(58); - - var _keys2 = _interopRequireDefault(_keys); - - var _stringify = __webpack_require__(90); - - var _stringify2 = _interopRequireDefault(_stringify); - - var _typeof2 = __webpack_require__(62); - - var _typeof3 = _interopRequireDefault(_typeof2); + /** + * 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; + }); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); + } - var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(125); - var moment = __webpack_require__(82); - var Component = __webpack_require__(128); - var DateUtil = __webpack_require__(129); + if (customTimes.length > 0) { + customTimes[0].setCustomTime(time); + } + }; /** - * @constructor Range - * A Range controls a numeric range with a start and end value. - * The Range adjusts the range based on mouse events or programmatic changes, - * and triggers events when the range is changing or has been changed. - * @param {{dom: Object, domProps: Object, emitter: Emitter}} body - * @param {Object} [options] See description at Range.setOptions + * Retrieve the current custom time. + * @param {number} [id=undefined] Id of the custom time bar. + * @return {Date | undefined} customTime */ - function Range(body, options) { - var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); - var start = now.clone().add(-3, 'days').valueOf(); - var end = now.clone().add(3, 'days').valueOf(); + Core.prototype.getCustomTime = function (id) { + var customTimes = this.customTimes.filter(function (component) { + return component.options.id === id; + }); - if (options === undefined) { - this.start = start; - this.end = end; - } else { - this.start = options.start || start; - this.end = options.end || end; + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); } + return customTimes[0].getCustomTime(); + }; - this.rolling = false; - - this.body = body; - this.deltaDifference = 0; - this.scaleOffset = 0; - this.startToFront = false; - this.endToFront = true; + /** + * Set a custom title for the custom time bar. + * @param {String} [title] Custom title + * @param {number} [id=undefined] Id of the custom time bar. + */ + Core.prototype.setCustomTimeTitle = function (title, id) { + var customTimes = this.customTimes.filter(function (component) { + return component.options.id === id; + }); - // default options - this.defaultOptions = { - rtl: false, - start: null, - end: null, - moment: moment, - direction: 'horizontal', // 'horizontal' or 'vertical' - moveable: true, - zoomable: true, - min: null, - max: null, - zoomMin: 10, // milliseconds - zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds - }; - this.options = util.extend({}, this.defaultOptions); - this.props = { - touch: {} - }; - this.animationTimer = null; + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); + } + if (customTimes.length > 0) { + return customTimes[0].setCustomTitle(title); + } + }; - // drag listeners for dragging - this.body.emitter.on('panstart', this._onDragStart.bind(this)); - this.body.emitter.on('panmove', this._onDrag.bind(this)); - this.body.emitter.on('panend', this._onDragEnd.bind(this)); + /** + * 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 }; + }; - // mouse wheel for zooming - this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); + /** + * 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(); - // pinch to zoom - this.body.emitter.on('touch', this._onTouch.bind(this)); - this.body.emitter.on('pinch', this._onPinch.bind(this)); + var exists = this.customTimes.some(function (customTime) { + return customTime.options.id === id; + }); + if (exists) { + throw new Error('A custom time with id ' + (0, _stringify2['default'])(id) + ' already exists'); + } - // on click of rolling mode button - this.body.dom.rollingModeBtn.addEventListener('click', this.startRolling.bind(this)); + var customTime = new CustomTime(this.body, util.extend({}, this.options, { + time: timestamp, + id: id + })); - this.setOptions(options); - } + this.customTimes.push(customTime); + this.components.push(customTime); + this._redraw(); - Range.prototype = new Component(); + return id; + }; /** - * Set options for the range controller - * @param {Object} options Available options: - * {Number | Date | String} start Start date for the range - * {Number | Date | String} end End date for the range - * {Number} min Minimum value for start - * {Number} max Maximum value for end - * {Number} zoomMin Set a minimum value for - * (end - start). - * {Number} zoomMax Set a maximum value for - * (end - start). - * {Boolean} moveable Enable moving of the range - * by dragging. True by default - * {Boolean} zoomable Enable zooming of the range - * by pinching/scrolling. True by default + * 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 */ - Range.prototype.setOptions = function (options) { - if (options) { - // copy the options that we know - var fields = ['animation', 'direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'moment', 'activate', 'hiddenDates', 'zoomKey', 'rtl', 'showCurrentTime', 'rollMode', 'horizontalScroll']; - util.selectiveExtend(fields, this.options, options); + Core.prototype.removeCustomTime = function (id) { + var customTimes = this.customTimes.filter(function (bar) { + return bar.options.id === id; + }); - if (options.rollingMode) { - this.startRolling(); - } - if ('start' in options || 'end' in options) { - // apply a new range. both start and end are optional - this.setRange(options.start, options.end); - } + if (customTimes.length === 0) { + throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(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)); }; /** - * Test whether direction has a valid value - * @param {String} direction 'horizontal' or 'vertical' + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - function validateDirection(direction) { - if (direction != 'horizontal' && direction != 'vertical') { - throw new TypeError('Unknown direction "' + direction + '". ' + 'Choose "horizontal" or "vertical".'); - } - } + Core.prototype.getVisibleItems = function () { + return this.itemSet && this.itemSet.getVisibleItems() || []; + }; /** - * Start auto refreshing the current time bar + * 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'. + * @param {Function} a callback funtion to be executed at the end of this function */ - Range.prototype.startRolling = function () { - var me = this; - - function update() { - me.stopRolling(); - me.rolling = true; - - var interval = me.end - me.start; - var t = util.convert(new Date(), 'Date').valueOf(); - - var start = t - interval / 2; - var end = t + interval / 2; - var animation = me.options && me.options.animation !== undefined ? me.options.animation : true; - - me.setRange(start, end, false); - - // determine interval to refresh - var scale = me.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; + Core.prototype.fit = function (options, callback) { + var range = this.getDataRange(); - me.body.dom.rollingModeBtn.style.visibility = "hidden"; - // start a renderTimer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); + // skip range set if there is no min and max date + if (range.min === null && range.max === null) { + return; } - update(); + // 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: animation }, callback); }; /** - * Stop auto refreshing the current time bar + * Calculate the data range of the items start and end dates + * @returns {{min: Date | null, max: Date | null}} + * @protected */ - Range.prototype.stopRolling = function () { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - this.rolling = false; - this.body.dom.rollingModeBtn.style.visibility = "visible"; - } + Core.prototype.getDataRange = function () { + // must be implemented by Timeline and Graph2d + throw new Error('Cannot invoke abstract method getDataRange'); }; /** - * Set a new start and end range - * @param {Date | Number | String} [start] - * @param {Date | Number | String} [end] - * @param {boolean | {duration: number, easingFunction: string}} [animation=false] + * 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'. - * @param {Boolean} [byUser=false] - * + * @param {Function} a callback funtion to be executed at the end of this function */ - Range.prototype.setRange = function (start, end, animation, byUser, event) { - if (byUser !== true) { - byUser = false; + Core.prototype.setWindow = function (start, end, options, callback) { + if (typeof arguments[2] == "function") { + callback = arguments[2]; + options = {}; } - var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null; - var finalEnd = end != undefined ? util.convert(end, 'Date').valueOf() : null; - this._cancelAnimation(); - - if (animation) { - // true or an Object - var me = this; - var initStart = this.start; - var initEnd = this.end; - var duration = (typeof animation === 'undefined' ? 'undefined' : (0, _typeof3['default'])(animation)) === 'object' && 'duration' in animation ? animation.duration : 500; - var easingName = (typeof animation === 'undefined' ? 'undefined' : (0, _typeof3['default'])(animation)) === 'object' && 'easingFunction' in animation ? animation.easingFunction : 'easeInOutQuad'; - var easingFunction = util.easingFunctions[easingName]; - if (!easingFunction) { - throw new Error('Unknown easing function ' + (0, _stringify2['default'])(easingName) + '. ' + 'Choose from: ' + (0, _keys2['default'])(util.easingFunctions).join(', ')); - } + 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: animation }); + } else if (arguments.length == 2 && typeof arguments[1] == "function") { + var range = arguments[0]; + callback = arguments[1]; + animation = range.animation !== undefined ? range.animation : true; + this.range.setRange(range.start, range.end, { animation: animation }, callback); + } else { + animation = options && options.animation !== undefined ? options.animation : true; + this.range.setRange(start, end, { animation: animation }, callback); + } + }; - var initTime = new Date().valueOf(); - var anyChanged = false; - - var next = function next() { - if (!me.props.touch.dragging) { - var now = new Date().valueOf(); - var time = now - initTime; - var ease = easingFunction(time / duration); - var done = time > duration; - var s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease; - var e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease; - - changed = me._applyRange(s, e); - DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates); - anyChanged = anyChanged || changed; - - var params = { - start: new Date(me.start), - end: new Date(me.end), - byUser: byUser, - event: event - }; - - if (changed) { - me.body.emitter.emit('rangechange', params); - } + /** + * 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'. + * @param {Function} a callback funtion to be executed at the end of this function + */ + Core.prototype.moveTo = function (time, options, callback) { + if (typeof arguments[1] == "function") { + callback = arguments[1]; + options = {}; + } + var interval = this.range.end - this.range.start; + var t = util.convert(time, 'Date').valueOf(); - if (done) { - if (anyChanged) { - me.body.emitter.emit('rangechanged', params); - } - } else { - // animate with as high as possible frame rate, leave 20 ms in between - // each to prevent the browser from blocking - me.animationTimer = setTimeout(next, 20); - } - } - }; + var start = t - interval / 2; + var end = t + interval / 2; + var animation = options && options.animation !== undefined ? options.animation : true; - return next(); - } else { - var changed = this._applyRange(finalStart, finalEnd); - DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); - if (changed) { - var params = { - start: new Date(this.start), - end: new Date(this.end), - byUser: byUser, - event: event - }; - this.body.emitter.emit('rangechange', params); - this.body.emitter.emit('rangechanged', params); - } - } + this.range.setRange(start, end, { animation: animation }, callback); }; /** - * Get the number of milliseconds per pixel. + * Get the visible window + * @return {{start: Date, end: Date}} Visible range */ - Range.prototype.getMillisecondsPerPixel = function () { - return (this.end - this.start) / this.body.dom.center.clientWidth; + Core.prototype.getWindow = function () { + var range = this.range.getRange(); + return { + start: new Date(range.start), + end: new Date(range.end) + }; }; /** - * Stop an animation - * @private + * Zoom in the window such that given time is centered on screen. + * @param {Number} percentage - must be between [0..1] + * @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'. + * @param {Function} a callback funtion to be executed at the end of this function */ - Range.prototype._cancelAnimation = function () { - if (this.animationTimer) { - clearTimeout(this.animationTimer); - this.animationTimer = null; + Core.prototype.zoomIn = function (percentage, options, callback) { + if (!percentage || percentage < 0 || percentage > 1) return; + if (typeof arguments[1] == "function") { + callback = arguments[1]; + options = {}; } + var range = this.getWindow(); + var start = range.start.valueOf(); + var end = range.end.valueOf(); + var interval = end - start; + var newInterval = interval / (1 + percentage); + var distance = (interval - newInterval) / 2; + var newStart = start + distance; + var newEnd = end - distance; + + this.setWindow(newStart, newEnd, options, callback); }; /** - * Set a new start and end range. This method is the same as setRange, but - * does not trigger a range change and range changed event, and it returns - * true when the range is changed - * @param {Number} [start] - * @param {Number} [end] - * @return {Boolean} changed - * @private + * Zoom out the window such that given time is centered on screen. + * @param {Number} percentage - must be between [0..1] + * @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'. + * @param {Function} a callback funtion to be executed at the end of this function */ - Range.prototype._applyRange = function (start, end) { - var newStart = start != null ? util.convert(start, 'Date').valueOf() : this.start, - newEnd = end != null ? util.convert(end, 'Date').valueOf() : this.end, - max = this.options.max != null ? util.convert(this.options.max, 'Date').valueOf() : null, - min = this.options.min != null ? util.convert(this.options.min, 'Date').valueOf() : null, - diff; - - // check for valid number - if (isNaN(newStart) || newStart === null) { - throw new Error('Invalid start "' + start + '"'); - } - if (isNaN(newEnd) || newEnd === null) { - throw new Error('Invalid end "' + end + '"'); - } - - // prevent end < start - if (newEnd < newStart) { - newEnd = newStart; - } - - // prevent start < min - if (min !== null) { - if (newStart < min) { - diff = min - newStart; - newStart += diff; - newEnd += diff; - - // prevent end > max - if (max != null) { - if (newEnd > max) { - newEnd = max; - } - } - } - } - - // prevent end > max - if (max !== null) { - if (newEnd > max) { - diff = newEnd - max; - newStart -= diff; - newEnd -= diff; - - // prevent start < min - if (min != null) { - if (newStart < min) { - newStart = min; - } - } - } - } - - // prevent (end-start) < zoomMin - if (this.options.zoomMin !== null) { - var zoomMin = parseFloat(this.options.zoomMin); - if (zoomMin < 0) { - zoomMin = 0; - } - if (newEnd - newStart < zoomMin) { - // compensate for a scale of 0.5 ms - var compensation = 0.5; - if (this.end - this.start === zoomMin && newStart >= this.start - compensation && newEnd <= this.end) { - // ignore this action, we are already zoomed to the minimum - newStart = this.start; - newEnd = this.end; - } else { - // zoom to the minimum - diff = zoomMin - (newEnd - newStart); - newStart -= diff / 2; - newEnd += diff / 2; - } - } - } - - // prevent (end-start) > zoomMax - if (this.options.zoomMax !== null) { - var zoomMax = parseFloat(this.options.zoomMax); - if (zoomMax < 0) { - zoomMax = 0; - } - - if (newEnd - newStart > zoomMax) { - if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) { - // ignore this action, we are already zoomed to the maximum - newStart = this.start; - newEnd = this.end; - } else { - // zoom to the maximum - diff = newEnd - newStart - zoomMax; - newStart += diff / 2; - newEnd -= diff / 2; - } - } - } - - var changed = this.start != newStart || this.end != newEnd; - - // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range) - if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) { - this.body.emitter.emit('checkRangedItems'); + Core.prototype.zoomOut = function (percentage, options, callback) { + if (!percentage || percentage < 0 || percentage > 1) return; + if (typeof arguments[1] == "function") { + callback = arguments[1]; + options = {}; } + var range = this.getWindow(); + var start = range.start.valueOf(); + var end = range.end.valueOf(); + var interval = end - start; + var newStart = start - interval * percentage / 2; + var newEnd = end + interval * percentage / 2; - this.start = newStart; - this.end = newEnd; - return changed; + this.setWindow(newStart, newEnd, options, callback); }; /** - * Retrieve the current range. - * @return {Object} An object with start and end properties + * Force a redraw. Can be overridden by implementations of Core + * + * Note: this function will be overridden on construction with a trottled version */ - Range.prototype.getRange = function () { - return { - start: this.start, - end: this.end - }; + Core.prototype.redraw = function () { + this._redraw(); }; /** - * Calculate the conversion offset and scale for current range, based on - * the provided width - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion + * Redraw for internal use. Redraws all components. See also the public + * method redraw. + * @protected */ - Range.prototype.conversion = function (width, totalHidden) { - return Range.conversion(this.start, this.end, width, totalHidden); - }; + Core.prototype._redraw = function () { + this.redrawCount++; + var resized = false; + var options = this.options; + var props = this.props; + var dom = this.dom; - /** - * Static method to calculate the conversion offset and scale for a range, - * based on the provided start, end, and width - * @param {Number} start - * @param {Number} end - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.conversion = function (start, end, width, totalHidden) { - if (totalHidden === undefined) { - totalHidden = 0; - } - if (width != 0 && end - start != 0) { - return { - offset: start, - scale: width / (end - start - totalHidden) - }; + if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible + + DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + + // update class names + if (options.orientation == 'top') { + util.addClassName(dom.root, 'vis-top'); + util.removeClassName(dom.root, 'vis-bottom'); } else { - return { - offset: 0, - scale: 1 - }; + util.removeClassName(dom.root, 'vis-top'); + util.addClassName(dom.root, 'vis-bottom'); } - }; - /** - * Start dragging horizontally or vertically - * @param {Event} event - * @private - */ - Range.prototype._onDragStart = function (event) { - this.deltaDifference = 0; - this.previousDelta = 0; + // 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, ''); - // only allow dragging when configured as movable - if (!this.options.moveable) return; + // 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; + props.borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight; + props.borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; - // only start dragging when the mouse is inside the current range - if (!this._isInsideRange(event)) return; + // 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) { + props.borderRootWidth = props.borderRootHeight; + } - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + // 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; - this.stopRolling(); + // TODO: compensate borders when any of the panels is empty. - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.dragging = true; + // 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 + props.borderRootHeight + props.border.top + props.border.bottom; + dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'move'; - } - }; + // calculate heights of the content panels + props.root.height = dom.root.offsetHeight; + props.background.height = props.root.height - props.borderRootHeight; + var containerHeight = props.root.height - props.top.height - props.bottom.height - props.borderRootHeight; + props.centerContainer.height = containerHeight; + props.leftContainer.height = containerHeight; + props.rightContainer.height = props.leftContainer.height; - /** - * Perform dragging operation - * @param {Event} event - * @private - */ - Range.prototype._onDrag = function (event) { - if (!event) return; + // calculate the widths of the panels + props.root.width = dom.root.offsetWidth; + props.background.width = props.root.width - props.borderRootWidth; - if (!this.props.touch.dragging) return; + if (!this.initialDrawDone) { + props.scrollbarWidth = util.getScrollBarWidth(); + } - // only allow dragging when configured as movable - if (!this.options.moveable) return; + if (options.verticalScroll) { + if (options.rtl) { + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.right.width = dom.rightContainer.clientWidth + props.scrollbarWidth || -props.border.right; + } else { + props.left.width = dom.leftContainer.clientWidth + props.scrollbarWidth || -props.border.left; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + } + } else { + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + } - // TODO: this may be redundant in hammerjs2 - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + this._setDOM(); - var direction = this.options.direction; - validateDirection(direction); - var delta = direction == 'horizontal' ? event.deltaX : event.deltaY; - delta -= this.deltaDifference; - var interval = this.props.touch.end - this.props.touch.start; + // 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 + var offset = this._updateScrollTop(); - // normalize dragging speed if cutout is in between. - var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - interval -= duration; + // reposition the scrollable contents + if (options.orientation.item != 'top') { + offset += Math.max(props.centerContainer.height - props.center.height - props.border.top - props.border.bottom, 0); + } + dom.center.style.top = offset + 'px'; - var width = direction == 'horizontal' ? this.body.domProps.center.width : this.body.domProps.center.height; + // show shadows when vertical scrolling is available + var visibilityTop = props.scrollTop == 0 ? 'hidden' : ''; + var visibilityBottom = props.scrollTop == 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 (this.options.rtl) { - var diffRange = delta / width * interval; - } else { - var diffRange = -delta / width * interval; - } + if (options.verticalScroll) { + dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll'; + dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll'; - var newStart = this.props.touch.start + diffRange; - var newEnd = this.props.touch.end + diffRange; + dom.shadowTopRight.style.visibility = "hidden"; + dom.shadowBottomRight.style.visibility = "hidden"; + dom.shadowTopLeft.style.visibility = "hidden"; + dom.shadowBottomLeft.style.visibility = "hidden"; - // snapping times away from hidden zones - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.deltaDifference += delta; - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this._onDrag(event); - return; + dom.left.style.top = '0px'; + dom.right.style.top = '0px'; } - this.previousDelta = delta; - this._applyRange(newStart, newEnd); + if (!options.verticalScroll || props.center.height < props.centerContainer.height) { + dom.left.style.top = offset + 'px'; + dom.right.style.top = offset + 'px'; + dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' '); + dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' '); + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + this._setDOM(); + } - var startDate = new Date(this.start); - var endDate = new Date(this.end); + // enable/disable vertical panning + var contentsOverflow = props.center.height > props.centerContainer.height; + this.hammer.get('pan').set({ + direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL + }); - // fire a rangechange event - this.body.emitter.emit('rangechange', { - start: startDate, - end: endDate, - byUser: true, - event: event + // redraw all components + this.components.forEach(function (component) { + resized = component.redraw() || resized; }); + var MAX_REDRAW = 5; + if (resized) { + if (this.redrawCount < MAX_REDRAW) { + this.body.emitter.emit('_change'); + return; + } else { + console.log('WARNING: infinite loop in redraw?'); + } + } else { + this.redrawCount = 0; + } + this.initialDrawDone = true; - // fire a panmove event - this.body.emitter.emit('panmove'); + //Emit public 'changed' event for UI updates, see issue #1592 + this.body.emitter.emit("changed"); }; - /** - * Stop dragging operation - * @param {event} event - * @private - */ - Range.prototype._onDragEnd = function (event) { - if (!this.props.touch.dragging) return; - - // only allow dragging when configured as movable - if (!this.options.moveable) return; + Core.prototype._setDOM = function () { + var props = this.props; + var dom = this.dom; - // TODO: this may be redundant in hammerjs2 - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + props.leftContainer.width = props.left.width; + props.rightContainer.width = props.right.width; + var centerWidth = props.root.width - props.left.width - props.right.width - props.borderRootWidth; + props.center.width = centerWidth; + props.centerContainer.width = centerWidth; + props.top.width = centerWidth; + props.bottom.width = centerWidth; - this.props.touch.dragging = false; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'auto'; - } + // 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'; - // fire a rangechanged event - this.body.emitter.emit('rangechanged', { - start: new Date(this.start), - end: new Date(this.end), - byUser: true, - event: event - }); + 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'; + dom.center.style.left = '0'; + dom.left.style.left = '0'; + dom.right.style.left = '0'; + }; + + // TODO: deprecated since version 1.1.0, remove some day + Core.prototype.repaint = function () { + throw new Error('Function repaint is deprecated. Use redraw instead.'); }; /** - * Event handler for mouse wheel event, used to zoom - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {Event} event - * @private + * 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. */ - Range.prototype._onMouseWheel = function (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; + Core.prototype.setCurrentTime = function (time) { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); } - // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable - if (this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable || !this.options.zoomable && this.options.moveable) { - if (this.options.horizontalScroll) { - // Prevent default actions caused by mouse wheel - // (else the page and timeline both scroll) - event.preventDefault(); - - // calculate a single scroll jump relative to the range scale - var diff = delta * (this.end - this.start) / 20; - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; + this.currentTime.setCurrentTime(time); + }; - this.setRange(newStart, newEnd, false, true, event); - } - return; + /** + * 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'); } - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - // only zoom when the mouse is inside the current range - if (!this._isInsideRange(event)) return; + return this.currentTime.getCurrentTime(); + }; - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - // perform the zoom action. Delta is normally 1 or -1 + /** + * 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 + */ + // TODO: move this function to Range + Core.prototype._toTime = function (x) { + return DateUtil.toTime(this, x, this.props.center.width); + }; - // adjust a negative delta such that zooming in with delta 0.1 - // equals zooming out with a delta -0.1 - var scale; - if (delta < 0) { - scale = 1 - delta / 5; - } else { - scale = 1 / (1 + delta / 5); - } + /** + * 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 + */ + // 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); + }; - // calculate center, the date to zoom around - var pointerDate; - if (this.rolling) { - pointerDate = (this.start + this.end) / 2; - } else { - var pointer = this.getPointer({ x: event.clientX, y: event.clientY }, this.body.dom.center); - pointerDate = this._pointerToDate(pointer); - } - this.zoom(scale, pointerDate, delta, event); + /** + * 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); + }; - // Prevent default actions caused by mouse wheel - // (else the page and timeline both scroll) - event.preventDefault(); - } + /** + * 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; }; /** - * Start of a touch gesture + * Initialize watching when option autoResize is true * @private */ - Range.prototype._onTouch = function (event) { - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.allowDragging = true; - this.props.touch.center = null; - this.scaleOffset = 0; - this.deltaDifference = 0; + Core.prototype._initAutoResize = function () { + if (this.options.autoResize == true) { + this._startAutoResize(); + } else { + this._stopAutoResize(); + } }; /** - * Handle pinch event - * @param {Event} event + * Watch for changes in the size of the container. On resize, the Panel will + * automatically redraw itself. * @private */ - Range.prototype._onPinch = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - this.props.touch.allowDragging = false; - - if (!this.props.touch.center) { - this.props.touch.center = this.getPointer(event.center, this.body.dom.center); - } + Core.prototype._startAutoResize = function () { + var me = this; - this.stopRolling(); + this._stopAutoResize(); - var scale = 1 / (event.scale + this.scaleOffset); - var centerDate = this._pointerToDate(this.props.touch.center); + this._onResize = function () { + if (me.options.autoResize != true) { + // stop watching when the option autoResize is changed to false + me._stopAutoResize(); + return; + } - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + if (me.dom.root) { + // check whether the frame is resized + // Note: we compare offsetWidth here, not clientWidth. For some reason, + // IE does not restore the clientWidth from 0 to the actual width after + // changing the timeline's container display style from none to visible + if (me.dom.root.offsetWidth != me.props.lastWidth || me.dom.root.offsetHeight != me.props.lastHeight) { + me.props.lastWidth = me.dom.root.offsetWidth; + me.props.lastHeight = me.dom.root.offsetHeight; + me.props.scrollbarWidth = util.getScrollBarWidth(); - // calculate new start and end - var newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; - var newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; + me.body.emitter.emit('_change'); + } + } + }; - // snapping times away from hidden zones - this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times - this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times + // add event listener to window resize + util.addEventListener(window, 'resize', this._onResize); - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this.scaleOffset = 1 - event.scale; - newStart = safeStart; - newEnd = safeEnd; + //Prevent initial unnecessary redraw + if (me.dom.root) { + me.props.lastWidth = me.dom.root.offsetWidth; + me.props.lastHeight = me.dom.root.offsetHeight; } - this.setRange(newStart, newEnd, false, true, event); - - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default + this.watchTimer = setInterval(this._onResize, 1000); }; /** - * Test whether the mouse from a mouse event is inside the visible window, - * between the current start and end date - * @param {Object} event - * @return {boolean} Returns true when inside the visible window + * Stop watching for a resize of the frame. * @private */ - Range.prototype._isInsideRange = function (event) { - // calculate the time where the mouse is, check whether inside - // and no scroll action should happen. - var clientX = event.center ? event.center.x : event.clientX; - if (this.options.rtl) { - var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer); - } else { - var x = util.getAbsoluteRight(this.body.dom.centerContainer) - clientX; + Core.prototype._stopAutoResize = function () { + if (this.watchTimer) { + clearInterval(this.watchTimer); + this.watchTimer = undefined; } - var time = this.body.util.toTime(x); - return time >= this.start && time <= this.end; + // remove event listener on window.resize + if (this._onResize) { + util.removeEventListener(window, 'resize', this._onResize); + this._onResize = null; + } }; /** - * Helper function to calculate the center date for zooming - * @param {{x: Number, y: Number}} pointer - * @return {number} date + * Start moving the timeline vertically + * @param {Event} event * @private */ - Range.prototype._pointerToDate = function (pointer) { - var conversion; - var direction = this.options.direction; - - validateDirection(direction); - - if (direction == 'horizontal') { - return this.body.util.toTime(pointer.x).valueOf(); - } else { - var height = this.body.domProps.center.height; - conversion = this.conversion(height); - return pointer.y / conversion.scale + conversion.offset; - } + Core.prototype._onTouch = function (event) { + this.touch.allowDragging = true; + this.touch.initialScrollTop = this.props.scrollTop; }; /** - * Get the pointer location relative to the location of the dom element - * @param {{x: Number, y: Number}} touch - * @param {Element} element HTML DOM element - * @return {{x: Number, y: Number}} pointer + * Start moving the timeline vertically + * @param {Event} event * @private */ - Range.prototype.getPointer = function (touch, element) { - if (this.options.rtl) { - return { - x: util.getAbsoluteRight(element) - touch.x, - y: touch.y - util.getAbsoluteTop(element) - }; - } else { - return { - x: touch.x - util.getAbsoluteLeft(element), - y: touch.y - util.getAbsoluteTop(element) - }; - } + Core.prototype._onPinch = function (event) { + this.touch.allowDragging = false; }; /** - * Zoom the range the given scale in or out. Start and end date will - * be adjusted, and the timeline will be redrawn. You can optionally give a - * date around which to zoom. - * For example, try scale = 0.9 or 1.1 - * @param {Number} scale Scaling factor. Values above 1 will zoom out, - * values below 1 will zoom in. - * @param {Number} [center] Value representing a date around which will - * be zoomed. + * Move the timeline vertically + * @param {Event} event + * @private */ - Range.prototype.zoom = function (scale, center, delta, event) { - // if centerDate is not provided, take it half between start Date and end Date - if (center == null) { - center = (this.start + this.end) / 2; - } + Core.prototype._onDrag = function (event) { + if (!event) return; + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.touch.allowDragging) return; - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + var delta = event.deltaY; - // calculate new start and end - var newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale; - var newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale; + var oldScrollTop = this._getScrollTop(); + var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); - // snapping times away from hidden zones - this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - newStart = safeStart; - newEnd = safeEnd; + if (this.options.verticalScroll) { + this.dom.left.parentNode.scrollTop = -this.props.scrollTop; + this.dom.right.parentNode.scrollTop = -this.props.scrollTop; } - this.setRange(newStart, newEnd, false, true, event); - - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default + if (newScrollTop != oldScrollTop) { + this.emit("verticalDrag"); + } }; /** - * Move the range with a given delta to the left or right. Start and end - * value will be adjusted. For example, try delta = 0.1 or -0.1 - * @param {Number} delta Moving amount. Positive value will move right, - * negative value will move left + * Apply a scrollTop + * @param {Number} scrollTop + * @returns {Number} scrollTop Returns the applied scrollTop + * @private */ - Range.prototype.move = function (delta) { - // zoom start Date and end Date relative to the centerDate - var diff = this.end - this.start; - - // apply new values - var newStart = this.start + diff * delta; - var newEnd = this.end + diff * delta; - - // TODO: reckon with min and max range - - this.start = newStart; - this.end = newEnd; + Core.prototype._setScrollTop = function (scrollTop) { + this.props.scrollTop = scrollTop; + this._updateScrollTop(); + return this.props.scrollTop; }; /** - * Move the range to a new center point - * @param {Number} moveTo New center point of the range + * Update the current scrollTop when the height of the containers has been changed + * @returns {Number} scrollTop Returns the applied scrollTop + * @private */ - Range.prototype.moveTo = function (moveTo) { - var center = (this.start + this.end) / 2; + 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; + } - var diff = center - moveTo; + // limit the scrollTop to the feasible scroll range + if (this.props.scrollTop > 0) this.props.scrollTop = 0; + if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; + if (this.options.verticalScroll) { + this.dom.left.parentNode.scrollTop = -this.props.scrollTop; + this.dom.right.parentNode.scrollTop = -this.props.scrollTop; + } - this.setRange(newStart, newEnd, false, true, null); + return this.props.scrollTop; }; - module.exports = Range; - -/***/ }, -/* 128 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var util = __webpack_require__(1); - - /** - * Prototype for visual components - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] - * @param {Object} [options] - */ - function Component(body, options) { - this.options = null; - this.props = null; - } - /** - * Set options for the component. The new options will be merged into the - * current options. - * @param {Object} options + * Get the current scrollTop + * @returns {number} scrollTop + * @private */ - Component.prototype.setOptions = function (options) { - if (options) { - util.extend(this.options, options); - } + Core.prototype._getScrollTop = function () { + return this.props.scrollTop; }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Load a configurator + * @return {Object} + * @private */ - Component.prototype.redraw = function () { - // should be implemented by the component - return false; + Core.prototype._createConfigurator = function () { + throw new Error('Cannot invoke abstract method _createConfigurator'); }; - /** - * Destroy the component. Cleanup DOM and event listeners - */ - Component.prototype.destroy = function () { - // should be implemented by the component - }; + module.exports = Core; - /** - * Test whether the component is resized since the last time _isResized() was - * called. - * @return {Boolean} Returns true if the component is resized - * @protected - */ - Component.prototype._isResized = function () { - var resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height; +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { - this.props._previousWidth = this.props.width; - this.props._previousHeight = this.props.height; + 'use strict'; - return resized; - }; + var _create = __webpack_require__(55); - module.exports = Component; + var _create2 = _interopRequireDefault(_create); -/***/ }, -/* 129 */ -/***/ function(module, exports) { + var _typeof2 = __webpack_require__(62); - "use strict"; + var _typeof3 = _interopRequireDefault(_typeof2); - /** - * used in Core to convert the options into a volatile variable - * - * @param {function} moment - * @param {Object} body - * @param {Array | Object} hiddenDates - */ - exports.convertHiddenOptions = function (moment, body, hiddenDates) { - if (hiddenDates && !Array.isArray(hiddenDates)) { - return exports.convertHiddenOptions(moment, body, [hiddenDates]); - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - body.hiddenDates = []; - if (hiddenDates) { - if (Array.isArray(hiddenDates) == true) { - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat === undefined) { - var dateItem = {}; - dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); - dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); - body.hiddenDates.push(dateItem); - } - } - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - } - } - }; + var Hammer = __webpack_require__(112); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); + var TimeStep = __webpack_require__(124); + var Component = __webpack_require__(120); + var Group = __webpack_require__(125); + var BackgroundGroup = __webpack_require__(129); + var BoxItem = __webpack_require__(130); + var PointItem = __webpack_require__(131); + var RangeItem = __webpack_require__(127); + var BackgroundItem = __webpack_require__(132); + var Popup = __webpack_require__(133)['default']; - /** - * create new entrees for the repeating hidden dates - * @param {function} moment - * @param {Object} body - * @param {Array | Object} hiddenDates - */ - exports.updateHiddenDates = function (moment, body, hiddenDates) { - if (hiddenDates && !Array.isArray(hiddenDates)) { - return exports.updateHiddenDates(moment, body, [hiddenDates]); - } - - if (hiddenDates && body.domProps.centerContainer.width !== undefined) { - exports.convertHiddenOptions(moment, body, hiddenDates); - - var start = moment(body.range.start); - var end = moment(body.range.end); + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + var BACKGROUND = '__background__'; // reserved group id for background items without group - var totalRange = body.range.end - body.range.start; - var pixelTime = totalRange / body.domProps.centerContainer.width; + /** + * 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, + stackSubgroups: true, + groupOrderSwap: function groupOrderSwap(fromGroup, toGroup, groups) { + var targetOrder = toGroup.order; + toGroup.order = fromGroup.order; + fromGroup.order = targetOrder; + }, + groupOrder: 'order', - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat !== undefined) { - var startDate = moment(hiddenDates[i].start); - var endDate = moment(hiddenDates[i].end); + selectable: true, + multiselect: false, + itemsAlwaysDraggable: false, - if (startDate._d == "Invalid Date") { - throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); - } - if (endDate._d == "Invalid Date") { - throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); - } + editable: { + updateTime: false, + updateGroup: false, + add: false, + remove: false, + overrideItems: false + }, - var duration = endDate - startDate; - if (duration >= 4 * pixelTime) { + groupEditable: { + order: false, + add: false, + remove: false + }, - var offset = 0; - var runUntil = end.clone(); - switch (hiddenDates[i].repeat) { - case "daily": - // case of time - if (startDate.day() != endDate.day()) { - offset = 1; - } - startDate.dayOfYear(start.dayOfYear()); - startDate.year(start.year()); - startDate.subtract(7, 'days'); + snap: TimeStep.snap, - endDate.dayOfYear(start.dayOfYear()); - endDate.year(start.year()); - endDate.subtract(7 - offset, 'days'); + 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); + }, - runUntil.add(1, 'weeks'); - break; - case "weekly": - var dayOffset = endDate.diff(startDate, 'days'); - var day = startDate.day(); + margin: { + item: { + horizontal: 10, + vertical: 10 + }, + axis: 20 + }, - // set the start date to the range.start - startDate.date(start.date()); - startDate.month(start.month()); - startDate.year(start.year()); - endDate = startDate.clone(); + showTooltips: true, - // force - startDate.day(day); - endDate.day(day); - endDate.add(dayOffset, 'days'); + tooltip: { + followMouse: false, + overflowMethod: 'flip' + }, - startDate.subtract(1, 'weeks'); - endDate.subtract(1, 'weeks'); + tooltipOnItemUpdateTime: false + }; - runUntil.add(1, 'weeks'); - break; - case "monthly": - if (startDate.month() != endDate.month()) { - offset = 1; - } - startDate.month(start.month()); - startDate.year(start.year()); - startDate.subtract(1, 'months'); + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); + this.options.rtl = options.rtl; - endDate.month(start.month()); - endDate.year(start.year()); - endDate.subtract(1, 'months'); - endDate.add(offset, 'months'); + // options for getting items from the DataSet with the correct type + this.itemOptions = { + type: { start: 'Date', end: 'Date' } + }; - runUntil.add(1, 'months'); - break; - case "yearly": - if (startDate.year() != endDate.year()) { - offset = 1; - } - startDate.year(start.year()); - startDate.subtract(1, 'years'); - endDate.year(start.year()); - endDate.subtract(1, 'years'); - endDate.add(offset, 'years'); + this.conversion = { + toScreen: body.util.toScreen, + toTime: body.util.toTime + }; + this.dom = {}; + this.props = {}; + this.hammer = null; - runUntil.add(1, 'years'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - while (startDate < runUntil) { - body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); - switch (hiddenDates[i].repeat) { - case "daily": - startDate.add(1, 'days'); - endDate.add(1, 'days'); - break; - case "weekly": - startDate.add(1, 'weeks'); - endDate.add(1, 'weeks'); - break; - case "monthly": - startDate.add(1, 'months'); - endDate.add(1, 'months'); - break; - case "yearly": - startDate.add(1, 'y'); - endDate.add(1, 'y'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - } - body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() }); - } - } - } - // remove duplicates, merge where possible - exports.removeDuplicates(body); - // ensure the new positions are not on hidden dates - var startHidden = exports.isHidden(body.range.start, body.hiddenDates); - var endHidden = exports.isHidden(body.range.end, body.hiddenDates); - var rangeStart = body.range.start; - var rangeEnd = body.range.end; - if (startHidden.hidden == true) { - rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1; - } - if (endHidden.hidden == true) { - rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1; - } - if (startHidden.hidden == true || endHidden.hidden == true) { - body.range._applyRange(rangeStart, rangeEnd); - } - } - }; + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - /** - * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. - * Scales with N^2 - * @param body - */ - exports.removeDuplicates = function (body) { - var hiddenDates = body.hiddenDates; - var safeDates = []; - for (var i = 0; i < hiddenDates.length; i++) { - for (var j = 0; j < hiddenDates.length; j++) { - if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { - // j inside i - if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[j].remove = true; - } - // j start inside i - else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { - hiddenDates[i].end = hiddenDates[j].end; - hiddenDates[j].remove = true; - } - // j end inside i - else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[i].start = hiddenDates[j].start; - hiddenDates[j].remove = true; - } - } + // 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); } - } + }; - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].remove !== true) { - safeDates.push(hiddenDates[i]); + // 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); } - } + }; - body.hiddenDates = safeDates; - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - }; + this.items = {}; // object with an Item for every data item + this.groups = {}; // Group object for every group + this.groupIds = []; - exports.printDates = function (dates) { - for (var i = 0; i < dates.length; i++) { - console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); - } - }; + this.selection = []; // list with the ids of all selected nodes - /** - * Used in TimeStep to avoid the hidden times. - * @param {function} moment - * @param {TimeStep} timeStep - * @param previousTime - */ - exports.stepOverHiddenDates = function (moment, timeStep, previousTime) { - var stepInHidden = false; - var currentValue = timeStep.current.valueOf(); - for (var i = 0; i < timeStep.hiddenDates.length; i++) { - var startDate = timeStep.hiddenDates[i].start; - var endDate = timeStep.hiddenDates[i].end; - if (currentValue >= startDate && currentValue < endDate) { - stepInHidden = true; - break; - } - } + this.popup = null; - if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { - var prevValue = moment(previousTime); - var newValue = moment(endDate); - //check if the next step should be major - if (prevValue.year() != newValue.year()) { - timeStep.switchedYear = true; - } else if (prevValue.month() != newValue.month()) { - timeStep.switchedMonth = true; - } else if (prevValue.dayOfYear() != newValue.dayOfYear()) { - timeStep.switchedDay = true; - } + this.touchParams = {}; // stores properties while dragging + this.groupTouchParams = {}; + // create the HTML DOM - timeStep.current = newValue; - } - }; + this._create(); - ///** - // * Used in TimeStep to avoid the hidden times. - // * @param timeStep - // * @param previousTime - // */ - //exports.checkFirstStep = function(timeStep) { - // var stepInHidden = false; - // var currentValue = timeStep.current.valueOf(); - // for (var i = 0; i < timeStep.hiddenDates.length; i++) { - // var startDate = timeStep.hiddenDates[i].start; - // var endDate = timeStep.hiddenDates[i].end; - // if (currentValue >= startDate && currentValue < endDate) { - // stepInHidden = true; - // break; - // } - // } - // - // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { - // var newValue = moment(endDate); - // timeStep.current = newValue.toDate(); - // } - //}; + this.setOptions(options); + } - /** - * replaces the Core toScreen methods - * @param Core - * @param time - * @param width - * @returns {number} - */ - exports.toScreen = function (Core, time, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return (time.valueOf() - conversion.offset) * conversion.scale; - } else { - var hidden = exports.isHidden(time, Core.body.hiddenDates); - if (hidden.hidden == true) { - time = hidden.startDate; - } + ItemSet.prototype = new Component(); - var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - if (time < Core.range.start) { - var conversion = Core.range.conversion(width, duration); - var hiddenBeforeStart = exports.getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset); - time = Core.options.moment(time).toDate().valueOf(); - time = time + hiddenBeforeStart; - return -(conversion.offset - time.valueOf()) * conversion.scale; - } else if (time > Core.range.end) { - var rangeAfterEnd = { start: Core.range.start, end: time }; - time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time); - var conversion = Core.range.conversion(width, duration); - return (time.valueOf() - conversion.offset) * conversion.scale; - } else { - time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time); - var conversion = Core.range.conversion(width, duration); - return (time.valueOf() - conversion.offset) * conversion.scale; - } - } + // available item types will be registered here + ItemSet.types = { + background: BackgroundItem, + box: BoxItem, + range: RangeItem, + point: PointItem }; /** - * Replaces the core toTime methods - * @param body - * @param range - * @param x - * @param width - * @returns {Date} + * Create the HTML DOM for the ItemSet */ - exports.toTime = function (Core, x, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return new Date(x / conversion.scale + conversion.offset); - } else { - var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - var totalDuration = Core.range.end - Core.range.start - hiddenDuration; - var partialDuration = totalDuration * x / width; - var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); + ItemSet.prototype._create = function () { + var frame = document.createElement('div'); + frame.className = 'vis-itemset'; + frame['timeline-itemset'] = this; + this.dom.frame = frame; - var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); - return newTime; - } - }; + // create background panel + var background = document.createElement('div'); + background.className = 'vis-background'; + frame.appendChild(background); + this.dom.background = background; - /** - * Support function - * - * @param hiddenDates - * @param range - * @returns {number} - */ - exports.getHiddenDurationBetween = function (hiddenDates, start, end) { - var duration = 0; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= start && endDate < end) { - duration += endDate - startDate; - } - } - return duration; - }; + // create foreground panel + var foreground = document.createElement('div'); + foreground.className = 'vis-foreground'; + frame.appendChild(foreground); + this.dom.foreground = foreground; - /** - * Support function - * - * @param hiddenDates - * @param start - * @param end - * @returns {number} - */ - exports.getHiddenDurationBeforeStart = function (hiddenDates, start, end) { - var duration = 0; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; + // create axis panel + var axis = document.createElement('div'); + axis.className = 'vis-axis'; + this.dom.axis = axis; - if (startDate >= start && endDate <= end) { - duration += endDate - startDate; - } - } - return duration; - }; + // create labelset + var labelSet = document.createElement('div'); + labelSet.className = 'vis-labelset'; + this.dom.labelSet = labelSet; - /** - * Support function - * @param moment - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} - */ - exports.correctTimeForHidden = function (moment, hiddenDates, range, time) { - time = moment(time).toDate().valueOf(); - time -= exports.getHiddenDurationBefore(moment, hiddenDates, range, time); - return time; - }; + // create ungrouped Group + this._updateUngrouped(); - exports.getHiddenDurationBefore = function (moment, hiddenDates, range, time) { - var timeOffset = 0; - time = moment(time).toDate().valueOf(); + // create background Group + var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); + backgroundGroup.show(); + this.groups[BACKGROUND] = backgroundGroup; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - if (time >= endDate) { - timeOffset += endDate - startDate; - } - } - } - return timeOffset; - }; + // 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); - /** - * sum the duration from start to finish, including the hidden duration, - * until the required amount has been reached, return the accumulated hidden duration - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} - */ - exports.getAccumulatedHiddenDuration = function (hiddenDates, range, requiredDuration) { - var hiddenDuration = 0; - var duration = 0; - var previousPoint = range.start; - //exports.printDates(hiddenDates) - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - duration += startDate - previousPoint; - previousPoint = endDate; - if (duration >= requiredDuration) { - break; - } else { - hiddenDuration += endDate - startDate; - } + // 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: Hammer.DIRECTION_HORIZONTAL }); + + // single select (or unselect) when tapping an item + this.hammer.on('tap', this._onSelectItem.bind(this)); + + // multi select when holding mouse/touch, or on ctrl+click + this.hammer.on('press', this._onMultiSelectItem.bind(this)); + + // add item on doubletap + this.hammer.on('doubletap', this._onAddItem.bind(this)); + + if (this.options.rtl) { + this.groupHammer = new Hammer(this.body.dom.rightContainer); + } else { + this.groupHammer = new Hammer(this.body.dom.leftContainer); } - return hiddenDuration; + this.groupHammer.on('tap', this._onGroupClick.bind(this)); + this.groupHammer.on('panstart', this._onGroupDragStart.bind(this)); + this.groupHammer.on('panmove', this._onGroupDrag.bind(this)); + this.groupHammer.on('panend', this._onGroupDragEnd.bind(this)); + this.groupHammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_VERTICAL }); + + this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this)); + this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this)); + this.body.dom.centerContainer.addEventListener('mousemove', this._onMouseMove.bind(this)); + // right-click on timeline + this.body.dom.centerContainer.addEventListener('contextmenu', this._onDragEnd.bind(this)); + + this.body.dom.centerContainer.addEventListener('mousewheel', this._onMouseWheel.bind(this)); + + // attach to the DOM + this.show(); }; /** - * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true - * @param hiddenDates - * @param time - * @param direction - * @param correctionEnabled - * @returns {*} + * 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. */ - exports.snapAwayFromHidden = function (hiddenDates, time, direction, correctionEnabled) { - var isHidden = exports.isHidden(time, hiddenDates); - if (isHidden.hidden == true) { - if (direction < 0) { - if (correctionEnabled == true) { - return isHidden.startDate - (isHidden.endDate - time) - 1; - } else { - return isHidden.startDate - 1; + ItemSet.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + var fields = ['type', 'rtl', 'align', 'order', 'stack', 'stackSubgroups', 'selectable', 'multiselect', 'itemsAlwaysDraggable', 'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'visibleFrameTemplate', 'hide', 'snap', 'groupOrderSwap', 'showTooltips', 'tooltip', 'tooltipOnItemUpdateTime']; + util.selectiveExtend(fields, this.options, options); + + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom'; + } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'item' in options.orientation) { + this.options.orientation.item = options.orientation.item; } - } else { - if (correctionEnabled == true) { - return isHidden.endDate + (time - isHidden.startDate) + 1; - } else { - return isHidden.endDate + 1; + } + + 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 ((0, _typeof3['default'])(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 ((0, _typeof3['default'])(options.margin.item) === 'object') { + util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); + } + } } } - } else { - return time; + + 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; + this.options.editable.overrideItems = false; + } else if ((0, _typeof3['default'])(options.editable) === 'object') { + util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove', 'overrideItems'], this.options.editable, options.editable); + } + } + + 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 ((0, _typeof3['default'])(options.groupEditable) === 'object') { + util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable); + } + } + + // 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(); } }; /** - * Check if a time is hidden - * - * @param time - * @param hiddenDates - * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} + * 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] */ - exports.isHidden = function (time, hiddenDates) { - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; + ItemSet.prototype.markDirty = function (options) { + this.groupIds = []; - if (time >= startDate && time < endDate) { - // if the start is entering a hidden zone - return { hidden: true, startDate: startDate, endDate: endDate }; - } + if (options && options.refreshItems) { + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); } - return { hidden: false, startDate: startDate, endDate: endDate }; }; -/***/ }, -/* 130 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _stringify = __webpack_require__(90); + /** + * Destroy the ItemSet + */ + ItemSet.prototype.destroy = function () { + this.hide(); + this.setItems(null); + this.setGroups(null); - var _stringify2 = _interopRequireDefault(_stringify); + this.hammer = null; - var _typeof2 = __webpack_require__(62); + this.body = null; + this.conversion = null; + }; - var _typeof3 = _interopRequireDefault(_typeof2); + /** + * Hide the component from the DOM + */ + ItemSet.prototype.hide = function () { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // remove the axis with dots + if (this.dom.axis.parentNode) { + this.dom.axis.parentNode.removeChild(this.dom.axis); + } - var Emitter = __webpack_require__(99); - var Hammer = __webpack_require__(112); - var hammerUtil = __webpack_require__(125); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - var Range = __webpack_require__(127); - var ItemSet = __webpack_require__(131); - var TimeAxis = __webpack_require__(142); - var Activator = __webpack_require__(143); - var DateUtil = __webpack_require__(129); - var CustomTime = __webpack_require__(144); + // remove the labelset containing all group labels + if (this.dom.labelSet.parentNode) { + this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); + } + }; /** - * Create a timeline visualization - * @constructor + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - function Core() {} + ItemSet.prototype.show = function () { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } - // turn Core into an event emitter - Emitter(Core.prototype); + // 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) { + if (this.options.rtl) { + this.body.dom.right.appendChild(this.dom.labelSet); + } else { + this.body.dom.left.appendChild(this.dom.labelSet); + } + } + }; /** - * Create the main DOM for the Core: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Core will - * be attached. - * @protected + * 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. */ - Core.prototype._create = function (container) { - this.dom = {}; + ItemSet.prototype.setSelection = function (ids) { + var i, ii, id, item; - this.dom.container = container; + if (ids == undefined) ids = []; + if (!Array.isArray(ids)) ids = [ids]; - 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.rollingModeBtn = document.createElement('div'); + // 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.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.rollingModeBtn.className = 'vis-rolling-mode-btn'; + // 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(); + } + } + }; - 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.root.appendChild(this.dom.bottom); - this.dom.root.appendChild(this.dom.rollingModeBtn); + /** + * Get the selected items by their id + * @return {Array} ids The ids of the selected items + */ + ItemSet.prototype.getSelection = function () { + return this.selection.concat([]); + }; - 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); + /** + * 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(); - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; + if (this.options.rtl) { + var right = this.body.util.toScreen(range.start); + var left = this.body.util.toScreen(range.end); + } else { + var left = this.body.util.toScreen(range.start); + var right = this.body.util.toScreen(range.end); + } - this.on('rangechange', function () { - if (this.initialDrawDone === true) { - this._redraw(); + var ids = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var rawVisibleItems = group.isVisible ? 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 (this.options.rtl) { + if (item.right < left && item.right + item.width > right) { + ids.push(item.id); + } + } else { + if (item.left < right && item.left + item.width > left) { + ids.push(item.id); + } + } + } } - }.bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('panmove', this._onDrag.bind(this)); + } - var me = this; - this._origRedraw = this._redraw.bind(this); - this._redraw = util.throttle(this._origRedraw); + return ids; + }; - this.on('_change', function (properties) { - if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) { - me._redraw(); - } else { - me._origRedraw(); + /** + * Deselect a selected item + * @param {String | Number} id + * @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; } - }); + } + }; - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = new Hammer(this.dom.root); - var pinchRecognizer = this.hammer.get('pinch').set({ enable: true }); - hammerUtil.disablePreventDefaultVertically(pinchRecognizer); - this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); - this.listeners = {}; + /** + * 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; - var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend' - // TODO: cleanup - //'touch', 'pinch', - //'tap', 'doubletap', 'hold', - //'dragstart', 'drag', 'dragend', - //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (type) { - var listener = function listener(event) { - if (me.isActive()) { - me.emit(type, event); - } - }; - me.hammer.on(type, listener); - me.listeners[type] = listener; - }); - - // emulate a touch event (emitted before the start of a pan, pinch, tap, or press) - hammerUtil.onTouch(this.hammer, function (event) { - me.emit('touch', event); - }.bind(this)); - - // emulate a release event (emitted after a pan, pinch, tap, or press) - hammerUtil.onRelease(this.hammer, function (event) { - me.emit('release', event); - }.bind(this)); - - function onMouseWheel(event) { - if (this.isActive()) { - this.emit('mousewheel', event); - } - - // prevent scrolling if not specified explicitly or when horizontalScroll is true - if (!this.options.verticalScroll || this.options.horizontalScroll) return; - - // prevent scrolling when zoomKey defined or activated - if (!this.options.zoomKey || event[this.options.zoomKey]) return; - - // Prevent default actions caused by mouse wheel - // (else the page and timeline both scroll) - event.preventDefault(); - - 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 current = this.props.scrollTop; - var adjusted = current + delta * 120; - - if (this.isActive()) { - this._setScrollTop(adjusted); - this._redraw(); - this.emit('scroll', event); - } - } + // recalculate absolute position (before redrawing groups) + this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; - if (this.dom.centerContainer.addEventListener) { - // IE9, Chrome, Safari, Opera - this.dom.centerContainer.addEventListener("mousewheel", onMouseWheel.bind(this), false); - // Firefox - this.dom.centerContainer.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); + if (this.options.rtl) { + this.props.right = this.body.domProps.right.width + this.body.domProps.border.right; } else { - // IE 6/7/8 - this.dom.centerContainer.attachEvent("onmousewheel", onMouseWheel.bind(this)); - } - - function onMouseScrollSide(event) { - if (!me.options.verticalScroll) return; - event.preventDefault(); - if (me.isActive()) { - var adjusted = -event.target.scrollTop; - me._setScrollTop(adjusted); - me._redraw(); - me.emit('scrollSide', event); - } + this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; } - this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); - this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); + // update class name + frame.className = 'vis-itemset'; - var itemAddedToTimeline = false; + // reorder the groups (if needed) + resized = this._orderGroups() || resized; - function handleDragOver(event) { - if (event.preventDefault) { - event.preventDefault(); // Necessary. Allows us to drop. - } + // 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; + var scrolled = range.start != this.lastRangeStart; + var forceRestack = zoomed || scrolled; + this.lastVisibleInterval = visibleInterval; + this.lastRangeStart = range.start; + this.props.lastWidth = this.props.width; - // make sure your target is a vis element - if (!event.target.className.indexOf("vis") > -1) return; + 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; - // make sure only one item is added every time you're over the timeline - if (itemAddedToTimeline) return; + // redraw the background group + this.groups[BACKGROUND].redraw(range, nonFirstMargin, forceRestack); - event.dataTransfer.dropEffect = 'move'; - itemAddedToTimeline = true; - return false; - } + // redraw all regular groups + util.forEach(this.groups, function (group) { + var groupMargin = group == firstGroup ? firstMargin : nonFirstMargin; + var groupResized = group.redraw(range, groupMargin, forceRestack); + resized = groupResized || resized; + height += group.height; + }); + height = Math.max(height, minHeight); - function handleDrop(event) { - // prevent redirect to blank page - Firefox - if (event.preventDefault) { - event.preventDefault(); - } - if (event.stopPropagation) { - event.stopPropagation(); - } - // return when dropping non-vis items - try { - var itemData = JSON.parse(event.dataTransfer.getData("text")); - if (!itemData.content) return; - } catch (err) { - return false; - } + // update frame height + frame.style.height = asSize(height); - itemAddedToTimeline = false; - event.center = { - x: event.clientX, - y: event.clientY - }; - me.itemSet._onAddItem(event); + // calculate actual size + this.props.width = frame.offsetWidth; + this.props.height = height; - return false; + // 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); + if (this.options.rtl) { + this.dom.axis.style.right = '0'; + } else { + this.dom.axis.style.left = '0'; } - this.dom.center.addEventListener('dragover', handleDragOver.bind(this), false); - this.dom.center.addEventListener('drop', handleDrop.bind(this), false); - - this.customTimes = []; - - // store state information needed for touch events - this.touch = {}; - - this.redrawCount = 0; - this.initialDrawDone = false; + this.initialItemSetDrawn = true; + // check if this component is resized + resized = this._isResized() || resized; - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); + return resized; }; /** - * Set options. Options will be passed to all components loaded in the Timeline. - * @param {Object} [options] - * {String} orientation - * Vertical orientation for the Timeline, - * can be 'bottom' (default) or 'top'. - * {String | Number} width - * Width for the timeline, a number in pixels or - * a css string like '1000px' or '75%'. '100%' by default. - * {String | Number} height - * Fixed height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. If undefined, - * The Timeline will automatically size such that - * its contents fit. - * {String | Number} minHeight - * Minimum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {String | Number} maxHeight - * Maximum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {Number | Date | String} start - * Start date for the visible window - * {Number | Date | String} end - * End date for the visible window + * Get the first group, aligned with the axis + * @return {Group | null} firstGroup + * @private */ - 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', 'rtl', 'zoomKey', 'horizontalScroll', 'verticalScroll']; - util.selectiveExtend(fields, this.options, options); + 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]; - this.dom.rollingModeBtn.style.visibility = 'hidden'; + return firstGroup || null; + }; - if (this.options.rtl) { - this.dom.container.style.direction = "rtl"; - this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical-rtl'; - } + /** + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. + * @protected + */ + ItemSet.prototype._updateUngrouped = function () { + var ungrouped = this.groups[UNGROUPED]; + var background = this.groups[BACKGROUND]; + var item, itemId; - if (this.options.verticalScroll) { - if (this.options.rtl) { - this.dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll'; - } else { - this.dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll'; - } - } + if (this.groupsData) { + // remove the group holding all ungrouped items + if (ungrouped) { + ungrouped.hide(); + delete this.groups[UNGROUPED]; - this.options.orientation = { item: undefined, axis: undefined }; - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation = { - item: options.orientation, - axis: options.orientation - }; - } else if ((0, _typeof3['default'])(options.orientation) === 'object') { - if ('item' in options.orientation) { - this.options.orientation.item = options.orientation.item; - } - if ('axis' in options.orientation) { - this.options.orientation.axis = options.orientation.axis; + 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 (this.options.orientation.axis === 'both') { - if (!this.timeAxis2) { - var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body); - timeAxis2.setOptions = function (options) { - var _options = options ? util.extend({}, options) : {}; - _options.orientation = 'top'; // override the orientation option, always top - TimeAxis.prototype.setOptions.call(timeAxis2, _options); - }; - this.components.push(timeAxis2); - } - } else { - if (this.timeAxis2) { - var index = this.components.indexOf(this.timeAxis2); - if (index !== -1) { - this.components.splice(index, 1); + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + ungrouped.add(item); } - this.timeAxis2.destroy(); - this.timeAxis2 = null; } - } - - // 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); + ungrouped.show(); } + } + }; - 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; - } - } - } + /** + * Get the element for the labelset + * @return {HTMLElement} labelSet + */ + ItemSet.prototype.getLabelSet = function () { + return this.dom.labelSet; + }; - if ('showCustomTime' in options) { - throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])'); - } + /** + * Set items + * @param {vis.DataSet | null} items + */ + ItemSet.prototype.setItems = function (items) { + var me = this, + ids, + oldItemsData = this.itemsData; - // enable/disable autoResize - this._initAutoResize(); + // 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'); } - // 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(); - } + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - this.configurator.setOptions(options.configure); + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } - // 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); + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); }); - this.configurator.setModuleOptions({ global: appliedOptions }); + + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); + + // update the group holding all ungrouped items + this._updateUngrouped(); } - this._redraw(); + this.body.emitter.emit('_change', { queue: true }); }; /** - * Returns true when the Timeline is active. - * @returns {boolean} + * Get the current items + * @returns {vis.DataSet | null} */ - Core.prototype.isActive = function () { - return !this.activator || this.activator.active; + ItemSet.prototype.getItems = function () { + return this.itemsData; }; /** - * Destroy the Core, clean up all DOM elements and event listeners. + * Set groups + * @param {vis.DataSet} groups */ - Core.prototype.destroy = function () { - // unbind datasets - this.setItems(null); - this.setGroups(null); - - // remove all event listeners - this.off(); + ItemSet.prototype.setGroups = function (groups) { + var me = this, + ids; - // stop checking for changed size - this._stopAutoResize(); + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.off(event, callback); + }); - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw } - this.dom = null; - // remove Activator - if (this.activator) { - this.activator.destroy(); - delete this.activator; + // 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'); } - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; + if (this.groupsData) { + // go over all groups nesting + var groupsData = this.groupsData; + if (this.groupsData instanceof DataView) { + groupsData = this.groupsData.getDataSet(); } - } - this.listeners = null; - this.hammer = null; - - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - return component.destroy(); - }); - this.body = null; - }; + groupsData.get().forEach(function (group) { + if (group.nestedGroups) { + group.nestedGroups.forEach(function (nestedGroupId) { + var updatedNestedGroup = groupsData.get(nestedGroupId); + updatedNestedGroup.nestedInGroup = group.id; + if (group.showNested == false) { + updatedNestedGroup.visible = false; + } + groupsData.update(updatedNestedGroup); + }); + } + }); - /** - * 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; - }); + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); } - if (customTimes.length > 0) { - customTimes[0].setCustomTime(time); - } + // update the group holding all ungrouped items + this._updateUngrouped(); + + // update the order of all items in each group + this._order(); + + this.body.emitter.emit('_change', { queue: true }); }; /** - * Retrieve the current custom time. - * @param {number} [id=undefined] Id of the custom time bar. - * @return {Date | undefined} customTime + * Get the current groups + * @returns {vis.DataSet | null} groups */ - 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 ' + (0, _stringify2['default'])(id)); - } - return customTimes[0].getCustomTime(); + ItemSet.prototype.getGroups = function () { + return this.groupsData; }; /** - * Set a custom title for the custom time bar. - * @param {String} [title] Custom title - * @param {number} [id=undefined] Id of the custom time bar. + * Remove an item by its id + * @param {String | Number} id */ - Core.prototype.setCustomTimeTitle = function (title, id) { - var customTimes = this.customTimes.filter(function (component) { - return component.options.id === id; - }); + ItemSet.prototype.removeItem = function (id) { + var item = this.itemsData.get(id), + dataset = this.itemsData.getDataSet(), + itemObj = this.items[id]; - if (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); - } - if (customTimes.length > 0) { - return customTimes[0].setCustomTitle(title); + 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); + } + }); } }; /** - * Retrieve meta information from an event. - * Should be overridden by classes extending Core - * @param {Event} event - * @return {Object} An object with related information. + * Get the time of an item based on it's data and options.type + * @param {Object} itemData + * @returns {string} Returns the type + * @private */ - Core.prototype.getEventProperties = function (event) { - return { event: event }; + ItemSet.prototype._getType = function (itemData) { + return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); }; /** - * 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 + * Get the group id for an item + * @param {Object} itemData + * @returns {string} Returns the groupId + * @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 ' + (0, _stringify2['default'])(id) + ' already exists'); + 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 customTime = new CustomTime(this.body, util.extend({}, this.options, { - time: timestamp, - id: id - })); + /** + * Handle updated items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onUpdate = function (ids) { + var me = this; - this.customTimes.push(customTime); - this.components.push(customTime); - this._redraw(); + ids.forEach(function (id) { + var itemData = me.itemsData.get(id, me.itemOptions); + var item = me.items[id]; + var type = itemData ? me._getType(itemData) : null; - return id; + var constructor = ItemSet.types[type]; + var selected; + + if (item) { + // update item + if (!constructor || !(item instanceof constructor)) { + // item type has changed, delete the item and recreate it + selected = item.selected; // preserve selection of this item + me._removeItem(item); + item = null; + } else { + me._updateItem(item, itemData); + } + } + + if (!item && itemData) { + // 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._order(); + this.body.emitter.emit('_change', { queue: true }); }; /** - * 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 + * Handle added items + * @param {Number[]} ids + * @protected */ - Core.prototype.removeCustomTime = function (id) { - var customTimes = this.customTimes.filter(function (bar) { - return bar.options.id === id; + ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; + + /** + * 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 (customTimes.length === 0) { - throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id)); + if (count) { + // update order + this._order(); + this.body.emitter.emit('_change', { queue: true }); } + }; - customTimes.forEach(function (customTime) { - this.customTimes.splice(this.customTimes.indexOf(customTime), 1); - this.components.splice(this.components.indexOf(customTime), 1); - customTime.destroy(); - }.bind(this)); + /** + * Update the order of item in all groups + * @private + */ + ItemSet.prototype._order = function () { + // reorder the items in all groups + // TODO: optimization: only reorder groups affected by the changed items + util.forEach(this.groups, function (group) { + group.order(); + }); }; /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * Handle updated groups + * @param {Number[]} ids + * @private */ - Core.prototype.getVisibleItems = function () { - return this.itemSet && this.itemSet.getVisibleItems() || []; + ItemSet.prototype._onUpdateGroups = function (ids) { + this._onAddGroups(ids); }; /** - * 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'. + * Handle changed groups (added or updated) + * @param {Number[]} ids + * @private */ - Core.prototype.fit = function (options) { - var range = this.getDataRange(); + ItemSet.prototype._onAddGroups = function (ids) { + var me = this; - // skip range set if there is no min and max date - if (range.min === null && range.max === null) { - return; - } + ids.forEach(function (id) { + var groupData = me.groupsData.get(id); + var group = me.groups[id]; - // 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); + if (!group) { + // check for reserved ids + if (id == UNGROUPED || id == BACKGROUND) { + throw new Error('Illegal group id. ' + id + ' is a reserved id.'); + } + + var groupOptions = (0, _create2['default'])(me.options); + util.extend(groupOptions, { + height: null + }); + + group = new Group(id, groupData, me); + me.groups[id] = group; + + // add items with this groupId to the new group + for (var itemId in me.items) { + if (me.items.hasOwnProperty(itemId)) { + var item = me.items[itemId]; + if (item.data.group == id) { + group.add(item); + } + } + } + + group.order(); + group.show(); + } else { + // update group + group.setData(groupData); + } + }); + + this.body.emitter.emit('_change', { queue: true }); }; /** - * Calculate the data range of the items start and end dates - * @returns {{min: Date | null, max: Date | null}} - * @protected + * Handle removed groups + * @param {Number[]} ids + * @private */ - Core.prototype.getDataRange = function () { - // must be implemented by Timeline and Graph2d - throw new Error('Cannot invoke abstract method getDataRange'); + ItemSet.prototype._onRemoveGroups = function (ids) { + var groups = this.groups; + ids.forEach(function (id) { + var group = groups[id]; + + if (group) { + group.hide(); + delete groups[id]; + } + }); + + this.markDirty(); + + this.body.emitter.emit('_change', { queue: true }); }; /** - * 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'. + * Reorder the groups if needed + * @return {boolean} changed + * @private */ - 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); + ItemSet.prototype._orderGroups = function () { + if (this.groupsData) { + // reorder the groups + var groupIds = this.groupsData.getIds({ + order: this.options.groupOrder + }); + + groupIds = this._orderNestedGroups(groupIds); + + var changed = !util.equalArray(groupIds, this.groupIds); + if (changed) { + // hide all groups, removes them from the DOM + var groups = this.groups; + groupIds.forEach(function (groupId) { + groups[groupId].hide(); + }); + + // show the groups again, attach them to the DOM in correct order + groupIds.forEach(function (groupId) { + groups[groupId].show(); + }); + + this.groupIds = groupIds; + } + + return changed; } else { - animation = options && options.animation !== undefined ? options.animation : true; - this.range.setRange(start, end, animation); + return false; } }; /** - * 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'. + * Reorder the nested groups + * @return {boolean} changed + * @private */ - Core.prototype.moveTo = function (time, options) { - var interval = this.range.end - this.range.start; - var t = util.convert(time, 'Date').valueOf(); + ItemSet.prototype._orderNestedGroups = function (groupIds) { + var newGroupIdsOrder = []; - var start = t - interval / 2; - var end = t + interval / 2; - var animation = options && options.animation !== undefined ? options.animation : true; + groupIds.forEach(function (groupId) { + var groupData = this.groupsData.get(groupId); + if (!groupData.nestedInGroup) { + newGroupIdsOrder.push(groupId); + } + if (groupData.nestedGroups) { + var nestedGroups = this.groupsData.get({ + filter: function filter(nestedGroup) { + return nestedGroup.nestedInGroup == groupId; + }, + order: this.options.groupOrder + }); + var nestedGroupIds = nestedGroups.map(function (nestedGroup) { + return nestedGroup.id; + }); + newGroupIdsOrder = newGroupIdsOrder.concat(nestedGroupIds); + } + }, this); + return newGroupIdsOrder; + }; + + /** + * Add a new item + * @param {Item} item + * @private + */ + ItemSet.prototype._addItem = function (item) { + this.items[item.id] = item; - this.range.setRange(start, end, animation); + // add to group + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + + if (!group) { + item.groupShowing = false; + } else if (group && group.data && group.data.showNested) { + item.groupShowing = true; + } + + if (group) group.add(item); }; /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range + * Update an existing item + * @param {Item} item + * @param {Object} itemData + * @private */ - Core.prototype.getWindow = function () { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; + ItemSet.prototype._updateItem = function (item, itemData) { + // update the items data (will redraw the item when displayed) + item.setData(itemData); + + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (!group) { + item.groupShowing = false; + } else if (group && group.data && group.data.showNested) { + item.groupShowing = true; + } }; /** - * Zoom in the window such that given time is centered on screen. - * @param {Number} percentage - must be between [0..1] - * @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'. + * 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 */ - Core.prototype.zoomIn = function (percentage, options) { - if (!percentage || percentage < 0 || percentage > 1) return; - var range = this.getWindow(); - var start = range.start.valueOf(); - var end = range.end.valueOf(); - var interval = end - start; - var newInterval = interval / (1 + percentage); - var distance = (interval - newInterval) / 2; - var newStart = start + distance; - var newEnd = end - distance; + 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); - this.setWindow(newStart, newEnd, options); + // remove from group + item.parent && item.parent.remove(item); }; /** - * Zoom out the window such that given time is centered on screen. - * @param {Number} percentage - must be between [0..1] - * @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'. + * Create an array containing all items being a range (having an end date) + * @param array + * @returns {Array} + * @private */ - Core.prototype.zoomOut = function (percentage, options) { - if (!percentage || percentage < 0 || percentage > 1) return; - var range = this.getWindow(); - var start = range.start.valueOf(); - var end = range.end.valueOf(); - var interval = end - start; - var newStart = start - interval * percentage / 2; - var newEnd = end + interval * percentage / 2; + ItemSet.prototype._constructByEndArray = function (array) { + var endArray = []; - this.setWindow(newStart, newEnd, options); + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof RangeItem) { + endArray.push(array[i]); + } + } + return endArray; }; /** - * Force a redraw. Can be overridden by implementations of Core + * Register the clicked item on touch, before dragStart is initiated. * - * Note: this function will be overridden on construction with a trottled version + * 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 */ - Core.prototype.redraw = function () { - this._redraw(); + 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; }; /** - * Redraw for internal use. Redraws all components. See also the public - * method redraw. - * @protected + * Given an group id, returns the index it has. + * + * @param {Number} groupID + * @private */ - Core.prototype._redraw = function () { - this.redrawCount++; - var resized = false; - var options = this.options; - var props = this.props; - var dom = this.dom; - - if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible - - DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates); + ItemSet.prototype._getGroupIndex = function (groupId) { + for (var i = 0; i < this.groupIds.length; i++) { + if (groupId == this.groupIds[i]) return i; + } + }; - // 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'); + /** + * Start dragging the selected events + * @param {Event} event + * @private + */ + ItemSet.prototype._onDragStart = function (event) { + if (this.touchParams.itemIsDragging) { + return; } + var item = this.touchParams.item || null; + var me = this; + var props; - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); + if (item && (item.selected || this.options.itemsAlwaysDraggable)) { - // 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; - props.borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight; - props.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) { - props.borderRootWidth = props.borderRootHeight; - } + if (this.options.editable.overrideItems && !this.options.editable.updateTime && !this.options.editable.updateGroup) { + return; + } - // 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; + // override options.editable + if (item.editable != null && !item.editable.updateTime && !item.editable.updateGroup && !this.options.editable.overrideItems) { + return; + } - // TODO: compensate borders when any of the panels is empty. + var dragLeftItem = this.touchParams.dragLeftItem; + var dragRightItem = this.touchParams.dragRightItem; + this.touchParams.itemIsDragging = true; + this.touchParams.selectedItem = item; - // 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 + props.borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); + if (dragLeftItem) { + props = { + item: dragLeftItem, + initialX: event.center.x, + dragLeft: true, + data: this._cloneItemData(item.data) + }; - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - props.borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - props.borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; + this.touchParams.itemProps = [props]; + } else if (dragRightItem) { + props = { + item: dragRightItem, + initialX: event.center.x, + dragRight: true, + data: this._cloneItemData(item.data) + }; - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - props.borderRootWidth; + this.touchParams.itemProps = [props]; + } else { + var baseGroupIndex = this._getGroupIndex(item.data.group); - if (!this.initialDrawDone) { - props.scrollbarWidth = util.getScrollBarWidth(); - } + var itemsToDrag = this.options.itemsAlwaysDraggable && !item.selected ? [item.id] : this.getSelection(); - if (options.verticalScroll) { - if (options.rtl) { - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.right.width = dom.rightContainer.clientWidth + props.scrollbarWidth || -props.border.right; - } else { - props.left.width = dom.leftContainer.clientWidth + props.scrollbarWidth || -props.border.left; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; + this.touchParams.itemProps = itemsToDrag.map(function (id) { + var item = me.items[id]; + var groupIndex = me._getGroupIndex(item.data.group); + return { + item: item, + initialX: event.center.x, + groupOffset: baseGroupIndex - groupIndex, + data: this._cloneItemData(item.data) + }; + }.bind(this)); } - } else { - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - } - this._setDOM(); + 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); + } + }; - // 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 - var offset = this._updateScrollTop(); + /** + * Start creating a new range item by dragging. + * @param {Event} event + * @private + */ + ItemSet.prototype._onDragStartAddItem = function (event) { + var snap = this.options.snap || null; - // reposition the scrollable contents - if (options.orientation.item != 'top') { - offset += Math.max(props.centerContainer.height - props.center.height - props.border.top - props.border.bottom, 0); + if (this.options.rtl) { + var xAbs = util.getAbsoluteRight(this.dom.frame); + var x = xAbs - event.center.x + 10; // plus 10 to compensate for the drag starting as soon as you've moved 10px + } else { + 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 } - dom.center.style.top = offset + 'px'; - - // show shadows when vertical scrolling is available - var visibilityTop = props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = props.scrollTop == 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 (options.verticalScroll) { - dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll'; - dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll'; + var time = this.body.util.toTime(x); + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); + var start = snap ? snap(time, scale, step) : time; + var end = start; - dom.shadowTopRight.style.visibility = "hidden"; - dom.shadowBottomRight.style.visibility = "hidden"; - dom.shadowTopLeft.style.visibility = "hidden"; - dom.shadowBottomLeft.style.visibility = "hidden"; + var itemData = { + type: 'range', + start: start, + end: end, + content: 'new item' + }; - dom.left.style.top = '0px'; - dom.right.style.top = '0px'; - } + var id = util.randomUUID(); + itemData[this.itemsData._fieldId] = id; - if (!options.verticalScroll || props.center.height < props.centerContainer.height) { - dom.left.style.top = offset + 'px'; - dom.right.style.top = offset + 'px'; - dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' '); - dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' '); - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - this._setDOM(); + var group = this.groupFromTarget(event); + if (group) { + itemData.group = group.groupId; } + var newItem = new RangeItem(itemData, this.conversion, this.options); + newItem.id = id; // TODO: not so nice setting id afterwards + newItem.data = this._cloneItemData(itemData); + this._addItem(newItem); + this.touchParams.selectedItem = newItem; - // enable/disable vertical panning - var contentsOverflow = props.center.height > props.centerContainer.height; - this.hammer.get('pan').set({ - direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL - }); + var props = { + item: newItem, + initialX: event.center.x, + data: newItem.data + }; - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - var MAX_REDRAW = 5; - if (resized) { - if (this.redrawCount < MAX_REDRAW) { - this.body.emitter.emit('_change'); - return; - } else { - console.log('WARNING: infinite loop in redraw?'); - } + if (this.options.rtl) { + props.dragLeft = true; } else { - this.redrawCount = 0; + props.dragRight = true; } - this.initialDrawDone = true; - - //Emit public 'changed' event for UI updates, see issue #1592 - this.body.emitter.emit("changed"); - }; - - Core.prototype._setDOM = function () { - var props = this.props; - var dom = this.dom; - - props.leftContainer.width = props.left.width; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - props.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'; - dom.center.style.left = '0'; - dom.left.style.left = '0'; - dom.right.style.left = '0'; - }; + this.touchParams.itemProps = [props]; - // TODO: deprecated since version 1.1.0, remove some day - Core.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); + event.stopPropagation(); }; /** - * 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. + * Drag selected items + * @param {Event} event + * @private */ - Core.prototype.setCurrentTime = function (time) { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); - } + ItemSet.prototype._onDrag = function (event) { + if (this.touchParams.itemProps) { + event.stopPropagation(); - this.currentTime.setCurrentTime(time); - }; + var me = this; + var snap = this.options.snap || null; - /** - * 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'); - } + if (this.options.rtl) { + var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.right.width; + } else { + var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; + } - return this.currentTime.getCurrentTime(); - }; + var scale = this.body.util.getScale(); + var step = this.body.util.getStep(); - /** - * 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 - */ - // TODO: move this function to Range - Core.prototype._toTime = function (x) { - return DateUtil.toTime(this, x, this.props.center.width); - }; + //only calculate the new group for the item that's actually dragged + var selectedItem = this.touchParams.selectedItem; + var updateGroupAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.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); + } + } + } - /** - * 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 - */ - // 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); - }; + // move + this.touchParams.itemProps.forEach(function (props) { + var current = me.body.util.toTime(event.center.x - xOffset); + var initial = me.body.util.toTime(props.initialX - xOffset); - /** - * 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); - }; + if (this.options.rtl) { + var offset = -(current - initial); // ms + } else { + var offset = current - initial; // ms + } - /** - * 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; - }; + var itemData = this._cloneItemData(props.item.data); // clone the data + if (props.item.editable != null && !props.item.editable.updateTime && !props.item.editable.updateGroup && !me.options.editable.overrideItems) { + return; + } - /** - * Initialize watching when option autoResize is true - * @private - */ - Core.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); - } else { - this._stopAutoResize(); - } - }; + var updateTimeAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime; + if (updateTimeAllowed) { + if (props.dragLeft) { + // drag left side of a range item + if (this.options.rtl) { + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var end = new Date(initialEnd.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.end = snap ? snap(end, scale, step) : end; + } + } else { + if (itemData.start != undefined) { + var initialStart = util.convert(props.data.start, 'Date'); + var start = new Date(initialStart.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + } + } + } else if (props.dragRight) { + // drag right side of a range item + if (this.options.rtl) { + if (itemData.start != undefined) { + var initialStart = util.convert(props.data.start, 'Date'); + var start = new Date(initialStart.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + } + } else { + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var end = new Date(initialEnd.valueOf() + offset); + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.end = snap ? snap(end, scale, step) : end; + } + } + } else { + // drag both start and end + if (itemData.start != undefined) { - /** - * 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; + var initialStart = util.convert(props.data.start, 'Date').valueOf(); + var start = new Date(initialStart + offset); - this._stopAutoResize(); + if (itemData.end != undefined) { + var initialEnd = util.convert(props.data.end, 'Date'); + var duration = initialEnd.valueOf() - initialStart.valueOf(); - this._onResize = function () { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + itemData.end = new Date(itemData.start.valueOf() + duration); + } else { + // TODO: pass a Moment instead of a Date to snap(). (Breaking change) + itemData.start = snap ? snap(start, scale, step) : start; + } + } + } + } - if (me.dom.root) { - // check whether the frame is resized - // Note: we compare offsetWidth here, not clientWidth. For some reason, - // IE does not restore the clientWidth from 0 to the actual width after - // changing the timeline's container display style from none to visible - if (me.dom.root.offsetWidth != me.props.lastWidth || me.dom.root.offsetHeight != me.props.lastHeight) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; - me.props.scrollbarWidth = util.getScrollBarWidth(); + if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) { + if (itemData.group != undefined) { + var newOffset = newGroupBase - props.groupOffset; - me.body.emitter.emit('_change'); + //make sure we stay in bounds + newOffset = Math.max(0, newOffset); + newOffset = Math.min(me.groupIds.length - 1, newOffset); + itemData.group = me.groupIds[newOffset]; + } } - } - }; - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + // confirm moving the item + itemData = this._cloneItemData(itemData); // convert start and end to the correct type + me.options.onMoving(itemData, function (itemData) { + if (itemData) { + props.item.setData(this._cloneItemData(itemData, 'Date')); + } + }.bind(this)); + }.bind(this)); - //Prevent initial unnecessary redraw - if (me.dom.root) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; + this.body.emitter.emit('_change'); } - - this.watchTimer = setInterval(this._onResize, 1000); }; /** - * Stop watching for a resize of the frame. + * Move an item to another group + * @param {Item} item + * @param {String | Number} groupId * @private */ - Core.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; - } + 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(); - // remove event listener on window.resize - if (this._onResize) { - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; + item.data.group = group.groupId; + + group.add(item); + group.order(); } }; /** - * Start moving the timeline vertically + * End of dragging selected items * @param {Event} event * @private */ - Core.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - this.touch.initialScrollTop = this.props.scrollTop; - }; - - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onPinch = function (event) { - this.touch.allowDragging = false; - }; + ItemSet.prototype._onDragEnd = function (event) { + this.touchParams.itemIsDragging = false; + if (this.touchParams.itemProps) { + event.stopPropagation(); - /** - * Move the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onDrag = function (event) { - if (!event) return; - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; + var me = this; + var dataset = this.itemsData.getDataSet(); + var itemProps = this.touchParams.itemProps; + this.touchParams.itemProps = null; - var delta = event.deltaY; + itemProps.forEach(function (props) { + var id = props.item.id; + var exists = me.itemsData.get(id, me.itemOptions) != null; - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + 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); + } - if (this.options.verticalScroll) { - this.dom.left.parentNode.scrollTop = -this.props.scrollTop; - this.dom.right.parentNode.scrollTop = -this.props.scrollTop; - } + // force re-stacking of all items next redraw + me.body.emitter.emit('_change'); + }); + } else { + // update existing item + var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type + me.options.onMove(itemData, function (itemData) { + if (itemData) { + // apply changes + itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) + dataset.update(itemData); + } else { + // restore original values + props.item.setData(props.data); - if (newScrollTop != oldScrollTop) { - this.emit("verticalDrag"); + me.body.emitter.emit('_change'); + } + }); + } + }.bind(this)); } }; - /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private - */ - Core.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; - }; - - /** - * 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; - } + ItemSet.prototype._onGroupClick = function (event) { + var group = this.groupFromTarget(event); - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + if (!group || !group.nestedGroups) return; - if (this.options.verticalScroll) { - this.dom.left.parentNode.scrollTop = -this.props.scrollTop; - this.dom.right.parentNode.scrollTop = -this.props.scrollTop; + var groupsData = this.groupsData; + if (this.groupsData instanceof DataView) { + groupsData = this.groupsData.getDataSet(); } - return this.props.scrollTop; - }; + group.showNested = !group.showNested; - /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private - */ - Core.prototype._getScrollTop = function () { - return this.props.scrollTop; - }; + var nestedGroups = groupsData.get(group.nestedGroups).map(function (nestedGroup) { + if (nestedGroup.visible == undefined) { + nestedGroup.visible = true; + } + nestedGroup.visible = !!group.showNested; + return nestedGroup; + }); + groupsData.update(nestedGroups); - /** - * Load a configurator - * @return {Object} - * @private - */ - Core.prototype._createConfigurator = function () { - throw new Error('Cannot invoke abstract method _createConfigurator'); + if (group.showNested) { + util.removeClassName(group.dom.label, 'collapsed'); + util.addClassName(group.dom.label, 'expanded'); + } else { + util.removeClassName(group.dom.label, 'expanded'); + var collapsedDirClassName = this.options.rtl ? 'collapsed-rtl' : 'collapsed'; + util.addClassName(group.dom.label, collapsedDirClassName); + } }; - module.exports = Core; + ItemSet.prototype._onGroupDragStart = function (event) { + if (this.options.groupEditable.order) { + this.groupTouchParams.group = this.groupFromTarget(event); -/***/ }, -/* 131 */ -/***/ function(module, exports, __webpack_require__) { + if (this.groupTouchParams.group) { + event.stopPropagation(); - 'use strict'; + this.groupTouchParams.originalOrder = this.groupsData.getIds({ + order: this.options.groupOrder + }); + } + } + }; - var _create = __webpack_require__(55); + ItemSet.prototype._onGroupDrag = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); - var _create2 = _interopRequireDefault(_create); + var groupsData = this.groupsData; + if (this.groupsData instanceof DataView) { + groupsData = this.groupsData.getDataSet(); + } + // drag from one group to another + var group = this.groupFromTarget(event); - var _typeof2 = __webpack_require__(62); + // 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; + } + } + } - var _typeof3 = _interopRequireDefault(_typeof2); + if (group && group != this.groupTouchParams.group) { + var targetGroup = groupsData.get(group.groupId); + var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); - var _Popup = __webpack_require__(132); + // switch groups + if (draggedGroup && targetGroup) { + this.options.groupOrderSwap(draggedGroup, targetGroup, groupsData); + groupsData.update(draggedGroup); + groupsData.update(targetGroup); + } - var _Popup2 = _interopRequireDefault(_Popup); + // fetch current order of groups + var newOrder = groupsData.getIds({ + order: this.options.groupOrder + }); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // in case of changes since _onGroupDragStart + if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) { + 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++; + } - var Hammer = __webpack_require__(112); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - var TimeStep = __webpack_require__(133); - var Component = __webpack_require__(128); - var Group = __webpack_require__(134); - var BackgroundGroup = __webpack_require__(138); - var BoxItem = __webpack_require__(139); - var PointItem = __webpack_require__(140); - var RangeItem = __webpack_require__(136); - var BackgroundItem = __webpack_require__(141); + // 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 UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var BACKGROUND = '__background__'; // reserved group id for background items without group + var switchGroupId = newOrder[curPos + newOffset]; + newOrder[curPos + newOffset] = origOrder[curPos + orgOffset]; + newOrder[slippedPosition] = switchGroupId; - /** - * 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, - stackSubgroups: true, - groupOrderSwap: function groupOrderSwap(fromGroup, toGroup, groups) { - var targetOrder = toGroup.order; - toGroup.order = fromGroup.order; - fromGroup.order = targetOrder; - }, - groupOrder: 'order', + curPos++; + } + } + } + } + } + }; - selectable: true, - multiselect: false, - itemsAlwaysDraggable: false, + ItemSet.prototype._onGroupDragEnd = function (event) { + if (this.options.groupEditable.order && this.groupTouchParams.group) { + event.stopPropagation(); - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false, - overrideItems: false - }, + // 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 { - groupEditable: { - order: false, - add: false, - remove: false - }, + // fetch current order of groups + var newOrder = dataset.getIds({ + order: me.options.groupOrder + }); - snap: TimeStep.snap, + // 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++; + } - 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); - }, + // all ok + if (curPos >= numGroups) { + break; + } - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - }, + // 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); + dataset.update(switchGroup); + dataset.update(shouldBeGroup); - tooltip: { - followMouse: false, - overflowMethod: 'flip' - }, + var switchGroupId = newOrder[curPos]; + newOrder[curPos] = origOrder[curPos]; + newOrder[slippedPosition] = switchGroupId; - tooltipOnItemUpdateTime: false - }; + curPos++; + } + } + } + }); - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); - this.options.rtl = options.rtl; + me.body.emitter.emit('groupDragged', { groupId: id }); + } + }; - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: { start: 'Date', end: 'Date' } - }; + /** + * Handle selecting/deselecting an item when tapping it + * @param {Event} event + * @private + */ + ItemSet.prototype._onSelectItem = function (event) { + if (!this.options.selectable) return; - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; + var ctrlKey = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey); + var shiftKey = event.srcEvent && event.srcEvent.shiftKey; + if (ctrlKey || shiftKey) { + this._onMultiSelectItem(event); + return; + } - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + var oldSelection = this.getSelection(); - // 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); - } - }; + var item = this.itemFromTarget(event); + var selection = item ? [item.id] : []; + this.setSelection(selection); - // 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); - } - }; + var newSelection = this.getSelection(); - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; + // 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 + }); + } + }; - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw + /** + * Handle hovering an item + * @param {Event} event + * @private + */ + ItemSet.prototype._onMouseOver = function (event) { + var item = this.itemFromTarget(event); + if (!item) return; - this.popup = null; + // Item we just left + var related = this.itemFromRelatedTarget(event); + if (item === related) { + // We haven't changed item, just element in the item + return; + } - this.touchParams = {}; // stores properties while dragging - this.groupTouchParams = {}; - // create the HTML DOM + var title = item.getTitle(); + if (this.options.showTooltips && title) { + if (this.popup == null) { + this.popup = new Popup(this.body.dom.root, this.options.tooltip.overflowMethod || 'flip'); + } - this._create(); + this.popup.setText(title); + var container = this.body.dom.centerContainer; + this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop); + this.popup.show(); + } else { + // Hovering over item without a title, hide popup + // Needed instead of _just_ in _onMouseOut due to #2572 + if (this.popup != null) { + this.popup.hide(); + } + } - this.setOptions(options); - } + this.body.emitter.emit('itemover', { + item: item.id, + event: event + }); + }; + ItemSet.prototype._onMouseOut = function (event) { + var item = this.itemFromTarget(event); + if (!item) return; - ItemSet.prototype = new Component(); + // Item we are going to + var related = this.itemFromRelatedTarget(event); + if (item === related) { + // We aren't changing item, just element in the item + return; + } - // available item types will be registered here - ItemSet.types = { - background: BackgroundItem, - box: BoxItem, - range: RangeItem, - point: PointItem - }; + if (this.popup != null) { + this.popup.hide(); + } - /** - * Create the HTML DOM for the ItemSet - */ - ItemSet.prototype._create = function () { - var frame = document.createElement('div'); - frame.className = 'vis-itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; + this.body.emitter.emit('itemout', { + item: item.id, + event: event + }); + }; + ItemSet.prototype._onMouseMove = function (event) { + var item = this.itemFromTarget(event); + if (!item) return; - // create background panel - var background = document.createElement('div'); - background.className = 'vis-background'; - frame.appendChild(background); - this.dom.background = background; + if (this.options.showTooltips && this.options.tooltip.followMouse) { + if (this.popup) { + if (!this.popup.hidden) { + var container = this.body.dom.centerContainer; + this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop); + this.popup.show(); // Redraw + } + } + } + }; - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'vis-foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; + /** + * Handle mousewheel + * @param event + * @private + */ + ItemSet.prototype._onMouseWheel = function (event) { + if (this.touchParams.itemIsDragging) { + this._onDragEnd(event); + } + }; - // create axis panel - var axis = document.createElement('div'); - axis.className = 'vis-axis'; - this.dom.axis = axis; + /** + * Handle updates of an item on double tap + * @param event + * @private + */ + ItemSet.prototype._onUpdateItem = function (item) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'vis-labelset'; - this.dom.labelSet = labelSet; + var me = this; - // create ungrouped Group - this._updateUngrouped(); + if (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); + } + }); + } + }; - // create background Group - var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); - backgroundGroup.show(); - this.groups[BACKGROUND] = backgroundGroup; + /** + * Handle creation of an item on double tap + * @param event + * @private + */ + ItemSet.prototype._onAddItem = function (event) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; - // 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); + var me = this; + var snap = this.options.snap || null; + var item = this.itemFromTarget(event); - // drag items when selected - this.hammer.on('hammer.input', function (event) { - if (event.isFirst) { - this._onTouch(event); + if (!item) { + // add item + if (this.options.rtl) { + var xAbs = util.getAbsoluteRight(this.dom.frame); + var x = xAbs - event.center.x; + } else { + var xAbs = util.getAbsoluteLeft(this.dom.frame); + var x = event.center.x - xAbs; } - }.bind(this)); - this.hammer.on('panstart', this._onDragStart.bind(this)); - this.hammer.on('panmove', this._onDrag.bind(this)); - this.hammer.on('panend', this._onDragEnd.bind(this)); - this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); + // 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(); - // single select (or unselect) when tapping an item - this.hammer.on('tap', this._onSelectItem.bind(this)); + var newItemData; + if (event.type == 'drop') { + newItemData = JSON.parse(event.dataTransfer.getData("text")); + newItemData.content = newItemData.content ? newItemData.content : 'new item'; + newItemData.start = newItemData.start ? newItemData.start : snap ? snap(start, scale, step) : start; + newItemData.type = newItemData.type || 'box'; + newItemData[this.itemsData._fieldId] = newItemData.id || util.randomUUID(); - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('press', this._onMultiSelectItem.bind(this)); + if (newItemData.type == 'range' && !newItemData.end) { + var end = this.body.util.toTime(x + this.props.width / 5); + newItemData.end = snap ? snap(end, scale, step) : end; + } + } else { + newItemData = { + start: snap ? snap(start, scale, step) : start, + content: 'new item' + }; + newItemData[this.itemsData._fieldId] = util.randomUUID(); - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); + // when default type is a range, add a default end date to the new item + if (this.options.type === 'range') { + var end = this.body.util.toTime(x + this.props.width / 5); + newItemData.end = snap ? snap(end, scale, step) : end; + } + } - if (this.options.rtl) { - this.groupHammer = new Hammer(this.body.dom.rightContainer); - } else { - this.groupHammer = new Hammer(this.body.dom.leftContainer); + var group = this.groupFromTarget(event); + if (group) { + newItemData.group = group.groupId; + } + + // execute async handler to customize (or cancel) adding an item + newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type + this.options.onAdd(newItemData, function (item) { + if (item) { + me.itemsData.getDataSet().add(item); + if (event.type == 'drop') { + me.setSelection([item.id]); + } + // TODO: need to trigger a redraw? + } + }); } + }; - this.groupHammer.on('tap', this._onGroupClick.bind(this)); - this.groupHammer.on('panstart', this._onGroupDragStart.bind(this)); - this.groupHammer.on('panmove', this._onGroupDrag.bind(this)); - this.groupHammer.on('panend', this._onGroupDragEnd.bind(this)); - this.groupHammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_VERTICAL }); + /** + * Handle selecting/deselecting multiple items when holding an item + * @param {Event} event + * @private + */ + ItemSet.prototype._onMultiSelectItem = function (event) { + if (!this.options.selectable) return; - this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this)); - this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this)); - this.body.dom.centerContainer.addEventListener('mousemove', this._onMouseMove.bind(this)); - // right-click on timeline - this.body.dom.centerContainer.addEventListener('contextmenu', this._onDragEnd.bind(this)); + var item = this.itemFromTarget(event); - this.body.dom.centerContainer.addEventListener('mousewheel', this._onMouseWheel.bind(this)); + if (item) { + // multi select items (if allowed) - // attach to the DOM - this.show(); - }; + var selection = this.options.multiselect ? this.getSelection() // take current selection + : []; // deselect current selection - /** - * 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', 'rtl', 'align', 'order', 'stack', 'stackSubgroups', 'selectable', 'multiselect', 'itemsAlwaysDraggable', 'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'visibleFrameTemplate', 'hide', 'snap', 'groupOrderSwap', 'tooltip', 'tooltipOnItemUpdateTime']; - util.selectiveExtend(fields, this.options, options); + var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false; - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom'; - } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'item' in options.orientation) { - this.options.orientation.item = options.orientation.item; - } - } + if (shiftKey && this.options.multiselect) { + // select all items between the old selection and the tapped item + var itemGroup = this.itemsData.get(item.id).group; - 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 ((0, _typeof3['default'])(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 ((0, _typeof3['default'])(options.margin.item) === 'object') { - util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); - } + // when filtering get the group of the last selected item + var lastSelectedGroup = undefined; + if (this.options.multiselectPerGroup) { + if (selection.length > 0) { + lastSelectedGroup = this.itemsData.get(selection[0]).group; } } - } - 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; - this.options.editable.overrideItems = false; - } else if ((0, _typeof3['default'])(options.editable) === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove', 'overrideItems'], this.options.editable, options.editable); + // determine the selection range + if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) { + selection.push(item.id); } - } + var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); - if ('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 ((0, _typeof3['default'])(options.groupEditable) === 'object') { - util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable); - } - } + if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) { + // select all items within the selection range + selection = []; + for (var id in this.items) { + if (this.items.hasOwnProperty(id)) { + var _item = this.items[id]; + var start = _item.data.start; + var end = _item.data.end !== undefined ? _item.data.end : start; - // 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)'); + if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) { + selection.push(_item.id); // do not use id but item.id, id itself is stringified + } + } } - 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(); - } - }; + } 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); + } + } - /** - * 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; + this.setSelection(selection); - if (options && options.refreshItems) { - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); + this.body.emitter.emit('select', { + items: this.getSelection(), + event: event }); } }; /** - * Destroy the ItemSet + * 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.destroy = function () { - this.hide(); - this.setItems(null); - this.setGroups(null); + ItemSet._getItemRange = function (itemsData) { + var max = null; + var min = null; - this.hammer = null; + itemsData.forEach(function (data) { + if (min == null || data.start < min) { + min = data.start; + } - this.body = null; - this.conversion = null; + if (data.end != undefined) { + if (max == null || data.end > max) { + max = data.end; + } + } else { + if (max == null || data.start > max) { + max = data.start; + } + } + }); + + return { + min: min, + max: max + }; }; /** - * Hide the component from the DOM + * Find an item from an element: + * searches for the attribute 'timeline-item' in the element's tree + * @param {HTMLElement} element + * @return {Item | null} item */ - 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.itemFromElement = function (element) { + var cur = element; + while (cur) { + if (cur.hasOwnProperty('timeline-item')) { + return cur['timeline-item']; + } + cur = cur.parentNode; } - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); - } + return null; + }; - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); - } + /** + * 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) { + return this.itemFromElement(event.target); }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Find an item from an event's related target: + * searches for the attribute 'timeline-item' in the related target's element tree + * @param {Event} event + * @return {Item | null} item */ - ItemSet.prototype.show = function () { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + ItemSet.prototype.itemFromRelatedTarget = function (event) { + return this.itemFromElement(event.relatedTarget); + }; - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); + /** + * 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; + var groupIds = this.groupIds; + + if (groupIds.length <= 0 && this.groupsData) { + groupIds = this.groupsData.getIds({ + order: this.options.groupOrder + }); } - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - if (this.options.rtl) { - this.body.dom.right.appendChild(this.dom.labelSet); + for (var i = 0; i < groupIds.length; i++) { + var groupId = 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; + } + + if (this.options.orientation.item === 'top') { + if (i === this.groupIds.length - 1 && clientY > top) { + return group; + } } else { - this.body.dom.left.appendChild(this.dom.labelSet); + if (i === 0 && clientY < top + foreground.offset) { + return group; + } } } + + return null; }; /** - * 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. + * 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.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(); + ItemSet.itemSetFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-itemset')) { + return target['timeline-itemset']; } + target = target.parentNode; } + + return null; }; /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items + * Clone the data of an item, and "normalize" it: convert the start and end date + * to the type (Date, Moment, ...) configured in the DataSet. If not configured, + * start and end are converted to Date. + * @param {Object} itemData, typically `item.data` + * @param {string} [type] Optional Date type. If not provided, the type from the DataSet is taken + * @return {Object} The cloned object + * @private */ - ItemSet.prototype.getSelection = function () { - return this.selection.concat([]); + ItemSet.prototype._cloneItemData = function (itemData, type) { + var clone = util.extend({}, itemData); + + if (!type) { + // convert start and end date to the type (Date, Moment, ...) configured in the DataSet + type = this.itemsData.getDataSet()._options.type; + } + + if (clone.start != undefined) { + clone.start = util.convert(clone.start, type && type.start || 'Date'); + } + if (clone.end != undefined) { + clone.end = util.convert(clone.end, type && type.end || 'Date'); + } + + return clone; }; + module.exports = ItemSet; + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var moment = __webpack_require__(82); + var DateUtil = __webpack_require__(121); + var util = __webpack_require__(1); + /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * @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.getVisibleItems = function () { - var range = this.body.range.getRange(); + function TimeStep(start, end, minimumStep, hiddenDates) { + this.moment = moment; - if (this.options.rtl) { - var right = this.body.util.toScreen(range.start); - var left = this.body.util.toScreen(range.end); + // variables + this.current = this.moment(); + this._start = this.moment(); + this._end = this.moment(); + + this.autoScale = true; + this.scale = 'day'; + this.step = 1; + + // initialize the range + this.setRange(start, end, minimumStep); + + // hidden Dates options + this.switchedDay = false; + this.switchedMonth = false; + this.switchedYear = false; + if (Array.isArray(hiddenDates)) { + this.hiddenDates = hiddenDates; + } else if (hiddenDates != undefined) { + this.hiddenDates = [hiddenDates]; } else { - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); + this.hiddenDates = []; } - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; + this.format = TimeStep.FORMAT; // default formatting + } - // 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 (this.options.rtl) { - if (item.right < left && item.right + item.width > right) { - ids.push(item.id); - } - } else { - if (item.left < right && item.left + item.width > left) { - ids.push(item.id); - } - } - } - } + // Time formatting + TimeStep.FORMAT = { + minorLabels: { + millisecond: 'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + week: 'w', + 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', + week: 'MMMM YYYY', + month: 'YYYY', + year: '' } - - return ids; }; /** - * Deselect a selected item - * @param {String | Number} id - * @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._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; - } - } + TimeStep.prototype.setMoment = function (moment) { + this.moment = moment; + + // update the date properties, can have a new utcOffset + this.current = this.moment(this.current.valueOf()); + this._start = this.moment(this._start.valueOf()); + this._end = this.moment(this._end.valueOf()); }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * 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', 'week', 'month', 'year'. + * @param {{minorLabels: Object, majorLabels: Object}} format */ - 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; - - // recalculate absolute position (before redrawing groups) - this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; + TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); + }; - if (this.options.rtl) { - this.props.right = this.body.domProps.right.width + this.body.domProps.border.right; - } else { - this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; + /** + * 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 class name - frame.className = 'vis-itemset'; - - // reorder the groups (if needed) - resized = this._orderGroups() || resized; - - // 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; - var scrolled = range.start != this.lastRangeStart; - if (zoomed || scrolled) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.lastRangeStart = range.start; - this.props.lastWidth = this.props.width; - - var restack = this.stackDirty; - var firstGroup = this._firstGroup(); - var firstMargin = { - item: margin.item, - axis: margin.axis - }; - var nonFirstMargin = { - item: margin.item, - axis: margin.item.vertical / 2 - }; - var height = 0; - var minHeight = margin.axis + margin.item.vertical; - - // redraw the background group - this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); - - // redraw all regular groups - util.forEach(this.groups, function (group) { - var groupMargin = group == firstGroup ? firstMargin : nonFirstMargin; - var groupResized = group.redraw(range, groupMargin, restack); - resized = groupResized || resized; - height += group.height; - }); - height = Math.max(height, minHeight); - this.stackDirty = false; + this._start = start != undefined ? this.moment(start.valueOf()) : new Date(); + this._end = end != undefined ? this.moment(end.valueOf()) : new Date(); - // update frame height - frame.style.height = asSize(height); + if (this.autoScale) { + this.setMinimumStep(minimumStep); + } + }; - // calculate actual size - this.props.width = frame.offsetWidth; - this.props.height = height; + /** + * Set the range iterator to the start date. + */ + TimeStep.prototype.start = function () { + this.current = this._start.clone(); + this.roundToMinor(); + }; - // 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); - if (this.options.rtl) { - this.dom.axis.style.right = '0'; - } else { - this.dom.axis.style.left = '0'; + /** + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date + */ + TimeStep.prototype.roundToMinor = function () { + // round to floor + // IMPORTANT: we have no breaks in this switch! (this is no bug) + // noinspection FallThroughInSwitchStatementJS + switch (this.scale) { + case 'year': + this.current.year(this.step * Math.floor(this.current.year() / this.step)); + this.current.month(0); + case 'month': + this.current.date(1); + case 'week': + this.current.weekday(0); + 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 } - this.initialItemSetDrawn = true; - // check if this component is resized - resized = this._isResized() || resized; - - return resized; + 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 'week': + this.current.subtract(this.current.week() % this.step, 'week');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; + } + } }; /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup - * @private + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date */ - 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; + TimeStep.prototype.hasNext = function () { + return this.current.valueOf() <= this._end.valueOf(); }; /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected + * Do the next step */ - ItemSet.prototype._updateUngrouped = function () { - var ungrouped = this.groups[UNGROUPED]; - var background = this.groups[BACKGROUND]; - var item, itemId; + TimeStep.prototype.next = function () { + var prev = this.current.valueOf(); - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; + // Two cases, needed to prevent issues with switching daylight savings + // (end of March and end of October) + 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'); - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - item.parent && item.parent.remove(item); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - group && group.add(item) || item.hide(); + if (this.current.month() < 6) { + this.current.subtract(this.current.hours() % this.step, 'hour'); + } else { + if (this.current.hours() % this.step !== 0) { + this.current.add(this.step - this.current.hours() % this.step, 'hour'); } } - } - } else { - // create a group holding all (unfiltered) items - if (!ungrouped) { - var id = null; - var data = null; - ungrouped = new Group(id, data, this); - this.groups[UNGROUPED] = ungrouped; - - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - ungrouped.add(item); + break; + case 'weekday': // intentional fall through + case 'day': + this.current.add(this.step, 'day');break; + case 'week': + if (this.current.weekday() !== 0) { + // we had a month break not correlating with a week's start before + this.current.weekday(0); // switch back to week cycles + this.current.add(this.step, 'week'); + } else { + // first day of the week + var nextWeek = this.current.clone(); + nextWeek.add(1, 'week'); + if (nextWeek.isSame(this.current, 'month')) { + // is the first day of the next week in the same month? + this.current.add(this.step, 'week'); // the default case + } else { + // inject a step at each first day of the month + this.current.add(this.step, 'week'); + this.current.date(1); } } + break; + case 'month': + this.current.add(this.step, 'month');break; + case 'year': + this.current.add(this.step, 'year');break; + default: + break; + } - ungrouped.show(); + if (this.step != 1) { + // round down to the correct major value + switch (this.scale) { + case 'millisecond': + if (this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current.milliseconds(0);break; + case 'second': + if (this.current.seconds() > 0 && this.current.seconds() < this.step) this.current.seconds(0);break; + case 'minute': + if (this.current.minutes() > 0 && this.current.minutes() < this.step) this.current.minutes(0);break; + case 'hour': + if (this.current.hours() > 0 && 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 'week': + if (this.current.week() < this.step) this.current.week(1);break; // week numbering starts at 1, not 0 + 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(); + } + + // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates + this.switchedDay = false; + this.switchedMonth = false; + this.switchedYear = false; + + DateUtil.stepOverHiddenDates(this.moment, this, prev); }; /** - * Get the element for the labelset - * @return {HTMLElement} labelSet + * Get the current datetime + * @return {Moment} current The current date */ - ItemSet.prototype.getLabelSet = function () { - return this.dom.labelSet; + TimeStep.prototype.getCurrent = function () { + return this.current; }; /** - * Set items - * @param {vis.DataSet | null} items + * 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', 'week', 'month', 'year'. + * - A number 'step'. A step size, by default 1. + * Choose for example 1, 2, 5, or 10. */ - ItemSet.prototype.setItems = function (items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } - - 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(); + 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; } - - this.body.emitter.emit('_change', { queue: true }); }; /** - * Get the current items - * @returns {vis.DataSet | null} + * Enable or disable autoscaling + * @param {boolean} enable If true, autoascaling is set true */ - ItemSet.prototype.getItems = function () { - return this.itemsData; + TimeStep.prototype.setAutoScale = function (enable) { + this.autoScale = enable; }; /** - * Set groups - * @param {vis.DataSet} groups + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - ItemSet.prototype.setGroups = function (groups) { - var me = this, - ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.off(event, callback); - }); - - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw + TimeStep.prototype.setMinimumStep = function (minimumStep) { + if (minimumStep == undefined) { + return; } - // replace the dataset - if (!groups) { - this.groupsData = null; - } else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + //var b = asc + ds; - if (this.groupsData) { - // go over all groups nesting - var groupsData = this.groupsData; - if (this.groupsData instanceof DataView) { - groupsData = this.groupsData.getDataSet(); - } + 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; - groupsData.get().forEach(function (group) { - if (group.nestedGroups) { - group.nestedGroups.forEach(function (nestedGroupId) { - var updatedNestedGroup = groupsData.get(nestedGroupId); - updatedNestedGroup.nestedInGroup = group.id; - if (group.showNested == false) { - updatedNestedGroup.visible = false; - } - groupsData.update(updatedNestedGroup); - }); - } - }); + // 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; + } + }; - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); + /** + * 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', 'week', 'month', 'year'. + * @param {number} step Current step (1, 2, 4, 5, ... + * @return {Date} snappedDate + */ + TimeStep.snap = function (date, scale, step) { + var clone = moment(date); - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } + 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); + } - // update the group holding all ungrouped items - this._updateUngrouped(); + clone.hours(0); + clone.minutes(0); + clone.seconds(0); + clone.milliseconds(0); + } else if (scale == 'week') { + if (clone.weekday() > 2) { + // doing it the momentjs locale aware way + clone.weekday(0); + clone.add(1, 'week'); + } else { + clone.weekday(0); + } - // update the order of all items in each group - this._order(); + 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); + } - this.body.emitter.emit('_change', { queue: true }); + return clone; }; /** - * Get the current groups - * @returns {vis.DataSet | null} groups + * 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.getGroups = function () { - return this.groupsData; + TimeStep.prototype.isMajor = function () { + if (this.switchedYear == true) { + switch (this.scale) { + case 'year': + case 'month': + case 'week': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } else if (this.switchedMonth == true) { + switch (this.scale) { + case 'week': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } else if (this.switchedDay == true) { + switch (this.scale) { + case 'millisecond': + case 'second': + case 'minute': + case 'hour': + return true; + default: + return false; + } + } + + 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 'week': + return date.date() == 1; + case 'month': + return date.month() == 0; + case 'year': + return false; + default: + return false; + } }; /** - * Remove an item by its id - * @param {String | Number} id + * 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.removeItem = function (id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(), - itemObj = this.items[id]; + TimeStep.prototype.getLabelMinor = function (date) { + if (date == undefined) { + date = this.current; + } + if (date instanceof Date) { + date = this.moment(date); + } - 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); + if (typeof this.format.minorLabels === "function") { + return this.format.minorLabels(date, this.scale, this.step); + } + + var format = this.format.minorLabels[this.scale]; + // noinspection FallThroughInSwitchStatementJS + switch (this.scale) { + case 'week': + if (this.isMajor() && date.weekday() !== 0) { + return ""; } - }); + default: + return format && format.length > 0 ? this.moment(date).format(format) : ''; } }; /** - * Get the time of an item based on it's data and options.type - * @param {Object} itemData - * @returns {string} Returns the type - * @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._getType = function (itemData) { - return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); - }; + TimeStep.prototype.getLabelMajor = function (date) { + if (date == undefined) { + date = this.current; + } + if (date instanceof Date) { + date = this.moment(date); + } - /** - * 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; + if (typeof this.format.majorLabels === "function") { + return this.format.majorLabels(date, this.scale, this.step); } - }; - /** - * Handle updated items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onUpdate = function (ids) { - var me = this; + var format = this.format.majorLabels[this.scale]; + return format && format.length > 0 ? this.moment(date).format(format) : ''; + }; - ids.forEach(function (id) { - var itemData = me.itemsData.get(id, me.itemOptions); - var item = me.items[id]; - var type = itemData ? me._getType(itemData) : null; + 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; + var classNames = []; - var constructor = ItemSet.types[type]; - var selected; + function even(value) { + return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; + } - 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); - } + function today(date) { + if (date.isSame(new Date(), 'day')) { + return ' vis-today'; } - - if (!item && itemData) { - // 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 + '"'); - } + if (date.isSame(_moment().add(1, 'day'), 'day')) { + return ' vis-tomorrow'; } - }.bind(this)); + if (date.isSame(_moment().add(-1, 'day'), 'day')) { + return ' vis-yesterday'; + } + return ''; + } - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change', { queue: true }); - }; + function currentWeek(date) { + return date.isSame(new Date(), 'week') ? ' vis-current-week' : ''; + } - /** - * Handle added items - * @param {Number[]} ids - * @protected - */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; + function currentMonth(date) { + return date.isSame(new Date(), 'month') ? ' vis-current-month' : ''; + } - /** - * 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); - } - }); + function currentYear(date) { + return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; + } - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change', { queue: true }); + switch (this.scale) { + case 'millisecond': + classNames.push(today(current)); + classNames.push(even(current.milliseconds())); + break; + case 'second': + classNames.push(today(current)); + classNames.push(even(current.seconds())); + break; + case 'minute': + classNames.push(today(current)); + classNames.push(even(current.minutes())); + break; + case 'hour': + classNames.push('vis-h' + current.hours() + this.step == 4 ? '-h' + (current.hours() + 4) : ''); + classNames.push(today(current)); + classNames.push(even(current.hours())); + break; + case 'weekday': + classNames.push('vis-' + current.format('dddd').toLowerCase()); + classNames.push(today(current)); + classNames.push(currentWeek(current)); + classNames.push(even(current.date())); + break; + case 'day': + classNames.push('vis-day' + current.date()); + classNames.push('vis-' + current.format('MMMM').toLowerCase()); + classNames.push(today(current)); + classNames.push(currentMonth(current)); + classNames.push(this.step <= 2 ? today(current) : ''); + classNames.push(this.step <= 2 ? 'vis-' + current.format('dddd').toLowerCase() : ''); + classNames.push(even(current.date() - 1)); + break; + case 'week': + classNames.push('vis-week' + current.format('w')); + classNames.push(currentWeek(current)); + classNames.push(even(current.week())); + break; + case 'month': + classNames.push('vis-' + current.format('MMMM').toLowerCase()); + classNames.push(currentMonth(current)); + classNames.push(even(current.month())); + break; + case 'year': + classNames.push('vis-year' + current.year()); + classNames.push(currentYear(current)); + classNames.push(even(current.year())); + break; } + return classNames.filter(String).join(" "); }; - /** - * Update the order of item in all groups - * @private - */ - ItemSet.prototype._order = function () { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); - }; + module.exports = TimeStep; - /** - * Handle updated groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onUpdateGroups = function (ids) { - this._onAddGroups(ids); - }; +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Handle changed groups (added or updated) - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onAddGroups = function (ids) { - var me = this; + 'use strict'; - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; + var _keys = __webpack_require__(58); - if (!group) { - // check for reserved ids - if (id == UNGROUPED || id == BACKGROUND) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } + var _keys2 = _interopRequireDefault(_keys); - var groupOptions = (0, _create2['default'])(me.options); - util.extend(groupOptions, { - height: null - }); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - group = new Group(id, groupData, me); - me.groups[id] = group; + var util = __webpack_require__(1); + var stack = __webpack_require__(126); + var RangeItem = __webpack_require__(127); - // 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); - } - } - } + /** + * @constructor Group + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet + */ + function Group(groupId, data, itemSet) { + this.groupId = groupId; + this.subgroups = {}; + this.subgroupIndex = 0; + this.subgroupOrderer = data && data.subgroupOrder; + this.itemSet = itemSet; + this.isVisible = null; + this.stackDirty = true; // if true, items will be restacked on next redraw - group.order(); - group.show(); + if (data && data.nestedGroups) { + this.nestedGroups = data.nestedGroups; + if (data.showNested == false) { + this.showNested = false; } else { - // update group - group.setData(groupData); + this.showNested = true; + } + } + + this.nestedInGroup = null; + + this.dom = {}; + this.props = { + label: { + width: 0, + height: 0 } + }; + this.className = null; + + this.items = {}; // items filtered by groupId of this group + this.visibleItems = []; // items currently visible in window + this.itemsInRange = []; // items currently in range + this.orderedItems = { + byStart: [], + byEnd: [] + }; + this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. + var me = this; + this.itemSet.body.emitter.on("checkRangedItems", function () { + me.checkRangedItems = true; }); - this.body.emitter.emit('_change', { queue: true }); - }; + this._create(); + + this.setData(data); + } /** - * Handle removed groups - * @param {Number[]} ids + * Create DOM elements for the group * @private */ - ItemSet.prototype._onRemoveGroups = function (ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; + Group.prototype._create = function () { + var label = document.createElement('div'); + if (this.itemSet.options.groupEditable.order) { + label.className = 'vis-label draggable'; + } else { + label.className = 'vis-label'; + } + this.dom.label = label; - if (group) { - group.hide(); - delete groups[id]; - } - }); + var inner = document.createElement('div'); + inner.className = 'vis-inner'; + label.appendChild(inner); + this.dom.inner = inner; - this.markDirty(); + var foreground = document.createElement('div'); + foreground.className = 'vis-group'; + foreground['timeline-group'] = this; + this.dom.foreground = foreground; - this.body.emitter.emit('_change', { queue: true }); + this.dom.background = document.createElement('div'); + this.dom.background.className = 'vis-group'; + + this.dom.axis = document.createElement('div'); + this.dom.axis.className = 'vis-group'; + + // create a hidden marker to detect when the Timelines container is attached + // to the DOM, or the style of a parent of the Timeline is changed from + // display:none is changed to visible. + this.dom.marker = document.createElement('div'); + this.dom.marker.style.visibility = 'hidden'; + this.dom.marker.style.position = 'absolute'; + this.dom.marker.innerHTML = ''; + this.dom.background.appendChild(this.dom.marker); }; /** - * Reorder the groups if needed - * @return {boolean} changed - * @private + * Set the group data for this group + * @param {Object} data Group data, can contain properties content and className */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); - - groupIds = this._orderNestedGroups(groupIds); - - 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(); - }); + Group.prototype.setData = function (data) { + // update contents + var content; + var templateFunction; - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); + if (this.itemSet.options && this.itemSet.options.groupTemplate) { + templateFunction = this.itemSet.options.groupTemplate.bind(this); + content = templateFunction(data, this.dom.inner); + } else { + content = data && data.content; + } - this.groupIds = groupIds; + if (content instanceof Element) { + this.dom.inner.appendChild(content); + while (this.dom.inner.firstChild) { + this.dom.inner.removeChild(this.dom.inner.firstChild); } + this.dom.inner.appendChild(content); + } else if (content instanceof Object) { + templateFunction(data, this.dom.inner); + } else if (content !== undefined && content !== null) { + this.dom.inner.innerHTML = content; + } else { + this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null + } - return changed; + // update title + this.dom.label.title = data && data.title || ''; + if (!this.dom.inner.firstChild) { + util.addClassName(this.dom.inner, 'vis-hidden'); } else { - return false; + util.removeClassName(this.dom.inner, 'vis-hidden'); } - }; - /** - * Reorder the nested groups - * @return {boolean} changed - * @private - */ - ItemSet.prototype._orderNestedGroups = function (groupIds) { - var newGroupIdsOrder = []; + if (data && data.nestedGroups) { + if (!this.nestedGroups || this.nestedGroups != data.nestedGroups) { + this.nestedGroups = data.nestedGroups; + } - groupIds.forEach(function (groupId) { - var groupData = this.groupsData.get(groupId); - if (!groupData.nestedInGroup) { - newGroupIdsOrder.push(groupId); + if (data.showNested !== undefined || this.showNested === undefined) { + if (data.showNested == false) { + this.showNested = false; + } else { + this.showNested = true; + } } - if (groupData.nestedGroups) { - var nestedGroups = this.groupsData.get({ - filter: function filter(nestedGroup) { - return nestedGroup.nestedInGroup == groupId; - }, - order: this.options.groupOrder - }); - var nestedGroupIds = nestedGroups.map(function (nestedGroup) { - return nestedGroup.id; - }); - newGroupIdsOrder = newGroupIdsOrder.concat(nestedGroupIds); + + util.addClassName(this.dom.label, 'vis-nesting-group'); + var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'; + if (this.showNested) { + util.removeClassName(this.dom.label, collapsedDirClassName); + util.addClassName(this.dom.label, 'expanded'); + } else { + util.removeClassName(this.dom.label, 'expanded'); + util.addClassName(this.dom.label, collapsedDirClassName); } - }, this); - return newGroupIdsOrder; - }; + } else if (this.nestedGroups) { + this.nestedGroups = null; - /** - * Add a new item - * @param {Item} item - * @private - */ - ItemSet.prototype._addItem = function (item) { - this.items[item.id] = item; + var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'; + util.removeClassName(this.dom.label, collapsedDirClassName); + util.removeClassName(this.dom.label, 'expanded'); + util.removeClassName(this.dom.label, 'vis-nesting-group'); + } - // add to group - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; + if (data && data.nestedInGroup) { + util.addClassName(this.dom.label, 'vis-nested-group'); + if (this.itemSet.options && this.itemSet.options.rtl) { + this.dom.inner.style.paddingRight = '30px'; + } else { + this.dom.inner.style.paddingLeft = '30px'; + } + } - if (!group) { - item.groupShowing = false; - } else if (group && group.data && group.data.showNested) { - item.groupShowing = true; + // update className + var className = data && data.className || null; + if (className != this.className) { + if (this.className) { + util.removeClassName(this.dom.label, this.className); + util.removeClassName(this.dom.foreground, this.className); + util.removeClassName(this.dom.background, this.className); + util.removeClassName(this.dom.axis, this.className); + } + util.addClassName(this.dom.label, className); + util.addClassName(this.dom.foreground, className); + util.addClassName(this.dom.background, className); + util.addClassName(this.dom.axis, className); + this.className = className; } - if (group) group.add(item); + // update style + if (this.style) { + util.removeCssText(this.dom.label, this.style); + this.style = null; + } + if (data && data.style) { + util.addCssText(this.dom.label, data.style); + this.style = data.style; + } }; /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private + * Get the width of the group label + * @return {number} width */ - ItemSet.prototype._updateItem = function (item, itemData) { - var oldGroupId = item.data.group; - var oldSubGroupId = item.data.subgroup; + Group.prototype.getLabelWidth = function () { + return this.props.label.width; + }; - if (oldGroupId != itemData.group) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); - } + /** + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [forceRestack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized + */ + Group.prototype.redraw = function (range, margin, forceRestack) { + var resized = false; - // update the items data (will redraw the item when displayed) - item.setData(itemData); + // force recalculation of the height of the items when the marker height changed + // (due to the Timeline being attached to the DOM or changed from display:none to visible) + var markerHeight = this.dom.marker.clientHeight; + if (markerHeight != this.lastMarkerHeight) { + this.lastMarkerHeight = markerHeight; + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (!group) { - item.groupShowing = false; - } else if (group && group.data && group.data.showNested) { - item.groupShowing = true; + forceRestack = true; } - // update group - if (group) { - if (oldGroupId != item.data.group) { - group.add(item); - } else if (oldSubGroupId != item.data.subgroup) { - group.changeSubgroup(item, oldSubGroupId); + + // recalculate the height of the subgroups + this._calculateSubGroupHeights(margin); + + // calculate actual size and position + var foreground = this.dom.foreground; + this.top = foreground.offsetTop; + this.right = foreground.offsetLeft; + this.width = foreground.offsetWidth; + + var lastIsVisible = this.isVisible; + this.isVisible = this._isGroupVisible(range, margin); + + var restack = forceRestack || this.stackDirty || this.isVisible && !lastIsVisible; + + // if restacking, reposition visible items vertically + if (restack) { + if (typeof this.itemSet.options.order === 'function') { + // a custom order function + // brute force restack of all items + + // show all items + var me = this; + var limitSize = false; + util.forEach(this.items, function (item) { + if (!item.displayed) { + item.redraw(); + me.visibleItems.push(item); + } + item.repositionX(limitSize); + }); + + // order all items and force a restacking + var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) { + return me.itemSet.options.order(a.data, b.data); + }); + stack.stack(customOrderedItems, margin, true /* restack=true */); + this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); + } else { + // no custom order function, lazy stacking + this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); + + if (this.itemSet.options.stack) { + // TODO: ugly way to access options... + stack.stack(this.visibleItems, margin, true /* restack=true */); + } else { + // no stacking + stack.nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups); + } } + + this.stackDirty = false; } - }; - /** - * Delete an item from the ItemSet: remove it from the DOM, from the map - * with items, and from the map with visible items, and from the selection - * @param {Item} item - * @private - */ - ItemSet.prototype._removeItem = function (item) { - // remove from DOM - item.hide(); + this._updateSubgroupsSizes(); - // remove from items - delete this.items[item.id]; + // recalculate the height of the group + var height = this._calculateHeight(margin); - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); + // calculate actual size and position + var foreground = this.dom.foreground; + this.top = foreground.offsetTop; + this.right = foreground.offsetLeft; + this.width = foreground.offsetWidth; + resized = util.updateProperty(this, 'height', height) || resized; + // recalculate size of label + resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; + resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; - // remove from group - item.parent && item.parent.remove(item); + // apply new height + this.dom.background.style.height = height + 'px'; + this.dom.foreground.style.height = height + 'px'; + this.dom.label.style.height = height + 'px'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); + if (!this.isVisible && this.groupId != "__background__") { + if (item.displayed) item.hide(); + } + } + + if (!this.isVisible && this.height) { + return resized = false; + } + + return resized; }; /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} + * recalculate the height of the subgroups * @private */ - ItemSet.prototype._constructByEndArray = function (array) { - var endArray = []; + Group.prototype._calculateSubGroupHeights = function (margin) { + if ((0, _keys2['default'])(this.subgroups).length > 0) { + var me = this; - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof RangeItem) { - endArray.push(array[i]); - } + this.resetSubgroups(); + + util.forEach(this.visibleItems, function (item) { + if (item.data.subgroup !== undefined) { + me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical); + me.subgroups[item.data.subgroup].visible = true; + } + }); } - 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 + * check if group is visible * @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; + */ + Group.prototype._isGroupVisible = function (range, margin) { + var isVisible = this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis && this.top + this.height + margin.axis >= -range.body.domProps.scrollTop; + return isVisible; }; /** - * Given an group id, returns the index it has. - * - * @param {Number} groupID + * recalculate the height of the group + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @returns {number} Returns the height * @private */ - ItemSet.prototype._getGroupIndex = function (groupId) { - for (var i = 0; i < this.groupIds.length; i++) { - if (groupId == this.groupIds[i]) return i; + Group.prototype._calculateHeight = function (margin) { + // recalculate the height of the group + var height; + var itemsInRange = this.visibleItems; + if (itemsInRange.length > 0) { + var min = itemsInRange[0].top; + var max = itemsInRange[0].top + itemsInRange[0].height; + util.forEach(itemsInRange, function (item) { + min = Math.min(min, item.top); + max = Math.max(max, item.top + item.height); + }); + if (min > margin.axis) { + // there is an empty gap between the lowest item and the axis + var offset = min - margin.axis; + max -= offset; + util.forEach(itemsInRange, function (item) { + item.top -= offset; + }); + } + height = max + margin.item.vertical / 2; + } else { + height = 0; } + height = Math.max(height, this.props.label.height); + + return height; }; /** - * Start dragging the selected events - * @param {Event} event - * @private + * Show this group: attach to the DOM */ - ItemSet.prototype._onDragStart = function (event) { - if (this.touchParams.itemIsDragging) { - return; + Group.prototype.show = function () { + if (!this.dom.label.parentNode) { + this.itemSet.dom.labelSet.appendChild(this.dom.label); } - var item = this.touchParams.item || null; - var me = this; - var props; - if (item && (item.selected || this.options.itemsAlwaysDraggable)) { + if (!this.dom.foreground.parentNode) { + this.itemSet.dom.foreground.appendChild(this.dom.foreground); + } - if (this.options.editable.overrideItems && !this.options.editable.updateTime && !this.options.editable.updateGroup) { - return; - } + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } - // override options.editable - if (item.editable != null && !item.editable.updateTime && !item.editable.updateGroup && !this.options.editable.overrideItems) { - return; - } + if (!this.dom.axis.parentNode) { + this.itemSet.dom.axis.appendChild(this.dom.axis); + } + }; - var dragLeftItem = this.touchParams.dragLeftItem; - var dragRightItem = this.touchParams.dragRightItem; - this.touchParams.itemIsDragging = true; - this.touchParams.selectedItem = item; - - if (dragLeftItem) { - props = { - item: dragLeftItem, - initialX: event.center.x, - dragLeft: true, - data: this._cloneItemData(item.data) - }; - - this.touchParams.itemProps = [props]; - } else if (dragRightItem) { - props = { - item: dragRightItem, - initialX: event.center.x, - dragRight: true, - data: this._cloneItemData(item.data) - }; - - this.touchParams.itemProps = [props]; - } else { - var baseGroupIndex = this._getGroupIndex(item.data.group); + /** + * Hide this group: remove from the DOM + */ + Group.prototype.hide = function () { + var label = this.dom.label; + if (label.parentNode) { + label.parentNode.removeChild(label); + } - var itemsToDrag = this.options.itemsAlwaysDraggable && !item.selected ? [item.id] : this.getSelection(); + var foreground = this.dom.foreground; + if (foreground.parentNode) { + foreground.parentNode.removeChild(foreground); + } - this.touchParams.itemProps = itemsToDrag.map(function (id) { - var item = me.items[id]; - var groupIndex = me._getGroupIndex(item.data.group); - return { - item: item, - initialX: event.center.x, - groupOffset: baseGroupIndex - groupIndex, - data: this._cloneItemData(item.data) - }; - }.bind(this)); - } + var background = this.dom.background; + if (background.parentNode) { + background.parentNode.removeChild(background); + } - 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); + var axis = this.dom.axis; + if (axis.parentNode) { + axis.parentNode.removeChild(axis); } }; /** - * Start creating a new range item by dragging. - * @param {Event} event - * @private + * Add an item to the group + * @param {Item} item */ - ItemSet.prototype._onDragStartAddItem = function (event) { - var snap = this.options.snap || null; - - if (this.options.rtl) { - var xAbs = util.getAbsoluteRight(this.dom.frame); - var x = xAbs - event.center.x + 10; // plus 10 to compensate for the drag starting as soon as you've moved 10px - } else { - 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 + Group.prototype.add = function (item) { + this.items[item.id] = item; + item.setParent(this); + this.stackDirty = true; + // add to + if (item.data.subgroup !== undefined) { + this._addToSubgroup(item); + this.orderSubgroups(); } - var time = this.body.util.toTime(x); - var scale = this.body.util.getScale(); - var step = this.body.util.getStep(); - var start = snap ? snap(time, scale, step) : time; - var end = start; - - var itemData = { - type: 'range', - start: start, - end: end, - content: 'new item' - }; - - var id = util.randomUUID(); - itemData[this.itemsData._fieldId] = id; - - var group = this.groupFromTarget(event); - if (group) { - itemData.group = group.groupId; + if (this.visibleItems.indexOf(item) == -1) { + var range = this.itemSet.body.range; // TODO: not nice accessing the range like this + this._checkIfVisible(item, this.visibleItems, range); } - var newItem = new RangeItem(itemData, this.conversion, this.options); - newItem.id = id; // TODO: not so nice setting id afterwards - newItem.data = this._cloneItemData(itemData); - this._addItem(newItem); - this.touchParams.selectedItem = newItem; + }; - var props = { - item: newItem, - initialX: event.center.x, - data: newItem.data - }; + Group.prototype._addToSubgroup = function (item, subgroupId) { + subgroupId = subgroupId || item.data.subgroup; + if (subgroupId != undefined && this.subgroups[subgroupId] === undefined) { + this.subgroups[subgroupId] = { + height: 0, + top: 0, + start: item.data.start, + end: item.data.end, + visible: false, + index: this.subgroupIndex, + items: [] + }; + this.subgroupIndex++; + } - if (this.options.rtl) { - props.dragLeft = true; - } else { - props.dragRight = true; + if (new Date(item.data.start) < new Date(this.subgroups[subgroupId].start)) { + this.subgroups[subgroupId].start = item.data.start; + } + if (new Date(item.data.end) > new Date(this.subgroups[subgroupId].end)) { + this.subgroups[subgroupId].end = item.data.end; } - this.touchParams.itemProps = [props]; - event.stopPropagation(); + this.subgroups[subgroupId].items.push(item); }; - /** - * Drag selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDrag = function (event) { - if (this.touchParams.itemProps) { - event.stopPropagation(); + Group.prototype._updateSubgroupsSizes = function () { + var me = this; + if (me.subgroups) { + for (var subgroup in me.subgroups) { + var newStart = me.subgroups[subgroup].items[0].data.start; + var newEnd = me.subgroups[subgroup].items[0].data.end; - var me = this; - var snap = this.options.snap || null; + me.subgroups[subgroup].items.forEach(function (item) { + if (new Date(item.data.start) < new Date(newStart)) { + newStart = item.data.start; + } + if (new Date(item.data.end) > new Date(newEnd)) { + newEnd = item.data.end; + } + }); - if (this.options.rtl) { - var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.right.width; - } else { - var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; + me.subgroups[subgroup].start = newStart; + me.subgroups[subgroup].end = newEnd; } + } + }; - 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 = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.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); - } + Group.prototype.orderSubgroups = function () { + if (this.subgroupOrderer !== undefined) { + var sortArray = []; + if (typeof this.subgroupOrderer == 'string') { + for (var subgroup in this.subgroups) { + sortArray.push({ subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer] }); } - } - - // move - this.touchParams.itemProps.forEach(function (props) { - var current = me.body.util.toTime(event.center.x - xOffset); - var initial = me.body.util.toTime(props.initialX - xOffset); - - if (this.options.rtl) { - var offset = -(current - initial); // ms - } else { - var offset = current - initial; // ms + sortArray.sort(function (a, b) { + return a.sortField - b.sortField; + }); + } else if (typeof this.subgroupOrderer == 'function') { + for (var subgroup in this.subgroups) { + sortArray.push(this.subgroups[subgroup].items[0].data); } + sortArray.sort(this.subgroupOrderer); + } - var itemData = this._cloneItemData(props.item.data); // clone the data - if (props.item.editable != null && !props.item.editable.updateTime && !props.item.editable.updateGroup && !me.options.editable.overrideItems) { - return; + if (sortArray.length > 0) { + for (var i = 0; i < sortArray.length; i++) { + this.subgroups[sortArray[i].subgroup].index = i; } + } + } + }; - var updateTimeAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime; - if (updateTimeAllowed) { - if (props.dragLeft) { - // drag left side of a range item - if (this.options.rtl) { - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var end = new Date(initialEnd.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.end = snap ? snap(end, scale, step) : end; - } - } else { - if (itemData.start != undefined) { - var initialStart = util.convert(props.data.start, 'Date'); - var start = new Date(initialStart.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - } - } - } else if (props.dragRight) { - // drag right side of a range item - if (this.options.rtl) { - if (itemData.start != undefined) { - var initialStart = util.convert(props.data.start, 'Date'); - var start = new Date(initialStart.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - } - } else { - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var end = new Date(initialEnd.valueOf() + offset); - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.end = snap ? snap(end, scale, step) : end; - } - } - } else { - // drag both start and end - if (itemData.start != undefined) { - - var initialStart = util.convert(props.data.start, 'Date').valueOf(); - var start = new Date(initialStart + offset); - - if (itemData.end != undefined) { - var initialEnd = util.convert(props.data.end, 'Date'); - var duration = initialEnd.valueOf() - initialStart.valueOf(); + Group.prototype.resetSubgroups = function () { + for (var subgroup in this.subgroups) { + if (this.subgroups.hasOwnProperty(subgroup)) { + this.subgroups[subgroup].visible = false; + this.subgroups[subgroup].height = 0; + } + } + }; - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - itemData.end = new Date(itemData.start.valueOf() + duration); - } else { - // TODO: pass a Moment instead of a Date to snap(). (Breaking change) - itemData.start = snap ? snap(start, scale, step) : start; - } - } - } - } + /** + * Remove an item from the group + * @param {Item} item + */ + Group.prototype.remove = function (item) { + delete this.items[item.id]; + item.setParent(null); + this.stackDirty = true; - if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) { - if (itemData.group != undefined) { - var newOffset = newGroupBase - props.groupOffset; + // remove from visible items + var index = this.visibleItems.indexOf(item); + if (index != -1) this.visibleItems.splice(index, 1); - //make sure we stay in bounds - newOffset = Math.max(0, newOffset); - newOffset = Math.min(me.groupIds.length - 1, newOffset); + if (item.data.subgroup !== undefined) { + this._removeFromSubgroup(item); + this.orderSubgroups(); + } + }; - itemData.group = me.groupIds[newOffset]; + Group.prototype._removeFromSubgroup = function (item, subgroupId) { + subgroupId = subgroupId || item.data.subgroup; + if (subgroupId != undefined) { + var subgroup = this.subgroups[subgroupId]; + if (subgroup) { + var itemIndex = subgroup.items.indexOf(item); + // Check the item is actually in this subgroup. How should items not in the group be handled? + if (itemIndex >= 0) { + subgroup.items.splice(itemIndex, 1); + if (!subgroup.items.length) { + delete this.subgroups[subgroupId]; + } else { + this._updateSubgroupsSizes(); } } - - // confirm moving the item - itemData = this._cloneItemData(itemData); // convert start and end to the correct type - me.options.onMoving(itemData, function (itemData) { - if (itemData) { - props.item.setData(this._cloneItemData(itemData, 'Date')); - } - }.bind(this)); - }.bind(this)); - - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('_change'); + } } }; /** - * Move an item to another group + * Remove an item from the corresponding DataSet * @param {Item} item - * @param {String | Number} groupId - * @private */ - ItemSet.prototype._moveToGroup = function (item, groupId) { - var group = this.groups[groupId]; - if (group && group.groupId != item.data.group) { - var oldGroup = item.parent; - oldGroup.remove(item); - oldGroup.order(); - group.add(item); - group.order(); + Group.prototype.removeFromDataSet = function (item) { + this.itemSet.removeItem(item.id); + }; - item.data.group = group.groupId; + /** + * Reorder the items + */ + Group.prototype.order = function () { + var array = util.toArray(this.items); + var startArray = []; + var endArray = []; + + for (var i = 0; i < array.length; i++) { + if (array[i].data.end !== undefined) { + endArray.push(array[i]); + } + startArray.push(array[i]); } + this.orderedItems = { + byStart: startArray, + byEnd: endArray + }; + + stack.orderByStart(this.orderedItems.byStart); + stack.orderByEnd(this.orderedItems.byEnd); }; /** - * End of dragging selected items - * @param {Event} event + * Update the visible items + * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date + * @param {Item[]} visibleItems The previously visible items. + * @param {{start: number, end: number}} range Visible range + * @return {Item[]} visibleItems The new visible items. * @private */ - ItemSet.prototype._onDragEnd = function (event) { - this.touchParams.itemIsDragging = false; - if (this.touchParams.itemProps) { - event.stopPropagation(); + Group.prototype._updateItemsInRange = function (orderedItems, oldVisibleItems, range) { + var visibleItems = []; + var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems - var me = this; - var dataset = this.itemsData.getDataSet(); - var itemProps = this.touchParams.itemProps; - this.touchParams.itemProps = null; + var interval = (range.end - range.start) / 4; + var lowerBound = range.start - interval; + var upperBound = range.end + interval; - itemProps.forEach(function (props) { - var id = props.item.id; - var exists = me.itemsData.get(id, me.itemOptions) != null; + // this function is used to do the binary search. + var searchFunction = function searchFunction(value) { + if (value < lowerBound) { + return -1; + } else if (value <= upperBound) { + return 0; + } else { + return 1; + } + }; - 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); - } + // first check if the items that were in view previously are still in view. + // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! + // also cleans up invisible items. + if (oldVisibleItems.length > 0) { + for (var i = 0; i < oldVisibleItems.length; i++) { + this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); + } + } - // force re-stacking of all items next redraw - me.stackDirty = true; - me.body.emitter.emit('_change'); - }); - } else { - // update existing item - var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type - me.options.onMove(itemData, function (itemData) { - if (itemData) { - // apply changes - itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) - dataset.update(itemData); - } else { - // restore original values - props.item.setData(props.data); + // we do a binary search for the items that have only start values. + var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data', 'start'); - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('_change'); - } - }); - } - }.bind(this)); - } - }; + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. + this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { + return item.data.start < lowerBound || item.data.start > upperBound; + }); - ItemSet.prototype._onGroupClick = function (event) { - var group = this.groupFromTarget(event); + // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. + // We therefore have to brute force check all items in the byEnd list + if (this.checkRangedItems == true) { + this.checkRangedItems = false; + for (i = 0; i < orderedItems.byEnd.length; i++) { + this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); + } + } else { + // we do a binary search for the items that have defined end times. + var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data', 'end'); - if (!group || !group.nestedGroups) return; + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. + this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { + return item.data.end < lowerBound || item.data.end > upperBound; + }); + } - var groupsData = this.groupsData; - if (this.groupsData instanceof DataView) { - groupsData = this.groupsData.getDataSet(); + // finally, we reposition all the visible items. + for (var i = 0; i < visibleItems.length; i++) { + var item = visibleItems[i]; + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); } - group.showNested = !group.showNested; + return visibleItems; + }; - var nestedGroups = groupsData.get(group.nestedGroups).map(function (nestedGroup) { - if (nestedGroup.visible == undefined) { - nestedGroup.visible = true; + Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { + if (initialPos != -1) { + for (var i = initialPos; i >= 0; i--) { + var item = items[i]; + if (breakCondition(item)) { + break; + } else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } + } } - nestedGroup.visible = !!group.showNested; - return nestedGroup; - }); - groupsData.update(nestedGroups); - if (group.showNested) { - util.removeClassName(group.dom.label, 'collapsed'); - util.addClassName(group.dom.label, 'expanded'); - } else { - util.removeClassName(group.dom.label, 'expanded'); - var collapsedDirClassName = this.options.rtl ? 'collapsed-rtl' : 'collapsed'; - util.addClassName(group.dom.label, collapsedDirClassName); + for (var i = initialPos + 1; i < items.length; i++) { + var item = items[i]; + if (breakCondition(item)) { + break; + } else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } + } + } } }; - 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 - }); - } + /** + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range + * @private + */ + Group.prototype._checkIfVisible = function (item, visibleItems, range) { + if (item.isVisible(range)) { + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); + visibleItems.push(item); + } else { + if (item.displayed) item.hide(); } }; - ItemSet.prototype._onGroupDrag = function (event) { - if (this.options.groupEditable.order && this.groupTouchParams.group) { - event.stopPropagation(); - - var groupsData = this.groupsData; - if (this.groupsData instanceof DataView) { - groupsData = this.groupsData.getDataSet(); + /** + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range + * @private + */ + Group.prototype._checkIfVisibleWithReference = function (item, visibleItems, visibleItemsLookup, range) { + if (item.isVisible(range)) { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); } - // drag from one group to another - var group = this.groupFromTarget(event); + } else { + if (item.displayed) item.hide(); + } + }; - // 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; - } - } - } + Group.prototype.changeSubgroup = function (item, oldSubgroup, newSubgroup) { + this._removeFromSubgroup(item, oldSubgroup); + this._addToSubgroup(item, newSubgroup); + this.orderSubgroups(); + }; - if (group && group != this.groupTouchParams.group) { - var targetGroup = groupsData.get(group.groupId); - var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); + module.exports = Group; - // switch groups - if (draggedGroup && targetGroup) { - this.options.groupOrderSwap(draggedGroup, targetGroup, groupsData); - groupsData.update(draggedGroup); - groupsData.update(targetGroup); - } +/***/ }), +/* 126 */ +/***/ (function(module, exports) { - // fetch current order of groups - var newOrder = groupsData.getIds({ - order: this.options.groupOrder - }); + 'use strict'; - // in case of changes since _onGroupDragStart - if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) { - 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++; - } + // Utility functions for ordering and stacking of items + var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors - // all ok - if (curPos + newOffset >= numGroups) { - break; - } + /** + * Order items by their start data + * @param {Item[]} items + */ + exports.orderByStart = function (items) { + items.sort(function (a, b) { + return a.data.start - b.data.start; + }); + }; - // 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); + /** + * Order items by their end date. If they have no end date, their start date + * is used. + * @param {Item[]} items + */ + exports.orderByEnd = function (items) { + items.sort(function (a, b) { + var aTime = 'end' in a.data ? a.data.end : a.data.start, + bTime = 'end' in b.data ? b.data.end : b.data.start; - var switchGroupId = newOrder[curPos + newOffset]; - newOrder[curPos + newOffset] = origOrder[curPos + orgOffset]; - newOrder[slippedPosition] = switchGroupId; + return aTime - bTime; + }); + }; - curPos++; - } - } - } + /** + * Adjust vertical positions of the items such that they don't overlap each + * other. + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. + * @param {boolean} [force=false] + * If true, all items will be repositioned. If false (default), only + * items having a top===null will be re-stacked + */ + exports.stack = function (items, margin, force) { + if (force) { + // reset top position of all items + for (var i = 0; i < items.length; i++) { + items[i].top = null; } } - }; - - ItemSet.prototype._onGroupDragEnd = function (event) { - if (this.options.groupEditable.order && this.groupTouchParams.group) { - event.stopPropagation(); - - // update existing group - var me = this; - var id = me.groupTouchParams.group.groupId; - var dataset = me.groupsData.getDataSet(); - var groupData = util.extend({}, dataset.get(id)); // clone the data - me.options.onMoveGroup(groupData, function (groupData) { - if (groupData) { - // apply changes - groupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined) - dataset.update(groupData); - } else { - - // fetch current order of groups - var newOrder = dataset.getIds({ - order: me.options.groupOrder - }); - - // restore original order - if (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) { - var origOrder = me.groupTouchParams.originalOrder; - var numGroups = Math.min(origOrder.length, newOrder.length); - var curPos = 0; - while (curPos < numGroups) { - // as long as the groups are where they should be step down along the groups order - while (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) { - curPos++; - } - - // all ok - if (curPos >= numGroups) { - break; - } - - // found a group that has the wrong position -> switch with the - // group at the position where other one should be, fix index arrays and continue - var slippedPosition = newOrder.indexOf(origOrder[curPos]); - var switchGroup = dataset.get(newOrder[curPos]); - var shouldBeGroup = dataset.get(origOrder[curPos]); - me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset); - dataset.update(switchGroup); - dataset.update(shouldBeGroup); - var switchGroupId = newOrder[curPos]; - newOrder[curPos] = origOrder[curPos]; - newOrder[slippedPosition] = switchGroupId; + // calculate new, non-overlapping positions + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (item.stack && item.top === null) { + // initialize top position + item.top = margin.axis; - curPos++; + do { + // TODO: optimize checking for overlap. when there is a gap without items, + // you only need to check for items from the next item on, not from zero + var collidingItem = null; + for (var j = 0, jj = items.length; j < jj; j++) { + var other = items[j]; + if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item, other.options.rtl)) { + collidingItem = other; + break; } } - } - }); - me.body.emitter.emit('groupDragged', { groupId: id }); + if (collidingItem != null) { + // There is a collision. Reposition the items above the colliding element + item.top = collidingItem.top + collidingItem.height + margin.item.vertical; + } + } while (collidingItem); + } } }; /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private + * Adjust vertical positions of the items without stacking them + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. + * @param {subgroups[]} subgroups + * All subgroups */ - 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; + exports.nostack = function (items, margin, subgroups, stackSubgroups) { + for (var i = 0; i < items.length; i++) { + if (items[i].data.subgroup == undefined) { + items[i].top = margin.item.vertical; + } else if (items[i].data.subgroup !== undefined && stackSubgroups) { + var newTop = 0; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { + newTop += subgroups[subgroup].height; + subgroups[items[i].data.subgroup].top = newTop; + } + } + } + items[i].top = newTop + 0.5 * margin.item.vertical; + } } - - 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 - }); + if (!stackSubgroups) { + exports.stackSubgroups(items, margin, subgroups); } }; /** - * Handle hovering an item - * @param {Event} event - * @private + * Adjust vertical positions of the subgroups such that they don't overlap each + * other. + * @param {subgroups[]} subgroups + * All subgroups + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. */ - ItemSet.prototype._onMouseOver = function (event) { - var item = this.itemFromTarget(event); - if (!item) return; - - // Item we just left - var related = this.itemFromRelatedTarget(event); - if (item === related) { - // We haven't changed item, just element in the item - return; - } + exports.stackSubgroups = function (items, margin, subgroups) { + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { - var title = item.getTitle(); - if (title) { - if (this.popup == null) { - this.popup = new _Popup2['default'](this.body.dom.root, this.options.tooltip.overflowMethod || 'flip'); - } + subgroups[subgroup].top = 0; + do { + // TODO: optimize checking for overlap. when there is a gap without items, + // you only need to check for items from the next item on, not from zero + var collidingItem = null; + for (var otherSubgroup in subgroups) { + if (subgroups[otherSubgroup].top !== null && otherSubgroup !== subgroup && subgroups[subgroup].index > subgroups[otherSubgroup].index && exports.collisionByTimes(subgroups[subgroup], subgroups[otherSubgroup])) { + collidingItem = subgroups[otherSubgroup]; + break; + } + } - this.popup.setText(title); - var container = this.body.dom.centerContainer; - this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop); - this.popup.show(); - } else { - // Hovering over item without a title, hide popup - // Needed instead of _just_ in _onMouseOut due to #2572 - if (this.popup != null) { - this.popup.hide(); + if (collidingItem != null) { + // There is a collision. Reposition the subgroups above the colliding element + subgroups[subgroup].top = collidingItem.top + collidingItem.height; + } + } while (collidingItem); } } - - this.body.emitter.emit('itemover', { - item: item.id, - event: event - }); - }; - ItemSet.prototype._onMouseOut = function (event) { - var item = this.itemFromTarget(event); - if (!item) return; - - // Item we are going to - var related = this.itemFromRelatedTarget(event); - if (item === related) { - // We aren't changing item, just element in the item - return; - } - - if (this.popup != null) { - this.popup.hide(); - } - - this.body.emitter.emit('itemout', { - item: item.id, - event: event - }); - }; - ItemSet.prototype._onMouseMove = function (event) { - var item = this.itemFromTarget(event); - if (!item) return; - - if (this.options.tooltip.followMouse) { - if (this.popup) { - if (!this.popup.hidden) { - var container = this.body.dom.centerContainer; - this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop); - this.popup.show(); // Redraw - } + for (var i = 0; i < items.length; i++) { + if (items[i].data.subgroup !== undefined) { + items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical; } } }; /** - * Handle mousewheel - * @param event - * @private + * Test if the two provided items collide + * The items must have parameters left, width, top, and height. + * @param {Item} a The first item + * @param {Item} b The second item + * @param {{horizontal: number, vertical: number}} margin + * An object containing a horizontal and vertical + * minimum required margin. + * @param {boolean} rtl + * @return {boolean} true if a and b collide, else false */ - ItemSet.prototype._onMouseWheel = function (event) { - if (this.touchParams.itemIsDragging) { - this._onDragEnd(event); + exports.collision = function (a, b, margin, rtl) { + if (rtl) { + return a.right - margin.horizontal + EPSILON < b.right + b.width && a.right + a.width + margin.horizontal - EPSILON > b.right && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; + } else { + return a.left - margin.horizontal + EPSILON < b.left + b.width && a.left + a.width + margin.horizontal - EPSILON > b.left && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; } }; /** - * Handle updates of an item on double tap - * @param event - * @private + * Test if the two provided objects collide + * The objects must have parameters start, end, top, and height. + * @param {Object} a The first Object + * @param {Object} b The second Object + * @return {boolean} true if a and b collide, else false */ - ItemSet.prototype._onUpdateItem = function (item) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; + exports.collisionByTimes = function (a, b) { + return a.start <= b.start && a.end >= b.start && a.top < b.top + b.height && a.top + a.height > b.top || b.start <= a.start && b.end >= a.start && b.top < a.top + a.height && b.top + b.height > a.top; + }; - var me = this; +/***/ }), +/* 127 */ +/***/ (function(module, exports, __webpack_require__) { - if (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); - } - }); - } - }; + 'use strict'; + + var Hammer = __webpack_require__(112); + var Item = __webpack_require__(128); /** - * Handle creation of an item on double tap - * @param event - * @private + * @constructor RangeItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options */ - ItemSet.prototype._onAddItem = function (event) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; - - var me = this; - var snap = this.options.snap || null; - var item = this.itemFromTarget(event); - - if (!item) { - // add item - if (this.options.rtl) { - var xAbs = util.getAbsoluteRight(this.dom.frame); - var x = xAbs - event.center.x; - } else { - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.center.x - xAbs; + function RangeItem(data, conversion, options) { + this.props = { + content: { + width: 0 } - // 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(); + }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true + this.options = options; + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); + } + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); + } + } - var newItemData = { - start: snap ? snap(start, scale, step) : start, - content: 'new item' - }; + Item.call(this, data, conversion, options); + } - if (event.type == 'drop') { - var itemData = JSON.parse(event.dataTransfer.getData("text")); - newItemData.content = itemData.content; // content is required - newItemData.type = itemData.type || 'box'; - newItemData[this.itemsData._fieldId] = itemData.id || util.randomUUID(); - - if (itemData.type == 'range' || itemData.end && itemData.start) { - if (!itemData.end) { - var end = this.body.util.toTime(x + this.props.width / 5); - newItemData.end = snap ? snap(end, scale, step) : end; - } else { - newItemData.end = itemData.end; - newItemData.start = itemData.start; - } - } - } else { - newItemData[this.itemsData._fieldId] = util.randomUUID(); + RangeItem.prototype = new Item(null, null, null); - // when default type is a range, add a default end date to the new item - if (this.options.type === 'range') { - var end = this.body.util.toTime(x + this.props.width / 5); - newItemData.end = snap ? snap(end, scale, step) : end; - } - } + RangeItem.prototype.baseClassName = 'vis-item vis-range'; - var group = this.groupFromTarget(event); - if (group) { - newItemData.group = group.groupId; - } - - // execute async handler to customize (or cancel) adding an item - newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type - this.options.onAdd(newItemData, function (item) { - if (item) { - me.itemsData.getDataSet().add(item); - if (event.type == 'drop') { - me.setSelection([item.id]); - } - // TODO: need to trigger a redraw? - } - }); - } + /** + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible + */ + RangeItem.prototype.isVisible = function (range) { + // determine visibility + return this.data.start < range.end && this.data.end > range.start; }; /** - * Handle selecting/deselecting multiple items when holding an item - * @param {Event} event - * @private + * Repaint the item */ - ItemSet.prototype._onMultiSelectItem = function (event) { - if (!this.options.selectable) return; - - var item = this.itemFromTarget(event); - - if (item) { - // multi select items (if allowed) + RangeItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var selection = this.options.multiselect ? this.getSelection() // take current selection - : []; // deselect current selection + // background box + dom.box = document.createElement('div'); + // className is updated in redraw() - var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false; + // frame box (to prevent the item contents from overflowing) + dom.frame = document.createElement('div'); + dom.frame.className = 'vis-item-overflow'; + dom.box.appendChild(dom.frame); - if (shiftKey && this.options.multiselect) { - // select all items between the old selection and the tapped item - var itemGroup = this.itemsData.get(item.id).group; + // visible frame box (showing the frame that is always visible) + dom.visibleFrame = document.createElement('div'); + dom.visibleFrame.className = 'vis-item-visible-frame'; + dom.box.appendChild(dom.visibleFrame); - // when filtering get the group of the last selected item - var lastSelectedGroup = undefined; - if (this.options.multiselectPerGroup) { - if (selection.length > 0) { - lastSelectedGroup = this.itemsData.get(selection[0]).group; - } - } + // contents box + dom.content = document.createElement('div'); + dom.content.className = 'vis-item-content'; + dom.frame.appendChild(dom.content); - // determine the selection range - if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) { - selection.push(item.id); - } - var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); + // attach this item as attribute + dom.box['timeline-item'] = this; - if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) { - // select all items within the selection range - selection = []; - for (var id in this.items) { - if (this.items.hasOwnProperty(id)) { - var _item = this.items[id]; - var start = _item.data.start; - var end = _item.data.end !== undefined ? _item.data.end : start; + this.dirty = true; + } - if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) { - selection.push(_item.id); // do not use id but item.id, id itself is stringified - } - } - } - } - } else { - // add/remove this item from the current selection - var index = selection.indexOf(item.id); - if (index == -1) { - // item is not yet selected -> select it - selection.push(item.id); - } else { - // item is already selected -> deselect it - selection.splice(index, 1); - } + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) { + throw new Error('Cannot redraw item: parent has no foreground container element'); } - - this.setSelection(selection); - - this.body.emitter.emit('select', { - items: this.getSelection(), - event: event - }); + foreground.appendChild(dom.box); } - }; + this.displayed = true; - /** - * 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; + // 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._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); - itemsData.forEach(function (data) { - if (min == null || data.start < min) { - min = data.start; - } + var editable = this.editable.updateTime || this.editable.updateGroup; - if (data.end != undefined) { - if (max == null || data.end > max) { - max = data.end; - } - } else { - if (max == null || data.start > max) { - max = data.start; - } - } - }); + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + dom.box.className = this.baseClassName + className; - return { - min: min, - max: max - }; - }; + // determine from css whether this box has overflow + this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden'; - /** - * Find an item from an element: - * searches for the attribute 'timeline-item' in the element's tree - * @param {HTMLElement} element - * @return {Item | null} item - */ - ItemSet.prototype.itemFromElement = function (element) { - var cur = element; - while (cur) { - if (cur.hasOwnProperty('timeline-item')) { - return cur['timeline-item']; - } - cur = cur.parentNode; + // recalculate size + // turn off max-width to be able to calculate the real width + // this causes an extra browser repaint/reflow, but so be it + this.dom.content.style.maxWidth = 'none'; + this.props.content.width = this.dom.content.offsetWidth; + this.height = this.dom.box.offsetHeight; + this.dom.content.style.maxWidth = ''; + + this.dirty = false; } - return null; + this._repaintOnItemUpdateTimeTooltip(dom.box); + this._repaintDeleteButton(dom.box); + this._repaintDragCenter(); + this._repaintDragLeft(); + this._repaintDragRight(); }; /** - * 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 + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. */ - ItemSet.prototype.itemFromTarget = function (event) { - return this.itemFromElement(event.target); + RangeItem.prototype.show = function () { + if (!this.displayed) { + this.redraw(); + } }; /** - * Find an item from an event's related target: - * searches for the attribute 'timeline-item' in the related target's element tree - * @param {Event} event - * @return {Item | null} item + * Hide the item from the DOM (when visible) + * @return {Boolean} changed */ - ItemSet.prototype.itemFromRelatedTarget = function (event) { - return this.itemFromElement(event.relatedTarget); + RangeItem.prototype.hide = function () { + if (this.displayed) { + var box = this.dom.box; + + if (box.parentNode) { + box.parentNode.removeChild(box); + } + + this.displayed = false; + } }; /** - * 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 + * Reposition the item horizontally + * @param {boolean} [limitSize=true] If true (default), the width of the range + * item will be limited, as the browser cannot + * display very wide divs. This means though + * that the applied left and width may + * not correspond to the ranges start and end + * @Override */ - 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; + RangeItem.prototype.repositionX = function (limitSize) { + var parentWidth = this.parent.width; + var start = this.conversion.toScreen(this.data.start); + var end = this.conversion.toScreen(this.data.end); + var contentStartPosition; + var contentWidth; + + // limit the width of the range, as browsers cannot draw very wide divs + if (limitSize === undefined || limitSize === true) { + if (start < -parentWidth) { + start = -parentWidth; + } + if (end > 2 * parentWidth) { + end = 2 * parentWidth; } + } - if (this.options.orientation.item === 'top') { - if (i === this.groupIds.length - 1 && clientY > top) { - return group; - } + // add 0.5 to compensate floating-point values rounding + var boxWidth = Math.max(end - start + 0.5, 1); + + if (this.overflow) { + if (this.options.rtl) { + this.right = start; } else { - if (i === 0 && clientY < top + foreground.offset) { - return group; - } + this.left = start; + } + this.width = boxWidth + this.props.content.width; + contentWidth = this.props.content.width; + + // Note: The calculation of width is an optimistic calculation, giving + // a width which will not change when moving the Timeline + // So no re-stacking needed, which is nicer for the eye; + } else { + if (this.options.rtl) { + this.right = start; + } else { + this.left = start; } + this.width = boxWidth; + contentWidth = Math.min(end - start, this.props.content.width); } - return null; + if (this.options.rtl) { + this.dom.box.style.right = this.right + 'px'; + } else { + this.dom.box.style.left = this.left + 'px'; + } + this.dom.box.style.width = boxWidth + 'px'; + + switch (this.options.align) { + case 'left': + if (this.options.rtl) { + this.dom.content.style.right = '0'; + } else { + this.dom.content.style.left = '0'; + } + break; + + case 'right': + if (this.options.rtl) { + this.dom.content.style.right = Math.max(boxWidth - contentWidth, 0) + 'px'; + } else { + this.dom.content.style.left = Math.max(boxWidth - contentWidth, 0) + 'px'; + } + break; + + case 'center': + if (this.options.rtl) { + this.dom.content.style.right = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; + } else { + this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; + } + + break; + + default: + // 'auto' + // when range exceeds left of the window, position the contents at the left of the visible area + if (this.overflow) { + if (end > 0) { + contentStartPosition = Math.max(-start, 0); + } else { + contentStartPosition = -contentWidth; // ensure it's not visible anymore + } + } else { + if (start < 0) { + contentStartPosition = -start; + } else { + contentStartPosition = 0; + } + } + if (this.options.rtl) { + this.dom.content.style.right = contentStartPosition + 'px'; + } else { + this.dom.content.style.left = contentStartPosition + 'px'; + this.dom.content.style.width = 'calc(100% - ' + contentStartPosition + 'px)'; + } + } }; /** - * 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 + * Reposition the item vertically + * @Override */ - ItemSet.itemSetFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; - } + RangeItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var box = this.dom.box; - return null; + if (orientation == 'top') { + box.style.top = this.top + 'px'; + } else { + box.style.top = this.parent.height - this.top - this.height + 'px'; + } }; /** - * Clone the data of an item, and "normalize" it: convert the start and end date - * to the type (Date, Moment, ...) configured in the DataSet. If not configured, - * start and end are converted to Date. - * @param {Object} itemData, typically `item.data` - * @param {string} [type] Optional Date type. If not provided, the type from the DataSet is taken - * @return {Object} The cloned object - * @private + * Repaint a drag area on the left side of the range when the range is selected + * @protected */ - ItemSet.prototype._cloneItemData = function (itemData, type) { - var clone = util.extend({}, itemData); + RangeItem.prototype._repaintDragLeft = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { + // create and show drag area + var dragLeft = document.createElement('div'); + dragLeft.className = 'vis-drag-left'; + dragLeft.dragLeftItem = this; - if (!type) { - // convert start and end date to the type (Date, Moment, ...) configured in the DataSet - type = this.itemsData.getDataSet()._options.type; + this.dom.box.appendChild(dragLeft); + this.dom.dragLeft = dragLeft; + } else if (!this.selected && this.dom.dragLeft) { + // delete drag area + if (this.dom.dragLeft.parentNode) { + this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); + } + this.dom.dragLeft = null; } + }; - if (clone.start != undefined) { - clone.start = util.convert(clone.start, type && type.start || 'Date'); - } - if (clone.end != undefined) { - clone.end = util.convert(clone.end, type && type.end || 'Date'); - } + /** + * Repaint a drag area on the right side of the range when the range is selected + * @protected + */ + RangeItem.prototype._repaintDragRight = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { + // create and show drag area + var dragRight = document.createElement('div'); + dragRight.className = 'vis-drag-right'; + dragRight.dragRightItem = this; - return clone; + this.dom.box.appendChild(dragRight); + this.dom.dragRight = dragRight; + } else if (!this.selected && this.dom.dragRight) { + // delete drag area + if (this.dom.dragRight.parentNode) { + this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); + } + this.dom.dragRight = null; + } }; - module.exports = ItemSet; + module.exports = RangeItem; -/***/ }, -/* 132 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 128 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = __webpack_require__(119); + var _typeof2 = __webpack_require__(62); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var _typeof3 = _interopRequireDefault(_typeof2); - var _createClass2 = __webpack_require__(120); + var _keys = __webpack_require__(58); - var _createClass3 = _interopRequireDefault(_createClass2); + var _keys2 = _interopRequireDefault(_keys); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var Hammer = __webpack_require__(112); + var util = __webpack_require__(1); + var moment = __webpack_require__(82); + /** - * Popup is a class to create a popup window with some text - * @param {Element} container The container object. - * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap') + * @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 */ - var Popup = function () { - function Popup(container, overflowMethod) { - (0, _classCallCheck3['default'])(this, Popup); - - this.container = container; - this.overflowMethod = overflowMethod || 'cap'; - - this.x = 0; - this.y = 0; - this.padding = 5; - this.hidden = false; + 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.groupShowing = true; + this.dirty = true; - // create the frame - this.frame = document.createElement('div'); - this.frame.className = 'vis-tooltip'; - this.container.appendChild(this.frame); - } + this.top = null; + this.right = null; + this.left = null; + this.width = null; + this.height = null; - /** - * @param {number} x Horizontal position of the popup window - * @param {number} y Vertical position of the popup window - */ + this.editable = null; + this._updateEditStatus(); + } + Item.prototype.stack = true; - (0, _createClass3['default'])(Popup, [{ - key: 'setPosition', - value: function setPosition(x, y) { - this.x = parseInt(x); - this.y = parseInt(y); - } + /** + * Select current item + */ + Item.prototype.select = function () { + this.selected = true; + this.dirty = true; + if (this.displayed) this.redraw(); + }; - /** - * Set the content for the popup window. This can be HTML code or text. - * @param {string | Element} content - */ - - }, { - key: 'setText', - value: function setText(content) { - if (content instanceof Element) { - this.frame.innerHTML = ''; - this.frame.appendChild(content); - } else { - this.frame.innerHTML = content; // string containing text or HTML - } - } - - /** - * Show the popup window - * @param {boolean} [doShow] Show or hide the window - */ - - }, { - key: 'show', - value: function show(doShow) { - if (doShow === undefined) { - doShow = true; - } - - if (doShow === true) { - var height = this.frame.clientHeight; - var width = this.frame.clientWidth; - var maxHeight = this.frame.parentNode.clientHeight; - var maxWidth = this.frame.parentNode.clientWidth; - - var left = 0, - top = 0; - - if (this.overflowMethod == 'flip') { - var isLeft = false, - isTop = true; // Where around the position it's located - - if (this.y - height < this.padding) { - isTop = false; - } - - if (this.x + width > maxWidth - this.padding) { - isLeft = true; - } - - if (isLeft) { - left = this.x - width; - } else { - left = this.x; - } - - if (isTop) { - top = this.y - height; - } else { - top = this.y; - } - } else { - top = this.y - height; - if (top + height + this.padding > maxHeight) { - top = maxHeight - height - this.padding; - } - if (top < this.padding) { - top = this.padding; - } - - left = this.x; - if (left + width + this.padding > maxWidth) { - left = maxWidth - width - this.padding; - } - if (left < this.padding) { - left = this.padding; - } - } - - this.frame.style.left = left + "px"; - this.frame.style.top = top + "px"; - this.frame.style.visibility = "visible"; - this.hidden = false; - } else { - this.hide(); - } - } - - /** - * Hide the popup window - */ - - }, { - key: 'hide', - value: function hide() { - this.hidden = true; - this.frame.style.visibility = "hidden"; - } - - /** - * Remove the popup window - */ - - }, { - key: 'destroy', - value: function destroy() { - this.frame.parentNode.removeChild(this.frame); // Remove element from DOM - } - }]); - return Popup; - }(); - - exports['default'] = Popup; - -/***/ }, -/* 133 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var moment = __webpack_require__(82); - var DateUtil = __webpack_require__(129); - var util = __webpack_require__(1); + /** + * Unselect current item + */ + Item.prototype.unselect = function () { + this.selected = false; + this.dirty = true; + if (this.displayed) this.redraw(); + }; /** - * @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 + * 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 */ - function TimeStep(start, end, minimumStep, hiddenDates) { - this.moment = moment; - - // variables - this.current = this.moment(); - this._start = this.moment(); - this._end = this.moment(); - - this.autoScale = true; - this.scale = 'day'; - this.step = 1; - - // initialize the range - this.setRange(start, end, minimumStep); + Item.prototype.setData = function (data) { + var groupChanged = data.group != undefined && this.data.group != data.group; + if (groupChanged && this.parent != null) { + this.parent.itemSet._moveToGroup(this, data.group); + } + this.parent.stackDirty = true; - // hidden Dates options - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - if (Array.isArray(hiddenDates)) { - this.hiddenDates = hiddenDates; - } else if (hiddenDates != undefined) { - this.hiddenDates = [hiddenDates]; - } else { - this.hiddenDates = []; + var subGroupChanged = data.subgroup != undefined && this.data.subgroup != data.subgroup; + if (subGroupChanged && this.parent != null) { + this.parent.changeSubgroup(this, this.data.subgroup, data.subgroup); } - this.format = TimeStep.FORMAT; // default formatting - } + this.data = data; + this._updateEditStatus(); + this.dirty = true; + if (this.displayed) this.redraw(); + }; - // Time formatting - TimeStep.FORMAT = { - minorLabels: { - millisecond: 'SSS', - second: 's', - minute: 'HH:mm', - hour: 'HH:mm', - weekday: 'ddd D', - day: 'D', - month: 'MMM', - year: 'YYYY' - }, - majorLabels: { - millisecond: 'HH:mm:ss', - second: 'D MMMM HH:mm', - minute: 'ddd D MMMM', - hour: 'ddd D MMMM', - weekday: 'MMMM YYYY', - day: 'MMMM YYYY', - month: 'YYYY', - year: '' + /** + * Set a parent for the item + * @param {Group} parent + */ + Item.prototype.setParent = function (parent) { + if (this.displayed) { + this.hide(); + this.parent = parent; + if (this.parent) { + this.show(); + } + } else { + this.parent = parent; } }; /** - * Set custom constructor function for moment. Can be used to set dates - * to UTC or to set a utcOffset. - * @param {function} moment + * 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.setMoment = function (moment) { - this.moment = moment; - - // update the date properties, can have a new utcOffset - this.current = this.moment(this.current.valueOf()); - this._start = this.moment(this._start.valueOf()); - this._end = this.moment(this._end.valueOf()); + Item.prototype.isVisible = function (range) { + return false; }; /** - * 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 + * Show the Item in the DOM (when not already visible) + * @return {Boolean} changed */ - TimeStep.prototype.setFormat = function (format) { - var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); - this.format = util.deepExtend(defaultFormat, format); + Item.prototype.show = function () { + return false; }; /** - * 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 + * Hide the Item from the DOM (when visible) + * @return {Boolean} changed */ - TimeStep.prototype.setRange = function (start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw "No legal start or end date in method setRange"; - } - - this._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); - } + Item.prototype.hide = function () { + return false; }; /** - * Set the range iterator to the start date. + * Repaint the item */ - TimeStep.prototype.start = function () { - this.current = this._start.clone(); - this.roundToMinor(); + Item.prototype.redraw = function () { + // should be implemented by the item }; /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * Reposition the Item horizontally */ - 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.repositionX = function () { + // should be implemented by the item }; /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date + * Reposition the Item vertically */ - TimeStep.prototype.hasNext = function () { - return this.current.valueOf() <= this._end.valueOf(); + Item.prototype.repositionY = function () { + // should be implemented by the item }; /** - * Do the next step + * Repaint a drag area on the center of the item when the item is selected + * @protected */ - 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) - 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'); + Item.prototype._repaintDragCenter = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) { + var me = this; + // create and show drag area + var dragCenter = document.createElement('div'); + dragCenter.className = 'vis-drag-center'; + dragCenter.dragCenterItem = this; + var hammer = new Hammer(dragCenter); - if (this.current.month() < 6) { - this.current.subtract(this.current.hours() % this.step, 'hour'); - } else { - if (this.current.hours() % this.step !== 0) { - this.current.add(this.step - 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; - } + hammer.on('tap', function (event) { + me.parent.itemSet.body.emitter.emit('click', { + event: event, + item: me.id + }); + }); + hammer.on('doubletap', function (event) { + event.stopPropagation(); + me.parent.itemSet._onUpdateItem(me); + me.parent.itemSet.body.emitter.emit('doubleClick', { + event: event, + item: me.id + }); + }); - if (this.step != 1) { - // round down to the correct major value - switch (this.scale) { - case 'millisecond': - if (this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current.milliseconds(0);break; - case 'second': - if (this.current.seconds() > 0 && this.current.seconds() < this.step) this.current.seconds(0);break; - case 'minute': - if (this.current.minutes() > 0 && this.current.minutes() < this.step) this.current.minutes(0);break; - case 'hour': - if (this.current.hours() > 0 && 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; + if (this.dom.box) { + this.dom.box.appendChild(dragCenter); + } else if (this.dom.point) { + this.dom.point.appendChild(dragCenter); } - } - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = this._end.clone(); + this.dom.dragCenter = dragCenter; + } else if (!this.selected && this.dom.dragCenter) { + // delete drag area + if (this.dom.dragCenter.parentNode) { + this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter); + } + this.dom.dragCenter = null; } - - // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - - DateUtil.stepOverHiddenDates(this.moment, this, prev); }; /** - * Get the current datetime - * @return {Moment} current The current date + * Repaint a delete button on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected */ - TimeStep.prototype.getCurrent = function () { - return this.current; - }; + Item.prototype._repaintDeleteButton = function (anchor) { + var editable = (this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove || !this.options.editable.overrideItems && this.editable != null && this.editable.remove; - /** - * 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; + if (this.selected && editable && !this.dom.deleteButton) { + // create and show button + var me = this; + + var deleteButton = document.createElement('div'); + + if (this.options.rtl) { + deleteButton.className = 'vis-delete-rtl'; + } else { + 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); + } + this.dom.deleteButton = null; } }; /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true + * Repaint a onChange tooltip on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; - }; + Item.prototype._repaintOnItemUpdateTimeTooltip = function (anchor) { + if (!this.options.tooltipOnItemUpdateTime) return; - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - TimeStep.prototype.setMinimumStep = function (minimumStep) { - if (minimumStep == undefined) { - return; - } + var editable = (this.options.editable.updateTime || this.data.editable === true) && this.data.editable !== false; - //var b = asc + ds; + if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) { + // create and show tooltip + var me = this; - var stepYear = 1000 * 60 * 60 * 24 * 30 * 12; - var stepMonth = 1000 * 60 * 60 * 24 * 30; - var stepDay = 1000 * 60 * 60 * 24; - var stepHour = 1000 * 60 * 60; - var stepMinute = 1000 * 60; - var stepSecond = 1000; - var stepMillisecond = 1; + var onItemUpdateTimeTooltip = document.createElement('div'); - // 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; + onItemUpdateTimeTooltip.className = 'vis-onUpdateTime-tooltip'; + anchor.appendChild(onItemUpdateTimeTooltip); + this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip; + } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) { + // remove button + if (this.dom.onItemUpdateTimeTooltip.parentNode) { + this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip); + } + this.dom.onItemUpdateTimeTooltip = null; } - 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; - } - }; - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * Static function - * @param {Date} date the date to be snapped. - * @param {string} scale Current scale, can be 'millisecond', 'second', - * 'minute', 'hour', 'weekday, 'day', 'month', 'year'. - * @param {number} step Current step (1, 2, 4, 5, ... - * @return {Date} snappedDate - */ - TimeStep.snap = function (date, scale, step) { - var clone = moment(date); + // position onChange tooltip + if (this.dom.onItemUpdateTimeTooltip) { - 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. + // only show when editing + this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? 'visible' : 'hidden'; + + // position relative to item's content + if (this.options.rtl) { + this.dom.onItemUpdateTimeTooltip.style.right = this.dom.content.style.right; } else { - clone.date(1); + this.dom.onItemUpdateTimeTooltip.style.left = this.dom.content.style.left; } - 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; + // position above or below the item depending on the item's position in the window + var tooltipOffset = 50; // TODO: should be tooltip height (depends on template) + var scrollTop = this.parent.itemSet.body.domProps.scrollTop; + + // TODO: this.top for orientation:true is actually the items distance from the bottom... + // (should be this.bottom) + var itemDistanceFromTop; + if (this.options.orientation.item == 'top') { + itemDistanceFromTop = this.top; + } else { + itemDistanceFromTop = this.parent.height - this.top - this.height; } - 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; + var isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop; + + if (isCloseToTop) { + this.dom.onItemUpdateTimeTooltip.style.bottom = ""; + this.dom.onItemUpdateTimeTooltip.style.top = this.height + 2 + "px"; + } else { + this.dom.onItemUpdateTimeTooltip.style.top = ""; + this.dom.onItemUpdateTimeTooltip.style.bottom = this.height + 2 + "px"; } - 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; + + // handle tooltip content + var content; + var templateFunction; + + if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) { + templateFunction = this.options.tooltipOnItemUpdateTime.template.bind(this); + content = templateFunction(this.data); + } else { + content = 'start: ' + moment(this.data.start).format('MM/DD/YYYY hh:mm'); + if (this.data.end) { + content += '
end: ' + moment(this.data.end).format('MM/DD/YYYY hh:mm'); + } } - } else if (scale == 'millisecond') { - var _step = step > 5 ? step / 2 : 1; - clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step); + this.dom.onItemUpdateTimeTooltip.innerHTML = content; } - - 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) { - 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) { - 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) { - switch (this.scale) { - case 'millisecond': - case 'second': - case 'minute': - case 'hour': - return true; - default: - return false; + Item.prototype._updateContents = function (element) { + var content; + var templateFunction; + var itemVisibleFrameContent; + var visibleFrameTemplateFunction; + var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset + + var frameElement = this.dom.box || this.dom.point; + var itemVisibleFrameContentElement = frameElement.getElementsByClassName('vis-item-visible-frame')[0]; + + if (this.options.visibleFrameTemplate) { + visibleFrameTemplateFunction = this.options.visibleFrameTemplate.bind(this); + itemVisibleFrameContent = visibleFrameTemplateFunction(itemData, frameElement); + } else { + itemVisibleFrameContent = ''; + } + + if (itemVisibleFrameContentElement) { + if (itemVisibleFrameContent instanceof Object && !(itemVisibleFrameContent instanceof Element)) { + visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement); + } else { + var changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent); + if (changed) { + // only replace the content when changed + if (itemVisibleFrameContent instanceof Element) { + itemVisibleFrameContentElement.innerHTML = ''; + itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent); + } else if (itemVisibleFrameContent != undefined) { + itemVisibleFrameContentElement.innerHTML = itemVisibleFrameContent; + } else { + if (!(this.data.type == 'background' && this.data.content === undefined)) { + throw new Error('Property "content" missing in item ' + this.id); + } + } + + this.itemVisibleFrameContent = itemVisibleFrameContent; + } } } - 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; + if (this.options.template) { + templateFunction = this.options.template.bind(this); + content = templateFunction(itemData, element, this.data); + } else { + content = this.data.content; + } + + if (content instanceof Object && !(content instanceof Element)) { + templateFunction(itemData, element); + } else { + 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 + * 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.getLabelMinor = function (date) { - if (date == undefined) { - date = this.current; - } - if (date instanceof Date) { - date = this.moment(date); - } + Item.prototype._updateDataAttributes = function (element) { + if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { + var attributes = []; - if (typeof this.format.minorLabels === "function") { - return this.format.minorLabels(date, this.scale, this.step); - } + if (Array.isArray(this.options.dataAttributes)) { + attributes = this.options.dataAttributes; + } else if (this.options.dataAttributes == 'all') { + attributes = (0, _keys2['default'])(this.data); + } else { + return; + } - var format = this.format.minorLabels[this.scale]; - return format && format.length > 0 ? this.moment(date).format(format) : ''; + for (var i = 0; i < attributes.length; i++) { + var name = attributes[i]; + var value = this.data[name]; + + if (value != null) { + element.setAttribute('data-' + name, value); + } else { + element.removeAttribute('data-' + name); + } + } + } }; /** - * 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 + * Update custom styles of the element + * @param element + * @private */ - TimeStep.prototype.getLabelMajor = function (date) { - if (date == undefined) { - date = this.current; - } - if (date instanceof Date) { - date = this.moment(date); + Item.prototype._updateStyle = function (element) { + // remove old styles + if (this.style) { + util.removeCssText(element, this.style); + this.style = null; } - if (typeof this.format.majorLabels === "function") { - return this.format.majorLabels(date, this.scale, this.step); + // append new styles + if (this.data.style) { + util.addCssText(element, this.data.style); + this.style = this.data.style; } - - var format = this.format.majorLabels[this.scale]; - return format && format.length > 0 ? this.moment(date).format(format) : ''; }; - 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; + /** + * 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; + }; - function even(value) { - return value / step % 2 == 0 ? ' vis-even' : ' vis-odd'; + /** + * Update the editability of this item. + */ + Item.prototype._updateEditStatus = function () { + if (this.options) { + if (typeof this.options.editable === 'boolean') { + this.editable = { + updateTime: this.options.editable, + updateGroup: this.options.editable, + remove: this.options.editable + }; + } else if ((0, _typeof3['default'])(this.options.editable) === 'object') { + this.editable = {}; + util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.options.editable); + }; } - - 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'; + // Item data overrides, except if options.editable.overrideItems is set. + if (!this.options || !this.options.editable || this.options.editable.overrideItems !== true) { + if (this.data) { + if (typeof this.data.editable === 'boolean') { + this.editable = { + updateTime: this.data.editable, + updateGroup: this.data.editable, + remove: this.data.editable + }; + } else if ((0, _typeof3['default'])(this.data.editable) === 'object') { + // TODO: in vis.js 5.0, we should change this to not reset options from the timeline configuration. + // Basically just remove the next line... + this.editable = {}; + util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.data.editable); + } } - 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' : ''; - } + /** + * Return the width of the item left from its start date + * @return {number} + */ + Item.prototype.getWidthLeft = function () { + return 0; + }; - function currentYear(date) { - return date.isSame(new Date(), 'year') ? ' vis-current-year' : ''; - } + /** + * Return the width of the item right from the max of its start and end date + * @return {number} + */ + Item.prototype.getWidthRight = function () { + return 0; + }; - switch (this.scale) { - case 'millisecond': - return today(current) + even(current.milliseconds()).trim(); + /** + * Return the title of the item + * @return {string | undefined} + */ + Item.prototype.getTitle = function () { + return this.data.title; + }; - case 'second': - return today(current) + even(current.seconds()).trim(); + module.exports = Item; - case 'minute': - return today(current) + even(current.minutes()).trim(); +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { - case 'hour': - return 'vis-h' + current.hours() + (this.step == 4 ? '-h' + (current.hours() + 4) : '') + today(current) + even(current.hours()); + 'use strict'; - case 'weekday': - return 'vis-' + current.format('dddd').toLowerCase() + today(current) + currentWeek(current) + even(current.date()); + var _create = __webpack_require__(55); - case 'day': - return 'vis-day' + current.date() + ' vis-' + current.format('MMMM').toLowerCase() + today(current) + currentMonth(current) + (this.step <= 2 ? today(current) : '') + (this.step <= 2 ? ' vis-' + current.format('dddd').toLowerCase() : '' + even(current.date() - 1)); + var _create2 = _interopRequireDefault(_create); - case 'month': - return 'vis-' + current.format('MMMM').toLowerCase() + currentMonth(current) + even(current.month()); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - case 'year': - var year = current.year(); - return 'vis-year' + year + currentYear(current) + even(year); + var util = __webpack_require__(1); + var Group = __webpack_require__(125); - default: - return ''; - } - }; + /** + * @constructor BackgroundGroup + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet + */ + function BackgroundGroup(groupId, data, itemSet) { + Group.call(this, groupId, data, itemSet); - module.exports = TimeStep; + this.width = 0; + this.height = 0; + this.top = 0; + this.left = 0; + } -/***/ }, -/* 134 */ -/***/ function(module, exports, __webpack_require__) { + BackgroundGroup.prototype = (0, _create2['default'])(Group.prototype); - 'use strict'; + /** + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [forceRestack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized + */ + BackgroundGroup.prototype.redraw = function (range, margin, forceRestack) { + var resized = false; - var _keys = __webpack_require__(58); + this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); - var _keys2 = _interopRequireDefault(_keys); + // calculate actual size + this.width = this.dom.background.offsetWidth; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // apply new height (just always zero for BackgroundGroup + this.dom.background.style.height = '0'; - var util = __webpack_require__(1); - var stack = __webpack_require__(135); - var RangeItem = __webpack_require__(136); + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); + } + + return resized; + }; /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet + * Show this group: attach to the DOM */ - function Group(groupId, data, itemSet) { - this.groupId = groupId; - this.subgroups = {}; - this.subgroupIndex = 0; - this.subgroupOrderer = data && data.subgroupOrder; - this.itemSet = itemSet; - this.isVisible = null; - - if (data && data.nestedGroups) { - this.nestedGroups = data.nestedGroups; - if (data.showNested == false) { - this.showNested = false; - } else { - this.showNested = true; - } + BackgroundGroup.prototype.show = function () { + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); } + }; - this.nestedInGroup = null; + module.exports = BackgroundGroup; - this.dom = {}; +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var Item = __webpack_require__(128); + var util = __webpack_require__(1); + + /** + * @constructor BoxItem + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options + */ + function BoxItem(data, conversion, options) { this.props = { - label: { + dot: { + width: 0, + height: 0 + }, + line: { width: 0, height: 0 } }; - this.className = null; - - this.items = {}; // items filtered by groupId of this group - this.visibleItems = []; // items currently visible in window - this.itemsInRange = []; // items currently in range - this.orderedItems = { - byStart: [], - byEnd: [] - }; - this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. - var me = this; - this.itemSet.body.emitter.on("checkRangedItems", function () { - me.checkRangedItems = true; - }); - - this._create(); + this.options = options; + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } + } - this.setData(data); + Item.call(this, data, conversion, options); } + BoxItem.prototype = new Item(null, null, null); + /** - * Create DOM elements for the group - * @private + * Check whether this item is visible inside given range + * @param {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Group.prototype._create = function () { - var label = document.createElement('div'); - if (this.itemSet.options.groupEditable.order) { - label.className = 'vis-label draggable'; + BoxItem.prototype.isVisible = function (range) { + // determine visibility + var isVisible; + var align = this.options.align; + var widthInMs = this.width * range.getMillisecondsPerPixel(); + + if (align == 'right') { + isVisible = this.data.start.getTime() > range.start && this.data.start.getTime() - widthInMs < range.end; + } else if (align == 'left') { + isVisible = this.data.start.getTime() + widthInMs > range.start && this.data.start.getTime() < range.end; } else { - label.className = 'vis-label'; + // default or 'center' + isVisible = this.data.start.getTime() + widthInMs / 2 > range.start && this.data.start.getTime() - widthInMs / 2 < range.end; } - this.dom.label = label; + return isVisible; + }; - var inner = document.createElement('div'); - inner.className = 'vis-inner'; - label.appendChild(inner); - this.dom.inner = inner; + /** + * Repaint the item + */ + BoxItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var foreground = document.createElement('div'); - foreground.className = 'vis-group'; - foreground['timeline-group'] = this; - this.dom.foreground = foreground; + // create main box + dom.box = document.createElement('DIV'); - this.dom.background = document.createElement('div'); - this.dom.background.className = 'vis-group'; + // contents box (inside the background box). used for making margins + dom.content = document.createElement('DIV'); + dom.content.className = 'vis-item-content'; + dom.box.appendChild(dom.content); - this.dom.axis = document.createElement('div'); - this.dom.axis.className = 'vis-group'; + // line to axis + dom.line = document.createElement('DIV'); + dom.line.className = 'vis-line'; - // create a hidden marker to detect when the Timelines container is attached - // to the DOM, or the style of a parent of the Timeline is changed from - // display:none is changed to visible. - this.dom.marker = document.createElement('div'); - this.dom.marker.style.visibility = 'hidden'; - this.dom.marker.style.position = 'absolute'; - this.dom.marker.innerHTML = ''; - this.dom.background.appendChild(this.dom.marker); - }; + // dot on axis + dom.dot = document.createElement('DIV'); + dom.dot.className = 'vis-dot'; - /** - * Set the group data for this group - * @param {Object} data Group data, can contain properties content and className - */ - Group.prototype.setData = function (data) { - // update contents - var content; - var templateFunction; + // attach this item as attribute + dom.box['timeline-item'] = this; - if (this.itemSet.options && this.itemSet.options.groupTemplate) { - templateFunction = this.itemSet.options.groupTemplate.bind(this); - content = templateFunction(data, this.dom.inner); - } else { - content = data && data.content; + this.dirty = true; } - if (content instanceof Element) { - this.dom.inner.appendChild(content); - while (this.dom.inner.firstChild) { - this.dom.inner.removeChild(this.dom.inner.firstChild); - } - this.dom.inner.appendChild(content); - } else if (content instanceof Object) { - templateFunction(data, this.dom.inner); - } else if (content !== undefined && content !== null) { - this.dom.inner.innerHTML = content; - } else { - this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); } - - // update title - this.dom.label.title = data && data.title || ''; - if (!this.dom.inner.firstChild) { - util.addClassName(this.dom.inner, 'vis-hidden'); - } else { - util.removeClassName(this.dom.inner, 'vis-hidden'); + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); + foreground.appendChild(dom.box); + } + if (!dom.line.parentNode) { + var background = this.parent.dom.background; + if (!background) throw new Error('Cannot redraw item: parent has no background container element'); + background.appendChild(dom.line); + } + if (!dom.dot.parentNode) { + var axis = this.parent.dom.axis; + if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); + axis.appendChild(dom.dot); } + this.displayed = true; - if (data && data.nestedGroups) { - if (!this.nestedGroups || this.nestedGroups != data.nestedGroups) { - this.nestedGroups = data.nestedGroups; - } + // 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._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); - if (data.showNested !== undefined || this.showNested === undefined) { - if (data.showNested == false) { - this.showNested = false; - } else { - this.showNested = true; - } - } + var editable = this.editable.updateTime || this.editable.updateGroup; - util.addClassName(this.dom.label, 'vis-nesting-group'); - var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'; - if (this.showNested) { - util.removeClassName(this.dom.label, collapsedDirClassName); - util.addClassName(this.dom.label, 'expanded'); + // update class + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + dom.box.className = 'vis-item vis-box' + className; + dom.line.className = 'vis-item vis-line' + className; + dom.dot.className = 'vis-item vis-dot' + className; + + // set initial position in the visible range of the grid so that the + // rendered box size can be determinated correctly, even the content + // has a dynamic width (fixes #2032). + var previousRight = dom.box.style.right; + var previousLeft = dom.box.style.left; + if (this.options.rtl) { + dom.box.style.right = "0px"; } else { - util.removeClassName(this.dom.label, 'expanded'); - util.addClassName(this.dom.label, collapsedDirClassName); + dom.box.style.left = "0px"; } - } else if (this.nestedGroups) { - this.nestedGroups = null; - var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'; - util.removeClassName(this.dom.label, collapsedDirClassName); - util.removeClassName(this.dom.label, 'expanded'); - util.removeClassName(this.dom.label, 'vis-nesting-group'); - } + // recalculate size + this.props.dot.height = dom.dot.offsetHeight; + this.props.dot.width = dom.dot.offsetWidth; + this.props.line.width = dom.line.offsetWidth; + this.width = dom.box.offsetWidth; + this.height = dom.box.offsetHeight; - if (data && data.nestedInGroup) { - util.addClassName(this.dom.label, 'vis-nested-group'); - if (this.itemSet.options && this.itemSet.options.rtl) { - this.dom.inner.style.paddingRight = '30px'; + // restore previous position + if (this.options.rtl) { + dom.box.style.right = previousRight; } else { - this.dom.inner.style.paddingLeft = '30px'; + dom.box.style.left = previousLeft; } - } - // update className - var className = data && data.className || null; - if (className != this.className) { - if (this.className) { - util.removeClassName(this.dom.label, this.className); - util.removeClassName(this.dom.foreground, this.className); - util.removeClassName(this.dom.background, this.className); - util.removeClassName(this.dom.axis, this.className); - } - util.addClassName(this.dom.label, className); - util.addClassName(this.dom.foreground, className); - util.addClassName(this.dom.background, className); - util.addClassName(this.dom.axis, className); - this.className = className; + this.dirty = false; } - // update style - if (this.style) { - util.removeCssText(this.dom.label, this.style); - this.style = null; - } - if (data && data.style) { - util.addCssText(this.dom.label, data.style); - this.style = data.style; - } + this._repaintOnItemUpdateTimeTooltip(dom.box); + this._repaintDragCenter(); + this._repaintDeleteButton(dom.box); }; /** - * Get the width of the group label - * @return {number} width + * Show the item in the DOM (when not already displayed). The items DOM will + * be created when needed. */ - Group.prototype.getLabelWidth = function () { - return this.props.label.width; + BoxItem.prototype.show = function () { + if (!this.displayed) { + this.redraw(); + } }; /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * Hide the item from the DOM (when visible) */ - Group.prototype.redraw = function (range, margin, restack) { - var resized = false; + BoxItem.prototype.hide = function () { + if (this.displayed) { + var dom = this.dom; - // force recalculation of the height of the items when the marker height changed - // (due to the Timeline being attached to the DOM or changed from display:none to visible) - var markerHeight = this.dom.marker.clientHeight; - if (markerHeight != this.lastMarkerHeight) { - this.lastMarkerHeight = markerHeight; - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); + if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); + if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); + if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); - restack = true; + this.displayed = false; } + }; - // recalculate the height of the subgroups - this._calculateSubGroupHeights(margin); + /** + * Reposition the item horizontally + * @Override + */ + BoxItem.prototype.repositionX = function () { + var start = this.conversion.toScreen(this.data.start); + var align = this.options.align; - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.right = foreground.offsetLeft; - this.width = foreground.offsetWidth; + // calculate left position of the box + if (align == 'right') { + if (this.options.rtl) { + this.right = start - this.width; - this.isVisible = this._isGroupVisible(range, margin); - // reposition visible items vertically - if (typeof this.itemSet.options.order === 'function') { - // a custom order function + // reposition box, line, and dot + this.dom.box.style.right = this.right + 'px'; + this.dom.line.style.right = start - this.props.line.width + 'px'; + this.dom.dot.style.right = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; + } else { + this.left = start - this.width; - if (restack) { - // brute force restack of all items + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start - this.props.line.width + 'px'; + this.dom.dot.style.left = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; + } + } else if (align == 'left') { + if (this.options.rtl) { + this.right = start; - // show all items - var me = this; - var limitSize = false; - util.forEach(this.items, function (item) { - if (!item.displayed) { - item.redraw(); - me.visibleItems.push(item); - } - item.repositionX(limitSize); - }); + // reposition box, line, and dot + this.dom.box.style.right = this.right + 'px'; + this.dom.line.style.right = start + 'px'; + this.dom.dot.style.right = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; + } else { + this.left = start; - // order all items and force a restacking - var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) { - return me.itemSet.options.order(a.data, b.data); - }); - stack.stack(customOrderedItems, margin, true /* restack=true */); + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start + 'px'; + this.dom.dot.style.left = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; } - - this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); } else { - // no custom order function, lazy stacking - - this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); + // default or 'center' + if (this.options.rtl) { + this.right = start - this.width / 2; - if (this.itemSet.options.stack) { - // TODO: ugly way to access options... - stack.stack(this.visibleItems, margin, restack); + // reposition box, line, and dot + this.dom.box.style.right = this.right + 'px'; + this.dom.line.style.right = start - this.props.line.width + 'px'; + this.dom.dot.style.right = start - this.props.dot.width / 2 + 'px'; } else { - // no stacking - stack.nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups); + this.left = start - this.width / 2; + + // reposition box, line, and dot + this.dom.box.style.left = this.left + 'px'; + this.dom.line.style.left = start - this.props.line.width / 2 + 'px'; + this.dom.dot.style.left = start - this.props.dot.width / 2 + 'px'; } } + }; - this._updateSubgroupsSizes(); - - // recalculate the height of the group - var height = this._calculateHeight(margin); - - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.right = foreground.offsetLeft; - this.width = foreground.offsetWidth; - resized = util.updateProperty(this, 'height', height) || resized; - // recalculate size of label - resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; - resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; + /** + * Reposition the item vertically + * @Override + */ + BoxItem.prototype.repositionY = function () { + var orientation = this.options.orientation.item; + var box = this.dom.box; + var line = this.dom.line; + var dot = this.dom.dot; - // apply new height - this.dom.background.style.height = height + 'px'; - this.dom.foreground.style.height = height + 'px'; - this.dom.label.style.height = height + 'px'; + if (orientation == 'top') { + box.style.top = (this.top || 0) + 'px'; - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); - if (!this.isVisible && this.groupId != "__background__") { - if (item.displayed) item.hide(); - } - } + line.style.top = '0'; + line.style.height = this.parent.top + this.top + 1 + 'px'; + line.style.bottom = ''; + } else { + // orientation 'bottom' + var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty + var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; - if (!this.isVisible && this.height) { - return resized = false; + box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; + line.style.top = itemSetHeight - lineHeight + 'px'; + line.style.bottom = '0'; } - return resized; + dot.style.top = -this.props.dot.height / 2 + 'px'; }; /** - * recalculate the height of the subgroups - * @private + * Return the width of the item left from its start date + * @return {number} */ - Group.prototype._calculateSubGroupHeights = function (margin) { - if ((0, _keys2['default'])(this.subgroups).length > 0) { - var me = this; - - this.resetSubgroups(); - - util.forEach(this.visibleItems, function (item) { - if (item.data.subgroup !== undefined) { - me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical); - me.subgroups[item.data.subgroup].visible = true; - } - }); - } + BoxItem.prototype.getWidthLeft = function () { + return this.width / 2; }; /** - * check if group is visible - * @private - */ - Group.prototype._isGroupVisible = function (range, margin) { - var isVisible = this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis && this.top + this.height + margin.axis >= -range.body.domProps.scrollTop; - return isVisible; + * Return the width of the item right from its start date + * @return {number} + */ + BoxItem.prototype.getWidthRight = function () { + return this.width / 2; }; + module.exports = BoxItem; + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var Item = __webpack_require__(128); + /** - * recalculate the height of the group - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @returns {number} Returns the height - * @private + * @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 */ - Group.prototype._calculateHeight = function (margin) { - // recalculate the height of the group - var height; - var itemsInRange = this.visibleItems; - if (itemsInRange.length > 0) { - var min = itemsInRange[0].top; - var max = itemsInRange[0].top + itemsInRange[0].height; - util.forEach(itemsInRange, function (item) { - min = Math.min(min, item.top); - max = Math.max(max, item.top + item.height); - }); - if (min > margin.axis) { - // there is an empty gap between the lowest item and the axis - var offset = min - margin.axis; - max -= offset; - util.forEach(itemsInRange, function (item) { - item.top -= offset; - }); + function PointItem(data, conversion, options) { + this.props = { + dot: { + top: 0, + width: 0, + height: 0 + }, + content: { + height: 0, + marginLeft: 0, + marginRight: 0 + } + }; + this.options = options; + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); } - height = max + margin.item.vertical / 2; - } else { - height = 0; } - height = Math.max(height, this.props.label.height); - return height; - }; + Item.call(this, data, conversion, options); + } + + PointItem.prototype = new Item(null, null, null); /** - * Show this group: attach to the DOM + * Check whether this item is visible inside given range + * @param {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Group.prototype.show = function () { - if (!this.dom.label.parentNode) { - this.itemSet.dom.labelSet.appendChild(this.dom.label); - } - - if (!this.dom.foreground.parentNode) { - this.itemSet.dom.foreground.appendChild(this.dom.foreground); - } - - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } + PointItem.prototype.isVisible = function (range) { + // determine visibility + var widthInMs = this.width * range.getMillisecondsPerPixel(); - if (!this.dom.axis.parentNode) { - this.itemSet.dom.axis.appendChild(this.dom.axis); - } + return this.data.start.getTime() + widthInMs > range.start && this.data.start < range.end; }; /** - * Hide this group: remove from the DOM + * Repaint the item */ - Group.prototype.hide = function () { - var label = this.dom.label; - if (label.parentNode) { - label.parentNode.removeChild(label); - } + PointItem.prototype.redraw = function () { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var foreground = this.dom.foreground; - if (foreground.parentNode) { - foreground.parentNode.removeChild(foreground); - } + // background box + dom.point = document.createElement('div'); + // className is updated in redraw() - var background = this.dom.background; - if (background.parentNode) { - background.parentNode.removeChild(background); - } + // contents box, right from the dot + dom.content = document.createElement('div'); + dom.content.className = 'vis-item-content'; + dom.point.appendChild(dom.content); - var axis = this.dom.axis; - if (axis.parentNode) { - axis.parentNode.removeChild(axis); - } - }; + // dot at start + dom.dot = document.createElement('div'); + dom.point.appendChild(dom.dot); - /** - * Add an item to the group - * @param {Item} item - */ - Group.prototype.add = function (item) { - this.items[item.id] = item; - item.setParent(this); + // attach this item as attribute + dom.point['timeline-item'] = this; - // add to - if (item.data.subgroup !== undefined) { - this._addToSubgroup(item); - this.orderSubgroups(); + this.dirty = true; } - if (this.visibleItems.indexOf(item) == -1) { - var range = this.itemSet.body.range; // TODO: not nice accessing the range like this - this._checkIfVisible(item, this.visibleItems, range); + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); } - }; - - Group.prototype._addToSubgroup = function (item, subgroupId) { - subgroupId = subgroupId || item.data.subgroup; - if (subgroupId != undefined && this.subgroups[subgroupId] === undefined) { - this.subgroups[subgroupId] = { - height: 0, - top: 0, - start: item.data.start, - end: item.data.end, - visible: false, - index: this.subgroupIndex, - items: [] - }; - this.subgroupIndex++; + 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; - if (new Date(item.data.start) < new Date(this.subgroups[subgroupId].start)) { - this.subgroups[subgroupId].start = item.data.start; - } - if (new Date(item.data.end) > new Date(this.subgroups[subgroupId].end)) { - this.subgroups[subgroupId].end = item.data.end; - } + // 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._updateDataAttributes(this.dom.point); + this._updateStyle(this.dom.point); - this.subgroups[subgroupId].items.push(item); - }; + var editable = this.editable.updateTime || this.editable.updateGroup; + // 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; - Group.prototype._updateSubgroupsSizes = function () { - var me = this; - if (me.subgroups) { - for (var subgroup in me.subgroups) { - var newStart = me.subgroups[subgroup].items[0].data.start; - var newEnd = me.subgroups[subgroup].items[0].data.end; + // 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; - me.subgroups[subgroup].items.forEach(function (item) { - if (new Date(item.data.start) < new Date(newStart)) { - newStart = item.data.start; - } - if (new Date(item.data.end) > new Date(newEnd)) { - newEnd = item.data.end; - } - }); + // resize contents + if (this.options.rtl) { + dom.content.style.marginRight = 2 * this.props.dot.width + 'px'; + } else { + dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; + } + //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - me.subgroups[subgroup].start = newStart; - me.subgroups[subgroup].end = newEnd; + // recalculate size + this.width = dom.point.offsetWidth; + this.height = dom.point.offsetHeight; + + // reposition the dot + dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; + if (this.options.rtl) { + dom.dot.style.right = this.props.dot.width / 2 + 'px'; + } else { + dom.dot.style.left = this.props.dot.width / 2 + 'px'; } + + this.dirty = false; } - }; - Group.prototype.orderSubgroups = function () { - if (this.subgroupOrderer !== undefined) { - var sortArray = []; - if (typeof this.subgroupOrderer == 'string') { - for (var subgroup in this.subgroups) { - sortArray.push({ subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer] }); - } - sortArray.sort(function (a, b) { - return a.sortField - b.sortField; - }); - } else if (typeof this.subgroupOrderer == 'function') { - for (var subgroup in this.subgroups) { - sortArray.push(this.subgroups[subgroup].items[0].data); - } - sortArray.sort(this.subgroupOrderer); - } + this._repaintOnItemUpdateTimeTooltip(dom.point); + this._repaintDragCenter(); + this._repaintDeleteButton(dom.point); + }; - if (sortArray.length > 0) { - for (var i = 0; i < sortArray.length; i++) { - this.subgroups[sortArray[i].subgroup].index = i; - } - } + /** + * 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(); } }; - Group.prototype.resetSubgroups = function () { - for (var subgroup in this.subgroups) { - if (this.subgroups.hasOwnProperty(subgroup)) { - this.subgroups[subgroup].visible = false; + /** + * 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; } }; /** - * Remove an item from the group - * @param {Item} item + * Reposition the item horizontally + * @Override */ - Group.prototype.remove = function (item) { - delete this.items[item.id]; - item.setParent(null); + PointItem.prototype.repositionX = function () { + var start = this.conversion.toScreen(this.data.start); - // remove from visible items - var index = this.visibleItems.indexOf(item); - if (index != -1) this.visibleItems.splice(index, 1); + if (this.options.rtl) { + this.right = start - this.props.dot.width; - if (item.data.subgroup !== undefined) { - this._removeFromSubgroup(item); - this.orderSubgroups(); + // reposition point + this.dom.point.style.right = this.right + 'px'; + } else { + this.left = start - this.props.dot.width; + + // reposition point + this.dom.point.style.left = this.left + 'px'; } }; - Group.prototype._removeFromSubgroup = function (item, subgroupId) { - subgroupId = subgroupId || item.data.subgroup; - if (subgroupId != undefined) { - var subgroup = this.subgroups[subgroupId]; - if (subgroup) { - var itemIndex = subgroup.items.indexOf(item); - // Check the item is actually in this subgroup. How should items not in the group be handled? - if (itemIndex >= 0) { - subgroup.items.splice(itemIndex, 1); - if (!subgroup.items.length) { - delete this.subgroups[subgroupId]; - } else { - this._updateSubgroupsSizes(); - } - } - } + /** + * 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'; } }; /** - * Remove an item from the corresponding DataSet - * @param {Item} item + * Return the width of the item left from its start date + * @return {number} */ - Group.prototype.removeFromDataSet = function (item) { - this.itemSet.removeItem(item.id); + PointItem.prototype.getWidthLeft = function () { + return this.props.dot.width; }; /** - * Reorder the items + * Return the width of the item right from its start date + * @return {number} */ - Group.prototype.order = function () { - var array = util.toArray(this.items); - var startArray = []; - var endArray = []; + PointItem.prototype.getWidthRight = function () { + return this.props.dot.width; + }; - for (var i = 0; i < array.length; i++) { - if (array[i].data.end !== undefined) { - endArray.push(array[i]); - } - startArray.push(array[i]); - } - this.orderedItems = { - byStart: startArray, - byEnd: endArray - }; + module.exports = PointItem; - stack.orderByStart(this.orderedItems.byStart); - stack.orderByEnd(this.orderedItems.byEnd); - }; +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Update the visible items - * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date - * @param {Item[]} visibleItems The previously visible items. - * @param {{start: number, end: number}} range Visible range - * @return {Item[]} visibleItems The new visible items. - * @private - */ - Group.prototype._updateItemsInRange = function (orderedItems, oldVisibleItems, range) { - var visibleItems = []; - var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems + 'use strict'; - var interval = (range.end - range.start) / 4; - var lowerBound = range.start - interval; - var upperBound = range.end + interval; + var Hammer = __webpack_require__(112); + var Item = __webpack_require__(128); + var BackgroundGroup = __webpack_require__(129); + var RangeItem = __webpack_require__(127); - // this function is used to do the binary search. - var searchFunction = function searchFunction(value) { - if (value < lowerBound) { - return -1; - } else if (value <= upperBound) { - return 0; - } else { - return 1; + /** + * @constructor BackgroundItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options + */ + // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation + function BackgroundItem(data, conversion, options) { + this.props = { + content: { + width: 0 } }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true - // first check if the items that were in view previously are still in view. - // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! - // also cleans up invisible items. - if (oldVisibleItems.length > 0) { - for (var i = 0; i < oldVisibleItems.length; i++) { - this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); } - } - - // we do a binary search for the items that have only start values. - var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data', 'start'); - - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. - this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { - return item.data.start < lowerBound || item.data.start > upperBound; - }); - - // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. - // We therefore have to brute force check all items in the byEnd list - if (this.checkRangedItems == true) { - this.checkRangedItems = false; - for (i = 0; i < orderedItems.byEnd.length; i++) { - this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); } - } else { - // we do a binary search for the items that have defined end times. - var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data', 'end'); - - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. - this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { - return item.data.end < lowerBound || item.data.end > upperBound; - }); - } - - // finally, we reposition all the visible items. - for (var i = 0; i < visibleItems.length; i++) { - var item = visibleItems[i]; - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); } - return visibleItems; - }; + Item.call(this, data, conversion, options); + } - Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { - if (initialPos != -1) { - for (var i = initialPos; i >= 0; i--) { - var item = items[i]; - if (breakCondition(item)) { - break; - } else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } + BackgroundItem.prototype = new Item(null, null, null); - for (var i = initialPos + 1; i < items.length; i++) { - var item = items[i]; - if (breakCondition(item)) { - break; - } else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } - } - }; + BackgroundItem.prototype.baseClassName = 'vis-item vis-background'; + BackgroundItem.prototype.stack = false; /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * 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 */ - Group.prototype._checkIfVisible = function (item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - visibleItems.push(item); - } else { - if (item.displayed) item.hide(); - } - }; - - /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private - */ - Group.prototype._checkIfVisibleWithReference = function (item, visibleItems, visibleItemsLookup, range) { - if (item.isVisible(range)) { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } else { - if (item.displayed) item.hide(); - } - }; - - Group.prototype.changeSubgroup = function (item, oldSubgroup, newSubgroup) { - this._removeFromSubgroup(item, oldSubgroup); - this._addToSubgroup(item, newSubgroup); - this.orderSubgroups(); - }; - - module.exports = Group; - -/***/ }, -/* 135 */ -/***/ function(module, exports) { - - 'use strict'; - - // Utility functions for ordering and stacking of items - var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors - - /** - * Order items by their start data - * @param {Item[]} items - */ - exports.orderByStart = function (items) { - items.sort(function (a, b) { - return a.data.start - b.data.start; - }); - }; - - /** - * Order items by their end date. If they have no end date, their start date - * is used. - * @param {Item[]} items - */ - exports.orderByEnd = function (items) { - items.sort(function (a, b) { - var aTime = 'end' in a.data ? a.data.end : a.data.start, - bTime = 'end' in b.data ? b.data.end : b.data.start; - - return aTime - bTime; - }); - }; - - /** - * Adjust vertical positions of the items such that they don't overlap each - * other. - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {boolean} [force=false] - * If true, all items will be repositioned. If false (default), only - * items having a top===null will be re-stacked - */ - exports.stack = function (items, margin, force) { - if (force) { - // reset top position of all items - for (var i = 0; i < items.length; i++) { - items[i].top = null; - } - } - - // calculate new, non-overlapping positions - for (var i = 0; i < items.length; i++) { - var item = items[i]; - if (item.stack && item.top === null) { - // initialize top position - item.top = margin.axis; - - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var j = 0, jj = items.length; j < jj; j++) { - var other = items[j]; - if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item, other.options.rtl)) { - collidingItem = other; - break; - } - } - - if (collidingItem != null) { - // There is a collision. Reposition the items above the colliding element - item.top = collidingItem.top + collidingItem.height + margin.item.vertical; - } - } while (collidingItem); - } - } - }; - - /** - * Adjust vertical positions of the items without stacking them - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {subgroups[]} subgroups - * All subgroups - */ - exports.nostack = function (items, margin, subgroups, stackSubgroups) { - for (var i = 0; i < items.length; i++) { - if (items[i].data.subgroup == undefined) { - items[i].top = margin.item.vertical; - } else if (items[i].data.subgroup !== undefined && stackSubgroups) { - var newTop = 0; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { - newTop += subgroups[subgroup].height; - subgroups[items[i].data.subgroup].top = newTop; - } - } - } - items[i].top = newTop + 0.5 * margin.item.vertical; - } - } - if (!stackSubgroups) { - exports.stackSubgroups(items, margin, subgroups); - } - }; - - /** - * Adjust vertical positions of the subgroups such that they don't overlap each - * other. - * @param {subgroups[]} subgroups - * All subgroups - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - */ - exports.stackSubgroups = function (items, margin, subgroups) { - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - - subgroups[subgroup].top = 0; - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var otherSubgroup in subgroups) { - if (subgroups[otherSubgroup].top !== null && otherSubgroup !== subgroup && subgroups[subgroup].index > subgroups[otherSubgroup].index && exports.collisionByTimes(subgroups[subgroup], subgroups[otherSubgroup])) { - collidingItem = subgroups[otherSubgroup]; - break; - } - } - - if (collidingItem != null) { - // There is a collision. Reposition the subgroups above the colliding element - subgroups[subgroup].top = collidingItem.top + collidingItem.height; - } - } while (collidingItem); - } - } - for (var i = 0; i < items.length; i++) { - if (items[i].data.subgroup !== undefined) { - items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical; - } - } - }; - - /** - * Test if the two provided items collide - * The items must have parameters left, width, top, and height. - * @param {Item} a The first item - * @param {Item} b The second item - * @param {{horizontal: number, vertical: number}} margin - * An object containing a horizontal and vertical - * minimum required margin. - * @param {boolean} rtl - * @return {boolean} true if a and b collide, else false - */ - exports.collision = function (a, b, margin, rtl) { - if (rtl) { - return a.right - margin.horizontal + EPSILON < b.right + b.width && a.right + a.width + margin.horizontal - EPSILON > b.right && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; - } else { - return a.left - margin.horizontal + EPSILON < b.left + b.width && a.left + a.width + margin.horizontal - EPSILON > b.left && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top; - } - }; - - /** - * Test if the two provided objects collide - * The objects must have parameters start, end, top, and height. - * @param {Object} a The first Object - * @param {Object} b The second Object - * @return {boolean} true if a and b collide, else false - */ - exports.collisionByTimes = function (a, b) { - return a.start <= b.start && a.end >= b.start && a.top < b.top + b.height && a.top + a.height > b.top || b.start <= a.start && b.end >= a.start && b.top < a.top + a.height && b.top + b.height > a.top; - }; - -/***/ }, -/* 136 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var Hammer = __webpack_require__(112); - var Item = __webpack_require__(137); - - /** - * @constructor RangeItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options - */ - function RangeItem(data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true - this.options = options; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); - } - } - - Item.call(this, data, conversion, options); - } - - RangeItem.prototype = new Item(null, null, null); - - RangeItem.prototype.baseClassName = 'vis-item vis-range'; - - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - RangeItem.prototype.isVisible = function (range) { - // determine visibility - return this.data.start < range.end && this.data.end > range.start; + BackgroundItem.prototype.isVisible = function (range) { + // determine visibility + return this.data.start < range.end && this.data.end > range.start; }; /** * Repaint the item */ - RangeItem.prototype.redraw = function () { + BackgroundItem.prototype.redraw = function () { var dom = this.dom; if (!dom) { // create DOM @@ -26255,23 +25808,19 @@ return /******/ (function(modules) { // webpackBootstrap dom.box = document.createElement('div'); // className is updated in redraw() - // frame box (to prevent the item contents from overflowing) + // frame box (to prevent the item contents from overflowing dom.frame = document.createElement('div'); dom.frame.className = 'vis-item-overflow'; dom.box.appendChild(dom.frame); - // visible frame box (showing the frame that is always visible) - dom.visibleFrame = document.createElement('div'); - dom.visibleFrame.className = 'vis-item-visible-frame'; - dom.box.appendChild(dom.visibleFrame); - // contents box dom.content = document.createElement('div'); dom.content.className = 'vis-item-content'; dom.frame.appendChild(dom.content); - // attach this item as attribute - dom.box['timeline-item'] = this; + // Note: we do NOT attach this item as attribute to the DOM, + // such that background items cannot be selected + //dom.box['timeline-item'] = this; this.dirty = true; } @@ -26281,11 +25830,11 @@ return /******/ (function(modules) { // webpackBootstrap throw new Error('Cannot redraw item: no parent attached'); } if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); + var background = this.parent.dom.background; + if (!background) { + throw new Error('Cannot redraw item: parent has no background container element'); } - foreground.appendChild(dom.box); + background.appendChild(dom.box); } this.displayed = true; @@ -26295,2703 +25844,1865 @@ return /******/ (function(modules) { // webpackBootstrap // - the item is selected/deselected if (this.dirty) { this._updateContents(this.dom.content); - this._updateDataAttributes(this.dom.box); + this._updateDataAttributes(this.dom.content); this._updateStyle(this.dom.box); - var editable = this.editable.updateTime || this.editable.updateGroup; - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); + var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : ''); dom.box.className = this.baseClassName + className; // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden'; + this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; // recalculate size - // turn off max-width to be able to calculate the real width - // this causes an extra browser repaint/reflow, but so be it - this.dom.content.style.maxWidth = 'none'; this.props.content.width = this.dom.content.offsetWidth; - this.height = this.dom.box.offsetHeight; - this.dom.content.style.maxWidth = ''; + this.height = 0; // set height zero, so this item will be ignored when stacking items this.dirty = false; } - - this._repaintOnItemUpdateTimeTooltip(dom.box); - this._repaintDeleteButton(dom.box); - this._repaintDragCenter(); - this._repaintDragLeft(); - this._repaintDragRight(); }; /** * Show the item in the DOM (when not already visible). The items DOM will * be created when needed. */ - RangeItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); - } - }; + BackgroundItem.prototype.show = RangeItem.prototype.show; /** * Hide the item from the DOM (when visible) * @return {Boolean} changed */ - RangeItem.prototype.hide = function () { - if (this.displayed) { - var box = this.dom.box; - - if (box.parentNode) { - box.parentNode.removeChild(box); - } - - this.displayed = false; - } - }; + BackgroundItem.prototype.hide = RangeItem.prototype.hide; /** * Reposition the item horizontally - * @param {boolean} [limitSize=true] If true (default), the width of the range - * item will be limited, as the browser cannot - * display very wide divs. This means though - * that the applied left and width may - * not correspond to the ranges start and end * @Override */ - RangeItem.prototype.repositionX = function (limitSize) { - var parentWidth = this.parent.width; - var start = this.conversion.toScreen(this.data.start); - var end = this.conversion.toScreen(this.data.end); - var contentStartPosition; - var contentWidth; - - // limit the width of the range, as browsers cannot draw very wide divs - if (limitSize === undefined || limitSize === true) { - if (start < -parentWidth) { - start = -parentWidth; - } - if (end > 2 * parentWidth) { - end = 2 * parentWidth; - } - } - - // add 0.5 to compensate floating-point values rounding - var boxWidth = Math.max(end - start + 0.5, 1); - - if (this.overflow) { - if (this.options.rtl) { - this.right = start; - } else { - this.left = start; - } - this.width = boxWidth + this.props.content.width; - contentWidth = this.props.content.width; - - // Note: The calculation of width is an optimistic calculation, giving - // a width which will not change when moving the Timeline - // So no re-stacking needed, which is nicer for the eye; - } else { - if (this.options.rtl) { - this.right = start; - } else { - this.left = start; - } - this.width = boxWidth; - contentWidth = Math.min(end - start, this.props.content.width); - } - - if (this.options.rtl) { - this.dom.box.style.right = this.right + 'px'; - } else { - this.dom.box.style.left = this.left + 'px'; - } - this.dom.box.style.width = boxWidth + 'px'; - - switch (this.options.align) { - case 'left': - if (this.options.rtl) { - this.dom.content.style.right = '0'; - } else { - this.dom.content.style.left = '0'; - } - break; - - case 'right': - if (this.options.rtl) { - this.dom.content.style.right = Math.max(boxWidth - contentWidth, 0) + 'px'; - } else { - this.dom.content.style.left = Math.max(boxWidth - contentWidth, 0) + 'px'; - } - break; - - case 'center': - if (this.options.rtl) { - this.dom.content.style.right = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; - } else { - this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px'; - } - - break; - - default: - // 'auto' - // when range exceeds left of the window, position the contents at the left of the visible area - if (this.overflow) { - if (end > 0) { - contentStartPosition = Math.max(-start, 0); - } else { - contentStartPosition = -contentWidth; // ensure it's not visible anymore - } - } else { - if (start < 0) { - contentStartPosition = -start; - } else { - contentStartPosition = 0; - } - } - if (this.options.rtl) { - this.dom.content.style.right = contentStartPosition + 'px'; - } else { - this.dom.content.style.left = contentStartPosition + 'px'; - this.dom.content.style.width = 'calc(100% - ' + contentStartPosition + 'px)'; - } - } - }; + BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; /** * Reposition the item vertically * @Override */ - RangeItem.prototype.repositionY = function () { + BackgroundItem.prototype.repositionY = function (margin) { + var height; var orientation = this.options.orientation.item; - var box = this.dom.box; - - if (orientation == 'top') { - box.style.top = this.top + 'px'; - } else { - box.style.top = this.parent.height - this.top - this.height + 'px'; - } - }; - /** - * Repaint a drag area on the left side of the range when the range is selected - * @protected - */ - RangeItem.prototype._repaintDragLeft = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { - // create and show drag area - var dragLeft = document.createElement('div'); - dragLeft.className = 'vis-drag-left'; - dragLeft.dragLeftItem = this; + // special positioning for subgroups + if (this.data.subgroup !== undefined) { + // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset - this.dom.box.appendChild(dragLeft); - this.dom.dragLeft = dragLeft; - } else if (!this.selected && this.dom.dragLeft) { - // delete drag area - if (this.dom.dragLeft.parentNode) { - this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); - } - this.dom.dragLeft = null; - } - }; + var itemSubgroup = this.data.subgroup; + var subgroups = this.parent.subgroups; + var subgroupIndex = subgroups[itemSubgroup].index; - /** - * Repaint a drag area on the right side of the range when the range is selected - * @protected - */ - RangeItem.prototype._repaintDragRight = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { - // create and show drag area - var dragRight = document.createElement('div'); - dragRight.className = 'vis-drag-right'; - dragRight.dragRightItem = this; + this.dom.box.style.height = this.parent.subgroups[itemSubgroup].height + 'px'; - this.dom.box.appendChild(dragRight); - this.dom.dragRight = dragRight; - } else if (!this.selected && this.dom.dragRight) { - // delete drag area - if (this.dom.dragRight.parentNode) { - this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); + if (orientation == 'top') { + this.dom.box.style.top = this.parent.top + this.parent.subgroups[itemSubgroup].top + 'px'; + } else { + this.dom.box.style.top = this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height + 'px'; } - this.dom.dragRight = null; + this.dom.box.style.bottom = ''; } + // and in the case of no subgroups: + else { + // we want backgrounds with groups to only show in groups. + if (this.parent instanceof BackgroundGroup) { + // if the item is not in a group: + height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height); + this.dom.box.style.bottom = orientation == 'bottom' ? '0' : ''; + this.dom.box.style.top = orientation == 'top' ? '0' : ''; + } else { + height = this.parent.height; + // same alignment for items when orientation is top or bottom + this.dom.box.style.top = this.parent.top + 'px'; + this.dom.box.style.bottom = ''; + } + } + this.dom.box.style.height = height + 'px'; }; - module.exports = RangeItem; + module.exports = BackgroundItem; -/***/ }, -/* 137 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 133 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - var _typeof2 = __webpack_require__(62); + Object.defineProperty(exports, "__esModule", { + value: true + }); - var _typeof3 = _interopRequireDefault(_typeof2); + var _classCallCheck2 = __webpack_require__(134); - var _keys = __webpack_require__(58); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _keys2 = _interopRequireDefault(_keys); + var _createClass2 = __webpack_require__(135); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _createClass3 = _interopRequireDefault(_createClass2); - var Hammer = __webpack_require__(112); - var util = __webpack_require__(1); - var moment = __webpack_require__(82); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** - * @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 + * Popup is a class to create a popup window with some text + * @param {Element} container The container object. + * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap') */ - 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.groupShowing = true; - this.dirty = true; + var Popup = function () { + function Popup(container, overflowMethod) { + (0, _classCallCheck3['default'])(this, Popup); - this.top = null; - this.right = null; - this.left = null; - this.width = null; - this.height = null; + this.container = container; + this.overflowMethod = overflowMethod || 'cap'; - this.editable = null; - this._updateEditStatus(); - } + this.x = 0; + this.y = 0; + this.padding = 5; + this.hidden = false; - Item.prototype.stack = true; + // create the frame + this.frame = document.createElement('div'); + this.frame.className = 'vis-tooltip'; + this.container.appendChild(this.frame); + } - /** - * Select current item - */ - Item.prototype.select = function () { - this.selected = true; - this.dirty = true; - if (this.displayed) this.redraw(); - }; + /** + * @param {number} x Horizontal position of the popup window + * @param {number} y Vertical position of the popup window + */ - /** - * Unselect current item - */ - Item.prototype.unselect = function () { - this.selected = false; - this.dirty = true; - if (this.displayed) this.redraw(); - }; - /** - * Set data for the item. Existing data will be updated. The id should not - * be changed. When the item is displayed, it will be redrawn immediately. - * @param {Object} data - */ - Item.prototype.setData = function (data) { - var groupChanged = data.group != undefined && this.data.group != data.group; - if (groupChanged) { - this.parent.itemSet._moveToGroup(this, data.group); - } + (0, _createClass3['default'])(Popup, [{ + key: 'setPosition', + value: function setPosition(x, y) { + this.x = parseInt(x); + this.y = parseInt(y); + } - this.data = data; - this._updateEditStatus(); - this.dirty = true; - if (this.displayed) this.redraw(); - }; + /** + * Set the content for the popup window. This can be HTML code or text. + * @param {string | Element} content + */ - /** - * Set a parent for the item - * @param {ItemSet | Group} parent - */ - Item.prototype.setParent = function (parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); + }, { + key: 'setText', + value: function setText(content) { + if (content instanceof Element) { + this.frame.innerHTML = ''; + this.frame.appendChild(content); + } else { + this.frame.innerHTML = content; // string containing text or HTML + } } - } else { - this.parent = parent; - } - }; - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - Item.prototype.isVisible = function (range) { - return false; - }; + /** + * Show the popup window + * @param {boolean} [doShow] Show or hide the window + */ - /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed - */ - Item.prototype.show = function () { - return false; - }; + }, { + key: 'show', + value: function show(doShow) { + if (doShow === undefined) { + doShow = true; + } - /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed - */ - Item.prototype.hide = function () { - return false; - }; + if (doShow === true) { + var height = this.frame.clientHeight; + var width = this.frame.clientWidth; + var maxHeight = this.frame.parentNode.clientHeight; + var maxWidth = this.frame.parentNode.clientWidth; - /** - * Repaint the item - */ - Item.prototype.redraw = function () { - // should be implemented by the item - }; + var left = 0, + top = 0; - /** - * Reposition the Item horizontally - */ - Item.prototype.repositionX = function () { - // should be implemented by the item - }; + if (this.overflowMethod == 'flip') { + var isLeft = false, + isTop = true; // Where around the position it's located - /** - * Reposition the Item vertically - */ - Item.prototype.repositionY = function () { - // should be implemented by the item - }; + if (this.y - height < this.padding) { + isTop = false; + } - /** - * Repaint a drag area on the center of the item when the item is selected - * @protected - */ - Item.prototype._repaintDragCenter = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) { - var me = this; + if (this.x + width > maxWidth - this.padding) { + isLeft = true; + } - // create and show drag area - var dragCenter = document.createElement('div'); - dragCenter.className = 'vis-drag-center'; - dragCenter.dragCenterItem = this; + if (isLeft) { + left = this.x - width; + } else { + left = this.x; + } - new Hammer(dragCenter).on('doubletap', function (event) { - event.stopPropagation(); - me.parent.itemSet._onUpdateItem(me); - }); + if (isTop) { + top = this.y - height; + } else { + top = this.y; + } + } else { + top = this.y - height; + if (top + height + this.padding > maxHeight) { + top = maxHeight - height - this.padding; + } + if (top < this.padding) { + top = this.padding; + } - if (this.dom.box) { - this.dom.box.appendChild(dragCenter); - } else if (this.dom.point) { - this.dom.point.appendChild(dragCenter); - } + left = this.x; + if (left + width + this.padding > maxWidth) { + left = maxWidth - width - this.padding; + } + if (left < this.padding) { + left = this.padding; + } + } - this.dom.dragCenter = dragCenter; - } else if (!this.selected && this.dom.dragCenter) { - // delete drag area - if (this.dom.dragCenter.parentNode) { - this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter); + this.frame.style.left = left + "px"; + this.frame.style.top = top + "px"; + this.frame.style.visibility = "visible"; + this.hidden = false; + } else { + this.hide(); + } } - this.dom.dragCenter = null; - } - }; - - /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected - */ - Item.prototype._repaintDeleteButton = function (anchor) { - var editable = (this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove || !this.options.editable.overrideItems && this.editable != null && this.editable.remove; - - if (this.selected && editable && !this.dom.deleteButton) { - // create and show button - var me = this; - var deleteButton = document.createElement('div'); + /** + * Hide the popup window + */ - if (this.options.rtl) { - deleteButton.className = 'vis-delete-rtl'; - } else { - deleteButton.className = 'vis-delete'; + }, { + key: 'hide', + value: function hide() { + this.hidden = true; + this.frame.style.visibility = "hidden"; } - 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); - }); + /** + * Remove the popup window + */ - 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); + }, { + key: 'destroy', + value: function destroy() { + this.frame.parentNode.removeChild(this.frame); // Remove element from DOM } - this.dom.deleteButton = null; - } - }; + }]); + return Popup; + }(); - /** - * Repaint a onChange tooltip on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected - */ - Item.prototype._repaintOnItemUpdateTimeTooltip = function (anchor) { - if (!this.options.tooltipOnItemUpdateTime) return; + exports['default'] = Popup; - var editable = (this.options.editable.updateTime || this.data.editable === true) && this.data.editable !== false; +/***/ }), +/* 134 */ +/***/ (function(module, exports) { - if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) { - // create and show tooltip - var me = this; + "use strict"; - var onItemUpdateTimeTooltip = document.createElement('div'); + exports.__esModule = true; - onItemUpdateTimeTooltip.className = 'vis-onUpdateTime-tooltip'; - anchor.appendChild(onItemUpdateTimeTooltip); - this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip; - } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) { - // remove button - if (this.dom.onItemUpdateTimeTooltip.parentNode) { - this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip); - } - this.dom.onItemUpdateTimeTooltip = null; + exports.default = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); } + }; - // position onChange tooltip - if (this.dom.onItemUpdateTimeTooltip) { - - // only show when editing - this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? 'visible' : 'hidden'; +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { - // position relative to item's content - if (this.options.rtl) { - this.dom.onItemUpdateTimeTooltip.style.right = this.dom.content.style.right; - } else { - this.dom.onItemUpdateTimeTooltip.style.left = this.dom.content.style.left; - } + "use strict"; - // position above or below the item depending on the item's position in the window - var tooltipOffset = 50; // TODO: should be tooltip height (depends on template) - var scrollTop = this.parent.itemSet.body.domProps.scrollTop; + exports.__esModule = true; - // TODO: this.top for orientation:true is actually the items distance from the bottom... - // (should be this.bottom) - var itemDistanceFromTop; - if (this.options.orientation.item == 'top') { - itemDistanceFromTop = this.top; - } else { - itemDistanceFromTop = this.parent.height - this.top - this.height; - } - var isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop; + var _defineProperty = __webpack_require__(136); - if (isCloseToTop) { - this.dom.onItemUpdateTimeTooltip.style.bottom = ""; - this.dom.onItemUpdateTimeTooltip.style.top = this.height + 2 + "px"; - } else { - this.dom.onItemUpdateTimeTooltip.style.top = ""; - this.dom.onItemUpdateTimeTooltip.style.bottom = this.height + 2 + "px"; - } + var _defineProperty2 = _interopRequireDefault(_defineProperty); - // handle tooltip content - var content; - var templateFunction; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) { - templateFunction = this.options.tooltipOnItemUpdateTime.template.bind(this); - content = templateFunction(this.data); - } else { - content = 'start: ' + moment(this.data.start).format('MM/DD/YYYY hh:mm'); - if (this.data.end) { - content += '
end: ' + moment(this.data.end).format('MM/DD/YYYY hh:mm'); - } + exports.default = 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; + (0, _defineProperty2.default)(target, descriptor.key, descriptor); } - this.dom.onItemUpdateTimeTooltip.innerHTML = content; } - }; - - /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private - */ - Item.prototype._updateContents = function (element) { - var content; - var templateFunction; - var itemVisibleFrameContent; - var visibleFrameTemplateFunction; - var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset - var frameElement = this.dom.box || this.dom.point; - var itemVisibleFrameContentElement = frameElement.getElementsByClassName('vis-item-visible-frame')[0]; + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); - if (this.options.visibleFrameTemplate) { - visibleFrameTemplateFunction = this.options.visibleFrameTemplate.bind(this); - itemVisibleFrameContent = visibleFrameTemplateFunction(itemData, frameElement); - } else { - itemVisibleFrameContent = ''; - } +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { - if (itemVisibleFrameContentElement) { - if (itemVisibleFrameContent instanceof Object && !(itemVisibleFrameContent instanceof Element)) { - visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement); - } else { - var changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent); - if (changed) { - // only replace the content when changed - if (itemVisibleFrameContent instanceof Element) { - itemVisibleFrameContentElement.innerHTML = ''; - itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent); - } else if (itemVisibleFrameContent != undefined) { - itemVisibleFrameContentElement.innerHTML = itemVisibleFrameContent; - } else { - if (!(this.data.type == 'background' && this.data.content === undefined)) { - throw new Error('Property "content" missing in item ' + this.id); - } - } + module.exports = { "default": __webpack_require__(137), __esModule: true }; - this.itemVisibleFrameContent = itemVisibleFrameContent; - } - } - } +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { - if (this.options.template) { - templateFunction = this.options.template.bind(this); - content = templateFunction(itemData, element, this.data); - } else { - content = this.data.content; - } + __webpack_require__(138); + var $Object = __webpack_require__(17).Object; + module.exports = function defineProperty(it, key, desc){ + return $Object.defineProperty(it, key, desc); + }; - if (content instanceof Object && !(content instanceof Element)) { - templateFunction(itemData, element); - } else { - 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); - } - } +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { - this.content = content; - } - } - }; + var $export = __webpack_require__(15); + // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) + $export($export.S + $export.F * !__webpack_require__(25), 'Object', {defineProperty: __webpack_require__(21).f}); - /** - * Process dataAttributes timeline option and set as data- attributes on dom.content - * @param {Element} element HTML element to which the attributes will be attached - * @private - */ - Item.prototype._updateDataAttributes = function (element) { - if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - var attributes = []; +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { - if (Array.isArray(this.options.dataAttributes)) { - attributes = this.options.dataAttributes; - } else if (this.options.dataAttributes == 'all') { - attributes = (0, _keys2['default'])(this.data); - } else { - return; - } + 'use strict'; - for (var i = 0; i < attributes.length; i++) { - var name = attributes[i]; - var value = this.data[name]; + var _typeof2 = __webpack_require__(62); - if (value != null) { - element.setAttribute('data-' + name, value); - } else { - element.removeAttribute('data-' + name); - } - } - } - }; + var _typeof3 = _interopRequireDefault(_typeof2); - /** - * 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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // append new styles - if (this.data.style) { - util.addCssText(element, this.data.style); - this.style = this.data.style; - } - }; + var util = __webpack_require__(1); + var Component = __webpack_require__(120); + var TimeStep = __webpack_require__(124); + var DateUtil = __webpack_require__(121); + var moment = __webpack_require__(82); /** - * Stringify the items contents - * @param {string | Element | undefined} content - * @returns {string | undefined} - * @private + * A horizontal time axis + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See TimeAxis.setOptions for the available + * options. + * @constructor TimeAxis + * @extends Component */ - Item.prototype._contentToString = function (content) { - if (typeof content === 'string') return content; - if (content && 'outerHTML' in content) return content.outerHTML; - return content; - }; - - /** - * Update the editability of this item. - */ - Item.prototype._updateEditStatus = function () { - if (this.options) { - if (typeof this.options.editable === 'boolean') { - this.editable = { - updateTime: this.options.editable, - updateGroup: this.options.editable, - remove: this.options.editable - }; - } else if ((0, _typeof3['default'])(this.options.editable) === 'object') { - this.editable = {}; - util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.options.editable); - }; - } - // Item data overrides, except if options.editable.overrideItems is set. - if (!this.options || !this.options.editable || this.options.editable.overrideItems !== true) { - if (this.data) { - if (typeof this.data.editable === 'boolean') { - this.editable = { - updateTime: this.data.editable, - updateGroup: this.data.editable, - remove: this.data.editable - }; - } else if ((0, _typeof3['default'])(this.data.editable) === 'object') { - // TODO: in vis.js 5.0, we should change this to not reset options from the timeline configuration. - // Basically just remove the next line... - this.editable = {}; - util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.data.editable); - } + function TimeAxis(body, options) { + this.dom = { + foreground: null, + lines: [], + majorTexts: [], + minorTexts: [], + redundant: { + lines: [], + majorTexts: [], + minorTexts: [] } - } - }; - - /** - * Return the width of the item left from its start date - * @return {number} - */ - Item.prototype.getWidthLeft = function () { - return 0; - }; + }; + this.props = { + range: { + start: 0, + end: 0, + minimumStep: 0 + }, + lineTop: 0 + }; - /** - * Return the width of the item right from the max of its start and end date - * @return {number} - */ - Item.prototype.getWidthRight = function () { - return 0; - }; + this.defaultOptions = { + orientation: { + axis: 'bottom' + }, // axis orientation: 'top' or 'bottom' + showMinorLabels: true, + showMajorLabels: true, + maxMinorChars: 7, + format: TimeStep.FORMAT, + moment: moment, + timeAxis: null + }; + this.options = util.extend({}, this.defaultOptions); - /** - * Return the title of the item - * @return {string | undefined} - */ - Item.prototype.getTitle = function () { - return this.data.title; - }; + this.body = body; - module.exports = Item; + // create the HTML DOM + this._create(); -/***/ }, -/* 138 */ -/***/ function(module, exports, __webpack_require__) { + this.setOptions(options); + } - 'use strict'; + TimeAxis.prototype = new Component(); - var _create = __webpack_require__(55); + /** + * Set options for the TimeAxis. + * Parameters will be merged in current options. + * @param {Object} options Available options: + * {string} [orientation.axis] + * {boolean} [showMinorLabels] + * {boolean} [showMajorLabels] + */ + TimeAxis.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showMinorLabels', 'showMajorLabels', 'maxMinorChars', 'hiddenDates', 'timeAxis', 'moment', 'rtl'], this.options, options); - var _create2 = _interopRequireDefault(_create); + // deep copy the format options + util.selectiveDeepExtend(['format'], this.options, options); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + if ('orientation' in options) { + if (typeof options.orientation === 'string') { + this.options.orientation.axis = options.orientation; + } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'axis' in options.orientation) { + this.options.orientation.axis = options.orientation.axis; + } + } - var util = __webpack_require__(1); - var Group = __webpack_require__(134); + // apply locale to moment.js + // TODO: not so nice, this is applied globally to moment.js + if ('locale' in options) { + if (typeof moment.locale === 'function') { + // moment.js 2.8.1+ + moment.locale(options.locale); + } else { + moment.lang(options.locale); + } + } + } + }; /** - * @constructor BackgroundGroup - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet + * Create the HTML DOM for the TimeAxis */ - function BackgroundGroup(groupId, data, itemSet) { - Group.call(this, groupId, data, itemSet); - - this.width = 0; - this.height = 0; - this.top = 0; - this.left = 0; - } + TimeAxis.prototype._create = function () { + this.dom.foreground = document.createElement('div'); + this.dom.background = document.createElement('div'); - BackgroundGroup.prototype = (0, _create2['default'])(Group.prototype); + this.dom.foreground.className = 'vis-time-axis vis-foreground'; + this.dom.background.className = 'vis-time-axis vis-background'; + }; /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * Destroy the TimeAxis */ - BackgroundGroup.prototype.redraw = function (range, margin, restack) { - var resized = false; - - this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range); - - // calculate actual size - this.width = this.dom.background.offsetWidth; - - // apply new height (just always zero for BackgroundGroup - this.dom.background.style.height = '0'; - - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); + TimeAxis.prototype.destroy = function () { + // remove from DOM + if (this.dom.foreground.parentNode) { + this.dom.foreground.parentNode.removeChild(this.dom.foreground); + } + if (this.dom.background.parentNode) { + this.dom.background.parentNode.removeChild(this.dom.background); } - return resized; + this.body = null; }; /** - * Show this group: attach to the DOM + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - BackgroundGroup.prototype.show = function () { - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } - }; + TimeAxis.prototype.redraw = function () { + var props = this.props; + var foreground = this.dom.foreground; + var background = this.dom.background; - module.exports = BackgroundGroup; + // determine the correct parent DOM element (depending on option orientation) + var parent = this.options.orientation.axis == 'top' ? this.body.dom.top : this.body.dom.bottom; + var parentChanged = foreground.parentNode !== parent; -/***/ }, -/* 139 */ -/***/ function(module, exports, __webpack_require__) { + // calculate character width and height + this._calculateCharSize(); - 'use strict'; + // TODO: recalculate sizes only needed when parent is resized or options is changed + var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none'; + var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none'; - var Item = __webpack_require__(137); - var util = __webpack_require__(1); + // determine the width and height of the elemens for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + props.height = props.minorLabelHeight + props.majorLabelHeight; + props.width = foreground.offsetWidth; - /** - * @constructor BoxItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function BoxItem(data, conversion, options) { - this.props = { - dot: { - width: 0, - height: 0 - }, - line: { - width: 0, - height: 0 - } - }; - this.options = options; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } - } + props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); + props.minorLineWidth = 1; // TODO: really calculate width + props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; + props.majorLineWidth = 1; // TODO: really calculate width - Item.call(this, data, conversion, options); - } + // take foreground and background offline while updating (is almost twice as fast) + var foregroundNextSibling = foreground.nextSibling; + var backgroundNextSibling = background.nextSibling; + foreground.parentNode && foreground.parentNode.removeChild(foreground); + background.parentNode && background.parentNode.removeChild(background); - BoxItem.prototype = new Item(null, null, null); + foreground.style.height = this.props.height + 'px'; - /** - * Check whether this item is visible inside given range - * @param {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - BoxItem.prototype.isVisible = function (range) { - // determine visibility - var isVisible; - var align = this.options.align; - var widthInMs = this.width * range.getMillisecondsPerPixel(); + this._repaintLabels(); - if (align == 'right') { - isVisible = this.data.start.getTime() > range.start && this.data.start.getTime() - widthInMs < range.end; - } else if (align == 'left') { - isVisible = this.data.start.getTime() + widthInMs > range.start && this.data.start.getTime() < range.end; + // put DOM online again (at the same place) + if (foregroundNextSibling) { + parent.insertBefore(foreground, foregroundNextSibling); } else { - // default or 'center' - isVisible = this.data.start.getTime() + widthInMs / 2 > range.start && this.data.start.getTime() - widthInMs / 2 < range.end; + parent.appendChild(foreground); } - return isVisible; + if (backgroundNextSibling) { + this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); + } else { + this.body.dom.backgroundVertical.appendChild(background); + } + return this._isResized() || parentChanged; }; /** - * Repaint the item + * Repaint major and minor text labels and vertical grid lines + * @private */ - BoxItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // create main box - dom.box = document.createElement('DIV'); - - // contents box (inside the background box). used for making margins - dom.content = document.createElement('DIV'); - dom.content.className = 'vis-item-content'; - dom.box.appendChild(dom.content); + TimeAxis.prototype._repaintLabels = function () { + var orientation = this.options.orientation.axis; - // line to axis - dom.line = document.createElement('DIV'); - dom.line.className = 'vis-line'; + // calculate range and step (step such that we have space for 7 characters per label) + var start = util.convert(this.body.range.start, 'Number'); + var end = util.convert(this.body.range.end, 'Number'); + var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf(); + var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize); + minimumStep -= this.body.util.toTime(0).valueOf(); - // dot on axis - dom.dot = document.createElement('DIV'); - dom.dot.className = 'vis-dot'; + var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); + step.setMoment(this.options.moment); + if (this.options.format) { + step.setFormat(this.options.format); + } + if (this.options.timeAxis) { + step.setScale(this.options.timeAxis); + } + this.step = step; - // attach this item as attribute - dom.box['timeline-item'] = this; + // Move all DOM elements to a "redundant" list, where they + // can be picked for re-use, and clear the lists with lines and texts. + // At the end of the function _repaintLabels, left over elements will be cleaned up + var dom = this.dom; + dom.redundant.lines = dom.lines; + dom.redundant.majorTexts = dom.majorTexts; + dom.redundant.minorTexts = dom.minorTexts; + dom.lines = []; + dom.majorTexts = []; + dom.minorTexts = []; - this.dirty = true; - } + var current; + var next; + var x; + var xNext; + var isMajor, nextIsMajor; + var showMinorGrid; + var width = 0, + prevWidth; + var line; + var labelMinor; + var xFirstMajorLabel = undefined; + var count = 0; + var MAX = 1000; + var className; - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); - foreground.appendChild(dom.box); - } - if (!dom.line.parentNode) { - var background = this.parent.dom.background; - if (!background) throw new Error('Cannot redraw item: parent has no background container element'); - background.appendChild(dom.line); - } - if (!dom.dot.parentNode) { - var axis = this.parent.dom.axis; - if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); - axis.appendChild(dom.dot); - } - this.displayed = true; + step.start(); + next = step.getCurrent(); + xNext = this.body.util.toScreen(next); + while (step.hasNext() && count < MAX) { + count++; - // 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._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); + isMajor = step.isMajor(); + className = step.getClassName(); + labelMinor = step.getLabelMinor(); - var editable = this.editable.updateTime || this.editable.updateGroup; + current = next; + x = xNext; - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly'); - dom.box.className = 'vis-item vis-box' + className; - dom.line.className = 'vis-item vis-line' + className; - dom.dot.className = 'vis-item vis-dot' + className; + step.next(); + next = step.getCurrent(); + nextIsMajor = step.isMajor(); + xNext = this.body.util.toScreen(next); - // set initial position in the visible range of the grid so that the - // rendered box size can be determinated correctly, even the content - // has a dynamic width (fixes #2032). - var previousRight = dom.box.style.right; - var previousLeft = dom.box.style.left; - if (this.options.rtl) { - dom.box.style.right = "0px"; - } else { - dom.box.style.left = "0px"; + prevWidth = width; + width = xNext - x; + switch (step.scale) { + case 'week': + showMinorGrid = true;break; + default: + showMinorGrid = width >= prevWidth * 0.4;break; // prevent displaying of the 31th of the month on a scale of 5 days } - // recalculate size - this.props.dot.height = dom.dot.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.line.width = dom.line.offsetWidth; - this.width = dom.box.offsetWidth; - this.height = dom.box.offsetHeight; + if (this.options.showMinorLabels && showMinorGrid) { + var label = this._repaintMinorText(x, labelMinor, orientation, className); + label.style.width = width + 'px'; // set width to prevent overflow + } - // restore previous position - if (this.options.rtl) { - dom.box.style.right = previousRight; + if (isMajor && this.options.showMajorLabels) { + if (x > 0) { + if (xFirstMajorLabel == undefined) { + xFirstMajorLabel = x; + } + label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className); + } + line = this._repaintMajorLine(x, width, orientation, className); } else { - dom.box.style.left = previousLeft; + // minor line + if (showMinorGrid) { + line = this._repaintMinorLine(x, width, orientation, className); + } else { + if (line) { + // adjust the width of the previous grid + line.style.width = parseInt(line.style.width) + width + 'px'; + } + } } + } - this.dirty = false; + if (count === MAX && !warnedForOverflow) { + console.warn('Something is wrong with the Timeline scale. Limited drawing of grid lines to ' + MAX + ' lines.'); + warnedForOverflow = true; } - this._repaintOnItemUpdateTimeTooltip(dom.box); - this._repaintDragCenter(); - this._repaintDeleteButton(dom.box); - }; + // create a major label on the left when needed + if (this.options.showMajorLabels) { + var leftTime = this.body.util.toTime(0), + leftText = step.getLabelMajor(leftTime), + widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - /** - * Show the item in the DOM (when not already displayed). The items DOM will - * be created when needed. - */ - BoxItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); + if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { + this._repaintMajorText(0, leftText, orientation, className); + } } + + // Cleanup leftover DOM elements from the redundant list + util.forEach(this.dom.redundant, function (arr) { + while (arr.length) { + var elem = arr.pop(); + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + }); }; /** - * Hide the item from the DOM (when visible) + * Create a minor label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the HTML element of the created label + * @private */ - BoxItem.prototype.hide = function () { - if (this.displayed) { - var dom = this.dom; - - if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); - if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); - if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); + TimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) { + // reuse redundant label + var label = this.dom.redundant.minorTexts.shift(); - this.displayed = false; + if (!label) { + // create new label + var content = document.createTextNode(''); + label = document.createElement('div'); + label.appendChild(content); + this.dom.foreground.appendChild(label); } - }; + this.dom.minorTexts.push(label); + label.innerHTML = text; - /** - * Reposition the item horizontally - * @Override - */ - BoxItem.prototype.repositionX = function () { - var start = this.conversion.toScreen(this.data.start); - var align = this.options.align; + label.style.top = orientation == 'top' ? this.props.majorLabelHeight + 'px' : '0'; - // calculate left position of the box - if (align == 'right') { - if (this.options.rtl) { - this.right = start - this.width; + if (this.options.rtl) { + label.style.left = ""; + label.style.right = x + 'px'; + } else { + label.style.left = x + 'px'; + }; + label.className = 'vis-text vis-minor ' + className; + //label.title = title; // TODO: this is a heavy operation - // reposition box, line, and dot - this.dom.box.style.right = this.right + 'px'; - this.dom.line.style.right = start - this.props.line.width + 'px'; - this.dom.dot.style.right = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; - } else { - this.left = start - this.width; + return label; + }; - // reposition box, line, and dot - this.dom.box.style.left = this.left + 'px'; - this.dom.line.style.left = start - this.props.line.width + 'px'; - this.dom.dot.style.left = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; - } - } else if (align == 'left') { - if (this.options.rtl) { - this.right = start; + /** + * Create a Major label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the HTML element of the created label + * @private + */ + TimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) { + // reuse redundant label + var label = this.dom.redundant.majorTexts.shift(); - // reposition box, line, and dot - this.dom.box.style.right = this.right + 'px'; - this.dom.line.style.right = start + 'px'; - this.dom.dot.style.right = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; - } else { - this.left = start; + if (!label) { + // create label + var content = document.createElement('div'); + label = document.createElement('div'); + label.appendChild(content); + this.dom.foreground.appendChild(label); + } - // reposition box, line, and dot - this.dom.box.style.left = this.left + 'px'; - this.dom.line.style.left = start + 'px'; - this.dom.dot.style.left = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px'; - } + label.childNodes[0].innerHTML = text; + label.className = 'vis-text vis-major ' + className; + //label.title = title; // TODO: this is a heavy operation + + label.style.top = orientation == 'top' ? '0' : this.props.minorLabelHeight + 'px'; + if (this.options.rtl) { + label.style.left = ""; + label.style.right = x + 'px'; } else { - // default or 'center' - if (this.options.rtl) { - this.right = start - this.width / 2; + label.style.left = x + 'px'; + }; - // reposition box, line, and dot - this.dom.box.style.right = this.right + 'px'; - this.dom.line.style.right = start - this.props.line.width + 'px'; - this.dom.dot.style.right = start - this.props.dot.width / 2 + 'px'; - } else { - this.left = start - this.width / 2; + this.dom.majorTexts.push(label); + return label; + }; - // reposition box, line, and dot - this.dom.box.style.left = this.left + 'px'; - this.dom.line.style.left = start - this.props.line.width / 2 + 'px'; - this.dom.dot.style.left = start - this.props.dot.width / 2 + 'px'; - } + /** + * Create a minor line for the axis at position x + * @param {Number} x + * @param {Number} width + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the created line + * @private + */ + TimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) { + // reuse redundant line + var line = this.dom.redundant.lines.shift(); + if (!line) { + // create vertical line + line = document.createElement('div'); + this.dom.background.appendChild(line); + } + this.dom.lines.push(line); + + var props = this.props; + if (orientation == 'top') { + line.style.top = props.majorLabelHeight + 'px'; + } else { + line.style.top = this.body.domProps.top.height + 'px'; } + line.style.height = props.minorLineHeight + 'px'; + if (this.options.rtl) { + line.style.left = ""; + line.style.right = x - props.minorLineWidth / 2 + 'px'; + line.className = 'vis-grid vis-vertical-rtl vis-minor ' + className; + } else { + line.style.left = x - props.minorLineWidth / 2 + 'px'; + line.className = 'vis-grid vis-vertical vis-minor ' + className; + }; + line.style.width = width + 'px'; + + return line; }; /** - * Reposition the item vertically - * @Override + * Create a Major line for the axis at position x + * @param {Number} x + * @param {Number} width + * @param {String} orientation "top" or "bottom" (default) + * @param {String} className + * @return {Element} Returns the created line + * @private */ - BoxItem.prototype.repositionY = function () { - var orientation = this.options.orientation.item; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; + TimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) { + // reuse redundant line + var line = this.dom.redundant.lines.shift(); + if (!line) { + // create vertical line + line = document.createElement('div'); + this.dom.background.appendChild(line); + } + this.dom.lines.push(line); + var props = this.props; if (orientation == 'top') { - box.style.top = (this.top || 0) + 'px'; - line.style.top = '0'; - line.style.height = this.parent.top + this.top + 1 + 'px'; - line.style.bottom = ''; } else { - // orientation 'bottom' - var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty - var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; + line.style.top = this.body.domProps.top.height + 'px'; + } - box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; - line.style.top = itemSetHeight - lineHeight + 'px'; - line.style.bottom = '0'; + if (this.options.rtl) { + line.style.left = ""; + line.style.right = x - props.majorLineWidth / 2 + 'px'; + line.className = 'vis-grid vis-vertical-rtl vis-major ' + className; + } else { + line.style.left = x - props.majorLineWidth / 2 + 'px'; + line.className = 'vis-grid vis-vertical vis-major ' + className; } - dot.style.top = -this.props.dot.height / 2 + 'px'; - }; + line.style.height = props.majorLineHeight + 'px'; + line.style.width = width + 'px'; - /** - * Return the width of the item left from its start date - * @return {number} - */ - BoxItem.prototype.getWidthLeft = function () { - return this.width / 2; + return line; }; /** - * Return the width of the item right from its start date - * @return {number} + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private */ - BoxItem.prototype.getWidthRight = function () { - return this.width / 2; - }; - - module.exports = BoxItem; + TimeAxis.prototype._calculateCharSize = function () { + // Note: We calculate char size with every redraw. Size may change, for + // example when any of the timelines parents had display:none for example. -/***/ }, -/* 140 */ -/***/ function(module, exports, __webpack_require__) { + // determine the char width and height on the minor axis + if (!this.dom.measureCharMinor) { + this.dom.measureCharMinor = document.createElement('DIV'); + this.dom.measureCharMinor.className = 'vis-text vis-minor vis-measure'; + this.dom.measureCharMinor.style.position = 'absolute'; - 'use strict'; + 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; - var Item = __webpack_require__(137); + // determine the char width and height on the major axis + if (!this.dom.measureCharMajor) { + this.dom.measureCharMajor = document.createElement('DIV'); + this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure'; + this.dom.measureCharMajor.style.position = 'absolute'; - /** - * @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, - marginRight: 0 - } - }; - this.options = options; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } + 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; + }; - Item.call(this, data, conversion, options); - } + var warnedForOverflow = false; - PointItem.prototype = new Item(null, null, null); + module.exports = TimeAxis; - /** - * Check whether this item is visible inside given range - * @param {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - PointItem.prototype.isVisible = function (range) { - // determine visibility - var widthInMs = this.width * range.getMillisecondsPerPixel(); +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { - return this.data.start.getTime() + widthInMs > range.start && this.data.start < range.end; - }; + 'use strict'; + + var keycharm = __webpack_require__(115); + var Emitter = __webpack_require__(99); + var Hammer = __webpack_require__(112); + var util = __webpack_require__(1); /** - * Repaint the item + * Turn an element into an clickToUse element. + * When not active, the element has a transparent overlay. When the overlay is + * clicked, the mode is changed to active. + * When active, the element is displayed with a blue border around it, and + * the interactive contents of the element can be used. When clicked outside + * the element, the elements mode is changed to inactive. + * @param {Element} container + * @constructor */ - PointItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + function Activator(container) { + this.active = false; - // background box - dom.point = document.createElement('div'); - // className is updated in redraw() + this.dom = { + container: container + }; - // contents box, right from the dot - dom.content = document.createElement('div'); - dom.content.className = 'vis-item-content'; - dom.point.appendChild(dom.content); + this.dom.overlay = document.createElement('div'); + this.dom.overlay.className = 'vis-overlay'; - // dot at start - dom.dot = document.createElement('div'); - dom.point.appendChild(dom.dot); + this.dom.container.appendChild(this.dom.overlay); - // attach this item as attribute - dom.point['timeline-item'] = this; + this.hammer = Hammer(this.dom.overlay); + this.hammer.on('tap', this._onTapOverlay.bind(this)); - this.dirty = true; - } + // block all touch events (except tap) + var me = this; + var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend']; + events.forEach(function (event) { + me.hammer.on(event, function (event) { + event.stopPropagation(); + }); + }); - // 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); + // attach a click event to the window, in order to deactivate when clicking outside the timeline + if (document && document.body) { + this.onClick = function (event) { + if (!_hasParent(event.target, container)) { + me.deactivate(); + } + }; + document.body.addEventListener('click', this.onClick); } - 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._updateDataAttributes(this.dom.point); - this._updateStyle(this.dom.point); - - var editable = this.editable.updateTime || this.editable.updateGroup; - // 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 - if (this.options.rtl) { - dom.content.style.marginRight = 2 * this.props.dot.width + 'px'; - } else { - dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; - } - //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - // recalculate size - this.width = dom.point.offsetWidth; - this.height = dom.point.offsetHeight; + if (this.keycharm !== undefined) { + this.keycharm.destroy(); + } + this.keycharm = keycharm(); - // reposition the dot - dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px'; - if (this.options.rtl) { - dom.dot.style.right = this.props.dot.width / 2 + 'px'; - } else { - dom.dot.style.left = this.props.dot.width / 2 + 'px'; - } + // keycharm listener only bounded when active) + this.escListener = this.deactivate.bind(this); + } - this.dirty = false; - } + // turn into an event emitter + Emitter(Activator.prototype); - this._repaintOnItemUpdateTimeTooltip(dom.point); - this._repaintDragCenter(); - this._repaintDeleteButton(dom.point); - }; + // The currently active activator + Activator.current = null; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Destroy the activator. Cleans up all created DOM and event listeners */ - PointItem.prototype.show = function () { - if (!this.displayed) { - this.redraw(); - } - }; + Activator.prototype.destroy = function () { + this.deactivate(); - /** - * 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); - } + // remove dom + this.dom.overlay.parentNode.removeChild(this.dom.overlay); - this.displayed = false; + // remove global event listener + if (this.onClick) { + document.body.removeEventListener('click', this.onClick); } + + // cleanup hammer instances + this.hammer.destroy(); + this.hammer = null; + // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) }; /** - * Reposition the item horizontally - * @Override + * Activate the element + * Overlay is hidden, element is decorated with a blue shadow border */ - PointItem.prototype.repositionX = function () { - var start = this.conversion.toScreen(this.data.start); + Activator.prototype.activate = function () { + // we allow only one active activator at a time + if (Activator.current) { + Activator.current.deactivate(); + } + Activator.current = this; - if (this.options.rtl) { - this.right = start - this.props.dot.width; + this.active = true; + this.dom.overlay.style.display = 'none'; + util.addClassName(this.dom.container, 'vis-active'); - // reposition point - this.dom.point.style.right = this.right + 'px'; - } else { - this.left = start - this.props.dot.width; + this.emit('change'); + this.emit('activate'); - // reposition point - this.dom.point.style.left = this.left + 'px'; - } + // ugly hack: bind ESC after emitting the events, as the Network rebinds all + // keyboard events on a 'change' event + this.keycharm.bind('esc', this.escListener); }; /** - * Reposition the item vertically - * @Override + * Deactivate the element + * Overlay is displayed on top of the element */ - 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'; - } + Activator.prototype.deactivate = function () { + this.active = false; + this.dom.overlay.style.display = ''; + util.removeClassName(this.dom.container, 'vis-active'); + this.keycharm.unbind('esc', this.escListener); + + this.emit('change'); + this.emit('deactivate'); }; /** - * Return the width of the item left from its start date - * @return {number} + * Handle a tap event: activate the container + * @param event + * @private */ - PointItem.prototype.getWidthLeft = function () { - return this.props.dot.width; + Activator.prototype._onTapOverlay = function (event) { + // activate the container + this.activate(); + event.stopPropagation(); }; /** - * Return the width of the item right from its start date - * @return {number} + * Test whether the element has the requested parent element somewhere in + * its chain of parent nodes. + * @param {HTMLElement} element + * @param {HTMLElement} parent + * @returns {boolean} Returns true when the parent is found somewhere in the + * chain of parent nodes. + * @private */ - PointItem.prototype.getWidthRight = function () { - return this.props.dot.width; - }; + function _hasParent(element, parent) { + while (element) { + if (element === parent) { + return true; + } + element = element.parentNode; + } + return false; + } - module.exports = PointItem; + module.exports = Activator; -/***/ }, +/***/ }), /* 141 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; var Hammer = __webpack_require__(112); - var Item = __webpack_require__(137); - var BackgroundGroup = __webpack_require__(138); - var RangeItem = __webpack_require__(136); + var util = __webpack_require__(1); + var Component = __webpack_require__(120); + var moment = __webpack_require__(82); + var locales = __webpack_require__(142); /** - * @constructor BackgroundItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options + * A custom time bar + * @param {{range: Range, dom: Object}} body + * @param {Object} [options] Available parameters: + * {number | string} id + * {string} locales + * {string} locale + * @constructor CustomTime + * @extends Component */ - // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation - function BackgroundItem(data, conversion, options) { - this.props = { - content: { - width: 0 - } + + function CustomTime(body, options) { + this.body = body; + + // default options + this.defaultOptions = { + moment: moment, + locales: locales, + locale: 'en', + id: undefined, + title: undefined }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true + this.options = util.extend({}, this.defaultOptions); - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); - } + if (options && options.time) { + this.customTime = options.time; + } else { + this.customTime = new Date(); } - Item.call(this, data, conversion, options); - } + this.eventParams = {}; // stores state parameters while dragging the bar - BackgroundItem.prototype = new Item(null, null, null); + this.setOptions(options); - BackgroundItem.prototype.baseClassName = 'vis-item vis-background'; - BackgroundItem.prototype.stack = false; + // create the DOM + this._create(); + } + + CustomTime.prototype = new Component(); /** - * 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 + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {number | string} id + * {string} locales + * {string} locale */ - BackgroundItem.prototype.isVisible = function (range) { - // determine visibility - return this.data.start < range.end && this.data.end > range.start; + CustomTime.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options); + } }; /** - * Repaint the item + * Create the DOM for the custom time + * @private */ - BackgroundItem.prototype.redraw = function () { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + CustomTime.prototype._create = function () { + var bar = document.createElement('div'); + bar['custom-time'] = this; + bar.className = 'vis-custom-time ' + (this.options.id || ''); + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; + this.bar = bar; - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() + var drag = document.createElement('div'); + drag.style.position = 'relative'; + drag.style.top = '0px'; + drag.style.left = '-10px'; + drag.style.height = '100%'; + drag.style.width = '20px'; - // frame box (to prevent the item contents from overflowing - dom.frame = document.createElement('div'); - dom.frame.className = 'vis-item-overflow'; - dom.box.appendChild(dom.frame); + function onMouseWheel(e) { + this.body.range._onMouseWheel(e); + } - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'vis-item-content'; - dom.frame.appendChild(dom.content); + if (drag.addEventListener) { + // IE9, Chrome, Safari, Opera + drag.addEventListener("mousewheel", onMouseWheel.bind(this), false); + // Firefox + drag.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); + } else { + // IE 6/7/8 + drag.attachEvent("onmousewheel", onMouseWheel.bind(this)); + } - // Note: we do NOT attach this item as attribute to the DOM, - // such that background items cannot be selected - //dom.box['timeline-item'] = this; + bar.appendChild(drag); + // attach event listeners + this.hammer = new Hammer(drag); + this.hammer.on('panstart', this._onDragStart.bind(this)); + this.hammer.on('panmove', this._onDrag.bind(this)); + this.hammer.on('panend', this._onDragEnd.bind(this)); + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); + }; - this.dirty = true; - } + /** + * Destroy the CustomTime bar + */ + CustomTime.prototype.destroy = function () { + this.hide(); - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var background = this.parent.dom.background; - if (!background) { - throw new Error('Cannot redraw item: parent has no background container element'); + this.hammer.destroy(); + this.hammer = null; + + this.body = null; + }; + + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CustomTime.prototype.redraw = function () { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } - background.appendChild(dom.box); + parent.appendChild(this.bar); } - 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._updateDataAttributes(this.dom.content); - this._updateStyle(this.dom.box); + var x = this.body.util.toScreen(this.customTime); - // update class - var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : ''); - dom.box.className = this.baseClassName + className; + var locale = this.options.locales[this.options.locale]; + if (!locale) { + if (!this.warned) { + console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); + this.warned = true; + } + locale = this.options.locales['en']; // fall back on english when not available + } - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + var title = this.options.title; + // To hide the title completely use empty string ''. + if (title === undefined) { + title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); + } else if (typeof title === "function") { + title = title.call(this.customTime); + } - // recalculate size - this.props.content.width = this.dom.content.offsetWidth; - this.height = 0; // set height zero, so this item will be ignored when stacking items + this.bar.style.left = x + 'px'; + this.bar.title = title; - this.dirty = false; + return false; + }; + + /** + * Remove the CustomTime from the DOM + */ + CustomTime.prototype.hide = function () { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Set custom time. + * @param {Date | number | string} time */ - BackgroundItem.prototype.show = RangeItem.prototype.show; + CustomTime.prototype.setCustomTime = function (time) { + this.customTime = util.convert(time, 'Date'); + this.redraw(); + }; /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed + * Retrieve the current custom time. + * @return {Date} customTime */ - BackgroundItem.prototype.hide = RangeItem.prototype.hide; + CustomTime.prototype.getCustomTime = function () { + return new Date(this.customTime.valueOf()); + }; /** - * Reposition the item horizontally - * @Override + * Set custom title. + * @param {Date | number | string} title + */ + CustomTime.prototype.setCustomTitle = function (title) { + this.options.title = title; + }; + + /** + * Start moving horizontally + * @param {Event} event + * @private */ - BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; + CustomTime.prototype._onDragStart = function (event) { + this.eventParams.dragging = true; + this.eventParams.customTime = this.customTime; + + event.stopPropagation(); + }; /** - * Reposition the item vertically - * @Override + * Perform moving operating. + * @param {Event} event + * @private */ - BackgroundItem.prototype.repositionY = function (margin) { - var height; - var orientation = this.options.orientation.item; + CustomTime.prototype._onDrag = function (event) { + if (!this.eventParams.dragging) return; - // special positioning for subgroups - if (this.data.subgroup !== undefined) { - // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset + var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX; + var time = this.body.util.toTime(x); - var itemSubgroup = this.data.subgroup; - var subgroups = this.parent.subgroups; - var subgroupIndex = subgroups[itemSubgroup].index; + this.setCustomTime(time); - this.dom.box.style.height = this.parent.subgroups[itemSubgroup].height + 'px'; + // fire a timechange event + this.body.emitter.emit('timechange', { + id: this.options.id, + time: new Date(this.customTime.valueOf()), + event: event + }); - if (orientation == 'top') { - this.dom.box.style.top = this.parent.top + this.parent.subgroups[itemSubgroup].top + 'px'; - } else { - this.dom.box.style.top = this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height + 'px'; + event.stopPropagation(); + }; + + /** + * Stop moving operating. + * @param {Event} event + * @private + */ + CustomTime.prototype._onDragEnd = function (event) { + if (!this.eventParams.dragging) return; + + // fire a timechanged event + this.body.emitter.emit('timechanged', { + id: this.options.id, + time: new Date(this.customTime.valueOf()), + event: event + }); + + event.stopPropagation(); + }; + + /** + * Find a custom time from an event target: + * searches for the attribute 'custom-time' in the event target's element tree + * @param {Event} event + * @return {CustomTime | null} customTime + */ + CustomTime.customTimeFromTarget = function (event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('custom-time')) { + return target['custom-time']; } - this.dom.box.style.bottom = ''; + target = target.parentNode; } - // and in the case of no subgroups: - else { - // we want backgrounds with groups to only show in groups. - if (this.parent instanceof BackgroundGroup) { - // if the item is not in a group: - height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height); - this.dom.box.style.bottom = orientation == 'bottom' ? '0' : ''; - this.dom.box.style.top = orientation == 'top' ? '0' : ''; - } else { - height = this.parent.height; - // same alignment for items when orientation is top or bottom - this.dom.box.style.top = this.parent.top + 'px'; - this.dom.box.style.bottom = ''; - } - } - this.dom.box.style.height = height + 'px'; + + return null; }; - module.exports = BackgroundItem; + module.exports = CustomTime; -/***/ }, +/***/ }), /* 142 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports) { 'use strict'; - var _typeof2 = __webpack_require__(62); + // English + exports['en'] = { + current: 'current', + time: 'time' + }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; - var _typeof3 = _interopRequireDefault(_typeof2); + // Italiano + exports['it'] = { + current: 'attuale', + time: 'tempo' + }; + exports['it_IT'] = exports['it']; + exports['it_CH'] = exports['it']; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // Dutch + exports['nl'] = { + current: 'huidige', + time: 'tijd' + }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; + + // German + exports['de'] = { + current: 'Aktuelle', + time: 'Zeit' + }; + exports['de_DE'] = exports['de']; + + // French + exports['fr'] = { + current: 'actuel', + time: 'heure' + }; + exports['fr_FR'] = exports['fr']; + exports['fr_CA'] = exports['fr']; + exports['fr_BE'] = exports['fr']; + + // Espanol + exports['es'] = { + current: 'corriente', + time: 'hora' + }; + exports['es_ES'] = exports['es']; + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; var util = __webpack_require__(1); - var Component = __webpack_require__(128); - var TimeStep = __webpack_require__(133); - var DateUtil = __webpack_require__(129); + var Component = __webpack_require__(120); var moment = __webpack_require__(82); + var locales = __webpack_require__(142); /** - * A horizontal time axis - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See TimeAxis.setOptions for the available - * options. - * @constructor TimeAxis + * A current time bar + * @param {{range: Range, dom: Object, domProps: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCurrentTime] + * @constructor CurrentTime * @extends Component */ - function TimeAxis(body, options) { - this.dom = { - foreground: null, - lines: [], - majorTexts: [], - minorTexts: [], - redundant: { - lines: [], - majorTexts: [], - minorTexts: [] - } - }; - this.props = { - range: { - start: 0, - end: 0, - minimumStep: 0 - }, - lineTop: 0 - }; + function CurrentTime(body, options) { + this.body = body; + // default options this.defaultOptions = { - orientation: { - axis: 'bottom' - }, // axis orientation: 'top' or 'bottom' - showMinorLabels: true, - showMajorLabels: true, - maxMinorChars: 7, - format: TimeStep.FORMAT, + rtl: false, + showCurrentTime: true, + moment: moment, - timeAxis: null + locales: locales, + locale: 'en' }; this.options = util.extend({}, this.defaultOptions); + this.offset = 0; - this.body = body; - - // create the HTML DOM this._create(); this.setOptions(options); } - TimeAxis.prototype = new Component(); + CurrentTime.prototype = new Component(); /** - * Set options for the TimeAxis. - * Parameters will be merged in current options. - * @param {Object} options Available options: - * {string} [orientation.axis] - * {boolean} [showMinorLabels] - * {boolean} [showMajorLabels] + * Create the HTML DOM for the current time bar + * @private */ - TimeAxis.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showMinorLabels', 'showMajorLabels', 'maxMinorChars', 'hiddenDates', 'timeAxis', 'moment', 'rtl'], this.options, options); - - // deep copy the format options - util.selectiveDeepExtend(['format'], this.options, options); - - if ('orientation' in options) { - if (typeof options.orientation === 'string') { - this.options.orientation.axis = options.orientation; - } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'axis' in options.orientation) { - this.options.orientation.axis = options.orientation.axis; - } - } + CurrentTime.prototype._create = function () { + var bar = document.createElement('div'); + bar.className = 'vis-current-time'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; - // apply locale to moment.js - // TODO: not so nice, this is applied globally to moment.js - if ('locale' in options) { - if (typeof moment.locale === 'function') { - // moment.js 2.8.1+ - moment.locale(options.locale); - } else { - moment.lang(options.locale); - } - } - } + this.bar = bar; }; /** - * Create the HTML DOM for the TimeAxis + * Destroy the CurrentTime bar */ - TimeAxis.prototype._create = function () { - this.dom.foreground = document.createElement('div'); - this.dom.background = document.createElement('div'); + CurrentTime.prototype.destroy = function () { + this.options.showCurrentTime = false; + this.redraw(); // will remove the bar from the DOM and stop refreshing - this.dom.foreground.className = 'vis-time-axis vis-foreground'; - this.dom.background.className = 'vis-time-axis vis-background'; + this.body = null; }; /** - * Destroy the TimeAxis + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCurrentTime] */ - TimeAxis.prototype.destroy = function () { - // remove from DOM - if (this.dom.foreground.parentNode) { - this.dom.foreground.parentNode.removeChild(this.dom.foreground); - } - if (this.dom.background.parentNode) { - this.dom.background.parentNode.removeChild(this.dom.background); + CurrentTime.prototype.setOptions = function (options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['rtl', 'showCurrentTime', 'moment', 'locale', 'locales'], this.options, options); } - - this.body = null; }; /** * Repaint the component * @return {boolean} Returns true if the component is resized */ - TimeAxis.prototype.redraw = function () { - var props = this.props; - var foreground = this.dom.foreground; - var background = this.dom.background; + CurrentTime.prototype.redraw = function () { + if (this.options.showCurrentTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); - // determine the correct parent DOM element (depending on option orientation) - var parent = this.options.orientation.axis == 'top' ? this.body.dom.top : this.body.dom.bottom; - var parentChanged = foreground.parentNode !== parent; + this.start(); + } - // calculate character width and height - this._calculateCharSize(); + var now = this.options.moment(new Date().valueOf() + this.offset); + var x = this.body.util.toScreen(now); - // TODO: recalculate sizes only needed when parent is resized or options is changed - var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none'; - var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none'; - - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - props.height = props.minorLabelHeight + props.majorLabelHeight; - props.width = foreground.offsetWidth; - - props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); - props.minorLineWidth = 1; // TODO: really calculate width - props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; - props.majorLineWidth = 1; // TODO: really calculate width - - // take foreground and background offline while updating (is almost twice as fast) - var foregroundNextSibling = foreground.nextSibling; - var backgroundNextSibling = background.nextSibling; - foreground.parentNode && foreground.parentNode.removeChild(foreground); - background.parentNode && background.parentNode.removeChild(background); - - foreground.style.height = this.props.height + 'px'; - - this._repaintLabels(); - - // put DOM online again (at the same place) - if (foregroundNextSibling) { - parent.insertBefore(foreground, foregroundNextSibling); - } else { - parent.appendChild(foreground); - } - if (backgroundNextSibling) { - this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); - } else { - this.body.dom.backgroundVertical.appendChild(background); - } - return this._isResized() || parentChanged; - }; - - /** - * Repaint major and minor text labels and vertical grid lines - * @private - */ - TimeAxis.prototype._repaintLabels = function () { - var orientation = this.options.orientation.axis; - - // calculate range and step (step such that we have space for 7 characters per label) - var start = util.convert(this.body.range.start, 'Number'); - var end = util.convert(this.body.range.end, 'Number'); - var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf(); - var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize); - minimumStep -= this.body.util.toTime(0).valueOf(); - - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); - step.setMoment(this.options.moment); - if (this.options.format) { - step.setFormat(this.options.format); - } - if (this.options.timeAxis) { - step.setScale(this.options.timeAxis); - } - this.step = step; - - // Move all DOM elements to a "redundant" list, where they - // can be picked for re-use, and clear the lists with lines and texts. - // At the end of the function _repaintLabels, left over elements will be cleaned up - var dom = this.dom; - dom.redundant.lines = dom.lines; - dom.redundant.majorTexts = dom.majorTexts; - dom.redundant.minorTexts = dom.minorTexts; - dom.lines = []; - dom.majorTexts = []; - dom.minorTexts = []; - - var current; - var next; - var x; - var xNext; - var isMajor, nextIsMajor; - var width = 0, - prevWidth; - var line; - var labelMinor; - var xFirstMajorLabel = undefined; - var count = 0; - var MAX = 1000; - var className; - - step.start(); - next = step.getCurrent(); - xNext = this.body.util.toScreen(next); - while (step.hasNext() && count < MAX) { - count++; - - isMajor = step.isMajor(); - className = step.getClassName(); - labelMinor = step.getLabelMinor(); - - current = next; - x = xNext; - - step.next(); - next = step.getCurrent(); - nextIsMajor = step.isMajor(); - xNext = this.body.util.toScreen(next); - - prevWidth = width; - width = xNext - x; - var showMinorGrid = width >= prevWidth * 0.4; // prevent displaying of the 31th of the month on a scale of 5 days - - if (this.options.showMinorLabels && showMinorGrid) { - var label = this._repaintMinorText(x, labelMinor, orientation, className); - label.style.width = width + 'px'; // set width to prevent overflow + var locale = this.options.locales[this.options.locale]; + if (!locale) { + if (!this.warned) { + console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); + this.warned = true; + } + locale = this.options.locales['en']; // fall back on english when not available } + var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); - if (isMajor && this.options.showMajorLabels) { - if (x > 0) { - if (xFirstMajorLabel == undefined) { - xFirstMajorLabel = x; - } - label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className); - } - line = this._repaintMajorLine(x, width, orientation, className); + if (this.options.rtl) { + this.bar.style.right = x + 'px'; } else { - // minor line - if (showMinorGrid) { - line = this._repaintMinorLine(x, width, orientation, className); - } else { - if (line) { - // adjust the width of the previous grid - line.style.width = parseInt(line.style.width) + width + 'px'; - } - } + this.bar.style.left = x + 'px'; } - } - - if (count === MAX && !warnedForOverflow) { - console.warn('Something is wrong with the Timeline scale. Limited drawing of grid lines to ' + MAX + ' lines.'); - warnedForOverflow = true; - } - - // create a major label on the left when needed - if (this.options.showMajorLabels) { - var leftTime = this.body.util.toTime(0), - leftText = step.getLabelMajor(leftTime), - widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - - if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { - this._repaintMajorText(0, leftText, orientation, className); + this.bar.title = title; + } else { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } + this.stop(); } - // Cleanup leftover DOM elements from the redundant list - util.forEach(this.dom.redundant, function (arr) { - while (arr.length) { - var elem = arr.pop(); - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } - }); + return false; }; /** - * Create a minor label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the HTML element of the created label - * @private + * Start auto refreshing the current time bar */ - TimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) { - // reuse redundant label - var label = this.dom.redundant.minorTexts.shift(); - - if (!label) { - // create new label - var content = document.createTextNode(''); - label = document.createElement('div'); - label.appendChild(content); - this.dom.foreground.appendChild(label); - } - this.dom.minorTexts.push(label); - label.innerHTML = text; - - label.style.top = orientation == 'top' ? this.props.majorLabelHeight + 'px' : '0'; + CurrentTime.prototype.start = function () { + var me = this; - if (this.options.rtl) { - label.style.left = ""; - label.style.right = x + 'px'; - } else { - label.style.left = x + 'px'; - }; - label.className = 'vis-text vis-minor ' + className; - //label.title = title; // TODO: this is a heavy operation + function update() { + me.stop(); - return label; - }; + // determine interval to refresh + var scale = me.body.range.conversion(me.body.domProps.center.width).scale; + var interval = 1 / scale / 10; + if (interval < 30) interval = 30; + if (interval > 1000) interval = 1000; - /** - * Create a Major label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the HTML element of the created label - * @private - */ - TimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) { - // reuse redundant label - var label = this.dom.redundant.majorTexts.shift(); + me.redraw(); + me.body.emitter.emit('currentTimeTick'); - if (!label) { - // create label - var content = document.createElement('div'); - label = document.createElement('div'); - label.appendChild(content); - this.dom.foreground.appendChild(label); + // start a renderTimer to adjust for the new time + me.currentTimeTimer = setTimeout(update, interval); } - label.childNodes[0].innerHTML = text; - label.className = 'vis-text vis-major ' + className; - //label.title = title; // TODO: this is a heavy operation - - label.style.top = orientation == 'top' ? '0' : this.props.minorLabelHeight + 'px'; - if (this.options.rtl) { - label.style.left = ""; - label.style.right = x + 'px'; - } else { - label.style.left = x + 'px'; - }; - - this.dom.majorTexts.push(label); - return label; + update(); }; /** - * Create a minor line for the axis at position x - * @param {Number} x - * @param {Number} width - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the created line - * @private + * Stop auto refreshing the current time bar */ - TimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) { - // reuse redundant line - var line = this.dom.redundant.lines.shift(); - if (!line) { - // create vertical line - line = document.createElement('div'); - this.dom.background.appendChild(line); - } - this.dom.lines.push(line); - - var props = this.props; - if (orientation == 'top') { - line.style.top = props.majorLabelHeight + 'px'; - } else { - line.style.top = this.body.domProps.top.height + 'px'; + CurrentTime.prototype.stop = function () { + if (this.currentTimeTimer !== undefined) { + clearTimeout(this.currentTimeTimer); + delete this.currentTimeTimer; } - line.style.height = props.minorLineHeight + 'px'; - if (this.options.rtl) { - line.style.left = ""; - line.style.right = x - props.minorLineWidth / 2 + 'px'; - line.className = 'vis-grid vis-vertical-rtl vis-minor ' + className; - } else { - line.style.left = x - props.minorLineWidth / 2 + 'px'; - line.className = 'vis-grid vis-vertical vis-minor ' + className; - }; - line.style.width = width + 'px'; - - return line; }; /** - * Create a Major line for the axis at position x - * @param {Number} x - * @param {Number} width - * @param {String} orientation "top" or "bottom" (default) - * @param {String} className - * @return {Element} Returns the created line - * @private + * Set a current time. This can be used for example to ensure that a client's + * time is synchronized with a shared server time. + * @param {Date | String | Number} time A Date, unix timestamp, or + * ISO date string. */ - TimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) { - // reuse redundant line - var line = this.dom.redundant.lines.shift(); - if (!line) { - // create vertical line - line = document.createElement('div'); - this.dom.background.appendChild(line); - } - this.dom.lines.push(line); - - var props = this.props; - if (orientation == 'top') { - line.style.top = '0'; - } else { - line.style.top = this.body.domProps.top.height + 'px'; - } - - if (this.options.rtl) { - line.style.left = ""; - line.style.right = x - props.majorLineWidth / 2 + 'px'; - line.className = 'vis-grid vis-vertical-rtl vis-major ' + className; - } else { - line.style.left = x - props.majorLineWidth / 2 + 'px'; - line.className = 'vis-grid vis-vertical vis-major ' + className; - } - - line.style.height = props.majorLineHeight + 'px'; - line.style.width = width + 'px'; - - return line; + CurrentTime.prototype.setCurrentTime = function (time) { + var t = util.convert(time, 'Date').valueOf(); + var now = new Date().valueOf(); + this.offset = t - now; + this.redraw(); }; /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private + * Get the current time. + * @return {Date} Returns the current time. */ - TimeAxis.prototype._calculateCharSize = function () { - // Note: We calculate char size with every redraw. Size may change, for - // example when any of the timelines parents had display:none for example. - - // determine the char width and height on the minor axis - if (!this.dom.measureCharMinor) { - this.dom.measureCharMinor = document.createElement('DIV'); - this.dom.measureCharMinor.className = 'vis-text vis-minor vis-measure'; - this.dom.measureCharMinor.style.position = 'absolute'; - - this.dom.measureCharMinor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMinor); - } - this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight; - this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth; - - // determine the char width and height on the major axis - if (!this.dom.measureCharMajor) { - this.dom.measureCharMajor = document.createElement('DIV'); - this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure'; - this.dom.measureCharMajor.style.position = 'absolute'; - - this.dom.measureCharMajor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMajor); - } - this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight; - this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth; + CurrentTime.prototype.getCurrentTime = function () { + return new Date(new Date().valueOf() + this.offset); }; - var warnedForOverflow = false; - - module.exports = TimeAxis; + module.exports = CurrentTime; -/***/ }, -/* 143 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - var keycharm = __webpack_require__(115); - var Emitter = __webpack_require__(99); - var Hammer = __webpack_require__(112); - var util = __webpack_require__(1); + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.printStyle = undefined; - /** - * Turn an element into an clickToUse element. - * When not active, the element has a transparent overlay. When the overlay is - * clicked, the mode is changed to active. - * When active, the element is displayed with a blue border around it, and - * the interactive contents of the element can be used. When clicked outside - * the element, the elements mode is changed to inactive. - * @param {Element} container - * @constructor - */ - function Activator(container) { - this.active = false; + var _stringify = __webpack_require__(90); - this.dom = { - container: container - }; + var _stringify2 = _interopRequireDefault(_stringify); - this.dom.overlay = document.createElement('div'); - this.dom.overlay.className = 'vis-overlay'; + var _typeof2 = __webpack_require__(62); - this.dom.container.appendChild(this.dom.overlay); + var _typeof3 = _interopRequireDefault(_typeof2); - this.hammer = Hammer(this.dom.overlay); - this.hammer.on('tap', this._onTapOverlay.bind(this)); + var _keys = __webpack_require__(58); - // block all touch events (except tap) - var me = this; - var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend']; - events.forEach(function (event) { - me.hammer.on(event, function (event) { - event.stopPropagation(); - }); - }); + var _keys2 = _interopRequireDefault(_keys); - // attach a click event to the window, in order to deactivate when clicking outside the timeline - if (document && document.body) { - this.onClick = function (event) { - if (!_hasParent(event.target, container)) { - me.deactivate(); - } - }; - document.body.addEventListener('click', this.onClick); - } + var _classCallCheck2 = __webpack_require__(134); - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } - this.keycharm = keycharm(); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // keycharm listener only bounded when active) - this.escListener = this.deactivate.bind(this); - } + var _createClass2 = __webpack_require__(135); - // turn into an event emitter - Emitter(Activator.prototype); + var _createClass3 = _interopRequireDefault(_createClass2); - // The currently active activator - Activator.current = null; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var util = __webpack_require__(1); + + var errorFound = false; + var allOptions = void 0; + var printStyle = 'background: #FFeeee; color: #dd0000'; /** - * Destroy the activator. Cleans up all created DOM and event listeners + * Used to validate options. */ - Activator.prototype.destroy = function () { - this.deactivate(); - - // remove dom - this.dom.overlay.parentNode.removeChild(this.dom.overlay); - // remove global event listener - if (this.onClick) { - document.body.removeEventListener('click', this.onClick); + var Validator = function () { + function Validator() { + (0, _classCallCheck3['default'])(this, Validator); } - // cleanup hammer instances - this.hammer.destroy(); - this.hammer = null; - // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) - }; - - /** - * Activate the element - * Overlay is hidden, element is decorated with a blue shadow border - */ - Activator.prototype.activate = function () { - // we allow only one active activator at a time - if (Activator.current) { - Activator.current.deactivate(); - } - Activator.current = this; + /** + * Main function to be called + * @param options + * @param subObject + * @returns {boolean} + */ - this.active = true; - this.dom.overlay.style.display = 'none'; - util.addClassName(this.dom.container, 'vis-active'); - this.emit('change'); - this.emit('activate'); + (0, _createClass3['default'])(Validator, null, [{ + key: 'validate', + value: function validate(options, referenceOptions, subObject) { + errorFound = false; + allOptions = referenceOptions; + var usedOptions = referenceOptions; + if (subObject !== undefined) { + usedOptions = referenceOptions[subObject]; + } + Validator.parse(options, usedOptions, []); + return errorFound; + } - // ugly hack: bind ESC after emitting the events, as the Network rebinds all - // keyboard events on a 'change' event - this.keycharm.bind('esc', this.escListener); - }; + /** + * Will traverse an object recursively and check every value + * @param options + * @param referenceOptions + * @param path + */ - /** - * Deactivate the element - * Overlay is displayed on top of the element - */ - Activator.prototype.deactivate = function () { - this.active = false; - this.dom.overlay.style.display = ''; - util.removeClassName(this.dom.container, 'vis-active'); - this.keycharm.unbind('esc', this.escListener); - - this.emit('change'); - this.emit('deactivate'); - }; - - /** - * Handle a tap event: activate the container - * @param event - * @private - */ - Activator.prototype._onTapOverlay = function (event) { - // activate the container - this.activate(); - event.stopPropagation(); - }; - - /** - * Test whether the element has the requested parent element somewhere in - * its chain of parent nodes. - * @param {HTMLElement} element - * @param {HTMLElement} parent - * @returns {boolean} Returns true when the parent is found somewhere in the - * chain of parent nodes. - * @private - */ - function _hasParent(element, parent) { - while (element) { - if (element === parent) { - return true; + }, { + key: 'parse', + value: function parse(options, referenceOptions, path) { + for (var option in options) { + if (options.hasOwnProperty(option)) { + Validator.check(option, options, referenceOptions, path); + } + } } - element = element.parentNode; - } - return false; - } - - module.exports = Activator; - -/***/ }, -/* 144 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var Hammer = __webpack_require__(112); - var util = __webpack_require__(1); - var Component = __webpack_require__(128); - var moment = __webpack_require__(82); - var locales = __webpack_require__(145); - - /** - * A custom time bar - * @param {{range: Range, dom: Object}} body - * @param {Object} [options] Available parameters: - * {number | string} id - * {string} locales - * {string} locale - * @constructor CustomTime - * @extends Component - */ - - function CustomTime(body, options) { - this.body = body; - - // default options - this.defaultOptions = { - moment: moment, - locales: locales, - locale: 'en', - id: undefined, - title: undefined - }; - this.options = util.extend({}, this.defaultOptions); - - if (options && options.time) { - this.customTime = options.time; - } else { - this.customTime = new Date(); - } - - this.eventParams = {}; // stores state parameters while dragging the bar - - this.setOptions(options); - - // create the DOM - this._create(); - } - CustomTime.prototype = new Component(); + /** + * Check every value. If the value is an object, call the parse function on that object. + * @param option + * @param options + * @param referenceOptions + * @param path + */ - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {number | string} id - * {string} locales - * {string} locale - */ - CustomTime.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options); - } - }; + }, { + key: 'check', + value: function check(option, options, referenceOptions, path) { + if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) { + Validator.getSuggestion(option, referenceOptions, path); + } else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) { + // __any__ is a wildcard. Any value is accepted and will be further analysed by reference. + if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) { + // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object. + Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path); + } else { + Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path); + } + } else { + // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field. + if (referenceOptions[option].__type__ !== undefined) { + // if this should be an object, we check if the correct type has been supplied to account for shorthand options. + Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path); + } else { + Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path); + } + } + } - /** - * Create the DOM for the custom time - * @private - */ - CustomTime.prototype._create = function () { - var bar = document.createElement('div'); - bar['custom-time'] = this; - bar.className = 'vis-custom-time ' + (this.options.id || ''); - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; + /** + * + * @param {String} option | the option property + * @param {Object} options | The supplied options object + * @param {Object} referenceOptions | The reference options containing all options and their allowed formats + * @param {String} referenceOption | Usually this is the same as option, except when handling an __any__ tag. + * @param {String} refOptionType | This is the type object from the reference options + * @param {Array} path | where in the object is the option + */ - var drag = document.createElement('div'); - drag.style.position = 'relative'; - drag.style.top = '0px'; - drag.style.left = '-10px'; - drag.style.height = '100%'; - drag.style.width = '20px'; + }, { + key: 'checkFields', + value: function checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) { + var optionType = Validator.getType(options[option]); + var refOptionType = refOptionObj[optionType]; + if (refOptionType !== undefined) { + // if the type is correct, we check if it is supposed to be one of a few select values + if (Validator.getType(refOptionType) === 'array') { + if (refOptionType.indexOf(options[option]) === -1) { + console.log('%cInvalid option detected in "' + option + '".' + ' Allowed values are:' + Validator.print(refOptionType) + ' not "' + options[option] + '". ' + Validator.printLocation(path, option), printStyle); + errorFound = true; + } else if (optionType === 'object' && referenceOption !== "__any__") { + path = util.copyAndExtendArray(path, option); + Validator.parse(options[option], referenceOptions[referenceOption], path); + } + } else if (optionType === 'object' && referenceOption !== "__any__") { + path = util.copyAndExtendArray(path, option); + Validator.parse(options[option], referenceOptions[referenceOption], path); + } + } else if (refOptionObj['any'] === undefined) { + // type of the field is incorrect and the field cannot be any + console.log('%cInvalid type received for "' + option + '". Expected: ' + Validator.print((0, _keys2['default'])(refOptionObj)) + '. Received [' + optionType + '] "' + options[option] + '"' + Validator.printLocation(path, option), printStyle); + errorFound = true; + } + } + }, { + key: 'getType', + value: function getType(object) { + var type = typeof object === 'undefined' ? 'undefined' : (0, _typeof3['default'])(object); - function onMouseWheel(e) { - this.body.range._onMouseWheel(e); - } + if (type === 'object') { + if (object === null) { + return 'null'; + } + if (object instanceof Boolean) { + return 'boolean'; + } + if (object instanceof Number) { + return 'number'; + } + if (object instanceof String) { + return 'string'; + } + if (Array.isArray(object)) { + return 'array'; + } + if (object instanceof Date) { + return 'date'; + } + if (object.nodeType !== undefined) { + return 'dom'; + } + if (object._isAMomentObject === true) { + return 'moment'; + } + return 'object'; + } else if (type === 'number') { + return 'number'; + } else if (type === 'boolean') { + return 'boolean'; + } else if (type === 'string') { + return 'string'; + } else if (type === undefined) { + return 'undefined'; + } + return type; + } + }, { + key: 'getSuggestion', + value: function getSuggestion(option, options, path) { + var localSearch = Validator.findInOptions(option, options, path, false); + var globalSearch = Validator.findInOptions(option, allOptions, [], true); - if (drag.addEventListener) { - // IE9, Chrome, Safari, Opera - drag.addEventListener("mousewheel", onMouseWheel.bind(this), false); - // Firefox - drag.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); - } else { - // IE 6/7/8 - drag.attachEvent("onmousewheel", onMouseWheel.bind(this)); - } + var localSearchThreshold = 8; + var globalSearchThreshold = 4; - bar.appendChild(drag); - // attach event listeners - this.hammer = new Hammer(drag); - this.hammer.on('panstart', this._onDragStart.bind(this)); - this.hammer.on('panmove', this._onDrag.bind(this)); - this.hammer.on('panend', this._onDragEnd.bind(this)); - this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL }); - }; + if (localSearch.indexMatch !== undefined) { + console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was incomplete? Did you mean: "' + localSearch.indexMatch + '"?\n\n', printStyle); + } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) { + console.log('%cUnknown option detected: "' + option + '" in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, ''), printStyle); + } else if (localSearch.distance <= localSearchThreshold) { + console.log('%cUnknown option detected: "' + option + '". Did you mean "' + localSearch.closestMatch + '"?' + Validator.printLocation(localSearch.path, option), printStyle); + } else { + console.log('%cUnknown option detected: "' + option + '". Did you mean one of these: ' + Validator.print((0, _keys2['default'])(options)) + Validator.printLocation(path, option), printStyle); + } - /** - * Destroy the CustomTime bar - */ - CustomTime.prototype.destroy = function () { - this.hide(); + errorFound = true; + } - this.hammer.destroy(); - this.hammer = null; + /** + * traverse the options in search for a match. + * @param option + * @param options + * @param path + * @param recursive + * @returns {{closestMatch: string, path: Array, distance: number}} + */ - this.body = null; - }; + }, { + key: 'findInOptions', + value: function findInOptions(option, options, path) { + var recursive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CustomTime.prototype.redraw = function () { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); + var min = 1e9; + var closestMatch = ''; + var closestMatchPath = []; + var lowerCaseOption = option.toLowerCase(); + var indexMatch = undefined; + for (var op in options) { + var distance = void 0; + if (options[op].__type__ !== undefined && recursive === true) { + var result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path, op)); + if (min > result.distance) { + closestMatch = result.closestMatch; + closestMatchPath = result.path; + min = result.distance; + indexMatch = result.indexMatch; + } + } else { + if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) { + indexMatch = op; + } + distance = Validator.levenshteinDistance(option, op); + if (min > distance) { + closestMatch = op; + closestMatchPath = util.copyArray(path); + min = distance; + } + } + } + return { closestMatch: closestMatch, path: closestMatchPath, distance: min, indexMatch: indexMatch }; } - parent.appendChild(this.bar); - } - - var x = this.body.util.toScreen(this.customTime); + }, { + key: 'printLocation', + value: function printLocation(path, option) { + var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Problem value found at: \n'; - var locale = this.options.locales[this.options.locale]; - if (!locale) { - if (!this.warned) { - console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); - this.warned = true; + var str = '\n\n' + prefix + 'options = {\n'; + for (var i = 0; i < path.length; i++) { + for (var j = 0; j < i + 1; j++) { + str += ' '; + } + str += path[i] + ': {\n'; + } + for (var _j = 0; _j < path.length + 1; _j++) { + str += ' '; + } + str += option + '\n'; + for (var _i = 0; _i < path.length + 1; _i++) { + for (var _j2 = 0; _j2 < path.length - _i; _j2++) { + str += ' '; + } + str += '}\n'; + } + return str + '\n\n'; + } + }, { + key: 'print', + value: function print(options) { + return (0, _stringify2['default'])(options).replace(/(\")|(\[)|(\])|(,"__type__")/g, "").replace(/(\,)/g, ', '); } - locale = this.options.locales['en']; // fall back on english when not available - } - - var title = this.options.title; - // To hide the title completely use empty string ''. - if (title === undefined) { - title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); - } else if (typeof title === "function") { - title = title.call(this.customTime); - } - - this.bar.style.left = x + 'px'; - this.bar.title = title; - - return false; - }; - - /** - * Remove the CustomTime from the DOM - */ - CustomTime.prototype.hide = function () { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - }; - /** - * Set custom time. - * @param {Date | number | string} time - */ - CustomTime.prototype.setCustomTime = function (time) { - this.customTime = util.convert(time, 'Date'); - this.redraw(); - }; + // Compute the edit distance between the two given strings + // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript + /* + Copyright (c) 2011 Andrei Mackenzie + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - CustomTime.prototype.getCustomTime = function () { - return new Date(this.customTime.valueOf()); - }; + }, { + key: 'levenshteinDistance', + value: function levenshteinDistance(a, b) { + if (a.length === 0) return b.length; + if (b.length === 0) return a.length; - /** - * Set custom title. - * @param {Date | number | string} title - */ - CustomTime.prototype.setCustomTitle = function (title) { - this.options.title = title; - }; + var matrix = []; - /** - * Start moving horizontally - * @param {Event} event - * @private - */ - CustomTime.prototype._onDragStart = function (event) { - this.eventParams.dragging = true; - this.eventParams.customTime = this.customTime; + // increment along the first column of each row + var i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } - event.stopPropagation(); - }; + // increment each column in the first row + var j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } - /** - * Perform moving operating. - * @param {Event} event - * @private - */ - CustomTime.prototype._onDrag = function (event) { - if (!this.eventParams.dragging) return; + // Fill in the rest of the matrix + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) == a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution + Math.min(matrix[i][j - 1] + 1, // insertion + matrix[i - 1][j] + 1)); // deletion + } + } + } - var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX; - var time = this.body.util.toTime(x); + return matrix[b.length][a.length]; + } + }]); + return Validator; + }(); - this.setCustomTime(time); + exports['default'] = Validator; + exports.printStyle = printStyle; - // fire a timechange event - this.body.emitter.emit('timechange', { - id: this.options.id, - time: new Date(this.customTime.valueOf()), - event: util.elementsCensor(event) - }); +/***/ }), +/* 145 */ +/***/ (function(module, exports) { - event.stopPropagation(); - }; + 'use strict'; + Object.defineProperty(exports, "__esModule", { + value: true + }); /** - * Stop moving operating. - * @param {Event} event - * @private + * This object contains all possible options. It will check if the types are correct, if required if the option is one + * of the allowed values. + * + * __any__ means that the name of the property does not matter. + * __type__ is a required field for all objects and contains the allowed types of all objects */ - CustomTime.prototype._onDragEnd = function (event) { - if (!this.eventParams.dragging) return; - - // fire a timechanged event - this.body.emitter.emit('timechanged', { - id: this.options.id, - time: new Date(this.customTime.valueOf()), - event: util.elementsCensor(event) - }); - - event.stopPropagation(); - }; - - /** - * Find a custom time from an event target: - * searches for the attribute 'custom-time' in the event target's element tree - * @param {Event} event - * @return {CustomTime | null} customTime - */ - CustomTime.customTimeFromTarget = function (event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('custom-time')) { - return target['custom-time']; - } - target = target.parentNode; - } - - return null; - }; - - module.exports = CustomTime; - -/***/ }, -/* 145 */ -/***/ function(module, exports) { - - 'use strict'; - - // English - exports['en'] = { - current: 'current', - time: 'time' - }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - - // Italiano - exports['it'] = { - current: 'attuale', - time: 'tempo' - }; - exports['it_IT'] = exports['it']; - exports['it_CH'] = exports['it']; - - // Dutch - exports['nl'] = { - current: 'huidige', - time: 'tijd' - }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; - - // German - exports['de'] = { - current: 'Aktuelle', - time: 'Zeit' - }; - exports['de_DE'] = exports['de']; - - // French - exports['fr'] = { - current: 'actuel', - time: 'heure' - }; - exports['fr_FR'] = exports['fr']; - exports['fr_CA'] = exports['fr']; - exports['fr_BE'] = exports['fr']; - - // Espanol - exports['es'] = { - current: 'corriente', - time: 'hora' - }; - exports['es_ES'] = exports['es']; - -/***/ }, -/* 146 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var util = __webpack_require__(1); - var Component = __webpack_require__(128); - var moment = __webpack_require__(82); - var locales = __webpack_require__(145); - - /** - * A current time bar - * @param {{range: Range, dom: Object, domProps: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCurrentTime] - * @constructor CurrentTime - * @extends Component - */ - function CurrentTime(body, options) { - this.body = body; - - // default options - this.defaultOptions = { - rtl: false, - showCurrentTime: true, - - moment: moment, - locales: locales, - locale: 'en' - }; - this.options = util.extend({}, this.defaultOptions); - this.offset = 0; - - this._create(); - - this.setOptions(options); - } - - CurrentTime.prototype = new Component(); - - /** - * Create the HTML DOM for the current time bar - * @private - */ - CurrentTime.prototype._create = function () { - var bar = document.createElement('div'); - bar.className = 'vis-current-time'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - - this.bar = bar; - }; - - /** - * Destroy the CurrentTime bar - */ - CurrentTime.prototype.destroy = function () { - this.options.showCurrentTime = false; - this.redraw(); // will remove the bar from the DOM and stop refreshing - - this.body = null; - }; - - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCurrentTime] - */ - CurrentTime.prototype.setOptions = function (options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['rtl', 'showCurrentTime', 'moment', 'locale', 'locales'], this.options, options); - } - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CurrentTime.prototype.redraw = function () { - if (this.options.showCurrentTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); - - this.start(); - } - - var now = this.options.moment(new Date().valueOf() + this.offset); - var x = this.body.util.toScreen(now); - - var locale = this.options.locales[this.options.locale]; - if (!locale) { - if (!this.warned) { - console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization'); - this.warned = true; - } - locale = this.options.locales['en']; // fall back on english when not available - } - var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); - - if (this.options.rtl) { - this.bar.style.right = x + 'px'; - } else { - this.bar.style.left = x + 'px'; - } - this.bar.title = title; - } else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - this.stop(); - } - - return false; - }; - - /** - * Start auto refreshing the current time bar - */ - CurrentTime.prototype.start = function () { - var me = this; - - function update() { - me.stop(); - - // determine interval to refresh - var scale = me.body.range.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; - - me.redraw(); - me.body.emitter.emit('currentTimeTick'); - - // start a renderTimer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); - } - - update(); - }; - - /** - * Stop auto refreshing the current time bar - */ - CurrentTime.prototype.stop = function () { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - delete this.currentTimeTimer; - } - }; - - /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. - */ - CurrentTime.prototype.setCurrentTime = function (time) { - var t = util.convert(time, 'Date').valueOf(); - var now = new Date().valueOf(); - this.offset = t - now; - this.redraw(); - }; - - /** - * Get the current time. - * @return {Date} Returns the current time. - */ - CurrentTime.prototype.getCurrentTime = function () { - return new Date(new Date().valueOf() + this.offset); - }; - - module.exports = CurrentTime; - -/***/ }, -/* 147 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - /** - * This object contains all possible options. It will check if the types are correct, if required if the option is one - * of the allowed values. - * - * __any__ means that the name of the property does not matter. - * __type__ is a required field for all objects and contains the allowed types of all objects - */ - var string = 'string'; - var bool = 'boolean'; - var number = 'number'; - var array = 'array'; - var date = 'date'; - var object = 'object'; // should only be in a __type__ property - var dom = 'dom'; - var moment = 'moment'; - var any = 'any'; + var string = 'string'; + var bool = 'boolean'; + var number = 'number'; + var array = 'array'; + var date = 'date'; + var object = 'object'; // should only be in a __type__ property + var dom = 'dom'; + var moment = 'moment'; + var any = 'any'; var allOptions = { configure: { @@ -29004,7 +27715,11 @@ return /******/ (function(modules) { // webpackBootstrap //globals : align: { string: string }, rtl: { 'boolean': bool, 'undefined': 'undefined' }, - rollingMode: { 'boolean': bool, 'undefined': 'undefined' }, + rollingMode: { + follow: { 'boolean': bool }, + offset: { number: number, 'undefined': 'undefined' }, + __type__: { object: object } + }, verticalScroll: { 'boolean': bool, 'undefined': 'undefined' }, horizontalScroll: { 'boolean': bool, 'undefined': 'undefined' }, autoResize: { 'boolean': bool }, @@ -29028,6 +27743,7 @@ return /******/ (function(modules) { // webpackBootstrap hour: { string: string, 'undefined': 'undefined' }, weekday: { string: string, 'undefined': 'undefined' }, day: { string: string, 'undefined': 'undefined' }, + week: { string: string, 'undefined': 'undefined' }, month: { string: string, 'undefined': 'undefined' }, year: { string: string, 'undefined': 'undefined' }, __type__: { object: object, 'function': 'function' } @@ -29039,6 +27755,7 @@ return /******/ (function(modules) { // webpackBootstrap hour: { string: string, 'undefined': 'undefined' }, weekday: { string: string, 'undefined': 'undefined' }, day: { string: string, 'undefined': 'undefined' }, + week: { string: string, 'undefined': 'undefined' }, month: { string: string, 'undefined': 'undefined' }, year: { string: string, 'undefined': 'undefined' }, __type__: { object: object, 'function': 'function' } @@ -29109,6 +27826,7 @@ return /******/ (function(modules) { // webpackBootstrap template: { 'function': 'function' }, groupTemplate: { 'function': 'function' }, visibleFrameTemplate: { string: string, 'function': 'function' }, + showTooltips: { 'boolean': bool }, tooltip: { followMouse: { 'boolean': bool }, overflowMethod: { 'string': ['cap', 'flip'] }, @@ -29155,6 +27873,7 @@ return /******/ (function(modules) { // webpackBootstrap hour: 'HH:mm', weekday: 'ddd D', day: 'D', + week: 'w', month: 'MMM', year: 'YYYY' }, @@ -29165,6 +27884,7 @@ return /******/ (function(modules) { // webpackBootstrap hour: 'ddd D MMMM', weekday: 'MMMM YYYY', day: 'MMMM YYYY', + week: 'MMMM YYYY', month: 'YYYY', year: '' } @@ -29210,9 +27930,10 @@ return /******/ (function(modules) { // webpackBootstrap start: '', //template: {'function': 'function'}, //timeAxis: { - // scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'], + // scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'], // step: [1, 1, 10, 1] //}, + showTooltips: true, tooltip: { followMouse: false, overflowMethod: 'flip' @@ -29230,2337 +27951,1996 @@ return /******/ (function(modules) { // webpackBootstrap exports.allOptions = allOptions; exports.configureOptions = configureOptions; -/***/ }, -/* 148 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 146 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - var _Configurator = __webpack_require__(118); + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _stringify = __webpack_require__(90); + + var _stringify2 = _interopRequireDefault(_stringify); + + var _typeof2 = __webpack_require__(62); + + var _typeof3 = _interopRequireDefault(_typeof2); + + var _classCallCheck2 = __webpack_require__(134); - var _Configurator2 = _interopRequireDefault(_Configurator); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _Validator = __webpack_require__(126); + var _createClass2 = __webpack_require__(135); - var _Validator2 = _interopRequireDefault(_Validator); + var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var Emitter = __webpack_require__(99); - var Hammer = __webpack_require__(112); - var moment = __webpack_require__(82); var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - var Range = __webpack_require__(127); - var Core = __webpack_require__(130); - var TimeAxis = __webpack_require__(142); - var CurrentTime = __webpack_require__(146); - var CustomTime = __webpack_require__(144); - var LineGraph = __webpack_require__(149); - var printStyle = __webpack_require__(126).printStyle; - var allOptions = __webpack_require__(157).allOptions; - var configureOptions = __webpack_require__(157).configureOptions; + var ColorPicker = __webpack_require__(147)['default']; /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array} [items] - * @param {Object} [options] See Graph2d.setOptions for the available options. - * @constructor - * @extends Core + * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options. + * Boolean options are recognised as Boolean + * Number options should be written as array: [default value, min value, max value, stepsize] + * Colors should be written as array: ['color', '#ffffff'] + * Strings with should be written as array: [option1, option2, option3, ..] + * + * The options are matched with their counterparts in each of the modules and the values used in the configuration are + * + * @param parentModule | the location where parentModule.setOptions() can be called + * @param defaultContainer | the default container of the module + * @param configureOptions | the fully configured and predefined options set found in allOptions.js + * @param pixelRatio | canvas pixel ratio */ - function Graph2d(container, items, groups, options) { - // 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; - } - // TODO: REMOVE THIS in the next MAJOR release - // see https://github.com/almende/vis/issues/2511 - if (options && options.throttleRedraw) { - console.warn("Graph2d option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release."); - } + var Configurator = function () { + function Configurator(parentModule, defaultContainer, configureOptions) { + var pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; + (0, _classCallCheck3['default'])(this, Configurator); - var me = this; - this.defaultOptions = { - start: null, - end: null, + this.parent = parentModule; + this.changedOptions = []; + this.container = defaultContainer; + this.allowCreation = false; - autoResize: true, + this.options = {}; + this.initialized = false; + this.popupCounter = 0; + this.defaultOptions = { + enabled: false, + filter: true, + container: undefined, + showButton: true + }; + util.extend(this.options, this.defaultOptions); - orientation: { - axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both' - item: 'bottom' // not relevant for Graph2d - }, + this.configureOptions = configureOptions; + this.moduleOptions = {}; + this.domElements = []; + this.popupDiv = {}; + this.popupLimit = 5; + this.popupHistory = {}; + this.colorPicker = new ColorPicker(pixelRatio); + this.wrapper = undefined; + } - moment: moment, + /** + * refresh all options. + * Because all modules parse their options by themselves, we just use their options. We copy them here. + * + * @param options + */ - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); - // Create the DOM, props, and emitter - this._create(container); + (0, _createClass3['default'])(Configurator, [{ + key: 'setOptions', + value: function setOptions(options) { + if (options !== undefined) { + // reset the popup history because the indices may have been changed. + this.popupHistory = {}; + this._removePopup(); - // all components listed here will be repainted automatically - this.components = []; + var enabled = true; + if (typeof options === 'string') { + this.options.filter = options; + } else if (options instanceof Array) { + this.options.filter = options.join(); + } else if ((typeof options === 'undefined' ? 'undefined' : (0, _typeof3['default'])(options)) === 'object') { + if (options.container !== undefined) { + this.options.container = options.container; + } + if (options.filter !== undefined) { + this.options.filter = options.filter; + } + if (options.showButton !== undefined) { + this.options.showButton = options.showButton; + } + if (options.enabled !== undefined) { + enabled = options.enabled; + } + } else if (typeof options === 'boolean') { + this.options.filter = true; + enabled = options; + } else if (typeof options === 'function') { + this.options.filter = options; + enabled = true; + } + if (this.options.filter === false) { + enabled = false; + } - this.body = { - dom: this.dom, - domProps: this.props, - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this) - }, - hiddenDates: [], - util: { - toScreen: 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.options.enabled = enabled; + } + this._clean(); + } + }, { + key: 'setModuleOptions', + value: function setModuleOptions(moduleOptions) { + this.moduleOptions = moduleOptions; + if (this.options.enabled === true) { + this._clean(); + if (this.options.container !== undefined) { + this.container = this.options.container; + } + this._create(); + } } - }; - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; + /** + * Create all DOM elements + * @private + */ - // time axis - this.timeAxis = new TimeAxis(this.body); - this.components.push(this.timeAxis); - //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); + }, { + key: '_create', + value: function _create() { + var _this = this; - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); + this._clean(); + this.changedOptions = []; - // item set - this.linegraph = new LineGraph(this.body); + var filter = this.options.filter; + var counter = 0; + var show = false; + for (var option in this.configureOptions) { + if (this.configureOptions.hasOwnProperty(option)) { + this.allowCreation = false; + show = false; + if (typeof filter === 'function') { + show = filter(option, []); + show = show || this._handleObject(this.configureOptions[option], [option], true); + } else if (filter === true || filter.indexOf(option) !== -1) { + show = true; + } - this.components.push(this.linegraph); + if (show !== false) { + this.allowCreation = true; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + // linebreak between categories + if (counter > 0) { + this._makeItem([]); + } + // a header for the category + this._makeHeader(option); + // get the sub options + this._handleObject(this.configureOptions[option], [option]); + } + counter++; + } + } - 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); - } + if (this.options.showButton === true) { + var generateButton = document.createElement('div'); + generateButton.className = 'vis-configuration vis-config-button'; + generateButton.innerHTML = 'generate options'; + generateButton.onclick = function () { + _this._printOptions(); + }; + generateButton.onmouseover = function () { + generateButton.className = 'vis-configuration vis-config-button hover'; + }; + generateButton.onmouseout = function () { + generateButton.className = 'vis-configuration vis-config-button'; + }; - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } + this.optionsContainer = document.createElement('div'); + this.optionsContainer.className = 'vis-configuration vis-config-option-container'; - // create itemset - if (items) { - this.setItems(items); - } + this.domElements.push(this.optionsContainer); + this.domElements.push(generateButton); + } - // draw for the first time - this._redraw(); - } + this._push(); + //~ this.colorPicker.insertTo(this.container); + } - // Extend the functionality from Core - Graph2d.prototype = new Core(); + /** + * draw all DOM elements on the screen + * @private + */ - Graph2d.prototype.setOptions = function (options) { - // validate options - var errorFound = _Validator2['default'].validate(options, allOptions); - if (errorFound === true) { - console.log('%cErrors have been found in the supplied options object.', printStyle); - } + }, { + key: '_push', + value: function _push() { + this.wrapper = document.createElement('div'); + this.wrapper.className = 'vis-configuration-wrapper'; + this.container.appendChild(this.wrapper); + for (var i = 0; i < this.domElements.length; i++) { + this.wrapper.appendChild(this.domElements[i]); + } - Core.prototype.setOptions.call(this, options); - }; + this._showPopupIfNeeded(); + } - /** - * Set items - * @param {vis.DataSet | Array | null} items - */ - Graph2d.prototype.setItems = function (items) { - var initialLoad = this.itemsData == null; + /** + * delete all DOM elements + * @private + */ - // 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' + }, { + key: '_clean', + value: function _clean() { + for (var i = 0; i < this.domElements.length; i++) { + this.wrapper.removeChild(this.domElements[i]); } - }); - } - // set items - this.itemsData = newDataSet; - this.linegraph && this.linegraph.setItems(newDataSet); + if (this.wrapper !== undefined) { + this.container.removeChild(this.wrapper); + this.wrapper = undefined; + } + this.domElements = []; - if (initialLoad) { - if (this.options.start != undefined || this.options.end != undefined) { - var start = this.options.start != undefined ? this.options.start : null; - var end = this.options.end != undefined ? this.options.end : null; - this.setWindow(start, end, { animation: false }); - } else { - this.fit({ animation: false }); + this._removePopup(); } - } - }; - - /** - * Set groups - * @param {vis.DataSet | Array} groups - */ - Graph2d.prototype.setGroups = function (groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } else { - // turn an array into a dataset - newDataSet = new DataSet(groups); - } - this.groupsData = newDataSet; - this.linegraph.setGroups(newDataSet); - }; + /** + * get the value from the actualOptions if it exists + * @param {array} path | where to look for the actual option + * @returns {*} + * @private + */ - /** - * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). - * @param groupId - * @param width - * @param height - */ - Graph2d.prototype.getLegend = function (groupId, width, height) { - if (width === undefined) { - width = 15; - } - if (height === undefined) { - height = 15; - } - if (this.linegraph.groups[groupId] !== undefined) { - return this.linegraph.groups[groupId].getLegend(width, height); - } else { - return "cannot find group:'" + groupId + "'"; - } - }; + }, { + key: '_getValue', + value: function _getValue(path) { + var base = this.moduleOptions; + for (var i = 0; i < path.length; i++) { + if (base[path[i]] !== undefined) { + base = base[path[i]]; + } else { + base = undefined; + break; + } + } + return base; + } - /** - * This checks if the visible option of the supplied group (by ID) is true or false. - * @param groupId - * @returns {*} - */ - Graph2d.prototype.isGroupVisible = function (groupId) { - if (this.linegraph.groups[groupId] !== undefined) { - return this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true); - } else { - return false; - } - }; + /** + * all option elements are wrapped in an item + * @param path + * @param domElements + * @private + */ - /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null - */ - Graph2d.prototype.getDataRange = function () { - var min = null; - var max = null; + }, { + key: '_makeItem', + value: function _makeItem(path) { + if (this.allowCreation === true) { + var item = document.createElement('div'); + item.className = 'vis-configuration vis-config-item vis-config-s' + path.length; - // calculate min from start filed - for (var groupId in this.linegraph.groups) { - if (this.linegraph.groups.hasOwnProperty(groupId)) { - if (this.linegraph.groups[groupId].visible == true) { - for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { - var item = this.linegraph.groups[groupId].itemsData[i]; - var value = util.convert(item.x, 'Date').valueOf(); - min = min == null ? value : min > value ? value : min; - max = max == null ? value : max < value ? value : max; + for (var _len = arguments.length, domElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + domElements[_key - 1] = arguments[_key]; } + + domElements.forEach(function (element) { + item.appendChild(element); + }); + this.domElements.push(item); + return this.domElements.length; } + return 0; } - } - return { - min: min != null ? new Date(min) : null, - max: max != null ? new Date(max) : null - }; - }; + /** + * header for major subjects + * @param name + * @private + */ - /** - * 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. - */ - Graph2d.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); - var time = this._toTime(x); + }, { + key: '_makeHeader', + value: function _makeHeader(name) { + var div = document.createElement('div'); + div.className = 'vis-configuration vis-config-header'; + div.innerHTML = name; + this._makeItem([], div); + } - var customTime = CustomTime.customTimeFromTarget(event); + /** + * make a label, if it is an object label, it gets different styling. + * @param name + * @param path + * @param objectLabel + * @returns {HTMLElement} + * @private + */ - var element = util.getTarget(event); - var what = null; - 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.linegraph.yAxisLeft.dom.frame)) { - what = 'data-axis'; - } else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame)) { - what = 'data-axis'; - } else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame)) { - what = 'legend'; - } else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) { - what = 'legend'; - } else if (customTime != null) { - what = 'custom-time'; - } else if (util.hasParent(element, this.currentTime.bar)) { - what = 'current-time'; - } else if (util.hasParent(element, this.dom.center)) { - what = 'background'; - } + }, { + key: '_makeLabel', + value: function _makeLabel(name, path) { + var objectLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var value = []; - var yAxisLeft = this.linegraph.yAxisLeft; - var yAxisRight = this.linegraph.yAxisRight; - if (!yAxisLeft.hidden && this.itemsData.length > 0) { - value.push(yAxisLeft.screenToValue(y)); - } - if (!yAxisRight.hidden && this.itemsData.length > 0) { - value.push(yAxisRight.screenToValue(y)); - } + var div = document.createElement('div'); + div.className = 'vis-configuration vis-config-label vis-config-s' + path.length; + if (objectLabel === true) { + div.innerHTML = '' + name + ':'; + } else { + div.innerHTML = name + ':'; + } + return div; + } - return { - event: event, - what: what, - pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX, - pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY, - x: x, - y: y, - time: time, - value: value - }; - }; + /** + * make a dropdown list for multiple possible string optoins + * @param arr + * @param value + * @param path + * @private + */ - /** - * Load a configurator - * @return {Object} - * @private - */ - Graph2d.prototype._createConfigurator = function () { - return new _Configurator2['default'](this, this.dom.container, configureOptions); - }; + }, { + key: '_makeDropdown', + value: function _makeDropdown(arr, value, path) { + var select = document.createElement('select'); + select.className = 'vis-configuration vis-config-select'; + var selectedValue = 0; + if (value !== undefined) { + if (arr.indexOf(value) !== -1) { + selectedValue = arr.indexOf(value); + } + } - module.exports = Graph2d; + for (var i = 0; i < arr.length; i++) { + var option = document.createElement('option'); + option.value = arr[i]; + if (i === selectedValue) { + option.selected = 'selected'; + } + option.innerHTML = arr[i]; + select.appendChild(option); + } -/***/ }, -/* 149 */ -/***/ function(module, exports, __webpack_require__) { + var me = this; + select.onchange = function () { + me._update(this.value, path); + }; - 'use strict'; + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, select); + } - var _typeof2 = __webpack_require__(62); + /** + * make a range object for numeric options + * @param arr + * @param value + * @param path + * @private + */ - var _typeof3 = _interopRequireDefault(_typeof2); + }, { + key: '_makeRange', + value: function _makeRange(arr, value, path) { + var defaultValue = arr[0]; + var min = arr[1]; + var max = arr[2]; + var step = arr[3]; + var range = document.createElement('input'); + range.className = 'vis-configuration vis-config-range'; + try { + range.type = 'range'; // not supported on IE9 + range.min = min; + range.max = max; + } catch (err) {} + range.step = step; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // set up the popup settings in case they are needed. + var popupString = ''; + var popupValue = 0; - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(88); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - var Component = __webpack_require__(128); - var DataAxis = __webpack_require__(150); - var GraphGroup = __webpack_require__(152); - var Legend = __webpack_require__(156); - var Bars = __webpack_require__(153); - var Lines = __webpack_require__(155); - var Points = __webpack_require__(154); + if (value !== undefined) { + var factor = 1.20; + if (value < 0 && value * factor < min) { + range.min = Math.ceil(value * factor); + popupValue = range.min; + popupString = 'range increased'; + } else if (value / factor < min) { + range.min = Math.ceil(value / factor); + popupValue = range.min; + popupString = 'range increased'; + } + if (value * factor > max && max !== 1) { + range.max = Math.ceil(value * factor); + popupValue = range.max; + popupString = 'range increased'; + } + range.value = value; + } else { + range.value = defaultValue; + } - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + var input = document.createElement('input'); + input.className = 'vis-configuration vis-config-rangeinput'; + input.value = range.value; - /** - * This is the constructor of the LineGraph. It requires a Timeline body and options. - * - * @param body - * @param options - * @constructor - */ - function LineGraph(body, options) { - this.id = util.randomUUID(); - this.body = body; + var me = this; + range.onchange = function () { + input.value = this.value;me._update(Number(this.value), path); + }; + range.oninput = function () { + input.value = this.value; + }; - this.defaultOptions = { - yAxisOrientation: 'left', - defaultGroup: 'default', - sort: true, - sampling: true, - stack: false, - graphHeight: '400px', - shaded: { - enabled: false, - orientation: 'bottom' // top, bottom, zero - }, - style: 'line', // line, bar - barChart: { - width: 50, - sideBySide: false, - align: 'center' // left, center, right - }, - interpolation: { - enabled: true, - parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - alpha: 0.5 - }, - drawPoints: { - enabled: true, - size: 6, - style: 'square' // square, circle - }, - dataAxis: {}, //Defaults are done on DataAxis level - legend: {}, //Defaults are done on Legend level - groups: { - visibility: {} - } - }; + var label = this._makeLabel(path[path.length - 1], path); + var itemIndex = this._makeItem(path, label, range, input); - // options is shared by this lineGraph and all its items - this.options = util.extend({}, this.defaultOptions); - this.dom = {}; - this.props = {}; - this.hammer = null; - this.groups = {}; - this.abortedGraphUpdate = false; - this.updateSVGheight = false; - this.updateSVGheightOnResize = false; - this.forceGraphUpdate = true; + // if a popup is needed AND it has not been shown for this value, show it. + if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) { + this.popupHistory[itemIndex] = popupValue; + this._setupPopup(popupString, itemIndex); + } + } - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + /** + * prepare the popup + * @param string + * @param index + * @private + */ - // 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); - } - }; + }, { + key: '_setupPopup', + value: function _setupPopup(string, index) { + var _this2 = this; - // 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); + 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 () { + _this2._removePopup(); + }; + this.popupCounter += 1; + this.popupDiv = { html: div, index: index }; + } } - }; - - this.items = {}; // object with an Item for every data item - this.selection = []; // list with the ids of all selected nodes - this.lastStart = this.body.range.start; - this.touchParams = {}; // stores properties while dragging - - this.svgElements = {}; - this.setOptions(options); - this.groupsUsingDefaultStyles = [0]; - this.body.emitter.on('rangechanged', function () { - me.lastStart = me.body.range.start; - me.svg.style.left = util.option.asSize(-me.props.width); - me.forceGraphUpdate = true; - //Is this local redraw necessary? (Core also does a change event!) - me.redraw.call(me); - }); - - // create the HTML DOM - this._create(); - this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups }; - } - - LineGraph.prototype = new Component(); - - /** - * Create the HTML DOM for the ItemSet - */ - LineGraph.prototype._create = function () { - var frame = document.createElement('div'); - frame.className = 'vis-line-graph'; - this.dom.frame = frame; - - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - this.svg.style.position = 'relative'; - this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px'; - this.svg.style.display = 'block'; - frame.appendChild(this.svg); - - // data axis - this.options.dataAxis.orientation = 'left'; - this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); + /** + * remove the popup from the dom + * @private + */ - this.options.dataAxis.orientation = 'right'; - this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); - delete this.options.dataAxis.orientation; + }, { + key: '_removePopup', + value: function _removePopup() { + if (this.popupDiv.html !== undefined) { + this.popupDiv.html.parentNode.removeChild(this.popupDiv.html); + clearTimeout(this.popupDiv.hideTimeout); + clearTimeout(this.popupDiv.deleteTimeout); + this.popupDiv = {}; + } + } - // legends - this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups); - this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups); + /** + * Show the popup if it is needed. + * @private + */ - this.show(); - }; + }, { + key: '_showPopupIfNeeded', + value: function _showPopupIfNeeded() { + var _this3 = this; - /** - * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. - * @param {object} options - */ - LineGraph.prototype.setOptions = function (options) { - if (options) { - var fields = ['sampling', 'defaultGroup', 'stack', 'height', 'graphHeight', 'yAxisOrientation', 'style', 'barChart', 'dataAxis', 'sort', 'groups']; - if (options.graphHeight === undefined && options.height !== undefined) { - this.updateSVGheight = true; - this.updateSVGheightOnResize = true; - } else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) { - if (parseInt((options.graphHeight + '').replace("px", '')) < this.body.domProps.centerContainer.height) { - this.updateSVGheight = true; + 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 () { + _this3.popupDiv.html.style.opacity = 0; + }, 1500); + this.popupDiv.deleteTimeout = setTimeout(function () { + _this3._removePopup(); + }, 1800); } } - util.selectiveDeepExtend(fields, this.options, options); - util.mergeOptions(this.options, options, 'interpolation'); - util.mergeOptions(this.options, options, 'drawPoints'); - util.mergeOptions(this.options, options, 'shaded'); - util.mergeOptions(this.options, options, 'legend'); - if (options.interpolation) { - if ((0, _typeof3['default'])(options.interpolation) == 'object') { - if (options.interpolation.parametrization) { - if (options.interpolation.parametrization == 'uniform') { - this.options.interpolation.alpha = 0; - } else if (options.interpolation.parametrization == 'chordal') { - this.options.interpolation.alpha = 1.0; + /** + * make a checkbox for boolean options. + * @param defaultValue + * @param value + * @param path + * @private + */ + + }, { + key: '_makeCheckbox', + value: function _makeCheckbox(defaultValue, value, path) { + var checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.className = 'vis-configuration vis-config-checkbox'; + checkbox.checked = defaultValue; + if (value !== undefined) { + checkbox.checked = value; + if (value !== defaultValue) { + if ((typeof defaultValue === 'undefined' ? 'undefined' : (0, _typeof3['default'])(defaultValue)) === 'object') { + if (value !== defaultValue.enabled) { + this.changedOptions.push({ path: path, value: value }); + } } else { - this.options.interpolation.parametrization = 'centripetal'; - this.options.interpolation.alpha = 0.5; + this.changedOptions.push({ path: path, value: value }); } } } - } - if (this.yAxisLeft) { - if (options.dataAxis !== undefined) { - this.yAxisLeft.setOptions(this.options.dataAxis); - this.yAxisRight.setOptions(this.options.dataAxis); - } + var me = this; + checkbox.onchange = function () { + me._update(this.checked, path); + }; + + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, checkbox); } - if (this.legendLeft) { - if (options.legend !== undefined) { - this.legendLeft.setOptions(this.options.legend); - this.legendRight.setOptions(this.options.legend); + /** + * make a text input field for string options. + * @param defaultValue + * @param value + * @param path + * @private + */ + + }, { + key: '_makeTextInput', + value: function _makeTextInput(defaultValue, value, path) { + var checkbox = document.createElement('input'); + checkbox.type = 'text'; + checkbox.className = 'vis-configuration vis-config-text'; + checkbox.value = value; + if (value !== defaultValue) { + this.changedOptions.push({ path: path, value: value }); } - } - if (this.groups.hasOwnProperty(UNGROUPED)) { - this.groups[UNGROUPED].setOptions(options); + var me = this; + checkbox.onchange = function () { + me._update(this.value, path); + }; + + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, checkbox); } - } - // this is used to redraw the graph if the visibility of the groups is changed. - if (this.dom.frame) { - //not on initial run? - this.forceGraphUpdate = true; - this.body.emitter.emit("_change", { queue: true }); - } - }; + /** + * make a color field with a color picker for color fields + * @param arr + * @param value + * @param path + * @private + */ - /** - * Hide the component from the DOM - */ - LineGraph.prototype.hide = function () { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; + }, { + key: '_makeColorField', + value: function _makeColorField(arr, value, path) { + var _this4 = this; - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - LineGraph.prototype.show = function () { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; + var defaultColor = arr[1]; + var div = document.createElement('div'); + value = value === undefined ? defaultColor : value; - /** - * Set items - * @param {vis.DataSet | null} items - */ - LineGraph.prototype.setItems = function (items) { - var me = this, - ids, - oldItemsData = this.itemsData; + if (value !== 'none') { + div.className = 'vis-configuration vis-config-colorBlock'; + div.style.backgroundColor = value; + } else { + div.className = 'vis-configuration vis-config-colorBlock none'; + } - // 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'); - } + value = value === undefined ? defaultColor : value; + div.onclick = function () { + _this4._showColorPicker(value, div, path); + }; - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); + var label = this._makeLabel(path[path.length - 1], path); + this._makeItem(path, label, div); + } - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } + /** + * used by the color buttons to call the color picker. + * @param event + * @param value + * @param div + * @param path + * @private + */ - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); + }, { + key: '_showColorPicker', + value: function _showColorPicker(value, div, path) { + var _this5 = this; - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); - } - }; + // clear the callback from this div + div.onclick = function () {}; - /** - * Set groups - * @param {vis.DataSet} groups - */ - LineGraph.prototype.setGroups = function (groups) { - var me = this; - var ids; + this.colorPicker.insertTo(div); + this.colorPicker.show(); - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.off(event, callback); - }); + this.colorPicker.setColor(value); + this.colorPicker.setUpdateCallback(function (color) { + var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')'; + div.style.backgroundColor = colorString; + _this5._update(colorString, path); + }); - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - for (var i = 0; i < ids.length; i++) { - this._removeGroup(ids[i]); + // on close of the colorpicker, restore the callback. + this.colorPicker.setCloseCallback(function () { + div.onclick = function () { + _this5._showColorPicker(value, div, path); + }; + }); } - } - // 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'); - } + /** + * parse an object and draw the correct items + * @param obj + * @param path + * @private + */ - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); + }, { + key: '_handleObject', + value: function _handleObject(obj) { + var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var checkOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } - }; + var show = false; + var filter = this.options.filter; + var visibleInSet = false; + for (var subObj in obj) { + if (obj.hasOwnProperty(subObj)) { + show = true; + var item = obj[subObj]; + var newPath = util.copyAndExtendArray(path, subObj); + if (typeof filter === 'function') { + show = filter(subObj, path); - LineGraph.prototype._onUpdate = function (ids) { - this._updateAllGroupData(ids); - }; - LineGraph.prototype._onAdd = function (ids) { - this._onUpdate(ids); - }; - LineGraph.prototype._onRemove = function (ids) { - this._onUpdate(ids); - }; - LineGraph.prototype._onUpdateGroups = function (groupIds) { - this._updateAllGroupData(null, groupIds); - }; - LineGraph.prototype._onAddGroups = function (groupIds) { - this._onUpdateGroups(groupIds); - }; + // if needed we must go deeper into the object. + if (show === false) { + if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) { + this.allowCreation = false; + show = this._handleObject(item, newPath, true); + this.allowCreation = checkOnly === false; + } + } + } - /** - * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph - * @param {Array} groupIds - * @private - */ - LineGraph.prototype._onRemoveGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - this._removeGroup(groupIds[i]); - } - this.forceGraphUpdate = true; - this.body.emitter.emit("_change", { queue: true }); - }; + if (show !== false) { + visibleInSet = true; + var value = this._getValue(newPath); - /** - * this cleans the group out off the legends and the dataaxis - * @param groupId - * @private - */ - LineGraph.prototype._removeGroup = function (groupId) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.removeGroup(groupId); - this.legendRight.removeGroup(groupId); - this.legendRight.redraw(); - } else { - this.yAxisLeft.removeGroup(groupId); - this.legendLeft.removeGroup(groupId); - this.legendLeft.redraw(); - } - delete this.groups[groupId]; - } - }; + if (item instanceof Array) { + this._handleArray(item, value, newPath); + } else if (typeof item === 'string') { + this._makeTextInput(item, value, newPath); + } else if (typeof item === 'boolean') { + this._makeCheckbox(item, value, newPath); + } else if (item instanceof Object) { + // collapse the physics options that are not enabled + var draw = true; + if (path.indexOf('physics') !== -1) { + if (this.moduleOptions.physics.solver !== subObj) { + draw = false; + } + } - /** - * update a group object with the group dataset entree - * - * @param group - * @param groupId - * @private - */ - LineGraph.prototype._updateGroup = function (group, groupId) { - if (!this.groups.hasOwnProperty(groupId)) { - this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.addGroup(groupId, this.groups[groupId]); - this.legendRight.addGroup(groupId, this.groups[groupId]); - } else { - this.yAxisLeft.addGroup(groupId, this.groups[groupId]); - this.legendLeft.addGroup(groupId, this.groups[groupId]); - } - } else { - this.groups[groupId].update(group); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.updateGroup(groupId, this.groups[groupId]); - this.legendRight.updateGroup(groupId, this.groups[groupId]); - //If yAxisOrientation changed, clean out the group from the other axis. - this.yAxisLeft.removeGroup(groupId); - this.legendLeft.removeGroup(groupId); - } else { - this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); - this.legendLeft.updateGroup(groupId, this.groups[groupId]); - //If yAxisOrientation changed, clean out the group from the other axis. - this.yAxisRight.removeGroup(groupId); - this.legendRight.removeGroup(groupId); + if (draw === true) { + // initially collapse options with an disabled enabled option. + if (item.enabled !== undefined) { + var enabledPath = util.copyAndExtendArray(newPath, 'enabled'); + var enabledValue = this._getValue(enabledPath); + if (enabledValue === true) { + var label = this._makeLabel(subObj, newPath, true); + this._makeItem(newPath, label); + visibleInSet = this._handleObject(item, newPath) || visibleInSet; + } else { + this._makeCheckbox(item, enabledValue, newPath); + } + } else { + var _label = this._makeLabel(subObj, newPath, true); + this._makeItem(newPath, _label); + visibleInSet = this._handleObject(item, newPath) || visibleInSet; + } + } + } else { + console.error('dont know how to handle', item, subObj, newPath); + } + } + } + } + return visibleInSet; } - } - this.legendLeft.redraw(); - this.legendRight.redraw(); - }; - /** - * this updates all groups, it is used when there is an update the the itemset. - * - * @param {Array} ids - * @param {Array} groupIds - * @private - */ - LineGraph.prototype._updateAllGroupData = function (ids, groupIds) { - if (this.itemsData != null) { - var groupsContent = {}; - var items = this.itemsData.get(); - var fieldId = this.itemsData._fieldId; - var idMap = {}; - if (ids) { - ids.map(function (id) { - idMap[id] = id; - }); - } - - //pre-Determine array sizes, for more efficient memory claim - var groupCounts = {}; - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var groupId = item.group; - if (groupId === null || groupId === undefined) { - groupId = UNGROUPED; - } - groupCounts.hasOwnProperty(groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1; - } - - //Pre-load arrays from existing groups if items are not changed (not in ids) - if (!groupIds && ids) { - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var existing_items = group.getItems(); + /** + * handle the array type of option + * @param optionName + * @param arr + * @param value + * @param path + * @private + */ - groupsContent[groupId] = existing_items.filter(function (item) { - return item[fieldId] !== idMap[item[fieldId]]; - }); - var newLength = groupCounts[groupId]; - groupCounts[groupId] -= groupsContent[groupId].length; - if (groupsContent[groupId].length < newLength) { - groupsContent[groupId][newLength - 1] = {}; - } + }, { + key: '_handleArray', + value: function _handleArray(arr, value, path) { + if (typeof arr[0] === 'string' && arr[0] === 'color') { + this._makeColorField(arr, value, path); + if (arr[1] !== value) { + this.changedOptions.push({ path: path, value: value }); + } + } else if (typeof arr[0] === 'string') { + this._makeDropdown(arr, value, path); + if (arr[0] !== value) { + this.changedOptions.push({ path: path, value: value }); + } + } else if (typeof arr[0] === 'number') { + this._makeRange(arr, value, path); + if (arr[0] !== value) { + this.changedOptions.push({ path: path, value: Number(value) }); } } } - //Now insert data into the arrays. - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var groupId = item.group; - if (groupId === null || groupId === undefined) { - groupId = UNGROUPED; - } - if (!groupIds && ids && item[fieldId] !== idMap[item[fieldId]]) { - continue; - } - if (!groupsContent.hasOwnProperty(groupId)) { - groupsContent[groupId] = new Array(groupCounts[groupId]); - } - //Copy data (because of unmodifiable DataView input. - var extended = util.bridgeObject(item); - extended.x = util.convert(item.x, 'Date'); - extended.end = util.convert(item.end, 'Date'); - extended.orginalY = item.y; //real Y - extended.y = Number(item.y); - extended[fieldId] = item[fieldId]; + /** + * called to update the network with the new settings. + * @param value + * @param path + * @private + */ - var index = groupsContent[groupId].length - groupCounts[groupId]--; - groupsContent[groupId][index] = extended; - } + }, { + key: '_update', + value: function _update(value, path) { + var options = this._constructOptions(value, path); - //Make sure all groups are present, to allow removal of old groups - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (!groupsContent.hasOwnProperty(groupId)) { - groupsContent[groupId] = new Array(0); - } + 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); } + }, { + key: '_constructOptions', + value: function _constructOptions(value, path) { + var optionsObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - //Update legendas, style and axis - for (var groupId in groupsContent) { - if (groupsContent.hasOwnProperty(groupId)) { - if (groupsContent[groupId].length == 0) { - if (this.groups.hasOwnProperty(groupId)) { - this._removeGroup(groupId); - } - } else { - var group = undefined; - if (this.groupsData != undefined) { - group = this.groupsData.get(groupId); + var pointer = optionsObj; + + // when dropdown boxes can be string or boolean, we typecast it into correct types + value = value === 'true' ? true : value; + value = value === 'false' ? false : value; + + for (var i = 0; i < path.length; i++) { + if (path[i] !== 'global') { + if (pointer[path[i]] === undefined) { + pointer[path[i]] = {}; } - if (group == undefined) { - group = { id: groupId, content: this.options.defaultGroup + groupId }; + if (i !== path.length - 1) { + pointer = pointer[path[i]]; + } else { + pointer[path[i]] = value; } - this._updateGroup(group, groupId); - this.groups[groupId].setItems(groupsContent[groupId]); } } + return optionsObj; } - this.forceGraphUpdate = true; - this.body.emitter.emit("_change", { queue: true }); - } - }; + }, { + key: '_printOptions', + value: function _printOptions() { + var options = this.getOptions(); + this.optionsContainer.innerHTML = '
var options = ' + (0, _stringify2['default'])(options, null, 2) + '
'; + } + }, { + key: 'getOptions', + value: function getOptions() { + var options = {}; + for (var i = 0; i < this.changedOptions.length; i++) { + this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options); + } + return options; + } + }]); + return Configurator; + }(); - /** - * Redraw the component, mandatory function - * @return {boolean} Returns true if the component is resized - */ - LineGraph.prototype.redraw = function () { - var resized = false; + exports['default'] = Configurator; - // calculate actual size and position - this.props.width = this.dom.frame.offsetWidth; - this.props.height = this.body.domProps.centerContainer.height - this.body.domProps.border.top - this.body.domProps.border.bottom; +/***/ }), +/* 147 */ +/***/ (function(module, exports, __webpack_require__) { - // check if this component is resized - resized = this._isResized() || resized; + 'use strict'; - // check whether zoomed (in that case we need to re-stack everything) - var visibleInterval = this.body.range.end - this.body.range.start; - var zoomed = visibleInterval != this.lastVisibleInterval; - this.lastVisibleInterval = visibleInterval; + Object.defineProperty(exports, "__esModule", { + value: true + }); - // the svg element is three times as big as the width, this allows for fully dragging left and right - // without reloading the graph. the controls for this are bound to events in the constructor - if (resized == true) { - this.svg.style.width = util.option.asSize(3 * this.props.width); - this.svg.style.left = util.option.asSize(-this.props.width); + var _stringify = __webpack_require__(90); - // if the height of the graph is set as proportional, change the height of the svg - if ((this.options.height + '').indexOf("%") != -1 || this.updateSVGheightOnResize == true) { - this.updateSVGheight = true; - } - } + var _stringify2 = _interopRequireDefault(_stringify); - // update the height of the graph on each redraw of the graph. - if (this.updateSVGheight == true) { - if (this.options.graphHeight != this.props.height + 'px') { - this.options.graphHeight = this.props.height + 'px'; - this.svg.style.height = this.props.height + 'px'; - } - this.updateSVGheight = false; - } else { - this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px'; + var _classCallCheck2 = __webpack_require__(134); + + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var Hammer = __webpack_require__(112); + var hammerUtil = __webpack_require__(119); + var util = __webpack_require__(1); + + var ColorPicker = function () { + function ColorPicker() { + var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + (0, _classCallCheck3['default'])(this, ColorPicker); + + this.pixelRatio = pixelRatio; + this.generated = false; + this.centerCoordinates = { x: 289 / 2, y: 289 / 2 }; + this.r = 289 * 0.49; + this.color = { r: 255, g: 255, b: 255, a: 1.0 }; + this.hueCircle = undefined; + this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 }; + this.previousColor = undefined; + this.applied = false; + + // bound by + this.updateCallback = function () {}; + this.closeCallback = function () {}; + + // create all DOM elements + this._create(); } - // zoomed is here to ensure that animations are shown correctly. - if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) { - resized = this._updateGraph() || resized; - this.forceGraphUpdate = false; - } else { - // move the whole svg while dragging - if (this.lastStart != 0) { - var offset = this.body.range.start - this.lastStart; - var range = this.body.range.end - this.body.range.start; - if (this.props.width != 0) { - var rangePerPixelInv = this.props.width / range; - var xOffset = offset * rangePerPixelInv; - this.svg.style.left = -this.props.width - xOffset + 'px'; + /** + * this inserts the colorPicker into a div from the DOM + * @param container + */ + + + (0, _createClass3['default'])(ColorPicker, [{ + key: 'insertTo', + value: function insertTo(container) { + if (this.hammer !== undefined) { + this.hammer.destroy(); + this.hammer = undefined; } + this.container = container; + this.container.appendChild(this.frame); + this._bindHammer(); + + this._setSize(); } - } - this.legendLeft.redraw(); - this.legendRight.redraw(); - return resized; - }; - LineGraph.prototype._getSortedGroupIds = function () { - // getting group Ids - var grouplist = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) { - grouplist.push({ id: groupId, zIndex: group.options.zIndex }); + /** + * the callback is executed on apply and save. Bind it to the application + * @param callback + */ + + }, { + key: 'setUpdateCallback', + value: function setUpdateCallback(callback) { + if (typeof callback === 'function') { + this.updateCallback = callback; + } else { + throw new Error("Function attempted to set as colorPicker update callback is not a function."); } } - } - util.insertSort(grouplist, function (a, b) { - var az = a.zIndex; - var bz = b.zIndex; - if (az === undefined) az = 0; - if (bz === undefined) bz = 0; - return az == bz ? 0 : az < bz ? -1 : 1; - }); - var groupIds = new Array(grouplist.length); - for (var i = 0; i < grouplist.length; i++) { - groupIds[i] = grouplist[i].id; - } - return groupIds; - }; - /** - * Update and redraw the graph. - * - */ - LineGraph.prototype._updateGraph = function () { - // reset the svg elements - DOMutil.prepareElements(this.svgElements); - if (this.props.width != 0 && this.itemsData != null) { - var group, i; - var groupRanges = {}; - var changeCalled = false; - // this is the range of the SVG canvas - var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width); - var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); + /** + * the callback is executed on apply and save. Bind it to the application + * @param callback + */ - // getting group Ids - var groupIds = this._getSortedGroupIds(); - if (groupIds.length > 0) { - var groupsData = {}; + }, { + key: 'setCloseCallback', + value: function setCloseCallback(callback) { + if (typeof callback === 'function') { + this.closeCallback = callback; + } else { + throw new Error("Function attempted to set as colorPicker closing callback is not a function."); + } + } + }, { + key: '_isColorString', + value: function _isColorString(color) { + var htmlColors = { black: '#000000', navy: '#000080', darkblue: '#00008B', mediumblue: '#0000CD', blue: '#0000FF', darkgreen: '#006400', green: '#008000', teal: '#008080', darkcyan: '#008B8B', deepskyblue: '#00BFFF', darkturquoise: '#00CED1', mediumspringgreen: '#00FA9A', lime: '#00FF00', springgreen: '#00FF7F', aqua: '#00FFFF', cyan: '#00FFFF', midnightblue: '#191970', dodgerblue: '#1E90FF', lightseagreen: '#20B2AA', forestgreen: '#228B22', seagreen: '#2E8B57', darkslategray: '#2F4F4F', limegreen: '#32CD32', mediumseagreen: '#3CB371', turquoise: '#40E0D0', royalblue: '#4169E1', steelblue: '#4682B4', darkslateblue: '#483D8B', mediumturquoise: '#48D1CC', indigo: '#4B0082', darkolivegreen: '#556B2F', cadetblue: '#5F9EA0', cornflowerblue: '#6495ED', mediumaquamarine: '#66CDAA', dimgray: '#696969', slateblue: '#6A5ACD', olivedrab: '#6B8E23', slategray: '#708090', lightslategray: '#778899', mediumslateblue: '#7B68EE', lawngreen: '#7CFC00', chartreuse: '#7FFF00', aquamarine: '#7FFFD4', maroon: '#800000', purple: '#800080', olive: '#808000', gray: '#808080', skyblue: '#87CEEB', lightskyblue: '#87CEFA', blueviolet: '#8A2BE2', darkred: '#8B0000', darkmagenta: '#8B008B', saddlebrown: '#8B4513', darkseagreen: '#8FBC8F', lightgreen: '#90EE90', mediumpurple: '#9370D8', darkviolet: '#9400D3', palegreen: '#98FB98', darkorchid: '#9932CC', yellowgreen: '#9ACD32', sienna: '#A0522D', brown: '#A52A2A', darkgray: '#A9A9A9', lightblue: '#ADD8E6', greenyellow: '#ADFF2F', paleturquoise: '#AFEEEE', lightsteelblue: '#B0C4DE', powderblue: '#B0E0E6', firebrick: '#B22222', darkgoldenrod: '#B8860B', mediumorchid: '#BA55D3', rosybrown: '#BC8F8F', darkkhaki: '#BDB76B', silver: '#C0C0C0', mediumvioletred: '#C71585', indianred: '#CD5C5C', peru: '#CD853F', chocolate: '#D2691E', tan: '#D2B48C', lightgrey: '#D3D3D3', palevioletred: '#D87093', thistle: '#D8BFD8', orchid: '#DA70D6', goldenrod: '#DAA520', crimson: '#DC143C', gainsboro: '#DCDCDC', plum: '#DDA0DD', burlywood: '#DEB887', lightcyan: '#E0FFFF', lavender: '#E6E6FA', darksalmon: '#E9967A', violet: '#EE82EE', palegoldenrod: '#EEE8AA', lightcoral: '#F08080', khaki: '#F0E68C', aliceblue: '#F0F8FF', honeydew: '#F0FFF0', azure: '#F0FFFF', sandybrown: '#F4A460', wheat: '#F5DEB3', beige: '#F5F5DC', whitesmoke: '#F5F5F5', mintcream: '#F5FFFA', ghostwhite: '#F8F8FF', salmon: '#FA8072', antiquewhite: '#FAEBD7', linen: '#FAF0E6', lightgoldenrodyellow: '#FAFAD2', oldlace: '#FDF5E6', red: '#FF0000', fuchsia: '#FF00FF', magenta: '#FF00FF', deeppink: '#FF1493', orangered: '#FF4500', tomato: '#FF6347', hotpink: '#FF69B4', coral: '#FF7F50', darkorange: '#FF8C00', lightsalmon: '#FFA07A', orange: '#FFA500', lightpink: '#FFB6C1', pink: '#FFC0CB', gold: '#FFD700', peachpuff: '#FFDAB9', navajowhite: '#FFDEAD', moccasin: '#FFE4B5', bisque: '#FFE4C4', mistyrose: '#FFE4E1', blanchedalmond: '#FFEBCD', papayawhip: '#FFEFD5', lavenderblush: '#FFF0F5', seashell: '#FFF5EE', cornsilk: '#FFF8DC', lemonchiffon: '#FFFACD', floralwhite: '#FFFAF0', snow: '#FFFAFA', yellow: '#FFFF00', lightyellow: '#FFFFE0', ivory: '#FFFFF0', white: '#FFFFFF' }; + if (typeof color === 'string') { + return htmlColors[color]; + } + } - // fill groups data, this only loads the data we require based on the timewindow - this._getRelevantData(groupIds, groupsData, minDate, maxDate); + /** + * Set the color of the colorPicker + * Supported formats: + * 'red' --> HTML color string + * '#ffffff' --> hex string + * 'rbg(255,255,255)' --> rgb string + * 'rgba(255,255,255,1.0)' --> rgba string + * {r:255,g:255,b:255} --> rgb object + * {r:255,g:255,b:255,a:1.0} --> rgba object + * @param color + * @param setInitial + */ - // apply sampling, if disabled, it will pass through this function. - this._applySampling(groupIds, groupsData); + }, { + key: 'setColor', + value: function setColor(color) { + var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - // we transform the X coordinates to detect collisions - for (i = 0; i < groupIds.length; i++) { - this._convertXcoordinates(groupsData[groupIds[i]]); + if (color === 'none') { + return; } - // now all needed data has been collected we start the processing. - this._getYRanges(groupIds, groupsData, groupRanges); - - // update the Y axis first, we use this data to draw at the correct Y points - changeCalled = this._updateYAxis(groupIds, groupRanges); + var rgba = void 0; - // at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container. - // Cleanup SVG elements on abort. - if (changeCalled == true) { - DOMutil.cleanupElements(this.svgElements); - this.abortedGraphUpdate = true; - return true; + // if a html color shorthand is used, convert to hex + var htmlColor = this._isColorString(color); + if (htmlColor !== undefined) { + color = htmlColor; } - this.abortedGraphUpdate = false; - // With the yAxis scaled correctly, use this to get the Y values of the points. - var below = undefined; - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (this.options.stack === true && this.options.style === 'line') { - if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) { - if (below != undefined) { - this._stack(groupsData[group.id], groupsData[below.id]); - if (group.options.shaded.enabled == true && group.options.shaded.orientation !== "group") { - if (group.options.shaded.orientation == "top" && below.options.shaded.orientation !== "group") { - below.options.shaded.orientation = "group"; - below.options.shaded.groupId = group.id; - } else { - group.options.shaded.orientation = "group"; - group.options.shaded.groupId = below.id; - } - } - } - below = group; + // check format + if (util.isString(color) === true) { + if (util.isValidRGB(color) === true) { + var rgbaArray = color.substr(4).substr(0, color.length - 5).split(','); + rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 }; + } else if (util.isValidRGBA(color) === true) { + var _rgbaArray = color.substr(5).substr(0, color.length - 6).split(','); + rgba = { r: _rgbaArray[0], g: _rgbaArray[1], b: _rgbaArray[2], a: _rgbaArray[3] }; + } else if (util.isValidHex(color) === true) { + var rgbObj = util.hexToRGB(color); + rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 }; + } + } else { + if (color instanceof Object) { + if (color.r !== undefined && color.g !== undefined && color.b !== undefined) { + var alpha = color.a !== undefined ? color.a : '1.0'; + rgba = { r: color.r, g: color.g, b: color.b, a: alpha }; } } - this._convertYcoordinates(groupsData[groupIds[i]], group); } - //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines. - var paths = {}; - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.style === 'line' && group.options.shaded.enabled == true) { - var dataset = groupsData[groupIds[i]]; - if (dataset == null || dataset.length == 0) { - continue; - } - if (!paths.hasOwnProperty(groupIds[i])) { - paths[groupIds[i]] = Lines.calcPath(dataset, group); - } - if (group.options.shaded.orientation === "group") { - var subGroupId = group.options.shaded.groupId; - if (groupIds.indexOf(subGroupId) === -1) { - console.log(group.id + ": Unknown shading group target given:" + subGroupId); - continue; - } - if (!paths.hasOwnProperty(subGroupId)) { - paths[subGroupId] = Lines.calcPath(groupsData[subGroupId], this.groups[subGroupId]); - } - Lines.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework); - } else { - Lines.drawShading(paths[groupIds[i]], group, undefined, this.framework); - } - } + // set color + if (rgba === undefined) { + throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: " + (0, _stringify2['default'])(color)); + } else { + this._setColor(rgba, setInitial); } + } - // draw the groups, calculating paths if still necessary. - Bars.draw(groupIds, groupsData, this.framework); - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (groupsData[groupIds[i]].length > 0) { - switch (group.options.style) { - case "line": - if (!paths.hasOwnProperty(groupIds[i])) { - paths[groupIds[i]] = Lines.calcPath(groupsData[groupIds[i]], group); - } - Lines.draw(paths[groupIds[i]], group, this.framework); - //explicit no break; - case "point": - //explicit no break; - case "points": - if (group.options.style == "point" || group.options.style == "points" || group.options.drawPoints.enabled == true) { - Points.draw(groupsData[groupIds[i]], group, this.framework); - } - break; - case "bar": - // bar needs to be drawn enmasse - //explicit no break - default: - //do nothing... - } - } + /** + * this shows the color picker. + * The hue circle is constructed once and stored. + */ + + }, { + key: 'show', + value: function show() { + if (this.closeCallback !== undefined) { + this.closeCallback(); + this.closeCallback = undefined; } + + this.applied = false; + this.frame.style.display = 'block'; + this._generateHueCircle(); } - } - // cleanup unused svg elements - DOMutil.cleanupElements(this.svgElements); - return false; - }; + // ------------------------------------------ PRIVATE ----------------------------- // - LineGraph.prototype._stack = function (data, subData) { - var index, dx, dy, subPrevPoint, subNextPoint; - index = 0; - // for each data point we look for a matching on in the set below - for (var j = 0; j < data.length; j++) { - subPrevPoint = undefined; - subNextPoint = undefined; - // we look for time matches or a before-after point - for (var k = index; k < subData.length; k++) { - // if times match exactly - if (subData[k].x === data[j].x) { - subPrevPoint = subData[k]; - subNextPoint = subData[k]; - index = k; - break; - } else if (subData[k].x > data[j].x) { - // overshoot - subNextPoint = subData[k]; - if (k == 0) { - subPrevPoint = subNextPoint; - } else { - subPrevPoint = subData[k - 1]; - } - index = k; - break; - } - } - // in case the last data point has been used, we assume it stays like this. - if (subNextPoint === undefined) { - subPrevPoint = subData[subData.length - 1]; - subNextPoint = subData[subData.length - 1]; - } - // linear interpolation - dx = subNextPoint.x - subPrevPoint.x; - dy = subNextPoint.y - subPrevPoint.y; - if (dx == 0) { - data[j].y = data[j].orginalY + subNextPoint.y; - } else { - data[j].y = data[j].orginalY + dy / dx * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y - } - } - }; + /** + * Hide the picker. Is called by the cancel button. + * Optional boolean to store the previous color for easy access later on. + * @param storePrevious + * @private + */ - /** - * first select and preprocess the data from the datasets. - * the groups have their preselection of data, we now loop over this data to see - * what data we need to draw. Sorted data is much faster. - * more optimization is possible by doing the sampling before and using the binary search - * to find the end date to determine the increment. - * - * @param {array} groupIds - * @param {object} groupsData - * @param {date} minDate - * @param {date} maxDate - * @private - */ - LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) { - var group, i, j, item; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - var itemsData = group.getItems(); - // optimization for sorted data - if (group.options.sort == true) { - var dateComparator = function dateComparator(a, b) { - return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1; - }; - var first = Math.max(0, util.binarySearchValue(itemsData, minDate, 'x', 'before', dateComparator)); - var last = Math.min(itemsData.length, util.binarySearchValue(itemsData, maxDate, 'x', 'after', dateComparator) + 1); - if (last <= 0) { - last = itemsData.length; - } - var dataContainer = new Array(last - first); - for (j = first; j < last; j++) { - item = group.itemsData[j]; - dataContainer[j - first] = item; - } - groupsData[groupIds[i]] = dataContainer; - } else { - // If unsorted data, all data is relevant, just returning entire structure - groupsData[groupIds[i]] = group.itemsData; + }, { + key: '_hide', + value: function _hide() { + var _this = this; + + var storePrevious = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + // store the previous color for next time; + if (storePrevious === true) { + this.previousColor = util.extend({}, this.color); } - } - } - }; - /** - * - * @param groupIds - * @param groupsData - * @private - */ - LineGraph.prototype._applySampling = function (groupIds, groupsData) { - var group; - if (groupIds.length > 0) { - for (var i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.sampling == true) { - var dataContainer = groupsData[groupIds[i]]; - if (dataContainer.length > 0) { - var increment = 1; - var amountOfPoints = dataContainer.length; + if (this.applied === true) { + this.updateCallback(this.initialColor); + } - // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop - // of width changing of the yAxis. - //TODO: This assumes sorted data, but that's not guaranteed! - var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x); - var pointsPerPixel = amountOfPoints / xDistance; - increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel))); + this.frame.style.display = 'none'; - var sampledData = new Array(amountOfPoints); - for (var j = 0; j < amountOfPoints; j += increment) { - var idx = Math.round(j / increment); - sampledData[idx] = dataContainer[j]; - } - groupsData[groupIds[i]] = sampledData.splice(0, Math.round(amountOfPoints / increment)); + // call the closing callback, restoring the onclick method. + // this is in a setTimeout because it will trigger the show again before the click is done. + setTimeout(function () { + if (_this.closeCallback !== undefined) { + _this.closeCallback(); + _this.closeCallback = undefined; } - } + }, 0); } - } - }; - /** - * - * - * @param {array} groupIds - * @param {object} groupsData - * @param {object} groupRanges | this is being filled here - * @private - */ - LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) { - var groupData, group, i; - var combinedDataLeft = []; - var combinedDataRight = []; - var options; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - groupData = groupsData[groupIds[i]]; - options = this.groups[groupIds[i]].options; - if (groupData.length > 0) { - group = this.groups[groupIds[i]]; - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - if (options.stack === true && options.style === 'bar') { - if (options.yAxisOrientation === 'left') { - combinedDataLeft = combinedDataLeft.concat(groupData); - } else { - combinedDataRight = combinedDataRight.concat(groupData); - } - } else { - groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]); - } - } + /** + * bound to the save button. Saves and hides. + * @private + */ + + }, { + key: '_save', + value: function _save() { + this.updateCallback(this.color); + this.applied = false; + this._hide(); } - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - Bars.getStackedYRange(combinedDataLeft, groupRanges, groupIds, '__barStackLeft', 'left'); - Bars.getStackedYRange(combinedDataRight, groupRanges, groupIds, '__barStackRight', 'right'); - } - }; + /** + * Bound to apply button. Saves but does not close. Is undone by the cancel button. + * @private + */ - /** - * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. - * @param {Array} groupIds - * @param {Object} groupRanges - * @private - */ - LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { - var resized = false; - var yAxisLeftUsed = false; - var yAxisRightUsed = false; - var minLeft = 1e9, - minRight = 1e9, - maxLeft = -1e9, - maxRight = -1e9, - minVal, - maxVal; - // if groups are present - if (groupIds.length > 0) { - // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop. - for (var i = 0; i < groupIds.length; i++) { - var group = this.groups[groupIds[i]]; - if (group && group.options.yAxisOrientation != 'right') { - yAxisLeftUsed = true; - minLeft = 1e9; - maxLeft = -1e9; - } else if (group && group.options.yAxisOrientation) { - yAxisRightUsed = true; - minRight = 1e9; - maxRight = -1e9; - } + }, { + key: '_apply', + value: function _apply() { + this.applied = true; + this.updateCallback(this.color); + this._updatePicker(this.color); } - // if there are items: - for (var i = 0; i < groupIds.length; i++) { - if (groupRanges.hasOwnProperty(groupIds[i])) { - if (groupRanges[groupIds[i]].ignore !== true) { - minVal = groupRanges[groupIds[i]].min; - maxVal = groupRanges[groupIds[i]].max; + /** + * load the color from the previous session. + * @private + */ - if (groupRanges[groupIds[i]].yAxisOrientation != 'right') { - yAxisLeftUsed = true; - minLeft = minLeft > minVal ? minVal : minLeft; - maxLeft = maxLeft < maxVal ? maxVal : maxLeft; - } else { - yAxisRightUsed = true; - minRight = minRight > minVal ? minVal : minRight; - maxRight = maxRight < maxVal ? maxVal : maxRight; - } - } + }, { + key: '_loadLast', + value: function _loadLast() { + if (this.previousColor !== undefined) { + this.setColor(this.previousColor, false); + } else { + alert("There is no last color to load..."); } } - if (yAxisLeftUsed == true) { - this.yAxisLeft.setRange(minLeft, maxLeft); - } - if (yAxisRightUsed == true) { - this.yAxisRight.setRange(minRight, maxRight); - } - } - resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized; - resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized; + /** + * set the color, place the picker + * @param rgba + * @param setInitial + * @private + */ - if (yAxisRightUsed == true && yAxisLeftUsed == true) { - this.yAxisLeft.drawIcons = true; - this.yAxisRight.drawIcons = true; - } else { - this.yAxisLeft.drawIcons = false; - this.yAxisRight.drawIcons = false; - } - this.yAxisRight.master = !yAxisLeftUsed; - this.yAxisRight.masterAxis = this.yAxisLeft; + }, { + key: '_setColor', + value: function _setColor(rgba) { + var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - if (this.yAxisRight.master == false) { - if (yAxisRightUsed == true) { - this.yAxisLeft.lineOffset = this.yAxisRight.width; - } else { - this.yAxisLeft.lineOffset = 0; - } + // store the initial color + if (setInitial === true) { + this.initialColor = util.extend({}, rgba); + } - resized = this.yAxisLeft.redraw() || resized; - resized = this.yAxisRight.redraw() || resized; - } else { - resized = this.yAxisRight.redraw() || resized; - } + this.color = rgba; + var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); - // clean the accumulated lists - var tempGroups = ['__barStackLeft', '__barStackRight', '__lineStackLeft', '__lineStackRight']; - for (var i = 0; i < tempGroups.length; i++) { - if (groupIds.indexOf(tempGroups[i]) != -1) { - groupIds.splice(groupIds.indexOf(tempGroups[i]), 1); - } - } + var angleConvert = 2 * Math.PI; + var radius = this.r * hsv.s; + var x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h); + var y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h); - return resized; - }; + this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px'; + this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px'; - /** - * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function - * - * @param {boolean} axisUsed - * @returns {boolean} - * @private - * @param axis - */ - LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { - var changed = false; - if (axisUsed == false) { - if (axis.dom.frame.parentNode && axis.hidden == false) { - axis.hide(); - changed = true; - } - } else { - if (!axis.dom.frame.parentNode && axis.hidden == true) { - axis.show(); - changed = true; + this._updatePicker(rgba); } - } - return changed; - }; - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @returns {Array} - * @private - */ - LineGraph.prototype._convertXcoordinates = function (datapoints) { - var toScreen = this.body.util.toScreen; - for (var i = 0; i < datapoints.length; i++) { - datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width; - datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations - if (datapoints[i].end != undefined) { - datapoints[i].screen_end = toScreen(datapoints[i].end) + this.props.width; - } else { - datapoints[i].screen_end = undefined; + /** + * bound to opacity control + * @param value + * @private + */ + + }, { + key: '_setOpacity', + value: function _setOpacity(value) { + this.color.a = value / 100; + this._updatePicker(this.color); } - } - }; - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @param group - * @returns {Array} - * @private - */ - LineGraph.prototype._convertYcoordinates = function (datapoints, group) { - var axis = this.yAxisLeft; - var svgHeight = Number(this.svg.style.height.replace('px', '')); - if (group.options.yAxisOrientation == 'right') { - axis = this.yAxisRight; - } - for (var i = 0; i < datapoints.length; i++) { - datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y)); - } - group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); - }; + /** + * bound to brightness control + * @param value + * @private + */ - module.exports = LineGraph; + }, { + key: '_setBrightness', + value: function _setBrightness(value) { + var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); + hsv.v = value / 100; + var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); + rgba['a'] = this.color.a; + this.color = rgba; + this._updatePicker(); + } -/***/ }, -/* 150 */ -/***/ function(module, exports, __webpack_require__) { + /** + * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing. + * @param rgba + * @private + */ - 'use strict'; + }, { + key: '_updatePicker', + value: function _updatePicker() { + var rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.color; - var _keys = __webpack_require__(58); + var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b); + var ctx = this.colorPickerCanvas.getContext('2d'); + if (this.pixelRation === undefined) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - var _keys2 = _interopRequireDefault(_keys); + // clear the canvas + var w = this.colorPickerCanvas.clientWidth; + var h = this.colorPickerCanvas.clientHeight; + ctx.clearRect(0, 0, w, h); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + ctx.putImageData(this.hueCircle, 0, 0); + ctx.fillStyle = 'rgba(0,0,0,' + (1 - hsv.v) + ')'; + ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); + ctx.fill(); - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(88); - var Component = __webpack_require__(128); - var DataScale = __webpack_require__(151); - /** - * A horizontal time axis - * @param {Object} [options] See DataAxis.setOptions for the available - * options. - * @constructor DataAxis - * @extends Component - * @param body - */ - function DataAxis(body, options, svg, linegraphOptions) { - this.id = util.randomUUID(); - this.body = body; + this.brightnessRange.value = 100 * hsv.v; + this.opacityRange.value = 100 * rgba.a; - this.defaultOptions = { - orientation: 'left', // supported: 'left', 'right' - showMinorLabels: true, - showMajorLabels: true, - icons: false, - majorLinesOffset: 7, - minorLinesOffset: 4, - labelOffsetX: 10, - labelOffsetY: 2, - iconWidth: 20, - width: '40px', - visible: true, - alignZeros: true, - left: { - range: { min: undefined, max: undefined }, - format: function format(value) { - return '' + parseFloat(value.toPrecision(3)); - }, - title: { text: undefined, style: undefined } - }, - right: { - range: { min: undefined, max: undefined }, - format: function format(value) { - return '' + parseFloat(value.toPrecision(3)); - }, - title: { text: undefined, style: undefined } + 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 + ')'; } - }; - this.linegraphOptions = linegraphOptions; - this.linegraphSVG = svg; - this.props = {}; - this.DOMelements = { // dynamic elements - lines: {}, - labels: {}, - title: {} - }; + /** + * used by create to set the size of the canvas. + * @private + */ - this.dom = {}; - this.scale = undefined; - this.range = { start: 0, end: 0 }; + }, { + key: '_setSize', + value: function _setSize() { + this.colorPickerCanvas.style.width = '100%'; + this.colorPickerCanvas.style.height = '100%'; - this.options = util.extend({}, this.defaultOptions); - this.conversionFactor = 1; + this.colorPickerCanvas.width = 289 * this.pixelRatio; + this.colorPickerCanvas.height = 289 * this.pixelRatio; + } - this.setOptions(options); - this.width = Number(('' + this.options.width).replace("px", "")); - this.minWidth = this.width; - this.height = this.linegraphSVG.getBoundingClientRect().height; - this.hidden = false; + /** + * create all dom elements + * TODO: cleanup, lots of similar dom elements + * @private + */ - this.stepPixels = 25; - this.zeroCrossing = -1; - this.amountOfSteps = -1; + }, { + key: '_create', + value: function _create() { + this.frame = document.createElement('div'); + this.frame.className = 'vis-color-picker'; - this.lineOffset = 0; - this.master = true; - this.masterAxis = null; - this.svgElements = {}; - this.iconsRemoved = false; + this.colorPickerDiv = document.createElement('div'); + this.colorPickerSelector = document.createElement('div'); + this.colorPickerSelector.className = 'vis-selector'; + this.colorPickerDiv.appendChild(this.colorPickerSelector); - this.groups = {}; - this.amountOfGroups = 0; + this.colorPickerCanvas = document.createElement('canvas'); + this.colorPickerDiv.appendChild(this.colorPickerCanvas); - // create the HTML DOM - this._create(); - this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups }; + if (!this.colorPickerCanvas.getContext) { + var noCanvas = document.createElement('DIV'); + noCanvas.style.color = 'red'; + noCanvas.style.fontWeight = 'bold'; + noCanvas.style.padding = '10px'; + noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; + this.colorPickerCanvas.appendChild(noCanvas); + } else { + var ctx = this.colorPickerCanvas.getContext("2d"); + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - var me = this; - this.body.emitter.on("verticalDrag", function () { - me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; - }); - } + this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + } - DataAxis.prototype = new Component(); + this.colorPickerDiv.className = 'vis-color'; - DataAxis.prototype.addGroup = function (label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; + this.opacityDiv = document.createElement('div'); + this.opacityDiv.className = 'vis-opacity'; - DataAxis.prototype.updateGroup = function (label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.amountOfGroups += 1; - } - this.groups[label] = graphOptions; - }; + this.brightnessDiv = document.createElement('div'); + this.brightnessDiv.className = 'vis-brightness'; - DataAxis.prototype.removeGroup = function (label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; + this.arrowDiv = document.createElement('div'); + this.arrowDiv.className = 'vis-arrow'; - DataAxis.prototype.setOptions = function (options) { - if (options) { - var redraw = false; - if (this.options.orientation != options.orientation && options.orientation !== undefined) { - redraw = true; - } - var fields = ['orientation', 'showMinorLabels', 'showMajorLabels', 'icons', 'majorLinesOffset', 'minorLinesOffset', 'labelOffsetX', 'labelOffsetY', 'iconWidth', 'width', 'visible', 'left', 'right', 'alignZeros']; - util.selectiveDeepExtend(fields, this.options, options); + this.opacityRange = document.createElement('input'); + try { + this.opacityRange.type = 'range'; // Not supported on IE9 + this.opacityRange.min = '0'; + this.opacityRange.max = '100'; + } catch (err) {} + this.opacityRange.value = '100'; + this.opacityRange.className = 'vis-range'; - this.minWidth = Number(('' + this.options.width).replace("px", "")); - if (redraw === true && this.dom.frame) { - this.hide(); - this.show(); - } - } - }; + this.brightnessRange = document.createElement('input'); + try { + this.brightnessRange.type = 'range'; // Not supported on IE9 + this.brightnessRange.min = '0'; + this.brightnessRange.max = '100'; + } catch (err) {} + this.brightnessRange.value = '100'; + this.brightnessRange.className = 'vis-range'; - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype._create = function () { - this.dom.frame = document.createElement('div'); - this.dom.frame.style.width = this.options.width; - this.dom.frame.style.height = this.height; + this.opacityDiv.appendChild(this.opacityRange); + this.brightnessDiv.appendChild(this.brightnessRange); - this.dom.lineContainer = document.createElement('div'); - this.dom.lineContainer.style.width = '100%'; - this.dom.lineContainer.style.height = this.height; - this.dom.lineContainer.style.position = 'relative'; + var me = this; + this.opacityRange.onchange = function () { + me._setOpacity(this.value); + }; + this.opacityRange.oninput = function () { + me._setOpacity(this.value); + }; + this.brightnessRange.onchange = function () { + me._setBrightness(this.value); + }; + this.brightnessRange.oninput = function () { + me._setBrightness(this.value); + }; - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - this.svg.style.position = "absolute"; - this.svg.style.top = '0px'; - this.svg.style.height = '100%'; - this.svg.style.width = '100%'; - this.svg.style.display = "block"; - this.dom.frame.appendChild(this.svg); - }; + this.brightnessLabel = document.createElement("div"); + this.brightnessLabel.className = "vis-label vis-brightness"; + this.brightnessLabel.innerHTML = 'brightness:'; - DataAxis.prototype._redrawGroupIcons = function () { - DOMutil.prepareElements(this.svgElements); + this.opacityLabel = document.createElement("div"); + this.opacityLabel.className = "vis-label vis-opacity"; + this.opacityLabel.innerHTML = 'opacity:'; - var x; - var iconWidth = this.options.iconWidth; - var iconHeight = 15; - var iconOffset = 4; - var y = iconOffset + 0.5 * iconHeight; + this.newColorDiv = document.createElement("div"); + this.newColorDiv.className = "vis-new-color"; + this.newColorDiv.innerHTML = 'new'; - if (this.options.orientation === 'left') { - x = iconOffset; - } else { - x = this.width - iconWidth - iconOffset; - } + this.initialColorDiv = document.createElement("div"); + this.initialColorDiv.className = "vis-initial-color"; + this.initialColorDiv.innerHTML = 'initial'; - var groupArray = (0, _keys2['default'])(this.groups); - groupArray.sort(function (a, b) { - return a < b ? -1 : 1; - }); + this.cancelButton = document.createElement("div"); + this.cancelButton.className = "vis-button vis-cancel"; + this.cancelButton.innerHTML = 'cancel'; + this.cancelButton.onclick = this._hide.bind(this, false); - for (var i = 0; i < groupArray.length; i++) { - var groupId = groupArray[i]; - if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) { - this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y); - y += iconHeight + iconOffset; - } - } + this.applyButton = document.createElement("div"); + this.applyButton.className = "vis-button vis-apply"; + this.applyButton.innerHTML = 'apply'; + this.applyButton.onclick = this._apply.bind(this); - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = false; - }; + this.saveButton = document.createElement("div"); + this.saveButton.className = "vis-button vis-save"; + this.saveButton.innerHTML = 'save'; + this.saveButton.onclick = this._save.bind(this); - DataAxis.prototype._cleanupIcons = function () { - if (this.iconsRemoved === false) { - DOMutil.prepareElements(this.svgElements); - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = true; - } - }; + this.loadButton = document.createElement("div"); + this.loadButton.className = "vis-button vis-load"; + this.loadButton.innerHTML = 'load last'; + this.loadButton.onclick = this._loadLast.bind(this); - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.show = function () { - this.hidden = false; - if (!this.dom.frame.parentNode) { - if (this.options.orientation === 'left') { - this.body.dom.left.appendChild(this.dom.frame); - } else { - this.body.dom.right.appendChild(this.dom.frame); + this.frame.appendChild(this.colorPickerDiv); + this.frame.appendChild(this.arrowDiv); + this.frame.appendChild(this.brightnessLabel); + this.frame.appendChild(this.brightnessDiv); + this.frame.appendChild(this.opacityLabel); + this.frame.appendChild(this.opacityDiv); + this.frame.appendChild(this.newColorDiv); + this.frame.appendChild(this.initialColorDiv); + + this.frame.appendChild(this.cancelButton); + this.frame.appendChild(this.applyButton); + this.frame.appendChild(this.saveButton); + this.frame.appendChild(this.loadButton); } - } - if (!this.dom.lineContainer.parentNode) { - this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); - } - }; + /** + * bind hammer to the color picker + * @private + */ - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.hide = function () { - this.hidden = true; - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } + }, { + key: '_bindHammer', + value: function _bindHammer() { + var _this2 = this; - if (this.dom.lineContainer.parentNode) { - this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); - } - }; + this.drag = {}; + this.pinch = {}; + this.hammer = new Hammer(this.colorPickerCanvas); + this.hammer.get('pinch').set({ enable: true }); - /** - * Set a range (start and end) - * @param end - * @param start - * @param end - */ - DataAxis.prototype.setRange = function (start, end) { - this.range.start = start; - this.range.end = end; - }; + hammerUtil.onTouch(this.hammer, function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('tap', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panstart', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panmove', function (event) { + _this2._moveSelector(event); + }); + this.hammer.on('panend', function (event) { + _this2._moveSelector(event); + }); + } - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - DataAxis.prototype.redraw = function () { - var resized = false; - var activeGroups = 0; + /** + * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown. + * @private + */ - // Make sure the line container adheres to the vertical scrolling. - this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; + }, { + key: '_generateHueCircle', + value: function _generateHueCircle() { + if (this.generated === false) { + var ctx = this.colorPickerCanvas.getContext('2d'); + if (this.pixelRation === undefined) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) { - activeGroups++; + // clear the canvas + var w = this.colorPickerCanvas.clientWidth; + var h = this.colorPickerCanvas.clientHeight; + ctx.clearRect(0, 0, w, h); + + // draw hue circle + var x = void 0, + y = void 0, + hue = void 0, + sat = void 0; + this.centerCoordinates = { x: w * 0.5, y: h * 0.5 }; + this.r = 0.49 * w; + var angleConvert = 2 * Math.PI / 360; + var hfac = 1 / 360; + var sfac = 1 / this.r; + var rgb = void 0; + for (hue = 0; hue < 360; hue++) { + for (sat = 0; sat < this.r; sat++) { + x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue); + y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue); + rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1); + ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')'; + ctx.fillRect(x - 0.5, y - 0.5, 2, 2); + } + } + ctx.strokeStyle = 'rgba(0,0,0,1)'; + ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r); + ctx.stroke(); + + this.hueCircle = ctx.getImageData(0, 0, w, h); } + this.generated = true; } - } - if (this.amountOfGroups === 0 || activeGroups === 0) { - this.hide(); - } else { - this.show(); - this.height = Number(this.linegraphSVG.style.height.replace("px", "")); - // svg offsetheight did not work in firefox and explorer... - this.dom.lineContainer.style.height = this.height + 'px'; - this.width = this.options.visible === true ? Number(('' + this.options.width).replace("px", "")) : 0; + /** + * move the selector. This is called by hammer functions. + * + * @param event + * @private + */ - var props = this.props; - var frame = this.dom.frame; + }, { + key: '_moveSelector', + value: function _moveSelector(event) { + var rect = this.colorPickerDiv.getBoundingClientRect(); + var left = event.center.x - rect.left; + var top = event.center.y - rect.top; - // update classname - frame.className = 'vis-data-axis'; + var centerY = 0.5 * this.colorPickerDiv.clientHeight; + var centerX = 0.5 * this.colorPickerDiv.clientWidth; - // calculate character width and height - this._calculateCharSize(); + var x = left - centerX; + var y = top - centerY; - var orientation = this.options.orientation; - var showMinorLabels = this.options.showMinorLabels; - var showMajorLabels = this.options.showMajorLabels; + var angle = Math.atan2(x, y); + var radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX); - // determine the width and height of the elements for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + var newTop = Math.cos(angle) * radius + centerY; + var newLeft = Math.sin(angle) * radius + centerX; - props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; - props.minorLineHeight = 1; - props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; - props.majorLineHeight = 1; + this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px'; + this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px'; - // take frame offline while updating (is almost twice as fast) - if (orientation === 'left') { - frame.style.top = '0'; - frame.style.left = '0'; - frame.style.bottom = ''; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - this.props.width = this.body.domProps.left.width; - this.props.height = this.body.domProps.left.height; - } else { - // right - frame.style.top = ''; - frame.style.bottom = '0'; - frame.style.left = '0'; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - this.props.width = this.body.domProps.right.width; - this.props.height = this.body.domProps.right.height; + // set color + var h = angle / (2 * Math.PI); + h = h < 0 ? h + 1 : h; + var s = radius / this.r; + var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b); + hsv.h = h; + hsv.s = s; + var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v); + rgba['a'] = this.color.a; + this.color = rgba; + + // update previews + this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')'; + this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')'; } + }]); + return ColorPicker; + }(); - resized = this._redrawLabels(); - resized = this._isResized() || resized; + exports['default'] = ColorPicker; - if (this.options.icons === true) { - this._redrawGroupIcons(); - } else { - this._cleanupIcons(); - } +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { - this._redrawTitle(orientation); - } - return resized; - }; + 'use strict'; - /** - * Repaint major and minor text labels and vertical grid lines - * @private - */ - DataAxis.prototype._redrawLabels = function () { - var _this = this; + var Emitter = __webpack_require__(99); + var Hammer = __webpack_require__(112); + var moment = __webpack_require__(82); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); + var Range = __webpack_require__(118); + var Core = __webpack_require__(122); + var TimeAxis = __webpack_require__(139); + var CurrentTime = __webpack_require__(143); + var CustomTime = __webpack_require__(141); + var LineGraph = __webpack_require__(149); - var resized = false; - DOMutil.prepareElements(this.DOMelements.lines); - DOMutil.prepareElements(this.DOMelements.labels); - var orientation = this.options['orientation']; - var customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {}; + var printStyle = __webpack_require__(144).printStyle; + var allOptions = __webpack_require__(157).allOptions; + var configureOptions = __webpack_require__(157).configureOptions; - //Override range with manual options: - var autoScaleEnd = true; - if (customRange.max != undefined) { - this.range.end = customRange.max; - autoScaleEnd = false; + var Configurator = __webpack_require__(146)['default']; + var Validator = __webpack_require__(144)['default']; + + /** + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array} [items] + * @param {Object} [options] See Graph2d.setOptions for the available options. + * @constructor + * @extends Core + */ + function Graph2d(container, items, groups, options) { + // 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; } - var autoScaleStart = true; - if (customRange.min != undefined) { - this.range.start = customRange.min; - autoScaleStart = false; + + // TODO: REMOVE THIS in the next MAJOR release + // see https://github.com/almende/vis/issues/2511 + if (options && options.throttleRedraw) { + console.warn("Graph2d option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release."); } - this.scale = new DataScale(this.range.start, this.range.end, autoScaleStart, autoScaleEnd, this.dom.frame.offsetHeight, this.props.majorCharHeight, this.options.alignZeros, this.options[orientation].format); + var me = this; + this.defaultOptions = { + start: null, + end: null, - if (this.master === false && this.masterAxis != undefined) { - this.scale.followScale(this.masterAxis.scale); - } + autoResize: true, - //Is updated in side-effect of _redrawLabel(): - this.maxLabelSize = 0; + orientation: { + axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both' + item: 'bottom' // not relevant for Graph2d + }, - var lines = this.scale.getLines(); - lines.forEach(function (line) { - var y = line.y; - var isMajor = line.major; - if (_this.options['showMinorLabels'] && isMajor === false) { - _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-minor', _this.props.minorCharHeight); - } - if (isMajor) { - if (y >= 0) { - _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-major', _this.props.majorCharHeight); - } - } - if (_this.master === true) { - if (isMajor) { - _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-major', _this.options.majorLinesOffset, _this.props.majorLineWidth); - } else { - _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-minor', _this.options.minorLinesOffset, _this.props.minorLineWidth); - } - } - }); + moment: moment, - // Note that title is rotated, so we're using the height, not width! - var titleWidth = 0; - if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) { - titleWidth = this.props.titleCharHeight; - } - var offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15; + width: null, + height: null, + maxHeight: null, + minHeight: null + }; + this.options = util.deepExtend({}, this.defaultOptions); - // this will resize the yAxis to accommodate the labels. - if (this.maxLabelSize > this.width - offset && this.options.visible === true) { - this.width = this.maxLabelSize + offset; - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - resized = true; - } - // this will resize the yAxis if it is too big for the labels. - else if (this.maxLabelSize < this.width - offset && this.options.visible === true && this.width > this.minWidth) { - this.width = Math.max(this.minWidth, this.maxLabelSize + offset); - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - resized = true; - } else { - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - resized = false; + // 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: { + 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) } + }; - return resized; - }; + // range + this.range = new Range(this.body); + this.components.push(this.range); + this.body.range = this.range; - DataAxis.prototype.convertValue = function (value) { - return this.scale.convertValue(value); - }; + // time axis + this.timeAxis = new TimeAxis(this.body); + this.components.push(this.timeAxis); + //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); - DataAxis.prototype.screenToValue = function (x) { - return this.scale.screenToValue(x); - }; + // current time bar + this.currentTime = new CurrentTime(this.body); + this.components.push(this.currentTime); - /** - * Create a label for the axis at position x - * @private - * @param y - * @param text - * @param orientation - * @param className - * @param characterHeight - */ - DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { - // reuse redundant label - var label = DOMutil.getDOMElement('div', this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); - label.className = className; - label.innerHTML = text; - if (orientation === 'left') { - label.style.left = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "right"; - } else { - label.style.right = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "left"; - } + // item set + this.linegraph = new LineGraph(this.body); - label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; + this.components.push(this.linegraph); - text += ''; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - var largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth); - if (this.maxLabelSize < text.length * largestWidth) { - this.maxLabelSize = text.length * largestWidth; + + 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); } - }; - /** - * Create a minor line for the axis at position y - * @param y - * @param orientation - * @param className - * @param offset - * @param width - */ - DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { - if (this.master === true) { - var line = DOMutil.getDOMElement('div', this.DOMelements.lines, this.dom.lineContainer); //this.dom.redundant.lines.shift(); - line.className = className; - line.innerHTML = ''; + // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! + if (groups) { + this.setGroups(groups); + } - if (orientation === 'left') { - line.style.left = this.width - offset + 'px'; - } else { - line.style.right = this.width - offset + 'px'; - } + // create itemset + if (items) { + this.setItems(items); + } - line.style.width = width + 'px'; - line.style.top = y + 'px'; + // draw for the first time + this._redraw(); + } + + // Extend the functionality from Core + Graph2d.prototype = new Core(); + + Graph2d.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); }; /** - * Create a title for the axis - * @private - * @param orientation + * Set items + * @param {vis.DataSet | Array | null} items */ - DataAxis.prototype._redrawTitle = function (orientation) { - DOMutil.prepareElements(this.DOMelements.title); + Graph2d.prototype.setItems = function (items) { + var initialLoad = this.itemsData == null; - // Check if the title is defined for this axes - if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) { - var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame); - title.className = 'vis-y-axis vis-title vis-' + orientation; - title.innerHTML = this.options[orientation].title.text; + // 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' + } + }); + } - // Add style - if provided - if (this.options[orientation].title.style !== undefined) { - util.addCssText(title, this.options[orientation].title.style); - } + // set items + this.itemsData = newDataSet; + this.linegraph && this.linegraph.setItems(newDataSet); - if (orientation === 'left') { - title.style.left = this.props.titleCharHeight + 'px'; + if (initialLoad) { + if (this.options.start != undefined || this.options.end != undefined) { + var start = this.options.start != undefined ? this.options.start : null; + var end = this.options.end != undefined ? this.options.end : null; + this.setWindow(start, end, { animation: false }); } else { - title.style.right = this.props.titleCharHeight + 'px'; + this.fit({ animation: false }); } - - title.style.width = this.height + 'px'; } - - // we need to clean up in case we did not use all elements. - DOMutil.cleanupElements(this.DOMelements.title); }; /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private + * Set groups + * @param {vis.DataSet | Array} groups */ - DataAxis.prototype._calculateCharSize = function () { - // determine the char width and height on the minor axis - if (!('minorCharHeight' in this.props)) { - var textMinor = document.createTextNode('0'); - var measureCharMinor = document.createElement('div'); - measureCharMinor.className = 'vis-y-axis vis-minor vis-measure'; - measureCharMinor.appendChild(textMinor); - this.dom.frame.appendChild(measureCharMinor); - - this.props.minorCharHeight = measureCharMinor.clientHeight; - this.props.minorCharWidth = measureCharMinor.clientWidth; - - this.dom.frame.removeChild(measureCharMinor); + Graph2d.prototype.setGroups = function (groups) { + // convert to type DataSet when needed + var newDataSet; + if (!groups) { + newDataSet = null; + } else if (groups instanceof DataSet || groups instanceof DataView) { + newDataSet = groups; + } else { + // turn an array into a dataset + newDataSet = new DataSet(groups); } - if (!('majorCharHeight' in this.props)) { - var textMajor = document.createTextNode('0'); - var measureCharMajor = document.createElement('div'); - measureCharMajor.className = 'vis-y-axis vis-major vis-measure'; - measureCharMajor.appendChild(textMajor); - this.dom.frame.appendChild(measureCharMajor); - - this.props.majorCharHeight = measureCharMajor.clientHeight; - this.props.majorCharWidth = measureCharMajor.clientWidth; + this.groupsData = newDataSet; + this.linegraph.setGroups(newDataSet); + }; - this.dom.frame.removeChild(measureCharMajor); + /** + * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). + * @param groupId + * @param width + * @param height + */ + Graph2d.prototype.getLegend = function (groupId, width, height) { + if (width === undefined) { + width = 15; } - - if (!('titleCharHeight' in this.props)) { - var textTitle = document.createTextNode('0'); - var measureCharTitle = document.createElement('div'); - measureCharTitle.className = 'vis-y-axis vis-title vis-measure'; - measureCharTitle.appendChild(textTitle); - this.dom.frame.appendChild(measureCharTitle); - - this.props.titleCharHeight = measureCharTitle.clientHeight; - this.props.titleCharWidth = measureCharTitle.clientWidth; - - this.dom.frame.removeChild(measureCharTitle); + if (height === undefined) { + height = 15; + } + if (this.linegraph.groups[groupId] !== undefined) { + return this.linegraph.groups[groupId].getLegend(width, height); + } else { + return "cannot find group:'" + groupId + "'"; } }; - module.exports = DataAxis; - -/***/ }, -/* 151 */ -/***/ function(module, exports) { - - 'use strict'; - /** - * Created by ludo on 25-1-16. + * This checks if the visible option of the supplied group (by ID) is true or false. + * @param groupId + * @returns {*} */ + Graph2d.prototype.isGroupVisible = function (groupId) { + if (this.linegraph.groups[groupId] !== undefined) { + return this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true); + } else { + return false; + } + }; - function DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight) { - var zeroAlign = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; - var formattingFunction = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; - this.customLines = null; - - this.containerHeight = containerHeight; - this.majorCharHeight = majorCharHeight; - this._start = start; - this._end = end; - - this.scale = 1; - this.minorStepIdx = -1; - this.magnitudefactor = 1; - this.determineScale(); - - this.zeroAlign = zeroAlign; - this.autoScaleStart = autoScaleStart; - this.autoScaleEnd = autoScaleEnd; - - this.formattingFunction = formattingFunction; + /** + * Get the data range of the item set. + * @returns {{min: Date, max: Date}} range A range with a start and end Date. + * When no minimum is found, min==null + * When no maximum is found, max==null + */ + Graph2d.prototype.getDataRange = function () { + var min = null; + var max = null; - if (autoScaleStart || autoScaleEnd) { - var me = this; - var roundToMinor = function roundToMinor(value) { - var rounded = value - value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]); - if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) { - return rounded + me.magnitudefactor * me.minorSteps[me.minorStepIdx]; - } else { - return rounded; + // calculate min from start filed + for (var groupId in this.linegraph.groups) { + if (this.linegraph.groups.hasOwnProperty(groupId)) { + if (this.linegraph.groups[groupId].visible == true) { + for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { + var item = this.linegraph.groups[groupId].itemsData[i]; + var value = util.convert(item.x, 'Date').valueOf(); + min = min == null ? value : min > value ? value : min; + max = max == null ? value : max < value ? value : max; + } } - }; - if (autoScaleStart) { - this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx]; - this._start = roundToMinor(this._start); - } - - if (autoScaleEnd) { - this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx]; - this._end = roundToMinor(this._end); } - this.determineScale(); } - } - - DataScale.prototype.setCharHeight = function (majorCharHeight) { - this.majorCharHeight = majorCharHeight; - }; - DataScale.prototype.setHeight = function (containerHeight) { - this.containerHeight = containerHeight; + return { + min: min != null ? new Date(min) : null, + max: max != null ? new Date(max) : null + }; }; - DataScale.prototype.determineScale = function () { - var range = this._end - this._start; - this.scale = this.containerHeight / range; - var minimumStepValue = this.majorCharHeight / this.scale; - var orderOfMagnitude = range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0; + /** + * 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. + */ + Graph2d.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); + var time = this._toTime(x); - this.minorStepIdx = -1; - this.magnitudefactor = Math.pow(10, orderOfMagnitude); + var customTime = CustomTime.customTimeFromTarget(event); - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; + var element = util.getTarget(event); + var what = null; + 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.linegraph.yAxisLeft.dom.frame)) { + what = 'data-axis'; + } else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame)) { + what = 'data-axis'; + } else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame)) { + what = 'legend'; + } else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) { + what = 'legend'; + } else if (customTime != null) { + what = 'custom-time'; + } else if (util.hasParent(element, this.currentTime.bar)) { + what = 'current-time'; + } else if (util.hasParent(element, this.dom.center)) { + what = 'background'; } - var solutionFound = false; - for (var l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) { - this.magnitudefactor = Math.pow(10, l); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = this.magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - this.minorStepIdx = j; - break; - } - } - if (solutionFound === true) { - break; - } + var value = []; + var yAxisLeft = this.linegraph.yAxisLeft; + var yAxisRight = this.linegraph.yAxisRight; + if (!yAxisLeft.hidden && this.itemsData.length > 0) { + value.push(yAxisLeft.screenToValue(y)); + } + if (!yAxisRight.hidden && this.itemsData.length > 0) { + value.push(yAxisRight.screenToValue(y)); } - }; - - DataScale.prototype.is_major = function (value) { - return value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0; - }; - DataScale.prototype.getStep = function () { - return this.magnitudefactor * this.minorSteps[this.minorStepIdx]; + return { + event: event, + what: what, + pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX, + pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY, + x: x, + y: y, + time: time, + value: value + }; }; - DataScale.prototype.getFirstMajor = function () { - var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx]; - return this.convertValue(this._start + (majorStep - this._start % majorStep) % majorStep); + /** + * Load a configurator + * @return {Object} + * @private + */ + Graph2d.prototype._createConfigurator = function () { + return new Configurator(this, this.dom.container, configureOptions); }; - DataScale.prototype.formatValue = function (current) { - var returnValue = current.toPrecision(5); - if (typeof this.formattingFunction === 'function') { - returnValue = this.formattingFunction(current); - } + module.exports = Graph2d; - if (typeof returnValue === 'number') { - return '' + returnValue; - } else if (typeof returnValue === 'string') { - return returnValue; - } else { - return current.toPrecision(5); - } - }; +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { - DataScale.prototype.getLines = function () { - var lines = []; - var step = this.getStep(); - var bottomOffset = (step - this._start % step) % step; - for (var i = this._start + bottomOffset; this._end - i > 0.00001; i += step) { - if (i != this._start) { - //Skip the bottom line - lines.push({ major: this.is_major(i), y: this.convertValue(i), val: this.formatValue(i) }); - } - } - return lines; - }; + 'use strict'; - DataScale.prototype.followScale = function (other) { - var oldStepIdx = this.minorStepIdx; - var oldStart = this._start; - var oldEnd = this._end; + var _typeof2 = __webpack_require__(62); - var me = this; - var increaseMagnitude = function increaseMagnitude() { - me.magnitudefactor *= 2; - }; - var decreaseMagnitude = function decreaseMagnitude() { - me.magnitudefactor /= 2; - }; + var _typeof3 = _interopRequireDefault(_typeof2); - if (other.minorStepIdx <= 1 && this.minorStepIdx <= 1 || other.minorStepIdx > 1 && this.minorStepIdx > 1) { - //easy, no need to change stepIdx nor multiplication factor - } else if (other.minorStepIdx < this.minorStepIdx) { - //I'm 5, they are 4 per major. - this.minorStepIdx = 1; - if (oldStepIdx == 2) { - increaseMagnitude(); - } else { - increaseMagnitude(); - increaseMagnitude(); - } - } else { - //I'm 4, they are 5 per major - this.minorStepIdx = 2; - if (oldStepIdx == 1) { - decreaseMagnitude(); - } else { - decreaseMagnitude(); - decreaseMagnitude(); - } - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - //Get masters stats: - var lines = other.getLines(); - var otherZero = other.convertValue(0); - var otherStep = other.getStep() * other.scale; - - var done = false; - var count = 0; - //Loop until magnitude is correct for given constrains. - while (!done && count++ < 5) { - - //Get my stats: - this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor); - var newRange = this.containerHeight / this.scale; + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(88); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); + var Component = __webpack_require__(120); + var DataAxis = __webpack_require__(150); + var GraphGroup = __webpack_require__(152); + var Legend = __webpack_require__(156); + var Bars = __webpack_require__(153); + var Lines = __webpack_require__(155); + var Points = __webpack_require__(154); - //For the case the magnitudefactor has changed: - this._start = oldStart; - this._end = this._start + newRange; + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var myOriginalZero = this._end * this.scale; - var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx]; - var majorOffset = this.getFirstMajor() - other.getFirstMajor(); + /** + * This is the constructor of the LineGraph. It requires a Timeline body and options. + * + * @param body + * @param options + * @constructor + */ + function LineGraph(body, options) { + this.id = util.randomUUID(); + this.body = body; - if (this.zeroAlign) { - var zeroOffset = otherZero - myOriginalZero; - this._end += zeroOffset / this.scale; - this._start = this._end - newRange; - } else { - if (!this.autoScaleStart) { - this._start += majorStep - majorOffset / this.scale; - this._end = this._start + newRange; - } else { - this._start -= majorOffset / this.scale; - this._end = this._start + newRange; - } - } - if (!this.autoScaleEnd && this._end > oldEnd + 0.00001) { - //Need to decrease magnitude to prevent scale overshoot! (end) - decreaseMagnitude(); - done = false; - continue; - } - if (!this.autoScaleStart && this._start < oldStart - 0.00001) { - if (this.zeroAlign && oldStart >= 0) { - console.warn("Can't adhere to given 'min' range, due to zeroalign"); - } else { - //Need to decrease magnitude to prevent scale overshoot! (start) - decreaseMagnitude(); - done = false; - continue; - } - } - if (this.autoScaleStart && this.autoScaleEnd && newRange < oldEnd - oldStart) { - increaseMagnitude(); - done = false; - continue; + this.defaultOptions = { + yAxisOrientation: 'left', + defaultGroup: 'default', + sort: true, + sampling: true, + stack: false, + graphHeight: '400px', + shaded: { + enabled: false, + orientation: 'bottom' // top, bottom, zero + }, + style: 'line', // line, bar + barChart: { + width: 50, + sideBySide: false, + align: 'center' // left, center, right + }, + interpolation: { + enabled: true, + parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) + alpha: 0.5 + }, + drawPoints: { + enabled: true, + size: 6, + style: 'square' // square, circle + }, + dataAxis: {}, //Defaults are done on DataAxis level + legend: {}, //Defaults are done on Legend level + groups: { + visibility: {} } - done = true; - } - }; + }; - DataScale.prototype.convertValue = function (value) { - return this.containerHeight - (value - this._start) * this.scale; - }; + // options is shared by this lineGraph and all its items + this.options = util.extend({}, this.defaultOptions); + this.dom = {}; + this.props = {}; + this.hammer = null; + this.groups = {}; + this.abortedGraphUpdate = false; + this.updateSVGheight = false; + this.updateSVGheightOnResize = false; + this.forceGraphUpdate = true; - DataScale.prototype.screenToValue = function (pixels) { - return (this.containerHeight - pixels) / this.scale + this._start; - }; + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - module.exports = DataScale; + // 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); + } + }; -/***/ }, -/* 152 */ -/***/ function(module, exports, __webpack_require__) { + // 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); + } + }; - 'use strict'; + this.items = {}; // object with an Item for every data item + this.selection = []; // list with the ids of all selected nodes + this.lastStart = this.body.range.start; + this.touchParams = {}; // stores properties while dragging - var _typeof2 = __webpack_require__(62); + this.svgElements = {}; + this.setOptions(options); + this.groupsUsingDefaultStyles = [0]; + this.body.emitter.on('rangechanged', function () { + me.lastStart = me.body.range.start; + me.svg.style.left = util.option.asSize(-me.props.width); - var _typeof3 = _interopRequireDefault(_typeof2); + me.forceGraphUpdate = true; + //Is this local redraw necessary? (Core also does a change event!) + me.redraw.call(me); + }); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // create the HTML DOM + this._create(); + this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups }; + } - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(88); - var Bars = __webpack_require__(153); - var Lines = __webpack_require__(155); - var Points = __webpack_require__(154); + LineGraph.prototype = new Component(); /** - * /** - * @param {object} group | the object of the group from the dataset - * @param {string} groupId | ID of the group - * @param {object} options | the default options - * @param {array} groupsUsingDefaultStyles | this array has one entree. - * It is passed as an array so it is passed by reference. - * It enumerates through the default styles - * @constructor + * Create the HTML DOM for the ItemSet */ - function GraphGroup(group, groupId, options, groupsUsingDefaultStyles) { - this.id = groupId; - var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'drawPoints', 'shaded', 'interpolation', 'zIndex', 'excludeFromStacking', 'excludeFromLegend']; - this.options = util.selectiveBridgeObject(fields, options); - this.usingDefaultStyle = group.className === undefined; - this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; - this.zeroPosition = 0; - this.update(group); - if (this.usingDefaultStyle == true) { - this.groupsUsingDefaultStyles[0] += 1; - } - this.itemsData = []; - this.visible = group.visible === undefined ? true : group.visible; - } + LineGraph.prototype._create = function () { + var frame = document.createElement('div'); + frame.className = 'vis-line-graph'; + this.dom.frame = frame; - /** - * this loads a reference to all items in this group into this group. - * @param {array} items - */ - GraphGroup.prototype.setItems = function (items) { - if (items != null) { - this.itemsData = items; - if (this.options.sort == true) { - util.insertSort(this.itemsData, function (a, b) { - return a.x > b.x ? 1 : -1; - }); - } - } else { - this.itemsData = []; - } - }; + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + this.svg.style.position = 'relative'; + this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px'; + this.svg.style.display = 'block'; + frame.appendChild(this.svg); - GraphGroup.prototype.getItems = function () { - return this.itemsData; - }; + // data axis + this.options.dataAxis.orientation = 'left'; + this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); - /** - * this is used for barcharts and shading, this way, we only have to calculate it once. - * @param pos - */ - GraphGroup.prototype.setZeroPosition = function (pos) { - this.zeroPosition = pos; + this.options.dataAxis.orientation = 'right'; + this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); + delete this.options.dataAxis.orientation; + + // legends + this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups); + this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups); + + this.show(); }; /** - * set the options of the graph group over the default options. - * @param options + * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. + * @param {object} options */ - GraphGroup.prototype.setOptions = function (options) { - if (options !== undefined) { - var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'zIndex', 'excludeFromStacking', 'excludeFromLegend']; - util.selectiveDeepExtend(fields, this.options, options); - - // if the group's drawPoints is a function delegate the callback to the onRender property - if (typeof options.drawPoints == 'function') { - options.drawPoints = { - onRender: options.drawPoints - }; + LineGraph.prototype.setOptions = function (options) { + if (options) { + var fields = ['sampling', 'defaultGroup', 'stack', 'height', 'graphHeight', 'yAxisOrientation', 'style', 'barChart', 'dataAxis', 'sort', 'groups']; + if (options.graphHeight === undefined && options.height !== undefined) { + this.updateSVGheight = true; + this.updateSVGheightOnResize = true; + } else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) { + if (parseInt((options.graphHeight + '').replace("px", '')) < this.body.domProps.centerContainer.height) { + this.updateSVGheight = true; + } } - + util.selectiveDeepExtend(fields, this.options, options); util.mergeOptions(this.options, options, 'interpolation'); util.mergeOptions(this.options, options, 'drawPoints'); util.mergeOptions(this.options, options, 'shaded'); + util.mergeOptions(this.options, options, 'legend'); if (options.interpolation) { if ((0, _typeof3['default'])(options.interpolation) == 'object') { @@ -31576,5175 +29956,5540 @@ return /******/ (function(modules) { // webpackBootstrap } } } + + if (this.yAxisLeft) { + if (options.dataAxis !== undefined) { + this.yAxisLeft.setOptions(this.options.dataAxis); + this.yAxisRight.setOptions(this.options.dataAxis); + } + } + + if (this.legendLeft) { + if (options.legend !== undefined) { + this.legendLeft.setOptions(this.options.legend); + this.legendRight.setOptions(this.options.legend); + } + } + + if (this.groups.hasOwnProperty(UNGROUPED)) { + this.groups[UNGROUPED].setOptions(options); + } } - }; - /** - * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph - * @param group - */ - GraphGroup.prototype.update = function (group) { - this.group = group; - this.content = group.content || 'graph'; - this.className = group.className || this.className || 'vis-graph-group' + this.groupsUsingDefaultStyles[0] % 10; - this.visible = group.visible === undefined ? true : group.visible; - this.style = group.style; - this.setOptions(group.options); + // this is used to redraw the graph if the visibility of the groups is changed. + if (this.dom.frame) { + //not on initial run? + this.forceGraphUpdate = true; + this.body.emitter.emit("_change", { queue: true }); + } }; /** - * return the legend entree for this group. - * - * @param iconWidth - * @param iconHeight - * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} + * Hide the component from the DOM */ - GraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) { - if (framework == undefined || framework == null) { - var svg = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - framework = { svg: svg, svgElements: {}, options: this.options, groups: [this] }; - } - if (x == undefined || x == null) { - x = 0; - } - if (y == undefined || y == null) { - y = 0.5 * iconHeight; - } - switch (this.options.style) { - case "line": - Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework); - break; - case "points": //explicit no break - case "point": - Points.drawIcon(this, x, y, iconWidth, iconHeight, framework); - break; - case "bar": - Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework); - break; + LineGraph.prototype.hide = function () { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - return { icon: framework.svg, label: this.content, orientation: this.options.yAxisOrientation }; }; - GraphGroup.prototype.getYRange = function (groupData) { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; + /** + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed + */ + LineGraph.prototype.show = function () { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); } - return { min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation }; }; - module.exports = GraphGroup; - -/***/ }, -/* 153 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var DOMutil = __webpack_require__(88); - var Points = __webpack_require__(154); - - function Bargraph(groupId, options) {} - - Bargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; + /** + * Set items + * @param {vis.DataSet | null} items + */ + LineGraph.prototype.setItems = function (items) { + var me = this, + ids, + oldItemsData = this.itemsData; - var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2 * fillHeight); - outline.setAttributeNS(null, "class", "vis-outline"); + // 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'); + } - var barWidth = Math.round(0.3 * iconWidth); - var originalWidth = group.options.barChart.width; - var scale = originalWidth / barWidth; - var bar1Height = Math.round(0.4 * iconHeight); - var bar2Height = Math.round(0.75 * iconHeight); + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - var offset = Math.round((iconWidth - 2 * barWidth) / 3); + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } - DOMutil.drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); - DOMutil.drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); - if (group.options.drawPoints.enabled == true) { - var groupTemplate = { - style: group.options.drawPoints.style, - styles: group.options.drawPoints.styles, - size: group.options.drawPoints.size / scale, - className: group.className - }; - DOMutil.drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg); - DOMutil.drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg); + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); } }; /** - * draw a bar graph - * - * @param groupIds - * @param processedGroupData + * Set groups + * @param {vis.DataSet} groups */ - Bargraph.draw = function (groupIds, processedGroupData, framework) { - var combinedData = []; - var intersections = {}; - var coreDistance; - var key, drawData; - var group; - var i, j; - var barPoints = 0; + LineGraph.prototype.setGroups = function (groups) { + var me = this; + var ids; - // combine all barchart data - for (i = 0; i < groupIds.length; i++) { - group = framework.groups[groupIds[i]]; - if (group.options.style === 'bar') { - if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) { - for (j = 0; j < processedGroupData[groupIds[i]].length; j++) { - combinedData.push({ - screen_x: processedGroupData[groupIds[i]][j].screen_x, - screen_end: processedGroupData[groupIds[i]][j].screen_end, - screen_y: processedGroupData[groupIds[i]][j].screen_y, - x: processedGroupData[groupIds[i]][j].x, - end: processedGroupData[groupIds[i]][j].end, - y: processedGroupData[groupIds[i]][j].y, - groupId: groupIds[i], - label: processedGroupData[groupIds[i]][j].label - }); - barPoints += 1; - } - } + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.off(event, callback); + }); + + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + for (var i = 0; i < ids.length; i++) { + this._removeGroup(ids[i]); } } - if (barPoints === 0) { - return; + // 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'); } - // sort by time and by group - combinedData.sort(function (a, b) { - if (a.screen_x === b.screen_x) { - return a.groupId < b.groupId ? -1 : 1; - } else { - return a.screen_x - b.screen_x; - } - }); - - // get intersections - Bargraph._getDataIntersections(intersections, combinedData); + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - // plot barchart - for (i = 0; i < combinedData.length; i++) { - group = framework.groups[combinedData[i].groupId]; - var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width; + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); + } + }; - key = combinedData[i].screen_x; - var heightOffset = 0; - if (intersections[key] === undefined) { - if (i + 1 < combinedData.length) { - coreDistance = Math.abs(combinedData[i + 1].screen_x - key); - } - drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); - } else { - var nextKey = i + (intersections[key].amount - intersections[key].resolved); - var prevKey = i - (intersections[key].resolved + 1); - if (nextKey < combinedData.length) { - coreDistance = Math.abs(combinedData[nextKey].screen_x - key); - } - drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); - intersections[key].resolved += 1; - - if (group.options.stack === true && group.options.excludeFromStacking !== true) { - if (combinedData[i].screen_y < group.zeroPosition) { - heightOffset = intersections[key].accumulatedNegative; - intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y; - } else { - heightOffset = intersections[key].accumulatedPositive; - intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y; - } - } else if (group.options.barChart.sideBySide === true) { - drawData.width = drawData.width / intersections[key].amount; - drawData.offset += intersections[key].resolved * drawData.width - 0.5 * drawData.width * (intersections[key].amount + 1); - } - } + LineGraph.prototype._onUpdate = function (ids) { + this._updateAllGroupData(ids); + }; + LineGraph.prototype._onAdd = function (ids) { + this._onUpdate(ids); + }; + LineGraph.prototype._onRemove = function (ids) { + this._onUpdate(ids); + }; + LineGraph.prototype._onUpdateGroups = function (groupIds) { + this._updateAllGroupData(null, groupIds); + }; + LineGraph.prototype._onAddGroups = function (groupIds) { + this._onUpdateGroups(groupIds); + }; - var dataWidth = drawData.width; - var start = combinedData[i].screen_x; + /** + * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph + * @param {Array} groupIds + * @private + */ + LineGraph.prototype._onRemoveGroups = function (groupIds) { + for (var i = 0; i < groupIds.length; i++) { + this._removeGroup(groupIds[i]); + } + this.forceGraphUpdate = true; + this.body.emitter.emit("_change", { queue: true }); + }; - // are we drawing explicit boxes? (we supplied an end value) - if (combinedData[i].screen_end != undefined) { - dataWidth = combinedData[i].screen_end - combinedData[i].screen_x; - start += dataWidth * 0.5; + /** + * this cleans the group out off the legends and the dataaxis + * @param groupId + * @private + */ + LineGraph.prototype._removeGroup = function (groupId) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.removeGroup(groupId); + this.legendRight.removeGroup(groupId); + this.legendRight.redraw(); } else { - start += drawData.offset; - } - - DOMutil.drawBar(start, combinedData[i].screen_y - heightOffset, dataWidth, group.zeroPosition - combinedData[i].screen_y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); - - // draw points - if (group.options.drawPoints.enabled === true) { - var pointData = { - screen_x: combinedData[i].screen_x, - screen_y: combinedData[i].screen_y - heightOffset, - x: combinedData[i].x, - y: combinedData[i].y, - 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); + this.yAxisLeft.removeGroup(groupId); + this.legendLeft.removeGroup(groupId); + this.legendLeft.redraw(); } + delete this.groups[groupId]; } }; /** - * Fill the intersections object with counters of how many datapoints share the same x coordinates - * @param intersections - * @param combinedData + * update a group object with the group dataset entree + * + * @param group + * @param groupId * @private */ - Bargraph._getDataIntersections = function (intersections, combinedData) { - // get intersections - var coreDistance; - for (var i = 0; i < combinedData.length; i++) { - if (i + 1 < combinedData.length) { - coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x); - } - if (i > 0) { - coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x)); + LineGraph.prototype._updateGroup = function (group, groupId) { + if (!this.groups.hasOwnProperty(groupId)) { + this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.addGroup(groupId, this.groups[groupId]); + this.legendRight.addGroup(groupId, this.groups[groupId]); + } else { + this.yAxisLeft.addGroup(groupId, this.groups[groupId]); + this.legendLeft.addGroup(groupId, this.groups[groupId]); } - if (coreDistance === 0) { - if (intersections[combinedData[i].screen_x] === undefined) { - intersections[combinedData[i].screen_x] = { - amount: 0, - resolved: 0, - accumulatedPositive: 0, - accumulatedNegative: 0 - }; - } - intersections[combinedData[i].screen_x].amount += 1; + } else { + this.groups[groupId].update(group); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.updateGroup(groupId, this.groups[groupId]); + this.legendRight.updateGroup(groupId, this.groups[groupId]); + //If yAxisOrientation changed, clean out the group from the other axis. + this.yAxisLeft.removeGroup(groupId); + this.legendLeft.removeGroup(groupId); + } else { + this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); + this.legendLeft.updateGroup(groupId, this.groups[groupId]); + //If yAxisOrientation changed, clean out the group from the other axis. + this.yAxisRight.removeGroup(groupId); + this.legendRight.removeGroup(groupId); } } + this.legendLeft.redraw(); + this.legendRight.redraw(); }; /** - * Get the width and offset for bargraphs based on the coredistance between datapoints + * this updates all groups, it is used when there is an update the the itemset. * - * @param coreDistance - * @param group - * @param minWidth - * @returns {{width: Number, offset: Number}} + * @param {Array} ids + * @param {Array} groupIds * @private */ - Bargraph._getSafeDrawData = function (coreDistance, group, minWidth) { - var width, offset; - if (coreDistance < group.options.barChart.width && coreDistance > 0) { - width = coreDistance < minWidth ? minWidth : coreDistance; - - offset = 0; // recalculate offset with the new width; - if (group.options.barChart.align === 'left') { - offset -= 0.5 * coreDistance; - } else if (group.options.barChart.align === 'right') { - offset += 0.5 * coreDistance; + LineGraph.prototype._updateAllGroupData = function (ids, groupIds) { + if (this.itemsData != null) { + var groupsContent = {}; + var items = this.itemsData.get(); + var fieldId = this.itemsData._fieldId; + var idMap = {}; + if (ids) { + ids.map(function (id) { + idMap[id] = id; + }); } - } else { - // default settings - width = group.options.barChart.width; - offset = 0; - if (group.options.barChart.align === 'left') { - offset -= 0.5 * group.options.barChart.width; - } else if (group.options.barChart.align === 'right') { - offset += 0.5 * group.options.barChart.width; + + //pre-Determine array sizes, for more efficient memory claim + var groupCounts = {}; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var groupId = item.group; + if (groupId === null || groupId === undefined) { + groupId = UNGROUPED; + } + groupCounts.hasOwnProperty(groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1; } - } - return { width: width, offset: offset }; - }; + //Pre-load arrays from existing groups if items are not changed (not in ids) + var existingItemsMap = {}; + if (!groupIds && ids) { + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var existing_items = group.getItems(); - Bargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) { - if (combinedData.length > 0) { - // sort by time and by group - combinedData.sort(function (a, b) { - if (a.screen_x === b.screen_x) { - return a.groupId < b.groupId ? -1 : 1; - } else { - return a.screen_x - b.screen_x; + groupsContent[groupId] = existing_items.filter(function (item) { + existingItemsMap[item[fieldId]] = item[fieldId]; + return item[fieldId] !== idMap[item[fieldId]]; + }); + var newLength = groupCounts[groupId]; + groupCounts[groupId] -= groupsContent[groupId].length; + if (groupsContent[groupId].length < newLength) { + groupsContent[groupId][newLength - 1] = {}; + } + } } - }); - var intersections = {}; + } - Bargraph._getDataIntersections(intersections, combinedData); - groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData); - groupRanges[groupLabel].yAxisOrientation = orientation; - groupIds.push(groupLabel); - } - }; + //Now insert data into the arrays. + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var groupId = item.group; + if (groupId === null || groupId === undefined) { + groupId = UNGROUPED; + } + if (!groupIds && ids && item[fieldId] !== idMap[item[fieldId]] && existingItemsMap.hasOwnProperty(item[fieldId])) { + continue; + } + if (!groupsContent.hasOwnProperty(groupId)) { + groupsContent[groupId] = new Array(groupCounts[groupId]); + } + //Copy data (because of unmodifiable DataView input. + var extended = util.bridgeObject(item); + extended.x = util.convert(item.x, 'Date'); + extended.end = util.convert(item.end, 'Date'); + extended.orginalY = item.y; //real Y + extended.y = Number(item.y); + extended[fieldId] = item[fieldId]; - Bargraph._getStackedYRange = function (intersections, combinedData) { - var key; - var yMin = combinedData[0].screen_y; - var yMax = combinedData[0].screen_y; - for (var i = 0; i < combinedData.length; i++) { - key = combinedData[i].screen_x; - if (intersections[key] === undefined) { - yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin; - yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax; - } else { - if (combinedData[i].screen_y < 0) { - intersections[key].accumulatedNegative += combinedData[i].screen_y; - } else { - intersections[key].accumulatedPositive += combinedData[i].screen_y; + var index = groupsContent[groupId].length - groupCounts[groupId]--; + groupsContent[groupId][index] = extended; + } + + //Make sure all groups are present, to allow removal of old groups + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (!groupsContent.hasOwnProperty(groupId)) { + groupsContent[groupId] = new Array(0); + } } } - } - for (var xpos in intersections) { - if (intersections.hasOwnProperty(xpos)) { - yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin; - yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin; - yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax; - yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax; + + //Update legendas, style and axis + for (var groupId in groupsContent) { + if (groupsContent.hasOwnProperty(groupId)) { + if (groupsContent[groupId].length == 0) { + if (this.groups.hasOwnProperty(groupId)) { + this._removeGroup(groupId); + } + } else { + var group = undefined; + if (this.groupsData != undefined) { + group = this.groupsData.get(groupId); + } + if (group == undefined) { + group = { id: groupId, content: this.options.defaultGroup + groupId }; + } + this._updateGroup(group, groupId); + this.groups[groupId].setItems(groupsContent[groupId]); + } + } } + this.forceGraphUpdate = true; + this.body.emitter.emit("_change", { queue: true }); } - - return { min: yMin, max: yMax }; }; - module.exports = Bargraph; - -/***/ }, -/* 154 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; + /** + * Redraw the component, mandatory function + * @return {boolean} Returns true if the component is resized + */ + LineGraph.prototype.redraw = function () { + var resized = false; - var _typeof2 = __webpack_require__(62); + // calculate actual size and position + this.props.width = this.dom.frame.offsetWidth; + this.props.height = this.body.domProps.centerContainer.height - this.body.domProps.border.top - this.body.domProps.border.bottom; - var _typeof3 = _interopRequireDefault(_typeof2); + // check if this component is resized + resized = this._isResized() || resized; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // check whether zoomed (in that case we need to re-stack everything) + var visibleInterval = this.body.range.end - this.body.range.start; + var zoomed = visibleInterval != this.lastVisibleInterval; + this.lastVisibleInterval = visibleInterval; - var DOMutil = __webpack_require__(88); + // the svg element is three times as big as the width, this allows for fully dragging left and right + // without reloading the graph. the controls for this are bound to events in the constructor + if (resized == true) { + this.svg.style.width = util.option.asSize(3 * this.props.width); + this.svg.style.left = util.option.asSize(-this.props.width); - function Points(groupId, options) {} + // if the height of the graph is set as proportional, change the height of the svg + if ((this.options.height + '').indexOf("%") != -1 || this.updateSVGheightOnResize == true) { + this.updateSVGheight = true; + } + } - /** - * draw the data points - * - * @param {Array} dataset - * @param {Object} JSONcontainer - * @param {Object} svg | SVG DOM element - * @param {GraphGroup} group - * @param {Number} [offset] - */ - Points.draw = function (dataset, group, framework, offset) { - offset = offset || 0; - var callback = getCallback(framework, group); + // update the height of the graph on each redraw of the graph. + if (this.updateSVGheight == true) { + if (this.options.graphHeight != this.props.height + 'px') { + this.options.graphHeight = this.props.height + 'px'; + this.svg.style.height = this.props.height + 'px'; + } + this.updateSVGheight = false; + } else { + this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px'; + } - for (var i = 0; i < dataset.length; i++) { - if (!callback) { - // draw the point the simple way. - DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label); - } else { - var callbackResult = callback(dataset[i], group); // result might be true, false or an object - if (callbackResult === true || (typeof callbackResult === 'undefined' ? 'undefined' : (0, _typeof3['default'])(callbackResult)) === 'object') { - DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label); + // zoomed is here to ensure that animations are shown correctly. + if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) { + resized = this._updateGraph() || resized; + this.forceGraphUpdate = false; + } else { + // move the whole svg while dragging + if (this.lastStart != 0) { + var offset = this.body.range.start - this.lastStart; + var range = this.body.range.end - this.body.range.start; + if (this.props.width != 0) { + var rangePerPixelInv = this.props.width / range; + var xOffset = offset * rangePerPixelInv; + this.svg.style.left = -this.props.width - xOffset + 'px'; } } } + this.legendLeft.redraw(); + this.legendRight.redraw(); + return resized; }; - Points.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; - - var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2 * fillHeight); - outline.setAttributeNS(null, "class", "vis-outline"); - - //Don't call callback on icon - DOMutil.drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg); + LineGraph.prototype._getSortedGroupIds = function () { + // getting group Ids + var grouplist = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) { + grouplist.push({ id: groupId, zIndex: group.options.zIndex }); + } + } + } + util.insertSort(grouplist, function (a, b) { + var az = a.zIndex; + var bz = b.zIndex; + if (az === undefined) az = 0; + if (bz === undefined) bz = 0; + return az == bz ? 0 : az < bz ? -1 : 1; + }); + var groupIds = new Array(grouplist.length); + for (var i = 0; i < grouplist.length; i++) { + groupIds[i] = grouplist[i].id; + } + return groupIds; }; - function getGroupTemplate(group, callbackResult) { - callbackResult = typeof callbackResult === 'undefined' ? {} : callbackResult; - return { - style: callbackResult.style || group.options.drawPoints.style, - styles: callbackResult.styles || group.options.drawPoints.styles, - size: callbackResult.size || group.options.drawPoints.size, - className: callbackResult.className || group.className - }; - } - - function getCallback(framework, group) { - var callback = undefined; - // check for the graph2d onRender - if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == 'function') { - callback = framework.options.drawPoints.onRender; - } + /** + * Update and redraw the graph. + * + */ + LineGraph.prototype._updateGraph = function () { + // reset the svg elements + DOMutil.prepareElements(this.svgElements); + if (this.props.width != 0 && this.itemsData != null) { + var group, i; + var groupRanges = {}; + var changeCalled = false; + // this is the range of the SVG canvas + var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width); + var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); - // override it with the group onRender if defined - if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == 'function') { - callback = group.group.options.drawPoints.onRender; - } - return callback; - } + // getting group Ids + var groupIds = this._getSortedGroupIds(); + if (groupIds.length > 0) { + var groupsData = {}; - module.exports = Points; + // fill groups data, this only loads the data we require based on the timewindow + this._getRelevantData(groupIds, groupsData, minDate, maxDate); -/***/ }, -/* 155 */ -/***/ function(module, exports, __webpack_require__) { + // apply sampling, if disabled, it will pass through this function. + this._applySampling(groupIds, groupsData); - "use strict"; + // we transform the X coordinates to detect collisions + for (i = 0; i < groupIds.length; i++) { + this._convertXcoordinates(groupsData[groupIds[i]]); + } - var DOMutil = __webpack_require__(88); + // now all needed data has been collected we start the processing. + this._getYRanges(groupIds, groupsData, groupRanges); - function Line(groupId, options) {} + // update the Y axis first, we use this data to draw at the correct Y points + changeCalled = this._updateYAxis(groupIds, groupRanges); - Line.calcPath = function (dataset, group) { - if (dataset != null) { - if (dataset.length > 0) { - var d = []; + // at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container. + // Cleanup SVG elements on abort. + if (changeCalled == true) { + DOMutil.cleanupElements(this.svgElements); + this.abortedGraphUpdate = true; + return true; + } + this.abortedGraphUpdate = false; - // construct path from dataset - if (group.options.interpolation.enabled == true) { - d = Line._catmullRom(dataset, group); - } else { - d = Line._linear(dataset); + // With the yAxis scaled correctly, use this to get the Y values of the points. + var below = undefined; + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (this.options.stack === true && this.options.style === 'line') { + if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) { + if (below != undefined) { + this._stack(groupsData[group.id], groupsData[below.id]); + if (group.options.shaded.enabled == true && group.options.shaded.orientation !== "group") { + if (group.options.shaded.orientation == "top" && below.options.shaded.orientation !== "group") { + below.options.shaded.orientation = "group"; + below.options.shaded.groupId = group.id; + } else { + group.options.shaded.orientation = "group"; + group.options.shaded.groupId = below.id; + } + } } - return d; + below = group; + } } - } - }; - - Line.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; - - var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2 * fillHeight); - outline.setAttributeNS(null, "class", "vis-outline"); - - path = DOMutil.getSVGElement("path", framework.svgElements, framework.svg); - path.setAttributeNS(null, "class", group.className); - if (group.style !== undefined) { - path.setAttributeNS(null, "style", group.style); - } + this._convertYcoordinates(groupsData[groupIds[i]], group); + } - path.setAttributeNS(null, "d", "M" + x + "," + y + " L" + (x + iconWidth) + "," + y + ""); - if (group.options.shaded.enabled == true) { - fillPath = DOMutil.getSVGElement("path", framework.svgElements, framework.svg); - if (group.options.shaded.orientation == 'top') { - fillPath.setAttributeNS(null, "d", "M" + x + ", " + (y - fillHeight) + "L" + x + "," + y + " L" + (x + iconWidth) + "," + y + " L" + (x + iconWidth) + "," + (y - fillHeight)); - } else { - fillPath.setAttributeNS(null, "d", "M" + x + "," + y + " " + "L" + x + "," + (y + fillHeight) + " " + "L" + (x + iconWidth) + "," + (y + fillHeight) + "L" + (x + iconWidth) + "," + y); + //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines. + var paths = {}; + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.options.style === 'line' && group.options.shaded.enabled == true) { + var dataset = groupsData[groupIds[i]]; + if (dataset == null || dataset.length == 0) { + continue; + } + if (!paths.hasOwnProperty(groupIds[i])) { + paths[groupIds[i]] = Lines.calcPath(dataset, group); + } + if (group.options.shaded.orientation === "group") { + var subGroupId = group.options.shaded.groupId; + if (groupIds.indexOf(subGroupId) === -1) { + console.log(group.id + ": Unknown shading group target given:" + subGroupId); + continue; + } + if (!paths.hasOwnProperty(subGroupId)) { + paths[subGroupId] = Lines.calcPath(groupsData[subGroupId], this.groups[subGroupId]); + } + Lines.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework); + } else { + Lines.drawShading(paths[groupIds[i]], group, undefined, this.framework); + } } - fillPath.setAttributeNS(null, "class", group.className + " vis-icon-fill"); - if (group.options.shaded.style !== undefined && group.options.shaded.style !== "") { - fillPath.setAttributeNS(null, "style", group.options.shaded.style); + } + + // draw the groups, calculating paths if still necessary. + Bars.draw(groupIds, groupsData, this.framework); + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (groupsData[groupIds[i]].length > 0) { + switch (group.options.style) { + case "line": + if (!paths.hasOwnProperty(groupIds[i])) { + paths[groupIds[i]] = Lines.calcPath(groupsData[groupIds[i]], group); + } + Lines.draw(paths[groupIds[i]], group, this.framework); + //explicit no break; + case "point": + //explicit no break; + case "points": + if (group.options.style == "point" || group.options.style == "points" || group.options.drawPoints.enabled == true) { + Points.draw(groupsData[groupIds[i]], group, this.framework); + } + break; + case "bar": + // bar needs to be drawn enmasse + //explicit no break + default: + //do nothing... + } } + } } + } - if (group.options.drawPoints.enabled == true) { - var groupTemplate = { - style: group.options.drawPoints.style, - styles: group.options.drawPoints.styles, - size: group.options.drawPoints.size, - className: group.className - }; - DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg); - } + // cleanup unused svg elements + DOMutil.cleanupElements(this.svgElements); + return false; }; - Line.drawShading = function (pathArray, group, subPathArray, framework) { - // append shading to the path - if (group.options.shaded.enabled == true) { - var svgHeight = Number(framework.svg.style.height.replace('px', '')); - var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); - var type = "L"; - if (group.options.interpolation.enabled == true) { - type = "C"; - } - var dFill; - var zero = 0; - if (group.options.shaded.orientation == 'top') { - zero = 0; - } else if (group.options.shaded.orientation == 'bottom') { - zero = svgHeight; - } else { - zero = Math.min(Math.max(0, group.zeroPosition), svgHeight); - } - if (group.options.shaded.orientation == 'group' && subPathArray != null && subPathArray != undefined) { - dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' L' + subPathArray[subPathArray.length - 1][0] + "," + subPathArray[subPathArray.length - 1][1] + " " + this.serializePath(subPathArray, type, true) + subPathArray[0][0] + "," + subPathArray[0][1] + " Z"; + LineGraph.prototype._stack = function (data, subData) { + var index, dx, dy, subPrevPoint, subNextPoint; + index = 0; + // for each data point we look for a matching on in the set below + for (var j = 0; j < data.length; j++) { + subPrevPoint = undefined; + subNextPoint = undefined; + // we look for time matches or a before-after point + for (var k = index; k < subData.length; k++) { + // if times match exactly + if (subData[k].x === data[j].x) { + subPrevPoint = subData[k]; + subNextPoint = subData[k]; + index = k; + break; + } else if (subData[k].x > data[j].x) { + // overshoot + subNextPoint = subData[k]; + if (k == 0) { + subPrevPoint = subNextPoint; } else { - dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' V' + zero + ' H' + pathArray[0][0] + " Z"; - } - - fillPath.setAttributeNS(null, 'class', group.className + ' vis-fill'); - if (group.options.shaded.style !== undefined) { - fillPath.setAttributeNS(null, 'style', group.options.shaded.style); + subPrevPoint = subData[k - 1]; } - fillPath.setAttributeNS(null, 'd', dFill); + index = k; + break; + } + } + // in case the last data point has been used, we assume it stays like this. + if (subNextPoint === undefined) { + subPrevPoint = subData[subData.length - 1]; + subNextPoint = subData[subData.length - 1]; + } + // linear interpolation + dx = subNextPoint.x - subPrevPoint.x; + dy = subNextPoint.y - subPrevPoint.y; + if (dx == 0) { + data[j].y = data[j].orginalY + subNextPoint.y; + } else { + data[j].y = data[j].orginalY + dy / dx * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y } + } }; /** - * draw a line graph + * first select and preprocess the data from the datasets. + * the groups have their preselection of data, we now loop over this data to see + * what data we need to draw. Sorted data is much faster. + * more optimization is possible by doing the sampling before and using the binary search + * to find the end date to determine the increment. * - * @param dataset - * @param group + * @param {array} groupIds + * @param {object} groupsData + * @param {date} minDate + * @param {date} maxDate + * @private */ - Line.draw = function (pathArray, group, framework) { - if (pathArray != null && pathArray != undefined) { - var path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); - path.setAttributeNS(null, "class", group.className); - if (group.style !== undefined) { - path.setAttributeNS(null, "style", group.style); - } - - var type = "L"; - if (group.options.interpolation.enabled == true) { - type = "C"; - } - // copy properties to path for drawing. - path.setAttributeNS(null, 'd', 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false)); - } - }; - - Line.serializePath = function (pathArray, type, inverse) { - if (pathArray.length < 2) { - //Too little data to create a path. - return ""; - } - var d = type; - if (inverse) { - for (var i = pathArray.length - 2; i > 0; i--) { - d += pathArray[i][0] + "," + pathArray[i][1] + " "; + LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) { + var group, i, j, item; + if (groupIds.length > 0) { + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + var itemsData = group.getItems(); + // optimization for sorted data + if (group.options.sort == true) { + var dateComparator = function dateComparator(a, b) { + return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1; + }; + var first = Math.max(0, util.binarySearchValue(itemsData, minDate, 'x', 'before', dateComparator)); + var last = Math.min(itemsData.length, util.binarySearchValue(itemsData, maxDate, 'x', 'after', dateComparator) + 1); + if (last <= 0) { + last = itemsData.length; } - } else { - for (var i = 1; i < pathArray.length; i++) { - d += pathArray[i][0] + "," + pathArray[i][1] + " "; + var dataContainer = new Array(last - first); + for (j = first; j < last; j++) { + item = group.itemsData[j]; + dataContainer[j - first] = item; } + groupsData[groupIds[i]] = dataContainer; + } else { + // If unsorted data, all data is relevant, just returning entire structure + groupsData[groupIds[i]] = group.itemsData; + } } - return d; + } }; /** - * This uses an uniform parametrization of the interpolation algorithm: - * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al. - * @param data - * @returns {string} + * + * @param groupIds + * @param groupsData * @private */ - Line._catmullRomUniform = function (data) { - // catmull rom - var p0, p1, p2, p3, bp1, bp2; - var d = []; - d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]); - var normalization = 1 / 6; - var length = data.length; - for (var i = 0; i < length - 1; i++) { - - p0 = i == 0 ? data[0] : data[i - 1]; - p1 = data[i]; - p2 = data[i + 1]; - p3 = i + 2 < length ? data[i + 2] : p2; - - // Catmull-Rom to Cubic Bezier conversion matrix - // 0 1 0 0 - // -1/6 1 1/6 0 - // 0 1/6 1 -1/6 - // 0 0 1 0 + LineGraph.prototype._applySampling = function (groupIds, groupsData) { + var group; + if (groupIds.length > 0) { + for (var i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.options.sampling == true) { + var dataContainer = groupsData[groupIds[i]]; + if (dataContainer.length > 0) { + var increment = 1; + var amountOfPoints = dataContainer.length; - // bp0 = { x: p1.x, y: p1.y }; - bp1 = { - screen_x: (-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization, - screen_y: (-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization - }; - bp2 = { - screen_x: (p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization, - screen_y: (p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization - }; - // bp0 = { x: p2.x, y: p2.y }; + // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop + // of width changing of the yAxis. + //TODO: This assumes sorted data, but that's not guaranteed! + var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x); + var pointsPerPixel = amountOfPoints / xDistance; + increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel))); - d.push([bp1.screen_x, bp1.screen_y]); - d.push([bp2.screen_x, bp2.screen_y]); - d.push([p2.screen_x, p2.screen_y]); + var sampledData = new Array(amountOfPoints); + for (var j = 0; j < amountOfPoints; j += increment) { + var idx = Math.round(j / increment); + sampledData[idx] = dataContainer[j]; + } + groupsData[groupIds[i]] = sampledData.splice(0, Math.round(amountOfPoints / increment)); + } + } } - - return d; + } }; /** - * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm. - * By default, the centripetal parameterization is used because this gives the nicest results. - * These parameterizations are relatively heavy because the distance between 4 points have to be calculated. * - * One optimization can be used to reuse distances since this is a sliding window approach. - * @param data - * @param group - * @returns {string} + * + * @param {array} groupIds + * @param {object} groupsData + * @param {object} groupRanges | this is being filled here * @private */ - Line._catmullRom = function (data, group) { - var alpha = group.options.interpolation.alpha; - if (alpha == 0 || alpha === undefined) { - return this._catmullRomUniform(data); - } else { - var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M; - var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA; - var d = []; - d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]); - var length = data.length; - for (var i = 0; i < length - 1; i++) { - - p0 = i == 0 ? data[0] : data[i - 1]; - p1 = data[i]; - p2 = data[i + 1]; - p3 = i + 2 < length ? data[i + 2] : p2; - - d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2)); - d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2)); - d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2)); - - // Catmull-Rom to Cubic Bezier conversion matrix - - // A = 2d1^2a + 3d1^a * d2^a + d3^2a - // B = 2d3^2a + 3d3^a * d2^a + d2^2a - - // [ 0 1 0 0 ] - // [ -d2^2a /N A/N d1^2a /N 0 ] - // [ 0 d3^2a /M B/M -d2^2a /M ] - // [ 0 0 1 0 ] - - d3powA = Math.pow(d3, alpha); - d3pow2A = Math.pow(d3, 2 * alpha); - d2powA = Math.pow(d2, alpha); - d2pow2A = Math.pow(d2, 2 * alpha); - d1powA = Math.pow(d1, alpha); - d1pow2A = Math.pow(d1, 2 * alpha); - - A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A; - B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A; - N = 3 * d1powA * (d1powA + d2powA); - if (N > 0) { - N = 1 / N; - } - M = 3 * d3powA * (d3powA + d2powA); - if (M > 0) { - M = 1 / M; - } - - bp1 = { - screen_x: (-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N, - screen_y: (-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N - }; - - bp2 = { - screen_x: (d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M, - screen_y: (d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M - }; - - if (bp1.screen_x == 0 && bp1.screen_y == 0) { - bp1 = p1; - } - if (bp2.screen_x == 0 && bp2.screen_y == 0) { - bp2 = p2; - } - d.push([bp1.screen_x, bp1.screen_y]); - d.push([bp2.screen_x, bp2.screen_y]); - d.push([p2.screen_x, p2.screen_y]); + LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) { + var groupData, group, i; + var combinedDataLeft = []; + var combinedDataRight = []; + var options; + if (groupIds.length > 0) { + for (i = 0; i < groupIds.length; i++) { + groupData = groupsData[groupIds[i]]; + options = this.groups[groupIds[i]].options; + if (groupData.length > 0) { + group = this.groups[groupIds[i]]; + // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. + if (options.stack === true && options.style === 'bar') { + if (options.yAxisOrientation === 'left') { + combinedDataLeft = combinedDataLeft.concat(groupData); + } else { + combinedDataRight = combinedDataRight.concat(groupData); + } + } else { + groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]); } - - return d; + } } + + // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. + Bars.getStackedYRange(combinedDataLeft, groupRanges, groupIds, '__barStackLeft', 'left'); + Bars.getStackedYRange(combinedDataRight, groupRanges, groupIds, '__barStackRight', 'right'); + } }; /** - * this generates the SVG path for a linear drawing between datapoints. - * @param data - * @returns {string} + * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. + * @param {Array} groupIds + * @param {Object} groupRanges * @private */ - Line._linear = function (data) { - // linear - var d = []; - for (var i = 0; i < data.length; i++) { - d.push([data[i].screen_x, data[i].screen_y]); + LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { + var resized = false; + var yAxisLeftUsed = false; + var yAxisRightUsed = false; + var minLeft = 1e9, + minRight = 1e9, + maxLeft = -1e9, + maxRight = -1e9, + minVal, + maxVal; + // if groups are present + if (groupIds.length > 0) { + // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop. + for (var i = 0; i < groupIds.length; i++) { + var group = this.groups[groupIds[i]]; + if (group && group.options.yAxisOrientation != 'right') { + yAxisLeftUsed = true; + minLeft = 1e9; + maxLeft = -1e9; + } else if (group && group.options.yAxisOrientation) { + yAxisRightUsed = true; + minRight = 1e9; + maxRight = -1e9; + } } - return d; - }; - module.exports = Line; + // if there are items: + for (var i = 0; i < groupIds.length; i++) { + if (groupRanges.hasOwnProperty(groupIds[i])) { + if (groupRanges[groupIds[i]].ignore !== true) { + minVal = groupRanges[groupIds[i]].min; + maxVal = groupRanges[groupIds[i]].max; -/***/ }, -/* 156 */ -/***/ function(module, exports, __webpack_require__) { + if (groupRanges[groupIds[i]].yAxisOrientation != 'right') { + yAxisLeftUsed = true; + minLeft = minLeft > minVal ? minVal : minLeft; + maxLeft = maxLeft < maxVal ? maxVal : maxLeft; + } else { + yAxisRightUsed = true; + minRight = minRight > minVal ? minVal : minRight; + maxRight = maxRight < maxVal ? maxVal : maxRight; + } + } + } + } - 'use strict'; + if (yAxisLeftUsed == true) { + this.yAxisLeft.setRange(minLeft, maxLeft); + } + if (yAxisRightUsed == true) { + this.yAxisRight.setRange(minRight, maxRight); + } + } + resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized; + resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized; - var _keys = __webpack_require__(58); + if (yAxisRightUsed == true && yAxisLeftUsed == true) { + this.yAxisLeft.drawIcons = true; + this.yAxisRight.drawIcons = true; + } else { + this.yAxisLeft.drawIcons = false; + this.yAxisRight.drawIcons = false; + } + this.yAxisRight.master = !yAxisLeftUsed; + this.yAxisRight.masterAxis = this.yAxisLeft; - var _keys2 = _interopRequireDefault(_keys); + if (this.yAxisRight.master == false) { + if (yAxisRightUsed == true) { + this.yAxisLeft.lineOffset = this.yAxisRight.width; + } else { + this.yAxisLeft.lineOffset = 0; + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + resized = this.yAxisLeft.redraw() || resized; + resized = this.yAxisRight.redraw() || resized; + } else { + resized = this.yAxisRight.redraw() || resized; + } - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(88); - var Component = __webpack_require__(128); + // clean the accumulated lists + var tempGroups = ['__barStackLeft', '__barStackRight', '__lineStackLeft', '__lineStackRight']; + for (var i = 0; i < tempGroups.length; i++) { + if (groupIds.indexOf(tempGroups[i]) != -1) { + groupIds.splice(groupIds.indexOf(tempGroups[i]), 1); + } + } + + return resized; + }; /** - * Legend for Graph2d + * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function + * + * @param {boolean} axisUsed + * @returns {boolean} + * @private + * @param axis */ - function Legend(body, options, side, linegraphOptions) { + LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { + var changed = false; + if (axisUsed == false) { + if (axis.dom.frame.parentNode && axis.hidden == false) { + axis.hide(); + changed = true; + } + } else { + if (!axis.dom.frame.parentNode && axis.hidden == true) { + axis.show(); + changed = true; + } + } + return changed; + }; + + /** + * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for + * the yAxis. + * + * @param datapoints + * @returns {Array} + * @private + */ + LineGraph.prototype._convertXcoordinates = function (datapoints) { + var toScreen = this.body.util.toScreen; + for (var i = 0; i < datapoints.length; i++) { + datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width; + datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations + if (datapoints[i].end != undefined) { + datapoints[i].screen_end = toScreen(datapoints[i].end) + this.props.width; + } else { + datapoints[i].screen_end = undefined; + } + } + }; + + /** + * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for + * the yAxis. + * + * @param datapoints + * @param group + * @returns {Array} + * @private + */ + LineGraph.prototype._convertYcoordinates = function (datapoints, group) { + var axis = this.yAxisLeft; + var svgHeight = Number(this.svg.style.height.replace('px', '')); + if (group.options.yAxisOrientation == 'right') { + axis = this.yAxisRight; + } + for (var i = 0; i < datapoints.length; i++) { + datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y)); + } + group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); + }; + + module.exports = LineGraph; + +/***/ }), +/* 150 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(88); + var Component = __webpack_require__(120); + var DataScale = __webpack_require__(151); + /** + * A horizontal time axis + * @param {Object} [options] See DataAxis.setOptions for the available + * options. + * @constructor DataAxis + * @extends Component + * @param body + */ + function DataAxis(body, options, svg, linegraphOptions) { + this.id = util.randomUUID(); this.body = body; + this.defaultOptions = { - enabled: false, - icons: true, - iconSize: 20, - iconSpacing: 6, + orientation: 'left', // supported: 'left', 'right' + showMinorLabels: true, + showMajorLabels: true, + icons: false, + majorLinesOffset: 7, + minorLinesOffset: 4, + labelOffsetX: 10, + labelOffsetY: 2, + iconWidth: 20, + width: '40px', + visible: true, + alignZeros: true, left: { - visible: true, - position: 'top-left' // top/bottom - left,center,right + range: { min: undefined, max: undefined }, + format: function format(value) { + return '' + parseFloat(value.toPrecision(3)); + }, + title: { text: undefined, style: undefined } }, right: { - visible: true, - position: 'top-right' // top/bottom - left,center,right + range: { min: undefined, max: undefined }, + format: function format(value) { + return '' + parseFloat(value.toPrecision(3)); + }, + title: { text: undefined, style: undefined } } }; - this.side = side; - this.options = util.extend({}, this.defaultOptions); this.linegraphOptions = linegraphOptions; + this.linegraphSVG = svg; + this.props = {}; + this.DOMelements = { // dynamic elements + lines: {}, + labels: {}, + title: {} + }; - this.svgElements = {}; this.dom = {}; + this.scale = undefined; + this.range = { start: 0, end: 0 }; + + this.options = util.extend({}, this.defaultOptions); + this.conversionFactor = 1; + + this.setOptions(options); + this.width = Number(('' + this.options.width).replace("px", "")); + this.minWidth = this.width; + this.height = this.linegraphSVG.getBoundingClientRect().height; + this.hidden = false; + + this.stepPixels = 25; + this.zeroCrossing = -1; + this.amountOfSteps = -1; + + this.lineOffset = 0; + this.master = true; + this.masterAxis = null; + this.svgElements = {}; + this.iconsRemoved = false; + this.groups = {}; this.amountOfGroups = 0; + + // create the HTML DOM this._create(); this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups }; - this.setOptions(options); + var me = this; + this.body.emitter.on("verticalDrag", function () { + me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; + }); } - Legend.prototype = new Component(); + DataAxis.prototype = new Component(); - Legend.prototype.clear = function () { - this.groups = {}; - this.amountOfGroups = 0; + DataAxis.prototype.addGroup = function (label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; + } + this.amountOfGroups += 1; }; - Legend.prototype.addGroup = function (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; - } + DataAxis.prototype.updateGroup = function (label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { this.amountOfGroups += 1; } - }; - - Legend.prototype.updateGroup = function (label, graphOptions) { this.groups[label] = graphOptions; }; - Legend.prototype.removeGroup = function (label) { + DataAxis.prototype.removeGroup = function (label) { if (this.groups.hasOwnProperty(label)) { delete this.groups[label]; this.amountOfGroups -= 1; } }; - Legend.prototype._create = function () { + DataAxis.prototype.setOptions = function (options) { + if (options) { + var redraw = false; + if (this.options.orientation != options.orientation && options.orientation !== undefined) { + redraw = true; + } + var fields = ['orientation', 'showMinorLabels', 'showMajorLabels', 'icons', 'majorLinesOffset', 'minorLinesOffset', 'labelOffsetX', 'labelOffsetY', 'iconWidth', 'width', 'visible', 'left', 'right', 'alignZeros']; + util.selectiveDeepExtend(fields, this.options, options); + + this.minWidth = Number(('' + this.options.width).replace("px", "")); + if (redraw === true && this.dom.frame) { + this.hide(); + this.show(); + } + } + }; + + /** + * Create the HTML DOM for the DataAxis + */ + DataAxis.prototype._create = function () { this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'vis-legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; + this.dom.frame.style.width = this.options.width; + this.dom.frame.style.height = this.height; - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'vis-legend-text'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; + this.dom.lineContainer = document.createElement('div'); + this.dom.lineContainer.style.width = '100%'; + this.dom.lineContainer.style.height = this.height; + this.dom.lineContainer.style.position = 'relative'; + // create svg element for graph drawing. this.svg = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 + 'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; + this.svg.style.position = "absolute"; + this.svg.style.top = '0px'; this.svg.style.height = '100%'; - + this.svg.style.width = '100%'; + this.svg.style.display = "block"; this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); + }; + + DataAxis.prototype._redrawGroupIcons = function () { + DOMutil.prepareElements(this.svgElements); + + var x; + var iconWidth = this.options.iconWidth; + var iconHeight = 15; + var iconOffset = 4; + var y = iconOffset + 0.5 * iconHeight; + + if (this.options.orientation === 'left') { + x = iconOffset; + } else { + x = this.width - iconWidth - iconOffset; + } + + var groupArray = (0, _keys2['default'])(this.groups); + groupArray.sort(function (a, b) { + return a < b ? -1 : 1; + }); + + for (var i = 0; i < groupArray.length; i++) { + var groupId = groupArray[i]; + if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) { + this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y); + y += iconHeight + iconOffset; + } + } + + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = false; + }; + + DataAxis.prototype._cleanupIcons = function () { + if (this.iconsRemoved === false) { + DOMutil.prepareElements(this.svgElements); + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = true; + } }; /** - * Hide the component from the DOM + * Create the HTML DOM for the DataAxis */ - Legend.prototype.hide = function () { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); + DataAxis.prototype.show = function () { + this.hidden = false; + if (!this.dom.frame.parentNode) { + if (this.options.orientation === 'left') { + this.body.dom.left.appendChild(this.dom.frame); + } else { + this.body.dom.right.appendChild(this.dom.frame); + } + } + + if (!this.dom.lineContainer.parentNode) { + this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); } }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Create the HTML DOM for the DataAxis */ - Legend.prototype.show = function () { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); + DataAxis.prototype.hide = function () { + this.hidden = true; + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } + + if (this.dom.lineContainer.parentNode) { + this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); } }; - Legend.prototype.setOptions = function (options) { - var fields = ['enabled', 'orientation', 'icons', 'left', 'right']; - util.selectiveDeepExtend(fields, this.options, options); + /** + * Set a range (start and end) + * @param end + * @param start + * @param end + */ + DataAxis.prototype.setRange = function (start, end) { + this.range.start = start; + this.range.end = end; }; - Legend.prototype.redraw = function () { + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + DataAxis.prototype.redraw = function () { + var resized = false; var activeGroups = 0; - var groupArray = (0, _keys2['default'])(this.groups); - groupArray.sort(function (a, b) { - return a < b ? -1 : 1; - }); - for (var i = 0; i < groupArray.length; i++) { - var groupId = groupArray[i]; - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; + // Make sure the line container adheres to the vertical scrolling. + this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; + + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) { + activeGroups++; + } } } - - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + if (this.amountOfGroups === 0 || activeGroups === 0) { this.hide(); } else { this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = this.options.iconSize + 15 + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 + 'px'; - this.svg.style.right = ''; - } else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = this.options.iconSize + 15 + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 + 'px'; - this.svg.style.left = ''; - } + this.height = Number(this.linegraphSVG.style.height.replace("px", "")); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px", "")) + 'px'; - this.dom.frame.style.bottom = ''; + // svg offsetheight did not work in firefox and explorer... + this.dom.lineContainer.style.height = this.height + 'px'; + this.width = this.options.visible === true ? Number(('' + this.options.width).replace("px", "")) : 0; + + var props = this.props; + var frame = this.dom.frame; + + // update classname + frame.className = 'vis-data-axis'; + + // calculate character width and height + this._calculateCharSize(); + + var orientation = this.options.orientation; + var showMinorLabels = this.options.showMinorLabels; + var showMajorLabels = this.options.showMajorLabels; + + // determine the width and height of the elements for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + + props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; + props.minorLineHeight = 1; + props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; + props.majorLineHeight = 1; + + // take frame offline while updating (is almost twice as fast) + if (orientation === 'left') { + frame.style.top = '0'; + frame.style.left = '0'; + frame.style.bottom = ''; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + this.props.width = this.body.domProps.left.width; + this.props.height = this.body.domProps.left.height; } else { - var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; - this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px", "")) + 'px'; - this.dom.frame.style.top = ''; + // right + frame.style.top = ''; + frame.style.bottom = '0'; + frame.style.left = '0'; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + this.props.width = this.body.domProps.right.width; + this.props.height = this.body.domProps.right.height; } - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; + resized = this._redrawLabels(); + resized = this._isResized() || resized; + + if (this.options.icons === true) { + this._redrawGroupIcons(); } else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'; - this.drawLegendIcons(); + this._cleanupIcons(); } - var content = ''; - for (var i = 0; i < groupArray.length; i++) { - var groupId = groupArray[i]; - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - content += this.groups[groupId].content + '
'; - } - } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = 0.75 * this.options.iconSize + this.options.iconSpacing + 'px'; + this._redrawTitle(orientation); } + return resized; }; - Legend.prototype.drawLegendIcons = function () { - if (this.dom.frame.parentNode) { - var groupArray = (0, _keys2['default'])(this.groups); - groupArray.sort(function (a, b) { - return a < b ? -1 : 1; - }); + /** + * Repaint major and minor text labels and vertical grid lines + * @private + */ + DataAxis.prototype._redrawLabels = function () { + var _this = this; - // this resets the elements so the order is maintained - DOMutil.resetElements(this.svgElements); + var resized = false; + DOMutil.prepareElements(this.DOMelements.lines); + DOMutil.prepareElements(this.DOMelements.labels); + var orientation = this.options['orientation']; + var customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {}; - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px', '')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; + //Override range with manual options: + var autoScaleEnd = true; + if (customRange.max != undefined) { + this.range.end = customRange.max; + autoScaleEnd = false; + } + var autoScaleStart = true; + if (customRange.min != undefined) { + this.range.start = customRange.min; + autoScaleStart = false; + } - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; + this.scale = new DataScale(this.range.start, this.range.end, autoScaleStart, autoScaleEnd, this.dom.frame.offsetHeight, this.props.majorCharHeight, this.options.alignZeros, this.options[orientation].format); - for (var i = 0; i < groupArray.length; i++) { - var groupId = groupArray[i]; - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y); - y += iconHeight + this.options.iconSpacing; - } - } + if (this.master === false && this.masterAxis != undefined) { + this.scale.followScale(this.masterAxis.scale); } - }; - module.exports = Legend; + //Is updated in side-effect of _redrawLabel(): + this.maxLabelSize = 0; -/***/ }, -/* 157 */ -/***/ function(module, exports) { + var lines = this.scale.getLines(); + lines.forEach(function (line) { + var y = line.y; + var isMajor = line.major; + if (_this.options['showMinorLabels'] && isMajor === false) { + _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-minor', _this.props.minorCharHeight); + } + if (isMajor) { + if (y >= 0) { + _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-major', _this.props.majorCharHeight); + } + } + if (_this.master === true) { + if (isMajor) { + _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-major', _this.options.majorLinesOffset, _this.props.majorLineWidth); + } else { + _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-minor', _this.options.minorLinesOffset, _this.props.minorLineWidth); + } + } + }); - 'use strict'; + // Note that title is rotated, so we're using the height, not width! + var titleWidth = 0; + if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) { + titleWidth = this.props.titleCharHeight; + } + var offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15; - Object.defineProperty(exports, "__esModule", { - value: true - }); - /** - * This object contains all possible options. It will check if the types are correct, if required if the option is one - * of the allowed values. - * - * __any__ means that the name of the property does not matter. - * __type__ is a required field for all objects and contains the allowed types of all objects - */ - var string = 'string'; - var bool = 'boolean'; - var number = 'number'; - var array = 'array'; - var date = 'date'; - var object = 'object'; // should only be in a __type__ property - var dom = 'dom'; - var moment = 'moment'; - var any = 'any'; - - var allOptions = { - configure: { - enabled: { 'boolean': bool }, - filter: { 'boolean': bool, 'function': 'function' }, - container: { dom: dom }, - __type__: { object: object, 'boolean': bool, 'function': 'function' } - }, - - //globals : - yAxisOrientation: { string: ['left', 'right'] }, - defaultGroup: { string: string }, - sort: { 'boolean': bool }, - sampling: { 'boolean': bool }, - stack: { 'boolean': bool }, - graphHeight: { string: string, number: number }, - shaded: { - enabled: { 'boolean': bool }, - orientation: { string: ['bottom', 'top', 'zero', 'group'] }, // top, bottom, zero, group - groupId: { object: object }, - __type__: { 'boolean': bool, object: object } - }, - style: { string: ['line', 'bar', 'points'] }, // line, bar - barChart: { - width: { number: number }, - minWidth: { number: number }, - sideBySide: { 'boolean': bool }, - align: { string: ['left', 'center', 'right'] }, - __type__: { object: object } - }, - interpolation: { - enabled: { 'boolean': bool }, - parametrization: { string: ['centripetal', 'chordal', 'uniform'] }, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - alpha: { number: number }, - __type__: { object: object, 'boolean': bool } - }, - drawPoints: { - enabled: { 'boolean': bool }, - onRender: { 'function': 'function' }, - size: { number: number }, - style: { string: ['square', 'circle'] }, // square, circle - __type__: { object: object, 'boolean': bool, 'function': 'function' } - }, - dataAxis: { - showMinorLabels: { 'boolean': bool }, - showMajorLabels: { 'boolean': bool }, - icons: { 'boolean': bool }, - width: { string: string, number: number }, - visible: { 'boolean': bool }, - alignZeros: { 'boolean': bool }, - left: { - range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } }, - format: { 'function': 'function' }, - title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } }, - __type__: { object: object } - }, - right: { - range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } }, - format: { 'function': 'function' }, - title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } }, - __type__: { object: object } - }, - __type__: { object: object } - }, - legend: { - enabled: { 'boolean': bool }, - icons: { 'boolean': bool }, - left: { - visible: { 'boolean': bool }, - position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] }, - __type__: { object: object } - }, - right: { - visible: { 'boolean': bool }, - position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] }, - __type__: { object: object } - }, - __type__: { object: object, 'boolean': bool } - }, - groups: { - visibility: { any: any }, - __type__: { object: object } - }, + // this will resize the yAxis to accommodate the labels. + if (this.maxLabelSize > this.width - offset && this.options.visible === true) { + this.width = this.maxLabelSize + offset; + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + resized = true; + } + // this will resize the yAxis if it is too big for the labels. + else if (this.maxLabelSize < this.width - offset && this.options.visible === true && this.width > this.minWidth) { + this.width = Math.max(this.minWidth, this.maxLabelSize + offset); + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + resized = true; + } else { + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + resized = false; + } - autoResize: { 'boolean': bool }, - throttleRedraw: { number: number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511 - clickToUse: { 'boolean': bool }, - end: { number: number, date: date, string: string, moment: moment }, - format: { - minorLabels: { - millisecond: { string: string, 'undefined': 'undefined' }, - second: { string: string, 'undefined': 'undefined' }, - minute: { string: string, 'undefined': 'undefined' }, - hour: { string: string, 'undefined': 'undefined' }, - weekday: { string: string, 'undefined': 'undefined' }, - day: { string: string, 'undefined': 'undefined' }, - month: { string: string, 'undefined': 'undefined' }, - year: { string: string, 'undefined': 'undefined' }, - __type__: { object: object } - }, - majorLabels: { - millisecond: { string: string, 'undefined': 'undefined' }, - second: { string: string, 'undefined': 'undefined' }, - minute: { string: string, 'undefined': 'undefined' }, - hour: { string: string, 'undefined': 'undefined' }, - weekday: { string: string, 'undefined': 'undefined' }, - day: { string: string, 'undefined': 'undefined' }, - month: { string: string, 'undefined': 'undefined' }, - year: { string: string, 'undefined': 'undefined' }, - __type__: { object: object } - }, - __type__: { object: object } - }, - moment: { 'function': 'function' }, - height: { string: string, number: number }, - hiddenDates: { - start: { date: date, number: number, string: string, moment: moment }, - end: { date: date, number: number, string: string, moment: moment }, - repeat: { string: string }, - __type__: { object: object, array: array } - }, - locale: { string: string }, - locales: { - __any__: { any: any }, - __type__: { object: object } - }, - max: { date: date, number: number, string: string, moment: moment }, - maxHeight: { number: number, string: string }, - maxMinorChars: { number: number }, - min: { date: date, number: number, string: string, moment: moment }, - minHeight: { number: number, string: string }, - moveable: { 'boolean': bool }, - multiselect: { 'boolean': bool }, - orientation: { string: string }, - showCurrentTime: { 'boolean': bool }, - showMajorLabels: { 'boolean': bool }, - showMinorLabels: { 'boolean': bool }, - start: { date: date, number: number, string: string, moment: moment }, - timeAxis: { - scale: { string: string, 'undefined': 'undefined' }, - step: { number: number, 'undefined': 'undefined' }, - __type__: { object: object } - }, - width: { string: string, number: number }, - zoomable: { 'boolean': bool }, - zoomKey: { string: ['ctrlKey', 'altKey', 'metaKey', ''] }, - zoomMax: { number: number }, - zoomMin: { number: number }, - zIndex: { number: number }, - __type__: { object: object } + return resized; }; - var configureOptions = { - global: { - //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly - sort: true, - sampling: true, - stack: false, - shaded: { - enabled: false, - orientation: ['zero', 'top', 'bottom', 'group'] // zero, top, bottom - }, - style: ['line', 'bar', 'points'], // line, bar - barChart: { - width: [50, 5, 100, 5], - minWidth: [50, 5, 100, 5], - sideBySide: false, - align: ['left', 'center', 'right'] // left, center, right - }, - interpolation: { - enabled: true, - parametrization: ['centripetal', 'chordal', 'uniform'] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - }, - drawPoints: { - enabled: true, - size: [6, 2, 30, 1], - style: ['square', 'circle'] // square, circle - }, - dataAxis: { - showMinorLabels: true, - showMajorLabels: true, - icons: false, - width: [40, 0, 200, 1], - visible: true, - alignZeros: true, - left: { - //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined}, - //format: function (value) {return value;}, - title: { text: '', style: '' } - }, - right: { - //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined}, - //format: function (value) {return value;}, - title: { text: '', style: '' } - } - }, - legend: { - enabled: false, - icons: true, - left: { - visible: true, - position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right - }, - right: { - visible: true, - position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right - } - }, + DataAxis.prototype.convertValue = function (value) { + return this.scale.convertValue(value); + }; - autoResize: true, - clickToUse: false, - end: '', - format: { - minorLabels: { - millisecond: 'SSS', - second: 's', - minute: 'HH:mm', - hour: 'HH:mm', - weekday: 'ddd D', - day: 'D', - month: 'MMM', - year: 'YYYY' - }, - majorLabels: { - millisecond: 'HH:mm:ss', - second: 'D MMMM HH:mm', - minute: 'ddd D MMMM', - hour: 'ddd D MMMM', - weekday: 'MMMM YYYY', - day: 'MMMM YYYY', - month: 'YYYY', - year: '' - } - }, + DataAxis.prototype.screenToValue = function (x) { + return this.scale.screenToValue(x); + }; - height: '', - locale: '', - max: '', - maxHeight: '', - maxMinorChars: [7, 0, 20, 1], - min: '', - minHeight: '', - moveable: true, - orientation: ['both', 'bottom', 'top'], - showCurrentTime: false, - showMajorLabels: true, - showMinorLabels: true, - start: '', - width: '100%', - zoomable: true, - zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''], - zoomMax: [315360000000000, 10, 315360000000000, 1], - zoomMin: [10, 10, 315360000000000, 1], - zIndex: 0 + /** + * Create a label for the axis at position x + * @private + * @param y + * @param text + * @param orientation + * @param className + * @param characterHeight + */ + DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { + // reuse redundant label + var label = DOMutil.getDOMElement('div', this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); + label.className = className; + label.innerHTML = text; + if (orientation === 'left') { + label.style.left = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "right"; + } else { + label.style.right = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "left"; } - }; - exports.allOptions = allOptions; - exports.configureOptions = configureOptions; + label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; -/***/ }, -/* 158 */ -/***/ function(module, exports, __webpack_require__) { + text += ''; - 'use strict'; + var largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth); + if (this.maxLabelSize < text.length * largestWidth) { + this.maxLabelSize = text.length * largestWidth; + } + }; - // utils - exports.util = __webpack_require__(1); - exports.DOMutil = __webpack_require__(88); + /** + * Create a minor line for the axis at position y + * @param y + * @param orientation + * @param className + * @param offset + * @param width + */ + DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { + if (this.master === true) { + var line = DOMutil.getDOMElement('div', this.DOMelements.lines, this.dom.lineContainer); //this.dom.redundant.lines.shift(); + line.className = className; + line.innerHTML = ''; - // data - exports.DataSet = __webpack_require__(89); - exports.DataView = __webpack_require__(93); - exports.Queue = __webpack_require__(92); + if (orientation === 'left') { + line.style.left = this.width - offset + 'px'; + } else { + line.style.right = this.width - offset + 'px'; + } - // Network - exports.Network = __webpack_require__(159); - exports.network = { - Images: __webpack_require__(160), - dotparser: __webpack_require__(228), - gephiParser: __webpack_require__(229), - allOptions: __webpack_require__(224) - }; - exports.network.convertDot = function (input) { - return exports.network.dotparser.DOTToGraph(input); - }; - exports.network.convertGephi = function (input, options) { - return exports.network.gephiParser.parseGephi(input, options); + line.style.width = width + 'px'; + line.style.top = y + 'px'; + } }; - // bundled external libraries - exports.moment = __webpack_require__(82); - exports.Hammer = __webpack_require__(112); - exports.keycharm = __webpack_require__(115); - -/***/ }, -/* 159 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Create a title for the axis + * @private + * @param orientation + */ + DataAxis.prototype._redrawTitle = function (orientation) { + DOMutil.prepareElements(this.DOMelements.title); - 'use strict'; + // Check if the title is defined for this axes + if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) { + var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame); + title.className = 'vis-y-axis vis-title vis-' + orientation; + title.innerHTML = this.options[orientation].title.text; - var _Images = __webpack_require__(160); + // Add style - if provided + if (this.options[orientation].title.style !== undefined) { + util.addCssText(title, this.options[orientation].title.style); + } - var _Images2 = _interopRequireDefault(_Images); + if (orientation === 'left') { + title.style.left = this.props.titleCharHeight + 'px'; + } else { + title.style.right = this.props.titleCharHeight + 'px'; + } - var _Groups = __webpack_require__(161); + title.style.width = this.height + 'px'; + } - var _Groups2 = _interopRequireDefault(_Groups); + // we need to clean up in case we did not use all elements. + DOMutil.cleanupElements(this.DOMelements.title); + }; - var _NodesHandler = __webpack_require__(162); + /** + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private + */ + DataAxis.prototype._calculateCharSize = function () { + // determine the char width and height on the minor axis + if (!('minorCharHeight' in this.props)) { + var textMinor = document.createTextNode('0'); + var measureCharMinor = document.createElement('div'); + measureCharMinor.className = 'vis-y-axis vis-minor vis-measure'; + measureCharMinor.appendChild(textMinor); + this.dom.frame.appendChild(measureCharMinor); - var _NodesHandler2 = _interopRequireDefault(_NodesHandler); + this.props.minorCharHeight = measureCharMinor.clientHeight; + this.props.minorCharWidth = measureCharMinor.clientWidth; - var _EdgesHandler = __webpack_require__(195); + this.dom.frame.removeChild(measureCharMinor); + } - var _EdgesHandler2 = _interopRequireDefault(_EdgesHandler); + if (!('majorCharHeight' in this.props)) { + var textMajor = document.createTextNode('0'); + var measureCharMajor = document.createElement('div'); + measureCharMajor.className = 'vis-y-axis vis-major vis-measure'; + measureCharMajor.appendChild(textMajor); + this.dom.frame.appendChild(measureCharMajor); - var _PhysicsEngine = __webpack_require__(204); + this.props.majorCharHeight = measureCharMajor.clientHeight; + this.props.majorCharWidth = measureCharMajor.clientWidth; - var _PhysicsEngine2 = _interopRequireDefault(_PhysicsEngine); + this.dom.frame.removeChild(measureCharMajor); + } - var _Clustering = __webpack_require__(213); + if (!('titleCharHeight' in this.props)) { + var textTitle = document.createTextNode('0'); + var measureCharTitle = document.createElement('div'); + measureCharTitle.className = 'vis-y-axis vis-title vis-measure'; + measureCharTitle.appendChild(textTitle); + this.dom.frame.appendChild(measureCharTitle); - var _Clustering2 = _interopRequireDefault(_Clustering); + this.props.titleCharHeight = measureCharTitle.clientHeight; + this.props.titleCharWidth = measureCharTitle.clientWidth; - var _CanvasRenderer = __webpack_require__(216); + this.dom.frame.removeChild(measureCharTitle); + } + }; - var _CanvasRenderer2 = _interopRequireDefault(_CanvasRenderer); + module.exports = DataAxis; - var _Canvas = __webpack_require__(217); +/***/ }), +/* 151 */ +/***/ (function(module, exports) { - var _Canvas2 = _interopRequireDefault(_Canvas); + 'use strict'; - var _View = __webpack_require__(218); + /** + * Created by ludo on 25-1-16. + */ - var _View2 = _interopRequireDefault(_View); + function DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight) { + var zeroAlign = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; + var formattingFunction = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - var _InteractionHandler = __webpack_require__(219); + this.majorSteps = [1, 2, 5, 10]; + this.minorSteps = [0.25, 0.5, 1, 2]; + this.customLines = null; - var _InteractionHandler2 = _interopRequireDefault(_InteractionHandler); + this.containerHeight = containerHeight; + this.majorCharHeight = majorCharHeight; + this._start = start; + this._end = end; - var _SelectionHandler = __webpack_require__(221); + this.scale = 1; + this.minorStepIdx = -1; + this.magnitudefactor = 1; + this.determineScale(); - var _SelectionHandler2 = _interopRequireDefault(_SelectionHandler); + this.zeroAlign = zeroAlign; + this.autoScaleStart = autoScaleStart; + this.autoScaleEnd = autoScaleEnd; - var _LayoutEngine = __webpack_require__(222); + this.formattingFunction = formattingFunction; - var _LayoutEngine2 = _interopRequireDefault(_LayoutEngine); + if (autoScaleStart || autoScaleEnd) { + var me = this; + var roundToMinor = function roundToMinor(value) { + var rounded = value - value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]); + if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) { + return rounded + me.magnitudefactor * me.minorSteps[me.minorStepIdx]; + } else { + return rounded; + } + }; + if (autoScaleStart) { + this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx]; + this._start = roundToMinor(this._start); + } - var _ManipulationSystem = __webpack_require__(223); + if (autoScaleEnd) { + this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx]; + this._end = roundToMinor(this._end); + } + this.determineScale(); + } + } - var _ManipulationSystem2 = _interopRequireDefault(_ManipulationSystem); + DataScale.prototype.setCharHeight = function (majorCharHeight) { + this.majorCharHeight = majorCharHeight; + }; - var _Configurator = __webpack_require__(118); + DataScale.prototype.setHeight = function (containerHeight) { + this.containerHeight = containerHeight; + }; - var _Configurator2 = _interopRequireDefault(_Configurator); + DataScale.prototype.determineScale = function () { + var range = this._end - this._start; + this.scale = this.containerHeight / range; + var minimumStepValue = this.majorCharHeight / this.scale; + var orderOfMagnitude = range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0; - var _Validator = __webpack_require__(126); + this.minorStepIdx = -1; + this.magnitudefactor = Math.pow(10, orderOfMagnitude); - var _Validator2 = _interopRequireDefault(_Validator); + var start = 0; + if (orderOfMagnitude < 0) { + start = orderOfMagnitude; + } - var _options = __webpack_require__(224); + var solutionFound = false; + for (var l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) { + this.magnitudefactor = Math.pow(10, l); + for (var j = 0; j < this.minorSteps.length; j++) { + var stepSize = this.magnitudefactor * this.minorSteps[j]; + if (stepSize >= minimumStepValue) { + solutionFound = true; + this.minorStepIdx = j; + break; + } + } + if (solutionFound === true) { + break; + } + } + }; - var _KamadaKawai = __webpack_require__(225); + DataScale.prototype.is_major = function (value) { + return value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0; + }; - var _KamadaKawai2 = _interopRequireDefault(_KamadaKawai); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + DataScale.prototype.getStep = function () { + return this.magnitudefactor * this.minorSteps[this.minorStepIdx]; + }; - // Load custom shapes into CanvasRenderingContext2D - __webpack_require__(227); + DataScale.prototype.getFirstMajor = function () { + var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx]; + return this.convertValue(this._start + (majorStep - this._start % majorStep) % majorStep); + }; - var Emitter = __webpack_require__(99); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - var dotparser = __webpack_require__(228); - var gephiParser = __webpack_require__(229); - var Activator = __webpack_require__(143); - var locales = __webpack_require__(230); + DataScale.prototype.formatValue = function (current) { + var returnValue = current.toPrecision(5); + if (typeof this.formattingFunction === 'function') { + returnValue = this.formattingFunction(current); + } - /** - * @constructor Network - * Create a network visualization, displaying nodes and edges. - * - * @param {Element} container The DOM element in which the Network will - * be created. Normally a div element. - * @param {Object} data An object containing parameters - * {Array} nodes - * {Array} edges - * @param {Object} options Options - */ - function Network(container, data, options) { - var _this = this; + if (typeof returnValue === 'number') { + return '' + returnValue; + } else if (typeof returnValue === 'string') { + return returnValue; + } else { + return current.toPrecision(5); + } + }; - if (!(this instanceof Network)) { - throw new SyntaxError('Constructor must be called with the new operator'); + DataScale.prototype.getLines = function () { + var lines = []; + var step = this.getStep(); + var bottomOffset = (step - this._start % step) % step; + for (var i = this._start + bottomOffset; this._end - i > 0.00001; i += step) { + if (i != this._start) { + //Skip the bottom line + lines.push({ major: this.is_major(i), y: this.convertValue(i), val: this.formatValue(i) }); + } } + return lines; + }; - // set constant values - this.options = {}; - this.defaultOptions = { - locale: 'en', - locales: locales, - clickToUse: false - }; - util.extend(this.options, this.defaultOptions); + DataScale.prototype.followScale = function (other) { + var oldStepIdx = this.minorStepIdx; + var oldStart = this._start; + var oldEnd = this._end; - // containers for nodes and edges - this.body = { - container: container, - nodes: {}, - nodeIndices: [], - edges: {}, - edgeIndices: [], - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this), - once: this.once.bind(this) - }, - eventListeners: { - onTap: function onTap() {}, - onTouch: function onTouch() {}, - onDoubleTap: function onDoubleTap() {}, - onHold: function onHold() {}, - onDragStart: function onDragStart() {}, - onDrag: function onDrag() {}, - onDragEnd: function onDragEnd() {}, - onMouseWheel: function onMouseWheel() {}, - onPinch: function onPinch() {}, - onMouseMove: function onMouseMove() {}, - onRelease: function onRelease() {}, - onContext: function onContext() {} - }, - data: { - nodes: null, // A DataSet or DataView - edges: null // A DataSet or DataView - }, - functions: { - createNode: function createNode() {}, - createEdge: function createEdge() {}, - getPointer: function getPointer() {} - }, - modules: {}, - view: { - scale: 1, - translation: { x: 0, y: 0 } - } + var me = this; + var increaseMagnitude = function increaseMagnitude() { + me.magnitudefactor *= 2; + }; + var decreaseMagnitude = function decreaseMagnitude() { + me.magnitudefactor /= 2; }; - // bind the event listeners - this.bindEventListeners(); - - // setting up all modules - this.images = new _Images2['default'](function () { - return _this.body.emitter.emit("_requestRedraw"); - }); // object with images - this.groups = new _Groups2['default'](); // object with groups - this.canvas = new _Canvas2['default'](this.body); // DOM handler - this.selectionHandler = new _SelectionHandler2['default'](this.body, this.canvas); // Selection handler - this.interactionHandler = new _InteractionHandler2['default'](this.body, this.canvas, this.selectionHandler); // Interaction handler handles all the hammer bindings (that are bound by canvas), key - this.view = new _View2['default'](this.body, this.canvas); // camera handler, does animations and zooms - this.renderer = new _CanvasRenderer2['default'](this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into - this.physics = new _PhysicsEngine2['default'](this.body); // physics engine, does all the simulations - this.layoutEngine = new _LayoutEngine2['default'](this.body); // layout engine for inital layout and hierarchical layout - this.clustering = new _Clustering2['default'](this.body); // clustering api - this.manipulation = new _ManipulationSystem2['default'](this.body, this.canvas, this.selectionHandler); // data manipulation system - - this.nodesHandler = new _NodesHandler2['default'](this.body, this.images, this.groups, this.layoutEngine); // Handle adding, deleting and updating of nodes as well as global options - this.edgesHandler = new _EdgesHandler2['default'](this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options - - this.body.modules["kamadaKawai"] = new _KamadaKawai2['default'](this.body, 150, 0.05); // Layouting algorithm. - this.body.modules["clustering"] = this.clustering; + if (other.minorStepIdx <= 1 && this.minorStepIdx <= 1 || other.minorStepIdx > 1 && this.minorStepIdx > 1) { + //easy, no need to change stepIdx nor multiplication factor + } else if (other.minorStepIdx < this.minorStepIdx) { + //I'm 5, they are 4 per major. + this.minorStepIdx = 1; + if (oldStepIdx == 2) { + increaseMagnitude(); + } else { + increaseMagnitude(); + increaseMagnitude(); + } + } else { + //I'm 4, they are 5 per major + this.minorStepIdx = 2; + if (oldStepIdx == 1) { + decreaseMagnitude(); + } else { + decreaseMagnitude(); + decreaseMagnitude(); + } + } - // create the DOM elements - this.canvas._create(); + //Get masters stats: + var lines = other.getLines(); + var otherZero = other.convertValue(0); + var otherStep = other.getStep() * other.scale; - // apply options - this.setOptions(options); + var done = false; + var count = 0; + //Loop until magnitude is correct for given constrains. + while (!done && count++ < 5) { - // load data (the disable start variable will be the same as the enabled clustering) - this.setData(data); - } + //Get my stats: + this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor); + var newRange = this.containerHeight / this.scale; - // Extend Network with an Emitter mixin - Emitter(Network.prototype); + //For the case the magnitudefactor has changed: + this._start = oldStart; + this._end = this._start + newRange; - /** - * Set options - * @param {Object} options - */ - Network.prototype.setOptions = function (options) { - var _this2 = this; + var myOriginalZero = this._end * this.scale; + var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx]; + var majorOffset = this.getFirstMajor() - other.getFirstMajor(); - if (options !== undefined) { - var errorFound = _Validator2['default'].validate(options, _options.allOptions); - if (errorFound === true) { - console.log('%cErrors have been found in the supplied options object.', _Validator.printStyle); + if (this.zeroAlign) { + var zeroOffset = otherZero - myOriginalZero; + this._end += zeroOffset / this.scale; + this._start = this._end - newRange; + } else { + if (!this.autoScaleStart) { + this._start += majorStep - majorOffset / this.scale; + this._end = this._start + newRange; + } else { + this._start -= majorOffset / this.scale; + this._end = this._start + newRange; + } } + if (!this.autoScaleEnd && this._end > oldEnd + 0.00001) { + //Need to decrease magnitude to prevent scale overshoot! (end) + decreaseMagnitude(); + done = false; + continue; + } + if (!this.autoScaleStart && this._start < oldStart - 0.00001) { + if (this.zeroAlign && oldStart >= 0) { + console.warn("Can't adhere to given 'min' range, due to zeroalign"); + } else { + //Need to decrease magnitude to prevent scale overshoot! (start) + decreaseMagnitude(); + done = false; + continue; + } + } + if (this.autoScaleStart && this.autoScaleEnd && newRange < oldEnd - oldStart) { + increaseMagnitude(); + done = false; + continue; + } + done = true; + } + }; - // copy the global fields over - var fields = ['locale', 'locales', 'clickToUse']; - util.selectiveDeepExtend(fields, this.options, options); - - // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system. - options = this.layoutEngine.setOptions(options.layout, options); + DataScale.prototype.convertValue = function (value) { + return this.containerHeight - (value - this._start) * this.scale; + }; - this.canvas.setOptions(options); // options for canvas are in globals + DataScale.prototype.screenToValue = function (pixels) { + return (this.containerHeight - pixels) / this.scale + this._start; + }; - // pass the options to the modules - this.groups.setOptions(options.groups); - this.nodesHandler.setOptions(options.nodes); - this.edgesHandler.setOptions(options.edges); - this.physics.setOptions(options.physics); - this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals + module.exports = DataScale; - this.interactionHandler.setOptions(options.interaction); - this.renderer.setOptions(options.interaction); // options for rendering are in interaction - this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction +/***/ }), +/* 152 */ +/***/ (function(module, exports, __webpack_require__) { - // reload the settings of the nodes to apply changes in groups that are not referenced by pointer. - if (options.groups !== undefined) { - this.body.emitter.emit("refreshNodes"); - } - // these two do not have options at the moment, here for completeness - //this.view.setOptions(options.view); - //this.clustering.setOptions(options.clustering); + 'use strict'; - if ('configure' in options) { - if (!this.configurator) { - this.configurator = new _Configurator2['default'](this, this.body.container, _options.configureOptions, this.canvas.pixelRatio); - } + var _typeof2 = __webpack_require__(62); - this.configurator.setOptions(options.configure); - } + var _typeof3 = _interopRequireDefault(_typeof2); - // if the configuration system is enabled, copy all options and put them into the config system - if (this.configurator && this.configurator.options.enabled === true) { - var networkOptions = { nodes: {}, edges: {}, layout: {}, interaction: {}, manipulation: {}, physics: {}, global: {} }; - util.deepExtend(networkOptions.nodes, this.nodesHandler.options); - util.deepExtend(networkOptions.edges, this.edgesHandler.options); - util.deepExtend(networkOptions.layout, this.layoutEngine.options); - // load the selectionHandler and render default options in to the interaction group - util.deepExtend(networkOptions.interaction, this.selectionHandler.options); - util.deepExtend(networkOptions.interaction, this.renderer.options); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - util.deepExtend(networkOptions.interaction, this.interactionHandler.options); - util.deepExtend(networkOptions.manipulation, this.manipulation.options); - util.deepExtend(networkOptions.physics, this.physics.options); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(88); + var Bars = __webpack_require__(153); + var Lines = __webpack_require__(155); + var Points = __webpack_require__(154); - // load globals into the global object - util.deepExtend(networkOptions.global, this.canvas.options); - util.deepExtend(networkOptions.global, this.options); + /** + * /** + * @param {object} group | the object of the group from the dataset + * @param {string} groupId | ID of the group + * @param {object} options | the default options + * @param {array} groupsUsingDefaultStyles | this array has one entree. + * It is passed as an array so it is passed by reference. + * It enumerates through the default styles + * @constructor + */ + function GraphGroup(group, groupId, options, groupsUsingDefaultStyles) { + this.id = groupId; + var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'drawPoints', 'shaded', 'interpolation', 'zIndex', 'excludeFromStacking', 'excludeFromLegend']; + this.options = util.selectiveBridgeObject(fields, options); + this.usingDefaultStyle = group.className === undefined; + this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; + this.zeroPosition = 0; + this.update(group); + if (this.usingDefaultStyle == true) { + this.groupsUsingDefaultStyles[0] += 1; + } + this.itemsData = []; + this.visible = group.visible === undefined ? true : group.visible; + } - this.configurator.setModuleOptions(networkOptions); + /** + * this loads a reference to all items in this group into this group. + * @param {array} items + */ + GraphGroup.prototype.setItems = function (items) { + if (items != null) { + this.itemsData = items; + if (this.options.sort == true) { + util.insertSort(this.itemsData, function (a, b) { + return a.x > b.x ? 1 : -1; + }); } + } else { + this.itemsData = []; + } + }; - // handle network global options - if (options.clickToUse !== undefined) { - if (options.clickToUse === true) { - if (this.activator === undefined) { - this.activator = new Activator(this.canvas.frame); - this.activator.on('change', function () { - _this2.body.emitter.emit("activate"); - }); - } - } else { - if (this.activator !== undefined) { - this.activator.destroy(); - delete this.activator; - } - this.body.emitter.emit("activate"); - } - } else { - this.body.emitter.emit("activate"); - } + GraphGroup.prototype.getItems = function () { + return this.itemsData; + }; - this.canvas.setSize(); - // start the physics simulation. Can be safely called multiple times. - this.body.emitter.emit("startSimulation"); - } + /** + * this is used for barcharts and shading, this way, we only have to calculate it once. + * @param pos + */ + GraphGroup.prototype.setZeroPosition = function (pos) { + this.zeroPosition = pos; }; /** - * Update the this.body.nodeIndices with the most recent node index list - * @private + * set the options of the graph group over the default options. + * @param options */ - Network.prototype._updateVisibleIndices = function () { - var nodes = this.body.nodes; - var edges = this.body.edges; - this.body.nodeIndices = []; - this.body.edgeIndices = []; + GraphGroup.prototype.setOptions = function (options) { + if (options !== undefined) { + var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'zIndex', 'excludeFromStacking', 'excludeFromLegend']; + util.selectiveDeepExtend(fields, this.options, options); - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - if (nodes[nodeId].options.hidden === false) { - this.body.nodeIndices.push(nodes[nodeId].id); - } + // if the group's drawPoints is a function delegate the callback to the onRender property + if (typeof options.drawPoints == 'function') { + options.drawPoints = { + onRender: options.drawPoints + }; } - } - for (var edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - if (edges[edgeId].options.hidden === false) { - this.body.edgeIndices.push(edges[edgeId].id); + util.mergeOptions(this.options, options, 'interpolation'); + util.mergeOptions(this.options, options, 'drawPoints'); + util.mergeOptions(this.options, options, 'shaded'); + + if (options.interpolation) { + if ((0, _typeof3['default'])(options.interpolation) == 'object') { + if (options.interpolation.parametrization) { + if (options.interpolation.parametrization == 'uniform') { + this.options.interpolation.alpha = 0; + } else if (options.interpolation.parametrization == 'chordal') { + this.options.interpolation.alpha = 1.0; + } else { + this.options.interpolation.parametrization = 'centripetal'; + this.options.interpolation.alpha = 0.5; + } + } } } } }; /** - * Bind all events + * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph + * @param group */ - Network.prototype.bindEventListeners = function () { - var _this3 = this; - - // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed. - this.body.emitter.on("_dataChanged", function () { - // update shortcut lists - _this3._updateVisibleIndices(); - _this3.body.emitter.emit("_requestRedraw"); - // call the dataUpdated event because the only difference between the two is the updating of the indices - _this3.body.emitter.emit("_dataUpdated"); - }); - - // this is called when options of EXISTING nodes or edges have changed. - this.body.emitter.on("_dataUpdated", function () { - // update values - _this3._updateValueRange(_this3.body.nodes); - _this3._updateValueRange(_this3.body.edges); - // start simulation (can be called safely, even if already running) - _this3.body.emitter.emit("startSimulation"); - _this3.body.emitter.emit("_requestRedraw"); - }); + GraphGroup.prototype.update = function (group) { + this.group = group; + this.content = group.content || 'graph'; + this.className = group.className || this.className || 'vis-graph-group' + this.groupsUsingDefaultStyles[0] % 10; + this.visible = group.visible === undefined ? true : group.visible; + this.style = group.style; + this.setOptions(group.options); }; /** - * Set nodes and edges, and optionally options as well. + * return the legend entree for this group. * - * @param {Object} data Object containing parameters: - * {Array | DataSet | DataView} [nodes] Array with nodes - * {Array | DataSet | DataView} [edges] Array with edges - * {String} [dot] String containing data in DOT format - * {String} [gephi] String containing data in gephi JSON format - * {Options} [options] Object with options + * @param iconWidth + * @param iconHeight + * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} */ - Network.prototype.setData = function (data) { - // reset the physics engine. - this.body.emitter.emit("resetPhysics"); - this.body.emitter.emit("_resetData"); - - // unselect all to ensure no selections from old data are carried over. - this.selectionHandler.unselectAll(); - - if (data && data.dot && (data.nodes || data.edges)) { - throw new SyntaxError('Data must contain either parameter "dot" or ' + ' parameter pair "nodes" and "edges", but not both.'); + GraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) { + if (framework == undefined || framework == null) { + var svg = document.createElementNS('http://www.w3.org/2000/svg', "svg"); + framework = { svg: svg, svgElements: {}, options: this.options, groups: [this] }; + } + if (x == undefined || x == null) { + x = 0; + } + if (y == undefined || y == null) { + y = 0.5 * iconHeight; } + switch (this.options.style) { + case "line": + Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework); + break; + case "points": //explicit no break + case "point": + Points.drawIcon(this, x, y, iconWidth, iconHeight, framework); + break; + case "bar": + Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework); + break; + } + return { icon: framework.svg, label: this.content, orientation: this.options.yAxisOrientation }; + }; - // set options - this.setOptions(data && data.options); - // set all data - if (data && data.dot) { - console.log('The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);'); - // parse DOT file - var dotData = dotparser.DOTToGraph(data.dot); - this.setData(dotData); - return; - } else if (data && data.gephi) { - // parse DOT file - console.log('The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);'); - var gephiData = gephiParser.parseGephi(data.gephi); - this.setData(gephiData); - return; - } else { - this.nodesHandler.setData(data && data.nodes, true); - this.edgesHandler.setData(data && data.edges, true); + GraphGroup.prototype.getYRange = function (groupData) { + var yMin = groupData[0].y; + var yMax = groupData[0].y; + for (var j = 0; j < groupData.length; j++) { + yMin = yMin > groupData[j].y ? groupData[j].y : yMin; + yMax = yMax < groupData[j].y ? groupData[j].y : yMax; } + return { min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation }; + }; - // emit change in data - this.body.emitter.emit("_dataChanged"); + module.exports = GraphGroup; - // emit data loaded - this.body.emitter.emit("_dataLoaded"); +/***/ }), +/* 153 */ +/***/ (function(module, exports, __webpack_require__) { - // find a stable position or start animating to a stable position - this.body.emitter.emit("initPhysics"); - }; + 'use strict'; - /** - * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function. - * var network = new vis.Network(..); - * network.destroy(); - * network = null; - */ - Network.prototype.destroy = function () { - this.body.emitter.emit("destroy"); - // clear events - this.body.emitter.off(); - this.off(); + var DOMutil = __webpack_require__(88); + var Points = __webpack_require__(154); - // delete modules - delete this.groups; - delete this.canvas; - delete this.selectionHandler; - delete this.interactionHandler; - delete this.view; - delete this.renderer; - delete this.physics; - delete this.layoutEngine; - delete this.clustering; - delete this.manipulation; - delete this.nodesHandler; - delete this.edgesHandler; - delete this.configurator; - delete this.images; + function Bargraph(groupId, options) {} - for (var nodeId in this.body.nodes) { - delete this.body.nodes[nodeId]; - } - for (var edgeId in this.body.edges) { - delete this.body.edges[edgeId]; - } + Bargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; - // remove the container and everything inside it recursively - util.recursiveDOMDelete(this.body.container); + var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2 * fillHeight); + outline.setAttributeNS(null, "class", "vis-outline"); + + var barWidth = Math.round(0.3 * iconWidth); + var originalWidth = group.options.barChart.width; + var scale = originalWidth / barWidth; + var bar1Height = Math.round(0.4 * iconHeight); + var bar2Height = Math.round(0.75 * iconHeight); + + var offset = Math.round((iconWidth - 2 * barWidth) / 3); + + DOMutil.drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); + DOMutil.drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); + + if (group.options.drawPoints.enabled == true) { + var groupTemplate = { + style: group.options.drawPoints.style, + styles: group.options.drawPoints.styles, + size: group.options.drawPoints.size / scale, + className: group.className + }; + DOMutil.drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg); + DOMutil.drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg); + } }; /** - * Update the values of all object in the given array according to the current - * value range of the objects in the array. - * @param {Object} obj An object containing a set of Edges or Nodes - * The objects must have a method getValue() and - * setValueRange(min, max). - * @private + * draw a bar graph + * + * @param groupIds + * @param processedGroupData */ - Network.prototype._updateValueRange = function (obj) { - var id; + Bargraph.draw = function (groupIds, processedGroupData, framework) { + var combinedData = []; + var intersections = {}; + var coreDistance; + var key, drawData; + var group; + var i, j; + var barPoints = 0; - // determine the range of the objects - var valueMin = undefined; - var valueMax = undefined; - var valueTotal = 0; - for (id in obj) { - if (obj.hasOwnProperty(id)) { - var value = obj[id].getValue(); - if (value !== undefined) { - valueMin = valueMin === undefined ? value : Math.min(value, valueMin); - valueMax = valueMax === undefined ? value : Math.max(value, valueMax); - valueTotal += value; + // combine all barchart data + for (i = 0; i < groupIds.length; i++) { + group = framework.groups[groupIds[i]]; + if (group.options.style === 'bar') { + if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) { + for (j = 0; j < processedGroupData[groupIds[i]].length; j++) { + combinedData.push({ + screen_x: processedGroupData[groupIds[i]][j].screen_x, + screen_end: processedGroupData[groupIds[i]][j].screen_end, + screen_y: processedGroupData[groupIds[i]][j].screen_y, + x: processedGroupData[groupIds[i]][j].x, + end: processedGroupData[groupIds[i]][j].end, + y: processedGroupData[groupIds[i]][j].y, + groupId: groupIds[i], + label: processedGroupData[groupIds[i]][j].label + }); + barPoints += 1; + } } } } - // adjust the range of all objects - if (valueMin !== undefined && valueMax !== undefined) { - for (id in obj) { - if (obj.hasOwnProperty(id)) { - obj[id].setValueRange(valueMin, valueMax, valueTotal); + if (barPoints === 0) { + return; + } + + // sort by time and by group + combinedData.sort(function (a, b) { + if (a.screen_x === b.screen_x) { + return a.groupId < b.groupId ? -1 : 1; + } else { + return a.screen_x - b.screen_x; + } + }); + + // get intersections + Bargraph._getDataIntersections(intersections, combinedData); + + // plot barchart + for (i = 0; i < combinedData.length; i++) { + group = framework.groups[combinedData[i].groupId]; + var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width; + + key = combinedData[i].screen_x; + var heightOffset = 0; + if (intersections[key] === undefined) { + if (i + 1 < combinedData.length) { + coreDistance = Math.abs(combinedData[i + 1].screen_x - key); + } + drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); + } else { + var nextKey = i + (intersections[key].amount - intersections[key].resolved); + var prevKey = i - (intersections[key].resolved + 1); + if (nextKey < combinedData.length) { + coreDistance = Math.abs(combinedData[nextKey].screen_x - key); + } + drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth); + intersections[key].resolved += 1; + + if (group.options.stack === true && group.options.excludeFromStacking !== true) { + if (combinedData[i].screen_y < group.zeroPosition) { + heightOffset = intersections[key].accumulatedNegative; + intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y; + } else { + heightOffset = intersections[key].accumulatedPositive; + intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y; + } + } else if (group.options.barChart.sideBySide === true) { + drawData.width = drawData.width / intersections[key].amount; + drawData.offset += intersections[key].resolved * drawData.width - 0.5 * drawData.width * (intersections[key].amount + 1); } } + + var dataWidth = drawData.width; + var start = combinedData[i].screen_x; + + // are we drawing explicit boxes? (we supplied an end value) + if (combinedData[i].screen_end != undefined) { + dataWidth = combinedData[i].screen_end - combinedData[i].screen_x; + start += dataWidth * 0.5; + } else { + start += drawData.offset; + } + + DOMutil.drawBar(start, combinedData[i].screen_y - heightOffset, dataWidth, group.zeroPosition - combinedData[i].screen_y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style); + + // draw points + if (group.options.drawPoints.enabled === true) { + var pointData = { + screen_x: combinedData[i].screen_x, + screen_y: combinedData[i].screen_y - heightOffset, + x: combinedData[i].x, + y: combinedData[i].y, + 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); + } } }; /** - * Returns true when the Network is active. - * @returns {boolean} + * Fill the intersections object with counters of how many datapoints share the same x coordinates + * @param intersections + * @param combinedData + * @private */ - Network.prototype.isActive = function () { - return !this.activator || this.activator.active; + Bargraph._getDataIntersections = function (intersections, combinedData) { + // get intersections + var coreDistance; + for (var i = 0; i < combinedData.length; i++) { + if (i + 1 < combinedData.length) { + coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x); + } + if (i > 0) { + coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x)); + } + if (coreDistance === 0) { + if (intersections[combinedData[i].screen_x] === undefined) { + intersections[combinedData[i].screen_x] = { + amount: 0, + resolved: 0, + accumulatedPositive: 0, + accumulatedNegative: 0 + }; + } + intersections[combinedData[i].screen_x].amount += 1; + } + } }; - Network.prototype.setSize = function () { - return this.canvas.setSize.apply(this.canvas, arguments); - }; - Network.prototype.canvasToDOM = function () { - return this.canvas.canvasToDOM.apply(this.canvas, arguments); - }; - Network.prototype.DOMtoCanvas = function () { - return this.canvas.DOMtoCanvas.apply(this.canvas, arguments); - }; - Network.prototype.findNode = function () { - return this.clustering.findNode.apply(this.clustering, arguments); - }; - Network.prototype.isCluster = function () { - return this.clustering.isCluster.apply(this.clustering, arguments); - }; - Network.prototype.openCluster = function () { - return this.clustering.openCluster.apply(this.clustering, arguments); - }; - Network.prototype.cluster = function () { - return this.clustering.cluster.apply(this.clustering, arguments); - }; - Network.prototype.getNodesInCluster = function () { - return this.clustering.getNodesInCluster.apply(this.clustering, arguments); - }; - Network.prototype.clusterByConnection = function () { - return this.clustering.clusterByConnection.apply(this.clustering, arguments); - }; - Network.prototype.clusterByHubsize = function () { - return this.clustering.clusterByHubsize.apply(this.clustering, arguments); - }; - Network.prototype.clusterOutliers = function () { - return this.clustering.clusterOutliers.apply(this.clustering, arguments); - }; - Network.prototype.getSeed = function () { - return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments); - }; - Network.prototype.enableEditMode = function () { - return this.manipulation.enableEditMode.apply(this.manipulation, arguments); - }; - Network.prototype.disableEditMode = function () { - return this.manipulation.disableEditMode.apply(this.manipulation, arguments); - }; - Network.prototype.addNodeMode = function () { - return this.manipulation.addNodeMode.apply(this.manipulation, arguments); - }; - Network.prototype.editNode = function () { - return this.manipulation.editNode.apply(this.manipulation, arguments); - }; - Network.prototype.editNodeMode = function () { - 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); - }; - Network.prototype.editEdgeMode = function () { - return this.manipulation.editEdgeMode.apply(this.manipulation, arguments); - }; - Network.prototype.deleteSelected = function () { - return this.manipulation.deleteSelected.apply(this.manipulation, arguments); - }; - Network.prototype.getPositions = function () { - return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments); - }; - Network.prototype.storePositions = function () { - return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments); - }; - Network.prototype.moveNode = function () { - return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments); - }; - Network.prototype.getBoundingBox = function () { - return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments); - }; - Network.prototype.getConnectedNodes = function (objectId) { - if (this.body.nodes[objectId] !== undefined) { - return this.nodesHandler.getConnectedNodes.apply(this.nodesHandler, arguments); + /** + * Get the width and offset for bargraphs based on the coredistance between datapoints + * + * @param coreDistance + * @param group + * @param minWidth + * @returns {{width: Number, offset: Number}} + * @private + */ + Bargraph._getSafeDrawData = function (coreDistance, group, minWidth) { + var width, offset; + if (coreDistance < group.options.barChart.width && coreDistance > 0) { + width = coreDistance < minWidth ? minWidth : coreDistance; + + offset = 0; // recalculate offset with the new width; + if (group.options.barChart.align === 'left') { + offset -= 0.5 * coreDistance; + } else if (group.options.barChart.align === 'right') { + offset += 0.5 * coreDistance; + } } else { - return this.edgesHandler.getConnectedNodes.apply(this.edgesHandler, arguments); + // default settings + width = group.options.barChart.width; + offset = 0; + if (group.options.barChart.align === 'left') { + offset -= 0.5 * group.options.barChart.width; + } else if (group.options.barChart.align === 'right') { + offset += 0.5 * group.options.barChart.width; + } } + + return { width: width, offset: offset }; }; - Network.prototype.getConnectedEdges = function () { - return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler, arguments); - }; - Network.prototype.startSimulation = function () { - return this.physics.startSimulation.apply(this.physics, arguments); - }; - Network.prototype.stopSimulation = function () { - return this.physics.stopSimulation.apply(this.physics, arguments); - }; - Network.prototype.stabilize = function () { - return this.physics.stabilize.apply(this.physics, arguments); - }; - Network.prototype.getSelection = function () { - return this.selectionHandler.getSelection.apply(this.selectionHandler, arguments); - }; - Network.prototype.setSelection = function () { - return this.selectionHandler.setSelection.apply(this.selectionHandler, arguments); - }; - Network.prototype.getSelectedNodes = function () { - return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler, arguments); - }; - Network.prototype.getSelectedEdges = function () { - return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler, arguments); - }; - Network.prototype.getNodeAt = function () { - var node = this.selectionHandler.getNodeAt.apply(this.selectionHandler, arguments); - if (node !== undefined && node.id !== undefined) { - return node.id; + + Bargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) { + if (combinedData.length > 0) { + // sort by time and by group + combinedData.sort(function (a, b) { + if (a.screen_x === b.screen_x) { + return a.groupId < b.groupId ? -1 : 1; + } else { + return a.screen_x - b.screen_x; + } + }); + var intersections = {}; + + Bargraph._getDataIntersections(intersections, combinedData); + groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData); + groupRanges[groupLabel].yAxisOrientation = orientation; + groupIds.push(groupLabel); } - return node; }; - Network.prototype.getEdgeAt = function () { - var edge = this.selectionHandler.getEdgeAt.apply(this.selectionHandler, arguments); - if (edge !== undefined && edge.id !== undefined) { - return edge.id; + + Bargraph._getStackedYRange = function (intersections, combinedData) { + var key; + var yMin = combinedData[0].screen_y; + var yMax = combinedData[0].screen_y; + for (var i = 0; i < combinedData.length; i++) { + key = combinedData[i].screen_x; + if (intersections[key] === undefined) { + yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin; + yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax; + } else { + if (combinedData[i].screen_y < 0) { + intersections[key].accumulatedNegative += combinedData[i].screen_y; + } else { + intersections[key].accumulatedPositive += combinedData[i].screen_y; + } + } } - return edge; - }; - Network.prototype.selectNodes = function () { - return this.selectionHandler.selectNodes.apply(this.selectionHandler, arguments); - }; - Network.prototype.selectEdges = function () { - return this.selectionHandler.selectEdges.apply(this.selectionHandler, arguments); - }; - Network.prototype.unselectAll = function () { - this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments); - this.redraw(); - }; - Network.prototype.redraw = function () { - return this.renderer.redraw.apply(this.renderer, arguments); - }; - Network.prototype.getScale = function () { - return this.view.getScale.apply(this.view, arguments); - }; - Network.prototype.getViewPosition = function () { - return this.view.getViewPosition.apply(this.view, arguments); - }; - Network.prototype.fit = function () { - return this.view.fit.apply(this.view, arguments); - }; - Network.prototype.moveTo = function () { - return this.view.moveTo.apply(this.view, arguments); - }; - Network.prototype.focus = function () { - return this.view.focus.apply(this.view, arguments); - }; - Network.prototype.releaseNode = function () { - return this.view.releaseNode.apply(this.view, arguments); - }; - Network.prototype.getOptionsFromConfigurator = function () { - var options = {}; - if (this.configurator) { - options = this.configurator.getOptions.apply(this.configurator); + for (var xpos in intersections) { + if (intersections.hasOwnProperty(xpos)) { + yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin; + yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin; + yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax; + yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax; + } } - return options; - }; - module.exports = Network; + return { min: yMin, max: yMax }; + }; -/***/ }, -/* 160 */ -/***/ function(module, exports, __webpack_require__) { + module.exports = Bargraph; - "use strict"; +/***/ }), +/* 154 */ +/***/ (function(module, exports, __webpack_require__) { - Object.defineProperty(exports, "__esModule", { - value: true - }); + 'use strict'; - var _classCallCheck2 = __webpack_require__(119); + var _typeof2 = __webpack_require__(62); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var _typeof3 = _interopRequireDefault(_typeof2); - var _createClass2 = __webpack_require__(120); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _createClass3 = _interopRequireDefault(_createClass2); + var DOMutil = __webpack_require__(88); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + function Points(groupId, options) {} /** - * @class Images - * This class loads images and keeps them stored. + * draw the data points + * + * @param {Array} dataset + * @param {Object} JSONcontainer + * @param {Object} svg | SVG DOM element + * @param {GraphGroup} group + * @param {Number} [offset] */ - var Images = function () { - function Images(callback) { - (0, _classCallCheck3["default"])(this, Images); + Points.draw = function (dataset, group, framework, offset) { + offset = offset || 0; + var callback = getCallback(framework, group); - this.images = {}; - this.imageBroken = {}; - this.callback = callback; + for (var i = 0; i < dataset.length; i++) { + if (!callback) { + // draw the point the simple way. + DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label); + } else { + var callbackResult = callback(dataset[i], group); // result might be true, false or an object + if (callbackResult === true || (typeof callbackResult === 'undefined' ? 'undefined' : (0, _typeof3['default'])(callbackResult)) === 'object') { + DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label); + } } + } + }; - /** - * @param {string} url The Url to cache the image as - * @return {Image} imageToLoadBrokenUrlOn The image object - */ + Points.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; + var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2 * fillHeight); + outline.setAttributeNS(null, "class", "vis-outline"); - (0, _createClass3["default"])(Images, [{ - key: "_addImageToCache", - value: function _addImageToCache(url, imageToCache) { - // IE11 fix -- thanks dponch! - if (imageToCache.width === 0) { - document.body.appendChild(imageToCache); - imageToCache.width = imageToCache.offsetWidth; - imageToCache.height = imageToCache.offsetHeight; - document.body.removeChild(imageToCache); - } + //Don't call callback on icon + DOMutil.drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg); + }; - this.images[url] = imageToCache; - } + function getGroupTemplate(group, callbackResult) { + callbackResult = typeof callbackResult === 'undefined' ? {} : callbackResult; + return { + style: callbackResult.style || group.options.drawPoints.style, + styles: callbackResult.styles || group.options.drawPoints.styles, + size: callbackResult.size || group.options.drawPoints.size, + className: callbackResult.className || group.className + }; + } - /** - * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image - * @param {string} brokenUrl Url the broken image to try and load - * @return {Image} imageToLoadBrokenUrlOn The image object - */ + function getCallback(framework, group) { + var callback = undefined; + // check for the graph2d onRender + if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == 'function') { + callback = framework.options.drawPoints.onRender; + } - }, { - key: "_tryloadBrokenUrl", - value: function _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) { - var _this = this; + // override it with the group onRender if defined + if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == 'function') { + callback = group.group.options.drawPoints.onRender; + } + return callback; + } - //If any of the parameters aren't specified then exit the function because nothing constructive can be done - if (url === undefined || brokenUrl === undefined || imageToLoadBrokenUrlOn === undefined) return; + module.exports = Points; - //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl - imageToLoadBrokenUrlOn.onerror = function () { - console.error("Could not load brokenImage:", brokenUrl); - //Add an empty image to the cache so that when subsequent load calls are made for the url we don't try load the image and broken image again - _this._addImageToCache(url, new Image()); - }; +/***/ }), +/* 155 */ +/***/ (function(module, exports, __webpack_require__) { - //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image - imageToLoadBrokenUrlOn.src = brokenUrl; - } + "use strict"; - /** - * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked - */ + var DOMutil = __webpack_require__(88); - }, { - key: "_redrawWithImage", - value: function _redrawWithImage(imageToRedrawWith) { - if (this.callback) { - this.callback(imageToRedrawWith); - } - } + function Line(groupId, options) {} - /** - * @param {string} url Url of the image - * @param {string} brokenUrl Url of an image to use if the url image is not found - * @return {Image} img The image object - */ + Line.calcPath = function (dataset, group) { + if (dataset != null) { + if (dataset.length > 0) { + var d = []; - }, { - key: "load", - value: function load(url, brokenUrl, id) { - var _this2 = this; + // construct path from dataset + if (group.options.interpolation.enabled == true) { + d = Line._catmullRom(dataset, group); + } else { + d = Line._linear(dataset); + } + return d; + } + } + }; - //Try and get the image from the cache, if successful then return the cached image - var cachedImage = this.images[url]; - if (cachedImage) return cachedImage; + Line.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; - //Create a new image - var img = new Image(); + var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2 * fillHeight); + outline.setAttributeNS(null, "class", "vis-outline"); - //Subscribe to the event that is raised if the image loads successfully - img.onload = function () { - //Add the image to the cache and then request a redraw - _this2._addImageToCache(url, img); - _this2._redrawWithImage(img); - }; + path = DOMutil.getSVGElement("path", framework.svgElements, framework.svg); + path.setAttributeNS(null, "class", group.className); + if (group.style !== undefined) { + path.setAttributeNS(null, "style", group.style); + } - //Subscribe to the event that is raised if the image fails to load - img.onerror = function () { - console.error("Could not load image:", url); - //Try and load the image specified by the brokenUrl using - _this2._tryloadBrokenUrl(url, brokenUrl, img); - }; + path.setAttributeNS(null, "d", "M" + x + "," + y + " L" + (x + iconWidth) + "," + y + ""); + if (group.options.shaded.enabled == true) { + fillPath = DOMutil.getSVGElement("path", framework.svgElements, framework.svg); + if (group.options.shaded.orientation == 'top') { + fillPath.setAttributeNS(null, "d", "M" + x + ", " + (y - fillHeight) + "L" + x + "," + y + " L" + (x + iconWidth) + "," + y + " L" + (x + iconWidth) + "," + (y - fillHeight)); + } else { + fillPath.setAttributeNS(null, "d", "M" + x + "," + y + " " + "L" + x + "," + (y + fillHeight) + " " + "L" + (x + iconWidth) + "," + (y + fillHeight) + "L" + (x + iconWidth) + "," + y); + } + fillPath.setAttributeNS(null, "class", group.className + " vis-icon-fill"); + if (group.options.shaded.style !== undefined && group.options.shaded.style !== "") { + fillPath.setAttributeNS(null, "style", group.options.shaded.style); + } + } - //Set the source of the image to the url, this is actuall what kicks off the loading of the image - img.src = url; + if (group.options.drawPoints.enabled == true) { + var groupTemplate = { + style: group.options.drawPoints.style, + styles: group.options.drawPoints.styles, + size: group.options.drawPoints.size, + className: group.className + }; + DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg); + } + }; - //Return the new image - return img; + Line.drawShading = function (pathArray, group, subPathArray, framework) { + // append shading to the path + if (group.options.shaded.enabled == true) { + var svgHeight = Number(framework.svg.style.height.replace('px', '')); + var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); + var type = "L"; + if (group.options.interpolation.enabled == true) { + type = "C"; + } + var dFill; + var zero = 0; + if (group.options.shaded.orientation == 'top') { + zero = 0; + } else if (group.options.shaded.orientation == 'bottom') { + zero = svgHeight; + } else { + zero = Math.min(Math.max(0, group.zeroPosition), svgHeight); + } + if (group.options.shaded.orientation == 'group' && subPathArray != null && subPathArray != undefined) { + dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' L' + subPathArray[subPathArray.length - 1][0] + "," + subPathArray[subPathArray.length - 1][1] + " " + this.serializePath(subPathArray, type, true) + subPathArray[0][0] + "," + subPathArray[0][1] + " Z"; + } else { + dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' V' + zero + ' H' + pathArray[0][0] + " Z"; } - }]); - return Images; - }(); - exports["default"] = Images; + fillPath.setAttributeNS(null, 'class', group.className + ' vis-fill'); + if (group.options.shaded.style !== undefined) { + fillPath.setAttributeNS(null, 'style', group.options.shaded.style); + } + fillPath.setAttributeNS(null, 'd', dFill); + } + }; -/***/ }, -/* 161 */ -/***/ function(module, exports, __webpack_require__) { + /** + * draw a line graph + * + * @param dataset + * @param group + */ + Line.draw = function (pathArray, group, framework) { + if (pathArray != null && pathArray != undefined) { + var path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg); + path.setAttributeNS(null, "class", group.className); + if (group.style !== undefined) { + path.setAttributeNS(null, "style", group.style); + } - "use strict"; + var type = "L"; + if (group.options.interpolation.enabled == true) { + type = "C"; + } + // copy properties to path for drawing. + path.setAttributeNS(null, 'd', 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false)); + } + }; - Object.defineProperty(exports, "__esModule", { - value: true - }); + Line.serializePath = function (pathArray, type, inverse) { + if (pathArray.length < 2) { + //Too little data to create a path. + return ""; + } + var d = type; + if (inverse) { + for (var i = pathArray.length - 2; i > 0; i--) { + d += pathArray[i][0] + "," + pathArray[i][1] + " "; + } + } else { + for (var i = 1; i < pathArray.length; i++) { + d += pathArray[i][0] + "," + pathArray[i][1] + " "; + } + } + return d; + }; - var _classCallCheck2 = __webpack_require__(119); + /** + * This uses an uniform parametrization of the interpolation algorithm: + * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al. + * @param data + * @returns {string} + * @private + */ + Line._catmullRomUniform = function (data) { + // catmull rom + var p0, p1, p2, p3, bp1, bp2; + var d = []; + d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]); + var normalization = 1 / 6; + var length = data.length; + for (var i = 0; i < length - 1; i++) { - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + p0 = i == 0 ? data[0] : data[i - 1]; + p1 = data[i]; + p2 = data[i + 1]; + p3 = i + 2 < length ? data[i + 2] : p2; - var _createClass2 = __webpack_require__(120); + // Catmull-Rom to Cubic Bezier conversion matrix + // 0 1 0 0 + // -1/6 1 1/6 0 + // 0 1/6 1 -1/6 + // 0 0 1 0 - var _createClass3 = _interopRequireDefault(_createClass2); + // bp0 = { x: p1.x, y: p1.y }; + bp1 = { + screen_x: (-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization, + screen_y: (-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization + }; + bp2 = { + screen_x: (p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization, + screen_y: (p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization + }; + // bp0 = { x: p2.x, y: p2.y }; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + d.push([bp1.screen_x, bp1.screen_y]); + d.push([bp2.screen_x, bp2.screen_y]); + d.push([p2.screen_x, p2.screen_y]); + } - var util = __webpack_require__(1); + return d; + }; /** - * @class Groups - * This class can store groups and options specific for groups. + * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm. + * By default, the centripetal parameterization is used because this gives the nicest results. + * These parameterizations are relatively heavy because the distance between 4 points have to be calculated. + * + * One optimization can be used to reuse distances since this is a sliding window approach. + * @param data + * @param group + * @returns {string} + * @private */ + Line._catmullRom = function (data, group) { + var alpha = group.options.interpolation.alpha; + if (alpha == 0 || alpha === undefined) { + return this._catmullRomUniform(data); + } else { + var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M; + var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA; + var d = []; + d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]); + var length = data.length; + for (var i = 0; i < length - 1; i++) { - var Groups = function () { - function Groups() { - (0, _classCallCheck3["default"])(this, Groups); - - this.clear(); - this.defaultIndex = 0; - this.groupsArray = []; - this.groupIndex = 0; - - this.defaultGroups = [{ border: "#2B7CE9", background: "#97C2FC", highlight: { border: "#2B7CE9", background: "#D2E5FF" }, hover: { border: "#2B7CE9", background: "#D2E5FF" } }, // 0: blue - { border: "#FFA500", background: "#FFFF00", highlight: { border: "#FFA500", background: "#FFFFA3" }, hover: { border: "#FFA500", background: "#FFFFA3" } }, // 1: yellow - { border: "#FA0A10", background: "#FB7E81", highlight: { border: "#FA0A10", background: "#FFAFB1" }, hover: { border: "#FA0A10", background: "#FFAFB1" } }, // 2: red - { border: "#41A906", background: "#7BE141", highlight: { border: "#41A906", background: "#A1EC76" }, hover: { border: "#41A906", background: "#A1EC76" } }, // 3: green - { border: "#E129F0", background: "#EB7DF4", highlight: { border: "#E129F0", background: "#F0B3F5" }, hover: { border: "#E129F0", background: "#F0B3F5" } }, // 4: magenta - { border: "#7C29F0", background: "#AD85E4", highlight: { border: "#7C29F0", background: "#D3BDF0" }, hover: { border: "#7C29F0", background: "#D3BDF0" } }, // 5: purple - { border: "#C37F00", background: "#FFA807", highlight: { border: "#C37F00", background: "#FFCA66" }, hover: { border: "#C37F00", background: "#FFCA66" } }, // 6: orange - { border: "#4220FB", background: "#6E6EFD", highlight: { border: "#4220FB", background: "#9B9BFD" }, hover: { border: "#4220FB", background: "#9B9BFD" } }, // 7: darkblue - { border: "#FD5A77", background: "#FFC0CB", highlight: { border: "#FD5A77", background: "#FFD1D9" }, hover: { border: "#FD5A77", background: "#FFD1D9" } }, // 8: pink - { border: "#4AD63A", background: "#C2FABC", highlight: { border: "#4AD63A", background: "#E6FFE3" }, hover: { border: "#4AD63A", background: "#E6FFE3" } }, // 9: mint + p0 = i == 0 ? data[0] : data[i - 1]; + p1 = data[i]; + p2 = data[i + 1]; + p3 = i + 2 < length ? data[i + 2] : p2; - { border: "#990000", background: "#EE0000", highlight: { border: "#BB0000", background: "#FF3333" }, hover: { border: "#BB0000", background: "#FF3333" } }, // 10:bright red + d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2)); + d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2)); + d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2)); - { border: "#FF6000", background: "#FF6000", highlight: { border: "#FF6000", background: "#FF6000" }, hover: { border: "#FF6000", background: "#FF6000" } }, // 12: real orange - { border: "#97C2FC", background: "#2B7CE9", highlight: { border: "#D2E5FF", background: "#2B7CE9" }, hover: { border: "#D2E5FF", background: "#2B7CE9" } }, // 13: blue - { border: "#399605", background: "#255C03", highlight: { border: "#399605", background: "#255C03" }, hover: { border: "#399605", background: "#255C03" } }, // 14: green - { border: "#B70054", background: "#FF007E", highlight: { border: "#B70054", background: "#FF007E" }, hover: { border: "#B70054", background: "#FF007E" } }, // 15: magenta - { border: "#AD85E4", background: "#7C29F0", highlight: { border: "#D3BDF0", background: "#7C29F0" }, hover: { border: "#D3BDF0", background: "#7C29F0" } }, // 16: purple - { border: "#4557FA", background: "#000EA1", highlight: { border: "#6E6EFD", background: "#000EA1" }, hover: { border: "#6E6EFD", background: "#000EA1" } }, // 17: darkblue - { border: "#FFC0CB", background: "#FD5A77", highlight: { border: "#FFD1D9", background: "#FD5A77" }, hover: { border: "#FFD1D9", background: "#FD5A77" } }, // 18: pink - { border: "#C2FABC", background: "#74D66A", highlight: { border: "#E6FFE3", background: "#74D66A" }, hover: { border: "#E6FFE3", background: "#74D66A" } }, // 19: mint + // Catmull-Rom to Cubic Bezier conversion matrix - { border: "#EE0000", background: "#990000", highlight: { border: "#FF3333", background: "#BB0000" }, hover: { border: "#FF3333", background: "#BB0000" } } // 20:bright red - ]; + // A = 2d1^2a + 3d1^a * d2^a + d3^2a + // B = 2d3^2a + 3d3^a * d2^a + d2^2a - this.options = {}; - this.defaultOptions = { - useDefaultGroups: true - }; - util.extend(this.options, this.defaultOptions); - } + // [ 0 1 0 0 ] + // [ -d2^2a /N A/N d1^2a /N 0 ] + // [ 0 d3^2a /M B/M -d2^2a /M ] + // [ 0 0 1 0 ] - (0, _createClass3["default"])(Groups, [{ - key: "setOptions", - value: function setOptions(options) { - var optionFields = ['useDefaultGroups']; + d3powA = Math.pow(d3, alpha); + d3pow2A = Math.pow(d3, 2 * alpha); + d2powA = Math.pow(d2, alpha); + d2pow2A = Math.pow(d2, 2 * alpha); + d1powA = Math.pow(d1, alpha); + d1pow2A = Math.pow(d1, 2 * alpha); - if (options !== undefined) { - for (var groupName in options) { - if (options.hasOwnProperty(groupName)) { - if (optionFields.indexOf(groupName) === -1) { - var group = options[groupName]; - this.add(groupName, group); + A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A; + B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A; + N = 3 * d1powA * (d1powA + d2powA); + if (N > 0) { + N = 1 / N; + } + M = 3 * d3powA * (d3powA + d2powA); + if (M > 0) { + M = 1 / M; } - } - } - } - } - - /** - * Clear all groups - */ - }, { - key: "clear", - value: function clear() { - this.groups = {}; - this.groupsArray = []; - } + bp1 = { + screen_x: (-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N, + screen_y: (-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N + }; - /** - * get group options of a groupname. If groupname is not found, a new group - * is added. - * @param {*} groupname Can be a number, string, Date, etc. - * @return {Object} group The created group, containing all group options - */ + bp2 = { + screen_x: (d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M, + screen_y: (d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M + }; - }, { - key: "get", - value: function get(groupname) { - var group = this.groups[groupname]; - if (group === undefined) { - if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) { - // create new group - var index = this.groupIndex % this.groupsArray.length; - this.groupIndex++; - group = {}; - group.color = this.groups[this.groupsArray[index]]; - this.groups[groupname] = group; - } else { - // create new group - var _index = this.defaultIndex % this.defaultGroups.length; - this.defaultIndex++; - group = {}; - group.color = this.defaultGroups[_index]; - this.groups[groupname] = group; + if (bp1.screen_x == 0 && bp1.screen_y == 0) { + bp1 = p1; + } + if (bp2.screen_x == 0 && bp2.screen_y == 0) { + bp2 = p2; + } + d.push([bp1.screen_x, bp1.screen_y]); + d.push([bp2.screen_x, bp2.screen_y]); + d.push([p2.screen_x, p2.screen_y]); } - } - return group; + return d; } + }; - /** - * Add a custom group style - * @param {String} groupName - * @param {Object} style An object containing borderColor, - * backgroundColor, etc. - * @return {Object} group The created group object - */ - - }, { - key: "add", - value: function add(groupName, style) { - this.groups[groupName] = style; - this.groupsArray.push(groupName); - return style; + /** + * this generates the SVG path for a linear drawing between datapoints. + * @param data + * @returns {string} + * @private + */ + Line._linear = function (data) { + // linear + var d = []; + for (var i = 0; i < data.length; i++) { + d.push([data[i].screen_x, data[i].screen_y]); } - }]); - return Groups; - }(); + return d; + }; - exports["default"] = Groups; + module.exports = Line; -/***/ }, -/* 162 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 156 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); + var _keys = __webpack_require__(58); - var _classCallCheck2 = __webpack_require__(119); + var _keys2 = _interopRequireDefault(_keys); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _createClass2 = __webpack_require__(120); + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(88); + var Component = __webpack_require__(120); - var _createClass3 = _interopRequireDefault(_createClass2); + /** + * Legend for Graph2d + */ + function Legend(body, options, side, linegraphOptions) { + this.body = body; + this.defaultOptions = { + enabled: false, + icons: true, + iconSize: 20, + iconSpacing: 6, + left: { + visible: true, + position: 'top-left' // top/bottom - left,center,right + }, + right: { + visible: true, + position: 'top-right' // top/bottom - left,center,right + } + }; - var _Node = __webpack_require__(163); + this.side = side; + this.options = util.extend({}, this.defaultOptions); + this.linegraphOptions = linegraphOptions; - var _Node2 = _interopRequireDefault(_Node); + this.svgElements = {}; + this.dom = {}; + this.groups = {}; + this.amountOfGroups = 0; + this._create(); + this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups }; - var _Label = __webpack_require__(164); + this.setOptions(options); + } - var _Label2 = _interopRequireDefault(_Label); + Legend.prototype = new Component(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + Legend.prototype.clear = function () { + this.groups = {}; + this.amountOfGroups = 0; + }; - var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); + Legend.prototype.addGroup = function (label, graphOptions) { - var NodesHandler = function () { - function NodesHandler(body, images, groups, layoutEngine) { - var _this = this; + // 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; + } + }; - (0, _classCallCheck3['default'])(this, NodesHandler); + Legend.prototype.updateGroup = function (label, graphOptions) { + this.groups[label] = graphOptions; + }; - this.body = body; - this.images = images; - this.groups = groups; - this.layoutEngine = layoutEngine; + Legend.prototype.removeGroup = function (label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; + } + }; - // create the node API in the body container - this.body.functions.createNode = this.create.bind(this); + Legend.prototype._create = function () { + this.dom.frame = document.createElement('div'); + this.dom.frame.className = 'vis-legend'; + this.dom.frame.style.position = "absolute"; + this.dom.frame.style.top = "10px"; + this.dom.frame.style.display = "block"; - this.nodesListeners = { - add: function add(event, params) { - _this.add(params.items); - }, - update: function update(event, params) { - _this.update(params.items, params.data); - }, - remove: function remove(event, params) { - _this.remove(params.items); - } - }; - - this.options = {}; - this.defaultOptions = { - borderWidth: 1, - borderWidthSelected: 2, - brokenImage: undefined, - color: { - border: '#2B7CE9', - background: '#97C2FC', - highlight: { - border: '#2B7CE9', - background: '#D2E5FF' - }, - hover: { - border: '#2B7CE9', - background: '#D2E5FF' - } - }, - fixed: { - x: false, - y: false - }, - font: { - color: '#343434', - size: 14, // px - face: 'arial', - background: 'none', - strokeWidth: 0, // px - strokeColor: '#ffffff', - align: 'center', - vadjust: 0, - multi: false, - bold: { - mod: 'bold' - }, - boldital: { - mod: 'bold italic' - }, - ital: { - mod: 'italic' - }, - mono: { - mod: '', - size: 15, // px - face: 'courier new', - vadjust: 2 - } - }, - group: undefined, - hidden: false, - icon: { - face: 'FontAwesome', //'FontAwesome', - code: undefined, //'\uf007', - size: 50, //50, - color: '#2B7CE9' //'#aa00ff' - }, - image: undefined, // --> URL - label: undefined, - labelHighlightBold: true, - level: undefined, - margin: { - top: 5, - right: 5, - bottom: 5, - left: 5 - }, - mass: 1, - physics: true, - scaling: { - min: 10, - max: 30, - label: { - enabled: false, - min: 14, - max: 30, - maxVisible: 30, - drawThreshold: 5 - }, - customScalingFunction: function customScalingFunction(min, max, total, value) { - if (max === min) { - return 0.5; - } else { - var scale = 1 / (max - min); - return Math.max(0, (value - min) * scale); - } - } - }, - shadow: { - enabled: false, - color: 'rgba(0,0,0,0.5)', - size: 10, - x: 5, - y: 5 - }, - shape: 'ellipse', - shapeProperties: { - borderDashes: false, // only for borders - borderRadius: 6, // only for box shape - interpolation: true, // only for image and circularImage shapes - useImageSize: false, // only for image and circularImage shapes - useBorderWithImage: false // only for image shape - }, - size: 25, - title: undefined, - value: undefined, - x: undefined, - y: undefined - }; - util.extend(this.options, this.defaultOptions); + this.dom.textArea = document.createElement('div'); + this.dom.textArea.className = 'vis-legend-text'; + this.dom.textArea.style.position = "relative"; + this.dom.textArea.style.top = "0px"; - this.bindEventListeners(); - } + this.svg = document.createElementNS('http://www.w3.org/2000/svg', "svg"); + this.svg.style.position = 'absolute'; + this.svg.style.top = 0 + 'px'; + this.svg.style.width = this.options.iconSize + 5 + 'px'; + this.svg.style.height = '100%'; - (0, _createClass3['default'])(NodesHandler, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this2 = this; + this.dom.frame.appendChild(this.svg); + this.dom.frame.appendChild(this.dom.textArea); + }; - // refresh the nodes. Used when reverting from hierarchical layout - this.body.emitter.on('refreshNodes', this.refresh.bind(this)); - this.body.emitter.on('refresh', this.refresh.bind(this)); - this.body.emitter.on('destroy', function () { - util.forEach(_this2.nodesListeners, function (callback, event) { - if (_this2.body.data.nodes) _this2.body.data.nodes.off(event, callback); - }); - delete _this2.body.functions.createNode; - delete _this2.nodesListeners.add; - delete _this2.nodesListeners.update; - delete _this2.nodesListeners.remove; - delete _this2.nodesListeners; - }); - } - }, { - key: 'setOptions', - value: function setOptions(options) { - this.nodeOptions = options; - if (options !== undefined) { - _Node2['default'].parseOptions(this.options, options); + /** + * Hide the component from the DOM + */ + Legend.prototype.hide = function () { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } + }; - // update the shape in all nodes - if (options.shape !== undefined) { - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - this.body.nodes[nodeId].updateShape(); - } - } - } + /** + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed + */ + Legend.prototype.show = function () { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } + }; - // update the font in all nodes - if (options.font !== undefined) { - _Label2['default'].parseOptions(this.options.font, options); - for (var _nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(_nodeId)) { - this.body.nodes[_nodeId].updateLabelModule(); - this.body.nodes[_nodeId]._reset(); - } - } - } + Legend.prototype.setOptions = function (options) { + var fields = ['enabled', 'orientation', 'icons', 'left', 'right']; + util.selectiveDeepExtend(fields, this.options, options); + }; - // update the shape size in all nodes - if (options.size !== undefined) { - for (var _nodeId2 in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(_nodeId2)) { - this.body.nodes[_nodeId2]._reset(); - } - } - } + Legend.prototype.redraw = function () { + var activeGroups = 0; + var groupArray = (0, _keys2['default'])(this.groups); + groupArray.sort(function (a, b) { + return a < b ? -1 : 1; + }); - // update the state of the letiables if needed - if (options.hidden !== undefined || options.physics !== undefined) { - this.body.emitter.emit('_dataChanged'); - } - } + for (var i = 0; i < groupArray.length; i++) { + var groupId = groupArray[i]; + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; } + } - /** - * Set a data set with nodes for the network - * @param {Array | DataSet | DataView} nodes The data containing the nodes. - * @private - */ - - }, { - key: 'setData', - value: function setData(nodes) { - var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var oldNodesData = this.body.data.nodes; - - if (nodes instanceof DataSet || nodes instanceof DataView) { - this.body.data.nodes = nodes; - } else if (Array.isArray(nodes)) { - this.body.data.nodes = new DataSet(); - this.body.data.nodes.add(nodes); - } else if (!nodes) { - this.body.data.nodes = new DataSet(); - } else { - throw new TypeError('Array or DataSet expected'); - } - - if (oldNodesData) { - // unsubscribe from old dataset - util.forEach(this.nodesListeners, function (callback, event) { - oldNodesData.off(event, callback); - }); - } - - // remove drawn nodes - this.body.nodes = {}; - - if (this.body.data.nodes) { - // subscribe to new dataset - var me = this; - util.forEach(this.nodesListeners, function (callback, event) { - me.body.data.nodes.on(event, callback); - }); - - // draw all new nodes - var ids = this.body.data.nodes.getIds(); - this.add(ids, true); - } - - if (doNotEmit === false) { - this.body.emitter.emit("_dataChanged"); - } + if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + this.hide(); + } else { + this.show(); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { + this.dom.frame.style.left = '4px'; + this.dom.frame.style.textAlign = "left"; + this.dom.textArea.style.textAlign = "left"; + this.dom.textArea.style.left = this.options.iconSize + 15 + 'px'; + this.dom.textArea.style.right = ''; + this.svg.style.left = 0 + 'px'; + this.svg.style.right = ''; + } else { + this.dom.frame.style.right = '4px'; + this.dom.frame.style.textAlign = "right"; + this.dom.textArea.style.textAlign = "right"; + this.dom.textArea.style.right = this.options.iconSize + 15 + 'px'; + this.dom.textArea.style.left = ''; + this.svg.style.right = 0 + 'px'; + this.svg.style.left = ''; } - /** - * Add nodes - * @param {Number[] | String[]} ids - * @private - */ - - }, { - key: 'add', - value: function add(ids) { - var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var id = void 0; - var newNodes = []; - for (var i = 0; i < ids.length; i++) { - id = ids[i]; - var properties = this.body.data.nodes.get(id); - var node = this.create(properties); - newNodes.push(node); - this.body.nodes[id] = node; // note: this may replace an existing node - } - - this.layoutEngine.positionInitially(newNodes); - - if (doNotEmit === false) { - this.body.emitter.emit("_dataChanged"); - } + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { + this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px", "")) + 'px'; + this.dom.frame.style.bottom = ''; + } else { + var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; + this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px", "")) + 'px'; + this.dom.frame.style.top = ''; } - /** - * Update existing nodes, or create them when not yet existing - * @param {Number[] | String[]} ids - * @private - */ - - }, { - key: 'update', - value: function update(ids, changedData) { - var nodes = this.body.nodes; - var dataChanged = false; - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - var node = nodes[id]; - var data = changedData[i]; - if (node !== undefined) { - // update node - dataChanged = node.setOptions(data); - } else { - dataChanged = true; - // create node - node = this.create(data); - nodes[id] = node; - } - } - if (dataChanged === true) { - this.body.emitter.emit("_dataChanged"); - } else { - this.body.emitter.emit("_dataUpdated"); - } + if (this.options.icons == false) { + this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; + this.dom.textArea.style.right = ''; + this.dom.textArea.style.left = ''; + this.svg.style.width = '0px'; + } else { + this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'; + this.drawLegendIcons(); } - /** - * Remove existing nodes. If nodes do not exist, the method will just ignore it. - * @param {Number[] | String[]} ids - * @private - */ - - }, { - key: 'remove', - value: function remove(ids) { - var nodes = this.body.nodes; - - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - delete nodes[id]; + var content = ''; + for (var i = 0; i < groupArray.length; i++) { + var groupId = groupArray[i]; + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + content += this.groups[groupId].content + '
'; } - - this.body.emitter.emit("_dataChanged"); } + this.dom.textArea.innerHTML = content; + this.dom.textArea.style.lineHeight = 0.75 * this.options.iconSize + this.options.iconSpacing + 'px'; + } + }; - /** - * create a node - * @param properties - * @param constructorClass - */ - - }, { - key: 'create', - value: function create(properties) { - var constructorClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Node2['default']; + Legend.prototype.drawLegendIcons = function () { + if (this.dom.frame.parentNode) { + var groupArray = (0, _keys2['default'])(this.groups); + groupArray.sort(function (a, b) { + return a < b ? -1 : 1; + }); - return new constructorClass(properties, this.body, this.images, this.groups, this.options, this.defaultOptions, this.nodeOptions); - } - }, { - key: 'refresh', - value: function refresh() { - var clearPositions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + // this resets the elements so the order is maintained + DOMutil.resetElements(this.svgElements); - var nodes = this.body.nodes; - for (var nodeId in nodes) { - var node = undefined; - if (nodes.hasOwnProperty(nodeId)) { - node = nodes[nodeId]; - } - var data = this.body.data.nodes._data[nodeId]; - if (node !== undefined && data !== undefined) { - if (clearPositions === true) { - node.setOptions({ x: null, y: null }); - } - node.setOptions({ fixed: false }); - node.setOptions(data); - } - } - } + var padding = window.getComputedStyle(this.dom.frame).paddingTop; + var iconOffset = Number(padding.replace('px', '')); + var x = iconOffset; + var iconWidth = this.options.iconSize; + var iconHeight = 0.75 * this.options.iconSize; + var y = iconOffset + 0.5 * iconHeight + 3; - /** - * Returns the positions of the nodes. - * @param ids --> optional, can be array of nodeIds, can be string - * @returns {{}} - */ + this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - }, { - key: 'getPositions', - value: function getPositions(ids) { - var dataArray = {}; - if (ids !== undefined) { - if (Array.isArray(ids) === true) { - for (var i = 0; i < ids.length; i++) { - if (this.body.nodes[ids[i]] !== undefined) { - var node = this.body.nodes[ids[i]]; - dataArray[ids[i]] = { x: Math.round(node.x), y: Math.round(node.y) }; - } - } - } else { - if (this.body.nodes[ids] !== undefined) { - var _node = this.body.nodes[ids]; - dataArray[ids] = { x: Math.round(_node.x), y: Math.round(_node.y) }; - } - } - } else { - for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { - var _node2 = this.body.nodes[this.body.nodeIndices[_i]]; - dataArray[this.body.nodeIndices[_i]] = { x: Math.round(_node2.x), y: Math.round(_node2.y) }; - } + for (var i = 0; i < groupArray.length; i++) { + var groupId = groupArray[i]; + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y); + y += iconHeight + this.options.iconSpacing; } - return dataArray; } + } + }; - /** - * Load the XY positions of the nodes into the dataset. - */ - - }, { - key: 'storePositions', - value: function storePositions() { - // todo: add support for clusters and hierarchical. - var dataArray = []; - var dataset = this.body.data.nodes.getDataSet(); + module.exports = Legend; - for (var nodeId in dataset._data) { - if (dataset._data.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - if (dataset._data[nodeId].x != Math.round(node.x) || dataset._data[nodeId].y != Math.round(node.y)) { - dataArray.push({ id: node.id, x: Math.round(node.x), y: Math.round(node.y) }); - } - } - } - dataset.update(dataArray); - } +/***/ }), +/* 157 */ +/***/ (function(module, exports) { - /** - * get the bounding box of a node. - * @param nodeId - * @returns {j|*} - */ + 'use strict'; - }, { - key: 'getBoundingBox', - value: function getBoundingBox(nodeId) { - if (this.body.nodes[nodeId] !== undefined) { - return this.body.nodes[nodeId].shape.boundingBox; - } - } + Object.defineProperty(exports, "__esModule", { + value: true + }); + /** + * This object contains all possible options. It will check if the types are correct, if required if the option is one + * of the allowed values. + * + * __any__ means that the name of the property does not matter. + * __type__ is a required field for all objects and contains the allowed types of all objects + */ + var string = 'string'; + var bool = 'boolean'; + var number = 'number'; + var array = 'array'; + var date = 'date'; + var object = 'object'; // should only be in a __type__ property + var dom = 'dom'; + var moment = 'moment'; + var any = 'any'; - /** - * Get the Ids of nodes connected to this node. - * @param nodeId - * @returns {Array} - */ + var allOptions = { + configure: { + enabled: { 'boolean': bool }, + filter: { 'boolean': bool, 'function': 'function' }, + container: { dom: dom }, + __type__: { object: object, 'boolean': bool, 'function': 'function' } + }, - }, { - key: 'getConnectedNodes', - value: function getConnectedNodes(nodeId) { - var nodeList = []; - if (this.body.nodes[nodeId] !== undefined) { - var node = this.body.nodes[nodeId]; - var nodeObj = {}; // used to quickly check if node already exists - for (var i = 0; i < node.edges.length; i++) { - var edge = node.edges[i]; - if (edge.toId == node.id) { - // these are double equals since ids can be numeric or string - if (nodeObj[edge.fromId] === undefined) { - nodeList.push(edge.fromId); - nodeObj[edge.fromId] = true; - } - } else if (edge.fromId == node.id) { - // these are double equals since ids can be numeric or string - if (nodeObj[edge.toId] === undefined) { - nodeList.push(edge.toId); - nodeObj[edge.toId] = true; - } - } - } - } - return nodeList; - } + //globals : + yAxisOrientation: { string: ['left', 'right'] }, + defaultGroup: { string: string }, + sort: { 'boolean': bool }, + sampling: { 'boolean': bool }, + stack: { 'boolean': bool }, + graphHeight: { string: string, number: number }, + shaded: { + enabled: { 'boolean': bool }, + orientation: { string: ['bottom', 'top', 'zero', 'group'] }, // top, bottom, zero, group + groupId: { object: object }, + __type__: { 'boolean': bool, object: object } + }, + style: { string: ['line', 'bar', 'points'] }, // line, bar + barChart: { + width: { number: number }, + minWidth: { number: number }, + sideBySide: { 'boolean': bool }, + align: { string: ['left', 'center', 'right'] }, + __type__: { object: object } + }, + interpolation: { + enabled: { 'boolean': bool }, + parametrization: { string: ['centripetal', 'chordal', 'uniform'] }, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) + alpha: { number: number }, + __type__: { object: object, 'boolean': bool } + }, + drawPoints: { + enabled: { 'boolean': bool }, + onRender: { 'function': 'function' }, + size: { number: number }, + style: { string: ['square', 'circle'] }, // square, circle + __type__: { object: object, 'boolean': bool, 'function': 'function' } + }, + dataAxis: { + showMinorLabels: { 'boolean': bool }, + showMajorLabels: { 'boolean': bool }, + icons: { 'boolean': bool }, + width: { string: string, number: number }, + visible: { 'boolean': bool }, + alignZeros: { 'boolean': bool }, + left: { + range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } }, + format: { 'function': 'function' }, + title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } }, + __type__: { object: object } + }, + right: { + range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } }, + format: { 'function': 'function' }, + title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } }, + __type__: { object: object } + }, + __type__: { object: object } + }, + legend: { + enabled: { 'boolean': bool }, + icons: { 'boolean': bool }, + left: { + visible: { 'boolean': bool }, + position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] }, + __type__: { object: object } + }, + right: { + visible: { 'boolean': bool }, + position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] }, + __type__: { object: object } + }, + __type__: { object: object, 'boolean': bool } + }, + groups: { + visibility: { any: any }, + __type__: { object: object } + }, - /** - * Get the ids of the edges connected to this node. - * @param nodeId - * @returns {*} - */ + autoResize: { 'boolean': bool }, + throttleRedraw: { number: number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511 + clickToUse: { 'boolean': bool }, + end: { number: number, date: date, string: string, moment: moment }, + format: { + minorLabels: { + millisecond: { string: string, 'undefined': 'undefined' }, + second: { string: string, 'undefined': 'undefined' }, + minute: { string: string, 'undefined': 'undefined' }, + hour: { string: string, 'undefined': 'undefined' }, + weekday: { string: string, 'undefined': 'undefined' }, + day: { string: string, 'undefined': 'undefined' }, + month: { string: string, 'undefined': 'undefined' }, + year: { string: string, 'undefined': 'undefined' }, + __type__: { object: object } + }, + majorLabels: { + millisecond: { string: string, 'undefined': 'undefined' }, + second: { string: string, 'undefined': 'undefined' }, + minute: { string: string, 'undefined': 'undefined' }, + hour: { string: string, 'undefined': 'undefined' }, + weekday: { string: string, 'undefined': 'undefined' }, + day: { string: string, 'undefined': 'undefined' }, + month: { string: string, 'undefined': 'undefined' }, + year: { string: string, 'undefined': 'undefined' }, + __type__: { object: object } + }, + __type__: { object: object } + }, + moment: { 'function': 'function' }, + height: { string: string, number: number }, + hiddenDates: { + start: { date: date, number: number, string: string, moment: moment }, + end: { date: date, number: number, string: string, moment: moment }, + repeat: { string: string }, + __type__: { object: object, array: array } + }, + locale: { string: string }, + locales: { + __any__: { any: any }, + __type__: { object: object } + }, + max: { date: date, number: number, string: string, moment: moment }, + maxHeight: { number: number, string: string }, + maxMinorChars: { number: number }, + min: { date: date, number: number, string: string, moment: moment }, + minHeight: { number: number, string: string }, + moveable: { 'boolean': bool }, + multiselect: { 'boolean': bool }, + orientation: { string: string }, + showCurrentTime: { 'boolean': bool }, + showMajorLabels: { 'boolean': bool }, + showMinorLabels: { 'boolean': bool }, + start: { date: date, number: number, string: string, moment: moment }, + timeAxis: { + scale: { string: string, 'undefined': 'undefined' }, + step: { number: number, 'undefined': 'undefined' }, + __type__: { object: object } + }, + width: { string: string, number: number }, + zoomable: { 'boolean': bool }, + zoomKey: { string: ['ctrlKey', 'altKey', 'metaKey', ''] }, + zoomMax: { number: number }, + zoomMin: { number: number }, + zIndex: { number: number }, + __type__: { object: object } + }; - }, { - key: 'getConnectedEdges', - value: function getConnectedEdges(nodeId) { - var edgeList = []; - if (this.body.nodes[nodeId] !== undefined) { - var node = this.body.nodes[nodeId]; - for (var i = 0; i < node.edges.length; i++) { - edgeList.push(node.edges[i].id); - } - } else { - console.log("NodeId provided for getConnectedEdges does not exist. Provided: ", nodeId); + var configureOptions = { + global: { + //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly + sort: true, + sampling: true, + stack: false, + shaded: { + enabled: false, + orientation: ['zero', 'top', 'bottom', 'group'] // zero, top, bottom + }, + style: ['line', 'bar', 'points'], // line, bar + barChart: { + width: [50, 5, 100, 5], + minWidth: [50, 5, 100, 5], + sideBySide: false, + align: ['left', 'center', 'right'] // left, center, right + }, + interpolation: { + enabled: true, + parametrization: ['centripetal', 'chordal', 'uniform'] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) + }, + drawPoints: { + enabled: true, + size: [6, 2, 30, 1], + style: ['square', 'circle'] // square, circle + }, + dataAxis: { + showMinorLabels: true, + showMajorLabels: true, + icons: false, + width: [40, 0, 200, 1], + visible: true, + alignZeros: true, + left: { + //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined}, + //format: function (value) {return value;}, + title: { text: '', style: '' } + }, + right: { + //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined}, + //format: function (value) {return value;}, + title: { text: '', style: '' } } - return edgeList; - } - - /** - * Move a node. - * @param String nodeId - * @param Number x - * @param Number y - */ - - }, { - key: 'moveNode', - value: function moveNode(nodeId, x, y) { - var _this3 = this; + }, + legend: { + enabled: false, + icons: true, + left: { + visible: true, + position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right + }, + right: { + visible: true, + position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right + } + }, - if (this.body.nodes[nodeId] !== undefined) { - this.body.nodes[nodeId].x = Number(x); - this.body.nodes[nodeId].y = Number(y); - setTimeout(function () { - _this3.body.emitter.emit("startSimulation"); - }, 0); - } else { - console.log("Node id supplied to moveNode does not exist. Provided: ", nodeId); + autoResize: true, + clickToUse: false, + end: '', + format: { + minorLabels: { + millisecond: 'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + month: 'MMM', + year: 'YYYY' + }, + majorLabels: { + millisecond: 'HH:mm:ss', + second: 'D MMMM HH:mm', + minute: 'ddd D MMMM', + hour: 'ddd D MMMM', + weekday: 'MMMM YYYY', + day: 'MMMM YYYY', + month: 'YYYY', + year: '' } - } - }]); - return NodesHandler; - }(); + }, - exports['default'] = NodesHandler; + height: '', + locale: '', + max: '', + maxHeight: '', + maxMinorChars: [7, 0, 20, 1], + min: '', + minHeight: '', + moveable: true, + orientation: ['both', 'bottom', 'top'], + showCurrentTime: false, + showMajorLabels: true, + showMinorLabels: true, + start: '', + width: '100%', + zoomable: true, + zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''], + zoomMax: [315360000000000, 10, 315360000000000, 1], + zoomMin: [10, 10, 315360000000000, 1], + zIndex: 0 + } + }; -/***/ }, -/* 163 */ -/***/ function(module, exports, __webpack_require__) { + exports.allOptions = allOptions; + exports.configureOptions = configureOptions; + +/***/ }), +/* 158 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); + // utils + exports.util = __webpack_require__(1); + exports.DOMutil = __webpack_require__(88); - var _typeof2 = __webpack_require__(62); + // data + exports.DataSet = __webpack_require__(89); + exports.DataView = __webpack_require__(93); + exports.Queue = __webpack_require__(92); - var _typeof3 = _interopRequireDefault(_typeof2); + // Network + exports.Network = __webpack_require__(159); + exports.network = { + Images: __webpack_require__(164), + dotparser: __webpack_require__(161), + gephiParser: __webpack_require__(162), + allOptions: __webpack_require__(229) + }; + exports.network.convertDot = function (input) { + return exports.network.dotparser.DOTToGraph(input); + }; + exports.network.convertGephi = function (input, options) { + return exports.network.gephiParser.parseGephi(input, options); + }; - var _classCallCheck2 = __webpack_require__(119); + // bundled external libraries + exports.moment = __webpack_require__(82); + exports.Hammer = __webpack_require__(112); + exports.keycharm = __webpack_require__(115); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { - var _createClass2 = __webpack_require__(120); + 'use strict'; - var _createClass3 = _interopRequireDefault(_createClass2); + // Load custom shapes into CanvasRenderingContext2D + __webpack_require__(160); - var _Label = __webpack_require__(164); + var Emitter = __webpack_require__(99); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); + var dotparser = __webpack_require__(161); + var gephiParser = __webpack_require__(162); + var Activator = __webpack_require__(140); + var locales = __webpack_require__(163); + + var Images = __webpack_require__(164)['default']; + var Groups = __webpack_require__(166)['default']; + var NodesHandler = __webpack_require__(167)['default']; + var EdgesHandler = __webpack_require__(200)['default']; + var PhysicsEngine = __webpack_require__(209)['default']; + var ClusterEngine = __webpack_require__(218)['default']; + var CanvasRenderer = __webpack_require__(221)['default']; + var Canvas = __webpack_require__(222)['default']; + var View = __webpack_require__(223)['default']; + var InteractionHandler = __webpack_require__(224)['default']; + var SelectionHandler = __webpack_require__(226)['default']; + var LayoutEngine = __webpack_require__(227)['default']; + var ManipulationSystem = __webpack_require__(228)['default']; + var Configurator = __webpack_require__(146)['default']; + var Validator = __webpack_require__(144)['default']; + + var _require = __webpack_require__(144), + printStyle = _require.printStyle; + + var _require2 = __webpack_require__(229), + allOptions = _require2.allOptions, + configureOptions = _require2.configureOptions; + + var KamadaKawai = __webpack_require__(230)['default']; - var _Label2 = _interopRequireDefault(_Label); + /** + * @constructor Network + * Create a network visualization, displaying nodes and edges. + * + * @param {Element} container The DOM element in which the Network will + * be created. Normally a div element. + * @param {Object} data An object containing parameters + * {Array} nodes + * {Array} edges + * @param {Object} options Options + */ + function Network(container, data, options) { + var _this = this; - var _Box = __webpack_require__(169); + if (!(this instanceof Network)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } - var _Box2 = _interopRequireDefault(_Box); + // set constant values + this.options = {}; + this.defaultOptions = { + locale: 'en', + locales: locales, + clickToUse: false + }; + util.extend(this.options, this.defaultOptions); - var _Circle = __webpack_require__(180); + // containers for nodes and edges + this.body = { + container: container, + nodes: {}, + nodeIndices: [], + edges: {}, + edgeIndices: [], + emitter: { + on: this.on.bind(this), + off: this.off.bind(this), + emit: this.emit.bind(this), + once: this.once.bind(this) + }, + eventListeners: { + onTap: function onTap() {}, + onTouch: function onTouch() {}, + onDoubleTap: function onDoubleTap() {}, + onHold: function onHold() {}, + onDragStart: function onDragStart() {}, + onDrag: function onDrag() {}, + onDragEnd: function onDragEnd() {}, + onMouseWheel: function onMouseWheel() {}, + onPinch: function onPinch() {}, + onMouseMove: function onMouseMove() {}, + onRelease: function onRelease() {}, + onContext: function onContext() {} + }, + data: { + nodes: null, // A DataSet or DataView + edges: null // A DataSet or DataView + }, + functions: { + createNode: function createNode() {}, + createEdge: function createEdge() {}, + getPointer: function getPointer() {} + }, + modules: {}, + view: { + scale: 1, + translation: { x: 0, y: 0 } + } + }; - var _Circle2 = _interopRequireDefault(_Circle); + // bind the event listeners + this.bindEventListeners(); - var _CircularImage = __webpack_require__(182); + // setting up all modules + this.images = new Images(function () { + return _this.body.emitter.emit("_requestRedraw"); + }); // object with images + this.groups = new Groups(); // object with groups + this.canvas = new Canvas(this.body); // DOM handler + this.selectionHandler = new SelectionHandler(this.body, this.canvas); // Selection handler + this.interactionHandler = new InteractionHandler(this.body, this.canvas, this.selectionHandler); // Interaction handler handles all the hammer bindings (that are bound by canvas), key + this.view = new View(this.body, this.canvas); // camera handler, does animations and zooms + this.renderer = new CanvasRenderer(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into + this.physics = new PhysicsEngine(this.body); // physics engine, does all the simulations + this.layoutEngine = new LayoutEngine(this.body); // layout engine for inital layout and hierarchical layout + this.clustering = new ClusterEngine(this.body); // clustering api + this.manipulation = new ManipulationSystem(this.body, this.canvas, this.selectionHandler); // data manipulation system + + this.nodesHandler = new NodesHandler(this.body, this.images, this.groups, this.layoutEngine); // Handle adding, deleting and updating of nodes as well as global options + this.edgesHandler = new EdgesHandler(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options + + this.body.modules["kamadaKawai"] = new KamadaKawai(this.body, 150, 0.05); // Layouting algorithm. + this.body.modules["clustering"] = this.clustering; - var _CircularImage2 = _interopRequireDefault(_CircularImage); + // create the DOM elements + this.canvas._create(); - var _Database = __webpack_require__(183); + // apply options + this.setOptions(options); - var _Database2 = _interopRequireDefault(_Database); + // load data (the disable start variable will be the same as the enabled clustering) + this.setData(data); + } - var _Diamond = __webpack_require__(184); + // Extend Network with an Emitter mixin + Emitter(Network.prototype); - var _Diamond2 = _interopRequireDefault(_Diamond); + /** + * Set options + * @param {Object} options + */ + Network.prototype.setOptions = function (options) { + var _this2 = this; - var _Dot = __webpack_require__(186); + if (options !== undefined) { + var errorFound = Validator.validate(options, allOptions); + if (errorFound === true) { + console.log('%cErrors have been found in the supplied options object.', printStyle); + } - var _Dot2 = _interopRequireDefault(_Dot); + // copy the global fields over + var fields = ['locale', 'locales', 'clickToUse']; + util.selectiveDeepExtend(fields, this.options, options); - var _Ellipse = __webpack_require__(187); + // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system. + options = this.layoutEngine.setOptions(options.layout, options); - var _Ellipse2 = _interopRequireDefault(_Ellipse); + this.canvas.setOptions(options); // options for canvas are in globals - var _Icon = __webpack_require__(188); + // pass the options to the modules + this.groups.setOptions(options.groups); + this.nodesHandler.setOptions(options.nodes); + this.edgesHandler.setOptions(options.edges); + this.physics.setOptions(options.physics); + this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals - var _Icon2 = _interopRequireDefault(_Icon); + this.interactionHandler.setOptions(options.interaction); + this.renderer.setOptions(options.interaction); // options for rendering are in interaction + this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction - var _Image = __webpack_require__(189); + // reload the settings of the nodes to apply changes in groups that are not referenced by pointer. + if (options.groups !== undefined) { + this.body.emitter.emit("refreshNodes"); + } + // these two do not have options at the moment, here for completeness + //this.view.setOptions(options.view); + //this.clustering.setOptions(options.clustering); - var _Image2 = _interopRequireDefault(_Image); + if ('configure' in options) { + if (!this.configurator) { + this.configurator = new Configurator(this, this.body.container, configureOptions, this.canvas.pixelRatio); + } - var _Square = __webpack_require__(190); + this.configurator.setOptions(options.configure); + } - var _Square2 = _interopRequireDefault(_Square); + // if the configuration system is enabled, copy all options and put them into the config system + if (this.configurator && this.configurator.options.enabled === true) { + var networkOptions = { nodes: {}, edges: {}, layout: {}, interaction: {}, manipulation: {}, physics: {}, global: {} }; + util.deepExtend(networkOptions.nodes, this.nodesHandler.options); + util.deepExtend(networkOptions.edges, this.edgesHandler.options); + util.deepExtend(networkOptions.layout, this.layoutEngine.options); + // load the selectionHandler and render default options in to the interaction group + util.deepExtend(networkOptions.interaction, this.selectionHandler.options); + util.deepExtend(networkOptions.interaction, this.renderer.options); - var _Star = __webpack_require__(191); + util.deepExtend(networkOptions.interaction, this.interactionHandler.options); + util.deepExtend(networkOptions.manipulation, this.manipulation.options); + util.deepExtend(networkOptions.physics, this.physics.options); - var _Star2 = _interopRequireDefault(_Star); + // load globals into the global object + util.deepExtend(networkOptions.global, this.canvas.options); + util.deepExtend(networkOptions.global, this.options); - var _Text = __webpack_require__(192); + this.configurator.setModuleOptions(networkOptions); + } - var _Text2 = _interopRequireDefault(_Text); + // handle network global options + if (options.clickToUse !== undefined) { + if (options.clickToUse === true) { + if (this.activator === undefined) { + this.activator = new Activator(this.canvas.frame); + this.activator.on('change', function () { + _this2.body.emitter.emit("activate"); + }); + } + } else { + if (this.activator !== undefined) { + this.activator.destroy(); + delete this.activator; + } + this.body.emitter.emit("activate"); + } + } else { + this.body.emitter.emit("activate"); + } - var _Triangle = __webpack_require__(193); - - var _Triangle2 = _interopRequireDefault(_Triangle); + this.canvas.setSize(); + // start the physics simulation. Can be safely called multiple times. + this.body.emitter.emit("startSimulation"); + } + }; - var _TriangleDown = __webpack_require__(194); + /** + * Update the this.body.nodeIndices with the most recent node index list + * @private + */ + Network.prototype._updateVisibleIndices = function () { + var nodes = this.body.nodes; + var edges = this.body.edges; + this.body.nodeIndices = []; + this.body.edgeIndices = []; - var _TriangleDown2 = _interopRequireDefault(_TriangleDown); + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + if (nodes[nodeId].options.hidden === false) { + this.body.nodeIndices.push(nodes[nodeId].id); + } + } + } - var _Validator = __webpack_require__(126); + for (var edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + if (edges[edgeId].options.hidden === false) { + this.body.edgeIndices.push(edges[edgeId].id); + } + } + } + }; - var _Validator2 = _interopRequireDefault(_Validator); + /** + * Bind all events + */ + Network.prototype.bindEventListeners = function () { + var _this3 = this; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed. + this.body.emitter.on("_dataChanged", function () { + // update shortcut lists + _this3._updateVisibleIndices(); + _this3.body.emitter.emit("_requestRedraw"); + // call the dataUpdated event because the only difference between the two is the updating of the indices + _this3.body.emitter.emit("_dataUpdated"); + }); - var util = __webpack_require__(1); + // this is called when options of EXISTING nodes or edges have changed. + this.body.emitter.on("_dataUpdated", function () { + // update values + _this3._updateValueRange(_this3.body.nodes); + _this3._updateValueRange(_this3.body.edges); + // start simulation (can be called safely, even if already running) + _this3.body.emitter.emit("startSimulation"); + _this3.body.emitter.emit("_requestRedraw"); + }); + }; /** - * @class Node - * A node. A node can be connected to other nodes via one or multiple edges. - * @param {object} options An object containing options for the node. All - * options are optional, except for the id. - * {number} id Id of the node. Required - * {string} label Text label for the node - * {number} x Horizontal position of the node - * {number} y Vertical position of the node - * {string} shape Node shape, available: - * "database", "circle", "ellipse", - * "box", "image", "text", "dot", - * "star", "triangle", "triangleDown", - * "square", "icon" - * {string} image An image url - * {string} title An title text, can be HTML - * {anytype} group A group name or number - * @param {Network.Images} imagelist A list with images. Only needed - * when the node has an image - * @param {Network.Groups} grouplist A list with groups. Needed for - * retrieving group options - * @param {Object} constants An object with default values for - * example for the color + * Set nodes and edges, and optionally options as well. * + * @param {Object} data Object containing parameters: + * {Array | DataSet | DataView} [nodes] Array with nodes + * {Array | DataSet | DataView} [edges] Array with edges + * {String} [dot] String containing data in DOT format + * {String} [gephi] String containing data in gephi JSON format + * {Options} [options] Object with options */ - var Node = function () { - function Node(options, body, imagelist, grouplist, globalOptions, defaultOptions, nodeOptions) { - (0, _classCallCheck3['default'])(this, Node); + Network.prototype.setData = function (data) { + // reset the physics engine. + this.body.emitter.emit("resetPhysics"); + this.body.emitter.emit("_resetData"); - this.options = util.bridgeObject(globalOptions); - this.globalOptions = globalOptions; - this.defaultOptions = defaultOptions; - this.nodeOptions = nodeOptions; - this.body = body; + // unselect all to ensure no selections from old data are carried over. + this.selectionHandler.unselectAll(); - this.edges = []; // all edges connected to this node + if (data && data.dot && (data.nodes || data.edges)) { + throw new SyntaxError('Data must contain either parameter "dot" or ' + ' parameter pair "nodes" and "edges", but not both.'); + } - // set defaults for the options - this.id = undefined; - this.imagelist = imagelist; - this.grouplist = grouplist; + // set options + this.setOptions(data && data.options); + // set all data + if (data && data.dot) { + console.log('The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);'); + // parse DOT file + var dotData = dotparser.DOTToGraph(data.dot); + this.setData(dotData); + return; + } else if (data && data.gephi) { + // parse DOT file + console.log('The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);'); + var gephiData = gephiParser.parseGephi(data.gephi); + this.setData(gephiData); + return; + } else { + this.nodesHandler.setData(data && data.nodes, true); + this.edgesHandler.setData(data && data.edges, true); + } - // state options - this.x = undefined; - this.y = undefined; - this.baseSize = this.options.size; - this.baseFontSize = this.options.font.size; - this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate - this.selected = false; - this.hover = false; + // emit change in data + this.body.emitter.emit("_dataChanged"); - this.labelModule = new _Label2['default'](this.body, this.options, false /* Not edge label */); - this.setOptions(options); - } + // emit data loaded + this.body.emitter.emit("_dataLoaded"); - /** - * Attach a edge to the node - * @param {Edge} edge - */ + // find a stable position or start animating to a stable position + this.body.emitter.emit("initPhysics"); + }; + /** + * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function. + * var network = new vis.Network(..); + * network.destroy(); + * network = null; + */ + Network.prototype.destroy = function () { + this.body.emitter.emit("destroy"); + // clear events + this.body.emitter.off(); + this.off(); - (0, _createClass3['default'])(Node, [{ - key: 'attachEdge', - value: function attachEdge(edge) { - if (this.edges.indexOf(edge) === -1) { - this.edges.push(edge); - } - } + // delete modules + delete this.groups; + delete this.canvas; + delete this.selectionHandler; + delete this.interactionHandler; + delete this.view; + delete this.renderer; + delete this.physics; + delete this.layoutEngine; + delete this.clustering; + delete this.manipulation; + delete this.nodesHandler; + delete this.edgesHandler; + delete this.configurator; + delete this.images; - /** - * Detach a edge from the node - * @param {Edge} edge - */ + for (var nodeId in this.body.nodes) { + delete this.body.nodes[nodeId]; + } + for (var edgeId in this.body.edges) { + delete this.body.edges[edgeId]; + } - }, { - key: 'detachEdge', - value: function detachEdge(edge) { - var index = this.edges.indexOf(edge); - if (index != -1) { - this.edges.splice(index, 1); - } - } + // remove the container and everything inside it recursively + util.recursiveDOMDelete(this.body.container); + }; - /** - * Set or overwrite options for the node - * @param {Object} options an object with options - * @param {Object} constants and object with default, global options - */ + /** + * Update the values of all object in the given array according to the current + * value range of the objects in the array. + * @param {Object} obj An object containing a set of Edges or Nodes + * The objects must have a method getValue() and + * setValueRange(min, max). + * @private + */ + Network.prototype._updateValueRange = function (obj) { + var id; - }, { - key: 'setOptions', - value: function setOptions(options) { - var currentShape = this.options.shape; - if (!options) { - return; + // determine the range of the objects + var valueMin = undefined; + var valueMax = undefined; + var valueTotal = 0; + for (id in obj) { + if (obj.hasOwnProperty(id)) { + var value = obj[id].getValue(); + if (value !== undefined) { + valueMin = valueMin === undefined ? value : Math.min(value, valueMin); + valueMax = valueMax === undefined ? value : Math.max(value, valueMax); + valueTotal += value; } + } + } - // basic options - if (options.id !== undefined) { - this.id = options.id; + // adjust the range of all objects + if (valueMin !== undefined && valueMax !== undefined) { + for (id in obj) { + if (obj.hasOwnProperty(id)) { + obj[id].setValueRange(valueMin, valueMax, valueTotal); } + } + } + }; - if (this.id === undefined) { - throw "Node must have an id"; - } + /** + * Returns true when the Network is active. + * @returns {boolean} + */ + Network.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; - // set these options locally - // clear x and y positions - if (options.x !== undefined) { - if (options.x === null) { - this.x = undefined;this.predefinedPosition = false; - } else { - this.x = parseInt(options.x);this.predefinedPosition = true; - } - } - if (options.y !== undefined) { - if (options.y === null) { - this.y = undefined;this.predefinedPosition = false; - } else { - this.y = parseInt(options.y);this.predefinedPosition = true; - } - } - if (options.size !== undefined) { - this.baseSize = options.size; - } - if (options.value !== undefined) { - options.value = parseFloat(options.value); - } + Network.prototype.setSize = function () { + return this.canvas.setSize.apply(this.canvas, arguments); + }; + Network.prototype.canvasToDOM = function () { + return this.canvas.canvasToDOM.apply(this.canvas, arguments); + }; + Network.prototype.DOMtoCanvas = function () { + return this.canvas.DOMtoCanvas.apply(this.canvas, arguments); + }; + Network.prototype.findNode = function () { + return this.clustering.findNode.apply(this.clustering, arguments); + }; + Network.prototype.isCluster = function () { + return this.clustering.isCluster.apply(this.clustering, arguments); + }; + Network.prototype.openCluster = function () { + return this.clustering.openCluster.apply(this.clustering, arguments); + }; + Network.prototype.cluster = function () { + return this.clustering.cluster.apply(this.clustering, arguments); + }; + Network.prototype.getNodesInCluster = function () { + return this.clustering.getNodesInCluster.apply(this.clustering, arguments); + }; + Network.prototype.clusterByConnection = function () { + return this.clustering.clusterByConnection.apply(this.clustering, arguments); + }; + Network.prototype.clusterByHubsize = function () { + return this.clustering.clusterByHubsize.apply(this.clustering, arguments); + }; + Network.prototype.clusterOutliers = function () { + return this.clustering.clusterOutliers.apply(this.clustering, arguments); + }; + Network.prototype.getSeed = function () { + return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments); + }; + Network.prototype.enableEditMode = function () { + return this.manipulation.enableEditMode.apply(this.manipulation, arguments); + }; + Network.prototype.disableEditMode = function () { + return this.manipulation.disableEditMode.apply(this.manipulation, arguments); + }; + Network.prototype.addNodeMode = function () { + return this.manipulation.addNodeMode.apply(this.manipulation, arguments); + }; + Network.prototype.editNode = function () { + return this.manipulation.editNode.apply(this.manipulation, arguments); + }; + Network.prototype.editNodeMode = function () { + 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); + }; + Network.prototype.editEdgeMode = function () { + return this.manipulation.editEdgeMode.apply(this.manipulation, arguments); + }; + Network.prototype.deleteSelected = function () { + return this.manipulation.deleteSelected.apply(this.manipulation, arguments); + }; + Network.prototype.getPositions = function () { + return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments); + }; + Network.prototype.storePositions = function () { + return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments); + }; + Network.prototype.moveNode = function () { + return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments); + }; + Network.prototype.getBoundingBox = function () { + return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments); + }; + Network.prototype.getConnectedNodes = function (objectId) { + if (this.body.nodes[objectId] !== undefined) { + return this.nodesHandler.getConnectedNodes.apply(this.nodesHandler, arguments); + } else { + return this.edgesHandler.getConnectedNodes.apply(this.edgesHandler, arguments); + } + }; + Network.prototype.getConnectedEdges = function () { + return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler, arguments); + }; + Network.prototype.startSimulation = function () { + return this.physics.startSimulation.apply(this.physics, arguments); + }; + Network.prototype.stopSimulation = function () { + return this.physics.stopSimulation.apply(this.physics, arguments); + }; + Network.prototype.stabilize = function () { + return this.physics.stabilize.apply(this.physics, arguments); + }; + Network.prototype.getSelection = function () { + return this.selectionHandler.getSelection.apply(this.selectionHandler, arguments); + }; + Network.prototype.setSelection = function () { + return this.selectionHandler.setSelection.apply(this.selectionHandler, arguments); + }; + Network.prototype.getSelectedNodes = function () { + return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler, arguments); + }; + Network.prototype.getSelectedEdges = function () { + return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler, arguments); + }; + Network.prototype.getNodeAt = function () { + var node = this.selectionHandler.getNodeAt.apply(this.selectionHandler, arguments); + if (node !== undefined && node.id !== undefined) { + return node.id; + } + return node; + }; + Network.prototype.getEdgeAt = function () { + var edge = this.selectionHandler.getEdgeAt.apply(this.selectionHandler, arguments); + if (edge !== undefined && edge.id !== undefined) { + return edge.id; + } + return edge; + }; + Network.prototype.selectNodes = function () { + return this.selectionHandler.selectNodes.apply(this.selectionHandler, arguments); + }; + Network.prototype.selectEdges = function () { + return this.selectionHandler.selectEdges.apply(this.selectionHandler, arguments); + }; + Network.prototype.unselectAll = function () { + this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments); + this.redraw(); + }; + Network.prototype.redraw = function () { + return this.renderer.redraw.apply(this.renderer, arguments); + }; + Network.prototype.getScale = function () { + return this.view.getScale.apply(this.view, arguments); + }; + Network.prototype.getViewPosition = function () { + return this.view.getViewPosition.apply(this.view, arguments); + }; + Network.prototype.fit = function () { + return this.view.fit.apply(this.view, arguments); + }; + Network.prototype.moveTo = function () { + return this.view.moveTo.apply(this.view, arguments); + }; + Network.prototype.focus = function () { + return this.view.focus.apply(this.view, arguments); + }; + Network.prototype.releaseNode = function () { + return this.view.releaseNode.apply(this.view, arguments); + }; + Network.prototype.getOptionsFromConfigurator = function () { + var options = {}; + if (this.configurator) { + options = this.configurator.getOptions.apply(this.configurator); + } + return options; + }; - // copy group options - if (typeof options.group === 'number' || typeof options.group === 'string' && options.group != '') { - var groupObj = this.grouplist.get(options.group); - util.deepExtend(this.options, groupObj); - // the color object needs to be completely defined. Since groups can partially overwrite the colors, we parse it again, just in case. - this.options.color = util.parseColor(this.options.color); - } + module.exports = Network; - // this transforms all shorthands into fully defined options - Node.parseOptions(this.options, options, true, this.globalOptions); +/***/ }), +/* 160 */ +/***/ (function(module, exports) { - this.choosify(options); + 'use strict'; - // load the images - if (this.options.image !== undefined) { - if (this.imagelist) { - if (typeof this.options.image === 'string') { - this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage, this.id); - } else { - this.imageObj = this.imagelist.load(this.options.image.unselected, this.options.brokenImage, this.id); - this.imageObjAlt = this.imagelist.load(this.options.image.selected, this.options.brokenImage, this.id); - } - } else { - throw "No imagelist provided"; - } - } + /** + * Canvas shapes used by Network + */ + if (typeof CanvasRenderingContext2D !== 'undefined') { - this.updateLabelModule(options); - this.updateShape(currentShape); - this.labelModule.propagateFonts(this.nodeOptions, options, this.defaultOptions); + /** + * Draw a circle shape + */ + CanvasRenderingContext2D.prototype.circle = function (x, y, r) { + this.beginPath(); + this.arc(x, y, r, 0, 2 * Math.PI, false); + this.closePath(); + }; - if (options.hidden !== undefined || options.physics !== undefined) { - return true; - } - return false; - } + /** + * Draw a square shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r size, width and height of the square + */ + CanvasRenderingContext2D.prototype.square = function (x, y, r) { + this.beginPath(); + this.rect(x - r, y - r, r * 2, r * 2); + this.closePath(); + }; - /** - * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined. - * Static so it can also be used by the handler. - * @param parentOptions - * @param newOptions - * @param allowDeletion - * @param globalOptions - */ + /** + * Draw a triangle shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.triangle = function (x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); - }, { - key: 'choosify', - value: function choosify(options) { - this.chooser = true; + // the change in radius and the offset is here to center the shape + r *= 1.15; + y += 0.275 * r; - var pile = [options, this.options, this.defaultOptions]; + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height - var chosen = util.topMost(pile, 'chosen'); - if (typeof chosen === 'boolean') { - this.chooser = chosen; - } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { - var chosenNode = util.topMost(pile, ['chosen', 'node']); - if (typeof chosenNode === 'boolean' || typeof chosenNode === 'function') { - this.chooser = chosenNode; - } - } - } - }, { - key: 'getFormattingValues', - value: function getFormattingValues() { - var values = { - color: this.options.color.background, - borderWidth: this.options.borderWidth, - borderColor: this.options.color.border, - size: this.options.size, - borderDashes: this.options.shapeProperties.borderDashes, - borderRadius: this.options.shapeProperties.borderRadius, - shadow: this.options.shadow.enabled, - shadowColor: this.options.shadow.color, - shadowSize: this.options.shadow.size, - shadowX: this.options.shadow.x, - shadowY: this.options.shadow.y - }; - if (this.selected || this.hover) { - if (this.chooser === true) { - if (this.selected) { - values.borderWidth *= 2; - values.color = this.options.color.highlight.background; - values.borderColor = this.options.color.highlight.border; - values.shadow = this.options.shadow.enabled; - } else if (this.hover) { - values.color = this.options.color.hover.background; - values.borderColor = this.options.color.hover.border; - values.shadow = this.options.shadow.enabled; - } - } else if (typeof this.chooser === 'function') { - this.chooser(values, this.options.id, this.selected, this.hover); - if (values.shadow === false) { - if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) { - values.shadow = true; - } - } - } - } else { - values.shadow = this.options.shadow.enabled; - } - return values; - } - }, { - key: 'updateLabelModule', - value: function updateLabelModule(options) { - if (this.options.label === undefined || this.options.label === null) { - this.options.label = ''; - } - this.labelModule.setOptions(this.options, true); - if (this.labelModule.baseSize !== undefined) { - this.baseFontSize = this.labelModule.baseSize; - } - this.labelModule.constrain(this.nodeOptions, options, this.defaultOptions); - this.labelModule.choosify(this.nodeOptions, options, this.defaultOptions); - } - }, { - key: 'updateShape', - value: function updateShape(currentShape) { - if (currentShape === this.options.shape && this.shape) { - this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt); - } else { - // choose draw method depending on the shape - switch (this.options.shape) { - case 'box': - this.shape = new _Box2['default'](this.options, this.body, this.labelModule); - break; - case 'circle': - this.shape = new _Circle2['default'](this.options, this.body, this.labelModule); - break; - case 'circularImage': - this.shape = new _CircularImage2['default'](this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt); - break; - case 'database': - this.shape = new _Database2['default'](this.options, this.body, this.labelModule); - break; - case 'diamond': - this.shape = new _Diamond2['default'](this.options, this.body, this.labelModule); - break; - case 'dot': - this.shape = new _Dot2['default'](this.options, this.body, this.labelModule); - break; - case 'ellipse': - this.shape = new _Ellipse2['default'](this.options, this.body, this.labelModule); - break; - case 'icon': - this.shape = new _Icon2['default'](this.options, this.body, this.labelModule); - break; - case 'image': - this.shape = new _Image2['default'](this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt); - break; - case 'square': - this.shape = new _Square2['default'](this.options, this.body, this.labelModule); - break; - case 'star': - this.shape = new _Star2['default'](this.options, this.body, this.labelModule); - break; - case 'text': - this.shape = new _Text2['default'](this.options, this.body, this.labelModule); - break; - case 'triangle': - this.shape = new _Triangle2['default'](this.options, this.body, this.labelModule); - break; - case 'triangleDown': - this.shape = new _TriangleDown2['default'](this.options, this.body, this.labelModule); - break; - default: - this.shape = new _Ellipse2['default'](this.options, this.body, this.labelModule); - break; - } - } - this._reset(); - } - /** - * select this node - */ + this.moveTo(x, y - (h - ir)); + this.lineTo(x + s2, y + ir); + this.lineTo(x - s2, y + ir); + this.lineTo(x, y - (h - ir)); + this.closePath(); + }; - }, { - key: 'select', - value: function select() { - this.selected = true; - this._reset(); - } + /** + * Draw a triangle shape in downward orientation + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius + */ + CanvasRenderingContext2D.prototype.triangleDown = function (x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); - /** - * unselect this node - */ + // the change in radius and the offset is here to center the shape + r *= 1.15; + y -= 0.275 * r; - }, { - key: 'unselect', - value: function unselect() { - this.selected = false; - this._reset(); - } + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height - /** - * Reset the calculated size of the node, forces it to recalculate its size - * @private - */ + this.moveTo(x, y + (h - ir)); + this.lineTo(x + s2, y - ir); + this.lineTo(x - s2, y - ir); + this.lineTo(x, y + (h - ir)); + this.closePath(); + }; - }, { - key: '_reset', - value: function _reset() { - this.shape.width = undefined; - this.shape.height = undefined; - } + /** + * Draw a star shape, a star with 5 points + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.star = function (x, y, r) { + // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ + this.beginPath(); - /** - * get the title of this node. - * @return {string} title The title of the node, or undefined when no title - * has been set. - */ + // the change in radius and the offset is here to center the shape + r *= 0.82; + y += 0.1 * r; - }, { - key: 'getTitle', - value: function getTitle() { - return this.options.title; + for (var n = 0; n < 10; n++) { + var radius = n % 2 === 0 ? r * 1.3 : r * 0.5; + this.lineTo(x + radius * Math.sin(n * 2 * Math.PI / 10), y - radius * Math.cos(n * 2 * Math.PI / 10)); } - /** - * Calculate the distance to the border of the Node - * @param {CanvasRenderingContext2D} ctx - * @param {Number} angle Angle in radians - * @returns {number} distance Distance to the border in pixels - */ + this.closePath(); + }; - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this.shape.distanceToBorder(ctx, angle); - } + /** + * Draw a Diamond shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.diamond = function (x, y, r) { + // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ + this.beginPath(); - /** - * Check if this node has a fixed x and y position - * @return {boolean} true if fixed, false if not - */ + this.lineTo(x, y + r); + this.lineTo(x + r, y); + this.lineTo(x, y - r); + this.lineTo(x - r, y); - }, { - key: 'isFixed', - value: function isFixed() { - return this.options.fixed.x && this.options.fixed.y; - } + this.closePath(); + }; - /** - * check if this node is selecte - * @return {boolean} selected True if node is selected, else false - */ + /** + * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas + */ + CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) { + var r2d = Math.PI / 180; + if (w - 2 * r < 0) { + r = w / 2; + } //ensure that the radius isn't too large for x + if (h - 2 * r < 0) { + r = h / 2; + } //ensure that the radius isn't too large for y + this.beginPath(); + this.moveTo(x + r, y); + this.lineTo(x + w - r, y); + this.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false); + this.lineTo(x + w, y + h - r); + this.arc(x + w - r, y + h - r, r, 0, r2d * 90, false); + this.lineTo(x + r, y + h); + this.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false); + this.lineTo(x, y + r); + this.arc(x + r, y + r, r, r2d * 180, r2d * 270, false); + this.closePath(); + }; - }, { - key: 'isSelected', - value: function isSelected() { - return this.selected; - } + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + * + * Postfix '_vis' added to discern it from standard method ellipse(). + */ + CanvasRenderingContext2D.prototype.ellipse_vis = function (x, y, w, h) { + var kappa = .5522848, + ox = w / 2 * kappa, + // control point offset horizontal + oy = h / 2 * kappa, + // control point offset vertical + xe = x + w, + // x-end + ye = y + h, + // y-end + xm = x + w / 2, + // x-middle + ym = y + h / 2; // y-middle - /** - * Retrieve the value of the node. Can be undefined - * @return {Number} value - */ + this.beginPath(); + this.moveTo(x, ym); + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + this.closePath(); + }; - }, { - key: 'getValue', - value: function getValue() { - return this.options.value; - } + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.database = function (x, y, w, h) { + var f = 1 / 3; + var wEllipse = w; + var hEllipse = h * f; - /** - * Adjust the value range of the node. The node will adjust it's size - * based on its value. - * @param {Number} min - * @param {Number} max - */ + var kappa = .5522848, + ox = wEllipse / 2 * kappa, + // control point offset horizontal + oy = hEllipse / 2 * kappa, + // control point offset vertical + xe = x + wEllipse, + // x-end + ye = y + hEllipse, + // y-end + xm = x + wEllipse / 2, + // x-middle + ym = y + hEllipse / 2, + // y-middle + ymb = y + (h - hEllipse / 2), + // y-midlle, bottom ellipse + yeb = y + h; // y-end, bottom ellipse - }, { - key: 'setValueRange', - value: function setValueRange(min, max, total) { - if (this.options.value !== undefined) { - var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value); - var sizeDiff = this.options.scaling.max - this.options.scaling.min; - if (this.options.scaling.label.enabled === true) { - var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min; - this.options.font.size = this.options.scaling.label.min + scale * fontDiff; - } - this.options.size = this.options.scaling.min + scale * sizeDiff; - } else { - this.options.size = this.baseSize; - this.options.font.size = this.baseFontSize; - } + this.beginPath(); + this.moveTo(xe, ym); - this.updateLabelModule(); - } + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - /** - * Draw this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - }, { - key: 'draw', - value: function draw(ctx) { - var values = this.getFormattingValues(); - this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values); - } + this.lineTo(xe, ymb); - /** - * Update the bounding box of the shape - */ + this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); + this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(ctx) { - this.shape.updateBoundingBox(this.x, this.y, ctx); - } + this.lineTo(x, ym); + }; - /** - * Recalculate the size of this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ + /** + * Draw an arrow at the end of a line with the given angle. + */ + CanvasRenderingContext2D.prototype.arrowEndpoint = function (x, y, angle, length) { + // tail + var xt = x - length * Math.cos(angle); + var yt = y - length * Math.sin(angle); - }, { - key: 'resize', - value: function resize(ctx) { - var values = this.getFormattingValues(); - this.shape.resize(ctx, this.selected, this.hover, values); - } + // inner tail + var xi = x - length * 0.9 * Math.cos(angle); + var yi = y - length * 0.9 * Math.sin(angle); - /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top, right, bottom - * @return {boolean} True if location is located on node - */ + // left + var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); + var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); - }, { - key: 'isOverlappingWith', - value: function isOverlappingWith(obj) { - return this.shape.left < obj.right && this.shape.left + this.shape.width > obj.left && this.shape.top < obj.bottom && this.shape.top + this.shape.height > obj.top; - } + // right + var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); + var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); - /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top, right, bottom - * @return {boolean} True if location is located on node - */ + this.beginPath(); + this.moveTo(x, y); + this.lineTo(xl, yl); + this.lineTo(xi, yi); + this.lineTo(xr, yr); + this.closePath(); + }; - }, { - key: 'isBoundingBoxOverlappingWith', - 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: 'parseOptions', - value: function parseOptions(parentOptions, newOptions) { - var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + /** + * Draw an circle an the end of an line with the given angle. + */ + CanvasRenderingContext2D.prototype.circleEndpoint = function (x, y, angle, length) { + var radius = length * 0.4; + var xc = x - radius * Math.cos(angle); + var yc = y - radius * Math.sin(angle); + this.circle(xc, yc, radius); + }; - var fields = ['color', 'font', 'fixed', 'shadow']; - util.selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion); + /** + * Sets up the dashedLine functionality for drawing + * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas + * @author David Jordan + * @date 2012-08-08 + */ + CanvasRenderingContext2D.prototype.dashedLine = function (x, y, x2, y2, pattern) { + this.beginPath(); + this.moveTo(x, y); - // merge the shadow options into the parent. - util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions); + var patternLength = pattern.length; + var dx = x2 - x; + var dy = y2 - y; + var slope = dy / dx; + var distRemaining = Math.sqrt(dx * dx + dy * dy); + var patternIndex = 0; + var draw = true; + var xStep = 0; + var dashLength = pattern[0]; - // individual shape newOptions - if (newOptions.color !== undefined && newOptions.color !== null) { - var parsedColor = util.parseColor(newOptions.color); - util.fillIfDefined(parentOptions.color, parsedColor); - } else if (allowDeletion === true && newOptions.color === null) { - parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options + while (distRemaining >= 0.1) { + dashLength = pattern[patternIndex++ % patternLength]; + if (dashLength > distRemaining) { + dashLength = distRemaining; } - // handle the fixed options - if (newOptions.fixed !== undefined && newOptions.fixed !== null) { - if (typeof newOptions.fixed === 'boolean') { - parentOptions.fixed.x = newOptions.fixed; - parentOptions.fixed.y = newOptions.fixed; - } else { - if (newOptions.fixed.x !== undefined && typeof newOptions.fixed.x === 'boolean') { - parentOptions.fixed.x = newOptions.fixed.x; - } - if (newOptions.fixed.y !== undefined && typeof newOptions.fixed.y === 'boolean') { - parentOptions.fixed.y = newOptions.fixed.y; - } - } - } + xStep = Math.sqrt(dashLength * dashLength / (1 + slope * slope)); + xStep = dx < 0 ? -xStep : xStep; + x += xStep; + y += slope * xStep; - // handle the font options - if (newOptions.font !== undefined && newOptions.font !== null) { - _Label2['default'].parseOptions(parentOptions.font, newOptions); - } else if (allowDeletion === true && newOptions.font === null) { - parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options + if (draw === true) { + this.lineTo(x, y); + } else { + this.moveTo(x, y); } - // handle the scaling options, specifically the label part - if (newOptions.scaling !== undefined) { - util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling); - } + distRemaining -= dashLength; + draw = !draw; } - }]); - return Node; - }(); - - exports['default'] = Node; + }; + } -/***/ }, -/* 164 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 161 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _slicedToArray2 = __webpack_require__(165); - - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - - var _getIterator2 = __webpack_require__(2); - - var _getIterator3 = _interopRequireDefault(_getIterator2); - - var _typeof2 = __webpack_require__(62); + var _create = __webpack_require__(55); - var _typeof3 = _interopRequireDefault(_typeof2); + var _create2 = _interopRequireDefault(_create); - var _classCallCheck2 = __webpack_require__(119); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + /** + * Parse a text source containing data in DOT language into a JSON object. + * The object contains two lists: one with nodes and one with edges. + * + * DOT language reference: http://www.graphviz.org/doc/info/lang.html + * + * DOT language attributes: http://graphviz.org/content/attrs + * + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graph An object containing two parameters: + * {Object[]} nodes + * {Object[]} edges + */ + function parseDOT(data) { + dot = data; + return parseGraph(); + } - var _createClass2 = __webpack_require__(120); + // mapping of attributes from DOT (the keys) to vis.js (the values) + var NODE_ATTR_MAPPING = { + 'fontsize': 'font.size', + 'fontcolor': 'font.color', + 'labelfontcolor': 'font.color', + 'fontname': 'font.face', + 'color': ['color.border', 'color.background'], + 'fillcolor': 'color.background', + 'tooltip': 'title', + 'labeltooltip': 'title' + }; + var EDGE_ATTR_MAPPING = (0, _create2['default'])(NODE_ATTR_MAPPING); + EDGE_ATTR_MAPPING.color = 'color.color'; - var _createClass3 = _interopRequireDefault(_createClass2); + // token types enumeration + var TOKENTYPE = { + NULL: 0, + DELIMITER: 1, + IDENTIFIER: 2, + UNKNOWN: 3 + }; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // map with all delimiters + var DELIMITERS = { + '{': true, + '}': true, + '[': true, + ']': true, + ';': true, + '=': true, + ',': true, - var util = __webpack_require__(1); + '->': true, + '--': true + }; - var Label = function () { - function Label(body, options) { - var edgelabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - (0, _classCallCheck3['default'])(this, Label); + var dot = ''; // current dot file + var index = 0; // current index in dot file + var c = ''; // current token character in expr + var token = ''; // current token + var tokenType = TOKENTYPE.NULL; // type of the token - this.body = body; + /** + * Get the first character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. + */ + function first() { + index = 0; + c = dot.charAt(0); + } - 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 - this.isEdgeLabel = edgelabel; - } + /** + * Get the next character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. + */ + function next() { + index++; + c = dot.charAt(index); + } - (0, _createClass3['default'])(Label, [{ - key: 'setOptions', - value: function setOptions(options) { - var allowDeletion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + /** + * Preview the next character from the dot file. + * @return {String} cNext + */ + function nextPreview() { + return dot.charAt(index + 1); + } - this.elementOptions = options; + /** + * Test whether given character is alphabetic or numeric + * @param {String} c + * @return {Boolean} isAlphaNumeric + */ + var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; + function isAlphaNumeric(c) { + return regexAlphaNumeric.test(c); + } - // 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); + /** + * Merge all options of object b into object b + * @param {Object} a + * @param {Object} b + * @return {Object} a + */ + function merge(a, b) { + if (!a) { + a = {}; + } - if (options.label !== undefined) { - this.labelDirty = true; + if (b) { + for (var name in b) { + if (b.hasOwnProperty(name)) { + a[name] = b[name]; } + } + } + return a; + } - if (options.font !== undefined) { - Label.parseOptions(this.fontOptions, options, allowDeletion); - if (typeof options.font === 'string') { - this.baseSize = this.fontOptions.size; - } else if ((0, _typeof3['default'])(options.font) === 'object') { - if (options.font.size !== undefined) { - this.baseSize = options.font.size; - } - } + /** + * Set a value in an object, where the provided parameter name can be a + * path with nested parameters. For example: + * + * var obj = {a: 2}; + * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} + * + * @param {Object} obj + * @param {String} path A parameter name or dot-separated parameter path, + * like "color.highlight.border". + * @param {*} value + */ + function setValue(obj, path, value) { + var keys = path.split('.'); + var o = obj; + while (keys.length) { + var key = keys.shift(); + if (keys.length) { + // this isn't the end point + if (!o[key]) { + o[key] = {}; } + o = o[key]; + } else { + // this is the end point + o[key] = value; } - }, { - key: 'constrain', - + } + } - // set the width and height constraints based on 'nearest' value - value: function constrain(elementOptions, options, defaultOptions) { - this.fontOptions.constrainWidth = false; - this.fontOptions.maxWdt = -1; - this.fontOptions.minWdt = -1; + /** + * Add a node to a graph object. If there is already a node with + * the same id, their attributes will be merged. + * @param {Object} graph + * @param {Object} node + */ + function addNode(graph, node) { + var i, len; + var current = null; - var pile = [options, elementOptions, defaultOptions]; + // find root graph (in case of subgraph) + var graphs = [graph]; // list with all graphs from current graph to root graph + var root = graph; + while (root.parent) { + graphs.push(root.parent); + root = root.parent; + } - var widthConstraint = util.topMost(pile, 'widthConstraint'); - if (typeof widthConstraint === 'number') { - this.fontOptions.maxWdt = Number(widthConstraint); - this.fontOptions.minWdt = Number(widthConstraint); - } else if ((typeof widthConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(widthConstraint)) === 'object') { - var widthConstraintMaximum = util.topMost(pile, ['widthConstraint', 'maximum']); - if (typeof widthConstraintMaximum === 'number') { - this.fontOptions.maxWdt = Number(widthConstraintMaximum); - } - var widthConstraintMinimum = util.topMost(pile, ['widthConstraint', 'minimum']); - if (typeof widthConstraintMinimum === 'number') { - this.fontOptions.minWdt = Number(widthConstraintMinimum); - } + // find existing node (at root level) by its id + if (root.nodes) { + for (i = 0, len = root.nodes.length; i < len; i++) { + if (node.id === root.nodes[i].id) { + current = root.nodes[i]; + break; } + } + } - this.fontOptions.constrainHeight = false; - this.fontOptions.minHgt = -1; - this.fontOptions.valign = 'middle'; + if (!current) { + // this is a new node + current = { + id: node.id + }; + if (graph.node) { + // clone default attributes + current.attr = merge(current.attr, graph.node); + } + } - var heightConstraint = util.topMost(pile, 'heightConstraint'); - if (typeof heightConstraint === 'number') { - this.fontOptions.minHgt = Number(heightConstraint); - } else if ((typeof heightConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(heightConstraint)) === 'object') { - var heightConstraintMinimum = util.topMost(pile, ['heightConstraint', 'minimum']); - if (typeof heightConstraintMinimum === 'number') { - this.fontOptions.minHgt = Number(heightConstraintMinimum); - } - var heightConstraintValign = util.topMost(pile, ['heightConstraint', 'valign']); - if (typeof heightConstraintValign === 'string') { - if (heightConstraintValign === 'top' || heightConstraintValign === 'bottom') { - this.fontOptions.valign = heightConstraintValign; - } - } - } + // add node to this (sub)graph and all its parent graphs + for (i = graphs.length - 1; i >= 0; i--) { + var g = graphs[i]; + + if (!g.nodes) { + g.nodes = []; } + if (g.nodes.indexOf(current) === -1) { + g.nodes.push(current); + } + } - // set the selected functions based on 'nearest' value + // merge attributes + if (node.attr) { + current.attr = merge(current.attr, node.attr); + } + } - }, { - key: 'choosify', - value: function choosify(elementOptions, options, defaultOptions) { - this.fontOptions.chooser = true; + /** + * Add an edge to a graph object + * @param {Object} graph + * @param {Object} edge + */ + function addEdge(graph, edge) { + if (!graph.edges) { + graph.edges = []; + } + graph.edges.push(edge); + if (graph.edge) { + var attr = merge({}, graph.edge); // clone default attributes + edge.attr = merge(attr, edge.attr); // merge attributes + } + } - var pile = [options, elementOptions, defaultOptions]; + /** + * Create an edge to a graph object + * @param {Object} graph + * @param {String | Number | Object} from + * @param {String | Number | Object} to + * @param {String} type + * @param {Object | null} attr + * @return {Object} edge + */ + function createEdge(graph, from, to, type, attr) { + var edge = { + from: from, + to: to, + type: type + }; - var chosen = util.topMost(pile, 'chosen'); - if (typeof chosen === 'boolean') { - this.fontOptions.chooser = chosen; - } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { - var chosenLabel = util.topMost(pile, ['chosen', 'label']); - if (typeof chosenLabel === 'boolean' || typeof chosenLabel === 'function') { - this.fontOptions.chooser = chosenLabel; + if (graph.edge) { + edge.attr = merge({}, graph.edge); // clone default attributes + } + edge.attr = merge(edge.attr || {}, attr); // merge attributes + + return edge; + } + + /** + * Get next token in the current dot file. + * The token and token type are available as token and tokenType + */ + function getToken() { + tokenType = TOKENTYPE.NULL; + token = ''; + + // skip over whitespaces + while (c === ' ' || c === '\t' || c === '\n' || c === '\r') { + // space, tab, enter + next(); + } + + do { + var isComment = false; + + // skip comment + if (c === '#') { + // find the previous non-space character + var i = index - 1; + while (dot.charAt(i) === ' ' || dot.charAt(i) === '\t') { + i--; + } + if (dot.charAt(i) === '\n' || dot.charAt(i) === '') { + // the # is at the start of a line, this is indeed a line comment + while (c != '' && c != '\n') { + next(); } + isComment = true; } } - - // When margins are set in an element, adjust sizes is called to remove them - // from the width/height constraints. This must be done prior to label sizing. - - }, { - key: 'adjustSizes', - value: function adjustSizes(margins) { - var widthBias = margins ? margins.right + margins.left : 0; - if (this.fontOptions.constrainWidth) { - this.fontOptions.maxWdt -= widthBias; - this.fontOptions.minWdt -= widthBias; + if (c === '/' && nextPreview() === '/') { + // skip line comment + while (c != '' && c != '\n') { + next(); } - var heightBias = margins ? margins.top + margins.bottom : 0; - if (this.fontOptions.constrainHeight) { - this.fontOptions.minHgt -= heightBias; + isComment = true; + } + if (c === '/' && nextPreview() === '*') { + // skip block comment + while (c != '') { + if (c === '*' && nextPreview() === '/') { + // end of block comment found. skip these last two characters + next(); + next(); + break; + } else { + next(); + } } + isComment = true; } - }, { - key: 'propagateFonts', - value: function propagateFonts(options, groupOptions, defaultOptions) { - if (this.fontOptions.multi) { - var mods = ['bold', 'ital', 'boldital', 'mono']; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - try { - for (var _iterator = (0, _getIterator3['default'])(mods), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var mod = _step.value; + // skip over whitespaces + while (c === ' ' || c === '\t' || c === '\n' || c === '\r') { + // space, tab, enter + next(); + } + } while (isComment); - var optionsFontMod = void 0; - if (options.font) { - optionsFontMod = options.font[mod]; - } - if (typeof optionsFontMod === 'string') { - var modOptionsArray = optionsFontMod.split(" "); - this.fontOptions[mod].size = modOptionsArray[0].replace("px", ""); - this.fontOptions[mod].face = modOptionsArray[1]; - this.fontOptions[mod].color = modOptionsArray[2]; - this.fontOptions[mod].vadjust = this.fontOptions.vadjust; - this.fontOptions[mod].mod = defaultOptions.font[mod].mod; - } else { - // We need to be crafty about loading the modded fonts. We want as - // much 'natural' versatility as we can get, so a simple global - // change propagates in an expected way, even if not stictly logical. - - // face: We want to capture any direct settings and overrides, but - // fall back to the base font if there aren't any. We make a - // special exception for mono, since we probably don't want to - // sync to a the base font face. - // - // if the mod face is in the node's options, use it - // else if the mod face is in the global options, use it - // else if the face is in the global options, use it - // else use the base font's face. - if (optionsFontMod && optionsFontMod.hasOwnProperty('face')) { - this.fontOptions[mod].face = optionsFontMod.face; - } else if (groupOptions.font && groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('face')) { - this.fontOptions[mod].face = groupOptions.font[mod].face; - } else if (mod === 'mono') { - this.fontOptions[mod].face = defaultOptions.font[mod].face; - } else if (groupOptions.font && groupOptions.font.hasOwnProperty('face')) { - this.fontOptions[mod].face = groupOptions.font.face; - } else { - this.fontOptions[mod].face = this.fontOptions.face; - } + // check for end of dot file + if (c === '') { + // token is still empty + tokenType = TOKENTYPE.DELIMITER; + return; + } - // color: this is handled just like the face. - if (optionsFontMod && optionsFontMod.hasOwnProperty('color')) { - this.fontOptions[mod].color = optionsFontMod.color; - } else if (groupOptions.font && groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('color')) { - this.fontOptions[mod].color = groupOptions.font[mod].color; - } else if (groupOptions.font && groupOptions.font.hasOwnProperty('color')) { - this.fontOptions[mod].color = groupOptions.font.color; - } else { - this.fontOptions[mod].color = this.fontOptions.color; - } + // check for delimiters consisting of 2 characters + var c2 = c + nextPreview(); + if (DELIMITERS[c2]) { + tokenType = TOKENTYPE.DELIMITER; + token = c2; + next(); + next(); + return; + } - // mod: this is handled just like the face, except we never grab the - // base font's mod. We know they're in the defaultOptions, and unless - // we've been steered away from them, we use the default. - if (optionsFontMod && optionsFontMod.hasOwnProperty('mod')) { - this.fontOptions[mod].mod = optionsFontMod.mod; - } else if (groupOptions.font && groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('mod')) { - this.fontOptions[mod].mod = groupOptions.font[mod].mod; - } else if (groupOptions.font && groupOptions.font.hasOwnProperty('mod')) { - this.fontOptions[mod].mod = groupOptions.font.mod; - } else { - this.fontOptions[mod].mod = defaultOptions.font[mod].mod; - } + // check for delimiters consisting of 1 character + if (DELIMITERS[c]) { + tokenType = TOKENTYPE.DELIMITER; + token = c; + next(); + return; + } - // size: It's important that we size up defaults similarly if we're - // using default faces unless overriden. We want to preserve the - // ratios closely - but if faces have changed, all bets are off. - // - // if the mod size is in the node's options, use it - // else if the mod size is in the global options, use it - // else if the mod face is the same as the default and the base face - // is the same as the default, scale the mod size using the same - // ratio - // else if the size is in the global options, use it - // else use the base font's size. - if (optionsFontMod && optionsFontMod.hasOwnProperty('size')) { - this.fontOptions[mod].size = optionsFontMod.size; - } else if (groupOptions.font && groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('size')) { - this.fontOptions[mod].size = groupOptions.font[mod].size; - } else if (this.fontOptions[mod].face === defaultOptions.font[mod].face && this.fontOptions.face === defaultOptions.font.face) { - var ratio = this.fontOptions.size / Number(defaultOptions.font.size); - this.fontOptions[mod].size = defaultOptions.font[mod].size * ratio; - } else if (groupOptions.font && groupOptions.font.hasOwnProperty('size')) { - this.fontOptions[mod].size = groupOptions.font.size; - } else { - this.fontOptions[mod].size = this.fontOptions.size; - } + // check for an identifier (number or string) + // TODO: more precise parsing of numbers/strings (and the port separator ':') + if (isAlphaNumeric(c) || c === '-') { + token += c; + next(); - // vadjust: this is handled just like the size. - if (optionsFontMod && optionsFontMod.hasOwnProperty('vadjust')) { - this.fontOptions[mod].vadjust = optionsFontMod.vadjust; - } else if (groupOptions.font && groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('vadjust')) { - this.fontOptions[mod].vadjust = groupOptions.font[mod].vadjust; - } else if (this.fontOptions[mod].face === defaultOptions.font[mod].face && this.fontOptions.face === defaultOptions.font.face) { - var _ratio = this.fontOptions.size / Number(defaultOptions.font.size); - this.fontOptions[mod].vadjust = defaultOptions.font[mod].vadjust * Math.round(_ratio); - } else if (groupOptions.font && groupOptions.font.hasOwnProperty('vadjust')) { - this.fontOptions[mod].vadjust = groupOptions.font.vadjust; - } else { - this.fontOptions[mod].vadjust = this.fontOptions.vadjust; - } - } - this.fontOptions[mod].size = Number(this.fontOptions[mod].size); - this.fontOptions[mod].vadjust = Number(this.fontOptions[mod].vadjust); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator['return']) { - _iterator['return'](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } + while (isAlphaNumeric(c)) { + token += c; + next(); + } + if (token === 'false') { + token = false; // convert to boolean + } else if (token === 'true') { + token = true; // convert to boolean + } else if (!isNaN(Number(token))) { + token = Number(token); // convert to number + } + tokenType = TOKENTYPE.IDENTIFIER; + return; + } + + // check for a string enclosed by double quotes + if (c === '"') { + next(); + while (c != '' && (c != '"' || c === '"' && nextPreview() === '"')) { + token += c; + if (c === '"') { + // skip the escape character + next(); } + next(); + } + if (c != '"') { + throw newSyntaxError('End of string " expected'); } + next(); + tokenType = TOKENTYPE.IDENTIFIER; + return; + } - /** - * Main function. This is called from anything that wants to draw a label. - * @param ctx - * @param x - * @param y - * @param selected - * @param baseline - */ + // something unknown is found, wrong characters, a syntax error + tokenType = TOKENTYPE.UNKNOWN; + while (c != '') { + token += c; + next(); + } + throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); + } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover) { - var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; + /** + * Parse a graph. + * @returns {Object} graph + */ + function parseGraph() { + var graph = {}; - // if no label, return - if (this.elementOptions.label === undefined) return; + first(); + getToken(); - // check if we have to render the label - var viewFontSize = this.fontOptions.size * this.body.view.scale; - if (this.elementOptions.label && viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) return; + // optional strict keyword + if (token === 'strict') { + graph.strict = true; + getToken(); + } - // update the size cache if required - this.calculateLabelSize(ctx, selected, hover, x, y, baseline); + // graph or digraph keyword + if (token === 'graph' || token === 'digraph') { + graph.type = token; + getToken(); + } - // create the fontfill background - this._drawBackground(ctx); - // draw text - this._drawText(ctx, selected, hover, x, y, baseline); - } + // optional graph id + if (tokenType === TOKENTYPE.IDENTIFIER) { + graph.id = token; + getToken(); + } - /** - * Draws the label background - * @param {CanvasRenderingContext2D} ctx - * @private - */ + // open angle bracket + if (token != '{') { + throw newSyntaxError('Angle bracket { expected'); + } + getToken(); - }, { - key: '_drawBackground', - value: function _drawBackground(ctx) { - if (this.fontOptions.background !== undefined && this.fontOptions.background !== "none") { - ctx.fillStyle = this.fontOptions.background; + // statements + parseStatements(graph); - var lineMargin = 2; + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); + } + getToken(); - if (this.isEdgeLabel) { - switch (this.fontOptions.align) { - case 'middle': - ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height); - break; - case 'top': - ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height); - break; - case 'bottom': - ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height); - break; - default: - ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); - break; - } - } else { - ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); - } - } - } + // end of file + if (token !== '') { + throw newSyntaxError('End of file expected'); + } + getToken(); - /** - * - * @param ctx - * @param x - * @param baseline - * @private - */ + // remove temporary default options + delete graph.node; + delete graph.edge; + delete graph.graph; - }, { - key: '_drawText', - value: function _drawText(ctx, selected, hover, x, y) { - var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; + return graph; + } - 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.elementOptions.scaling.label.maxVisible) { - fontSize = Number(this.elementOptions.scaling.label.maxVisible) / this.body.view.scale; - } + /** + * Parse a list with statements. + * @param {Object} graph + */ + function parseStatements(graph) { + while (token !== '' && token != '}') { + parseStatement(graph); + if (token === ';') { + getToken(); + } + } + } - var yLine = this.size.yLine; + /** + * Parse a single statement. Can be a an attribute statement, node + * statement, a series of node statements and edge statements, or a + * parameter. + * @param {Object} graph + */ + function parseStatement(graph) { + // parse subgraph + var subgraph = parseSubgraph(graph); + if (subgraph) { + // edge statements + parseEdge(graph, subgraph); - var _setAlignment2 = this._setAlignment(ctx, x, yLine, baseline); + return; + } - var _setAlignment3 = (0, _slicedToArray3['default'])(_setAlignment2, 2); + // parse an attribute statement + var attr = parseAttributeStatement(graph); + if (attr) { + return; + } - x = _setAlignment3[0]; - yLine = _setAlignment3[1]; + // parse node + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + var id = token; // id can be a string or a number + getToken(); + if (token === '=') { + // id statement + getToken(); + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + graph[id] = token; + getToken(); + // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " + } else { + parseNodeStatement(graph, id); + } + } - ctx.textAlign = 'left'; - x = x - this.size.width / 2; // Shift label 1/2-distance to the left - if (this.fontOptions.valign && this.size.height > this.size.labelHeight) { - if (this.fontOptions.valign === 'top') { - yLine -= (this.size.height - this.size.labelHeight) / 2; - } - if (this.fontOptions.valign === 'bottom') { - yLine += (this.size.height - this.size.labelHeight) / 2; - } - } + /** + * Parse a subgraph + * @param {Object} graph parent graph object + * @return {Object | null} subgraph + */ + function parseSubgraph(graph) { + var subgraph = null; - // draw the text - for (var i = 0; i < this.lineCount; i++) { - if (this.lines[i] && this.lines[i].blocks) { - var width = 0; - if (this.isEdgeLabel || this.fontOptions.align === 'center') { - width += (this.size.width - this.lines[i].width) / 2; - } else if (this.fontOptions.align === 'right') { - width += this.size.width - this.lines[i].width; - } - for (var j = 0; j < this.lines[i].blocks.length; j++) { - var block = this.lines[i].blocks[j]; - ctx.font = block.font; + // optional subgraph keyword + if (token === 'subgraph') { + subgraph = {}; + subgraph.type = 'subgraph'; + getToken(); - var _getColor2 = this._getColor(block.color, viewFontSize, block.strokeColor), - _getColor3 = (0, _slicedToArray3['default'])(_getColor2, 2), - fontColor = _getColor3[0], - strokeColor = _getColor3[1]; + // optional graph id + if (tokenType === TOKENTYPE.IDENTIFIER) { + subgraph.id = token; + getToken(); + } + } - if (block.strokeWidth > 0) { - ctx.lineWidth = block.strokeWidth; - ctx.strokeStyle = strokeColor; - ctx.lineJoin = 'round'; - } - ctx.fillStyle = fontColor; + // open angle bracket + if (token === '{') { + getToken(); - if (block.strokeWidth > 0) { - ctx.strokeText(block.text, x + width, yLine + block.vadjust); - } - ctx.fillText(block.text, x + width, yLine + block.vadjust); - width += block.width; - } - yLine += this.lines[i].height; - } - } + if (!subgraph) { + subgraph = {}; } - }, { - key: '_setAlignment', - value: function _setAlignment(ctx, x, yLine, baseline) { - // check for label alignment (for edges) - // TODO: make alignment for nodes - if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) { - x = 0; - yLine = 0; + subgraph.parent = graph; + subgraph.node = graph.node; + subgraph.edge = graph.edge; + subgraph.graph = graph.graph; - var lineMargin = 2; - 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.fontOptions.align === 'bottom') { - ctx.textBaseline = 'hanging'; - yLine += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers - } else { - ctx.textBaseline = 'middle'; - } - } else { - ctx.textBaseline = baseline; - } - return [x, yLine]; + // statements + parseStatements(subgraph); + + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); } + getToken(); - /** - * fade in when relative scale is between threshold and threshold - 1. - * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here. - * - * @param viewFontSize - * @returns {*[]} - * @private - */ + // remove temporary default options + delete subgraph.node; + delete subgraph.edge; + delete subgraph.graph; + delete subgraph.parent; - }, { - key: '_getColor', - value: function _getColor(color, viewFontSize, initialStrokeColor) { - var fontColor = color || '#000000'; - var strokeColor = initialStrokeColor || '#ffffff'; - if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) { - var opacity = Math.max(0, Math.min(1, 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize))); - fontColor = util.overrideOpacity(fontColor, opacity); - strokeColor = util.overrideOpacity(strokeColor, opacity); - } - return [fontColor, strokeColor]; + // register at the parent graph + if (!graph.subgraphs) { + graph.subgraphs = []; } + graph.subgraphs.push(subgraph); + } - /** - * - * @param ctx - * @param selected - * @returns {{width: number, height: number}} - */ + return subgraph; + } - }, { - key: 'getTextSize', - value: function getTextSize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + /** + * parse an attribute statement like "node [shape=circle fontSize=16]". + * Available keywords are 'node', 'edge', 'graph'. + * The previous list with default attributes will be replaced + * @param {Object} graph + * @returns {String | null} keyword Returns the name of the parsed attribute + * (node, edge, graph), or null if nothing + * is parsed. + */ + function parseAttributeStatement(graph) { + // attribute statements + if (token === 'node') { + getToken(); - this._processLabel(ctx, selected, hover); - return { - width: this.size.width, - height: this.size.height, - lineCount: this.lineCount - }; + // node attributes + graph.node = parseAttributeList(); + return 'node'; + } else if (token === 'edge') { + getToken(); + + // edge attributes + graph.edge = parseAttributeList(); + return 'edge'; + } else if (token === 'graph') { + getToken(); + + // graph attributes + graph.graph = parseAttributeList(); + return 'graph'; + } + + return null; + } + + /** + * parse a node statement + * @param {Object} graph + * @param {String | Number} id + */ + function parseNodeStatement(graph, id) { + // node statement + var node = { + id: id + }; + var attr = parseAttributeList(); + if (attr) { + node.attr = attr; + } + addNode(graph, node); + + // edge statements + parseEdge(graph, id); + } + + /** + * Parse an edge or a series of edges + * @param {Object} graph + * @param {String | Number} from Id of the from node + */ + function parseEdge(graph, from) { + while (token === '->' || token === '--') { + var to; + var type = token; + getToken(); + + var subgraph = parseSubgraph(graph); + if (subgraph) { + to = subgraph; + } else { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier or subgraph expected'); + } + to = token; + addNode(graph, { + id: to + }); + getToken(); } - /** - * - * @param ctx - * @param selected - * @param x - * @param y - * @param baseline - */ + // parse edge attributes + var attr = parseAttributeList(); - }, { - key: 'calculateLabelSize', - value: function calculateLabelSize(ctx, selected, hover) { - var x = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var y = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; + // create edge + var edge = createEdge(graph, from, to, type, attr); + addEdge(graph, edge); - if (this.labelDirty === true) { - this._processLabel(ctx, selected, hover); + from = to; + } + } + + /** + * Parse a set with attributes, + * for example [label="1.000", shape=solid] + * @return {Object | null} attr + */ + function parseAttributeList() { + var attr = null; + + while (token === '[') { + getToken(); + attr = {}; + while (token !== '' && token != ']') { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute name expected'); } - 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.fontOptions.size; - if (baseline === "hanging") { - 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 + var name = token; + + getToken(); + if (token != '=') { + throw newSyntaxError('Equal sign = expected'); } - this.labelDirty = false; - } + getToken(); - /** - * normalize the markup system - */ + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute value expected'); + } + var value = token; + setValue(attr, name, value); // name can be a path - }, { - key: 'decodeMarkupSystem', - value: function decodeMarkupSystem(markupSystem) { - var system = 'none'; - if (markupSystem === 'markdown' || markupSystem === 'md') { - system = 'markdown'; - } else if (markupSystem === true || markupSystem === 'html') { - system = 'html'; + getToken(); + if (token == ',') { + getToken(); } - return system; } - /** - * Explodes a piece of text into single-font blocks using a given markup - * @param text - * @param markupSystem - * @returns [{ text, mod }] - */ + if (token != ']') { + throw newSyntaxError('Bracket ] expected'); + } + getToken(); + } - }, { - key: 'splitBlocks', - value: function splitBlocks(text, markupSystem) { - var system = this.decodeMarkupSystem(markupSystem); - if (system === 'none') { - return [{ - text: text, - mod: 'normal' - }]; - } else if (system === 'markdown') { - return this.splitMarkdownBlocks(text); - } else if (system === 'html') { - return this.splitHtmlBlocks(text); + return attr; + } + + /** + * Create a syntax error with extra information on current token and index. + * @param {String} message + * @returns {SyntaxError} err + */ + function newSyntaxError(message) { + return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); + } + + /** + * Chop off text after a maximum length + * @param {String} text + * @param {Number} maxLength + * @returns {String} + */ + function chop(text, maxLength) { + return text.length <= maxLength ? text : text.substr(0, 27) + '...'; + } + + /** + * Execute a function fn for each pair of elements in two arrays + * @param {Array | *} array1 + * @param {Array | *} array2 + * @param {function} fn + */ + function forEach2(array1, array2, fn) { + if (Array.isArray(array1)) { + array1.forEach(function (elem1) { + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(elem1, elem2); + }); + } else { + fn(elem1, array2); } + }); + } else { + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(array1, elem2); + }); + } else { + fn(array1, array2); } - }, { - key: 'splitMarkdownBlocks', - value: function splitMarkdownBlocks(text) { - var blocks = []; - var s = { - bold: false, - ital: false, - mono: false, - beginable: true, - spacing: false, - position: 0, - buffer: "", - modStack: [] - }; - s.mod = function () { - return this.modStack.length === 0 ? 'normal' : this.modStack[0]; - }; - s.modName = function () { - if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else { - if (s.bold && s.ital) { - return 'boldital'; - } else if (s.bold) { - return 'bold'; - } else if (s.ital) { - return 'ital'; - } - } - }; - s.emitBlock = function () { - var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + } + } - if (this.spacing) { - this.add(" "); - this.spacing = false; - } - if (this.buffer.length > 0) { - blocks.push({ text: this.buffer, mod: this.modName() }); - this.buffer = ""; - } - }; - s.add = function (text) { - if (text === " ") { - s.spacing = true; - } - if (s.spacing) { - this.buffer += " "; - this.spacing = false; - } - if (text != " ") { - this.buffer += text; - } - }; - while (s.position < text.length) { - var ch = text.charAt(s.position); - if (/[ \t]/.test(ch)) { - if (!s.mono) { - s.spacing = true; - } else { - s.add(ch); - } - s.beginable = true; - } else if (/\\/.test(ch)) { - if (s.position < text.length + 1) { - s.position++; - ch = text.charAt(s.position); - if (/ \t/.test(ch)) { - s.spacing = true; - } else { - s.add(ch); - s.beginable = false; - } - } - } else if (!s.mono && !s.bold && (s.beginable || s.spacing) && /\*/.test(ch)) { - s.emitBlock(); - s.bold = true; - s.modStack.unshift("bold"); - } else if (!s.mono && !s.ital && (s.beginable || s.spacing) && /\_/.test(ch)) { - s.emitBlock(); - s.ital = true; - s.modStack.unshift("ital"); - } else if (!s.mono && (s.beginable || s.spacing) && /`/.test(ch)) { - s.emitBlock(); - s.mono = true; - s.modStack.unshift("mono"); - } else if (!s.mono && s.mod() === "bold" && /\*/.test(ch)) { - if (s.position === text.length - 1 || /[.,_` \t\n]/.test(text.charAt(s.position + 1))) { - s.emitBlock(); - s.bold = false; - s.modStack.shift(); - } else { - s.add(ch); - } - } else if (!s.mono && s.mod() === "ital" && /\_/.test(ch)) { - if (s.position === text.length - 1 || /[.,*` \t\n]/.test(text.charAt(s.position + 1))) { - s.emitBlock(); - s.ital = false; - s.modStack.shift(); - } else { - s.add(ch); - } - } else if (s.mono && s.mod() === "mono" && /`/.test(ch)) { - if (s.position === text.length - 1 || /[.,*_ \t\n]/.test(text.charAt(s.position + 1))) { - s.emitBlock(); - s.mono = false; - s.modStack.shift(); - } else { - s.add(ch); - } - } else { - s.add(ch); - s.beginable = false; - } - s.position++; - } - s.emitBlock(); - return blocks; + /** + * Set a nested property on an object + * When nested objects are missing, they will be created. + * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}} + * @param {Object} object + * @param {string} path A dot separated string like 'font.color' + * @param {*} value Value for the property + * @return {Object} Returns the original object, allows for chaining. + */ + function setProp(object, path, value) { + var names = path.split('.'); + var prop = names.pop(); + + // traverse over the nested objects + var obj = object; + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (!(name in obj)) { + obj[name] = {}; } - }, { - key: 'splitHtmlBlocks', - value: function splitHtmlBlocks(text) { - var blocks = []; - var s = { - bold: false, - ital: false, - mono: false, - spacing: false, - position: 0, - buffer: "", - modStack: [] - }; - s.mod = function () { - return this.modStack.length === 0 ? 'normal' : this.modStack[0]; - }; - s.modName = function () { - if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else { - if (s.bold && s.ital) { - return 'boldital'; - } else if (s.bold) { - return 'bold'; - } else if (s.ital) { - return 'ital'; - } - } - }; - s.emitBlock = function () { - var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + obj = obj[name]; + } - if (this.spacing) { - this.add(" "); - this.spacing = false; - } - if (this.buffer.length > 0) { - blocks.push({ text: this.buffer, mod: this.modName() }); - this.buffer = ""; - } - }; - s.add = function (text) { - if (text === " ") { - s.spacing = true; - } - if (s.spacing) { - this.buffer += " "; - this.spacing = false; - } - if (text != " ") { - this.buffer += text; - } - }; - while (s.position < text.length) { - var ch = text.charAt(s.position); - if (/[ \t]/.test(ch)) { - if (!s.mono) { - s.spacing = true; - } else { - s.add(ch); - } - } else if (//.test(text.substr(s.position, 3))) { - s.emitBlock(); - s.bold = true; - s.modStack.unshift("bold"); - s.position += 2; - } else if (!s.mono && !s.ital && //.test(text.substr(s.position, 3))) { - s.emitBlock(); - s.ital = true; - s.modStack.unshift("ital"); - s.position += 2; - } else if (!s.mono && //.test(text.substr(s.position, 6))) { - s.emitBlock(); - s.mono = true; - s.modStack.unshift("mono"); - s.position += 5; - } else if (!s.mono && s.mod() === 'bold' && /<\/b>/.test(text.substr(s.position, 4))) { - s.emitBlock(); - s.bold = false; - s.modStack.shift(); - s.position += 3; - } else if (!s.mono && s.mod() === 'ital' && /<\/i>/.test(text.substr(s.position, 4))) { - s.emitBlock(); - s.ital = false; - s.modStack.shift(); - s.position += 3; - } else if (s.mod() === 'mono' && /<\/code>/.test(text.substr(s.position, 7))) { - s.emitBlock(); - s.mono = false; - s.modStack.shift(); - s.position += 6; - } else { - s.add(ch); - } - } else if (/&/.test(ch)) { - if (/</.test(text.substr(s.position, 4))) { - s.add("<"); - s.position += 3; - } else if (/&/.test(text.substr(s.position, 5))) { - s.add("&"); - s.position += 4; - } else { - s.add("&"); - } - } else { - s.add(ch); - } - s.position++; + // set the property value + obj[prop] = value; + + return object; + } + + /** + * Convert an object with DOT attributes to their vis.js equivalents. + * @param {Object} attr Object with DOT attributes + * @param {Object} mapping + * @return {Object} Returns an object with vis.js attributes + */ + function convertAttr(attr, mapping) { + var converted = {}; + + for (var prop in attr) { + if (attr.hasOwnProperty(prop)) { + var visProp = mapping[prop]; + if (Array.isArray(visProp)) { + visProp.forEach(function (visPropI) { + setProp(converted, visPropI, attr[prop]); + }); + } else if (typeof visProp === 'string') { + setProp(converted, visProp, attr[prop]); + } else { + setProp(converted, prop, attr[prop]); } - s.emitBlock(); - return blocks; } - }, { - key: 'getFormattingValues', - value: function getFormattingValues(ctx, selected, hover, mod) { - var values = { - color: mod === "normal" ? this.fontOptions.color : this.fontOptions[mod].color, - size: mod === "normal" ? this.fontOptions.size : this.fontOptions[mod].size, - face: mod === "normal" ? this.fontOptions.face : this.fontOptions[mod].face, - mod: mod === "normal" ? "" : this.fontOptions[mod].mod, - vadjust: mod === "normal" ? this.fontOptions.vadjust : this.fontOptions[mod].vadjust, - strokeWidth: this.fontOptions.strokeWidth, - strokeColor: this.fontOptions.strokeColor + } + + return converted; + } + + /** + * Convert a string containing a graph in DOT language into a map containing + * with nodes and edges in the format of graph. + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graphData + */ + function DOTToGraph(data) { + // parse the DOT file + var dotData = parseDOT(data); + var graphData = { + nodes: [], + edges: [], + options: {} + }; + + // copy the nodes + if (dotData.nodes) { + dotData.nodes.forEach(function (dotNode) { + var graphNode = { + id: dotNode.id, + label: String(dotNode.label || dotNode.id) }; - if (mod === "normal") { - if (selected || hover) { - if (this.fontOptions.chooser === true && this.elementOptions.labelHighlightBold) { - values.mod = 'bold'; - } else if (typeof this.fontOptions.chooser === 'function') { - this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover); - } - } - } else { - if ((selected || hover) && typeof this.fontOptions.chooser === 'function') { - this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover); - } + merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING)); + if (graphNode.image) { + graphNode.shape = 'image'; } - ctx.font = (values.mod + " " + values.size + "px " + values.face).replace(/"/g, ""); - values.font = ctx.font; - values.height = values.size; - return values; - } - }, { - key: 'differentState', - value: function differentState(selected, hover) { - return selected !== this.fontOptions.selectedState && hover !== this.fontOptions.hoverState; - } + graphData.nodes.push(graphNode); + }); + } + // copy the edges + if (dotData.edges) { /** - * This explodes the label string into lines and sets the width, height and number of lines. - * @param ctx - * @param selected - * @private + * Convert an edge in DOT format to an edge with VisGraph format + * @param {Object} dotEdge + * @returns {Object} graphEdge */ - - }, { - key: '_processLabel', - value: function _processLabel(ctx, selected, hover) { - var width = 0; - var height = 0; - var nlLines = []; - var lines = []; - var k = 0; - lines.add = function (l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) { - if (this.length == l) { - this[l] = { width: 0, height: 0, blocks: [] }; - } - this[l].blocks.push({ text: text, font: font, color: color, width: width, height: height, vadjust: vadjust, mod: mod, strokeWidth: strokeWidth, strokeColor: strokeColor }); - }; - lines.accumulate = function (l, width, height) { - this[l].width += width; - this[l].height = height > this[l].height ? height : this[l].height; - }; - lines.addAndAccumulate = function (l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) { - this.add(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor); - this.accumulate(l, width, height); + var convertEdge = function convertEdge(dotEdge) { + var graphEdge = { + from: dotEdge.from, + to: dotEdge.to }; - if (this.elementOptions.label !== undefined) { - var _nlLines = String(this.elementOptions.label).split('\n'); - var lineCount = _nlLines.length; - if (this.elementOptions.font.multi) { - for (var i = 0; i < lineCount; i++) { - var blocks = this.splitBlocks(_nlLines[i], this.elementOptions.font.multi); - var lineWidth = 0; - var lineHeight = 0; - if (blocks) { - if (blocks.length == 0) { - var values = this.getFormattingValues(ctx, selected, hover, "normal"); - lines.addAndAccumulate(k, "", values.font, values.color, 0, values.size, values.vadjust, "normal", values.strokeWidth, values.strokeColor); - height += lines[k].height; - k++; - continue; - } - for (var j = 0; j < blocks.length; j++) { - if (this.fontOptions.maxWdt > 0) { - var _values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod); - var words = blocks[j].text.split(" "); - var atStart = true; - var text = ""; - var measure = { width: 0 }; - var lastMeasure = void 0; - var w = 0; - while (w < words.length) { - var pre = atStart ? "" : " "; - lastMeasure = measure; - measure = ctx.measureText(text + pre + words[w]); - if (lineWidth + measure.width > this.fontOptions.maxWdt && lastMeasure.width != 0) { - lineHeight = _values.height > lineHeight ? _values.height : lineHeight; - lines.add(k, text, _values.font, _values.color, lastMeasure.width, _values.height, _values.vadjust, blocks[j].mod, _values.strokeWidth, _values.strokeColor); - lines.accumulate(k, lastMeasure.width, lineHeight); - text = ""; - atStart = true; - lineWidth = 0; - width = lines[k].width > width ? lines[k].width : width; - height += lines[k].height; - k++; - } else { - text = text + pre + words[w]; - if (w === words.length - 1) { - lineHeight = _values.height > lineHeight ? _values.height : lineHeight; - lineWidth += measure.width; - lines.add(k, text, _values.font, _values.color, measure.width, _values.height, _values.vadjust, blocks[j].mod, _values.strokeWidth, _values.strokeColor); - lines.accumulate(k, measure.width, lineHeight); - if (j === blocks.length - 1) { - width = lines[k].width > width ? lines[k].width : width; - height += lines[k].height; - k++; - } - } - w++; - atStart = false; - } - } - } else { - var _values2 = this.getFormattingValues(ctx, selected, hover, blocks[j].mod); - var _measure = ctx.measureText(blocks[j].text); - lines.addAndAccumulate(k, blocks[j].text, _values2.font, _values2.color, _measure.width, _values2.height, _values2.vadjust, blocks[j].mod, _values2.strokeWidth, _values2.strokeColor); - width = lines[k].width > width ? lines[k].width : width; - if (blocks.length - 1 === j) { - height += lines[k].height; - k++; - } - } - } - } - } - } else { - for (var _i = 0; _i < lineCount; _i++) { - var _values3 = this.getFormattingValues(ctx, selected, hover, "normal"); - if (this.fontOptions.maxWdt > 0) { - var _words = _nlLines[_i].split(" "); - var _text = ""; - var _measure2 = { width: 0 }; - var _lastMeasure = void 0; - var _w = 0; - while (_w < _words.length) { - var _pre = _text === "" ? "" : " "; - _lastMeasure = _measure2; - _measure2 = ctx.measureText(_text + _pre + _words[_w]); - if (_measure2.width > this.fontOptions.maxWdt && _lastMeasure.width != 0) { - lines.addAndAccumulate(k, _text, _values3.font, _values3.color, _lastMeasure.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); - width = lines[k].width > width ? lines[k].width : width; - height += lines[k].height; - _text = ""; - k++; - } else { - _text = _text + _pre + _words[_w]; - if (_w === _words.length - 1) { - lines.addAndAccumulate(k, _text, _values3.font, _values3.color, _measure2.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); - width = lines[k].width > width ? lines[k].width : width; - height += lines[k].height; - k++; - } - _w++; - } - } - } else { - var _text2 = _nlLines[_i]; - var _measure3 = ctx.measureText(_text2); - lines.addAndAccumulate(k, _text2, _values3.font, _values3.color, _measure3.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); - width = lines[k].width > width ? lines[k].width : width; - height += lines[k].height; - k++; - } - } - } - } - if (this.fontOptions.minWdt > 0 && width < this.fontOptions.minWdt) { - width = this.fontOptions.minWdt; - } - this.size.labelHeight = height; - if (this.fontOptions.minHgt > 0 && height < this.fontOptions.minHgt) { - height = this.fontOptions.minHgt; - } - this.lines = lines; - this.lineCount = lines.length; - this.size.width = width; - this.size.height = height; - this.selectedState = selected; - this.hoverState = hover; - } - }], [{ - key: 'parseOptions', - value: function parseOptions(parentOptions, newOptions) { - var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING)); + graphEdge.arrows = dotEdge.type === '->' ? 'to' : undefined; - if (typeof newOptions.font === 'string') { - var newOptionsArray = newOptions.font.split(" "); - parentOptions.size = newOptionsArray[0].replace("px", ''); - parentOptions.face = newOptionsArray[1]; - parentOptions.color = newOptionsArray[2]; - parentOptions.vadjust = 0; - } else if ((0, _typeof3['default'])(newOptions.font) === 'object') { - util.fillIfDefined(parentOptions, newOptions.font, allowDeletion); + return graphEdge; + }; + + dotData.edges.forEach(function (dotEdge) { + var from, to; + if (dotEdge.from instanceof Object) { + from = dotEdge.from.nodes; + } else { + from = { + id: dotEdge.from + }; } - parentOptions.size = Number(parentOptions.size); - parentOptions.vadjust = Number(parentOptions.vadjust); - } - }]); - return Label; - }(); - exports['default'] = Label; + // TODO: support of solid/dotted/dashed edges (attr = 'style') + // TODO: support for attributes 'dir' and 'arrowhead' (edge arrows) -/***/ }, -/* 165 */ -/***/ function(module, exports, __webpack_require__) { + if (dotEdge.to instanceof Object) { + to = dotEdge.to.nodes; + } else { + to = { + id: dotEdge.to + }; + } - "use strict"; + if (dotEdge.from instanceof Object && dotEdge.from.edges) { + dotEdge.from.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } - exports.__esModule = true; + forEach2(from, to, function (from, to) { + var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); - var _isIterable2 = __webpack_require__(166); + if (dotEdge.to instanceof Object && dotEdge.to.edges) { + dotEdge.to.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } + }); + } - var _isIterable3 = _interopRequireDefault(_isIterable2); + // copy the options + if (dotData.attr) { + graphData.options = dotData.attr; + } - var _getIterator2 = __webpack_require__(2); + return graphData; + } - var _getIterator3 = _interopRequireDefault(_getIterator2); + // exports + exports.parseDOT = parseDOT; + exports.DOTToGraph = DOTToGraph; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ }), +/* 162 */ +/***/ (function(module, exports) { - exports.default = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; + 'use strict'; - try { - for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); + function parseGephi(gephiJSON, optionsObj) { + var edges = []; + var nodes = []; + var options = { + edges: { + inheritColor: false + }, + nodes: { + fixed: false, + parseColor: false + } + }; - 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; - } + if (optionsObj !== undefined) { + if (optionsObj.fixed !== undefined) { + options.nodes.fixed = optionsObj.fixed; } + if (optionsObj.parseColor !== undefined) { + options.nodes.parseColor = optionsObj.parseColor; + } + if (optionsObj.inheritColor !== undefined) { + options.edges.inheritColor = optionsObj.inheritColor; + } + } - return _arr; + var gEdges = gephiJSON.edges; + var gNodes = gephiJSON.nodes; + for (var i = 0; i < gEdges.length; i++) { + var edge = {}; + var gEdge = gEdges[i]; + edge['id'] = gEdge.id; + 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) { + edge['color'] = gEdge.color; + } + edges.push(edge); } - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if ((0, _isIterable3.default)(Object(arr))) { - return sliceIterator(arr, i); + for (var i = 0; i < gNodes.length; i++) { + var node = {}; + var gNode = gNodes[i]; + node['id'] = gNode.id; + node['attributes'] = gNode.attributes; + node['x'] = gNode.x; + node['y'] = gNode.y; + node['label'] = gNode.label; + node['title'] = gNode.attributes !== undefined ? gNode.attributes.title : gNode.title; + if (options.nodes.parseColor === true) { + node['color'] = gNode.color; } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); + node['color'] = gNode.color !== undefined ? { background: gNode.color, border: gNode.color, highlight: { background: gNode.color, border: gNode.color }, hover: { background: gNode.color, border: gNode.color } } : undefined; } - }; - }(); + node['size'] = gNode.size; + node['fixed'] = options.nodes.fixed && gNode.x !== undefined && gNode.y !== undefined; + nodes.push(node); + } -/***/ }, -/* 166 */ -/***/ function(module, exports, __webpack_require__) { + return { nodes: nodes, edges: edges }; + } - module.exports = { "default": __webpack_require__(167), __esModule: true }; + exports.parseGephi = parseGephi; -/***/ }, -/* 167 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 163 */ +/***/ (function(module, exports) { - __webpack_require__(4); - __webpack_require__(50); - module.exports = __webpack_require__(168); + 'use strict'; -/***/ }, -/* 168 */ -/***/ function(module, exports, __webpack_require__) { + // English + exports['en'] = { + edit: 'Edit', + del: 'Delete selected', + back: 'Back', + addNode: 'Add Node', + addEdge: 'Add Edge', + editNode: 'Edit Node', + editEdge: 'Edit Edge', + addDescription: 'Click in an empty space to place a new node.', + edgeDescription: 'Click on a node and drag the edge to another node to connect them.', + editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', + createEdgeError: 'Cannot link edges to a cluster.', + deleteClusterError: 'Clusters cannot be deleted.', + editClusterError: 'Clusters cannot be edited.' + }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; - var classof = __webpack_require__(54) - , ITERATOR = __webpack_require__(47)('iterator') - , Iterators = __webpack_require__(8); - module.exports = __webpack_require__(17).isIterable = function(it){ - var O = Object(it); - return O[ITERATOR] !== undefined - || '@@iterator' in O - || Iterators.hasOwnProperty(classof(O)); + // German + exports['de'] = { + edit: 'Editieren', + del: 'L\xF6sche Auswahl', + back: 'Zur\xFCck', + addNode: 'Knoten hinzuf\xFCgen', + addEdge: 'Kante hinzuf\xFCgen', + editNode: 'Knoten editieren', + editEdge: 'Kante editieren', + addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.', + edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.', + editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.', + createEdgeError: 'Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.', + deleteClusterError: 'Cluster k\xF6nnen nicht gel\xF6scht werden.', + editClusterError: 'Cluster k\xF6nnen nicht editiert werden.' }; + exports['de_DE'] = exports['de']; -/***/ }, -/* 169 */ -/***/ function(module, exports, __webpack_require__) { + // Spanish + exports['es'] = { + edit: 'Editar', + del: 'Eliminar selecci\xF3n', + back: '\xC1tras', + addNode: 'A\xF1adir nodo', + addEdge: 'A\xF1adir arista', + editNode: 'Editar nodo', + editEdge: 'Editar arista', + addDescription: 'Haga clic en un lugar vac\xEDo 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']; - 'use strict'; + //Italiano + exports['it'] = { + edit: 'Modifica', + del: 'Cancella la selezione', + back: 'Indietro', + addNode: 'Aggiungi un nodo', + addEdge: 'Aggiungi un vertice', + editNode: 'Modifica il nodo', + editEdge: 'Modifica il vertice', + addDescription: 'Clicca per aggiungere un nuovo nodo', + edgeDescription: 'Clicca su un nodo e trascinalo ad un altro nodo per connetterli.', + editEdgeDescription: 'Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.', + createEdgeError: 'Non si possono collegare vertici ad un cluster', + deleteClusterError: 'I cluster non possono essere cancellati', + editClusterError: 'I clusters non possono essere modificati.' + }; + exports['it_IT'] = exports['it']; - Object.defineProperty(exports, "__esModule", { - value: true - }); + // Dutch + exports['nl'] = { + edit: 'Wijzigen', + del: 'Selectie verwijderen', + back: 'Terug', + addNode: 'Node toevoegen', + addEdge: 'Link toevoegen', + editNode: 'Node wijzigen', + editEdge: 'Link wijzigen', + addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', + edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', + editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', + createEdgeError: 'Kan geen link maken naar een cluster.', + deleteClusterError: 'Clusters kunnen niet worden verwijderd.', + editClusterError: 'Clusters kunnen niet worden aangepast.' + }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; - var _getPrototypeOf = __webpack_require__(170); + // Portuguese Brazil + exports['pt-br'] = { + edit: 'Editar', + del: 'Remover selecionado', + back: 'Voltar', + addNode: 'Adicionar nó', + addEdge: 'Adicionar aresta', + editNode: 'Editar nó', + editEdge: 'Editar aresta', + addDescription: 'Clique em um espaço em branco para adicionar um novo nó', + edgeDescription: 'Clique em um nó e arraste a aresta até outro nó para conectá-los', + editEdgeDescription: 'Clique nos pontos de controle e os arraste para um nó para conectá-los', + createEdgeError: 'Não foi possível linkar arestas a um cluster.', + deleteClusterError: 'Clusters não puderam ser removidos.', + editClusterError: 'Clusters não puderam ser editados.' + }; + exports['pt-BR'] = exports['pt-br']; + exports['pt_BR'] = exports['pt-br']; + exports['pt_br'] = exports['pt-br']; - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + // Russian + exports['ru'] = { + edit: 'Редактировать', + del: 'Удалить выбранное', + back: 'Назад', + addNode: 'Добавить узел', + addEdge: 'Добавить ребро', + editNode: 'Редактировать узел', + editEdge: 'Редактировать ребро', + addDescription: 'Кликните в свободное место, чтобы добавить новый узел.', + edgeDescription: 'Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.', + editEdgeDescription: 'Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.', + createEdgeError: 'Невозможно соединить ребра в кластер.', + deleteClusterError: 'Кластеры не могут быть удалены', + editClusterError: 'Кластеры недоступны для редактирования.' + }; + exports['ru_RU'] = exports['ru']; - var _classCallCheck2 = __webpack_require__(119); +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + "use strict"; - var _createClass2 = __webpack_require__(120); + Object.defineProperty(exports, "__esModule", { + value: true + }); - var _createClass3 = _interopRequireDefault(_createClass2); + var _classCallCheck2 = __webpack_require__(134); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var _createClass2 = __webpack_require__(135); - var _inherits2 = __webpack_require__(174); + var _createClass3 = _interopRequireDefault(_createClass2); - var _inherits3 = _interopRequireDefault(_inherits2); + var _CachedImage = __webpack_require__(165); - var _NodeBase2 = __webpack_require__(179); + var _CachedImage2 = _interopRequireDefault(_CachedImage); - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + /** + * @class Images + * This class loads images and keeps them stored. + */ + var Images = function () { + function Images(callback) { + (0, _classCallCheck3["default"])(this, Images); - var Box = function (_NodeBase) { - (0, _inherits3['default'])(Box, _NodeBase); + this.images = {}; + this.imageBroken = {}; + this.callback = callback; + } - function Box(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Box); + /** + * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image + * @param {string} brokenUrl Url the broken image to try and load + * @return {Image} imageToLoadBrokenUrlOn The image object + */ - var _this = (0, _possibleConstructorReturn3['default'])(this, (Box.__proto__ || (0, _getPrototypeOf2['default'])(Box)).call(this, options, body, labelModule)); - _this._setMargins(labelModule); - return _this; - } + (0, _createClass3["default"])(Images, [{ + key: "_tryloadBrokenUrl", + value: function _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) { + //If these parameters aren't specified then exit the function because nothing constructive can be done + if (url === undefined || imageToLoadBrokenUrlOn === undefined) return; + if (brokenUrl === undefined) { + console.warn("No broken url image defined"); + return; + } - (0, _createClass3['default'])(Box, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; + //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl + imageToLoadBrokenUrlOn.onerror = function () { + console.error("Could not load brokenImage:", brokenUrl); + // cache item will contain empty image, this should be OK for default + }; - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - this.textSize = this.labelModule.getTextSize(ctx, selected, hover); - this.width = this.textSize.width + this.margin.right + this.margin.left; - this.height = this.textSize.height + this.margin.top + this.margin.bottom; - this.radius = this.width / 2; - } - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.left = x - this.width / 2; - this.top = y - this.height / 2; + //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image + imageToLoadBrokenUrlOn.image.src = brokenUrl; + } - ctx.strokeStyle = values.borderColor; - ctx.lineWidth = values.borderWidth; - ctx.lineWidth /= this.body.view.scale; - ctx.lineWidth = Math.min(this.width, ctx.lineWidth); + /** + * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked + */ - ctx.fillStyle = values.color; + }, { + key: "_redrawWithImage", + value: function _redrawWithImage(imageToRedrawWith) { + if (this.callback) { + this.callback(imageToRedrawWith); + } + } - ctx.roundRect(this.left, this.top, this.width, this.height, values.borderRadius); + /** + * @param {string} url Url of the image + * @param {string} brokenUrl Url of an image to use if the url image is not found + * @return {Image} img The image object + */ - // draw shadow if enabled - this.enableShadow(ctx, values); - // draw the background - ctx.fill(); - // disable shadows for other elements. - this.disableShadow(ctx, values); + }, { + key: "load", + value: function load(url, brokenUrl, id) { + var _this = this; - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (values.borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); - } - ctx.restore(); + //Try and get the image from the cache, if successful then return the cached image + var cachedImage = this.images[url]; + if (cachedImage) return cachedImage; - this.updateBoundingBox(x, y, ctx, selected, hover); - this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); - } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y, ctx, selected, hover) { - this.resize(ctx, selected, hover); - this.left = x - this.width / 2; - this.top = y - this.height / 2; + //Create a new image + var img = new _CachedImage2["default"](); - var borderRadius = this.options.shapeProperties.borderRadius; // only effective for box - this.boundingBox.left = this.left - borderRadius; - this.boundingBox.top = this.top - borderRadius; - this.boundingBox.bottom = this.top + this.height + borderRadius; - this.boundingBox.right = this.left + this.width + borderRadius; - } - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - this.resize(ctx); - var borderWidth = this.options.borderWidth; + // Need to add to cache here, otherwise final return will spawn different copies of the same image, + // Also, there will be multiple loads of the same image. + this.images[url] = img; - return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; - } - }]); - return Box; - }(_NodeBase3['default']); + //Subscribe to the event that is raised if the image loads successfully + img.image.onload = function () { + // Properly init the cached item and then request a redraw + _this._fixImageCoordinates(img.image); + img.init(); + _this._redrawWithImage(img); + }; - exports['default'] = Box; + //Subscribe to the event that is raised if the image fails to load + img.image.onerror = function () { + console.error("Could not load image:", url); + //Try and load the image specified by the brokenUrl using + _this._tryloadBrokenUrl(url, brokenUrl, img); + }; -/***/ }, -/* 170 */ -/***/ function(module, exports, __webpack_require__) { + //Set the source of the image to the url, this is what actually kicks off the loading of the image + img.image.src = url; - module.exports = { "default": __webpack_require__(171), __esModule: true }; + //Return the new image + return img; + } -/***/ }, -/* 171 */ -/***/ function(module, exports, __webpack_require__) { + /** + * IE11 fix -- thanks dponch! + * + * Local helper function + * + * @private + */ - __webpack_require__(172); - module.exports = __webpack_require__(17).Object.getPrototypeOf; + }, { + key: "_fixImageCoordinates", + value: function _fixImageCoordinates(imageToCache) { + if (imageToCache.width === 0) { + document.body.appendChild(imageToCache); + imageToCache.width = imageToCache.offsetWidth; + imageToCache.height = imageToCache.offsetHeight; + document.body.removeChild(imageToCache); + } + } + }]); + return Images; + }(); -/***/ }, -/* 172 */ -/***/ function(module, exports, __webpack_require__) { + exports["default"] = Images; - // 19.1.2.9 Object.getPrototypeOf(O) - var toObject = __webpack_require__(49) - , $getPrototypeOf = __webpack_require__(48); +/***/ }), +/* 165 */ +/***/ (function(module, exports, __webpack_require__) { - __webpack_require__(61)('getPrototypeOf', function(){ - return function getPrototypeOf(it){ - return $getPrototypeOf(toObject(it)); - }; + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true }); -/***/ }, -/* 173 */ -/***/ function(module, exports, __webpack_require__) { + var _classCallCheck2 = __webpack_require__(134); - "use strict"; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - exports.__esModule = true; + var _createClass2 = __webpack_require__(135); - var _typeof2 = __webpack_require__(62); + var _createClass3 = _interopRequireDefault(_createClass2); - var _typeof3 = _interopRequireDefault(_typeof2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /** + * Associates a canvas to a given image, containing a number of renderings + * of the image at various sizes. + * + * This technique is known as 'mipmapping'. + * + * NOTE: Images can also be of type 'data:svg+xml`. This code also works + * for svg, but the mipmapping may not be necessary. + */ + var CachedImage = function () { + function CachedImage(image) { + (0, _classCallCheck3['default'])(this, CachedImage); - exports.default = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + this.NUM_ITERATIONS = 4; // Number of items in the coordinates array + + this.image = new Image(); + this.canvas = document.createElement('canvas'); } - return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; - }; + /** + * Called when the image has been succesfully loaded. + */ -/***/ }, -/* 174 */ -/***/ function(module, exports, __webpack_require__) { - "use strict"; + (0, _createClass3['default'])(CachedImage, [{ + key: 'init', + value: function init() { + if (this.initialized()) return; - exports.__esModule = true; + var w = this.image.width; + var h = this.image.height; - var _setPrototypeOf = __webpack_require__(175); + // Ease external access + this.width = w; + this.height = h; - var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf); + // Make canvas as small as possible + this.canvas.width = 3 * w / 4; + this.canvas.height = h / 2; - var _create = __webpack_require__(55); + // Coordinates and sizes of images contained in the canvas + // Values per row: [top x, left y, width, height] + this.coordinates = [[0, 0, w / 2, h / 2], [w / 2, 0, w / 4, h / 4], [w / 2, h / 4, w / 8, h / 8], [5 * w / 8, h / 4, w / 16, h / 16]]; - var _create2 = _interopRequireDefault(_create); + this._fillMipMap(); + } - var _typeof2 = __webpack_require__(62); + /** + * @return {Boolean} true if init() has been called, false otherwise. + */ - var _typeof3 = _interopRequireDefault(_typeof2); + }, { + key: 'initialized', + value: function initialized() { + return this.coordinates !== undefined; + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /** + * Redraw main image in various sizes to the context. + * + * The rationale behind this is to reduce artefacts due to interpolation + * at differing zoom levels. + * + * Source: http://stackoverflow.com/q/18761404/1223531 + * + * This methods takes the resizing out of the drawing loop, in order to + * reduce performance overhead. + * + * @private + */ - exports.default = function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass))); - } + }, { + key: '_fillMipMap', + value: function _fillMipMap() { + var ctx = this.canvas.getContext('2d'); - subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; - }; + // First zoom-level comes from the image + var to = this.coordinates[0]; + ctx.drawImage(this.image, to[0], to[1], to[2], to[3]); -/***/ }, -/* 175 */ -/***/ function(module, exports, __webpack_require__) { + // The rest are copy actions internal to the canvas/context + for (var iterations = 1; iterations < this.NUM_ITERATIONS; iterations++) { + var from = this.coordinates[iterations - 1]; + var _to = this.coordinates[iterations]; - module.exports = { "default": __webpack_require__(176), __esModule: true }; + ctx.drawImage(this.canvas, from[0], from[1], from[2], from[3], _to[0], _to[1], _to[2], _to[3]); + } + } -/***/ }, -/* 176 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Draw the image, using the mipmap if necessary. + * + * MipMap is only used if param factor > 2; otherwise, original bitmap + * is resized. This is also used to skip mipmap usage, e.g. by setting factor = 1 + * + * Credits to 'Alex de Mulder' for original implementation. + * + * ctx {Context} context on which to draw zoomed image + * factor {Float} scale factor at which to draw + */ - __webpack_require__(177); - module.exports = __webpack_require__(17).Object.setPrototypeOf; + }, { + key: 'drawImageAtPosition', + value: function drawImageAtPosition(ctx, factor, left, top, width, height) { + if (factor > 2 && this.initialized()) { + // Determine which zoomed image to use + factor *= 0.5; + var iterations = 0; + while (factor > 2 && iterations < this.NUM_ITERATIONS) { + factor *= 0.5; + iterations += 1; + } -/***/ }, -/* 177 */ -/***/ function(module, exports, __webpack_require__) { + if (iterations >= this.NUM_ITERATIONS) { + iterations = this.NUM_ITERATIONS - 1; + } + //console.log("iterations: " + iterations); - // 19.1.3.19 Object.setPrototypeOf(O, proto) - var $export = __webpack_require__(15); - $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(178).set}); - -/***/ }, -/* 178 */ -/***/ function(module, exports, __webpack_require__) { - - // Works with __proto__ only. Old v8 can't work with null proto objects. - /* eslint-disable no-proto */ - var isObject = __webpack_require__(23) - , anObject = __webpack_require__(22); - var check = function(O, proto){ - anObject(O); - if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); - }; - module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line - function(test, buggy, set){ - try { - set = __webpack_require__(18)(Function.call, __webpack_require__(78).f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch(e){ buggy = true; } - return function setPrototypeOf(O, proto){ - check(O, proto); - if(buggy)O.__proto__ = proto; - else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check - }; - -/***/ }, -/* 179 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _typeof2 = __webpack_require__(62); - - var _typeof3 = _interopRequireDefault(_typeof2); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var NodeBase = function () { - function NodeBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, NodeBase); - - this.body = body; - this.labelModule = labelModule; - this.setOptions(options); - this.top = undefined; - this.left = undefined; - this.height = undefined; - this.width = undefined; - this.radius = undefined; - this.margin = undefined; - this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 }; - } - - (0, _createClass3['default'])(NodeBase, [{ - key: 'setOptions', - value: function setOptions(options) { - this.options = options; - } - }, { - key: '_setMargins', - value: function _setMargins(labelModule) { - this.margin = {}; - if (this.options.margin) { - if ((0, _typeof3['default'])(this.options.margin) == 'object') { - this.margin.top = this.options.margin.top; - this.margin.right = this.options.margin.right; - this.margin.bottom = this.options.margin.bottom; - this.margin.left = this.options.margin.left; - } else { - this.margin.top = this.options.margin; - this.margin.right = this.options.margin; - this.margin.bottom = this.options.margin; - this.margin.left = this.options.margin; - } - } - labelModule.adjustSizes(this.margin); - } - }, { - key: '_distanceToBorder', - value: function _distanceToBorder(ctx, angle) { - var borderWidth = this.options.borderWidth; - this.resize(ctx); - return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; - } - }, { - key: 'enableShadow', - value: function enableShadow(ctx, values) { - if (values.shadow) { - ctx.shadowColor = values.shadowColor; - ctx.shadowBlur = values.shadowSize; - ctx.shadowOffsetX = values.shadowX; - ctx.shadowOffsetY = values.shadowY; - } - } - }, { - key: 'disableShadow', - value: function disableShadow(ctx, values) { - if (values.shadow) { - ctx.shadowColor = 'rgba(0,0,0,0)'; - ctx.shadowBlur = 0; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - } - } - }, { - key: 'enableBorderDashes', - value: function enableBorderDashes(ctx, values) { - if (values.borderDashes !== false) { - if (ctx.setLineDash !== undefined) { - var dashes = values.borderDashes; - if (dashes === true) { - dashes = [5, 15]; - } - ctx.setLineDash(dashes); - } else { - console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."); - this.options.shapeProperties.borderDashes = false; - values.borderDashes = false; - } - } - } - }, { - key: 'disableBorderDashes', - value: function disableBorderDashes(ctx, values) { - if (values.borderDashes !== false) { - if (ctx.setLineDash !== undefined) { - ctx.setLineDash([0]); - } else { - console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."); - this.options.shapeProperties.borderDashes = false; - values.borderDashes = false; - } + var from = this.coordinates[iterations]; + ctx.drawImage(this.canvas, from[0], from[1], from[2], from[3], left, top, width, height); + } else if (this._isImageOk()) { + // Draw image directly + ctx.drawImage(this.image, left, top, width, height); } } - }]); - return NodeBase; - }(); - - exports['default'] = NodeBase; - -/***/ }, -/* 180 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _CircleImageBase2 = __webpack_require__(181); - - var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var Circle = function (_CircleImageBase) { - (0, _inherits3['default'])(Circle, _CircleImageBase); - - function Circle(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Circle); - - var _this = (0, _possibleConstructorReturn3['default'])(this, (Circle.__proto__ || (0, _getPrototypeOf2['default'])(Circle)).call(this, options, body, labelModule)); - - _this._setMargins(labelModule); - return _this; - } - - (0, _createClass3['default'])(Circle, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - var values = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { size: this.options.size }; + /** + * Check if image is loaded + * + * Source: http://stackoverflow.com/a/1977898/1223531 + * + * @private + */ - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - this.textSize = this.labelModule.getTextSize(ctx, selected, hover); - var diameter = Math.max(this.textSize.width + this.margin.right + this.margin.left, this.textSize.height + this.margin.top + this.margin.bottom); - this.options.size = diameter / 2; + }, { + key: '_isImageOk', + value: function _isImageOk(img) { + var img = this.image; - this.width = diameter; - this.height = diameter; - this.radius = this.width / 2; + // During the onload event, IE correctly identifies any images that + // weren’t downloaded as not complete. Others should too. Gecko-based + // browsers act like NS4 in that they report this incorrectly. + if (!img.complete) { + return false; } - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.left = x - this.width / 2; - this.top = y - this.height / 2; - this._drawRawCircle(ctx, x, y, selected, hover, values); + // However, they do have two very useful properties: naturalWidth and + // naturalHeight. These give the true size of the image. If it failed + // to load, either of these should be zero. - this.boundingBox.top = y - values.size; - this.boundingBox.left = x - values.size; - this.boundingBox.right = x + values.size; - this.boundingBox.bottom = y + values.size; + if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { + return false; + } - this.updateBoundingBox(x, y); - this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, y, selected, hover); - } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y) { - this.boundingBox.top = y - this.options.size; - this.boundingBox.left = x - this.options.size; - this.boundingBox.right = x + this.options.size; - this.boundingBox.bottom = y + this.options.size; - } - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - this.resize(ctx); - return this.width * 0.5; + // No other way of checking: assume it’s ok. + return true; } }]); - return Circle; - }(_CircleImageBase3['default']); + return CachedImage; + }(); - exports['default'] = Circle; + exports['default'] = CachedImage; -/***/ }, -/* 181 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { - 'use strict'; + "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - var _inherits2 = __webpack_require__(174); + var util = __webpack_require__(1); - var _inherits3 = _interopRequireDefault(_inherits2); + /** + * @class Groups + * This class can store groups and options specific for groups. + */ - var _NodeBase2 = __webpack_require__(179); + var Groups = function () { + function Groups() { + (0, _classCallCheck3["default"])(this, Groups); - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + this.clear(); + this.defaultIndex = 0; + this.groupsArray = []; + this.groupIndex = 0; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + this.defaultGroups = [{ border: "#2B7CE9", background: "#97C2FC", highlight: { border: "#2B7CE9", background: "#D2E5FF" }, hover: { border: "#2B7CE9", background: "#D2E5FF" } }, // 0: blue + { border: "#FFA500", background: "#FFFF00", highlight: { border: "#FFA500", background: "#FFFFA3" }, hover: { border: "#FFA500", background: "#FFFFA3" } }, // 1: yellow + { border: "#FA0A10", background: "#FB7E81", highlight: { border: "#FA0A10", background: "#FFAFB1" }, hover: { border: "#FA0A10", background: "#FFAFB1" } }, // 2: red + { border: "#41A906", background: "#7BE141", highlight: { border: "#41A906", background: "#A1EC76" }, hover: { border: "#41A906", background: "#A1EC76" } }, // 3: green + { border: "#E129F0", background: "#EB7DF4", highlight: { border: "#E129F0", background: "#F0B3F5" }, hover: { border: "#E129F0", background: "#F0B3F5" } }, // 4: magenta + { border: "#7C29F0", background: "#AD85E4", highlight: { border: "#7C29F0", background: "#D3BDF0" }, hover: { border: "#7C29F0", background: "#D3BDF0" } }, // 5: purple + { border: "#C37F00", background: "#FFA807", highlight: { border: "#C37F00", background: "#FFCA66" }, hover: { border: "#C37F00", background: "#FFCA66" } }, // 6: orange + { border: "#4220FB", background: "#6E6EFD", highlight: { border: "#4220FB", background: "#9B9BFD" }, hover: { border: "#4220FB", background: "#9B9BFD" } }, // 7: darkblue + { border: "#FD5A77", background: "#FFC0CB", highlight: { border: "#FD5A77", background: "#FFD1D9" }, hover: { border: "#FD5A77", background: "#FFD1D9" } }, // 8: pink + { border: "#4AD63A", background: "#C2FABC", highlight: { border: "#4AD63A", background: "#E6FFE3" }, hover: { border: "#4AD63A", background: "#E6FFE3" } }, // 9: mint - var CircleImageBase = function (_NodeBase) { - (0, _inherits3['default'])(CircleImageBase, _NodeBase); + { border: "#990000", background: "#EE0000", highlight: { border: "#BB0000", background: "#FF3333" }, hover: { border: "#BB0000", background: "#FF3333" } }, // 10:bright red - function CircleImageBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, CircleImageBase); + { border: "#FF6000", background: "#FF6000", highlight: { border: "#FF6000", background: "#FF6000" }, hover: { border: "#FF6000", background: "#FF6000" } }, // 12: real orange + { border: "#97C2FC", background: "#2B7CE9", highlight: { border: "#D2E5FF", background: "#2B7CE9" }, hover: { border: "#D2E5FF", background: "#2B7CE9" } }, // 13: blue + { border: "#399605", background: "#255C03", highlight: { border: "#399605", background: "#255C03" }, hover: { border: "#399605", background: "#255C03" } }, // 14: green + { border: "#B70054", background: "#FF007E", highlight: { border: "#B70054", background: "#FF007E" }, hover: { border: "#B70054", background: "#FF007E" } }, // 15: magenta + { border: "#AD85E4", background: "#7C29F0", highlight: { border: "#D3BDF0", background: "#7C29F0" }, hover: { border: "#D3BDF0", background: "#7C29F0" } }, // 16: purple + { border: "#4557FA", background: "#000EA1", highlight: { border: "#6E6EFD", background: "#000EA1" }, hover: { border: "#6E6EFD", background: "#000EA1" } }, // 17: darkblue + { border: "#FFC0CB", background: "#FD5A77", highlight: { border: "#FFD1D9", background: "#FD5A77" }, hover: { border: "#FFD1D9", background: "#FD5A77" } }, // 18: pink + { border: "#C2FABC", background: "#74D66A", highlight: { border: "#E6FFE3", background: "#74D66A" }, hover: { border: "#E6FFE3", background: "#74D66A" } }, // 19: mint - var _this = (0, _possibleConstructorReturn3['default'])(this, (CircleImageBase.__proto__ || (0, _getPrototypeOf2['default'])(CircleImageBase)).call(this, options, body, labelModule)); + { border: "#EE0000", background: "#990000", highlight: { border: "#FF3333", background: "#BB0000" }, hover: { border: "#FF3333", background: "#BB0000" } } // 20:bright red + ]; - _this.labelOffset = 0; - _this.imageLoaded = false; - _this.selected = false; - return _this; + this.options = {}; + this.defaultOptions = { + useDefaultGroups: true + }; + util.extend(this.options, this.defaultOptions); } - (0, _createClass3['default'])(CircleImageBase, [{ - key: 'setOptions', - value: function setOptions(options, imageObj, imageObjAlt) { - this.options = options; - this.setImages(imageObj, imageObjAlt); - } - }, { - key: 'setImages', - value: function setImages(imageObj, imageObjAlt) { - if (imageObj) { - this.imageObj = imageObj; + (0, _createClass3["default"])(Groups, [{ + key: "setOptions", + value: function setOptions(options) { + var optionFields = ['useDefaultGroups']; - if (imageObjAlt) { - this.imageObjAlt = imageObjAlt; + if (options !== undefined) { + for (var groupName in options) { + if (options.hasOwnProperty(groupName)) { + if (optionFields.indexOf(groupName) === -1) { + var group = options[groupName]; + this.add(groupName, group); + } + } } } } /** - * Switch between the base and the selected image. + * Clear all groups */ }, { - key: 'switchImages', - value: function switchImages(selected) { - if (selected && !this.selected || !selected && this.selected) { - var imageTmp = this.imageObj; - this.imageObj = this.imageObjAlt; - this.imageObjAlt = imageTmp; - } - - // keep current state in memory - this.selected = selected; + key: "clear", + value: function clear() { + this.groups = {}; + this.groupsArray = []; } /** - * This function resizes the image by the options size when the image has not yet loaded. If the image has loaded, we - * force the update of the size again. - * - * @private + * get group options of a groupname. If groupname is not found, a new group + * is added. + * @param {*} groupname Can be a number, string, Date, etc. + * @return {Object} group The created group, containing all group options */ }, { - key: '_resizeImage', - value: function _resizeImage() { - var force = false; - if (!this.imageObj.width || !this.imageObj.height) { - // undefined or 0 - this.imageLoaded = false; - } else if (this.imageLoaded === false) { - this.imageLoaded = true; - force = true; - } - - if (!this.width || !this.height || force === true) { - // undefined or 0 - var width, height, ratio; - if (this.imageObj.width && this.imageObj.height) { - // not undefined or 0 - width = 0; - height = 0; - } - if (this.options.shapeProperties.useImageSize === false) { - if (this.imageObj.width > this.imageObj.height) { - ratio = this.imageObj.width / this.imageObj.height; - width = this.options.size * 2 * ratio || this.imageObj.width; - height = this.options.size * 2 || this.imageObj.height; - } else { - if (this.imageObj.width && this.imageObj.height) { - // not undefined or 0 - ratio = this.imageObj.height / this.imageObj.width; - } else { - ratio = 1; - } - width = this.options.size * 2; - height = this.options.size * 2 * ratio; - } + key: "get", + value: function get(groupname) { + var group = this.groups[groupname]; + if (group === undefined) { + if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) { + // create new group + var index = this.groupIndex % this.groupsArray.length; + this.groupIndex++; + group = {}; + group.color = this.groups[this.groupsArray[index]]; + this.groups[groupname] = group; } else { - // when not using the size property, we use the image size - width = this.imageObj.width; - height = this.imageObj.height; + // create new group + var _index = this.defaultIndex % this.defaultGroups.length; + this.defaultIndex++; + group = {}; + group.color = this.defaultGroups[_index]; + this.groups[groupname] = group; } - this.width = width; - this.height = height; - this.radius = 0.5 * this.width; } - } - }, { - key: '_drawRawCircle', - value: function _drawRawCircle(ctx, x, y, selected, hover, values) { - var borderWidth = values.borderWidth / this.body.view.scale; - ctx.lineWidth = Math.min(this.width, borderWidth); - - ctx.strokeStyle = values.borderColor; - ctx.fillStyle = values.color; - ctx.circle(x, y, values.size); - - // draw shadow if enabled - this.enableShadow(ctx, values); - // draw the background - ctx.fill(); - // disable shadows for other elements. - this.disableShadow(ctx, values); - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); - } - ctx.restore(); + return group; } - }, { - key: '_drawImageAtPosition', - value: function _drawImageAtPosition(ctx, values) { - if (this.imageObj.width != 0) { - // draw the image - ctx.globalAlpha = 1.0; - - // draw shadow if enabled - this.enableShadow(ctx, values); - - var factor = this.imageObj.width / this.width / this.body.view.scale; - if (factor > 2 && this.options.shapeProperties.interpolation === true) { - var w = this.imageObj.width; - var h = this.imageObj.height; - var can2 = document.createElement('canvas'); - can2.width = w; - can2.height = w; - var ctx2 = can2.getContext('2d'); - factor *= 0.5; - w *= 0.5; - h *= 0.5; - ctx2.drawImage(this.imageObj, 0, 0, w, h); - - var distance = 0; - var iterations = 1; - while (factor > 2 && iterations < 4) { - ctx2.drawImage(can2, distance, 0, w, h, distance + w, 0, w / 2, h / 2); - distance += w; - factor *= 0.5; - w *= 0.5; - h *= 0.5; - iterations += 1; - } - ctx.drawImage(can2, distance, 0, w, h, this.left, this.top, this.width, this.height); - } else { - // draw image - ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height); - } + /** + * Add a custom group style + * @param {String} groupName + * @param {Object} style An object containing borderColor, + * backgroundColor, etc. + * @return {Object} group The created group object + */ - // disable shadows for other elements. - this.disableShadow(ctx, values); - } - } }, { - key: '_drawImageLabel', - value: function _drawImageLabel(ctx, x, y, selected, hover) { - var yLabel; - var offset = 0; - - if (this.height !== undefined) { - offset = this.height * 0.5; - var labelDimensions = this.labelModule.getTextSize(ctx, selected, hover); - if (labelDimensions.lineCount >= 1) { - offset += labelDimensions.height / 2; - } - } - - yLabel = y + offset; - - if (this.options.label) { - this.labelOffset = offset; - } - this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging'); + key: "add", + value: function add(groupName, style) { + this.groups[groupName] = style; + this.groupsArray.push(groupName); + return style; } }]); - return CircleImageBase; - }(_NodeBase3['default']); + return Groups; + }(); - exports['default'] = CircleImageBase; + exports["default"] = Groups; -/***/ }, -/* 182 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -36752,313 +35497,542 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _CircleImageBase2 = __webpack_require__(181); - - var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var CircularImage = function (_CircleImageBase) { - (0, _inherits3['default'])(CircularImage, _CircleImageBase); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); - function CircularImage(options, body, labelModule, imageObj, imageObjAlt) { - (0, _classCallCheck3['default'])(this, CircularImage); + var Node = __webpack_require__(168)['default']; + var Label = __webpack_require__(169)['default']; - var _this = (0, _possibleConstructorReturn3['default'])(this, (CircularImage.__proto__ || (0, _getPrototypeOf2['default'])(CircularImage)).call(this, options, body, labelModule)); + var NodesHandler = function () { + function NodesHandler(body, images, groups, layoutEngine) { + var _this = this; - _this.setImages(imageObj, imageObjAlt); + (0, _classCallCheck3['default'])(this, NodesHandler); - _this._swapToImageResizeWhenImageLoaded = true; - return _this; - } + this.body = body; + this.images = images; + this.groups = groups; + this.layoutEngine = layoutEngine; - (0, _createClass3['default'])(CircularImage, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; + // create the node API in the body container + this.body.functions.createNode = this.create.bind(this); - if (this.imageObj.src === undefined || this.imageObj.width === undefined || this.imageObj.height === undefined || this.labelModule.differentState(selected, hover)) { - var diameter = this.options.size * 2; - this.width = diameter; - this.height = diameter; - this._swapToImageResizeWhenImageLoaded = true; - this.radius = 0.5 * this.width; - } else { - if (this._swapToImageResizeWhenImageLoaded) { - this.width = undefined; - this.height = undefined; - this._swapToImageResizeWhenImageLoaded = false; - } - this._resizeImage(); - } - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - // switch images depending on 'selected' if imageObjAlt exists - if (this.imageObjAlt) { - this.switchImages(selected); + this.nodesListeners = { + add: function add(event, params) { + _this.add(params.items); + }, + update: function update(event, params) { + _this.update(params.items, params.data); + }, + remove: function remove(event, params) { + _this.remove(params.items); } + }; - this.resize(); - - this.left = x - this.width / 2; - this.top = y - this.height / 2; - - var size = Math.min(0.5 * this.height, 0.5 * this.width); - - // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below. - this._drawRawCircle(ctx, x, y, selected, hover, values); + this.options = {}; + this.defaultOptions = { + borderWidth: 1, + borderWidthSelected: 2, + brokenImage: undefined, + color: { + border: '#2B7CE9', + background: '#97C2FC', + highlight: { + border: '#2B7CE9', + background: '#D2E5FF' + }, + hover: { + border: '#2B7CE9', + background: '#D2E5FF' + } + }, + fixed: { + x: false, + y: false + }, + font: { + color: '#343434', + size: 14, // px + face: 'arial', + background: 'none', + strokeWidth: 0, // px + strokeColor: '#ffffff', + align: 'center', + vadjust: 0, + multi: false, + bold: { + mod: 'bold' + }, + boldital: { + mod: 'bold italic' + }, + ital: { + mod: 'italic' + }, + mono: { + mod: '', + size: 15, // px + face: 'monospace', + vadjust: 2 + } + }, + group: undefined, + hidden: false, + icon: { + face: 'FontAwesome', //'FontAwesome', + code: undefined, //'\uf007', + size: 50, //50, + color: '#2B7CE9' //'#aa00ff' + }, + image: undefined, // --> URL + label: undefined, + labelHighlightBold: true, + level: undefined, + margin: { + top: 5, + right: 5, + bottom: 5, + left: 5 + }, + mass: 1, + physics: true, + scaling: { + min: 10, + max: 30, + label: { + enabled: false, + min: 14, + max: 30, + maxVisible: 30, + drawThreshold: 5 + }, + customScalingFunction: function customScalingFunction(min, max, total, value) { + if (max === min) { + return 0.5; + } else { + var scale = 1 / (max - min); + return Math.max(0, (value - min) * scale); + } + } + }, + shadow: { + enabled: false, + color: 'rgba(0,0,0,0.5)', + size: 10, + x: 5, + y: 5 + }, + shape: 'ellipse', + shapeProperties: { + borderDashes: false, // only for borders + borderRadius: 6, // only for box shape + interpolation: true, // only for image and circularImage shapes + useImageSize: false, // only for image and circularImage shapes + useBorderWithImage: false // only for image shape + }, + size: 25, + title: undefined, + value: undefined, + x: undefined, + y: undefined + }; + util.extend(this.options, this.defaultOptions); - // now we draw in the circle, we save so we can revert the clip operation after drawing. - ctx.save(); - // clip is used to use the stroke in drawRawCircle as an area that we can draw in. - ctx.clip(); - // draw the image - this._drawImageAtPosition(ctx, values); - // restore so we can again draw on the full canvas - ctx.restore(); + this.bindEventListeners(); + } - this._drawImageLabel(ctx, x, y, selected, hover); + (0, _createClass3['default'])(NodesHandler, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this2 = this; - this.updateBoundingBox(x, y); - } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y) { - this.boundingBox.top = y - this.options.size; - this.boundingBox.left = x - this.options.size; - this.boundingBox.right = x + this.options.size; - this.boundingBox.bottom = y + this.options.size; - 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); + // refresh the nodes. Used when reverting from hierarchical layout + this.body.emitter.on('refreshNodes', this.refresh.bind(this)); + this.body.emitter.on('refresh', this.refresh.bind(this)); + this.body.emitter.on('destroy', function () { + util.forEach(_this2.nodesListeners, function (callback, event) { + if (_this2.body.data.nodes) _this2.body.data.nodes.off(event, callback); + }); + delete _this2.body.functions.createNode; + delete _this2.nodesListeners.add; + delete _this2.nodesListeners.update; + delete _this2.nodesListeners.remove; + delete _this2.nodesListeners; + }); } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - this.resize(ctx); - return this.width * 0.5; - } - }]); - return CircularImage; - }(_CircleImageBase3['default']); - - exports['default'] = CircularImage; - -/***/ }, -/* 183 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); + key: 'setOptions', + value: function setOptions(options) { + this.nodeOptions = options; + if (options !== undefined) { + Node.parseOptions(this.options, options); - var _createClass3 = _interopRequireDefault(_createClass2); + // update the shape in all nodes + if (options.shape !== undefined) { + for (var nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + this.body.nodes[nodeId].updateShape(); + } + } + } - var _possibleConstructorReturn2 = __webpack_require__(173); + // update the font in all nodes + if (options.font !== undefined) { + Label.parseOptions(this.options.font, options); + for (var _nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId)) { + this.body.nodes[_nodeId].updateLabelModule(); + this.body.nodes[_nodeId].needsRefresh(); + } + } + } - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + // update the shape size in all nodes + if (options.size !== undefined) { + for (var _nodeId2 in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId2)) { + this.body.nodes[_nodeId2].needsRefresh(); + } + } + } - var _inherits2 = __webpack_require__(174); + // update the state of the variables if needed + if (options.hidden !== undefined || options.physics !== undefined) { + this.body.emitter.emit('_dataChanged'); + } + } + } - var _inherits3 = _interopRequireDefault(_inherits2); + /** + * Set a data set with nodes for the network + * @param {Array | DataSet | DataView} nodes The data containing the nodes. + * @private + */ - var _NodeBase2 = __webpack_require__(179); + }, { + key: 'setData', + value: function setData(nodes) { + var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + var oldNodesData = this.body.data.nodes; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + if (nodes instanceof DataSet || nodes instanceof DataView) { + this.body.data.nodes = nodes; + } else if (Array.isArray(nodes)) { + this.body.data.nodes = new DataSet(); + this.body.data.nodes.add(nodes); + } else if (!nodes) { + this.body.data.nodes = new DataSet(); + } else { + throw new TypeError('Array or DataSet expected'); + } - var Database = function (_NodeBase) { - (0, _inherits3['default'])(Database, _NodeBase); + if (oldNodesData) { + // unsubscribe from old dataset + util.forEach(this.nodesListeners, function (callback, event) { + oldNodesData.off(event, callback); + }); + } - function Database(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Database); + // remove drawn nodes + this.body.nodes = {}; - var _this = (0, _possibleConstructorReturn3['default'])(this, (Database.__proto__ || (0, _getPrototypeOf2['default'])(Database)).call(this, options, body, labelModule)); + if (this.body.data.nodes) { + // subscribe to new dataset + var me = this; + util.forEach(this.nodesListeners, function (callback, event) { + me.body.data.nodes.on(event, callback); + }); - _this._setMargins(labelModule); - return _this; - } + // draw all new nodes + var ids = this.body.data.nodes.getIds(); + this.add(ids, true); + } - (0, _createClass3['default'])(Database, [{ - key: 'resize', - value: function resize(ctx, selected, hover) { - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - this.textSize = this.labelModule.getTextSize(ctx, selected, hover); - var size = this.textSize.width + this.margin.right + this.margin.left; - this.width = size; - this.height = size; - this.radius = this.width / 2; + if (doNotEmit === false) { + this.body.emitter.emit("_dataChanged"); } } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.left = x - this.width / 2; - this.top = y - this.height / 2; - var borderWidth = values.borderWidth / this.body.view.scale; - ctx.lineWidth = Math.min(this.width, borderWidth); + /** + * Add nodes + * @param {Number[] | String[]} ids + * @private + */ - ctx.strokeStyle = values.borderColor; + }, { + key: 'add', + value: function add(ids) { + var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - ctx.fillStyle = values.color; - ctx.database(x - this.width / 2, y - this.height / 2, this.width, this.height); + var id = void 0; + var newNodes = []; + for (var i = 0; i < ids.length; i++) { + id = ids[i]; + var properties = this.body.data.nodes.get(id); + var node = this.create(properties); + newNodes.push(node); + this.body.nodes[id] = node; // note: this may replace an existing node + } - // draw shadow if enabled - this.enableShadow(ctx, values); - // draw the background - ctx.fill(); - // disable shadows for other elements. - this.disableShadow(ctx, values); + this.layoutEngine.positionInitially(newNodes); - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); + if (doNotEmit === false) { + this.body.emitter.emit("_dataChanged"); } - ctx.restore(); - - this.updateBoundingBox(x, y, ctx, selected, hover); - this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y, ctx, selected, hover) { - this.resize(ctx, selected, hover); - this.left = x - this.width * 0.5; - this.top = y - this.height * 0.5; + /** + * Update existing nodes, or create them when not yet existing + * @param {Number[] | String[]} ids + * @private + */ - this.boundingBox.left = this.left; - this.boundingBox.top = this.top; - this.boundingBox.bottom = this.top + this.height; - this.boundingBox.right = this.left + this.width; - } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + key: 'update', + value: function update(ids, changedData) { + var nodes = this.body.nodes; + var dataChanged = false; + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var node = nodes[id]; + var data = changedData[i]; + if (node !== undefined) { + // update node + dataChanged = node.setOptions(data); + } else { + dataChanged = true; + // create node + node = this.create(data); + nodes[id] = node; + } + } + if (dataChanged === true) { + this.body.emitter.emit("_dataChanged"); + } else { + this.body.emitter.emit("_dataUpdated"); + } } - }]); - return Database; - }(_NodeBase3['default']); - - exports['default'] = Database; - -/***/ }, -/* 184 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - var _getPrototypeOf = __webpack_require__(170); + /** + * Remove existing nodes. If nodes do not exist, the method will just ignore it. + * @param {Number[] | String[]} ids + * @private + */ - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + }, { + key: 'remove', + value: function remove(ids) { + var nodes = this.body.nodes; - var _classCallCheck2 = __webpack_require__(119); + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + delete nodes[id]; + } - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + this.body.emitter.emit("_dataChanged"); + } - var _createClass2 = __webpack_require__(120); + /** + * create a node + * @param properties + * @param constructorClass + */ - var _createClass3 = _interopRequireDefault(_createClass2); + }, { + key: 'create', + value: function create(properties) { + var constructorClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Node; - var _possibleConstructorReturn2 = __webpack_require__(173); + return new constructorClass(properties, this.body, this.images, this.groups, this.options, this.defaultOptions, this.nodeOptions); + } + }, { + key: 'refresh', + value: function refresh() { + var clearPositions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var nodes = this.body.nodes; + for (var nodeId in nodes) { + var node = undefined; + if (nodes.hasOwnProperty(nodeId)) { + node = nodes[nodeId]; + } + var data = this.body.data.nodes.get(nodeId); + if (node !== undefined && data !== undefined) { + if (clearPositions === true) { + node.setOptions({ x: null, y: null }); + } + node.setOptions({ fixed: false }); + node.setOptions(data); + } + } + } - var _inherits2 = __webpack_require__(174); + /** + * Returns the positions of the nodes. + * @param ids --> optional, can be array of nodeIds, can be string + * @returns {{}} + */ - var _inherits3 = _interopRequireDefault(_inherits2); + }, { + key: 'getPositions', + value: function getPositions(ids) { + var dataArray = {}; + if (ids !== undefined) { + if (Array.isArray(ids) === true) { + for (var i = 0; i < ids.length; i++) { + if (this.body.nodes[ids[i]] !== undefined) { + var node = this.body.nodes[ids[i]]; + dataArray[ids[i]] = { x: Math.round(node.x), y: Math.round(node.y) }; + } + } + } else { + if (this.body.nodes[ids] !== undefined) { + var _node = this.body.nodes[ids]; + dataArray[ids] = { x: Math.round(_node.x), y: Math.round(_node.y) }; + } + } + } else { + for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { + var _node2 = this.body.nodes[this.body.nodeIndices[_i]]; + dataArray[this.body.nodeIndices[_i]] = { x: Math.round(_node2.x), y: Math.round(_node2.y) }; + } + } + return dataArray; + } - var _ShapeBase2 = __webpack_require__(185); + /** + * Load the XY positions of the nodes into the dataset. + */ - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); + }, { + key: 'storePositions', + value: function storePositions() { + // todo: add support for clusters and hierarchical. + var dataArray = []; + var dataset = this.body.data.nodes.getDataSet(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + for (var nodeId in dataset._data) { + if (dataset._data.hasOwnProperty(nodeId)) { + var node = this.body.nodes[nodeId]; + if (dataset._data[nodeId].x != Math.round(node.x) || dataset._data[nodeId].y != Math.round(node.y)) { + dataArray.push({ id: node.id, x: Math.round(node.x), y: Math.round(node.y) }); + } + } + } + dataset.update(dataArray); + } - var Diamond = function (_ShapeBase) { - (0, _inherits3['default'])(Diamond, _ShapeBase); + /** + * get the bounding box of a node. + * @param nodeId + * @returns {j|*} + */ - function Diamond(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Diamond); - return (0, _possibleConstructorReturn3['default'])(this, (Diamond.__proto__ || (0, _getPrototypeOf2['default'])(Diamond)).call(this, options, body, labelModule)); - } + }, { + key: 'getBoundingBox', + value: function getBoundingBox(nodeId) { + if (this.body.nodes[nodeId] !== undefined) { + return this.body.nodes[nodeId].shape.boundingBox; + } + } - (0, _createClass3['default'])(Diamond, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - var values = arguments[3]; + /** + * Get the Ids of nodes connected to this node. + * @param nodeId + * @returns {Array} + */ - this._resizeShape(selected, hover, values); - } }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'diamond', 4, x, y, selected, hover, values); + key: 'getConnectedNodes', + value: function getConnectedNodes(nodeId) { + var nodeList = []; + if (this.body.nodes[nodeId] !== undefined) { + var node = this.body.nodes[nodeId]; + var nodeObj = {}; // used to quickly check if node already exists + for (var i = 0; i < node.edges.length; i++) { + var edge = node.edges[i]; + if (edge.toId == node.id) { + // these are double equals since ids can be numeric or string + if (nodeObj[edge.fromId] === undefined) { + nodeList.push(edge.fromId); + nodeObj[edge.fromId] = true; + } + } else if (edge.fromId == node.id) { + // these are double equals since ids can be numeric or string + if (nodeObj[edge.toId] === undefined) { + nodeList.push(edge.toId); + nodeObj[edge.toId] = true; + } + } + } + } + return nodeList; } + + /** + * Get the ids of the edges connected to this node. + * @param nodeId + * @returns {*} + */ + }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + key: 'getConnectedEdges', + value: function getConnectedEdges(nodeId) { + var edgeList = []; + if (this.body.nodes[nodeId] !== undefined) { + var node = this.body.nodes[nodeId]; + for (var i = 0; i < node.edges.length; i++) { + edgeList.push(node.edges[i].id); + } + } else { + console.log("NodeId provided for getConnectedEdges does not exist. Provided: ", nodeId); + } + return edgeList; + } + + /** + * Move a node. + * @param String nodeId + * @param Number x + * @param Number y + */ + + }, { + key: 'moveNode', + value: function moveNode(nodeId, x, y) { + var _this3 = this; + + if (this.body.nodes[nodeId] !== undefined) { + this.body.nodes[nodeId].x = Number(x); + this.body.nodes[nodeId].y = Number(y); + setTimeout(function () { + _this3.body.emitter.emit("startSimulation"); + }, 0); + } else { + console.log("Node id supplied to moveNode does not exist. Provided: ", nodeId); + } } }]); - return Diamond; - }(_ShapeBase3['default']); + return NodesHandler; + }(); - exports['default'] = Diamond; + exports['default'] = NodesHandler; -/***/ }, -/* 185 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -37066,314 +36040,609 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _typeof2 = __webpack_require__(62); - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + var _typeof3 = _interopRequireDefault(_typeof2); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var util = __webpack_require__(1); - var _inherits2 = __webpack_require__(174); + var Label = __webpack_require__(169)['default']; - var _inherits3 = _interopRequireDefault(_inherits2); + var Box = __webpack_require__(174)['default']; + var Circle = __webpack_require__(185)['default']; + var CircularImage = __webpack_require__(187)['default']; + var Database = __webpack_require__(188)['default']; + var Diamond = __webpack_require__(189)['default']; + var Dot = __webpack_require__(191)['default']; + var Ellipse = __webpack_require__(192)['default']; + var Icon = __webpack_require__(193)['default']; + var Image = __webpack_require__(194)['default']; + var Square = __webpack_require__(195)['default']; + var Star = __webpack_require__(196)['default']; + var Text = __webpack_require__(197)['default']; + var Triangle = __webpack_require__(198)['default']; + var TriangleDown = __webpack_require__(199)['default']; + var Validator = __webpack_require__(144)['default']; - var _NodeBase2 = __webpack_require__(179); + var _require = __webpack_require__(144), + printStyle = _require.printStyle; - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + /** + * @class Node + * A node. A node can be connected to other nodes via one or multiple edges. + * @param {object} options An object containing options for the node. All + * options are optional, except for the id. + * {number} id Id of the node. Required + * {string} label Text label for the node + * {number} x Horizontal position of the node + * {number} y Vertical position of the node + * {string} shape Node shape, available: + * "database", "circle", "ellipse", + * "box", "image", "text", "dot", + * "star", "triangle", "triangleDown", + * "square", "icon" + * {string} image An image url + * {string} title An title text, can be HTML + * {anytype} group A group name or number + * @param {Network.Images} imagelist A list with images. Only needed + * when the node has an image + * @param {Network.Groups} grouplist A list with groups. Needed for + * retrieving group options + * @param {Object} constants An object with default values for + * example for the color + * + */ - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var ShapeBase = function (_NodeBase) { - (0, _inherits3['default'])(ShapeBase, _NodeBase); + var Node = function () { + function Node(options, body, imagelist, grouplist, globalOptions, defaultOptions, nodeOptions) { + (0, _classCallCheck3['default'])(this, Node); - function ShapeBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, ShapeBase); - return (0, _possibleConstructorReturn3['default'])(this, (ShapeBase.__proto__ || (0, _getPrototypeOf2['default'])(ShapeBase)).call(this, options, body, labelModule)); - } + this.options = util.bridgeObject(globalOptions); + this.globalOptions = globalOptions; + this.defaultOptions = defaultOptions; + this.nodeOptions = nodeOptions; + this.body = body; - (0, _createClass3['default'])(ShapeBase, [{ - key: '_resizeShape', - value: function _resizeShape() { - var selected = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.selected; - var hover = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.hover; - var values = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { size: this.options.size }; + this.edges = []; // all edges connected to this node - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - var size = 2 * values.size; - this.width = size; - this.height = size; - this.radius = 0.5 * this.width; - } - } - }, { - key: '_drawShape', - value: function _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) { - this._resizeShape(selected, hover, values); + // set defaults for the options + this.id = undefined; + this.imagelist = imagelist; + this.grouplist = grouplist; - this.left = x - this.width / 2; - this.top = y - this.height / 2; + // state options + this.x = undefined; + this.y = undefined; + this.baseSize = this.options.size; + this.baseFontSize = this.options.font.size; + this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate + this.selected = false; + this.hover = false; - var borderWidth = values.borderWidth / this.body.view.scale; - ctx.lineWidth = Math.min(this.width, borderWidth); + this.labelModule = new Label(this.body, this.options, false /* Not edge label */); + this.setOptions(options); + } - ctx.strokeStyle = values.borderColor; - ctx.fillStyle = values.color; - ctx[shape](x, y, values.size); + /** + * Attach a edge to the node + * @param {Edge} edge + */ - // draw shadow if enabled - this.enableShadow(ctx, values); - // draw the background - ctx.fill(); - // disable shadows for other elements. - this.disableShadow(ctx, values); - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); + (0, _createClass3['default'])(Node, [{ + key: 'attachEdge', + value: function attachEdge(edge) { + if (this.edges.indexOf(edge) === -1) { + this.edges.push(edge); } - ctx.restore(); + } - if (this.options.label !== undefined) { - var yLabel = y + 0.5 * this.height + 3; // the + 3 is to offset it a bit below the node. - this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging'); - } + /** + * Detach a edge from the node + * @param {Edge} edge + */ - this.updateBoundingBox(x, y); - } }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y) { - this.boundingBox.top = y - this.options.size; - this.boundingBox.left = x - this.options.size; - this.boundingBox.right = x + this.options.size; - this.boundingBox.bottom = y + this.options.size; - - if (this.options.label !== undefined && this.labelModule.size.width > 0) { - this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left); - this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width); - this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + 3); + key: 'detachEdge', + value: function detachEdge(edge) { + var index = this.edges.indexOf(edge); + if (index != -1) { + this.edges.splice(index, 1); } } - }]); - return ShapeBase; - }(_NodeBase3['default']); - exports['default'] = ShapeBase; + /** + * Set or overwrite options for the node + * @param {Object} options an object with options + * @param {Object} constants and object with default, global options + */ -/***/ }, -/* 186 */ -/***/ function(module, exports, __webpack_require__) { + }, { + key: 'setOptions', + value: function setOptions(options) { + var currentShape = this.options.shape; + if (!options) { + return; + } - 'use strict'; + // basic options + if (options.id !== undefined) { + this.id = options.id; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); + if (this.id === undefined) { + throw "Node must have an id"; + } - var _getPrototypeOf = __webpack_require__(170); + // set these options locally + // clear x and y positions + if (options.x !== undefined) { + if (options.x === null) { + this.x = undefined;this.predefinedPosition = false; + } else { + this.x = parseInt(options.x);this.predefinedPosition = true; + } + } + if (options.y !== undefined) { + if (options.y === null) { + this.y = undefined;this.predefinedPosition = false; + } else { + this.y = parseInt(options.y);this.predefinedPosition = true; + } + } + if (options.size !== undefined) { + this.baseSize = options.size; + } + if (options.value !== undefined) { + options.value = parseFloat(options.value); + } - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + // copy group options + if (typeof options.group === 'number' || typeof options.group === 'string' && options.group != '') { + var groupObj = this.grouplist.get(options.group); + util.deepExtend(this.options, groupObj); + // the color object needs to be completely defined. Since groups can partially overwrite the colors, we parse it again, just in case. + this.options.color = util.parseColor(this.options.color); + } - var _classCallCheck2 = __webpack_require__(119); + // this transforms all shorthands into fully defined options + Node.parseOptions(this.options, options, true, this.globalOptions); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + this.choosify(options); - var _createClass2 = __webpack_require__(120); + this._load_images(); + this.updateLabelModule(options); + this.updateShape(currentShape); + this.labelModule.propagateFonts(this.nodeOptions, options, this.defaultOptions); - var _createClass3 = _interopRequireDefault(_createClass2); + if (options.hidden !== undefined || options.physics !== undefined) { + return true; + } + return false; + } - var _possibleConstructorReturn2 = __webpack_require__(173); + /** + * Load the images from the options, for the nodes that need them. + * + * TODO: The imageObj members should be moved to CircularImageBase. + * It's the only place where they are required. + * + * @private + */ - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + }, { + key: '_load_images', + value: function _load_images() { + // Don't bother loading for nodes without images + if (this.options.shape !== 'circularImage' && this.options.shape !== 'image') { + return; + } - var _inherits2 = __webpack_require__(174); + if (this.options.image === undefined) { + throw "Option image must be defined for node type '" + this.options.shape + "'"; + } - var _inherits3 = _interopRequireDefault(_inherits2); + if (this.imagelist === undefined) { + throw "Internal Error: No images provided"; + } - var _ShapeBase2 = __webpack_require__(185); + if (typeof this.options.image === 'string') { + this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage, this.id); + } else { + if (this.options.image.unselected === undefined) { + throw "No unselected image provided"; + } - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); + this.imageObj = this.imagelist.load(this.options.image.unselected, this.options.brokenImage, this.id); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + if (this.options.image.selected !== undefined) { + this.imageObjAlt = this.imagelist.load(this.options.image.selected, this.options.brokenImage, this.id); + } else { + this.imageObjAlt = undefined; + } + } + } - var Dot = function (_ShapeBase) { - (0, _inherits3['default'])(Dot, _ShapeBase); + /** + * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined. + * Static so it can also be used by the handler. + * @param parentOptions + * @param newOptions + * @param allowDeletion + * @param globalOptions + */ - function Dot(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Dot); - return (0, _possibleConstructorReturn3['default'])(this, (Dot.__proto__ || (0, _getPrototypeOf2['default'])(Dot)).call(this, options, body, labelModule)); - } + }, { + key: 'choosify', + value: function choosify(options) { + this.chooser = true; - (0, _createClass3['default'])(Dot, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - var values = arguments[3]; + var pile = [options, this.options, this.defaultOptions]; - this._resizeShape(selected, hover, values); + var chosen = util.topMost(pile, 'chosen'); + if (typeof chosen === 'boolean') { + this.chooser = chosen; + } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { + var chosenNode = util.topMost(pile, ['chosen', 'node']); + if (typeof chosenNode === 'boolean' || typeof chosenNode === 'function') { + this.chooser = chosenNode; + } + } } }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'circle', 2, x, y, selected, hover, values); + key: 'getFormattingValues', + value: function getFormattingValues() { + var values = { + color: this.options.color.background, + borderWidth: this.options.borderWidth, + borderColor: this.options.color.border, + size: this.options.size, + borderDashes: this.options.shapeProperties.borderDashes, + borderRadius: this.options.shapeProperties.borderRadius, + shadow: this.options.shadow.enabled, + shadowColor: this.options.shadow.color, + shadowSize: this.options.shadow.size, + shadowX: this.options.shadow.x, + shadowY: this.options.shadow.y + }; + if (this.selected || this.hover) { + if (this.chooser === true) { + if (this.selected) { + values.borderWidth *= 2; + values.color = this.options.color.highlight.background; + values.borderColor = this.options.color.highlight.border; + values.shadow = this.options.shadow.enabled; + } else if (this.hover) { + values.color = this.options.color.hover.background; + values.borderColor = this.options.color.hover.border; + values.shadow = this.options.shadow.enabled; + } + } else if (typeof this.chooser === 'function') { + this.chooser(values, this.options.id, this.selected, this.hover); + if (values.shadow === false) { + if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) { + values.shadow = true; + } + } + } + } else { + values.shadow = this.options.shadow.enabled; + } + return values; } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - this.resize(ctx); - return this.options.size; + key: 'updateLabelModule', + value: function updateLabelModule(options) { + if (this.options.label === undefined || this.options.label === null) { + this.options.label = ''; + } + this.labelModule.setOptions(this.options, true); + if (this.labelModule.baseSize !== undefined) { + this.baseFontSize = this.labelModule.baseSize; + } + this.labelModule.constrain(this.nodeOptions, options, this.defaultOptions); + this.labelModule.choosify(this.nodeOptions, options, this.defaultOptions); + } + }, { + key: 'updateShape', + value: function updateShape(currentShape) { + if (currentShape === this.options.shape && this.shape) { + this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt); + } else { + // choose draw method depending on the shape + switch (this.options.shape) { + case 'box': + this.shape = new Box(this.options, this.body, this.labelModule); + break; + case 'circle': + this.shape = new Circle(this.options, this.body, this.labelModule); + break; + case 'circularImage': + this.shape = new CircularImage(this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt); + break; + case 'database': + this.shape = new Database(this.options, this.body, this.labelModule); + break; + case 'diamond': + this.shape = new Diamond(this.options, this.body, this.labelModule); + break; + case 'dot': + this.shape = new Dot(this.options, this.body, this.labelModule); + break; + case 'ellipse': + this.shape = new Ellipse(this.options, this.body, this.labelModule); + break; + case 'icon': + this.shape = new Icon(this.options, this.body, this.labelModule); + break; + case 'image': + this.shape = new Image(this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt); + break; + case 'square': + this.shape = new Square(this.options, this.body, this.labelModule); + break; + case 'star': + this.shape = new Star(this.options, this.body, this.labelModule); + break; + case 'text': + this.shape = new Text(this.options, this.body, this.labelModule); + break; + case 'triangle': + this.shape = new Triangle(this.options, this.body, this.labelModule); + break; + case 'triangleDown': + this.shape = new TriangleDown(this.options, this.body, this.labelModule); + break; + default: + this.shape = new Ellipse(this.options, this.body, this.labelModule); + break; + } + } + this.needsRefresh(); } - }]); - return Dot; - }(_ShapeBase3['default']); - - exports['default'] = Dot; - -/***/ }, -/* 187 */ -/***/ function(module, exports, __webpack_require__) { - 'use strict'; + /** + * select this node + */ - Object.defineProperty(exports, "__esModule", { - value: true - }); + }, { + key: 'select', + value: function select() { + this.selected = true; + this.needsRefresh(); + } - var _getPrototypeOf = __webpack_require__(170); + /** + * unselect this node + */ - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + }, { + key: 'unselect', + value: function unselect() { + this.selected = false; + this.needsRefresh(); + } - var _classCallCheck2 = __webpack_require__(119); + /** + * Reset the calculated size of the node, forces it to recalculate its size + */ - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + }, { + key: 'needsRefresh', + value: function needsRefresh() { + this.shape.refreshNeeded = true; + } - var _createClass2 = __webpack_require__(120); + /** + * get the title of this node. + * @return {string} title The title of the node, or undefined when no title + * has been set. + */ - var _createClass3 = _interopRequireDefault(_createClass2); + }, { + key: 'getTitle', + value: function getTitle() { + return this.options.title; + } - var _possibleConstructorReturn2 = __webpack_require__(173); + /** + * Calculate the distance to the border of the Node + * @param {CanvasRenderingContext2D} ctx + * @param {Number} angle Angle in radians + * @returns {number} distance Distance to the border in pixels + */ - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + }, { + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this.shape.distanceToBorder(ctx, angle); + } - var _inherits2 = __webpack_require__(174); + /** + * Check if this node has a fixed x and y position + * @return {boolean} true if fixed, false if not + */ - var _inherits3 = _interopRequireDefault(_inherits2); + }, { + key: 'isFixed', + value: function isFixed() { + return this.options.fixed.x && this.options.fixed.y; + } - var _NodeBase2 = __webpack_require__(179); + /** + * check if this node is selecte + * @return {boolean} selected True if node is selected, else false + */ - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + }, { + key: 'isSelected', + value: function isSelected() { + return this.selected; + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + /** + * Retrieve the value of the node. Can be undefined + * @return {Number} value + */ - var Ellipse = function (_NodeBase) { - (0, _inherits3['default'])(Ellipse, _NodeBase); - - function Ellipse(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Ellipse); - return (0, _possibleConstructorReturn3['default'])(this, (Ellipse.__proto__ || (0, _getPrototypeOf2['default'])(Ellipse)).call(this, options, body, labelModule)); - } - - (0, _createClass3['default'])(Ellipse, [{ - key: 'resize', - value: function resize(ctx) { - var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; - var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; + }, { + key: 'getValue', + value: function getValue() { + return this.options.value; + } - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - var textSize = this.labelModule.getTextSize(ctx, selected, hover); + /** + * Adjust the value range of the node. The node will adjust it's size + * based on its value. + * @param {Number} min + * @param {Number} max + */ - this.height = textSize.height * 2; - this.width = textSize.width + this.height; - this.radius = 0.5 * this.width; + }, { + key: 'setValueRange', + value: function setValueRange(min, max, total) { + if (this.options.value !== undefined) { + var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value); + var sizeDiff = this.options.scaling.max - this.options.scaling.min; + if (this.options.scaling.label.enabled === true) { + var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min; + this.options.font.size = this.options.scaling.label.min + scale * fontDiff; + } + this.options.size = this.options.scaling.min + scale * sizeDiff; + } else { + this.options.size = this.baseSize; + this.options.font.size = this.baseFontSize; } + + this.updateLabelModule(); } + + /** + * Draw this node in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + */ + }, { key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.left = x - this.width * 0.5; - this.top = y - this.height * 0.5; + value: function draw(ctx) { + var values = this.getFormattingValues(); + this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values); + } - var borderWidth = values.borderWidth / this.body.view.scale; - ctx.lineWidth = Math.min(this.width, borderWidth); + /** + * Update the bounding box of the shape + */ - ctx.strokeStyle = values.borderColor; + }, { + key: 'updateBoundingBox', + value: function updateBoundingBox(ctx) { + this.shape.updateBoundingBox(this.x, this.y, ctx); + } - ctx.fillStyle = values.color; - ctx.ellipse(this.left, this.top, this.width, this.height); + /** + * Recalculate the size of this node in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + */ - // draw shadow if enabled - this.enableShadow(ctx, values); - // draw the background - ctx.fill(); - // disable shadows for other elements. - this.disableShadow(ctx, values); + }, { + key: 'resize', + value: function resize(ctx) { + var values = this.getFormattingValues(); + this.shape.resize(ctx, this.selected, this.hover, values); + } - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); + /** + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top, right, bottom + * @return {boolean} True if location is located on node + */ - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); - } + }, { + key: 'isOverlappingWith', + value: function isOverlappingWith(obj) { + return this.shape.left < obj.right && this.shape.left + this.shape.width > obj.left && this.shape.top < obj.bottom && this.shape.top + this.shape.height > obj.top; + } - ctx.restore(); + /** + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top, right, bottom + * @return {boolean} True if location is located on node + */ - this.updateBoundingBox(x, y, ctx, selected, hover); - this.labelModule.draw(ctx, x, y, selected, hover); - } }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y, ctx, selected, hover) { - this.resize(ctx, selected, hover); // just in case + key: 'isBoundingBoxOverlappingWith', + 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: 'parseOptions', + value: function parseOptions(parentOptions, newOptions) { + var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - this.left = x - this.width * 0.5; - this.top = y - this.height * 0.5; + var fields = ['color', 'font', 'fixed', 'shadow']; + util.selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion); - this.boundingBox.left = this.left; - this.boundingBox.top = this.top; - this.boundingBox.bottom = this.top + this.height; - this.boundingBox.right = this.left + this.width; - } - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - this.resize(ctx); - var a = this.width * 0.5; - var b = this.height * 0.5; - var w = Math.sin(angle) * a; - var h = Math.cos(angle) * b; - return a * b / Math.sqrt(w * w + h * h); + // merge the shadow options into the parent. + util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions); + + // individual shape newOptions + if (newOptions.color !== undefined && newOptions.color !== null) { + var parsedColor = util.parseColor(newOptions.color); + util.fillIfDefined(parentOptions.color, parsedColor); + } else if (allowDeletion === true && newOptions.color === null) { + parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options + } + + // handle the fixed options + if (newOptions.fixed !== undefined && newOptions.fixed !== null) { + if (typeof newOptions.fixed === 'boolean') { + parentOptions.fixed.x = newOptions.fixed; + parentOptions.fixed.y = newOptions.fixed; + } else { + if (newOptions.fixed.x !== undefined && typeof newOptions.fixed.x === 'boolean') { + parentOptions.fixed.x = newOptions.fixed.x; + } + if (newOptions.fixed.y !== undefined && typeof newOptions.fixed.y === 'boolean') { + parentOptions.fixed.y = newOptions.fixed.y; + } + } + } + + // handle the font options + if (newOptions.font !== undefined && newOptions.font !== null) { + Label.parseOptions(parentOptions.font, newOptions); + } else if (allowDeletion === true && newOptions.font === null) { + parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options + } + + // handle the scaling options, specifically the label part + if (newOptions.scaling !== undefined) { + util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling); + } } }]); - return Ellipse; - }(_NodeBase3['default']); + return Node; + }(); - exports['default'] = Ellipse; + exports['default'] = Node; -/***/ }, -/* 188 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -37381,1073 +36650,1126 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); + var _slicedToArray2 = __webpack_require__(170); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - var _createClass2 = __webpack_require__(120); + var _getIterator2 = __webpack_require__(2); - var _createClass3 = _interopRequireDefault(_createClass2); + var _getIterator3 = _interopRequireDefault(_getIterator2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _typeof2 = __webpack_require__(62); - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var _typeof3 = _interopRequireDefault(_typeof2); - var _inherits2 = __webpack_require__(174); + var _classCallCheck2 = __webpack_require__(134); - var _inherits3 = _interopRequireDefault(_inherits2); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _NodeBase2 = __webpack_require__(179); + var _createClass2 = __webpack_require__(135); - var _NodeBase3 = _interopRequireDefault(_NodeBase2); + var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var Icon = function (_NodeBase) { - (0, _inherits3['default'])(Icon, _NodeBase); + var util = __webpack_require__(1); - function Icon(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Icon); + var Label = function () { + function Label(body, options) { + var edgelabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + (0, _classCallCheck3['default'])(this, Label); - var _this = (0, _possibleConstructorReturn3['default'])(this, (Icon.__proto__ || (0, _getPrototypeOf2['default'])(Icon)).call(this, options, body, labelModule)); + this.body = body; - _this._setMargins(labelModule); - return _this; + 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 + this.isEdgeLabel = edgelabel; } - (0, _createClass3['default'])(Icon, [{ - key: 'resize', - value: function resize(ctx, selected, hover) { - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - this.iconSize = { - width: Number(this.options.icon.size), - height: Number(this.options.icon.size) - }; - this.width = this.iconSize.width + this.margin.right + this.margin.left; - this.height = this.iconSize.height + this.margin.top + this.margin.bottom; - this.radius = 0.5 * this.width; + (0, _createClass3['default'])(Label, [{ + key: 'setOptions', + value: function setOptions(options) { + var allowDeletion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + this.elementOptions = 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.fontOptions, options, allowDeletion); + if (typeof options.font === 'string') { + this.baseSize = this.fontOptions.size; + } else if ((0, _typeof3['default'])(options.font) === 'object') { + if (options.font.size !== undefined) { + this.baseSize = options.font.size; + } + } } } }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.options.icon.size = this.options.icon.size || 50; + key: 'constrain', - this.left = x - this.width / 2; - this.top = y - this.height / 2; - this._icon(ctx, x, y, selected, hover, values); - if (this.options.label !== undefined) { - var iconTextSpacing = 5; - this.labelModule.draw(ctx, this.left + this.iconSize.width / 2 + this.margin.left, y + this.height / 2 + iconTextSpacing, selected); + // set the width and height constraints based on 'nearest' value + value: function constrain(elementOptions, options, defaultOptions) { + this.fontOptions.constrainWidth = false; + this.fontOptions.maxWdt = -1; + this.fontOptions.minWdt = -1; + + var pile = [options, elementOptions, defaultOptions]; + + var widthConstraint = util.topMost(pile, 'widthConstraint'); + if (typeof widthConstraint === 'number') { + this.fontOptions.maxWdt = Number(widthConstraint); + this.fontOptions.minWdt = Number(widthConstraint); + } else if ((typeof widthConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(widthConstraint)) === 'object') { + var widthConstraintMaximum = util.topMost(pile, ['widthConstraint', 'maximum']); + if (typeof widthConstraintMaximum === 'number') { + this.fontOptions.maxWdt = Number(widthConstraintMaximum); + } + var widthConstraintMinimum = util.topMost(pile, ['widthConstraint', 'minimum']); + if (typeof widthConstraintMinimum === 'number') { + this.fontOptions.minWdt = Number(widthConstraintMinimum); + } } - this.updateBoundingBox(x, y); - } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y) { - this.boundingBox.top = y - this.options.icon.size * 0.5; - this.boundingBox.left = x - this.options.icon.size * 0.5; - this.boundingBox.right = x + this.options.icon.size * 0.5; - this.boundingBox.bottom = y + this.options.icon.size * 0.5; + this.fontOptions.constrainHeight = false; + this.fontOptions.minHgt = -1; + this.fontOptions.valign = 'middle'; - if (this.options.label !== undefined && this.labelModule.size.width > 0) { - var iconTextSpacing = 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 + iconTextSpacing); + var heightConstraint = util.topMost(pile, 'heightConstraint'); + if (typeof heightConstraint === 'number') { + this.fontOptions.minHgt = Number(heightConstraint); + } else if ((typeof heightConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(heightConstraint)) === 'object') { + var heightConstraintMinimum = util.topMost(pile, ['heightConstraint', 'minimum']); + if (typeof heightConstraintMinimum === 'number') { + this.fontOptions.minHgt = Number(heightConstraintMinimum); + } + var heightConstraintValign = util.topMost(pile, ['heightConstraint', 'valign']); + if (typeof heightConstraintValign === 'string') { + if (heightConstraintValign === 'top' || heightConstraintValign === 'bottom') { + this.fontOptions.valign = heightConstraintValign; + } + } } } - }, { - key: '_icon', - value: function _icon(ctx, x, y, selected, hover, values) { - var iconSize = Number(this.options.icon.size); - if (this.options.icon.code !== undefined) { - ctx.font = (selected ? "bold " : "") + iconSize + "px " + this.options.icon.face; + // set the selected functions based on 'nearest' value - // draw icon - ctx.fillStyle = this.options.icon.color || "black"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; + }, { + key: 'choosify', + value: function choosify(elementOptions, options, defaultOptions) { + this.fontOptions.chooser = true; - // draw shadow if enabled - this.enableShadow(ctx, values); - ctx.fillText(this.options.icon.code, x, y); + var pile = [options, elementOptions, defaultOptions]; - // disable shadows for other elements. - this.disableShadow(ctx, values); - } else { - 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.'); + var chosen = util.topMost(pile, 'chosen'); + if (typeof chosen === 'boolean') { + this.fontOptions.chooser = chosen; + } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { + var chosenLabel = util.topMost(pile, ['chosen', 'label']); + if (typeof chosenLabel === 'boolean' || typeof chosenLabel === 'function') { + this.fontOptions.chooser = chosenLabel; + } } } + + // When margins are set in an element, adjust sizes is called to remove them + // from the width/height constraints. This must be done prior to label sizing. + }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + key: 'adjustSizes', + value: function adjustSizes(margins) { + var widthBias = margins ? margins.right + margins.left : 0; + if (this.fontOptions.constrainWidth) { + this.fontOptions.maxWdt -= widthBias; + this.fontOptions.minWdt -= widthBias; + } + var heightBias = margins ? margins.top + margins.bottom : 0; + if (this.fontOptions.constrainHeight) { + this.fontOptions.minHgt -= heightBias; + } } - }]); - return Icon; - }(_NodeBase3['default']); - exports['default'] = Icon; + /** + * Collapse the font options for the multi-font to single objects, from + * the chain of option objects passed. + * + * If an option for a specific multi-font is not present, the parent + * option is checked for the given option. + * + * NOTE: naming of 'groupOptions' is a misnomer; the actual value passed + * is the new values to set from setOptions(). + */ -/***/ }, -/* 189 */ -/***/ function(module, exports, __webpack_require__) { + }, { + key: 'propagateFonts', + value: function propagateFonts(options, groupOptions, defaultOptions) { + if (!this.fontOptions.multi) return; - 'use strict'; + /** + * Resolve the font options path. + * If valid, return a reference to the object in question. + * Otherwise, just return null. + * + * param 'mod' is optional. + * + * options {Object} base object to determine path from + * mod {string|undefined} if present, sub path for the mod-font + */ + var pathP = function pathP(options, mod) { + if (!options || !options.font) return null; - Object.defineProperty(exports, "__esModule", { - value: true - }); + var opt = options.font; - var _getPrototypeOf = __webpack_require__(170); + if (mod) { + if (!opt[mod]) return null; + opt = opt[mod]; + } - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + return opt; + }; - var _classCallCheck2 = __webpack_require__(119); + /** + * Get property value from options.font[mod][property] if present. + * If mod not passed, use property value from options.font[property]. + * + * @return value if found, null otherwise. + */ + var getP = function getP(options, mod, property) { + var opt = pathP(options, mod); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + if (opt && opt.hasOwnProperty(property)) { + return opt[property]; + } - var _createClass2 = __webpack_require__(120); + return null; + }; - var _createClass3 = _interopRequireDefault(_createClass2); + var mods = ['bold', 'ital', 'boldital', 'mono']; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - var _possibleConstructorReturn2 = __webpack_require__(173); + try { + for (var _iterator = (0, _getIterator3['default'])(mods), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var mod = _step.value; - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var modOptions = this.fontOptions[mod]; + var modDefaults = defaultOptions.font[mod]; - var _inherits2 = __webpack_require__(174); + if (Label.parseFontString(modOptions, pathP(options, mod))) { + modOptions.vadjust = this.fontOptions.vadjust; + modOptions.mod = modDefaults.mod; + } else { - var _inherits3 = _interopRequireDefault(_inherits2); + // We need to be crafty about loading the modded fonts. We want as + // much 'natural' versatility as we can get, so a simple global + // change propagates in an expected way, even if not stictly logical. - var _CircleImageBase2 = __webpack_require__(181); + // 'face' has a special exception for mono, since we probably + // don't want to sync to the base font face. + modOptions.face = getP(options, mod, 'face') || getP(groupOptions, mod, 'face') || (mod === 'mono' ? modDefaults.face : null) || getP(groupOptions, null, 'face') || this.fontOptions.face; - var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); + // 'color' follows the standard flow + modOptions.color = getP(options, mod, 'color') || getP(groupOptions, mod, 'color') || getP(groupOptions, null, 'color') || this.fontOptions.color; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // 'mode' follows the standard flow + modOptions.mod = getP(options, mod, 'mod') || getP(groupOptions, mod, 'mod') || getP(groupOptions, null, 'mod') || modDefaults.mod; - var Image = function (_CircleImageBase) { - (0, _inherits3['default'])(Image, _CircleImageBase); + // It's important that we size up defaults similarly if we're + // using default faces unless overriden. We want to preserve the + // ratios closely - but if faces have changed, all bets are off. + var ratio = void 0; - function Image(options, body, labelModule, imageObj, imageObjAlt) { - (0, _classCallCheck3['default'])(this, Image); + // NOTE: Following condition always fails, because modDefaults + // has no explicit font property. This is deliberate, see + // var's 'NodesHandler.defaultOptions.font[mod]'. + // However, I want to keep the original logic while refactoring; + // it appears to be working fine even if ratio is never set. + // TODO: examine if this is a bug, fix if necessary. + // + if (modOptions.face === modDefaults.face && this.fontOptions.face === defaultOptions.font.face) { - var _this = (0, _possibleConstructorReturn3['default'])(this, (Image.__proto__ || (0, _getPrototypeOf2['default'])(Image)).call(this, options, body, labelModule)); + ratio = this.fontOptions.size / Number(defaultOptions.font.size); + } - _this.setImages(imageObj, imageObjAlt); - return _this; - } + modOptions.size = getP(options, mod, 'size') || getP(groupOptions, mod, 'size') || (ratio ? modDefaults.size * ratio : null) || // Scale the mod size using the same ratio + getP(groupOptions, null, 'size') || this.fontOptions.size; - (0, _createClass3['default'])(Image, [{ - key: 'resize', - value: function resize() { - this._resizeImage(); + modOptions.vadjust = getP(options, mod, 'vadjust') || getP(groupOptions, mod, 'vadjust') || (ratio ? modDefaults.vadjust * Math.round(ratio) : null) || // Scale it using the same ratio + this.fontOptions.vadjust; + } + + modOptions.size = Number(modOptions.size); + modOptions.vadjust = Number(modOptions.vadjust); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator['return']) { + _iterator['return'](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } } + + /** + * Main function. This is called from anything that wants to draw a label. + * @param ctx + * @param x + * @param y + * @param selected + * @param baseline + */ + }, { key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - // switch images depending on 'selected' if imageObjAlt exists - if (this.imageObjAlt) { - this.switchImages(selected); - } + value: function draw(ctx, x, y, selected, hover) { + var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; - this.selected = selected; + // if no label, return + if (this.elementOptions.label === undefined) return; - this.resize(); - this.left = x - this.width / 2; - this.top = y - this.height / 2; + // check if we have to render the label + var viewFontSize = this.fontOptions.size * this.body.view.scale; + if (this.elementOptions.label && viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) return; - if (this.options.shapeProperties.useBorderWithImage === true) { - var neutralborderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - var borderWidth = (selected ? selectionLineWidth : neutralborderWidth) / this.body.view.scale; - ctx.lineWidth = Math.min(this.width, borderWidth); + // update the size cache if required + this.calculateLabelSize(ctx, selected, hover, x, y, baseline); - ctx.beginPath(); + // create the fontfill background + this._drawBackground(ctx); + // draw text + this._drawText(ctx, selected, hover, x, y, baseline); + } - // setup the line properties. - ctx.strokeStyle = selected ? this.options.color.highlight.border : hover ? this.options.color.hover.border : this.options.color.border; + /** + * Draws the label background + * @param {CanvasRenderingContext2D} ctx + * @private + */ - // set a fillstyle - ctx.fillStyle = selected ? this.options.color.highlight.background : hover ? this.options.color.hover.background : this.options.color.background; + }, { + key: '_drawBackground', + value: function _drawBackground(ctx) { + if (this.fontOptions.background !== undefined && this.fontOptions.background !== "none") { + ctx.fillStyle = this.fontOptions.background; - // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image - ctx.rect(this.left - 0.5 * ctx.lineWidth, this.top - 0.5 * ctx.lineWidth, this.width + ctx.lineWidth, this.height + ctx.lineWidth); - ctx.fill(); + var lineMargin = 2; - //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. - ctx.save(); - // if borders are zero width, they will be drawn with width 1 by default. This prevents that - if (borderWidth > 0) { - this.enableBorderDashes(ctx, values); - //draw the border - ctx.stroke(); - //disable dashed border for other elements - this.disableBorderDashes(ctx, values); + if (this.isEdgeLabel) { + switch (this.fontOptions.align) { + case 'middle': + ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height); + break; + case 'top': + ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height); + break; + case 'bottom': + ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height); + break; + default: + ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); + break; + } + } else { + ctx.fillRect(this.size.left, this.size.top - 0.5 * lineMargin, this.size.width, this.size.height); } - ctx.restore(); - - ctx.closePath(); } + } - this._drawImageAtPosition(ctx, values); - - this._drawImageLabel(ctx, x, y, selected, hover); - - this.updateBoundingBox(x, y); - } - }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y) { - this.resize(); - this.left = x - this.width / 2; - this.top = y - this.height / 2; - - this.boundingBox.top = this.top; - this.boundingBox.left = this.left; - this.boundingBox.right = this.left + this.width; - this.boundingBox.bottom = this.top + this.height; + /** + * + * @param ctx + * @param x + * @param baseline + * @private + */ - if (this.options.label !== undefined && this.labelModule.size.width > 0) { - this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left); - this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width); - this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset); - } - } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); - } - }]); - return Image; - }(_CircleImageBase3['default']); - - exports['default'] = Image; - -/***/ }, -/* 190 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); + key: '_drawText', + value: function _drawText(ctx, selected, hover, x, y) { + var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; - var _createClass3 = _interopRequireDefault(_createClass2); + 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.elementOptions.scaling.label.maxVisible) { + fontSize = Number(this.elementOptions.scaling.label.maxVisible) / this.body.view.scale; + } - var _possibleConstructorReturn2 = __webpack_require__(173); + var yLine = this.size.yLine; - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + var _setAlignment2 = this._setAlignment(ctx, x, yLine, baseline); - var _inherits2 = __webpack_require__(174); + var _setAlignment3 = (0, _slicedToArray3['default'])(_setAlignment2, 2); - var _inherits3 = _interopRequireDefault(_inherits2); + x = _setAlignment3[0]; + yLine = _setAlignment3[1]; - var _ShapeBase2 = __webpack_require__(185); - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); + ctx.textAlign = 'left'; + x = x - this.size.width / 2; // Shift label 1/2-distance to the left + if (this.fontOptions.valign && this.size.height > this.size.labelHeight) { + if (this.fontOptions.valign === 'top') { + yLine -= (this.size.height - this.size.labelHeight) / 2; + } + if (this.fontOptions.valign === 'bottom') { + yLine += (this.size.height - this.size.labelHeight) / 2; + } + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // draw the text + for (var i = 0; i < this.lineCount; i++) { + if (this.lines[i] && this.lines[i].blocks) { + var width = 0; + if (this.isEdgeLabel || this.fontOptions.align === 'center') { + width += (this.size.width - this.lines[i].width) / 2; + } else if (this.fontOptions.align === 'right') { + width += this.size.width - this.lines[i].width; + } + for (var j = 0; j < this.lines[i].blocks.length; j++) { + var block = this.lines[i].blocks[j]; + ctx.font = block.font; - var Square = function (_ShapeBase) { - (0, _inherits3['default'])(Square, _ShapeBase); + var _getColor2 = this._getColor(block.color, viewFontSize, block.strokeColor), + _getColor3 = (0, _slicedToArray3['default'])(_getColor2, 2), + fontColor = _getColor3[0], + strokeColor = _getColor3[1]; - function Square(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Square); - return (0, _possibleConstructorReturn3['default'])(this, (Square.__proto__ || (0, _getPrototypeOf2['default'])(Square)).call(this, options, body, labelModule)); - } + if (block.strokeWidth > 0) { + ctx.lineWidth = block.strokeWidth; + ctx.strokeStyle = strokeColor; + ctx.lineJoin = 'round'; + } + ctx.fillStyle = fontColor; - (0, _createClass3['default'])(Square, [{ - key: 'resize', - value: function resize() { - this._resizeShape(); - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'square', 2, x, y, selected, hover, values); + if (block.strokeWidth > 0) { + ctx.strokeText(block.text, x + width, yLine + block.vadjust); + } + ctx.fillText(block.text, x + width, yLine + block.vadjust); + width += block.width; + } + yLine += this.lines[i].height; + } + } } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); - } - }]); - return Square; - }(_ShapeBase3['default']); - - exports['default'] = Square; - -/***/ }, -/* 191 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _ShapeBase2 = __webpack_require__(185); - - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var Star = function (_ShapeBase) { - (0, _inherits3['default'])(Star, _ShapeBase); - - function Star(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Star); - return (0, _possibleConstructorReturn3['default'])(this, (Star.__proto__ || (0, _getPrototypeOf2['default'])(Star)).call(this, options, body, labelModule)); - } + key: '_setAlignment', + value: function _setAlignment(ctx, x, yLine, baseline) { + // check for label alignment (for edges) + // TODO: make alignment for nodes + if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) { + x = 0; + yLine = 0; - (0, _createClass3['default'])(Star, [{ - key: 'resize', - value: function resize(ctx, selected, hover, values) { - this._resizeShape(selected, hover, values); - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'star', 4, x, y, selected, hover, values); - } - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + var lineMargin = 2; + 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.fontOptions.align === 'bottom') { + ctx.textBaseline = 'hanging'; + yLine += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers + } else { + ctx.textBaseline = 'middle'; + } + } else { + ctx.textBaseline = baseline; + } + return [x, yLine]; } - }]); - return Star; - }(_ShapeBase3['default']); - - exports['default'] = Star; - -/***/ }, -/* 192 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _possibleConstructorReturn2 = __webpack_require__(173); - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _NodeBase2 = __webpack_require__(179); - - var _NodeBase3 = _interopRequireDefault(_NodeBase2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var Text = function (_NodeBase) { - (0, _inherits3['default'])(Text, _NodeBase); - - function Text(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Text); - - var _this = (0, _possibleConstructorReturn3['default'])(this, (Text.__proto__ || (0, _getPrototypeOf2['default'])(Text)).call(this, options, body, labelModule)); - - _this._setMargins(labelModule); - return _this; - } + /** + * fade in when relative scale is between threshold and threshold - 1. + * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here. + * + * @param viewFontSize + * @returns {*[]} + * @private + */ - (0, _createClass3['default'])(Text, [{ - key: 'resize', - value: function resize(ctx, selected, hover) { - if (this.width === undefined || this.labelModule.differentState(selected, hover)) { - this.textSize = this.labelModule.getTextSize(ctx, selected, hover); - this.width = this.textSize.width + this.margin.right + this.margin.left; - this.height = this.textSize.height + this.margin.top + this.margin.bottom; - this.radius = 0.5 * this.width; + }, { + key: '_getColor', + value: function _getColor(color, viewFontSize, initialStrokeColor) { + var fontColor = color || '#000000'; + var strokeColor = initialStrokeColor || '#ffffff'; + if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) { + var opacity = Math.max(0, Math.min(1, 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize))); + fontColor = util.overrideOpacity(fontColor, opacity); + strokeColor = util.overrideOpacity(strokeColor, opacity); } + return [fontColor, strokeColor]; } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this.resize(ctx, selected, hover); - this.left = x - this.width / 2; - this.top = y - this.height / 2; - - // draw shadow if enabled - this.enableShadow(ctx, values); - this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); - // disable shadows for other elements. - this.disableShadow(ctx, values); + /** + * + * @param ctx + * @param selected + * @returns {{width: number, height: number}} + */ - this.updateBoundingBox(x, y, ctx, selected, hover); - } }, { - key: 'updateBoundingBox', - value: function updateBoundingBox(x, y, ctx, selected, hover) { - this.resize(ctx, selected, hover); - - this.left = x - this.width / 2; - this.top = y - this.height / 2; + key: 'getTextSize', + value: function getTextSize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - this.boundingBox.top = this.top; - this.boundingBox.left = this.left; - this.boundingBox.right = this.left + this.width; - this.boundingBox.bottom = this.top + this.height; - } - }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + this._processLabel(ctx, selected, hover); + return { + width: this.size.width, + height: this.size.height, + lineCount: this.lineCount + }; } - }]); - return Text; - }(_NodeBase3['default']); - - exports['default'] = Text; -/***/ }, -/* 193 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _ShapeBase2 = __webpack_require__(185); - - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); + /** + * + * @param ctx + * @param selected + * @param x + * @param y + * @param baseline + */ - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + }, { + key: 'calculateLabelSize', + value: function calculateLabelSize(ctx, selected, hover) { + var x = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var y = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle'; - var Triangle = function (_ShapeBase) { - (0, _inherits3['default'])(Triangle, _ShapeBase); + if (this.labelDirty === true) { + this._processLabel(ctx, selected, hover); + } + 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.fontOptions.size; + if (baseline === "hanging") { + 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 + } + this.labelDirty = false; + } - function Triangle(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, Triangle); - return (0, _possibleConstructorReturn3['default'])(this, (Triangle.__proto__ || (0, _getPrototypeOf2['default'])(Triangle)).call(this, options, body, labelModule)); - } + /** + * normalize the markup system + */ - (0, _createClass3['default'])(Triangle, [{ - key: 'resize', - value: function resize(ctx) { - this._resizeShape(); - } - }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'triangle', 3, x, y, selected, hover, values); - } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); + key: 'decodeMarkupSystem', + value: function decodeMarkupSystem(markupSystem) { + var system = 'none'; + if (markupSystem === 'markdown' || markupSystem === 'md') { + system = 'markdown'; + } else if (markupSystem === true || markupSystem === 'html') { + system = 'html'; + } + return system; } - }]); - return Triangle; - }(_ShapeBase3['default']); - - exports['default'] = Triangle; - -/***/ }, -/* 194 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _ShapeBase2 = __webpack_require__(185); - - var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var TriangleDown = function (_ShapeBase) { - (0, _inherits3['default'])(TriangleDown, _ShapeBase); - - function TriangleDown(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, TriangleDown); - return (0, _possibleConstructorReturn3['default'])(this, (TriangleDown.__proto__ || (0, _getPrototypeOf2['default'])(TriangleDown)).call(this, options, body, labelModule)); - } + /** + * Explodes a piece of text into single-font blocks using a given markup + * @param text + * @param markupSystem + * @returns [{ text, mod }] + */ - (0, _createClass3['default'])(TriangleDown, [{ - key: 'resize', - value: function resize(ctx) { - this._resizeShape(); - } }, { - key: 'draw', - value: function draw(ctx, x, y, selected, hover, values) { - this._drawShape(ctx, 'triangleDown', 3, x, y, selected, hover, values); + key: 'splitBlocks', + value: function splitBlocks(text, markupSystem) { + var system = this.decodeMarkupSystem(markupSystem); + if (system === 'none') { + return [{ + text: text, + mod: 'normal' + }]; + } else if (system === 'markdown') { + return this.splitMarkdownBlocks(text); + } else if (system === 'html') { + return this.splitHtmlBlocks(text); + } } }, { - key: 'distanceToBorder', - value: function distanceToBorder(ctx, angle) { - return this._distanceToBorder(ctx, angle); - } - }]); - return TriangleDown; - }(_ShapeBase3['default']); - - exports['default'] = TriangleDown; - -/***/ }, -/* 195 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; + key: 'splitMarkdownBlocks', + value: function splitMarkdownBlocks(text) { + var blocks = []; + var s = { + bold: false, + ital: false, + mono: false, + beginable: true, + spacing: false, + position: 0, + buffer: "", + modStack: [] + }; + s.mod = function () { + return this.modStack.length === 0 ? 'normal' : this.modStack[0]; + }; + s.modName = function () { + if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else { + if (s.bold && s.ital) { + return 'boldital'; + } else if (s.bold) { + return 'bold'; + } else if (s.ital) { + return 'ital'; + } + } + }; + s.emitBlock = function () { + var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _Edge = __webpack_require__(196); - - var _Edge2 = _interopRequireDefault(_Edge); - - var _Label = __webpack_require__(164); - - var _Label2 = _interopRequireDefault(_Label); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var util = __webpack_require__(1); - var DataSet = __webpack_require__(89); - var DataView = __webpack_require__(93); - - var EdgesHandler = function () { - function EdgesHandler(body, images, groups) { - var _this = this; - - (0, _classCallCheck3['default'])(this, EdgesHandler); - - this.body = body; - this.images = images; - this.groups = groups; - - // create the edge API in the body container - this.body.functions.createEdge = this.create.bind(this); - - this.edgesListeners = { - add: function add(event, params) { - _this.add(params.items); - }, - update: function update(event, params) { - _this.update(params.items); - }, - remove: function remove(event, params) { - _this.remove(params.items); - } - }; - - this.options = {}; - this.defaultOptions = { - arrows: { - to: { enabled: false, scaleFactor: 1, type: 'arrow' }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1} - middle: { enabled: false, scaleFactor: 1, type: 'arrow' }, - from: { enabled: false, scaleFactor: 1, type: 'arrow' } - }, - arrowStrikethrough: true, - color: { - color: '#848484', - highlight: '#848484', - hover: '#848484', - inherit: 'from', - opacity: 1.0 - }, - dashes: false, - font: { - color: '#343434', - size: 14, // px - face: 'arial', - background: 'none', - strokeWidth: 2, // px - strokeColor: '#ffffff', - align: 'horizontal', - multi: false, - vadjust: 0, - bold: { - mod: 'bold' - }, - boldital: { - mod: 'bold italic' - }, - ital: { - mod: 'italic' - }, - mono: { - mod: '', - size: 15, // px - face: 'courier new', - vadjust: 2 + if (this.spacing) { + this.add(" "); + this.spacing = false; } - }, - hidden: false, - hoverWidth: 1.5, - label: undefined, - labelHighlightBold: true, - length: undefined, - physics: true, - scaling: { - min: 1, - max: 15, - label: { - enabled: true, - min: 14, - max: 30, - maxVisible: 30, - drawThreshold: 5 - }, - customScalingFunction: function customScalingFunction(min, max, total, value) { - if (max === min) { - return 0.5; - } else { - var scale = 1 / (max - min); - return Math.max(0, (value - min) * scale); - } + if (this.buffer.length > 0) { + blocks.push({ text: this.buffer, mod: this.modName() }); + this.buffer = ""; } - }, - selectionWidth: 1.5, - selfReferenceSize: 20, - shadow: { - enabled: false, - color: 'rgba(0,0,0,0.5)', - size: 10, - x: 5, - y: 5 - }, - smooth: { - enabled: true, - type: "dynamic", - forceDirection: 'none', - roundness: 0.5 - }, - title: undefined, - width: 1, - value: undefined - }; - - util.extend(this.options, this.defaultOptions); - - this.bindEventListeners(); - } - - (0, _createClass3['default'])(EdgesHandler, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this2 = this; - - // this allows external modules to force all dynamic curves to turn static. - this.body.emitter.on("_forceDisableDynamicCurves", function (type) { - if (type === 'dynamic') { - type = 'continuous'; + }; + s.add = function (text) { + if (text === " ") { + s.spacing = true; } - var emitChange = false; - for (var edgeId in _this2.body.edges) { - if (_this2.body.edges.hasOwnProperty(edgeId)) { - var edge = _this2.body.edges[edgeId]; - var edgeData = _this2.body.data.edges._data[edgeId]; - - // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined. - // this is because a change in the global would not affect these curves. - if (edgeData !== undefined) { - var edgeOptions = edgeData.smooth; - if (edgeOptions !== undefined) { - if (edgeOptions.enabled === true && edgeOptions.type === 'dynamic') { - if (type === undefined) { - edge.setOptions({ smooth: false }); - } else { - edge.setOptions({ smooth: { type: type } }); - } - emitChange = true; - } - } + if (s.spacing) { + this.buffer += " "; + this.spacing = false; + } + if (text != " ") { + this.buffer += text; + } + }; + while (s.position < text.length) { + var ch = text.charAt(s.position); + if (/[ \t]/.test(ch)) { + if (!s.mono) { + s.spacing = true; + } else { + s.add(ch); + } + s.beginable = true; + } else if (/\\/.test(ch)) { + if (s.position < text.length + 1) { + s.position++; + ch = text.charAt(s.position); + if (/ \t/.test(ch)) { + s.spacing = true; + } else { + s.add(ch); + s.beginable = false; } } + } else if (!s.mono && !s.bold && (s.beginable || s.spacing) && /\*/.test(ch)) { + s.emitBlock(); + s.bold = true; + s.modStack.unshift("bold"); + } else if (!s.mono && !s.ital && (s.beginable || s.spacing) && /\_/.test(ch)) { + s.emitBlock(); + s.ital = true; + s.modStack.unshift("ital"); + } else if (!s.mono && (s.beginable || s.spacing) && /`/.test(ch)) { + s.emitBlock(); + s.mono = true; + s.modStack.unshift("mono"); + } else if (!s.mono && s.mod() === "bold" && /\*/.test(ch)) { + if (s.position === text.length - 1 || /[.,_` \t\n]/.test(text.charAt(s.position + 1))) { + s.emitBlock(); + s.bold = false; + s.modStack.shift(); + } else { + s.add(ch); + } + } else if (!s.mono && s.mod() === "ital" && /\_/.test(ch)) { + if (s.position === text.length - 1 || /[.,*` \t\n]/.test(text.charAt(s.position + 1))) { + s.emitBlock(); + s.ital = false; + s.modStack.shift(); + } else { + s.add(ch); + } + } else if (s.mono && s.mod() === "mono" && /`/.test(ch)) { + if (s.position === text.length - 1 || /[.,*_ \t\n]/.test(text.charAt(s.position + 1))) { + s.emitBlock(); + s.mono = false; + s.modStack.shift(); + } else { + s.add(ch); + } + } else { + s.add(ch); + s.beginable = false; } - if (emitChange === true) { - _this2.body.emitter.emit("_dataChanged"); - } - }); - - // this is called when options of EXISTING nodes or edges have changed. - this.body.emitter.on("_dataUpdated", function () { - _this2.reconnectEdges(); - }); - - // refresh the edges. Used when reverting from hierarchical layout - this.body.emitter.on("refreshEdges", this.refresh.bind(this)); - this.body.emitter.on("refresh", this.refresh.bind(this)); - this.body.emitter.on("destroy", function () { - util.forEach(_this2.edgesListeners, function (callback, event) { - if (_this2.body.data.edges) _this2.body.data.edges.off(event, callback); - }); - delete _this2.body.functions.createEdge; - delete _this2.edgesListeners.add; - delete _this2.edgesListeners.update; - delete _this2.edgesListeners.remove; - delete _this2.edgesListeners; - }); + s.position++; + } + s.emitBlock(); + return blocks; } }, { - key: 'setOptions', - value: function setOptions(options) { - this.edgeOptions = options; - if (options !== undefined) { - // use the parser from the Edge class to fill in all shorthand notations - _Edge2['default'].parseOptions(this.options, options); - - // update smooth settings in all edges - var dataChanged = false; - if (options.smooth !== undefined) { - for (var edgeId in this.body.edges) { - if (this.body.edges.hasOwnProperty(edgeId)) { - dataChanged = this.body.edges[edgeId].updateEdgeType() || dataChanged; - } + key: 'splitHtmlBlocks', + value: function splitHtmlBlocks(text) { + var blocks = []; + var s = { + bold: false, + ital: false, + mono: false, + spacing: false, + position: 0, + buffer: "", + modStack: [] + }; + s.mod = function () { + return this.modStack.length === 0 ? 'normal' : this.modStack[0]; + }; + s.modName = function () { + if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else { + if (s.bold && s.ital) { + return 'boldital'; + } else if (s.bold) { + return 'bold'; + } else if (s.ital) { + return 'ital'; } } + }; + s.emitBlock = function () { + var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - // update fonts in all edges - if (options.font !== undefined) { - // use the parser from the Label class to fill in all shorthand notations - _Label2['default'].parseOptions(this.options.font, options); - for (var _edgeId in this.body.edges) { - if (this.body.edges.hasOwnProperty(_edgeId)) { - this.body.edges[_edgeId].updateLabelModule(); - } - } + if (this.spacing) { + this.add(" "); + this.spacing = false; } - - // update the state of the variables if needed - if (options.hidden !== undefined || options.physics !== undefined || dataChanged === true) { - this.body.emitter.emit('_dataChanged'); + if (this.buffer.length > 0) { + blocks.push({ text: this.buffer, mod: this.modName() }); + this.buffer = ""; + } + }; + s.add = function (text) { + if (text === " ") { + s.spacing = true; + } + if (s.spacing) { + this.buffer += " "; + this.spacing = false; + } + if (text != " ") { + this.buffer += text; + } + }; + while (s.position < text.length) { + var ch = text.charAt(s.position); + if (/[ \t]/.test(ch)) { + if (!s.mono) { + s.spacing = true; + } else { + s.add(ch); + } + } else if (//.test(text.substr(s.position, 3))) { + s.emitBlock(); + s.bold = true; + s.modStack.unshift("bold"); + s.position += 2; + } else if (!s.mono && !s.ital && //.test(text.substr(s.position, 3))) { + s.emitBlock(); + s.ital = true; + s.modStack.unshift("ital"); + s.position += 2; + } else if (!s.mono && //.test(text.substr(s.position, 6))) { + s.emitBlock(); + s.mono = true; + s.modStack.unshift("mono"); + s.position += 5; + } else if (!s.mono && s.mod() === 'bold' && /<\/b>/.test(text.substr(s.position, 4))) { + s.emitBlock(); + s.bold = false; + s.modStack.shift(); + s.position += 3; + } else if (!s.mono && s.mod() === 'ital' && /<\/i>/.test(text.substr(s.position, 4))) { + s.emitBlock(); + s.ital = false; + s.modStack.shift(); + s.position += 3; + } else if (s.mod() === 'mono' && /<\/code>/.test(text.substr(s.position, 7))) { + s.emitBlock(); + s.mono = false; + s.modStack.shift(); + s.position += 6; + } else { + s.add(ch); + } + } else if (/&/.test(ch)) { + if (/</.test(text.substr(s.position, 4))) { + s.add("<"); + s.position += 3; + } else if (/&/.test(text.substr(s.position, 5))) { + s.add("&"); + s.position += 4; + } else { + s.add("&"); + } + } else { + s.add(ch); } + s.position++; } + s.emitBlock(); + return blocks; } - - /** - * Load edges by reading the data table - * @param {Array | DataSet | DataView} edges The data containing the edges. - * @private - * @private - */ - }, { - key: 'setData', - value: function setData(edges) { - var _this3 = this; - - var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + key: 'getFormattingValues', + value: function getFormattingValues(ctx, selected, hover, mod) { + var getValue = function getValue(fontOptions, mod, option) { + if (mod === "normal") { + if (option === 'mod') return ""; + return fontOptions[option]; + } - var oldEdgesData = this.body.data.edges; + if (fontOptions[mod][option]) { + return fontOptions[mod][option]; + } else { + // Take from parent font option + return fontOptions[option]; + } + }; - if (edges instanceof DataSet || edges instanceof DataView) { - this.body.data.edges = edges; - } else if (Array.isArray(edges)) { - this.body.data.edges = new DataSet(); - this.body.data.edges.add(edges); - } else if (!edges) { - this.body.data.edges = new DataSet(); + var values = { + color: getValue(this.fontOptions, mod, 'color'), + size: getValue(this.fontOptions, mod, 'size'), + face: getValue(this.fontOptions, mod, 'face'), + mod: getValue(this.fontOptions, mod, 'mod'), + vadjust: getValue(this.fontOptions, mod, 'vadjust'), + strokeWidth: this.fontOptions.strokeWidth, + strokeColor: this.fontOptions.strokeColor + }; + if (mod === "normal") { + if (selected || hover) { + if (this.fontOptions.chooser === true && this.elementOptions.labelHighlightBold) { + values.mod = 'bold'; + } else if (typeof this.fontOptions.chooser === 'function') { + this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover); + } + } } else { - throw new TypeError('Array or DataSet expected'); - } - - // TODO: is this null or undefined or false? - if (oldEdgesData) { - // unsubscribe from old dataset - util.forEach(this.edgesListeners, function (callback, event) { - oldEdgesData.off(event, callback); - }); - } - - // remove drawn edges - this.body.edges = {}; - - // TODO: is this null or undefined or false? - if (this.body.data.edges) { - // subscribe to new dataset - util.forEach(this.edgesListeners, function (callback, event) { - _this3.body.data.edges.on(event, callback); - }); - - // draw all new nodes - var ids = this.body.data.edges.getIds(); - this.add(ids, true); - } - - if (doNotEmit === false) { - this.body.emitter.emit("_dataChanged"); + if ((selected || hover) && typeof this.fontOptions.chooser === 'function') { + this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover); + } } + ctx.font = (values.mod + " " + values.size + "px " + values.face).replace(/"/g, ""); + values.font = ctx.font; + values.height = values.size; + return values; } - - /** - * Add edges - * @param {Number[] | String[]} ids - * @private - */ - }, { - key: 'add', - value: function add(ids) { - var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var edges = this.body.edges; - var edgesData = this.body.data.edges; - - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - - var oldEdge = edges[id]; - if (oldEdge) { - oldEdge.disconnect(); - } - - var data = edgesData.get(id, { "showInternalIds": true }); - edges[id] = this.create(data); - } - - if (doNotEmit === false) { - this.body.emitter.emit("_dataChanged"); - } + key: 'differentState', + value: function differentState(selected, hover) { + return selected !== this.fontOptions.selectedState && hover !== this.fontOptions.hoverState; } /** - * Update existing edges, or create them when not yet existing - * @param {Number[] | String[]} ids + * This explodes the label string into lines and sets the width, height and number of lines. + * @param ctx + * @param selected * @private */ }, { - key: 'update', - value: function update(ids) { - var edges = this.body.edges; - var edgesData = this.body.data.edges; - var dataChanged = false; - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - var data = edgesData.get(id); - var edge = edges[id]; - if (edge !== undefined) { - // update edge - edge.disconnect(); - dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed. - edge.connect(); + key: '_processLabel', + value: function _processLabel(ctx, selected, hover) { + var width = 0; + var height = 0; + var nlLines = []; + var lines = []; + var k = 0; + lines.add = function (l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) { + if (this.length == l) { + this[l] = { width: 0, height: 0, blocks: [] }; + } + this[l].blocks.push({ text: text, font: font, color: color, width: width, height: height, vadjust: vadjust, mod: mod, strokeWidth: strokeWidth, strokeColor: strokeColor }); + }; + lines.accumulate = function (l, width, height) { + this[l].width += width; + this[l].height = height > this[l].height ? height : this[l].height; + }; + lines.addAndAccumulate = function (l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) { + this.add(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor); + this.accumulate(l, width, height); + }; + if (this.elementOptions.label !== undefined) { + var _nlLines = String(this.elementOptions.label).split('\n'); + var lineCount = _nlLines.length; + if (this.elementOptions.font.multi) { + for (var i = 0; i < lineCount; i++) { + var blocks = this.splitBlocks(_nlLines[i], this.elementOptions.font.multi); + var lineWidth = 0; + var lineHeight = 0; + if (blocks) { + if (blocks.length == 0) { + var values = this.getFormattingValues(ctx, selected, hover, "normal"); + lines.addAndAccumulate(k, "", values.font, values.color, 0, values.size, values.vadjust, "normal", values.strokeWidth, values.strokeColor); + height += lines[k].height; + k++; + continue; + } + for (var j = 0; j < blocks.length; j++) { + if (this.fontOptions.maxWdt > 0) { + var _values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod); + var words = blocks[j].text.split(" "); + var atStart = true; + var text = ""; + var measure = { width: 0 }; + var lastMeasure = void 0; + var w = 0; + while (w < words.length) { + var pre = atStart ? "" : " "; + lastMeasure = measure; + measure = ctx.measureText(text + pre + words[w]); + if (lineWidth + measure.width > this.fontOptions.maxWdt && lastMeasure.width != 0) { + lineHeight = _values.height > lineHeight ? _values.height : lineHeight; + lines.add(k, text, _values.font, _values.color, lastMeasure.width, _values.height, _values.vadjust, blocks[j].mod, _values.strokeWidth, _values.strokeColor); + lines.accumulate(k, lastMeasure.width, lineHeight); + text = ""; + atStart = true; + lineWidth = 0; + width = lines[k].width > width ? lines[k].width : width; + height += lines[k].height; + k++; + } else { + text = text + pre + words[w]; + if (w === words.length - 1) { + lineHeight = _values.height > lineHeight ? _values.height : lineHeight; + lineWidth += measure.width; + lines.add(k, text, _values.font, _values.color, measure.width, _values.height, _values.vadjust, blocks[j].mod, _values.strokeWidth, _values.strokeColor); + lines.accumulate(k, measure.width, lineHeight); + if (j === blocks.length - 1) { + width = lines[k].width > width ? lines[k].width : width; + height += lines[k].height; + k++; + } + } + w++; + atStart = false; + } + } + } else { + var _values2 = this.getFormattingValues(ctx, selected, hover, blocks[j].mod); + var _measure = ctx.measureText(blocks[j].text); + lines.addAndAccumulate(k, blocks[j].text, _values2.font, _values2.color, _measure.width, _values2.height, _values2.vadjust, blocks[j].mod, _values2.strokeWidth, _values2.strokeColor); + width = lines[k].width > width ? lines[k].width : width; + if (blocks.length - 1 === j) { + height += lines[k].height; + k++; + } + } + } + } + } } else { - // create edge - this.body.edges[id] = this.create(data); - dataChanged = true; + for (var _i = 0; _i < lineCount; _i++) { + var _values3 = this.getFormattingValues(ctx, selected, hover, "normal"); + if (this.fontOptions.maxWdt > 0) { + var _words = _nlLines[_i].split(" "); + var _text = ""; + var _measure2 = { width: 0 }; + var _lastMeasure = void 0; + var _w = 0; + while (_w < _words.length) { + var _pre = _text === "" ? "" : " "; + _lastMeasure = _measure2; + _measure2 = ctx.measureText(_text + _pre + _words[_w]); + if (_measure2.width > this.fontOptions.maxWdt && _lastMeasure.width != 0) { + lines.addAndAccumulate(k, _text, _values3.font, _values3.color, _lastMeasure.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); + width = lines[k].width > width ? lines[k].width : width; + height += lines[k].height; + _text = ""; + k++; + } else { + _text = _text + _pre + _words[_w]; + if (_w === _words.length - 1) { + lines.addAndAccumulate(k, _text, _values3.font, _values3.color, _measure2.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); + width = lines[k].width > width ? lines[k].width : width; + height += lines[k].height; + k++; + } + _w++; + } + } + } else { + var _text2 = _nlLines[_i]; + var _measure3 = ctx.measureText(_text2); + lines.addAndAccumulate(k, _text2, _values3.font, _values3.color, _measure3.width, _values3.size, _values3.vadjust, "normal", _values3.strokeWidth, _values3.strokeColor); + width = lines[k].width > width ? lines[k].width : width; + height += lines[k].height; + k++; + } + } } } + if (this.fontOptions.minWdt > 0 && width < this.fontOptions.minWdt) { + width = this.fontOptions.minWdt; + } + this.size.labelHeight = height; + if (this.fontOptions.minHgt > 0 && height < this.fontOptions.minHgt) { + height = this.fontOptions.minHgt; + } + this.lines = lines; + this.lineCount = lines.length; + this.size.width = width; + this.size.height = height; + this.selectedState = selected; + this.hoverState = hover; + } + }], [{ + key: 'parseOptions', + value: function parseOptions(parentOptions, newOptions) { + var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - if (dataChanged === true) { - this.body.emitter.emit("_dataChanged"); - } else { - this.body.emitter.emit("_dataUpdated"); + if (Label.parseFontString(parentOptions, newOptions.font)) { + parentOptions.vadjust = 0; + } else if ((0, _typeof3['default'])(newOptions.font) === 'object') { + util.fillIfDefined(parentOptions, newOptions.font, allowDeletion); } + parentOptions.size = Number(parentOptions.size); + parentOptions.vadjust = Number(parentOptions.vadjust); } /** - * Remove existing edges. Non existing ids will be ignored - * @param {Number[] | String[]} ids - * @private + * If in-variable is a string, parse it as a font specifier. + * + * Note that following is not done here and have to be done after the call: + * - No number conversion (size) + * - Not all font options are set (vadjust, mod) + * + * @param inOptions {Object} font options to parse + * @param outOptions {Object} out-parameter, object in which to store the parse results (if any) + * + * @return true if font parsed as string, false otherwise */ }, { - key: 'remove', - value: function remove(ids) { - var edges = this.body.edges; - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - var edge = edges[id]; - if (edge !== undefined) { - edge.cleanup(); - edge.disconnect(); - delete edges[id]; - } - } + key: 'parseFontString', + value: function parseFontString(outOptions, inOptions) { + if (!inOptions || typeof inOptions !== 'string') return false; - this.body.emitter.emit("_dataChanged"); - } - }, { - key: 'refresh', - value: function refresh() { - var edges = this.body.edges; - for (var edgeId in edges) { - var edge = undefined; - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - } - var data = this.body.data.edges._data[edgeId]; - if (edge !== undefined && data !== undefined) { - edge.setOptions(data); - } - } - } - }, { - key: 'create', - value: function create(properties) { - return new _Edge2['default'](properties, this.body, this.options, this.defaultOptions, this.edgeOptions); + var newOptionsArray = inOptions.split(" "); + + outOptions.size = newOptionsArray[0].replace("px", ''); + outOptions.face = newOptionsArray[1]; + outOptions.color = newOptionsArray[2]; + + return true; } + }]); + return Label; + }(); - /** - * Reconnect all edges - * @private - */ + exports['default'] = Label; - }, { - key: 'reconnectEdges', - value: function reconnectEdges() { - var id; - var nodes = this.body.nodes; - var edges = this.body.edges; +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { - for (id in nodes) { - if (nodes.hasOwnProperty(id)) { - nodes[id].edges = []; - } - } + "use strict"; - for (id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - edge.from = null; - edge.to = null; - edge.connect(); - } + exports.__esModule = true; + + var _isIterable2 = __webpack_require__(171); + + var _isIterable3 = _interopRequireDefault(_isIterable2); + + var _getIterator2 = __webpack_require__(2); + + var _getIterator3 = _interopRequireDefault(_getIterator2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + exports.default = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; } - } - }, { - key: 'getConnectedNodes', - value: function getConnectedNodes(edgeId) { - var nodeList = []; - if (this.body.edges[edgeId] !== undefined) { - var edge = this.body.edges[edgeId]; - if (edge.fromId) { - nodeList.push(edge.fromId); - } - if (edge.toId) { - nodeList.push(edge.toId); - } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; } - return nodeList; } - }]); - return EdgesHandler; + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if ((0, _isIterable3.default)(Object(arr))) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; }(); - exports['default'] = EdgesHandler; +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { -/***/ }, -/* 196 */ -/***/ function(module, exports, __webpack_require__) { + module.exports = { "default": __webpack_require__(172), __esModule: true }; + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(4); + __webpack_require__(50); + module.exports = __webpack_require__(173); + +/***/ }), +/* 173 */ +/***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__(54) + , ITERATOR = __webpack_require__(47)('iterator') + , Iterators = __webpack_require__(8); + module.exports = __webpack_require__(17).isIterable = function(it){ + var O = Object(it); + return O[ITERATOR] !== undefined + || '@@iterator' in O + || Iterators.hasOwnProperty(classof(O)); + }; + +/***/ }), +/* 174 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -38455,704 +37777,410 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _stringify = __webpack_require__(90); + var _getPrototypeOf = __webpack_require__(175); - var _stringify2 = _interopRequireDefault(_stringify); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _create = __webpack_require__(55); + var _classCallCheck2 = __webpack_require__(134); - var _create2 = _interopRequireDefault(_create); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _typeof2 = __webpack_require__(62); + var _createClass2 = __webpack_require__(135); - var _typeof3 = _interopRequireDefault(_typeof2); + var _createClass3 = _interopRequireDefault(_createClass2); - var _classCallCheck2 = __webpack_require__(119); + var _possibleConstructorReturn2 = __webpack_require__(178); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _createClass2 = __webpack_require__(120); + var _inherits2 = __webpack_require__(179); - var _createClass3 = _interopRequireDefault(_createClass2); + var _inherits3 = _interopRequireDefault(_inherits2); - var _Label = __webpack_require__(164); + var _NodeBase2 = __webpack_require__(184); - var _Label2 = _interopRequireDefault(_Label); + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - var _CubicBezierEdge = __webpack_require__(197); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _CubicBezierEdge2 = _interopRequireDefault(_CubicBezierEdge); + var Box = function (_NodeBase) { + (0, _inherits3['default'])(Box, _NodeBase); - var _BezierEdgeDynamic = __webpack_require__(201); + function Box(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Box); - var _BezierEdgeDynamic2 = _interopRequireDefault(_BezierEdgeDynamic); + var _this = (0, _possibleConstructorReturn3['default'])(this, (Box.__proto__ || (0, _getPrototypeOf2['default'])(Box)).call(this, options, body, labelModule)); - var _BezierEdgeStatic = __webpack_require__(202); + _this._setMargins(labelModule); + return _this; + } - var _BezierEdgeStatic2 = _interopRequireDefault(_BezierEdgeStatic); + (0, _createClass3['default'])(Box, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - var _StraightEdge = __webpack_require__(203); + if (this.needsRefresh(selected, hover)) { + this.textSize = this.labelModule.getTextSize(ctx, selected, hover); + this.width = this.textSize.width + this.margin.right + this.margin.left; + this.height = this.textSize.height + this.margin.top + this.margin.bottom; + this.radius = this.width / 2; + } + } + }, { + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - var _StraightEdge2 = _interopRequireDefault(_StraightEdge); + ctx.strokeStyle = values.borderColor; + ctx.lineWidth = values.borderWidth; + ctx.lineWidth /= this.body.view.scale; + ctx.lineWidth = Math.min(this.width, ctx.lineWidth); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + ctx.fillStyle = values.color; - var util = __webpack_require__(1); + ctx.roundRect(this.left, this.top, this.width, this.height, values.borderRadius); - /** - * @class Edge - * - * A edge connects two nodes - * @param {Object} properties Object with options. Must contain - * At least options from and to. - * Available options: from (number), - * to (number), label (string, color (string), - * width (number), style (string), - * length (number), title (string) - * @param {Network} network A Network object, used to find and edge to - * nodes. - * @param {Object} constants An object with default values for - * example for the color - */ - var Edge = function () { - function Edge(options, body, globalOptions, defaultOptions, edgeOptions) { - (0, _classCallCheck3['default'])(this, Edge); + // draw shadow if enabled + this.enableShadow(ctx, values); + // draw the background + ctx.fill(); + // disable shadows for other elements. + this.disableShadow(ctx, values); - if (body === undefined) { - throw "No body provided"; + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (values.borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border + ctx.stroke(); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); + } + ctx.restore(); + + this.updateBoundingBox(x, y, ctx, selected, hover); + this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); } - this.options = util.bridgeObject(globalOptions); - this.globalOptions = globalOptions; - this.defaultOptions = defaultOptions; - this.edgeOptions = edgeOptions; - this.body = body; + }, { + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y, ctx, selected, hover) { + this.resize(ctx, selected, hover); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - // initialize variables - this.id = undefined; - this.fromId = undefined; - this.toId = undefined; - this.selected = false; - this.hover = false; - this.labelDirty = true; + var borderRadius = this.options.shapeProperties.borderRadius; // only effective for box + this.boundingBox.left = this.left - borderRadius; + this.boundingBox.top = this.top - borderRadius; + this.boundingBox.bottom = this.top + this.height + borderRadius; + this.boundingBox.right = this.left + this.width + borderRadius; + } + }, { + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + this.resize(ctx); + var borderWidth = this.options.borderWidth; - this.baseWidth = this.options.width; - this.baseFontSize = this.options.font.size; + return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; + } + }]); + return Box; + }(_NodeBase3['default']); - this.from = undefined; // a node - this.to = undefined; // a node + exports['default'] = Box; - this.edgeType = undefined; +/***/ }), +/* 175 */ +/***/ (function(module, exports, __webpack_require__) { - this.connected = false; + module.exports = { "default": __webpack_require__(176), __esModule: true }; - this.labelModule = new _Label2['default'](this.body, this.options, true /* It's an edge label */); - this.setOptions(options); - } +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Set or overwrite options for the edge - * @param {Object} options an object with options - * @param doNotEmit - */ + __webpack_require__(177); + module.exports = __webpack_require__(17).Object.getPrototypeOf; +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { - (0, _createClass3['default'])(Edge, [{ - key: 'setOptions', - value: function setOptions(options) { - if (!options) { - return; - } + // 19.1.2.9 Object.getPrototypeOf(O) + var toObject = __webpack_require__(49) + , $getPrototypeOf = __webpack_require__(48); - Edge.parseOptions(this.options, options, true, this.globalOptions); + __webpack_require__(61)('getPrototypeOf', function(){ + return function getPrototypeOf(it){ + return $getPrototypeOf(toObject(it)); + }; + }); - if (options.id !== undefined) { - this.id = options.id; - } - if (options.from !== undefined) { - this.fromId = options.from; - } - if (options.to !== undefined) { - this.toId = options.to; - } - if (options.title !== undefined) { - this.title = options.title; - } - if (options.value !== undefined) { - options.value = parseFloat(options.value); - } +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { - this.choosify(options); + "use strict"; - // update label Module - this.updateLabelModule(options); - this.labelModule.propagateFonts(this.edgeOptions, options, this.defaultOptions); + exports.__esModule = true; - var dataChanged = this.updateEdgeType(); + var _typeof2 = __webpack_require__(62); - // if anything has been updates, reset the selection width and the hover width - this._setInteractionWidths(); + var _typeof3 = _interopRequireDefault(_typeof2); - // A node is connected when it has a from and to node that both exist in the network.body.nodes. - this.connect(); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - if (options.hidden !== undefined || options.physics !== undefined) { - dataChanged = true; - } + exports.default = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } - return dataChanged; - } - }, { - key: 'choosify', - value: function choosify(options) { - this.chooser = true; + return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; + }; - var pile = [options, this.options, this.defaultOptions]; +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { - var chosen = util.topMost(pile, 'chosen'); - if (typeof chosen === 'boolean') { - this.chooser = chosen; - } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { - var chosenEdge = util.topMost(pile, ['chosen', 'edge']); - if (typeof chosenEdge === 'boolean' || typeof chosenEdge === 'function') { - this.chooser = chosenEdge; - } - } - } - }, { - key: 'getFormattingValues', - value: function getFormattingValues() { - var toArrow = this.options.arrows.to === true || this.options.arrows.to.enabled === true; - var fromArrow = this.options.arrows.from === true || this.options.arrows.from.enabled === true; - var middleArrow = this.options.arrows.middle === true || this.options.arrows.middle.enabled === true; - var inheritsColor = this.options.color.inherit; - var values = { - toArrow: toArrow, - toArrowScale: this.options.arrows.to.scaleFactor, - toArrowType: this.options.arrows.to.type, - middleArrow: middleArrow, - middleArrowScale: this.options.arrows.middle.scaleFactor, - middleArrowType: this.options.arrows.middle.type, - fromArrow: fromArrow, - fromArrowScale: this.options.arrows.from.scaleFactor, - fromArrowType: this.options.arrows.from.type, - arrowStrikethrough: this.options.arrowStrikethrough, - color: inheritsColor ? undefined : this.options.color.color, - inheritsColor: inheritsColor, - opacity: this.options.color.opacity, - hidden: this.options.hidden, - length: this.options.length, - shadow: this.options.shadow.enabled, - shadowColor: this.options.shadow.color, - shadowSize: this.options.shadow.size, - shadowX: this.options.shadow.x, - shadowY: this.options.shadow.y, - dashes: this.options.dashes, - width: this.options.width - }; - if (this.selected || this.hover) { - if (this.chooser === true) { - if (this.selected) { - var selectedWidth = this.options.selectionWidth; - if (typeof selectedWidth === 'function') { - values.width = selectedWidth(values.width); - } else if (typeof selectedWidth === 'number') { - values.width += selectedWidth; - } - values.width = Math.max(values.width, 0.3 / this.body.view.scale); - values.color = this.options.color.highlight; - values.shadow = this.options.shadow.enabled; - } else if (this.hover) { - var hoverWidth = this.options.hoverWidth; - if (typeof hoverWidth === 'function') { - values.width = hoverWidth(values.width); - } else if (typeof hoverWidth === 'number') { - values.width += hoverWidth; - } - values.width = Math.max(values.width, 0.3 / this.body.view.scale); - values.color = this.options.color.hover; - values.shadow = this.options.shadow.enabled; - } - } else if (typeof this.chooser === 'function') { - this.chooser(values, this.options.id, this.selected, this.hover); - if (values.color !== undefined) { - values.inheritsColor = false; - } - if (values.shadow === false) { - if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) { - values.shadow = true; - } - } - } - } else { - values.shadow = this.options.shadow.enabled; - values.width = Math.max(values.width, 0.3 / this.body.view.scale); - } - return values; - } + "use strict"; - /** - * update the options in the label module - */ + exports.__esModule = true; - }, { - key: 'updateLabelModule', - value: function updateLabelModule(options) { - this.labelModule.setOptions(this.options, true); - if (this.labelModule.baseSize !== undefined) { - this.baseFontSize = this.labelModule.baseSize; - } - this.labelModule.constrain(this.edgeOptions, options, this.defaultOptions); - this.labelModule.choosify(this.edgeOptions, options, this.defaultOptions); - } + var _setPrototypeOf = __webpack_require__(180); - /** - * update the edge type, set the options - * @returns {boolean} - */ + var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf); - }, { - key: 'updateEdgeType', - value: function updateEdgeType() { - var smooth = this.options.smooth; - var dataChanged = false; - var changeInType = true; - if (this.edgeType !== undefined) { - if (this.edgeType instanceof _BezierEdgeDynamic2['default'] && smooth.enabled === true && smooth.type === 'dynamic' || this.edgeType instanceof _CubicBezierEdge2['default'] && smooth.enabled === true && smooth.type === 'cubicBezier' || this.edgeType instanceof _BezierEdgeStatic2['default'] && smooth.enabled === true && smooth.type !== 'dynamic' && smooth.type !== 'cubicBezier' || this.edgeType instanceof _StraightEdge2['default'] && smooth.type.enabled === false) { - changeInType = false; - } - if (changeInType === true) { - dataChanged = this.cleanup(); - } - } - if (changeInType === true) { - if (smooth.enabled === true) { - if (smooth.type === 'dynamic') { - dataChanged = true; - this.edgeType = new _BezierEdgeDynamic2['default'](this.options, this.body, this.labelModule); - } else if (smooth.type === 'cubicBezier') { - this.edgeType = new _CubicBezierEdge2['default'](this.options, this.body, this.labelModule); - } else { - this.edgeType = new _BezierEdgeStatic2['default'](this.options, this.body, this.labelModule); - } - } else { - this.edgeType = new _StraightEdge2['default'](this.options, this.body, this.labelModule); - } - } else { - // if nothing changes, we just set the options. - this.edgeType.setOptions(this.options); - } - return dataChanged; - } + var _create = __webpack_require__(55); - /** - * Connect an edge to its nodes - */ + var _create2 = _interopRequireDefault(_create); - }, { - key: 'connect', - value: function connect() { - this.disconnect(); + var _typeof2 = __webpack_require__(62); - this.from = this.body.nodes[this.fromId] || undefined; - this.to = this.body.nodes[this.toId] || undefined; - this.connected = this.from !== undefined && this.to !== undefined; + var _typeof3 = _interopRequireDefault(_typeof2); - if (this.connected === true) { - this.from.attachEdge(this); - this.to.attachEdge(this); - } else { - if (this.from) { - this.from.detachEdge(this); - } - if (this.to) { - this.to.detachEdge(this); - } - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - this.edgeType.connect(); + exports.default = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass))); + } + + subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true } + }); + if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; + }; - /** - * Disconnect an edge from its nodes - */ +/***/ }), +/* 180 */ +/***/ (function(module, exports, __webpack_require__) { - }, { - key: 'disconnect', - value: function disconnect() { - if (this.from) { - this.from.detachEdge(this); - this.from = undefined; - } - if (this.to) { - this.to.detachEdge(this); - this.to = undefined; - } + module.exports = { "default": __webpack_require__(181), __esModule: true }; - this.connected = false; - } +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * get the title of this edge. - * @return {string} title The title of the edge, or undefined when no title - * has been set. - */ + __webpack_require__(182); + module.exports = __webpack_require__(17).Object.setPrototypeOf; - }, { - key: 'getTitle', - value: function getTitle() { - return this.title; - } +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * check if this node is selecte - * @return {boolean} selected True if node is selected, else false - */ + // 19.1.3.19 Object.setPrototypeOf(O, proto) + var $export = __webpack_require__(15); + $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(183).set}); - }, { - key: 'isSelected', - value: function isSelected() { - return this.selected; - } +/***/ }), +/* 183 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Retrieve the value of the edge. Can be undefined - * @return {Number} value - */ + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + var isObject = __webpack_require__(23) + , anObject = __webpack_require__(22); + var check = function(O, proto){ + anObject(O); + if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); + }; + module.exports = { + set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line + function(test, buggy, set){ + try { + set = __webpack_require__(18)(Function.call, __webpack_require__(78).f(Object.prototype, '__proto__').set, 2); + set(test, []); + buggy = !(test instanceof Array); + } catch(e){ buggy = true; } + return function setPrototypeOf(O, proto){ + check(O, proto); + if(buggy)O.__proto__ = proto; + else set(O, proto); + return O; + }; + }({}, false) : undefined), + check: check + }; - }, { - key: 'getValue', - value: function getValue() { - return this.options.value; - } +/***/ }), +/* 184 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Adjust the value range of the edge. The edge will adjust it's width - * based on its value. - * @param {Number} min - * @param {Number} max - * @param total - */ + 'use strict'; - }, { - key: 'setValueRange', - value: function setValueRange(min, max, total) { - if (this.options.value !== undefined) { - var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value); - var widthDiff = this.options.scaling.max - this.options.scaling.min; - if (this.options.scaling.label.enabled === true) { - var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min; - this.options.font.size = this.options.scaling.label.min + scale * fontDiff; - } - this.options.width = this.options.scaling.min + scale * widthDiff; - } else { - this.options.width = this.baseWidth; - this.options.font.size = this.baseFontSize; - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - this._setInteractionWidths(); - this.updateLabelModule(); - } - }, { - key: '_setInteractionWidths', - value: function _setInteractionWidths() { - if (typeof this.options.hoverWidth === 'function') { - this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width); - } else { - this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width; - } - if (typeof this.options.selectionWidth === 'function') { - this.edgeType.selectionWidth = this.options.selectionWidth(this.options.width); - } else { - this.edgeType.selectionWidth = this.options.selectionWidth + this.options.width; - } - } + var _typeof2 = __webpack_require__(62); - /** - * Redraw a edge - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ + var _typeof3 = _interopRequireDefault(_typeof2); - }, { - key: 'draw', - value: function draw(ctx) { - var values = this.getFormattingValues(); - if (values.hidden) { - return; - } + var _classCallCheck2 = __webpack_require__(134); - // get the via node from the edge type - var viaNode = this.edgeType.getViaNode(); - var arrowData = {}; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // restore edge targets to defaults - this.edgeType.fromPoint = this.edgeType.from; - this.edgeType.toPoint = this.edgeType.to; + var _createClass2 = __webpack_require__(135); - // from and to arrows give a different end point for edges. we set them here - if (values.fromArrow) { - arrowData.from = this.edgeType.getArrowData(ctx, 'from', viaNode, this.selected, this.hover, values); - if (values.arrowStrikethrough === false) this.edgeType.fromPoint = arrowData.from.core; - } - if (values.toArrow) { - arrowData.to = this.edgeType.getArrowData(ctx, 'to', viaNode, this.selected, this.hover, values); - if (values.arrowStrikethrough === false) this.edgeType.toPoint = arrowData.to.core; - } + var _createClass3 = _interopRequireDefault(_createClass2); - // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly. - if (values.middleArrow) { - arrowData.middle = this.edgeType.getArrowData(ctx, 'middle', viaNode, this.selected, this.hover, values); - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // draw everything - this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode); - this.drawArrows(ctx, arrowData, values); - this.drawLabel(ctx, viaNode); + var NodeBase = function () { + function NodeBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, NodeBase); + + this.body = body; + this.labelModule = labelModule; + this.setOptions(options); + this.top = undefined; + this.left = undefined; + this.height = undefined; + this.width = undefined; + this.radius = undefined; + this.margin = undefined; + this.refreshNeeded = true; + this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 }; + } + + (0, _createClass3['default'])(NodeBase, [{ + key: 'setOptions', + value: function setOptions(options) { + this.options = options; } }, { - key: 'drawArrows', - value: function drawArrows(ctx, arrowData, values) { - if (values.fromArrow) { - this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.from); + key: '_setMargins', + value: function _setMargins(labelModule) { + this.margin = {}; + if (this.options.margin) { + if ((0, _typeof3['default'])(this.options.margin) == 'object') { + this.margin.top = this.options.margin.top; + this.margin.right = this.options.margin.right; + this.margin.bottom = this.options.margin.bottom; + this.margin.left = this.options.margin.left; + } else { + this.margin.top = this.options.margin; + this.margin.right = this.options.margin; + this.margin.bottom = this.options.margin; + this.margin.left = this.options.margin; + } } - if (values.middleArrow) { - this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.middle); + labelModule.adjustSizes(this.margin); + } + }, { + key: '_distanceToBorder', + value: function _distanceToBorder(ctx, angle) { + var borderWidth = this.options.borderWidth; + this.resize(ctx); + return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; + } + }, { + key: 'enableShadow', + value: function enableShadow(ctx, values) { + if (values.shadow) { + ctx.shadowColor = values.shadowColor; + ctx.shadowBlur = values.shadowSize; + ctx.shadowOffsetX = values.shadowX; + ctx.shadowOffsetY = values.shadowY; } - if (values.toArrow) { - this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.to); + } + }, { + key: 'disableShadow', + value: function disableShadow(ctx, values) { + if (values.shadow) { + ctx.shadowColor = 'rgba(0,0,0,0)'; + ctx.shadowBlur = 0; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; } } }, { - key: 'drawLabel', - value: function drawLabel(ctx, viaNode) { - if (this.options.label !== undefined) { - // set style - var node1 = this.from; - var node2 = this.to; - var selected = this.from.selected || this.to.selected || this.selected; - if (node1.id != node2.id) { - this.labelModule.pointToSelf = false; - var point = this.edgeType.getPoint(0.5, viaNode); - ctx.save(); - - // if the label has to be rotated: - if (this.options.font.align !== "horizontal") { - this.labelModule.calculateLabelSize(ctx, selected, this.hover, point.x, point.y); - ctx.translate(point.x, this.labelModule.size.yLine); - this._rotateForLabelAlignment(ctx); + key: 'enableBorderDashes', + value: function enableBorderDashes(ctx, values) { + if (values.borderDashes !== false) { + if (ctx.setLineDash !== undefined) { + var dashes = values.borderDashes; + if (dashes === true) { + dashes = [5, 15]; } - - // draw the label - this.labelModule.draw(ctx, point.x, point.y, selected, this.hover); - ctx.restore(); + ctx.setLineDash(dashes); } else { - // Ignore the orientations. - this.labelModule.pointToSelf = true; - var x, y; - var radius = this.options.selfReferenceSize; - if (node1.shape.width > node1.shape.height) { - x = node1.x + node1.shape.width * 0.5; - y = node1.y - radius; - } else { - x = node1.x + radius; - y = node1.y - node1.shape.height * 0.5; - } - point = this._pointOnCircle(x, y, radius, 0.125); - this.labelModule.draw(ctx, point.x, point.y, selected, this.hover); + console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."); + this.options.shapeProperties.borderDashes = false; + values.borderDashes = false; } } } - - /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top - * @return {boolean} True if location is located on the edge - */ - }, { - key: 'isOverlappingWith', - value: function isOverlappingWith(obj) { - if (this.connected) { - var distMax = 10; - var xFrom = this.from.x; - var yFrom = this.from.y; - var xTo = this.to.x; - var yTo = this.to.y; - var xObj = obj.left; - var yObj = obj.top; - - var dist = this.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); - - return dist < distMax; - } else { - return false; + key: 'disableBorderDashes', + value: function disableBorderDashes(ctx, values) { + if (values.borderDashes !== false) { + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([0]); + } else { + console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."); + this.options.shapeProperties.borderDashes = false; + values.borderDashes = false; + } } } /** - * Rotates the canvas so the text is most readable - * @param {CanvasRenderingContext2D} ctx - * @private + * Determine if the shape of a node needs to be recalculated. + * + * @protected */ }, { - key: '_rotateForLabelAlignment', - value: function _rotateForLabelAlignment(ctx) { - var dy = this.from.y - this.to.y; - var dx = this.from.x - this.to.x; - var angleInDegrees = Math.atan2(dy, dx); - - // rotate so label it is readable - if (angleInDegrees < -1 && dx < 0 || angleInDegrees > 0 && dx < 0) { - angleInDegrees = angleInDegrees + Math.PI; + key: 'needsRefresh', + value: function needsRefresh(selected, hover) { + if (this.refreshNeeded === true) { + // This is probably not the best location to reset this member. + // However, in the current logic, it is the most convenient one. + this.refreshNeeded = false; + return true; } - ctx.rotate(angleInDegrees); + return this.width === undefined || this.labelModule.differentState(selected, hover); } + }]); + return NodeBase; + }(); - /** - * Get a point on a circle - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private - */ + exports['default'] = NodeBase; - }, { - key: '_pointOnCircle', - value: function _pointOnCircle(x, y, radius, percentage) { - var angle = percentage * 2 * Math.PI; - return { - x: x + radius * Math.cos(angle), - y: y - radius * Math.sin(angle) - }; - } - }, { - key: 'select', - value: function select() { - this.selected = true; - } - }, { - key: 'unselect', - value: function unselect() { - this.selected = false; - } - - /** - * cleans all required things on delete - * @returns {*} - */ - - }, { - key: 'cleanup', - value: function cleanup() { - return this.edgeType.cleanup(); - } - }], [{ - key: 'parseOptions', - value: function parseOptions(parentOptions, newOptions) { - var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - - var fields = ['arrowStrikethrough', 'id', 'from', 'hidden', 'hoverWidth', 'label', 'labelHighlightBold', 'length', 'line', 'opacity', 'physics', 'scaling', 'selectionWidth', 'selfReferenceSize', 'to', 'title', 'value', 'width']; - - // only deep extend the items in the field array. These do not have shorthand. - util.selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion); - - util.mergeOptions(parentOptions, newOptions, 'smooth', allowDeletion, globalOptions); - util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions); - - if (newOptions.dashes !== undefined && newOptions.dashes !== null) { - parentOptions.dashes = newOptions.dashes; - } else if (allowDeletion === true && newOptions.dashes === null) { - parentOptions.dashes = (0, _create2['default'])(globalOptions.dashes); // this sets the pointer of the option back to the global option. - } - - // set the scaling newOptions - if (newOptions.scaling !== undefined && newOptions.scaling !== null) { - if (newOptions.scaling.min !== undefined) { - parentOptions.scaling.min = newOptions.scaling.min; - } - if (newOptions.scaling.max !== undefined) { - parentOptions.scaling.max = newOptions.scaling.max; - } - util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling); - } else if (allowDeletion === true && newOptions.scaling === null) { - parentOptions.scaling = (0, _create2['default'])(globalOptions.scaling); // this sets the pointer of the option back to the global option. - } - - // handle multiple input cases for arrows - if (newOptions.arrows !== undefined && newOptions.arrows !== null) { - if (typeof newOptions.arrows === 'string') { - var arrows = newOptions.arrows.toLowerCase(); - parentOptions.arrows.to.enabled = arrows.indexOf("to") != -1; - parentOptions.arrows.middle.enabled = arrows.indexOf("middle") != -1; - parentOptions.arrows.from.enabled = arrows.indexOf("from") != -1; - } else if ((0, _typeof3['default'])(newOptions.arrows) === 'object') { - util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to', allowDeletion, globalOptions.arrows); - util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', allowDeletion, globalOptions.arrows); - util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from', allowDeletion, globalOptions.arrows); - } else { - throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:" + (0, _stringify2['default'])(newOptions.arrows)); - } - } else if (allowDeletion === true && newOptions.arrows === null) { - parentOptions.arrows = (0, _create2['default'])(globalOptions.arrows); // this sets the pointer of the option back to the global option. - } - - // handle multiple input cases for color - if (newOptions.color !== undefined && newOptions.color !== null) { - // make a copy of the parent object in case this is referring to the global one (due to object create once, then update) - parentOptions.color = util.deepExtend({}, parentOptions.color, true); - if (util.isString(newOptions.color)) { - parentOptions.color.color = newOptions.color; - parentOptions.color.highlight = newOptions.color; - parentOptions.color.hover = newOptions.color; - parentOptions.color.inherit = false; - } else { - var colorsDefined = false; - if (newOptions.color.color !== undefined) { - parentOptions.color.color = newOptions.color.color;colorsDefined = true; - } - if (newOptions.color.highlight !== undefined) { - parentOptions.color.highlight = newOptions.color.highlight;colorsDefined = true; - } - if (newOptions.color.hover !== undefined) { - parentOptions.color.hover = newOptions.color.hover;colorsDefined = true; - } - if (newOptions.color.inherit !== undefined) { - parentOptions.color.inherit = newOptions.color.inherit; - } - if (newOptions.color.opacity !== undefined) { - parentOptions.color.opacity = Math.min(1, Math.max(0, newOptions.color.opacity)); - } - - if (newOptions.color.inherit === undefined && colorsDefined === true) { - parentOptions.color.inherit = false; - } - } - } else if (allowDeletion === true && newOptions.color === null) { - parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options - } - - // handle the font settings - if (newOptions.font !== undefined && newOptions.font !== null) { - _Label2['default'].parseOptions(parentOptions.font, newOptions); - } else if (allowDeletion === true && newOptions.font === null) { - parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options - } - } - }]); - return Edge; - }(); - - exports['default'] = Edge; - -/***/ }, -/* 197 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -39160,158 +38188,101 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _slicedToArray2 = __webpack_require__(165); - - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _CubicBezierEdgeBase2 = __webpack_require__(198); + var _CircleImageBase2 = __webpack_require__(186); - var _CubicBezierEdgeBase3 = _interopRequireDefault(_CubicBezierEdgeBase2); + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var CubicBezierEdge = function (_CubicBezierEdgeBase) { - (0, _inherits3['default'])(CubicBezierEdge, _CubicBezierEdgeBase); + var Circle = function (_CircleImageBase) { + (0, _inherits3['default'])(Circle, _CircleImageBase); - function CubicBezierEdge(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, CubicBezierEdge); - return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdge.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdge)).call(this, options, body, labelModule)); - } + function Circle(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Circle); - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ + var _this = (0, _possibleConstructorReturn3['default'])(this, (Circle.__proto__ || (0, _getPrototypeOf2['default'])(Circle)).call(this, options, body, labelModule)); + _this._setMargins(labelModule); + return _this; + } - (0, _createClass3['default'])(CubicBezierEdge, [{ - key: '_line', - value: function _line(ctx, values, viaNodes) { - // get the coordinates of the support points. - var via1 = viaNodes[0]; - var via2 = viaNodes[1]; + (0, _createClass3['default'])(Circle, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - // start drawing the line. - ctx.beginPath(); - ctx.moveTo(this.fromPoint.x, this.fromPoint.y); + if (this.needsRefresh(selected, hover)) { + this.textSize = this.labelModule.getTextSize(ctx, selected, hover); + var diameter = Math.max(this.textSize.width + this.margin.right + this.margin.left, this.textSize.height + this.margin.top + this.margin.bottom); + this.options.size = diameter / 2; - // fallback to normal straight edges - if (viaNodes === undefined || via1.x === undefined) { - ctx.lineTo(this.toPoint.x, this.toPoint.y); - } else { - ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.toPoint.x, this.toPoint.y); + this.width = diameter; + this.height = diameter; + this.radius = this.width / 2; } - // draw shadow if enabled - this.enableShadow(ctx, values); - ctx.stroke(); - this.disableShadow(ctx, values); } }, { - key: '_getViaCoordinates', - value: function _getViaCoordinates() { - var dx = this.from.x - this.to.x; - var dy = this.from.y - this.to.y; + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - var x1 = void 0, - y1 = void 0, - x2 = void 0, - y2 = void 0; - var roundness = this.options.smooth.roundness; + this._drawRawCircle(ctx, x, y, values); - // 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; - } + // TODO: values overwritten by updateBoundingBox(); is this bit necessary? + this.boundingBox.top = y - values.size; + this.boundingBox.left = x - values.size; + this.boundingBox.right = x + values.size; + this.boundingBox.bottom = y + values.size; - return [{ x: x1, y: y1 }, { x: x2, y: y2 }]; - } - }, { - key: 'getViaNode', - value: function getViaNode() { - return this._getViaCoordinates(); - } - }, { - key: '_findBorderPosition', - value: function _findBorderPosition(nearNode, ctx) { - return this._findBorderPositionBezier(nearNode, ctx); + this.updateBoundingBox(x, y); + this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, y, selected, hover); } }, { - key: '_getDistanceToEdge', - value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { - var _ref = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._getViaCoordinates(), - _ref2 = (0, _slicedToArray3['default'])(_ref, 2), - via1 = _ref2[0], - via2 = _ref2[1]; - - // x3,y3 is the point - return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2); + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y) { + this.boundingBox.top = y - this.options.size; + this.boundingBox.left = x - this.options.size; + this.boundingBox.right = x + this.options.size; + this.boundingBox.bottom = y + this.options.size; } - - /** - * 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 - */ - }, { - key: 'getPoint', - value: function getPoint(percentage) { - var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates(), - _ref4 = (0, _slicedToArray3['default'])(_ref3, 2), - via1 = _ref4[0], - via2 = _ref4[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.fromPoint.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.toPoint.x; - var y = vec[0] * this.fromPoint.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.toPoint.y; - - return { x: x, y: y }; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + this.resize(ctx); + return this.width * 0.5; } }]); - return CubicBezierEdge; - }(_CubicBezierEdgeBase3['default']); + return Circle; + }(_CircleImageBase3['default']); - exports['default'] = CubicBezierEdge; + exports['default'] = Circle; -/***/ }, -/* 198 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -39319,95 +38290,235 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _BezierEdgeBase2 = __webpack_require__(199); + var _NodeBase2 = __webpack_require__(184); - var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); + var _NodeBase3 = _interopRequireDefault(_NodeBase2); + + var _CachedImage = __webpack_require__(165); + + var _CachedImage2 = _interopRequireDefault(_CachedImage); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var CubicBezierEdgeBase = function (_BezierEdgeBase) { - (0, _inherits3['default'])(CubicBezierEdgeBase, _BezierEdgeBase); + /** + * NOTE: This is a bad base class + * + * Child classes are: + * + * Image - uses *only* image methods + * Circle - uses *only* _drawRawCircle + * CircleImage - uses all + * + * TODO: Refactor, move _drawRawCircle to different module, derive Circle from NodeBase + * Rename this to ImageBase + * Consolidate common code in Image and CircleImage to base class + */ + var CircleImageBase = function (_NodeBase) { + (0, _inherits3['default'])(CircleImageBase, _NodeBase); - function CubicBezierEdgeBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, CubicBezierEdgeBase); - return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdgeBase)).call(this, options, body, labelModule)); + function CircleImageBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, CircleImageBase); + + var _this = (0, _possibleConstructorReturn3['default'])(this, (CircleImageBase.__proto__ || (0, _getPrototypeOf2['default'])(CircleImageBase)).call(this, options, body, labelModule)); + + _this.labelOffset = 0; + _this.selected = false; + return _this; } - /** - * 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 - */ + (0, _createClass3['default'])(CircleImageBase, [{ + key: 'setOptions', + value: function setOptions(options, imageObj, imageObjAlt) { + this.options = options; + + if (!(imageObj === undefined && imageObjAlt === undefined)) { + this.setImages(imageObj, imageObjAlt); + } + } + /** + * Set the images for this node. + * + * The images can be updated after the initial setting of options; + * therefore, this method needs to be reentrant. + * + * For correct working in error cases, it is necessary to properly set + * field 'nodes.brokenImage' in the options. + * + * @param {Image} imageObj required; main image to show for this node + * @param {Image|undefined} optional; image to show when node is selected + */ - (0, _createClass3['default'])(CubicBezierEdgeBase, [{ - key: '_getDistanceToBezierEdge', - value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) { - // x3,y3 is the point - var minDistance = 1e9; - var distance = void 0; - var i = void 0, - t = void 0, - x = void 0, - y = void 0; - var lastX = x1; - var lastY = y1; - var vec = [0, 0, 0, 0]; - 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; + }, { + key: 'setImages', + value: function setImages(imageObj, imageObjAlt) { + if (imageObjAlt && this.selected) { + this.imageObj = imageObjAlt; + this.imageObjAlt = imageObj; + } else { + this.imageObj = imageObj; + this.imageObjAlt = imageObjAlt; + } + } + + /** + * Set selection and switch between the base and the selected image. + * + * Do the switch only if imageObjAlt exists. + * + * @param {true|false} selected value of new selected state for current node + */ + + }, { + key: 'switchImages', + value: function switchImages(selected) { + var selection_changed = selected && !this.selected || !selected && this.selected; + this.selected = selected; // Remember new selection + + if (this.imageObjAlt !== undefined && selection_changed) { + var imageTmp = this.imageObj; + this.imageObj = this.imageObjAlt; + this.imageObjAlt = imageTmp; + } + } + + /** + * Adjust the node dimensions for a loaded image. + * + * Pre: this.imageObj is valid + */ + + }, { + key: '_resizeImage', + value: function _resizeImage() { + var width, height; + + if (this.options.shapeProperties.useImageSize === false) { + // Use the size property + var ratio_width = 1; + var ratio_height = 1; + + // Only calculate the proper ratio if both width and height not zero + if (this.imageObj.width && this.imageObj.height) { + if (this.imageObj.width > this.imageObj.height) { + ratio_width = this.imageObj.width / this.imageObj.height; + } else { + ratio_height = this.imageObj.height / this.imageObj.width; + } } - lastX = x; - lastY = y; + + width = this.options.size * 2 * ratio_width; + height = this.options.size * 2 * ratio_height; + } else { + // Use the image size + width = this.imageObj.width; + height = this.imageObj.height; } - return minDistance; + this.width = width; + this.height = height; + this.radius = 0.5 * this.width; + } + }, { + key: '_drawRawCircle', + value: function _drawRawCircle(ctx, x, y, values) { + var borderWidth = values.borderWidth / this.body.view.scale; + ctx.lineWidth = Math.min(this.width, borderWidth); + + ctx.strokeStyle = values.borderColor; + ctx.fillStyle = values.color; + ctx.circle(x, y, values.size); + + // draw shadow if enabled + this.enableShadow(ctx, values); + // draw the background + ctx.fill(); + // disable shadows for other elements. + this.disableShadow(ctx, values); + + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border + ctx.stroke(); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); + } + ctx.restore(); + } + }, { + key: '_drawImageAtPosition', + value: function _drawImageAtPosition(ctx, values) { + if (this.imageObj.width != 0) { + // draw the image + ctx.globalAlpha = 1.0; + + // draw shadow if enabled + this.enableShadow(ctx, values); + + var factor = 1; + if (this.options.shapeProperties.interpolation === true) { + factor = this.imageObj.width / this.width / this.body.view.scale; + } + + this.imageObj.drawImageAtPosition(ctx, factor, this.left, this.top, this.width, this.height); + + // disable shadows for other elements. + this.disableShadow(ctx, values); + } + } + }, { + key: '_drawImageLabel', + value: function _drawImageLabel(ctx, x, y, selected, hover) { + var yLabel; + var offset = 0; + + if (this.height !== undefined) { + offset = this.height * 0.5; + var labelDimensions = this.labelModule.getTextSize(ctx, selected, hover); + if (labelDimensions.lineCount >= 1) { + offset += labelDimensions.height / 2; + } + } + + yLabel = y + offset; + + if (this.options.label) { + this.labelOffset = offset; + } + this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging'); } }]); - return CubicBezierEdgeBase; - }(_BezierEdgeBase3['default']); + return CircleImageBase; + }(_NodeBase3['default']); - exports['default'] = CubicBezierEdgeBase; + exports['default'] = CircleImageBase; -/***/ }, -/* 199 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -39415,153 +38526,120 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _EdgeBase2 = __webpack_require__(200); + var _CircleImageBase2 = __webpack_require__(186); - var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var BezierEdgeBase = function (_EdgeBase) { - (0, _inherits3['default'])(BezierEdgeBase, _EdgeBase); + var CircularImage = function (_CircleImageBase) { + (0, _inherits3['default'])(CircularImage, _CircleImageBase); - function BezierEdgeBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, BezierEdgeBase); - return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeBase)).call(this, options, body, labelModule)); + function CircularImage(options, body, labelModule, imageObj, imageObjAlt) { + (0, _classCallCheck3['default'])(this, CircularImage); + + var _this = (0, _possibleConstructorReturn3['default'])(this, (CircularImage.__proto__ || (0, _getPrototypeOf2['default'])(CircularImage)).call(this, options, body, labelModule)); + + _this.setImages(imageObj, imageObjAlt); + return _this; } - /** - * This function uses binary search to look for the point where the bezier curve crosses the border of the node. - * - * @param nearNode - * @param ctx - * @param viaNode - * @param nearNode - * @param ctx - * @param viaNode - * @param nearNode - * @param ctx - * @param viaNode - */ + (0, _createClass3['default'])(CircularImage, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; + var imageAbsent = this.imageObj.src === undefined || this.imageObj.width === undefined || this.imageObj.height === undefined; - (0, _createClass3['default'])(BezierEdgeBase, [{ - key: '_findBorderPositionBezier', - value: function _findBorderPositionBezier(nearNode, ctx) { - var viaNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._getViaCoordinates(); + if (imageAbsent) { + var diameter = this.options.size * 2; + this.width = diameter; + this.height = diameter; + this.radius = 0.5 * this.width; + return; + } - var maxIterations = 10; - var iteration = 0; - var low = 0; - var high = 1; - var pos, angle, distanceToBorder, distanceToPoint, difference; - var threshold = 0.2; - var node = this.to; - var from = false; - if (nearNode.id === this.from.id) { - node = this.from; - from = true; + // At this point, an image is present, i.e. this.imageObj is valid. + if (this.needsRefresh(selected, hover)) { + this._resizeImage(); } + } + }, { + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.switchImages(selected); + this.resize(); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - while (low <= high && iteration < maxIterations) { - var middle = (low + high) * 0.5; + // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below. + this._drawRawCircle(ctx, x, y, values); - pos = this.getPoint(middle, viaNode); - angle = Math.atan2(node.y - pos.y, node.x - pos.x); - distanceToBorder = node.distanceToBorder(ctx, angle); - distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)); - difference = distanceToBorder - distanceToPoint; - if (Math.abs(difference) < threshold) { - break; // found - } else if (difference < 0) { - // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node. - if (from === false) { - low = middle; - } else { - high = middle; - } - } else { - if (from === false) { - high = middle; - } else { - low = middle; - } - } + // now we draw in the circle, we save so we can revert the clip operation after drawing. + ctx.save(); + // clip is used to use the stroke in drawRawCircle as an area that we can draw in. + ctx.clip(); + // draw the image + this._drawImageAtPosition(ctx, values); + // restore so we can again draw on the full canvas + ctx.restore(); - iteration++; - } - pos.t = middle; + this._drawImageLabel(ctx, x, y, selected, hover); - return pos; + this.updateBoundingBox(x, y); } - /** - * 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 - * @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 - */ + // TODO: compare with Circle.updateBoundingBox(), consolidate? More stuff is happening here }, { - key: '_getDistanceToBezierEdge', - value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) { - // x3,y3 is the point - var minDistance = 1e9; - var distance = void 0; - var i = void 0, - t = void 0, - x = void 0, - y = void 0; - var lastX = x1; - var lastY = y1; - for (i = 1; i < 10; i++) { - t = 0.1 * i; - x = Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2; - y = Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2; - if (i > 0) { - distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3); - minDistance = distance < minDistance ? distance : minDistance; - } - lastX = x; - lastY = y; - } + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y) { + this.boundingBox.top = y - this.options.size; + this.boundingBox.left = x - this.options.size; + this.boundingBox.right = x + this.options.size; + this.boundingBox.bottom = y + this.options.size; - return minDistance; + // TODO: compare with Image.updateBoundingBox(), consolidate? + 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 distanceToBorder(ctx, angle) { + this.resize(ctx); + return this.width * 0.5; } }]); - return BezierEdgeBase; - }(_EdgeBase3['default']); + return CircularImage; + }(_CircleImageBase3['default']); - exports['default'] = BezierEdgeBase; + exports['default'] = CircularImage; -/***/ }, -/* 200 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -39569,811 +38647,362 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _slicedToArray2 = __webpack_require__(165); + var _getPrototypeOf = __webpack_require__(175); - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _possibleConstructorReturn2 = __webpack_require__(178); - var util = __webpack_require__(1); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var EdgeBase = function () { - function EdgeBase(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, EdgeBase); + var _inherits2 = __webpack_require__(179); - this.body = body; - this.labelModule = labelModule; - this.options = {}; - this.setOptions(options); - this.colorDirty = true; - this.color = {}; - this.selectionWidth = 2; - this.hoverWidth = 1.5; - this.fromPoint = this.from; - this.toPoint = this.to; - } + var _inherits3 = _interopRequireDefault(_inherits2); - (0, _createClass3['default'])(EdgeBase, [{ - key: 'connect', - value: function connect() { - this.from = this.body.nodes[this.options.from]; - this.to = this.body.nodes[this.options.to]; - } - }, { - key: 'cleanup', - value: function cleanup() { - return false; - } - }, { - key: 'setOptions', - value: function setOptions(options) { - this.options = options; - this.from = this.body.nodes[this.options.from]; - this.to = this.body.nodes[this.options.to]; - this.id = this.options.id; - } + var _NodeBase2 = __webpack_require__(184); - /** - * Redraw a edge as a line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - }, { - key: 'drawLine', - value: function drawLine(ctx, values, selected, hover, viaNode) { - // set style - ctx.strokeStyle = this.getColor(ctx, values, selected, hover); - ctx.lineWidth = values.width; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - if (values.dashes !== false) { - this._drawDashedLine(ctx, values, viaNode); - } else { - this._drawLine(ctx, values, viaNode); - } - } - }, { - key: '_drawLine', - value: function _drawLine(ctx, values, viaNode, fromPoint, toPoint) { - if (this.from != this.to) { - // draw line - this._line(ctx, values, viaNode, fromPoint, toPoint); - } else { - var _getCircleData2 = this._getCircleData(ctx), - _getCircleData3 = (0, _slicedToArray3['default'])(_getCircleData2, 3), - x = _getCircleData3[0], - y = _getCircleData3[1], - radius = _getCircleData3[2]; + var Database = function (_NodeBase) { + (0, _inherits3['default'])(Database, _NodeBase); - this._circle(ctx, values, x, y, radius); + function Database(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Database); + + var _this = (0, _possibleConstructorReturn3['default'])(this, (Database.__proto__ || (0, _getPrototypeOf2['default'])(Database)).call(this, options, body, labelModule)); + + _this._setMargins(labelModule); + return _this; + } + + (0, _createClass3['default'])(Database, [{ + key: 'resize', + value: function resize(ctx, selected, hover) { + if (this.needsRefresh(selected, hover)) { + this.textSize = this.labelModule.getTextSize(ctx, selected, hover); + var size = this.textSize.width + this.margin.right + this.margin.left; + this.width = size; + this.height = size; + this.radius = this.width / 2; } } }, { - key: '_drawDashedLine', - value: function _drawDashedLine(ctx, values, viaNode, fromPoint, toPoint) { - ctx.lineCap = 'round'; - var pattern = [5, 5]; - if (Array.isArray(values.dashes) === true) { - pattern = values.dashes; - } - - // only firefox and chrome support this method, else we use the legacy one. - if (ctx.setLineDash !== undefined) { - ctx.save(); - - // set dash settings for chrome or firefox - ctx.setLineDash(pattern); - ctx.lineDashOffset = 0; + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - // draw the line - if (this.from != this.to) { - // draw line - this._line(ctx, values, viaNode); - } else { - var _getCircleData4 = this._getCircleData(ctx), - _getCircleData5 = (0, _slicedToArray3['default'])(_getCircleData4, 3), - x = _getCircleData5[0], - y = _getCircleData5[1], - radius = _getCircleData5[2]; + var borderWidth = values.borderWidth / this.body.view.scale; + ctx.lineWidth = Math.min(this.width, borderWidth); - this._circle(ctx, values, x, y, radius); - } + ctx.strokeStyle = values.borderColor; - // restore the dash settings. - ctx.setLineDash([0]); - ctx.lineDashOffset = 0; - ctx.restore(); - } else { - // unsupporting smooth lines - if (this.from != this.to) { - // draw line - ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern); - } else { - var _getCircleData6 = this._getCircleData(ctx), - _getCircleData7 = (0, _slicedToArray3['default'])(_getCircleData6, 3), - _x = _getCircleData7[0], - _y = _getCircleData7[1], - _radius = _getCircleData7[2]; + ctx.fillStyle = values.color; + ctx.database(x - this.width / 2, y - this.height / 2, this.width, this.height); - this._circle(ctx, values, _x, _y, _radius); - } - // draw shadow if enabled - this.enableShadow(ctx, values); + // draw shadow if enabled + this.enableShadow(ctx, values); + // draw the background + ctx.fill(); + // disable shadows for other elements. + this.disableShadow(ctx, values); + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border ctx.stroke(); - - // disable shadows for other elements. - this.disableShadow(ctx, values); - } - } - }, { - key: 'findBorderPosition', - value: function findBorderPosition(nearNode, ctx, options) { - if (this.from != this.to) { - return this._findBorderPosition(nearNode, ctx, options); - } else { - return this._findBorderPositionCircle(nearNode, ctx, options); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); } + ctx.restore(); + + this.updateBoundingBox(x, y, ctx, selected, hover); + this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); } }, { - key: 'findBorderPositions', - value: function findBorderPositions(ctx) { - var from = {}; - var to = {}; - if (this.from != this.to) { - from = this._findBorderPosition(this.from, ctx); - to = this._findBorderPosition(this.to, ctx); - } else { - var _getCircleData8 = this._getCircleData(ctx), - _getCircleData9 = (0, _slicedToArray3['default'])(_getCircleData8, 3), - x = _getCircleData9[0], - y = _getCircleData9[1], - radius = _getCircleData9[2]; + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y, ctx, selected, hover) { + this.resize(ctx, selected, hover); - from = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); - to = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.6, high: 0.8, direction: 1 }); - } - return { from: from, to: to }; + this.left = x - this.width * 0.5; + this.top = y - this.height * 0.5; + + this.boundingBox.left = this.left; + this.boundingBox.top = this.top; + this.boundingBox.bottom = this.top + this.height; + this.boundingBox.right = this.left + this.width; } }, { - key: '_getCircleData', - value: function _getCircleData(ctx) { - var x = void 0, - y = void 0; - var node = this.from; - var radius = this.options.selfReferenceSize; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Database; + }(_NodeBase3['default']); - if (ctx !== undefined) { - if (node.shape.width === undefined) { - node.shape.resize(ctx); - } - } + exports['default'] = Database; - // get circle coordinates - if (node.shape.width > node.shape.height) { - x = node.x + node.shape.width * 0.5; - y = node.y - radius; - } else { - x = node.x + radius; - y = node.y - node.shape.height * 0.5; - } - return [x, y, radius]; - } +/***/ }), +/* 189 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Get a point on a circle - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private - */ + 'use strict'; - }, { - key: '_pointOnCircle', - value: function _pointOnCircle(x, y, radius, percentage) { - var angle = percentage * 2 * Math.PI; - return { - x: x + radius * Math.cos(angle), - y: y - radius * Math.sin(angle) - }; - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - /** - * This function uses binary search to look for the point where the circle crosses the border of the node. - * @param node - * @param ctx - * @param options - * @returns {*} - * @private - */ + var _getPrototypeOf = __webpack_require__(175); - }, { - key: '_findBorderPositionCircle', - value: function _findBorderPositionCircle(node, ctx, options) { - var x = options.x; - var y = options.y; - var low = options.low; - var high = options.high; - var direction = options.direction; + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var maxIterations = 10; - var iteration = 0; - var radius = this.options.selfReferenceSize; - var pos = void 0, - angle = void 0, - distanceToBorder = void 0, - distanceToPoint = void 0, - difference = void 0; - var threshold = 0.05; - var middle = (low + high) * 0.5; + var _classCallCheck2 = __webpack_require__(134); - while (low <= high && iteration < maxIterations) { - middle = (low + high) * 0.5; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - pos = this._pointOnCircle(x, y, radius, middle); - angle = Math.atan2(node.y - pos.y, node.x - pos.x); - distanceToBorder = node.distanceToBorder(ctx, angle); - distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)); - difference = distanceToBorder - distanceToPoint; - if (Math.abs(difference) < threshold) { - break; // found - } else if (difference > 0) { - // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node. - if (direction > 0) { - low = middle; - } else { - high = middle; - } - } else { - if (direction > 0) { - high = middle; - } else { - low = middle; - } - } - iteration++; - } - pos.t = middle; + var _createClass2 = __webpack_require__(135); - return pos; - } + var _createClass3 = _interopRequireDefault(_createClass2); - /** - * Get the line width of the edge. Depends on width and whether one of the - * connected nodes is selected. - * @return {Number} width - * @private - */ + var _possibleConstructorReturn2 = __webpack_require__(178); - }, { - key: 'getLineWidth', - value: function getLineWidth(selected, hover) { - if (selected === true) { - return Math.max(this.selectionWidth, 0.3 / this.body.view.scale); - } else { - if (hover === true) { - return Math.max(this.hoverWidth, 0.3 / this.body.view.scale); - } else { - return Math.max(this.options.width, 0.3 / this.body.view.scale); - } - } - } - }, { - key: 'getColor', - value: function getColor(ctx, values, selected, hover) { - if (values.inheritsColor !== false) { - // when this is a loop edge, just use the 'from' method - if (values.inheritsColor === 'both' && this.from.id !== this.to.id) { - var grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y); - var fromColor = void 0, - toColor = void 0; - fromColor = this.from.options.color.highlight.border; - toColor = this.to.options.color.highlight.border; + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - if (this.from.selected === false && this.to.selected === false) { - fromColor = util.overrideOpacity(this.from.options.color.border, values.opacity); - toColor = util.overrideOpacity(this.to.options.color.border, values.opacity); - } else if (this.from.selected === true && this.to.selected === false) { - toColor = this.to.options.color.border; - } else if (this.from.selected === false && this.to.selected === true) { - fromColor = this.from.options.color.border; - } - grd.addColorStop(0, fromColor); - grd.addColorStop(1, toColor); + var _inherits2 = __webpack_require__(179); - // -------------------- this returns -------------------- // - return grd; - } + var _inherits3 = _interopRequireDefault(_inherits2); - if (values.inheritsColor === "to") { - return util.overrideOpacity(this.to.options.color.border, values.opacity); - } else { - // "from" - return util.overrideOpacity(this.from.options.color.border, values.opacity); - } - } else { - return util.overrideOpacity(values.color, values.opacity); - } - } + var _ShapeBase2 = __webpack_require__(190); - /** - * Draw a line from a node to itself, a circle - * @param {CanvasRenderingContext2D} ctx - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @private - */ + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - }, { - key: '_circle', - value: function _circle(ctx, values, x, y, radius) { - // draw shadow if enabled - this.enableShadow(ctx, values); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); + var Diamond = function (_ShapeBase) { + (0, _inherits3['default'])(Diamond, _ShapeBase); - // disable shadows for other elements. - this.disableShadow(ctx, values); - } - - /** - * 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 - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @private - */ + function Diamond(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Diamond); + return (0, _possibleConstructorReturn3['default'])(this, (Diamond.__proto__ || (0, _getPrototypeOf2['default'])(Diamond)).call(this, options, body, labelModule)); + } + (0, _createClass3['default'])(Diamond, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'diamond', 4, x, y, selected, hover, values); + } }, { - key: 'getDistanceToEdge', - value: function getDistanceToEdge(x1, y1, x2, y2, x3, y3, via, values) { - // x3,y3 is the point - var returnValue = 0; - if (this.from != this.to) { - returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via); - } else { - var _getCircleData10 = this._getCircleData(undefined), - _getCircleData11 = (0, _slicedToArray3['default'])(_getCircleData10, 3), - x = _getCircleData11[0], - y = _getCircleData11[1], - radius = _getCircleData11[2]; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Diamond; + }(_ShapeBase3['default']); - var dx = x - x3; - var dy = y - y3; - returnValue = Math.abs(Math.sqrt(dx * dx + dy * dy) - radius); - } + exports['default'] = Diamond; - if (this.labelModule.size.left < x3 && this.labelModule.size.left + this.labelModule.size.width > x3 && this.labelModule.size.top < y3 && this.labelModule.size.top + this.labelModule.size.height > y3) { - return 0; - } else { - return returnValue; - } - } - }, { - key: '_getDistanceToLine', - value: function _getDistanceToLine(x1, y1, x2, y2, x3, y3) { - var px = x2 - x1; - var py = y2 - y1; - var something = px * px + py * py; - var u = ((x3 - x1) * px + (y3 - y1) * py) / something; +/***/ }), +/* 190 */ +/***/ (function(module, exports, __webpack_require__) { - if (u > 1) { - u = 1; - } else if (u < 0) { - u = 0; - } + 'use strict'; - var x = x1 + u * px; - var y = y1 + u * py; - var dx = x - x3; - var dy = y - y3; + Object.defineProperty(exports, "__esModule", { + value: true + }); - //# Note: If the actual distance does not matter, - //# if you only want to compare what this function - //# returns to other results of this function, you - //# can just return the squared distance instead - //# (i.e. remove the sqrt) to gain a little performance + var _getPrototypeOf = __webpack_require__(175); - return Math.sqrt(dx * dx + dy * dy); - } + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - /** - * - * @param ctx - * @param position - * @param viaNode - */ + var _classCallCheck2 = __webpack_require__(134); - }, { - key: 'getArrowData', - value: function getArrowData(ctx, position, viaNode, selected, hover, values) { - // set lets - var angle = void 0; - var arrowPoint = void 0; - var node1 = void 0; - var node2 = void 0; - var guideOffset = void 0; - var scaleFactor = void 0; - var type = void 0; - var lineWidth = values.width; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - if (position === 'from') { - node1 = this.from; - node2 = this.to; - guideOffset = 0.1; - scaleFactor = values.fromArrowScale; - type = values.fromArrowType; - } else if (position === 'to') { - node1 = this.to; - node2 = this.from; - guideOffset = -0.1; - scaleFactor = values.toArrowScale; - type = values.toArrowType; - } else { - node1 = this.to; - node2 = this.from; - scaleFactor = values.middleArrowScale; - type = values.middleArrowType; - } + var _createClass2 = __webpack_require__(135); - // if not connected to itself - if (node1 != node2) { - if (position !== 'middle') { - // draw arrow head - if (this.options.smooth.enabled === true) { - arrowPoint = this.findBorderPosition(node1, ctx, { via: viaNode }); - var guidePos = this.getPoint(Math.max(0.0, Math.min(1.0, arrowPoint.t + guideOffset)), viaNode); - angle = Math.atan2(arrowPoint.y - guidePos.y, arrowPoint.x - guidePos.x); - } else { - angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); - arrowPoint = this.findBorderPosition(node1, ctx); - } - } else { - angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); - arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow. - } - } else { - // draw circle - var _getCircleData12 = this._getCircleData(ctx), - _getCircleData13 = (0, _slicedToArray3['default'])(_getCircleData12, 3), - x = _getCircleData13[0], - y = _getCircleData13[1], - radius = _getCircleData13[2]; + var _createClass3 = _interopRequireDefault(_createClass2); - if (position === 'from') { - arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); - angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI; - } else if (position === 'to') { - arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.6, high: 1.0, direction: 1 }); - angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI; - } else { - arrowPoint = this._pointOnCircle(x, y, radius, 0.175); - angle = 3.9269908169872414; // === 0.175 * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI; - } - } + var _possibleConstructorReturn2 = __webpack_require__(178); - var length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge. + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var xi = arrowPoint.x - length * 0.9 * Math.cos(angle); - var yi = arrowPoint.y - length * 0.9 * Math.sin(angle); - var arrowCore = { x: xi, y: yi }; + var _inherits2 = __webpack_require__(179); - return { point: arrowPoint, core: arrowCore, angle: angle, length: length, type: type }; - } + var _inherits3 = _interopRequireDefault(_inherits2); - /** - * - * @param ctx - * @param selected - * @param hover - * @param arrowData - */ + var _NodeBase2 = __webpack_require__(184); - }, { - key: 'drawArrowHead', - value: function drawArrowHead(ctx, values, selected, hover, arrowData) { - // set style - ctx.strokeStyle = this.getColor(ctx, values, selected, hover); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = values.width; + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - if (arrowData.type && arrowData.type.toLowerCase() === 'circle') { - // draw circle at the end of the line - ctx.circleEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length); - } else { - // draw arrow at the end of the line - ctx.arrowEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var ShapeBase = function (_NodeBase) { + (0, _inherits3['default'])(ShapeBase, _NodeBase); + + function ShapeBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, ShapeBase); + return (0, _possibleConstructorReturn3['default'])(this, (ShapeBase.__proto__ || (0, _getPrototypeOf2['default'])(ShapeBase)).call(this, options, body, labelModule)); + } + + (0, _createClass3['default'])(ShapeBase, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; + var values = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { size: this.options.size }; + + if (this.needsRefresh(selected, hover)) { + this.labelModule.getTextSize(ctx, selected, hover); + var size = 2 * values.size; + this.width = size; + this.height = size; + this.radius = 0.5 * this.width; } + } + }, { + key: '_drawShape', + value: function _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) { + this.resize(ctx, selected, hover, values); + + this.left = x - this.width / 2; + this.top = y - this.height / 2; + + var borderWidth = values.borderWidth / this.body.view.scale; + ctx.lineWidth = Math.min(this.width, borderWidth); + + ctx.strokeStyle = values.borderColor; + ctx.fillStyle = values.color; + ctx[shape](x, y, values.size); // draw shadow if enabled this.enableShadow(ctx, values); + // draw the background ctx.fill(); // disable shadows for other elements. this.disableShadow(ctx, values); - } - }, { - key: 'enableShadow', - value: function enableShadow(ctx, values) { - if (values.shadow === true) { - ctx.shadowColor = values.shadowColor; - ctx.shadowBlur = values.shadowSize; - ctx.shadowOffsetX = values.shadowX; - ctx.shadowOffsetY = values.shadowY; + + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border + ctx.stroke(); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); + } + ctx.restore(); + + if (this.options.label !== undefined) { + // Need to call following here in order to ensure value for `this.labelModule.size.height` + this.labelModule.calculateLabelSize(ctx, selected, hover, x, y, 'hanging'); + var yLabel = y + 0.5 * this.height + 0.5 * this.labelModule.size.height; + this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging'); } + + this.updateBoundingBox(x, y); } }, { - key: 'disableShadow', - value: function disableShadow(ctx, values) { - if (values.shadow === true) { - ctx.shadowColor = 'rgba(0,0,0,0)'; - ctx.shadowBlur = 0; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y) { + this.boundingBox.top = y - this.options.size; + this.boundingBox.left = x - this.options.size; + this.boundingBox.right = x + this.options.size; + this.boundingBox.bottom = y + this.options.size; + + if (this.options.label !== undefined && this.labelModule.size.width > 0) { + this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left); + this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width); + this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height); } } }]); - return EdgeBase; - }(); + return ShapeBase; + }(_NodeBase3['default']); - exports['default'] = EdgeBase; + exports['default'] = ShapeBase; -/***/ }, -/* 201 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _slicedToArray2 = __webpack_require__(165); - - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _BezierEdgeBase2 = __webpack_require__(199); - - var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - - var BezierEdgeDynamic = function (_BezierEdgeBase) { - (0, _inherits3["default"])(BezierEdgeDynamic, _BezierEdgeBase); + var _ShapeBase2 = __webpack_require__(190); - function BezierEdgeDynamic(options, body, labelModule) { - (0, _classCallCheck3["default"])(this, BezierEdgeDynamic); + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - // --> this calls the setOptions below - var _this = (0, _possibleConstructorReturn3["default"])(this, (BezierEdgeDynamic.__proto__ || (0, _getPrototypeOf2["default"])(BezierEdgeDynamic)).call(this, options, body, labelModule)); - //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked. + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var Dot = function (_ShapeBase) { + (0, _inherits3['default'])(Dot, _ShapeBase); - _this._boundFunction = function () { - _this.positionBezierNode(); - }; - _this.body.emitter.on("_repositionBezierNodes", _this._boundFunction); - return _this; + function Dot(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Dot); + return (0, _possibleConstructorReturn3['default'])(this, (Dot.__proto__ || (0, _getPrototypeOf2['default'])(Dot)).call(this, options, body, labelModule)); } - (0, _createClass3["default"])(BezierEdgeDynamic, [{ - key: "setOptions", - value: function setOptions(options) { - // check if the physics has changed. - var physicsChange = false; - if (this.options.physics !== options.physics) { - physicsChange = true; - } - - // set the options and the to and from nodes - this.options = options; - this.id = this.options.id; - this.from = this.body.nodes[this.options.from]; - this.to = this.body.nodes[this.options.to]; - - // setup the support node and connect - this.setupSupportNode(); - this.connect(); - - // when we change the physics state of the edge, we reposition the support node. - if (physicsChange === true) { - this.via.setOptions({ physics: this.options.physics }); - this.positionBezierNode(); - } - } - }, { - key: "connect", - value: function connect() { - this.from = this.body.nodes[this.options.from]; - this.to = this.body.nodes[this.options.to]; - if (this.from === undefined || this.to === undefined || this.options.physics === false) { - this.via.setOptions({ physics: false }); - } else { - // fix weird behaviour where a self referencing node has physics enabled - if (this.from.id === this.to.id) { - this.via.setOptions({ physics: false }); - } else { - this.via.setOptions({ physics: true }); - } - } - } - - /** - * remove the support nodes - * @returns {boolean} - */ - - }, { - key: "cleanup", - value: function cleanup() { - this.body.emitter.off("_repositionBezierNodes", this._boundFunction); - if (this.via !== undefined) { - delete this.body.nodes[this.via.id]; - this.via = undefined; - return true; - } - return false; - } - - /** - * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but - * are used for the force calculation. - * - * The changed data is not called, if needed, it is returned by the main edge constructor. - * @private - */ - - }, { - key: "setupSupportNode", - value: function setupSupportNode() { - if (this.via === undefined) { - var nodeId = "edgeId:" + this.id; - var node = this.body.functions.createNode({ - id: nodeId, - shape: 'circle', - physics: true, - hidden: true - }); - this.body.nodes[nodeId] = node; - this.via = node; - this.via.parentEdgeId = this.id; - this.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); - this.via.y = 0.5 * (this.from.y + this.to.y); - } else if (this.via !== undefined) { - this.via.x = 0; - this.via.y = 0; - } - } - - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ - - }, { - key: "_line", - value: function _line(ctx, values, viaNode) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.fromPoint.x, this.fromPoint.y); - // fallback to normal straight edges - if (viaNode.x === undefined) { - ctx.lineTo(this.toPoint.x, this.toPoint.y); - } else { - ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y); - } - // draw shadow if enabled - this.enableShadow(ctx, values); - ctx.stroke(); - this.disableShadow(ctx, values); - } - }, { - key: "getViaNode", - value: function getViaNode() { - return this.via; - } - - /** - * 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 viaNode - * @returns {{x: number, y: number}} - * @private - */ - - }, { - key: "getPoint", - value: function getPoint(percentage) { - var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.via; - - var t = percentage; - var x = void 0, - y = void 0; - if (this.from === this.to) { - var _getCircleData = this._getCircleData(this.from), - _getCircleData2 = (0, _slicedToArray3["default"])(_getCircleData, 3), - cx = _getCircleData2[0], - cy = _getCircleData2[1], - cr = _getCircleData2[2]; - - var a = 2 * Math.PI * (1 - t); - x = cx + cr * Math.sin(a); - y = cy + cr - cr * (1 - Math.cos(a)); - } else { - x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x; - y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y; - } - - return { x: x, y: y }; - } - }, { - key: "_findBorderPosition", - value: function _findBorderPosition(nearNode, ctx) { - return this._findBorderPositionBezier(nearNode, ctx, this.via); + (0, _createClass3['default'])(Dot, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'circle', 2, x, y, selected, hover, values); } }, { - 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); + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + this.resize(ctx); + return this.options.size; } }]); - return BezierEdgeDynamic; - }(_BezierEdgeBase3["default"]); + return Dot; + }(_ShapeBase3['default']); - exports["default"] = BezierEdgeDynamic; + exports['default'] = Dot; -/***/ }, -/* 202 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -40381,277 +39010,125 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _BezierEdgeBase2 = __webpack_require__(199); + var _NodeBase2 = __webpack_require__(184); - var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); + var _NodeBase3 = _interopRequireDefault(_NodeBase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var BezierEdgeStatic = function (_BezierEdgeBase) { - (0, _inherits3['default'])(BezierEdgeStatic, _BezierEdgeBase); + var Ellipse = function (_NodeBase) { + (0, _inherits3['default'])(Ellipse, _NodeBase); - function BezierEdgeStatic(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, BezierEdgeStatic); - return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeStatic.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeStatic)).call(this, options, body, labelModule)); + function Ellipse(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Ellipse); + return (0, _possibleConstructorReturn3['default'])(this, (Ellipse.__proto__ || (0, _getPrototypeOf2['default'])(Ellipse)).call(this, options, body, labelModule)); } - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ - + (0, _createClass3['default'])(Ellipse, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - (0, _createClass3['default'])(BezierEdgeStatic, [{ - key: '_line', - value: function _line(ctx, values, viaNode) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.fromPoint.x, this.fromPoint.y); + if (this.needsRefresh(selected, hover)) { + var textSize = this.labelModule.getTextSize(ctx, selected, hover); - // fallback to normal straight edges - if (viaNode.x === undefined) { - ctx.lineTo(this.toPoint.x, this.toPoint.y); - } else { - ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y); + this.height = textSize.height * 2; + this.width = textSize.width + this.height; + this.radius = 0.5 * this.width; } - // draw shadow if enabled - this.enableShadow(ctx, values); - ctx.stroke(); - this.disableShadow(ctx, values); } }, { - key: 'getViaNode', - value: function getViaNode() { - return this._getViaCoordinates(); - } + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.left = x - this.width * 0.5; + this.top = y - this.height * 0.5; - /** - * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows. - * @returns {{x: undefined, y: undefined}} - * @private - */ + var borderWidth = values.borderWidth / this.body.view.scale; + ctx.lineWidth = Math.min(this.width, borderWidth); - }, { - 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; + ctx.strokeStyle = values.borderColor; - var originalAngle = Math.atan2(dy, dx); - var myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi); + ctx.fillStyle = values.color; + ctx.ellipse_vis(this.left, this.top, this.width, this.height); - 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; + // draw shadow if enabled + this.enableShadow(ctx, values); + // draw the background + ctx.fill(); + // disable shadows for other elements. + this.disableShadow(ctx, values); - var _originalAngle = Math.atan2(dy, dx); - var _myAngle = (_originalAngle + (-factor * 0.5 + 0.5) * _pi) % (2 * _pi); + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); - 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; - } - } - } + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border + ctx.stroke(); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); } - 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); + ctx.restore(); + + this.updateBoundingBox(x, y, ctx, selected, hover); + this.labelModule.draw(ctx, x, y, selected, hover); } }, { - key: '_getDistanceToEdge', - value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { - var viaNode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._getViaCoordinates(); - // x3,y3 is the point - return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode); - } + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y, ctx, selected, hover) { + this.resize(ctx, selected, hover); // just in case - /** - * 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 viaNode - * @returns {{x: number, y: number}} - * @private - */ + this.left = x - this.width * 0.5; + this.top = y - this.height * 0.5; + this.boundingBox.left = this.left; + this.boundingBox.top = this.top; + this.boundingBox.bottom = this.top + this.height; + this.boundingBox.right = this.left + this.width; + } }, { - key: 'getPoint', - value: function getPoint(percentage) { - var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates(); - - var t = percentage; - var x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x; - var y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y; - - return { x: x, y: y }; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + this.resize(ctx); + var a = this.width * 0.5; + var b = this.height * 0.5; + var w = Math.sin(angle) * a; + var h = Math.cos(angle) * b; + return a * b / Math.sqrt(w * w + h * h); } }]); - return BezierEdgeStatic; - }(_BezierEdgeBase3['default']); + return Ellipse; + }(_NodeBase3['default']); - exports['default'] = BezierEdgeStatic; + exports['default'] = Ellipse; -/***/ }, -/* 203 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 193 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -40659,119 +39136,126 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _EdgeBase2 = __webpack_require__(200); + var _NodeBase2 = __webpack_require__(184); - var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); + var _NodeBase3 = _interopRequireDefault(_NodeBase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var StraightEdge = function (_EdgeBase) { - (0, _inherits3['default'])(StraightEdge, _EdgeBase); + var Icon = function (_NodeBase) { + (0, _inherits3['default'])(Icon, _NodeBase); - function StraightEdge(options, body, labelModule) { - (0, _classCallCheck3['default'])(this, StraightEdge); - return (0, _possibleConstructorReturn3['default'])(this, (StraightEdge.__proto__ || (0, _getPrototypeOf2['default'])(StraightEdge)).call(this, options, body, labelModule)); - } + function Icon(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Icon); - /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private - */ + var _this = (0, _possibleConstructorReturn3['default'])(this, (Icon.__proto__ || (0, _getPrototypeOf2['default'])(Icon)).call(this, options, body, labelModule)); + _this._setMargins(labelModule); + return _this; + } - (0, _createClass3['default'])(StraightEdge, [{ - key: '_line', - value: function _line(ctx, values) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.fromPoint.x, this.fromPoint.y); - ctx.lineTo(this.toPoint.x, this.toPoint.y); - // draw shadow if enabled - this.enableShadow(ctx, values); - ctx.stroke(); - this.disableShadow(ctx, values); + (0, _createClass3['default'])(Icon, [{ + key: 'resize', + value: function resize(ctx, selected, hover) { + if (this.needsRefresh(selected, hover)) { + this.iconSize = { + width: Number(this.options.icon.size), + height: Number(this.options.icon.size) + }; + this.width = this.iconSize.width + this.margin.right + this.margin.left; + this.height = this.iconSize.height + this.margin.top + this.margin.bottom; + this.radius = 0.5 * this.width; + } } }, { - key: 'getViaNode', - value: function getViaNode() { - return undefined; - } + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.options.icon.size = this.options.icon.size || 50; - /** - * 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 - */ + this.left = x - this.width / 2; + this.top = y - this.height / 2; + this._icon(ctx, x, y, selected, hover, values); - }, { - key: 'getPoint', - value: function getPoint(percentage) { - return { - x: (1 - percentage) * this.fromPoint.x + percentage * this.toPoint.x, - y: (1 - percentage) * this.fromPoint.y + percentage * this.toPoint.y - }; + if (this.options.label !== undefined) { + var iconTextSpacing = 5; + this.labelModule.draw(ctx, this.left + this.iconSize.width / 2 + this.margin.left, y + this.height / 2 + iconTextSpacing, selected); + } + + this.updateBoundingBox(x, y); } }, { - key: '_findBorderPosition', - value: function _findBorderPosition(nearNode, ctx) { - var node1 = this.to; - var node2 = this.from; - if (nearNode.id === this.from.id) { - node1 = this.from; - node2 = this.to; + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y) { + this.boundingBox.top = y - this.options.icon.size * 0.5; + this.boundingBox.left = x - this.options.icon.size * 0.5; + this.boundingBox.right = x + this.options.icon.size * 0.5; + this.boundingBox.bottom = y + this.options.icon.size * 0.5; + + if (this.options.label !== undefined && this.labelModule.size.width > 0) { + var iconTextSpacing = 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 + iconTextSpacing); } + } + }, { + key: '_icon', + value: function _icon(ctx, x, y, selected, hover, values) { + var iconSize = Number(this.options.icon.size); - var angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); - var dx = node1.x - node2.x; - var dy = node1.y - node2.y; - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - var toBorderDist = nearNode.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; + if (this.options.icon.code !== undefined) { + ctx.font = (selected ? "bold " : "") + iconSize + "px " + this.options.icon.face; - var borderPos = {}; - borderPos.x = (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x; - borderPos.y = (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y; + // draw icon + ctx.fillStyle = this.options.icon.color || "black"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; - return borderPos; + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.fillText(this.options.icon.code, x, y); + + // disable shadows for other elements. + this.disableShadow(ctx, values); + } else { + 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: '_getDistanceToEdge', - value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { - // x3,y3 is the point - return this._getDistanceToLine(x1, y1, x2, y2, x3, y3); + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); } }]); - return StraightEdge; - }(_EdgeBase3['default']); + return Icon; + }(_NodeBase3['default']); - exports['default'] = StraightEdge; + exports['default'] = Icon; -/***/ }, -/* 204 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -40779,2015 +39263,1771 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _keys = __webpack_require__(58); + var _getPrototypeOf = __webpack_require__(175); - var _keys2 = _interopRequireDefault(_keys); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _BarnesHutSolver = __webpack_require__(205); + var _possibleConstructorReturn2 = __webpack_require__(178); - var _BarnesHutSolver2 = _interopRequireDefault(_BarnesHutSolver); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _RepulsionSolver = __webpack_require__(206); + var _inherits2 = __webpack_require__(179); - var _RepulsionSolver2 = _interopRequireDefault(_RepulsionSolver); + var _inherits3 = _interopRequireDefault(_inherits2); - var _HierarchicalRepulsionSolver = __webpack_require__(207); + var _CircleImageBase2 = __webpack_require__(186); - var _HierarchicalRepulsionSolver2 = _interopRequireDefault(_HierarchicalRepulsionSolver); + var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2); - var _SpringSolver = __webpack_require__(208); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _SpringSolver2 = _interopRequireDefault(_SpringSolver); + var Image = function (_CircleImageBase) { + (0, _inherits3['default'])(Image, _CircleImageBase); - var _HierarchicalSpringSolver = __webpack_require__(209); + function Image(options, body, labelModule, imageObj, imageObjAlt) { + (0, _classCallCheck3['default'])(this, Image); - var _HierarchicalSpringSolver2 = _interopRequireDefault(_HierarchicalSpringSolver); + var _this = (0, _possibleConstructorReturn3['default'])(this, (Image.__proto__ || (0, _getPrototypeOf2['default'])(Image)).call(this, options, body, labelModule)); - var _CentralGravitySolver = __webpack_require__(210); + _this.setImages(imageObj, imageObjAlt); + return _this; + } - var _CentralGravitySolver2 = _interopRequireDefault(_CentralGravitySolver); + (0, _createClass3['default'])(Image, [{ + key: 'resize', + value: function resize(ctx) { + var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected; + var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover; - var _FA2BasedRepulsionSolver = __webpack_require__(211); + if (this.needsRefresh(selected, hover)) { + this._resizeImage(); + } + } + }, { + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.switchImages(selected); + this.resize(); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - var _FA2BasedRepulsionSolver2 = _interopRequireDefault(_FA2BasedRepulsionSolver); + if (this.options.shapeProperties.useBorderWithImage === true) { + var neutralborderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + var borderWidth = (selected ? selectionLineWidth : neutralborderWidth) / this.body.view.scale; + ctx.lineWidth = Math.min(this.width, borderWidth); - var _FA2BasedCentralGravitySolver = __webpack_require__(212); + ctx.beginPath(); - var _FA2BasedCentralGravitySolver2 = _interopRequireDefault(_FA2BasedCentralGravitySolver); + // setup the line properties. + ctx.strokeStyle = selected ? this.options.color.highlight.border : hover ? this.options.color.hover.border : this.options.color.border; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + // set a fillstyle + ctx.fillStyle = selected ? this.options.color.highlight.background : hover ? this.options.color.hover.background : this.options.color.background; - var util = __webpack_require__(1); + // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image + ctx.rect(this.left - 0.5 * ctx.lineWidth, this.top - 0.5 * ctx.lineWidth, this.width + ctx.lineWidth, this.height + ctx.lineWidth); + ctx.fill(); - var PhysicsEngine = function () { - function PhysicsEngine(body) { - (0, _classCallCheck3['default'])(this, PhysicsEngine); + //draw dashed border if enabled, save and restore is required for firefox not to crash on unix. + ctx.save(); + // if borders are zero width, they will be drawn with width 1 by default. This prevents that + if (borderWidth > 0) { + this.enableBorderDashes(ctx, values); + //draw the border + ctx.stroke(); + //disable dashed border for other elements + this.disableBorderDashes(ctx, values); + } + ctx.restore(); - this.body = body; - this.physicsBody = { physicsNodeIndices: [], physicsEdgeIndices: [], forces: {}, velocities: {} }; + ctx.closePath(); + } - this.physicsEnabled = true; - this.simulationInterval = 1000 / 60; - this.requiresTimeout = true; - this.previousStates = {}; - this.referenceState = {}; - this.freezeCache = {}; - this.renderTimer = undefined; + this._drawImageAtPosition(ctx, values); - // parameters for the adaptive timestep - this.adaptiveTimestep = false; - this.adaptiveTimestepEnabled = false; - this.adaptiveCounter = 0; - this.adaptiveInterval = 3; + this._drawImageLabel(ctx, x, y, selected, hover); - this.stabilized = false; - this.startedStabilization = false; - this.stabilizationIterations = 0; - this.ready = false; // will be set to true if the stabilize + this.updateBoundingBox(x, y); + } + }, { + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y) { + this.resize(); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - // default options - this.options = {}; - this.defaultOptions = { - enabled: true, - barnesHut: { - theta: 0.5, - gravitationalConstant: -2000, - centralGravity: 0.3, - springLength: 95, - springConstant: 0.04, - damping: 0.09, - avoidOverlap: 0 - }, - forceAtlas2Based: { - theta: 0.5, - gravitationalConstant: -50, - centralGravity: 0.01, - springConstant: 0.08, - springLength: 100, - damping: 0.4, - avoidOverlap: 0 - }, - repulsion: { - centralGravity: 0.2, - springLength: 200, - springConstant: 0.05, - nodeDistance: 100, - damping: 0.09, - avoidOverlap: 0 - }, - hierarchicalRepulsion: { - centralGravity: 0.0, - springLength: 100, - springConstant: 0.01, - nodeDistance: 120, - damping: 0.09 - }, - maxVelocity: 50, - minVelocity: 0.75, // px/s - solver: 'barnesHut', - stabilization: { - enabled: true, - iterations: 1000, // maximum number of iteration to stabilize - updateInterval: 50, - onlyDynamicEdges: false, - fit: true - }, - timestep: 0.5, - adaptiveTimestep: true - }; - util.extend(this.options, this.defaultOptions); - this.timestep = 0.5; - this.layoutFailed = false; + this.boundingBox.top = this.top; + this.boundingBox.left = this.left; + this.boundingBox.right = this.left + this.width; + this.boundingBox.bottom = this.top + this.height; - this.bindEventListeners(); - } + if (this.options.label !== undefined && this.labelModule.size.width > 0) { + this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left); + this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width); + this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset); + } + } + }, { + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Image; + }(_CircleImageBase3['default']); - (0, _createClass3['default'])(PhysicsEngine, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this = this; + exports['default'] = Image; - this.body.emitter.on('initPhysics', function () { - _this.initPhysics(); - }); - this.body.emitter.on('_layoutFailed', function () { - _this.layoutFailed = true; - }); - this.body.emitter.on('resetPhysics', function () { - _this.stopSimulation();_this.ready = false; - }); - this.body.emitter.on('disablePhysics', function () { - _this.physicsEnabled = false;_this.stopSimulation(); - }); - this.body.emitter.on('restorePhysics', function () { - _this.setOptions(_this.options); - if (_this.ready === true) { - _this.startSimulation(); - } - }); - this.body.emitter.on('startSimulation', function () { - if (_this.ready === true) { - _this.startSimulation(); - } - }); - this.body.emitter.on('stopSimulation', function () { - _this.stopSimulation(); - }); - this.body.emitter.on('destroy', function () { - _this.stopSimulation(false); - _this.body.emitter.off(); - }); - // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed. - this.body.emitter.on("_dataChanged", function () { - // update shortcut lists - _this.updatePhysicsData(); - }); +/***/ }), +/* 195 */ +/***/ (function(module, exports, __webpack_require__) { - // debug: show forces - // this.body.emitter.on("afterDrawing", (ctx) => {this._drawForces(ctx);}); - } + 'use strict'; - /** - * set the physics options - * @param options - */ + Object.defineProperty(exports, "__esModule", { + value: true + }); - }, { - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - if (options === false) { - this.options.enabled = false; - this.physicsEnabled = false; - this.stopSimulation(); - } else { - this.physicsEnabled = true; - util.selectiveNotDeepExtend(['stabilization'], this.options, options); - util.mergeOptions(this.options, options, 'stabilization'); + var _getPrototypeOf = __webpack_require__(175); - if (options.enabled === undefined) { - this.options.enabled = true; - } + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - if (this.options.enabled === false) { - this.physicsEnabled = false; - this.stopSimulation(); - } + var _classCallCheck2 = __webpack_require__(134); - // set the timestep - this.timestep = this.options.timestep; - } - } - this.init(); - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - /** - * configure the engine. - */ + var _createClass2 = __webpack_require__(135); - }, { - key: 'init', - value: function init() { - var options; - if (this.options.solver === 'forceAtlas2Based') { - options = this.options.forceAtlas2Based; - this.nodesSolver = new _FA2BasedRepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _SpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _FA2BasedCentralGravitySolver2['default'](this.body, this.physicsBody, options); - } else if (this.options.solver === 'repulsion') { - options = this.options.repulsion; - this.nodesSolver = new _RepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _SpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _CentralGravitySolver2['default'](this.body, this.physicsBody, options); - } else if (this.options.solver === 'hierarchicalRepulsion') { - options = this.options.hierarchicalRepulsion; - this.nodesSolver = new _HierarchicalRepulsionSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _HierarchicalSpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _CentralGravitySolver2['default'](this.body, this.physicsBody, options); - } else { - // barnesHut - options = this.options.barnesHut; - this.nodesSolver = new _BarnesHutSolver2['default'](this.body, this.physicsBody, options); - this.edgesSolver = new _SpringSolver2['default'](this.body, this.physicsBody, options); - this.gravitySolver = new _CentralGravitySolver2['default'](this.body, this.physicsBody, options); - } + var _createClass3 = _interopRequireDefault(_createClass2); - this.modelOptions = options; - } + var _possibleConstructorReturn2 = __webpack_require__(178); - /** - * initialize the engine - */ + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - }, { - key: 'initPhysics', - value: function initPhysics() { - if (this.physicsEnabled === true && this.options.enabled === true) { - if (this.options.stabilization.enabled === true) { - this.stabilize(); - } else { - this.stabilized = false; - this.ready = true; - this.body.emitter.emit('fit', {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom - this.startSimulation(); - } - } else { - this.ready = true; - this.body.emitter.emit('fit'); - } - } + var _inherits2 = __webpack_require__(179); - /** - * Start the simulation - */ + var _inherits3 = _interopRequireDefault(_inherits2); - }, { - key: 'startSimulation', - value: function startSimulation() { - if (this.physicsEnabled === true && this.options.enabled === true) { - this.stabilized = false; + var _ShapeBase2 = __webpack_require__(190); - // when visible, adaptivity is disabled. - this.adaptiveTimestep = false; + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - // this sets the width of all nodes initially which could be required for the avoidOverlap - this.body.emitter.emit("_resizeNodes"); - if (this.viewFunction === undefined) { - this.viewFunction = this.simulationStep.bind(this); - this.body.emitter.on('initRedraw', this.viewFunction); - this.body.emitter.emit('_startRendering'); - } - } else { - this.body.emitter.emit('_redraw'); - } - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - /** - * Stop the simulation, force stabilization. - */ + var Square = function (_ShapeBase) { + (0, _inherits3['default'])(Square, _ShapeBase); - }, { - key: 'stopSimulation', - value: function stopSimulation() { - var emit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + function Square(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Square); + return (0, _possibleConstructorReturn3['default'])(this, (Square.__proto__ || (0, _getPrototypeOf2['default'])(Square)).call(this, options, body, labelModule)); + } - this.stabilized = true; - if (emit === true) { - this._emitStabilized(); - } - if (this.viewFunction !== undefined) { - this.body.emitter.off('initRedraw', this.viewFunction); - this.viewFunction = undefined; - if (emit === true) { - this.body.emitter.emit('_stopRendering'); - } - } + (0, _createClass3['default'])(Square, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'square', 2, x, y, selected, hover, values); } - - /** - * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized. - * - */ - }, { - key: 'simulationStep', - value: function simulationStep() { - // check if the physics have settled - var startTime = Date.now(); - this.physicsTick(); - var physicsTime = Date.now() - startTime; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Square; + }(_ShapeBase3['default']); - // run double speed if it is a little graph - if ((physicsTime < 0.4 * this.simulationInterval || this.runDoubleSpeed === true) && this.stabilized === false) { - this.physicsTick(); + exports['default'] = Square; - // this makes sure there is no jitter. The decision is taken once to run it at double speed. - this.runDoubleSpeed = true; - } +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { - if (this.stabilized === true) { - this.stopSimulation(); - } - } + 'use strict'; - /** - * trigger the stabilized event. - * @private - */ + Object.defineProperty(exports, "__esModule", { + value: true + }); - }, { - key: '_emitStabilized', - value: function _emitStabilized() { - var _this2 = this; + var _getPrototypeOf = __webpack_require__(175); - var amountOfIterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.stabilizationIterations; + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - if (this.stabilizationIterations > 1 || this.startedStabilization === true) { - setTimeout(function () { - _this2.body.emitter.emit('stabilized', { iterations: amountOfIterations }); - _this2.startedStabilization = false; - _this2.stabilizationIterations = 0; - }, 0); - } - } + var _classCallCheck2 = __webpack_require__(134); - /** - * A single simulation step (or 'tick') in the physics simulation - * - * @private - */ + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - }, { - key: 'physicsTick', - value: function physicsTick() { - // this is here to ensure that there is no start event when the network is already stable. - if (this.startedStabilization === false) { - this.body.emitter.emit('startStabilizing'); - this.startedStabilization = true; - } + var _createClass2 = __webpack_require__(135); - if (this.stabilized === false) { - // 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; + var _createClass3 = _interopRequireDefault(_createClass2); - // 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(); + var _possibleConstructorReturn2 = __webpack_require__(178); - // 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; + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - // since it's half the step, we do it twice. - this.calculateForces(); - this.moveNodes(); - this.calculateForces(); - this.moveNodes(); + var _inherits2 = __webpack_require__(179); - // 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(); - } + var _inherits3 = _interopRequireDefault(_inherits2); - // 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(); - } + var _ShapeBase2 = __webpack_require__(190); - // determine if the network has stabilzied - if (this.stabilized === true) { - this.revert(); - } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - this.stabilizationIterations++; - } - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - /** - * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time. - * - * @private - */ + var Star = function (_ShapeBase) { + (0, _inherits3['default'])(Star, _ShapeBase); + + function Star(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Star); + return (0, _possibleConstructorReturn3['default'])(this, (Star.__proto__ || (0, _getPrototypeOf2['default'])(Star)).call(this, options, body, labelModule)); + } + (0, _createClass3['default'])(Star, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'star', 4, x, y, selected, hover, values); + } }, { - key: 'updatePhysicsData', - value: function updatePhysicsData() { - this.physicsBody.forces = {}; - this.physicsBody.physicsNodeIndices = []; - this.physicsBody.physicsEdgeIndices = []; - var nodes = this.body.nodes; - var edges = this.body.edges; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Star; + }(_ShapeBase3['default']); - // get node indices for physics - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - if (nodes[nodeId].options.physics === true) { - this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id); - } - } - } + exports['default'] = Star; - // get edge indices for physics - for (var edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - if (edges[edgeId].options.physics === true) { - this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id); - } - } - } +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { - // get the velocity and the forces vector - for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) { - var _nodeId = this.physicsBody.physicsNodeIndices[i]; - this.physicsBody.forces[_nodeId] = { x: 0, y: 0 }; + 'use strict'; - // forces can be reset because they are recalculated. Velocities have to persist. - if (this.physicsBody.velocities[_nodeId] === undefined) { - this.physicsBody.velocities[_nodeId] = { x: 0, y: 0 }; - } - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - // clean deleted nodes from the velocity vector - for (var _nodeId2 in this.physicsBody.velocities) { - if (nodes[_nodeId2] === undefined) { - delete this.physicsBody.velocities[_nodeId2]; - } - } - } + var _getPrototypeOf = __webpack_require__(175); - /** - * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized. - */ + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - }, { - key: 'revert', - value: function revert() { - var nodeIds = (0, _keys2['default'])(this.previousStates); - var nodes = this.body.nodes; - var velocities = this.physicsBody.velocities; - this.referenceState = {}; + var _classCallCheck2 = __webpack_require__(134); - 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; - nodes[nodeId].y = this.previousStates[nodeId].y; - } - } else { - delete this.previousStates[nodeId]; - } - } - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - /** - * This compares the reference state to the current state - */ + var _createClass2 = __webpack_require__(135); - }, { - key: '_evaluateStepQuality', - value: function _evaluateStepQuality() { - var dx = void 0, - dy = void 0, - dpos = void 0; - var nodes = this.body.nodes; - var reference = this.referenceState; - var posThreshold = 0.3; + var _createClass3 = _interopRequireDefault(_createClass2); - 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; + var _possibleConstructorReturn2 = __webpack_require__(178); - dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - if (dpos > posThreshold) { - return false; - } - } - } - return true; - } + var _inherits2 = __webpack_require__(179); - /** - * move the nodes one timestep and check if they are stabilized - * @returns {boolean} - */ + var _inherits3 = _interopRequireDefault(_inherits2); - }, { - key: 'moveNodes', - value: function moveNodes() { - var nodeIndices = this.physicsBody.physicsNodeIndices; - var maxVelocity = this.options.maxVelocity ? this.options.maxVelocity : 1e9; - var maxNodeVelocity = 0; - var averageNodeVelocity = 0; + var _NodeBase2 = __webpack_require__(184); - // the velocity threshold (energy in the system) for the adaptivity toggle - var velocityAdaptiveThreshold = 5; + var _NodeBase3 = _interopRequireDefault(_NodeBase2); - 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 - maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity); - averageNodeVelocity += nodeVelocity; - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // evaluating the stabilized and adaptiveTimestepEnabled conditions - this.adaptiveTimestepEnabled = averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold; - this.stabilized = maxNodeVelocity < this.options.minVelocity; - } + var Text = function (_NodeBase) { + (0, _inherits3['default'])(Text, _NodeBase); - /** - * Perform the actual step - * - * @param nodeId - * @param maxVelocity - * @returns {number} - * @private - */ + function Text(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Text); - }, { - key: '_performStep', - value: function _performStep(nodeId, maxVelocity) { - var node = this.body.nodes[nodeId]; - var timestep = this.timestep; - var forces = this.physicsBody.forces; - var velocities = this.physicsBody.velocities; + var _this = (0, _possibleConstructorReturn3['default'])(this, (Text.__proto__ || (0, _getPrototypeOf2['default'])(Text)).call(this, options, body, labelModule)); - // store the state so we can revert - this.previousStates[nodeId] = { x: node.x, y: node.y, vx: velocities[nodeId].x, vy: velocities[nodeId].y }; + _this._setMargins(labelModule); + return _this; + } - if (node.options.fixed.x === false) { - var dx = this.modelOptions.damping * velocities[nodeId].x; // damping force - var ax = (forces[nodeId].x - dx) / node.options.mass; // acceleration - velocities[nodeId].x += ax * timestep; // velocity - velocities[nodeId].x = Math.abs(velocities[nodeId].x) > maxVelocity ? velocities[nodeId].x > 0 ? maxVelocity : -maxVelocity : velocities[nodeId].x; - node.x += velocities[nodeId].x * timestep; // position - } else { - forces[nodeId].x = 0; - velocities[nodeId].x = 0; - } - - if (node.options.fixed.y === false) { - var dy = this.modelOptions.damping * velocities[nodeId].y; // damping force - var ay = (forces[nodeId].y - dy) / node.options.mass; // acceleration - velocities[nodeId].y += ay * timestep; // velocity - velocities[nodeId].y = Math.abs(velocities[nodeId].y) > maxVelocity ? velocities[nodeId].y > 0 ? maxVelocity : -maxVelocity : velocities[nodeId].y; - node.y += velocities[nodeId].y * timestep; // position - } else { - forces[nodeId].y = 0; - velocities[nodeId].y = 0; + (0, _createClass3['default'])(Text, [{ + key: 'resize', + value: function resize(ctx, selected, hover) { + if (this.needsRefresh(selected, hover)) { + this.textSize = this.labelModule.getTextSize(ctx, selected, hover); + this.width = this.textSize.width + this.margin.right + this.margin.left; + this.height = this.textSize.height + this.margin.top + this.margin.bottom; + this.radius = 0.5 * this.width; } - - var totalVelocity = Math.sqrt(Math.pow(velocities[nodeId].x, 2) + Math.pow(velocities[nodeId].y, 2)); - return totalVelocity; } - - /** - * calculate the forces for one physics iteration. - */ - }, { - key: 'calculateForces', - value: function calculateForces() { - this.gravitySolver.solve(); - this.nodesSolver.solve(); - this.edgesSolver.solve(); - } - - /** - * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization - * because only the supportnodes for the smoothCurves have to settle. - * - * @private - */ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this.resize(ctx, selected, hover); + this.left = x - this.width / 2; + this.top = y - this.height / 2; - }, { - key: '_freezeNodes', - value: function _freezeNodes() { - var nodes = this.body.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (nodes[id].x && nodes[id].y) { - this.freezeCache[id] = { x: nodes[id].options.fixed.x, y: nodes[id].options.fixed.y }; - nodes[id].options.fixed.x = true; - nodes[id].options.fixed.y = true; - } - } - } - } + // draw shadow if enabled + this.enableShadow(ctx, values); + this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover); - /** - * Unfreezes the nodes that have been frozen by _freezeDefinedNodes. - * - * @private - */ + // disable shadows for other elements. + this.disableShadow(ctx, values); - }, { - key: '_restoreFrozenNodes', - value: function _restoreFrozenNodes() { - var nodes = this.body.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (this.freezeCache[id] !== undefined) { - nodes[id].options.fixed.x = this.freezeCache[id].x; - nodes[id].options.fixed.y = this.freezeCache[id].y; - } - } - } - this.freezeCache = {}; + this.updateBoundingBox(x, y, ctx, selected, hover); } + }, { + key: 'updateBoundingBox', + value: function updateBoundingBox(x, y, ctx, selected, hover) { + this.resize(ctx, selected, hover); - /** - * Find a stable position for all nodes - */ + this.left = x - this.width / 2; + this.top = y - this.height / 2; + this.boundingBox.top = this.top; + this.boundingBox.left = this.left; + this.boundingBox.right = this.left + this.width; + this.boundingBox.bottom = this.top + this.height; + } }, { - key: 'stabilize', - value: function stabilize() { - var _this3 = this; + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); + } + }]); + return Text; + }(_NodeBase3['default']); - var iterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.stabilization.iterations; + exports['default'] = Text; - if (typeof iterations !== 'number') { - console.log('The stabilize method needs a numeric amount of iterations. Switching to default: ', this.options.stabilization.iterations); - iterations = this.options.stabilization.iterations; - } +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { - if (this.physicsBody.physicsNodeIndices.length === 0) { - this.ready = true; - return; - } + 'use strict'; - // enable adaptive timesteps - this.adaptiveTimestep = true && this.options.adaptiveTimestep; + Object.defineProperty(exports, "__esModule", { + value: true + }); - // this sets the width of all nodes initially which could be required for the avoidOverlap - this.body.emitter.emit("_resizeNodes"); + var _getPrototypeOf = __webpack_require__(175); - // stop the render loop - this.stopSimulation(); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - // set stabilze to false - this.stabilized = false; + var _classCallCheck2 = __webpack_require__(134); - // block redraw requests - this.body.emitter.emit('_blockRedraw'); - this.targetIterations = iterations; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // start the stabilization - if (this.options.stabilization.onlyDynamicEdges === true) { - this._freezeNodes(); - } - this.stabilizationIterations = 0; + var _createClass2 = __webpack_require__(135); - setTimeout(function () { - return _this3._stabilizationBatch(); - }, 0); - } + var _createClass3 = _interopRequireDefault(_createClass2); - /** - * One batch of stabilization - * @private - */ + var _possibleConstructorReturn2 = __webpack_require__(178); - }, { - key: '_stabilizationBatch', - value: function _stabilizationBatch() { - // this is here to ensure that there is at least one start event. - if (this.startedStabilization === false) { - this.body.emitter.emit('startStabilizing'); - this.startedStabilization = true; - } + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var count = 0; - while (this.stabilized === false && count < this.options.stabilization.updateInterval && this.stabilizationIterations < this.targetIterations) { - this.physicsTick(); - count++; - } + var _inherits2 = __webpack_require__(179); - if (this.stabilized === false && this.stabilizationIterations < this.targetIterations) { - this.body.emitter.emit('stabilizationProgress', { iterations: this.stabilizationIterations, total: this.targetIterations }); - setTimeout(this._stabilizationBatch.bind(this), 0); - } else { - this._finalizeStabilization(); - } - } + var _inherits3 = _interopRequireDefault(_inherits2); - /** - * Wrap up the stabilization, fit and emit the events. - * @private - */ + var _ShapeBase2 = __webpack_require__(190); - }, { - key: '_finalizeStabilization', - value: function _finalizeStabilization() { - this.body.emitter.emit('_allowRedraw'); - if (this.options.stabilization.fit === true) { - this.body.emitter.emit('fit'); - } + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - if (this.options.stabilization.onlyDynamicEdges === true) { - this._restoreFrozenNodes(); - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - this.body.emitter.emit('stabilizationIterationsDone'); - this.body.emitter.emit('_requestRedraw'); + var Triangle = function (_ShapeBase) { + (0, _inherits3['default'])(Triangle, _ShapeBase); - if (this.stabilized === true) { - this._emitStabilized(); - } else { - this.startSimulation(); - } + function Triangle(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, Triangle); + return (0, _possibleConstructorReturn3['default'])(this, (Triangle.__proto__ || (0, _getPrototypeOf2['default'])(Triangle)).call(this, options, body, labelModule)); + } - this.ready = true; + (0, _createClass3['default'])(Triangle, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'triangle', 3, x, y, selected, hover, values); } }, { - key: '_drawForces', - value: function _drawForces(ctx) { - for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) { - var node = this.body.nodes[this.physicsBody.physicsNodeIndices[i]]; - var force = this.physicsBody.forces[this.physicsBody.physicsNodeIndices[i]]; - var factor = 20; - var colorFactor = 0.03; - var forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2)); - - var size = Math.min(Math.max(5, forceSize), 15); - var arrowSize = 3 * size; - - var color = util.HSVToHex((180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360, 1, 1); - - ctx.lineWidth = size; - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(node.x, node.y); - ctx.lineTo(node.x + factor * force.x, node.y + factor * force.y); - ctx.stroke(); - - var angle = Math.atan2(force.y, force.x); - ctx.fillStyle = color; - ctx.arrowEndpoint(node.x + factor * force.x + Math.cos(angle) * arrowSize, node.y + factor * force.y + Math.sin(angle) * arrowSize, angle, arrowSize); - ctx.fill(); - } + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); } }]); - return PhysicsEngine; - }(); + return Triangle; + }(_ShapeBase3['default']); - exports['default'] = PhysicsEngine; + exports['default'] = Triangle; -/***/ }, -/* 205 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _getPrototypeOf = __webpack_require__(175); + + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + var _possibleConstructorReturn2 = __webpack_require__(178); - var BarnesHutSolver = function () { - function BarnesHutSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, BarnesHutSolver); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - this.body = body; - this.physicsBody = physicsBody; - this.barnesHutTree; - this.setOptions(options); - this.randomSeed = 5; + var _inherits2 = __webpack_require__(179); - // debug: show grid - //this.body.emitter.on("afterDrawing", (ctx) => {this._debug(ctx,'#ff0000')}) - } + var _inherits3 = _interopRequireDefault(_inherits2); - (0, _createClass3["default"])(BarnesHutSolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; - this.thetaInversed = 1 / this.options.theta; - this.overlapAvoidanceFactor = 1 - Math.max(0, Math.min(1, this.options.avoidOverlap)); // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius - } - }, { - key: "seededRandom", - value: function seededRandom() { - var x = Math.sin(this.randomSeed++) * 10000; - return x - Math.floor(x); - } + var _ShapeBase2 = __webpack_require__(190); - /** - * This function calculates the forces the nodes apply on each other based on a gravitational model. - * The Barnes Hut method is used to speed up this N-body simulation. - * - * @private - */ + var _ShapeBase3 = _interopRequireDefault(_ShapeBase2); - }, { - key: "solve", - value: function solve() { - if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) { - var node = void 0; - var nodes = this.body.nodes; - var nodeIndices = this.physicsBody.physicsNodeIndices; - var nodeCount = nodeIndices.length; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // create the tree - var barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices); + var TriangleDown = function (_ShapeBase) { + (0, _inherits3['default'])(TriangleDown, _ShapeBase); - // for debugging - this.barnesHutTree = barnesHutTree; + function TriangleDown(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, TriangleDown); + return (0, _possibleConstructorReturn3['default'])(this, (TriangleDown.__proto__ || (0, _getPrototypeOf2['default'])(TriangleDown)).call(this, options, body, labelModule)); + } - // place the nodes one by one recursively - for (var i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - // starting with root is irrelevant, it never passes the BarnesHutSolver condition - this._getForceContribution(barnesHutTree.root.children.NW, node); - this._getForceContribution(barnesHutTree.root.children.NE, node); - this._getForceContribution(barnesHutTree.root.children.SW, node); - this._getForceContribution(barnesHutTree.root.children.SE, node); - } - } - } + (0, _createClass3['default'])(TriangleDown, [{ + key: 'draw', + value: function draw(ctx, x, y, selected, hover, values) { + this._drawShape(ctx, 'triangleDown', 3, x, y, selected, hover, values); } - - /** - * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. - * If a region contains a single node, we check if it is not itself, then we apply the force. - * - * @param parentBranch - * @param node - * @private - */ - }, { - key: "_getForceContribution", - value: function _getForceContribution(parentBranch, node) { - // we get no force contribution from an empty region - if (parentBranch.childrenCount > 0) { - var dx = void 0, - dy = void 0, - distance = void 0; - - // get the distance from the center of mass to the node. - dx = parentBranch.centerOfMass.x - node.x; - dy = parentBranch.centerOfMass.y - node.y; - distance = Math.sqrt(dx * dx + dy * dy); - - // BarnesHutSolver condition - // original condition : s/d < theta = passed === d/s > 1/theta = passed - // calcSize = 1/s --> d * 1/s > 1/theta = passed - if (distance * parentBranch.calcSize > this.thetaInversed) { - this._calculateForces(distance, dx, dy, node, parentBranch); - } else { - // Did not pass the condition, go into children if available - if (parentBranch.childrenCount === 4) { - this._getForceContribution(parentBranch.children.NW, node); - this._getForceContribution(parentBranch.children.NE, node); - this._getForceContribution(parentBranch.children.SW, node); - this._getForceContribution(parentBranch.children.SE, node); - } else { - // parentBranch must have only one node, if it was empty we wouldnt be here - if (parentBranch.children.data.id != node.id) { - // if it is not self - this._calculateForces(distance, dx, dy, node, parentBranch); - } - } - } - } + key: 'distanceToBorder', + value: function distanceToBorder(ctx, angle) { + return this._distanceToBorder(ctx, angle); } + }]); + return TriangleDown; + }(_ShapeBase3['default']); - /** - * Calculate the forces based on the distance. - * - * @param distance - * @param dx - * @param dy - * @param node - * @param parentBranch - * @private - */ - - }, { - key: "_calculateForces", - value: function _calculateForces(distance, dx, dy, node, parentBranch) { - if (distance === 0) { - distance = 0.1; - dx = distance; - } + exports['default'] = TriangleDown; - if (this.overlapAvoidanceFactor < 1 && node.shape.radius) { - distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius); - } +/***/ }), +/* 200 */ +/***/ (function(module, exports, __webpack_require__) { - // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines - // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce - var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass / Math.pow(distance, 3); - var fx = dx * gravityForce; - var fy = dy * gravityForce; + 'use strict'; - this.physicsBody.forces[node.id].x += fx; - this.physicsBody.forces[node.id].y += fy; - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - /** - * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. - * - * @param nodes - * @param nodeIndices - * @private - */ + var _classCallCheck2 = __webpack_require__(134); - }, { - key: "_formBarnesHutTree", - value: function _formBarnesHutTree(nodes, nodeIndices) { - var node = void 0; - var nodeCount = nodeIndices.length; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var minX = nodes[nodeIndices[0]].x; - var minY = nodes[nodeIndices[0]].y; - var maxX = nodes[nodeIndices[0]].x; - var maxY = nodes[nodeIndices[0]].y; + var _createClass2 = __webpack_require__(135); - // get the range of the nodes - for (var i = 1; i < nodeCount; i++) { - var x = nodes[nodeIndices[i]].x; - var y = nodes[nodeIndices[i]].y; - if (nodes[nodeIndices[i]].options.mass > 0) { - if (x < minX) { - minX = x; - } - if (x > maxX) { - maxX = x; - } - if (y < minY) { - minY = y; - } - if (y > maxY) { - maxY = y; - } - } - } - // make the range a square - var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y - if (sizeDiff > 0) { - minY -= 0.5 * sizeDiff; - maxY += 0.5 * sizeDiff; - } // xSize > ySize - else { - minX += 0.5 * sizeDiff; - maxX -= 0.5 * sizeDiff; - } // xSize < ySize + var _createClass3 = _interopRequireDefault(_createClass2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var minimumTreeSize = 1e-5; - var rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX)); - var halfRootSize = 0.5 * rootSize; - var centerX = 0.5 * (minX + maxX), - centerY = 0.5 * (minY + maxY); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(89); + var DataView = __webpack_require__(93); - // construct the barnesHutTree - var barnesHutTree = { - root: { - centerOfMass: { x: 0, y: 0 }, - mass: 0, - range: { - minX: centerX - halfRootSize, maxX: centerX + halfRootSize, - minY: centerY - halfRootSize, maxY: centerY + halfRootSize - }, - size: rootSize, - calcSize: 1 / rootSize, - children: { data: null }, - maxWidth: 0, - level: 0, - childrenCount: 4 - } - }; - this._splitBranch(barnesHutTree.root); + var Edge = __webpack_require__(201)['default']; + var Label = __webpack_require__(169)['default']; - // place the nodes one by one recursively - for (var _i = 0; _i < nodeCount; _i++) { - node = nodes[nodeIndices[_i]]; - if (node.options.mass > 0) { - this._placeInTree(barnesHutTree.root, node); - } - } + var EdgesHandler = function () { + function EdgesHandler(body, images, groups) { + var _this = this; - // make global - return barnesHutTree; - } + (0, _classCallCheck3['default'])(this, EdgesHandler); - /** - * this updates the mass of a branch. this is increased by adding a node. - * - * @param parentBranch - * @param node - * @private - */ + this.body = body; + this.images = images; + this.groups = groups; - }, { - key: "_updateBranchMass", - value: function _updateBranchMass(parentBranch, node) { - var totalMass = parentBranch.mass + node.options.mass; - var totalMassInv = 1 / totalMass; + // create the edge API in the body container + this.body.functions.createEdge = this.create.bind(this); - parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; - parentBranch.centerOfMass.x *= totalMassInv; + this.edgesListeners = { + add: function add(event, params) { + _this.add(params.items); + }, + update: function update(event, params) { + _this.update(params.items); + }, + remove: function remove(event, params) { + _this.remove(params.items); + } + }; - parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; - parentBranch.centerOfMass.y *= totalMassInv; + this.options = {}; + this.defaultOptions = { + arrows: { + to: { enabled: false, scaleFactor: 1, type: 'arrow' }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1} + middle: { enabled: false, scaleFactor: 1, type: 'arrow' }, + from: { enabled: false, scaleFactor: 1, type: 'arrow' } + }, + arrowStrikethrough: true, + color: { + color: '#848484', + highlight: '#848484', + hover: '#848484', + inherit: 'from', + opacity: 1.0 + }, + dashes: false, + font: { + color: '#343434', + size: 14, // px + face: 'arial', + background: 'none', + strokeWidth: 2, // px + strokeColor: '#ffffff', + align: 'horizontal', + multi: false, + vadjust: 0, + bold: { + mod: 'bold' + }, + boldital: { + mod: 'bold italic' + }, + ital: { + mod: 'italic' + }, + mono: { + mod: '', + size: 15, // px + face: 'courier new', + vadjust: 2 + } + }, + hidden: false, + hoverWidth: 1.5, + label: undefined, + labelHighlightBold: true, + length: undefined, + physics: true, + scaling: { + min: 1, + max: 15, + label: { + enabled: true, + min: 14, + max: 30, + maxVisible: 30, + drawThreshold: 5 + }, + customScalingFunction: function customScalingFunction(min, max, total, value) { + if (max === min) { + return 0.5; + } else { + var scale = 1 / (max - min); + return Math.max(0, (value - min) * scale); + } + } + }, + selectionWidth: 1.5, + selfReferenceSize: 20, + shadow: { + enabled: false, + color: 'rgba(0,0,0,0.5)', + size: 10, + x: 5, + y: 5 + }, + smooth: { + enabled: true, + type: "dynamic", + forceDirection: 'none', + roundness: 0.5 + }, + title: undefined, + width: 1, + value: undefined + }; - parentBranch.mass = totalMass; - var biggestSize = Math.max(Math.max(node.height, node.radius), node.width); - parentBranch.maxWidth = parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth; - } + util.extend(this.options, this.defaultOptions); - /** - * determine in which branch the node will be placed. - * - * @param parentBranch - * @param node - * @param skipMassUpdate - * @private - */ + this.bindEventListeners(); + } + + (0, _createClass3['default'])(EdgesHandler, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this2 = this; + + // this allows external modules to force all dynamic curves to turn static. + this.body.emitter.on("_forceDisableDynamicCurves", function (type) { + if (type === 'dynamic') { + type = 'continuous'; + } + var emitChange = false; + for (var edgeId in _this2.body.edges) { + if (_this2.body.edges.hasOwnProperty(edgeId)) { + var edge = _this2.body.edges[edgeId]; + var edgeData = _this2.body.data.edges._data[edgeId]; + + // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined. + // this is because a change in the global would not affect these curves. + if (edgeData !== undefined) { + var edgeOptions = edgeData.smooth; + if (edgeOptions !== undefined) { + if (edgeOptions.enabled === true && edgeOptions.type === 'dynamic') { + if (type === undefined) { + edge.setOptions({ smooth: false }); + } else { + edge.setOptions({ smooth: { type: type } }); + } + emitChange = true; + } + } + } + } + } + if (emitChange === true) { + _this2.body.emitter.emit("_dataChanged"); + } + }); + + // this is called when options of EXISTING nodes or edges have changed. + this.body.emitter.on("_dataUpdated", function () { + _this2.reconnectEdges(); + }); + // refresh the edges. Used when reverting from hierarchical layout + this.body.emitter.on("refreshEdges", this.refresh.bind(this)); + this.body.emitter.on("refresh", this.refresh.bind(this)); + this.body.emitter.on("destroy", function () { + util.forEach(_this2.edgesListeners, function (callback, event) { + if (_this2.body.data.edges) _this2.body.data.edges.off(event, callback); + }); + delete _this2.body.functions.createEdge; + delete _this2.edgesListeners.add; + delete _this2.edgesListeners.update; + delete _this2.edgesListeners.remove; + delete _this2.edgesListeners; + }); + } }, { - key: "_placeInTree", - value: function _placeInTree(parentBranch, node, skipMassUpdate) { - if (skipMassUpdate != true || skipMassUpdate === undefined) { - // update the mass of the branch. - this._updateBranchMass(parentBranch, node); - } + key: 'setOptions', + value: function setOptions(options) { + this.edgeOptions = options; + if (options !== undefined) { + // use the parser from the Edge class to fill in all shorthand notations + Edge.parseOptions(this.options, options); - if (parentBranch.children.NW.range.maxX > node.x) { - // in NW or SW - if (parentBranch.children.NW.range.maxY > node.y) { - // in NW - this._placeInRegion(parentBranch, node, "NW"); - } else { - // in SW - this._placeInRegion(parentBranch, node, "SW"); + // update smooth settings in all edges + var dataChanged = false; + if (options.smooth !== undefined) { + for (var edgeId in this.body.edges) { + if (this.body.edges.hasOwnProperty(edgeId)) { + dataChanged = this.body.edges[edgeId].updateEdgeType() || dataChanged; + } + } } - } else { - // in NE or SE - if (parentBranch.children.NW.range.maxY > node.y) { - // in NE - this._placeInRegion(parentBranch, node, "NE"); - } else { - // in SE - this._placeInRegion(parentBranch, node, "SE"); + + // update fonts in all edges + if (options.font !== undefined) { + // use the parser from the Label class to fill in all shorthand notations + Label.parseOptions(this.options.font, options); + for (var _edgeId in this.body.edges) { + if (this.body.edges.hasOwnProperty(_edgeId)) { + this.body.edges[_edgeId].updateLabelModule(); + } + } + } + + // update the state of the variables if needed + if (options.hidden !== undefined || options.physics !== undefined || dataChanged === true) { + this.body.emitter.emit('_dataChanged'); } } } /** - * actually place the node in a region (or branch) - * - * @param parentBranch - * @param node - * @param region + * Load edges by reading the data table + * @param {Array | DataSet | DataView} edges The data containing the edges. + * @private * @private */ }, { - key: "_placeInRegion", - value: function _placeInRegion(parentBranch, node, region) { - switch (parentBranch.children[region].childrenCount) { - case 0: - // place node here - parentBranch.children[region].children.data = node; - parentBranch.children[region].childrenCount = 1; - this._updateBranchMass(parentBranch.children[region], node); - break; - case 1: - // convert into children - // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) - // we move one node a little bit and we do not put it in the tree. - if (parentBranch.children[region].children.data.x === node.x && parentBranch.children[region].children.data.y === node.y) { - node.x += this.seededRandom(); - node.y += this.seededRandom(); - } else { - this._splitBranch(parentBranch.children[region]); - this._placeInTree(parentBranch.children[region], node); - } - break; - case 4: - // place in branch - this._placeInTree(parentBranch.children[region], node); - break; + key: 'setData', + value: function setData(edges) { + var _this3 = this; + + var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var oldEdgesData = this.body.data.edges; + + if (edges instanceof DataSet || edges instanceof DataView) { + this.body.data.edges = edges; + } else if (Array.isArray(edges)) { + this.body.data.edges = new DataSet(); + this.body.data.edges.add(edges); + } else if (!edges) { + this.body.data.edges = new DataSet(); + } else { + throw new TypeError('Array or DataSet expected'); + } + + // TODO: is this null or undefined or false? + if (oldEdgesData) { + // unsubscribe from old dataset + util.forEach(this.edgesListeners, function (callback, event) { + oldEdgesData.off(event, callback); + }); + } + + // remove drawn edges + this.body.edges = {}; + + // TODO: is this null or undefined or false? + if (this.body.data.edges) { + // subscribe to new dataset + util.forEach(this.edgesListeners, function (callback, event) { + _this3.body.data.edges.on(event, callback); + }); + + // draw all new nodes + var ids = this.body.data.edges.getIds(); + this.add(ids, true); + } + + if (doNotEmit === false) { + this.body.emitter.emit("_dataChanged"); } } /** - * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch - * after the split is complete. - * - * @param parentBranch + * Add edges + * @param {Number[] | String[]} ids * @private */ }, { - key: "_splitBranch", - value: function _splitBranch(parentBranch) { - // if the branch is shaded with a node, replace the node in the new subset. - var containedNode = null; - if (parentBranch.childrenCount === 1) { - containedNode = parentBranch.children.data; - parentBranch.mass = 0; - parentBranch.centerOfMass.x = 0; - parentBranch.centerOfMass.y = 0; + key: 'add', + value: function add(ids) { + var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var edges = this.body.edges; + var edgesData = this.body.data.edges; + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + + var oldEdge = edges[id]; + if (oldEdge) { + oldEdge.disconnect(); + } + + var data = edgesData.get(id, { "showInternalIds": true }); + edges[id] = this.create(data); } - parentBranch.childrenCount = 4; - parentBranch.children.data = null; - this._insertRegion(parentBranch, "NW"); - this._insertRegion(parentBranch, "NE"); - this._insertRegion(parentBranch, "SW"); - this._insertRegion(parentBranch, "SE"); - if (containedNode != null) { - this._placeInTree(parentBranch, containedNode); + if (doNotEmit === false) { + this.body.emitter.emit("_dataChanged"); } } /** - * This function subdivides the region into four new segments. - * Specifically, this inserts a single new segment. - * It fills the children section of the parentBranch - * - * @param parentBranch - * @param region - * @param parentRange + * Update existing edges, or create them when not yet existing + * @param {Number[] | String[]} ids * @private */ }, { - key: "_insertRegion", - value: function _insertRegion(parentBranch, region) { - var minX = void 0, - maxX = void 0, - minY = void 0, - maxY = void 0; - var childSize = 0.5 * parentBranch.size; - switch (region) { - case "NW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "NE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "SW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - case "SE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; + key: 'update', + value: function update(ids) { + var edges = this.body.edges; + var edgesData = this.body.data.edges; + var dataChanged = false; + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = edgesData.get(id); + var edge = edges[id]; + if (edge !== undefined) { + // update edge + edge.disconnect(); + dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed. + edge.connect(); + } else { + // create edge + this.body.edges[id] = this.create(data); + dataChanged = true; + } } - parentBranch.children[region] = { - centerOfMass: { x: 0, y: 0 }, - mass: 0, - range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY }, - size: 0.5 * parentBranch.size, - calcSize: 2 * parentBranch.calcSize, - children: { data: null }, - maxWidth: 0, - level: parentBranch.level + 1, - childrenCount: 0 - }; + if (dataChanged === true) { + this.body.emitter.emit("_dataChanged"); + } else { + this.body.emitter.emit("_dataUpdated"); + } } - //--------------------------- DEBUGGING BELOW ---------------------------// - - /** - * This function is for debugging purposed, it draws the tree. - * - * @param ctx - * @param color + * Remove existing edges. Non existing ids will be ignored + * @param {Number[] | String[]} ids * @private */ }, { - key: "_debug", - value: function _debug(ctx, color) { - if (this.barnesHutTree !== undefined) { - - ctx.lineWidth = 1; + key: 'remove', + value: function remove(ids) { + var edges = this.body.edges; + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var edge = edges[id]; + if (edge !== undefined) { + edge.cleanup(); + edge.disconnect(); + delete edges[id]; + } + } - this._drawBranch(this.barnesHutTree.root, ctx, color); + this.body.emitter.emit("_dataChanged"); + } + }, { + key: 'refresh', + value: function refresh() { + var edges = this.body.edges; + for (var edgeId in edges) { + var edge = undefined; + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + } + var data = this.body.data.edges._data[edgeId]; + if (edge !== undefined && data !== undefined) { + edge.setOptions(data); + } } } + }, { + key: 'create', + value: function create(properties) { + return new Edge(properties, this.body, this.options, this.defaultOptions, this.edgeOptions); + } /** - * This function is for debugging purposes. It draws the branches recursively. - * - * @param branch - * @param ctx - * @param color + * Reconnect all edges * @private */ }, { - key: "_drawBranch", - value: function _drawBranch(branch, ctx, color) { - if (color === undefined) { - color = "#FF0000"; - } + key: 'reconnectEdges', + value: function reconnectEdges() { + var id; + var nodes = this.body.nodes; + var edges = this.body.edges; - if (branch.childrenCount === 4) { - this._drawBranch(branch.children.NW, ctx); - this._drawBranch(branch.children.NE, ctx); - this._drawBranch(branch.children.SE, ctx); - this._drawBranch(branch.children.SW, ctx); + for (id in nodes) { + if (nodes.hasOwnProperty(id)) { + nodes[id].edges = []; + } } - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(branch.range.minX, branch.range.minY); - ctx.lineTo(branch.range.maxX, branch.range.minY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX, branch.range.minY); - ctx.lineTo(branch.range.maxX, branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX, branch.range.maxY); - ctx.lineTo(branch.range.minX, branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.minX, branch.range.maxY); - ctx.lineTo(branch.range.minX, branch.range.minY); - ctx.stroke(); - /* - if (branch.mass > 0) { - ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); - ctx.stroke(); - } - */ + for (id in edges) { + if (edges.hasOwnProperty(id)) { + var edge = edges[id]; + edge.from = null; + edge.to = null; + edge.connect(); + } + } + } + }, { + key: 'getConnectedNodes', + value: function getConnectedNodes(edgeId) { + var nodeList = []; + if (this.body.edges[edgeId] !== undefined) { + var edge = this.body.edges[edgeId]; + if (edge.fromId !== undefined) { + nodeList.push(edge.fromId); + } + if (edge.toId !== undefined) { + nodeList.push(edge.toId); + } + } + return nodeList; } }]); - return BarnesHutSolver; + return EdgesHandler; }(); - exports["default"] = BarnesHutSolver; + exports['default'] = EdgesHandler; -/***/ }, -/* 206 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); + var _stringify = __webpack_require__(90); - var _createClass3 = _interopRequireDefault(_createClass2); + var _stringify2 = _interopRequireDefault(_stringify); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + var _create = __webpack_require__(55); - var RepulsionSolver = function () { - function RepulsionSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, RepulsionSolver); + var _create2 = _interopRequireDefault(_create); - this.body = body; - this.physicsBody = physicsBody; - this.setOptions(options); - } + var _typeof2 = __webpack_require__(62); - (0, _createClass3["default"])(RepulsionSolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; - } - /** - * Calculate the forces the nodes apply on each other based on a repulsion field. - * This field is linearly approximated. - * - * @private - */ + var _typeof3 = _interopRequireDefault(_typeof2); - }, { - key: "solve", - value: function solve() { - var dx, dy, distance, fx, fy, repulsingForce, node1, node2; + var _classCallCheck2 = __webpack_require__(134); - var nodes = this.body.nodes; - var nodeIndices = this.physicsBody.physicsNodeIndices; - var forces = this.physicsBody.forces; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // repulsing forces between nodes - var nodeDistance = this.options.nodeDistance; + var _createClass2 = __webpack_require__(135); - // approximation constants - var a = -2 / 3 / nodeDistance; - var b = 4 / 3; + var _createClass3 = _interopRequireDefault(_createClass2); - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j - for (var i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (var j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); + var util = __webpack_require__(1); - // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping. - if (distance === 0) { - distance = 0.1 * Math.random(); - dx = distance; - } + var Label = __webpack_require__(169)['default']; + var CubicBezierEdge = __webpack_require__(202)['default']; + var BezierEdgeDynamic = __webpack_require__(206)['default']; + var BezierEdgeStatic = __webpack_require__(207)['default']; + var StraightEdge = __webpack_require__(208)['default']; - if (distance < 2 * nodeDistance) { - if (distance < 0.5 * nodeDistance) { - repulsingForce = 1.0; - } else { - repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness)) - } - repulsingForce = repulsingForce / distance; + /** + * @class Edge + * + * A edge connects two nodes + * @param {Object} properties Object with options. Must contain + * At least options from and to. + * Available options: from (number), + * to (number), label (string, color (string), + * width (number), style (string), + * length (number), title (string) + * @param {Network} network A Network object, used to find and edge to + * nodes. + * @param {Object} constants An object with default values for + * example for the color + */ - fx = dx * repulsingForce; - fy = dy * repulsingForce; + var Edge = function () { + function Edge(options, body, globalOptions, defaultOptions, edgeOptions) { + (0, _classCallCheck3['default'])(this, Edge); - forces[node1.id].x -= fx; - forces[node1.id].y -= fy; - forces[node2.id].x += fx; - forces[node2.id].y += fy; - } - } - } + if (body === undefined) { + throw "No body provided"; } - }]); - return RepulsionSolver; - }(); + this.options = util.bridgeObject(globalOptions); + this.globalOptions = globalOptions; + this.defaultOptions = defaultOptions; + this.edgeOptions = edgeOptions; + this.body = body; - exports["default"] = RepulsionSolver; + // initialize variables + this.id = undefined; + this.fromId = undefined; + this.toId = undefined; + this.selected = false; + this.hover = false; + this.labelDirty = true; -/***/ }, -/* 207 */ -/***/ function(module, exports, __webpack_require__) { + this.baseWidth = this.options.width; + this.baseFontSize = this.options.font.size; - "use strict"; + this.from = undefined; // a node + this.to = undefined; // a node - Object.defineProperty(exports, "__esModule", { - value: true - }); + this.edgeType = undefined; - var _classCallCheck2 = __webpack_require__(119); + this.connected = false; - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + this.labelModule = new Label(this.body, this.options, true /* It's an edge label */); + this.setOptions(options); + } - var _createClass2 = __webpack_require__(120); + /** + * Set or overwrite options for the edge + * @param {Object} options an object with options + * @param doNotEmit + */ - var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + (0, _createClass3['default'])(Edge, [{ + key: 'setOptions', + value: function setOptions(options) { + if (!options) { + return; + } - var HierarchicalRepulsionSolver = function () { - function HierarchicalRepulsionSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, HierarchicalRepulsionSolver); + Edge.parseOptions(this.options, options, true, this.globalOptions); - this.body = body; - this.physicsBody = physicsBody; - this.setOptions(options); - } + if (options.id !== undefined) { + this.id = options.id; + } + if (options.from !== undefined) { + this.fromId = options.from; + } + if (options.to !== undefined) { + this.toId = options.to; + } + if (options.title !== undefined) { + this.title = options.title; + } + if (options.value !== undefined) { + options.value = parseFloat(options.value); + } - (0, _createClass3["default"])(HierarchicalRepulsionSolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; - } + this.choosify(options); - /** - * Calculate the forces the nodes apply on each other based on a repulsion field. - * This field is linearly approximated. - * - * @private - */ + // update label Module + this.updateLabelModule(options); + this.labelModule.propagateFonts(this.edgeOptions, options, this.defaultOptions); - }, { - key: "solve", - value: function solve() { - var dx, dy, distance, fx, fy, repulsingForce, node1, node2, i, j; + var dataChanged = this.updateEdgeType(); - var nodes = this.body.nodes; - var nodeIndices = this.physicsBody.physicsNodeIndices; - var forces = this.physicsBody.forces; + // if anything has been updates, reset the selection width and the hover width + this._setInteractionWidths(); - // repulsing forces between nodes - var nodeDistance = this.options.nodeDistance; + // A node is connected when it has a from and to node that both exist in the network.body.nodes. + this.connect(); - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; + if (options.hidden !== undefined || options.physics !== undefined) { + dataChanged = true; + } - // nodes only affect nodes on their level - if (node1.level === node2.level) { - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); + return dataChanged; + } + }, { + key: 'choosify', + value: function choosify(options) { + this.chooser = true; - var steepness = 0.05; - if (distance < nodeDistance) { - repulsingForce = -Math.pow(steepness * distance, 2) + Math.pow(steepness * nodeDistance, 2); - } else { - repulsingForce = 0; + var pile = [options, this.options, this.edgeOptions, this.defaultOptions]; + + var chosen = util.topMost(pile, 'chosen'); + if (typeof chosen === 'boolean') { + this.chooser = chosen; + } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') { + var chosenEdge = util.topMost(pile, ['chosen', 'edge']); + if (typeof chosenEdge === 'boolean' || typeof chosenEdge === 'function') { + this.chooser = chosenEdge; + } + } + } + }, { + key: 'getFormattingValues', + value: function getFormattingValues() { + var toArrow = this.options.arrows.to === true || this.options.arrows.to.enabled === true; + var fromArrow = this.options.arrows.from === true || this.options.arrows.from.enabled === true; + var middleArrow = this.options.arrows.middle === true || this.options.arrows.middle.enabled === true; + var inheritsColor = this.options.color.inherit; + var values = { + toArrow: toArrow, + toArrowScale: this.options.arrows.to.scaleFactor, + toArrowType: this.options.arrows.to.type, + middleArrow: middleArrow, + middleArrowScale: this.options.arrows.middle.scaleFactor, + middleArrowType: this.options.arrows.middle.type, + fromArrow: fromArrow, + fromArrowScale: this.options.arrows.from.scaleFactor, + fromArrowType: this.options.arrows.from.type, + arrowStrikethrough: this.options.arrowStrikethrough, + color: inheritsColor ? undefined : this.options.color.color, + inheritsColor: inheritsColor, + opacity: this.options.color.opacity, + hidden: this.options.hidden, + length: this.options.length, + shadow: this.options.shadow.enabled, + shadowColor: this.options.shadow.color, + shadowSize: this.options.shadow.size, + shadowX: this.options.shadow.x, + shadowY: this.options.shadow.y, + dashes: this.options.dashes, + width: this.options.width + }; + if (this.selected || this.hover) { + if (this.chooser === true) { + if (this.selected) { + var selectedWidth = this.options.selectionWidth; + if (typeof selectedWidth === 'function') { + values.width = selectedWidth(values.width); + } else if (typeof selectedWidth === 'number') { + values.width += selectedWidth; } - // normalize force with - if (distance === 0) { - distance = 0.01; - } else { - repulsingForce = repulsingForce / distance; + values.width = Math.max(values.width, 0.3 / this.body.view.scale); + values.color = this.options.color.highlight; + values.shadow = this.options.shadow.enabled; + } else if (this.hover) { + var hoverWidth = this.options.hoverWidth; + if (typeof hoverWidth === 'function') { + values.width = hoverWidth(values.width); + } else if (typeof hoverWidth === 'number') { + values.width += hoverWidth; + } + values.width = Math.max(values.width, 0.3 / this.body.view.scale); + values.color = this.options.color.hover; + values.shadow = this.options.shadow.enabled; + } + } else if (typeof this.chooser === 'function') { + this.chooser(values, this.options.id, this.selected, this.hover); + if (values.color !== undefined) { + values.inheritsColor = false; + } + if (values.shadow === false) { + if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) { + values.shadow = true; } - fx = dx * repulsingForce; - fy = dy * repulsingForce; - - forces[node1.id].x -= fx; - forces[node1.id].y -= fy; - forces[node2.id].x += fx; - forces[node2.id].y += fy; } } + } else { + values.shadow = this.options.shadow.enabled; + values.width = Math.max(values.width, 0.3 / this.body.view.scale); } + return values; } - }]); - return HierarchicalRepulsionSolver; - }(); - - exports["default"] = HierarchicalRepulsionSolver; - -/***/ }, -/* 208 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - - var SpringSolver = function () { - function SpringSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, SpringSolver); - - this.body = body; - this.physicsBody = physicsBody; - this.setOptions(options); - } + /** + * update the options in the label module + */ - (0, _createClass3["default"])(SpringSolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; + }, { + key: 'updateLabelModule', + value: function updateLabelModule(options) { + this.labelModule.setOptions(this.options, true); + if (this.labelModule.baseSize !== undefined) { + this.baseFontSize = this.labelModule.baseSize; + } + this.labelModule.constrain(this.edgeOptions, options, this.defaultOptions); + this.labelModule.choosify(this.edgeOptions, options, this.defaultOptions); } /** - * This function calculates the springforces on the nodes, accounting for the support nodes. - * - * @private + * update the edge type, set the options + * @returns {boolean} */ }, { - key: "solve", - value: function solve() { - var edgeLength = void 0, - edge = void 0; - var edgeIndices = this.physicsBody.physicsEdgeIndices; - var edges = this.body.edges; - var node1 = void 0, - node2 = void 0, - node3 = void 0; - - // forces caused by the edges, modelled as springs - for (var i = 0; i < edgeIndices.length; i++) { - edge = edges[edgeIndices[i]]; - if (edge.connected === true && edge.toId !== edge.fromId) { - // only calculate forces if nodes are in the same sector - if (this.body.nodes[edge.toId] !== undefined && this.body.nodes[edge.fromId] !== undefined) { - if (edge.edgeType.via !== undefined) { - edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length; - node1 = edge.to; - node2 = edge.edgeType.via; - node3 = edge.from; - - this._calculateSpringForce(node1, node2, 0.5 * edgeLength); - this._calculateSpringForce(node2, node3, 0.5 * edgeLength); - } else { - // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use - // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger. - edgeLength = edge.options.length === undefined ? this.options.springLength * 1.5 : edge.options.length; - this._calculateSpringForce(edge.from, edge.to, edgeLength); - } + key: 'updateEdgeType', + value: function updateEdgeType() { + var smooth = this.options.smooth; + var dataChanged = false; + var changeInType = true; + if (this.edgeType !== undefined) { + if (this.edgeType instanceof BezierEdgeDynamic && smooth.enabled === true && smooth.type === 'dynamic' || this.edgeType instanceof CubicBezierEdge && smooth.enabled === true && smooth.type === 'cubicBezier' || this.edgeType instanceof BezierEdgeStatic && smooth.enabled === true && smooth.type !== 'dynamic' && smooth.type !== 'cubicBezier' || this.edgeType instanceof StraightEdge && smooth.type.enabled === false) { + changeInType = false; + } + if (changeInType === true) { + dataChanged = this.cleanup(); + } + } + if (changeInType === true) { + if (smooth.enabled === true) { + if (smooth.type === 'dynamic') { + dataChanged = true; + this.edgeType = new BezierEdgeDynamic(this.options, this.body, this.labelModule); + } else if (smooth.type === 'cubicBezier') { + this.edgeType = new CubicBezierEdge(this.options, this.body, this.labelModule); + } else { + this.edgeType = new BezierEdgeStatic(this.options, this.body, this.labelModule); } + } else { + this.edgeType = new StraightEdge(this.options, this.body, this.labelModule); } + } else { + // if nothing changes, we just set the options. + this.edgeType.setOptions(this.options); } + return dataChanged; } /** - * This is the code actually performing the calculation for the function above. - * - * @param node1 - * @param node2 - * @param edgeLength - * @private + * Connect an edge to its nodes */ }, { - key: "_calculateSpringForce", - value: function _calculateSpringForce(node1, node2, edgeLength) { - var dx = node1.x - node2.x; - var dy = node1.y - node2.y; - var distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01); - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - var springForce = this.options.springConstant * (edgeLength - distance) / distance; + key: 'connect', + value: function connect() { + this.disconnect(); - var fx = dx * springForce; - var fy = dy * springForce; + this.from = this.body.nodes[this.fromId] || undefined; + this.to = this.body.nodes[this.toId] || undefined; + this.connected = this.from !== undefined && this.to !== undefined; - // handle the case where one node is not part of the physcis - if (this.physicsBody.forces[node1.id] !== undefined) { - this.physicsBody.forces[node1.id].x += fx; - this.physicsBody.forces[node1.id].y += fy; + if (this.connected === true) { + this.from.attachEdge(this); + this.to.attachEdge(this); + } else { + if (this.from) { + this.from.detachEdge(this); + } + if (this.to) { + this.to.detachEdge(this); + } } - if (this.physicsBody.forces[node2.id] !== undefined) { - this.physicsBody.forces[node2.id].x -= fx; - this.physicsBody.forces[node2.id].y -= fy; - } + this.edgeType.connect(); } - }]); - return SpringSolver; - }(); - - exports["default"] = SpringSolver; - -/***/ }, -/* 209 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); + /** + * Disconnect an edge from its nodes + */ - var _classCallCheck2 = __webpack_require__(119); + }, { + key: 'disconnect', + value: function disconnect() { + if (this.from) { + this.from.detachEdge(this); + this.from = undefined; + } + if (this.to) { + this.to.detachEdge(this); + this.to = undefined; + } - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + this.connected = false; + } - var _createClass2 = __webpack_require__(120); + /** + * get the title of this edge. + * @return {string} title The title of the edge, or undefined when no title + * has been set. + */ - var _createClass3 = _interopRequireDefault(_createClass2); + }, { + key: 'getTitle', + value: function getTitle() { + return this.title; + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + /** + * check if this node is selecte + * @return {boolean} selected True if node is selected, else false + */ - var HierarchicalSpringSolver = function () { - function HierarchicalSpringSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, HierarchicalSpringSolver); + }, { + key: 'isSelected', + value: function isSelected() { + return this.selected; + } - this.body = body; - this.physicsBody = physicsBody; - this.setOptions(options); - } + /** + * Retrieve the value of the edge. Can be undefined + * @return {Number} value + */ - (0, _createClass3["default"])(HierarchicalSpringSolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; + }, { + key: 'getValue', + value: function getValue() { + return this.options.value; } /** - * This function calculates the springforces on the nodes, accounting for the support nodes. - * - * @private + * Adjust the value range of the edge. The edge will adjust it's width + * based on its value. + * @param {Number} min + * @param {Number} max + * @param total */ }, { - key: "solve", - value: function solve() { - var edgeLength, edge; - var dx, dy, fx, fy, springForce, distance; - var edges = this.body.edges; - var factor = 0.5; - - var edgeIndices = this.physicsBody.physicsEdgeIndices; - var nodeIndices = this.physicsBody.physicsNodeIndices; - var forces = this.physicsBody.forces; + key: 'setValueRange', + value: function setValueRange(min, max, total) { + if (this.options.value !== undefined) { + var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value); + var widthDiff = this.options.scaling.max - this.options.scaling.min; + if (this.options.scaling.label.enabled === true) { + var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min; + this.options.font.size = this.options.scaling.label.min + scale * fontDiff; + } + this.options.width = this.options.scaling.min + scale * widthDiff; + } else { + this.options.width = this.baseWidth; + this.options.font.size = this.baseFontSize; + } - // initialize the spring force counters - for (var i = 0; i < nodeIndices.length; i++) { - var nodeId = nodeIndices[i]; - forces[nodeId].springFx = 0; - forces[nodeId].springFy = 0; + this._setInteractionWidths(); + this.updateLabelModule(); + } + }, { + key: '_setInteractionWidths', + value: function _setInteractionWidths() { + if (typeof this.options.hoverWidth === 'function') { + this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width); + } else { + this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width; + } + if (typeof this.options.selectionWidth === 'function') { + this.edgeType.selectionWidth = this.options.selectionWidth(this.options.width); + } else { + this.edgeType.selectionWidth = this.options.selectionWidth + this.options.width; } + } - // forces caused by the edges, modelled as springs - for (var _i = 0; _i < edgeIndices.length; _i++) { - edge = edges[edgeIndices[_i]]; - if (edge.connected === true) { - edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length; + /** + * Redraw a edge + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + */ - dx = edge.from.x - edge.to.x; - dy = edge.from.y - edge.to.y; - distance = Math.sqrt(dx * dx + dy * dy); - distance = distance === 0 ? 0.01 : distance; + }, { + key: 'draw', + value: function draw(ctx) { + var values = this.getFormattingValues(); + if (values.hidden) { + return; + } - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.options.springConstant * (edgeLength - distance) / distance; + // get the via node from the edge type + var viaNode = this.edgeType.getViaNode(); + var arrowData = {}; - fx = dx * springForce; - fy = dy * springForce; + // restore edge targets to defaults + this.edgeType.fromPoint = this.edgeType.from; + this.edgeType.toPoint = this.edgeType.to; - if (edge.to.level != edge.from.level) { - if (forces[edge.toId] !== undefined) { - forces[edge.toId].springFx -= fx; - forces[edge.toId].springFy -= fy; - } - if (forces[edge.fromId] !== undefined) { - forces[edge.fromId].springFx += fx; - forces[edge.fromId].springFy += fy; - } - } else { - if (forces[edge.toId] !== undefined) { - forces[edge.toId].x -= factor * fx; - forces[edge.toId].y -= factor * fy; - } - if (forces[edge.fromId] !== undefined) { - forces[edge.fromId].x += factor * fx; - forces[edge.fromId].y += factor * fy; - } - } - } + // from and to arrows give a different end point for edges. we set them here + if (values.fromArrow) { + arrowData.from = this.edgeType.getArrowData(ctx, 'from', viaNode, this.selected, this.hover, values); + if (values.arrowStrikethrough === false) this.edgeType.fromPoint = arrowData.from.core; } - - // normalize spring forces - var springForce = 1; - var springFx, springFy; - for (var _i2 = 0; _i2 < nodeIndices.length; _i2++) { - var _nodeId = nodeIndices[_i2]; - springFx = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFx)); - springFy = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFy)); - - forces[_nodeId].x += springFx; - forces[_nodeId].y += springFy; + if (values.toArrow) { + arrowData.to = this.edgeType.getArrowData(ctx, 'to', viaNode, this.selected, this.hover, values); + if (values.arrowStrikethrough === false) this.edgeType.toPoint = arrowData.to.core; } - // retain energy balance - var totalFx = 0; - var totalFy = 0; - for (var _i3 = 0; _i3 < nodeIndices.length; _i3++) { - var _nodeId2 = nodeIndices[_i3]; - totalFx += forces[_nodeId2].x; - totalFy += forces[_nodeId2].y; + // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly. + if (values.middleArrow) { + arrowData.middle = this.edgeType.getArrowData(ctx, 'middle', viaNode, this.selected, this.hover, values); } - var correctionFx = totalFx / nodeIndices.length; - var correctionFy = totalFy / nodeIndices.length; - for (var _i4 = 0; _i4 < nodeIndices.length; _i4++) { - var _nodeId3 = nodeIndices[_i4]; - forces[_nodeId3].x -= correctionFx; - forces[_nodeId3].y -= correctionFy; + // draw everything + this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode); + this.drawArrows(ctx, arrowData, values); + this.drawLabel(ctx, viaNode); + } + }, { + key: 'drawArrows', + value: function drawArrows(ctx, arrowData, values) { + if (values.fromArrow) { + this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.from); + } + if (values.middleArrow) { + this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.middle); + } + if (values.toArrow) { + this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.to); } } - }]); - return HierarchicalSpringSolver; - }(); - - exports["default"] = HierarchicalSpringSolver; - -/***/ }, -/* 210 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); + }, { + key: 'drawLabel', + value: function drawLabel(ctx, viaNode) { + if (this.options.label !== undefined) { + // set style + var node1 = this.from; + var node2 = this.to; + var selected = this.from.selected || this.to.selected || this.selected; + if (node1.id != node2.id) { + this.labelModule.pointToSelf = false; + var point = this.edgeType.getPoint(0.5, viaNode); + ctx.save(); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + // if the label has to be rotated: + if (this.options.font.align !== "horizontal") { + this.labelModule.calculateLabelSize(ctx, selected, this.hover, point.x, point.y); + ctx.translate(point.x, this.labelModule.size.yLine); + this._rotateForLabelAlignment(ctx); + } - var CentralGravitySolver = function () { - function CentralGravitySolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, CentralGravitySolver); + // draw the label + this.labelModule.draw(ctx, point.x, point.y, selected, this.hover); + ctx.restore(); + } else { + // Ignore the orientations. + this.labelModule.pointToSelf = true; + var x, y; + var radius = this.options.selfReferenceSize; + if (node1.shape.width > node1.shape.height) { + x = node1.x + node1.shape.width * 0.5; + y = node1.y - radius; + } else { + x = node1.x + radius; + y = node1.y - node1.shape.height * 0.5; + } + point = this._pointOnCircle(x, y, radius, 0.125); + this.labelModule.draw(ctx, point.x, point.y, selected, this.hover); + } + } + } - this.body = body; - this.physicsBody = physicsBody; - this.setOptions(options); - } + /** + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top + * @return {boolean} True if location is located on the edge + */ - (0, _createClass3["default"])(CentralGravitySolver, [{ - key: "setOptions", - value: function setOptions(options) { - this.options = options; - } }, { - key: "solve", - value: function solve() { - var dx = void 0, - dy = void 0, - distance = void 0, - node = void 0; - var nodes = this.body.nodes; - var nodeIndices = this.physicsBody.physicsNodeIndices; - var forces = this.physicsBody.forces; + key: 'isOverlappingWith', + value: function isOverlappingWith(obj) { + if (this.connected) { + var distMax = 10; + var xFrom = this.from.x; + var yFrom = this.from.y; + var xTo = this.to.x; + var yTo = this.to.y; + var xObj = obj.left; + var yObj = obj.top; - for (var i = 0; i < nodeIndices.length; i++) { - var nodeId = nodeIndices[i]; - node = nodes[nodeId]; - dx = -node.x; - dy = -node.y; - distance = Math.sqrt(dx * dx + dy * dy); + var dist = this.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); - this._calculateForces(distance, dx, dy, forces, node); + return dist < distMax; + } else { + return false; } } /** - * Calculate the forces based on the distance. + * Rotates the canvas so the text is most readable + * @param {CanvasRenderingContext2D} ctx * @private */ }, { - key: "_calculateForces", - value: function _calculateForces(distance, dx, dy, forces, node) { - var gravityForce = distance === 0 ? 0 : this.options.centralGravity / distance; - forces[node.id].x = dx * gravityForce; - forces[node.id].y = dy * gravityForce; - } - }]); - return CentralGravitySolver; - }(); - - exports["default"] = CentralGravitySolver; - -/***/ }, -/* 211 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _getPrototypeOf = __webpack_require__(170); - - var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + key: '_rotateForLabelAlignment', + value: function _rotateForLabelAlignment(ctx) { + var dy = this.from.y - this.to.y; + var dx = this.from.x - this.to.x; + var angleInDegrees = Math.atan2(dy, dx); - var _createClass2 = __webpack_require__(120); + // rotate so label it is readable + if (angleInDegrees < -1 && dx < 0 || angleInDegrees > 0 && dx < 0) { + angleInDegrees = angleInDegrees + Math.PI; + } - var _createClass3 = _interopRequireDefault(_createClass2); + ctx.rotate(angleInDegrees); + } - var _possibleConstructorReturn2 = __webpack_require__(173); + /** + * Get a point on a circle + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private + */ - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + }, { + key: '_pointOnCircle', + value: function _pointOnCircle(x, y, radius, percentage) { + var angle = percentage * 2 * Math.PI; + return { + x: x + radius * Math.cos(angle), + y: y - radius * Math.sin(angle) + }; + } + }, { + key: 'select', + value: function select() { + this.selected = true; + } + }, { + key: 'unselect', + value: function unselect() { + this.selected = false; + } - var _inherits2 = __webpack_require__(174); + /** + * cleans all required things on delete + * @returns {*} + */ - var _inherits3 = _interopRequireDefault(_inherits2); + }, { + key: 'cleanup', + value: function cleanup() { + return this.edgeType.cleanup(); + } + }], [{ + key: 'parseOptions', + value: function parseOptions(parentOptions, newOptions) { + var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - var _BarnesHutSolver2 = __webpack_require__(205); + var fields = ['arrowStrikethrough', 'id', 'from', 'hidden', 'hoverWidth', 'label', 'labelHighlightBold', 'length', 'line', 'opacity', 'physics', 'scaling', 'selectionWidth', 'selfReferenceSize', 'to', 'title', 'value', 'width']; - var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2); + // only deep extend the items in the field array. These do not have shorthand. + util.selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + util.mergeOptions(parentOptions, newOptions, 'smooth', allowDeletion, globalOptions); + util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions); - var ForceAtlas2BasedRepulsionSolver = function (_BarnesHutSolver) { - (0, _inherits3["default"])(ForceAtlas2BasedRepulsionSolver, _BarnesHutSolver); + if (newOptions.dashes !== undefined && newOptions.dashes !== null) { + parentOptions.dashes = newOptions.dashes; + } else if (allowDeletion === true && newOptions.dashes === null) { + parentOptions.dashes = (0, _create2['default'])(globalOptions.dashes); // this sets the pointer of the option back to the global option. + } - function ForceAtlas2BasedRepulsionSolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, ForceAtlas2BasedRepulsionSolver); - return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedRepulsionSolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedRepulsionSolver)).call(this, body, physicsBody, options)); - } + // set the scaling newOptions + if (newOptions.scaling !== undefined && newOptions.scaling !== null) { + if (newOptions.scaling.min !== undefined) { + parentOptions.scaling.min = newOptions.scaling.min; + } + if (newOptions.scaling.max !== undefined) { + parentOptions.scaling.max = newOptions.scaling.max; + } + util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling); + } else if (allowDeletion === true && newOptions.scaling === null) { + parentOptions.scaling = (0, _create2['default'])(globalOptions.scaling); // this sets the pointer of the option back to the global option. + } - /** - * Calculate the forces based on the distance. - * - * @param distance - * @param dx - * @param dy - * @param node - * @param parentBranch - * @private - */ + // handle multiple input cases for arrows + if (newOptions.arrows !== undefined && newOptions.arrows !== null) { + if (typeof newOptions.arrows === 'string') { + var arrows = newOptions.arrows.toLowerCase(); + parentOptions.arrows.to.enabled = arrows.indexOf("to") != -1; + parentOptions.arrows.middle.enabled = arrows.indexOf("middle") != -1; + parentOptions.arrows.from.enabled = arrows.indexOf("from") != -1; + } else if ((0, _typeof3['default'])(newOptions.arrows) === 'object') { + util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to', allowDeletion, globalOptions.arrows); + util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', allowDeletion, globalOptions.arrows); + util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from', allowDeletion, globalOptions.arrows); + } else { + throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:" + (0, _stringify2['default'])(newOptions.arrows)); + } + } else if (allowDeletion === true && newOptions.arrows === null) { + parentOptions.arrows = (0, _create2['default'])(globalOptions.arrows); // this sets the pointer of the option back to the global option. + } + // handle multiple input cases for color + if (newOptions.color !== undefined && newOptions.color !== null) { + // make a copy of the parent object in case this is referring to the global one (due to object create once, then update) + parentOptions.color = util.deepExtend({}, parentOptions.color, true); + if (util.isString(newOptions.color)) { + parentOptions.color.color = newOptions.color; + parentOptions.color.highlight = newOptions.color; + parentOptions.color.hover = newOptions.color; + parentOptions.color.inherit = false; + } else { + var colorsDefined = false; + if (newOptions.color.color !== undefined) { + parentOptions.color.color = newOptions.color.color;colorsDefined = true; + } + if (newOptions.color.highlight !== undefined) { + parentOptions.color.highlight = newOptions.color.highlight;colorsDefined = true; + } + if (newOptions.color.hover !== undefined) { + parentOptions.color.hover = newOptions.color.hover;colorsDefined = true; + } + if (newOptions.color.inherit !== undefined) { + parentOptions.color.inherit = newOptions.color.inherit; + } + if (newOptions.color.opacity !== undefined) { + parentOptions.color.opacity = Math.min(1, Math.max(0, newOptions.color.opacity)); + } - (0, _createClass3["default"])(ForceAtlas2BasedRepulsionSolver, [{ - key: "_calculateForces", - value: function _calculateForces(distance, dx, dy, node, parentBranch) { - if (distance === 0) { - distance = 0.1 * Math.random(); - dx = distance; + if (newOptions.color.inherit === undefined && colorsDefined === true) { + parentOptions.color.inherit = false; + } + } + } else if (allowDeletion === true && newOptions.color === null) { + parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options } - if (this.overlapAvoidanceFactor < 1 && node.shape.radius) { - distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius); + // handle the font settings + if (newOptions.font !== undefined && newOptions.font !== null) { + Label.parseOptions(parentOptions.font, newOptions); + } else if (allowDeletion === true && newOptions.font === null) { + parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options } - - var degree = node.edges.length + 1; - // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines - // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce - var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass * degree / Math.pow(distance, 2); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - - this.physicsBody.forces[node.id].x += fx; - this.physicsBody.forces[node.id].y += fy; } }]); - return ForceAtlas2BasedRepulsionSolver; - }(_BarnesHutSolver3["default"]); + return Edge; + }(); - exports["default"] = ForceAtlas2BasedRepulsionSolver; + exports['default'] = Edge; -/***/ }, -/* 212 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 202 */ +/***/ (function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _slicedToArray2 = __webpack_require__(170); + + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _possibleConstructorReturn2 = __webpack_require__(173); + var _possibleConstructorReturn2 = __webpack_require__(178); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _inherits2 = __webpack_require__(174); + var _inherits2 = __webpack_require__(179); var _inherits3 = _interopRequireDefault(_inherits2); - var _CentralGravitySolver2 = __webpack_require__(210); + var _CubicBezierEdgeBase2 = __webpack_require__(203); - var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2); + var _CubicBezierEdgeBase3 = _interopRequireDefault(_CubicBezierEdgeBase2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var ForceAtlas2BasedCentralGravitySolver = function (_CentralGravitySolver) { - (0, _inherits3["default"])(ForceAtlas2BasedCentralGravitySolver, _CentralGravitySolver); + var CubicBezierEdge = function (_CubicBezierEdgeBase) { + (0, _inherits3['default'])(CubicBezierEdge, _CubicBezierEdgeBase); - function ForceAtlas2BasedCentralGravitySolver(body, physicsBody, options) { - (0, _classCallCheck3["default"])(this, ForceAtlas2BasedCentralGravitySolver); - return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedCentralGravitySolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedCentralGravitySolver)).call(this, body, physicsBody, options)); + function CubicBezierEdge(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, CubicBezierEdge); + return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdge.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdge)).call(this, options, body, labelModule)); } /** - * Calculate the forces based on the distance. + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx * @private */ - (0, _createClass3["default"])(ForceAtlas2BasedCentralGravitySolver, [{ - key: "_calculateForces", - value: function _calculateForces(distance, dx, dy, forces, node) { - if (distance > 0) { - var degree = node.edges.length + 1; - var gravityForce = this.options.centralGravity * degree * node.options.mass; - forces[node.id].x = dx * gravityForce; - forces[node.id].y = dy * gravityForce; + (0, _createClass3['default'])(CubicBezierEdge, [{ + key: '_line', + value: function _line(ctx, values, viaNodes) { + // get the coordinates of the support points. + var via1 = viaNodes[0]; + var via2 = viaNodes[1]; + + // start drawing the line. + ctx.beginPath(); + ctx.moveTo(this.fromPoint.x, this.fromPoint.y); + + // fallback to normal straight edges + if (viaNodes === undefined || via1.x === undefined) { + ctx.lineTo(this.toPoint.x, this.toPoint.y); + } else { + ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.toPoint.x, this.toPoint.y); } + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.stroke(); + this.disableShadow(ctx, values); + } + }, { + key: '_getViaCoordinates', + value: function _getViaCoordinates() { + var dx = this.from.x - this.to.x; + var dy = this.from.y - this.to.y; + + var x1 = void 0, + y1 = void 0, + x2 = void 0, + y2 = void 0; + var roundness = this.options.smooth.roundness; + + // horizontal if x > y or if direction is forced or if direction is horizontal + 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: 'getViaNode', + value: function getViaNode() { + return this._getViaCoordinates(); + } + }, { + 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 ? arguments[6] : this._getViaCoordinates(), + _ref2 = (0, _slicedToArray3['default'])(_ref, 2), + via1 = _ref2[0], + via2 = _ref2[1]; + + // x3,y3 is the point + return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2); + } + + /** + * 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 + */ + + }, { + key: 'getPoint', + value: function getPoint(percentage) { + var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates(), + _ref4 = (0, _slicedToArray3['default'])(_ref3, 2), + via1 = _ref4[0], + via2 = _ref4[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.fromPoint.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.toPoint.x; + var y = vec[0] * this.fromPoint.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.toPoint.y; + + return { x: x, y: y }; } }]); - return ForceAtlas2BasedCentralGravitySolver; - }(_CentralGravitySolver3["default"]); + return CubicBezierEdge; + }(_CubicBezierEdgeBase3['default']); - exports["default"] = ForceAtlas2BasedCentralGravitySolver; + exports['default'] = CubicBezierEdge; -/***/ }, -/* 213 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -42795,986 +41035,828 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _keys = __webpack_require__(58); - - var _keys2 = _interopRequireDefault(_keys); - - var _typeof2 = __webpack_require__(62); + var _getPrototypeOf = __webpack_require__(175); - var _typeof3 = _interopRequireDefault(_typeof2); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _NetworkUtil = __webpack_require__(214); - - var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); + var _possibleConstructorReturn2 = __webpack_require__(178); - var _Cluster = __webpack_require__(215); - - var _Cluster2 = _interopRequireDefault(_Cluster); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + var _inherits2 = __webpack_require__(179); - var util = __webpack_require__(1); + var _inherits3 = _interopRequireDefault(_inherits2); - var ClusterEngine = function () { - function ClusterEngine(body) { - var _this = this; + var _BezierEdgeBase2 = __webpack_require__(204); - (0, _classCallCheck3['default'])(this, ClusterEngine); + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); - this.body = body; - this.clusteredNodes = {}; - this.clusteredEdges = {}; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - this.options = {}; - this.defaultOptions = {}; - util.extend(this.options, this.defaultOptions); + var CubicBezierEdgeBase = function (_BezierEdgeBase) { + (0, _inherits3['default'])(CubicBezierEdgeBase, _BezierEdgeBase); - this.body.emitter.on('_resetData', function () { - _this.clusteredNodes = {};_this.clusteredEdges = {}; - }); + function CubicBezierEdgeBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, CubicBezierEdgeBase); + return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdgeBase)).call(this, options, body, labelModule)); } /** - * - * @param hubsize - * @param options - */ - + * 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 + */ - (0, _createClass3['default'])(ClusterEngine, [{ - key: 'clusterByHubsize', - value: function clusterByHubsize(hubsize, options) { - if (hubsize === undefined) { - hubsize = this._getHubSize(); - } else if ((typeof hubsize === 'undefined' ? 'undefined' : (0, _typeof3['default'])(hubsize)) === "object") { - options = this._checkOptions(hubsize); - hubsize = this._getHubSize(); - } - var nodesToCluster = []; - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var node = this.body.nodes[this.body.nodeIndices[i]]; - if (node.edges.length >= hubsize) { - nodesToCluster.push(node.id); + (0, _createClass3['default'])(CubicBezierEdgeBase, [{ + key: '_getDistanceToBezierEdge', + value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) { + // x3,y3 is the point + var minDistance = 1e9; + var distance = void 0; + var i = void 0, + t = void 0, + x = void 0, + y = void 0; + var lastX = x1; + var lastY = y1; + var vec = [0, 0, 0, 0]; + 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; } - for (var _i = 0; _i < nodesToCluster.length; _i++) { - this.clusterByConnection(nodesToCluster[_i], options, true); - } - - this.body.emitter.emit('_dataChanged'); + return minDistance; } + }]); + return CubicBezierEdgeBase; + }(_BezierEdgeBase3['default']); - /** - * loop over all nodes, check if they adhere to the condition and cluster if needed. - * @param options - * @param refreshData - */ + exports['default'] = CubicBezierEdgeBase; - }, { - key: 'cluster', - value: function cluster() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { - if (options.joinCondition === undefined) { - throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options."); - } + 'use strict'; - // check if the options object is fine, append if needed - options = this._checkOptions(options); + Object.defineProperty(exports, "__esModule", { + value: true + }); - var childNodesObj = {}; - var childEdgesObj = {}; + var _getPrototypeOf = __webpack_require__(175); - // collect the nodes that will be in the cluster - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var nodeId = this.body.nodeIndices[i]; - var node = this.body.nodes[nodeId]; - var clonedOptions = _NetworkUtil2['default'].cloneOptions(node); - if (options.joinCondition(clonedOptions) === true) { - childNodesObj[nodeId] = this.body.nodes[nodeId]; + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - // collect the nodes that will be in the cluster - for (var _i2 = 0; _i2 < node.edges.length; _i2++) { - var edge = node.edges[_i2]; - if (this.clusteredEdges[edge.id] === undefined) { - childEdgesObj[edge.id] = edge; - } - } - } - } + var _classCallCheck2 = __webpack_require__(134); - this._cluster(childNodesObj, childEdgesObj, options, refreshData); - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - /** - * Cluster all nodes in the network that have only X edges - * @param edgeCount - * @param options - * @param refreshData - */ + var _createClass2 = __webpack_require__(135); - }, { - key: 'clusterByEdgeCount', - value: function clusterByEdgeCount(edgeCount, options) { - var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var _createClass3 = _interopRequireDefault(_createClass2); - options = this._checkOptions(options); - var clusters = []; - var usedNodes = {}; - var edge = void 0, - edges = void 0, - node = void 0, - nodeId = void 0, - relevantEdgeCount = void 0; - // collect the nodes that will be in the cluster - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var childNodesObj = {}; - var childEdgesObj = {}; - nodeId = this.body.nodeIndices[i]; + var _possibleConstructorReturn2 = __webpack_require__(178); - // if this node is already used in another cluster this session, we do not have to re-evaluate it. - if (usedNodes[nodeId] === undefined) { - relevantEdgeCount = 0; - node = this.body.nodes[nodeId]; - edges = []; - for (var j = 0; j < node.edges.length; j++) { - edge = node.edges[j]; - if (this.clusteredEdges[edge.id] === undefined) { - if (edge.toId !== edge.fromId) { - relevantEdgeCount++; - } - edges.push(edge); - } - } + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - // this node qualifies, we collect its neighbours to start the clustering process. - if (relevantEdgeCount === edgeCount) { - var gatheringSuccessful = true; - for (var _j = 0; _j < edges.length; _j++) { - edge = edges[_j]; - var childNodeId = this._getConnectedId(edge, nodeId); - // 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 = _NetworkUtil2['default'].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; - } - } - } + var _inherits2 = __webpack_require__(179); - // add to the cluster queue - if ((0, _keys2['default'])(childNodesObj).length > 0 && (0, _keys2['default'])(childEdgesObj).length > 0 && gatheringSuccessful === true) { - clusters.push({ nodes: childNodesObj, edges: childEdgesObj }); - } + var _inherits3 = _interopRequireDefault(_inherits2); + + var _EdgeBase2 = __webpack_require__(205); + + var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var BezierEdgeBase = function (_EdgeBase) { + (0, _inherits3['default'])(BezierEdgeBase, _EdgeBase); + + function BezierEdgeBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, BezierEdgeBase); + return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeBase)).call(this, options, body, labelModule)); + } + + /** + * This function uses binary search to look for the point where the bezier curve crosses the border of the node. + * + * @param nearNode + * @param ctx + * @param viaNode + * @param nearNode + * @param ctx + * @param viaNode + * @param nearNode + * @param ctx + * @param viaNode + */ + + + (0, _createClass3['default'])(BezierEdgeBase, [{ + key: '_findBorderPositionBezier', + value: function _findBorderPositionBezier(nearNode, ctx) { + var viaNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._getViaCoordinates(); + + var maxIterations = 10; + var iteration = 0; + var low = 0; + var high = 1; + var pos, angle, distanceToBorder, distanceToPoint, difference; + var threshold = 0.2; + var node = this.to; + var from = false; + if (nearNode.id === this.from.id) { + node = this.from; + from = true; + } + + while (low <= high && iteration < maxIterations) { + var middle = (low + high) * 0.5; + + pos = this.getPoint(middle, viaNode); + angle = Math.atan2(node.y - pos.y, node.x - pos.x); + distanceToBorder = node.distanceToBorder(ctx, angle); + distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)); + difference = distanceToBorder - distanceToPoint; + if (Math.abs(difference) < threshold) { + break; // found + } else if (difference < 0) { + // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node. + if (from === false) { + low = middle; + } else { + high = middle; + } + } else { + if (from === false) { + high = middle; + } else { + low = middle; } } - } - for (var _i3 = 0; _i3 < clusters.length; _i3++) { - this._cluster(clusters[_i3].nodes, clusters[_i3].edges, options, false); + iteration++; } + pos.t = middle; - if (refreshData === true) { - this.body.emitter.emit('_dataChanged'); - } + return pos; } /** - * Cluster all nodes in the network that have only 1 edge - * @param options - * @param refreshData - */ + * 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 + * @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 + */ }, { - key: 'clusterOutliers', - value: function clusterOutliers(options) { - var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + key: '_getDistanceToBezierEdge', + value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) { + // x3,y3 is the point + var minDistance = 1e9; + var distance = void 0; + var i = void 0, + t = void 0, + x = void 0, + y = void 0; + var lastX = x1; + var lastY = y1; + for (i = 1; i < 10; i++) { + t = 0.1 * i; + x = Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2; + y = Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2; + if (i > 0) { + distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3); + minDistance = distance < minDistance ? distance : minDistance; + } + lastX = x; + lastY = y; + } - this.clusterByEdgeCount(1, options, refreshData); + return minDistance; } + }]); + return BezierEdgeBase; + }(_EdgeBase3['default']); - /** - * Cluster all nodes in the network that have only 2 edge - * @param options - * @param refreshData - */ + exports['default'] = BezierEdgeBase; - }, { - key: 'clusterBridges', - value: function clusterBridges(options) { - var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { - this.clusterByEdgeCount(2, options, refreshData); - } + 'use strict'; - /** - * suck all connected nodes of a node into the node. - * @param nodeId - * @param options - * @param refreshData - */ + Object.defineProperty(exports, "__esModule", { + value: true + }); - }, { - key: 'clusterByConnection', - value: function clusterByConnection(nodeId, options) { - var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var _slicedToArray2 = __webpack_require__(170); - // kill conditions - if (nodeId === undefined) { - throw new Error("No nodeId supplied to clusterByConnection!"); - } - if (this.body.nodes[nodeId] === undefined) { - throw new Error("The nodeId given to clusterByConnection does not exist!"); - } + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - var node = this.body.nodes[nodeId]; - options = this._checkOptions(options, node); - if (options.clusterNodeProperties.x === undefined) { - options.clusterNodeProperties.x = node.x; - } - if (options.clusterNodeProperties.y === undefined) { - options.clusterNodeProperties.y = node.y; - } - if (options.clusterNodeProperties.fixed === undefined) { - options.clusterNodeProperties.fixed = {}; - options.clusterNodeProperties.fixed.x = node.options.fixed.x; - options.clusterNodeProperties.fixed.y = node.options.fixed.y; - } + var _classCallCheck2 = __webpack_require__(134); - var childNodesObj = {}; - var childEdgesObj = {}; - var parentNodeId = node.id; - var parentClonedOptions = _NetworkUtil2['default'].cloneOptions(node); - childNodesObj[parentNodeId] = node; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // collect the nodes that will be in the cluster - for (var i = 0; i < node.edges.length; i++) { - var edge = node.edges[i]; - if (this.clusteredEdges[edge.id] === undefined) { - var childNodeId = this._getConnectedId(edge, parentNodeId); + var _createClass2 = __webpack_require__(135); - // if the child node is not in a cluster - 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 = _NetworkUtil2['default'].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; - } - } - } - } - var childNodeIDs = (0, _keys2['default'])(childNodesObj).map(function (childNode) { - return childNodesObj[childNode].id; - }); - - for (childNode in childNodesObj) { - var childNode = childNodesObj[childNode]; - for (var y = 0; y < childNode.edges.length; y++) { - var childEdge = childNode.edges[y]; - if (childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) > -1) { - childEdgesObj[childEdge.id] = childEdge; - } - } - } - this._cluster(childNodesObj, childEdgesObj, options, refreshData); - } - - /** - * 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 clusterNodeProperties - * @param clusterEdgeProperties - * @private - */ - - }, { - key: '_createClusterEdges', - value: function _createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) { - var edge = void 0, - childNodeId = void 0, - childNode = void 0, - toId = void 0, - fromId = void 0, - otherNodeId = void 0; - - // loop over all child nodes and their edges to find edges going out of the cluster - // these edges will be replaced by clusterEdges. - var childKeys = (0, _keys2['default'])(childNodesObj); - var createEdges = []; - for (var i = 0; i < childKeys.length; i++) { - childNodeId = childKeys[i]; - childNode = childNodesObj[childNodeId]; - - // construct new edges from the cluster to others - for (var j = 0; j < childNode.edges.length; j++) { - edge = childNode.edges[j]; - // we only handle edges that are visible to the system, not the disabled ones from the clustering process. - if (this.clusteredEdges[edge.id] === undefined) { - // self-referencing edges will be added to the "hidden" list - if (edge.toId == edge.fromId) { - childEdgesObj[edge.id] = edge; - } else { - // 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; - } - } - - // 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 _j2 = 0; _j2 < createEdges.length; _j2++) { - var _edge = createEdges[_j2].edge; - // copy the options of the edge we will replace - var clonedOptions = _NetworkUtil2['default'].cloneOptions(_edge, 'edge'); - // make sure the properties of clusterEdges are superimposed on it - util.deepExtend(clonedOptions, clusterEdgeProperties); + var _createClass3 = _interopRequireDefault(_createClass2); - // set up the edge - clonedOptions.from = createEdges[_j2].fromId; - clonedOptions.to = createEdges[_j2].toId; - clonedOptions.id = 'clusterEdge:' + util.randomUUID(); - //clonedOptions.id = '(cf: ' + createEdges[j].fromId + " to: " + createEdges[j].toId + ")" + Math.random(); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // create the edge and give a reference to the one it replaced. - var newEdge = this.body.functions.createEdge(clonedOptions); - newEdge.clusteringEdgeReplacingId = _edge.id; + var util = __webpack_require__(1); - // also reference the new edge in the old edge - this.body.edges[_edge.id].edgeReplacedById = newEdge.id; + var EdgeBase = function () { + function EdgeBase(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, EdgeBase); - // connect the edge. - this.body.edges[newEdge.id] = newEdge; - newEdge.connect(); + this.body = body; + this.labelModule = labelModule; + this.options = {}; + this.setOptions(options); + this.colorDirty = true; + this.color = {}; + this.selectionWidth = 2; + this.hoverWidth = 1.5; + this.fromPoint = this.from; + this.toPoint = this.to; + } - // hide the replaced edge - this._backupEdgeOptions(_edge); - _edge.setOptions({ physics: false, hidden: true }); - } + (0, _createClass3['default'])(EdgeBase, [{ + key: 'connect', + value: function connect() { + this.from = this.body.nodes[this.options.from]; + this.to = this.body.nodes[this.options.to]; } - - /** - * This function checks the options that can be supplied to the different cluster functions - * for certain fields and inserts defaults if needed - * @param options - * @returns {*} - * @private - */ - }, { - key: '_checkOptions', - value: function _checkOptions() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - if (options.clusterEdgeProperties === undefined) { - options.clusterEdgeProperties = {}; - } - if (options.clusterNodeProperties === undefined) { - options.clusterNodeProperties = {}; - } - - return options; + key: 'cleanup', + value: function cleanup() { + return false; + } + }, { + key: 'setOptions', + value: function setOptions(options) { + this.options = options; + this.from = this.body.nodes[this.options.from]; + this.to = this.body.nodes[this.options.to]; + this.id = this.options.id; } /** - * - * @param {Object} childNodesObj | object with node objects, id as keys, same as childNodes except it also contains a source node - * @param {Object} childEdgesObj | object with edge objects, id as keys - * @param {Array} options | object with {clusterNodeProperties, clusterEdgeProperties, processProperties} - * @param {Boolean} refreshData | when true, do not wrap up - * @private - */ + * Redraw a edge as a line + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private + */ }, { - key: '_cluster', - value: function _cluster(childNodesObj, childEdgesObj, options) { - var refreshData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + key: 'drawLine', + value: function drawLine(ctx, values, selected, hover, viaNode) { + // set style + ctx.strokeStyle = this.getColor(ctx, values, selected, hover); + ctx.lineWidth = values.width; - // kill condition: no nodes don't bother - if ((0, _keys2['default'])(childNodesObj).length == 0) { - return; + if (values.dashes !== false) { + this._drawDashedLine(ctx, values, viaNode); + } else { + this._drawLine(ctx, values, viaNode); } + } + }, { + key: '_drawLine', + value: function _drawLine(ctx, values, viaNode, fromPoint, toPoint) { + if (this.from != this.to) { + // draw line + this._line(ctx, values, viaNode, fromPoint, toPoint); + } else { + var _getCircleData2 = this._getCircleData(ctx), + _getCircleData3 = (0, _slicedToArray3['default'])(_getCircleData2, 3), + x = _getCircleData3[0], + y = _getCircleData3[1], + radius = _getCircleData3[2]; - // allow clusters of 1 if options allow - if ((0, _keys2['default'])(childNodesObj).length == 1 && options.clusterNodeProperties.allowSingleNodeCluster != true) { - return; + this._circle(ctx, values, x, y, radius); } - - // 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; - } - } + } + }, { + key: '_drawDashedLine', + value: function _drawDashedLine(ctx, values, viaNode, fromPoint, toPoint) { + ctx.lineCap = 'round'; + var pattern = [5, 5]; + if (Array.isArray(values.dashes) === true) { + pattern = values.dashes; } - var clusterNodeProperties = util.deepExtend({}, options.clusterNodeProperties); - - // construct the clusterNodeProperties - if (options.processProperties !== undefined) { - // get the childNode options - var childNodesOptions = []; - for (var _nodeId in childNodesObj) { - if (childNodesObj.hasOwnProperty(_nodeId)) { - var clonedOptions = _NetworkUtil2['default'].cloneOptions(childNodesObj[_nodeId]); - childNodesOptions.push(clonedOptions); - } - } - - // get cluster properties based on childNodes - var childEdgesOptions = []; - for (var edgeId in childEdgesObj) { - if (childEdgesObj.hasOwnProperty(edgeId)) { - // these cluster edges will be removed on creation of the cluster. - if (edgeId.substr(0, 12) !== "clusterEdge:") { - var _clonedOptions = _NetworkUtil2['default'].cloneOptions(childEdgesObj[edgeId], 'edge'); - childEdgesOptions.push(_clonedOptions); - } - } - } - - clusterNodeProperties = options.processProperties(clusterNodeProperties, childNodesOptions, childEdgesOptions); - if (!clusterNodeProperties) { - throw new Error("The processProperties function does not return properties!"); - } - } + // only firefox and chrome support this method, else we use the legacy one. + if (ctx.setLineDash !== undefined) { + ctx.save(); - // check if we have an unique id; - if (clusterNodeProperties.id === undefined) { - clusterNodeProperties.id = 'cluster:' + util.randomUUID(); - } - var clusterId = clusterNodeProperties.id; + // set dash settings for chrome or firefox + ctx.setLineDash(pattern); + ctx.lineDashOffset = 0; - if (clusterNodeProperties.label === undefined) { - clusterNodeProperties.label = 'cluster'; - } + // draw the line + if (this.from != this.to) { + // draw line + this._line(ctx, values, viaNode); + } else { + var _getCircleData4 = this._getCircleData(ctx), + _getCircleData5 = (0, _slicedToArray3['default'])(_getCircleData4, 3), + x = _getCircleData5[0], + y = _getCircleData5[1], + radius = _getCircleData5[2]; - // give the clusterNode a position if it does not have one. - var pos = undefined; - if (clusterNodeProperties.x === undefined) { - pos = this._getClusterPosition(childNodesObj); - clusterNodeProperties.x = pos.x; - } - if (clusterNodeProperties.y === undefined) { - if (pos === undefined) { - pos = this._getClusterPosition(childNodesObj); + this._circle(ctx, values, x, y, radius); } - clusterNodeProperties.y = pos.y; - } - - // force the ID to remain the same - clusterNodeProperties.id = clusterId; - - // create the clusterNode - var clusterNode = this.body.functions.createNode(clusterNodeProperties, _Cluster2['default']); - clusterNode.isCluster = true; - clusterNode.containedNodes = childNodesObj; - clusterNode.containedEdges = childEdgesObj; - // cache a copy from the cluster edge properties if we have to reconnect others later on - clusterNode.clusterEdgeProperties = options.clusterEdgeProperties; - - // finally put the cluster node into global - this.body.nodes[clusterNodeProperties.id] = clusterNode; - - // create the new edges that will connect to the cluster, all self-referencing edges will be added to childEdgesObject here. - this._createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties); - // disable the childEdges - for (var _edgeId in childEdgesObj) { - if (childEdgesObj.hasOwnProperty(_edgeId)) { - if (this.body.edges[_edgeId] !== undefined) { - var edge = this.body.edges[_edgeId]; - // cache the options before changing - this._backupEdgeOptions(edge); - // disable physics and hide the edge - edge.setOptions({ physics: false, hidden: true }); - } - } - } + // restore the dash settings. + ctx.setLineDash([0]); + ctx.lineDashOffset = 0; + ctx.restore(); + } else { + // unsupporting smooth lines + if (this.from != this.to) { + // draw line + ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern); + } else { + var _getCircleData6 = this._getCircleData(ctx), + _getCircleData7 = (0, _slicedToArray3['default'])(_getCircleData6, 3), + _x = _getCircleData7[0], + _y = _getCircleData7[1], + _radius = _getCircleData7[2]; - // disable the childNodes - for (var _nodeId2 in childNodesObj) { - if (childNodesObj.hasOwnProperty(_nodeId2)) { - this.clusteredNodes[_nodeId2] = { clusterId: clusterNodeProperties.id, node: this.body.nodes[_nodeId2] }; - this.body.nodes[_nodeId2].setOptions({ hidden: true, physics: false }); + this._circle(ctx, values, _x, _y, _radius); } - } + // draw shadow if enabled + this.enableShadow(ctx, values); - // set ID to undefined so no duplicates arise - clusterNodeProperties.id = undefined; + ctx.stroke(); - // wrap up - if (refreshData === true) { - this.body.emitter.emit('_dataChanged'); + // disable shadows for other elements. + this.disableShadow(ctx, values); } } }, { - key: '_backupEdgeOptions', - value: function _backupEdgeOptions(edge) { - if (this.clusteredEdges[edge.id] === undefined) { - this.clusteredEdges[edge.id] = { physics: edge.options.physics, hidden: edge.options.hidden }; + key: 'findBorderPosition', + value: function findBorderPosition(nearNode, ctx, options) { + if (this.from != this.to) { + return this._findBorderPosition(nearNode, ctx, options); + } else { + return this._findBorderPositionCircle(nearNode, ctx, options); } } }, { - key: '_restoreEdge', - value: function _restoreEdge(edge) { - var originalOptions = this.clusteredEdges[edge.id]; - if (originalOptions !== undefined) { - edge.setOptions({ physics: originalOptions.physics, hidden: originalOptions.hidden }); - delete this.clusteredEdges[edge.id]; + key: 'findBorderPositions', + value: function findBorderPositions(ctx) { + var from = {}; + var to = {}; + if (this.from != this.to) { + from = this._findBorderPosition(this.from, ctx); + to = this._findBorderPosition(this.to, ctx); + } else { + var _getCircleData8 = this._getCircleData(ctx), + _getCircleData9 = (0, _slicedToArray3['default'])(_getCircleData8, 3), + x = _getCircleData9[0], + y = _getCircleData9[1], + radius = _getCircleData9[2]; + + from = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); + to = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.6, high: 0.8, direction: 1 }); } + return { from: from, to: to }; } + }, { + key: '_getCircleData', + value: function _getCircleData(ctx) { + var x = void 0, + y = void 0; + var node = this.from; + var radius = this.options.selfReferenceSize; - /** - * Check if a node is a cluster. - * @param nodeId - * @returns {*} - */ + if (ctx !== undefined) { + if (node.shape.width === undefined) { + node.shape.resize(ctx); + } + } - }, { - key: 'isCluster', - value: function isCluster(nodeId) { - if (this.body.nodes[nodeId] !== undefined) { - return this.body.nodes[nodeId].isCluster === true; + // get circle coordinates + if (node.shape.width > node.shape.height) { + x = node.x + node.shape.width * 0.5; + y = node.y - radius; } else { - console.log("Node does not exist."); - return false; + x = node.x + radius; + y = node.y - node.shape.height * 0.5; } + return [x, y, radius]; } /** - * get the position of the cluster node based on what's inside - * @param {object} childNodesObj | object with node objects, id as keys - * @returns {{x: number, y: number}} - * @private - */ + * Get a point on a circle + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private + */ }, { - key: '_getClusterPosition', - value: function _getClusterPosition(childNodesObj) { - var childKeys = (0, _keys2['default'])(childNodesObj); - var minX = childNodesObj[childKeys[0]].x; - var maxX = childNodesObj[childKeys[0]].x; - var minY = childNodesObj[childKeys[0]].y; - var maxY = childNodesObj[childKeys[0]].y; - var node = void 0; - for (var i = 1; i < childKeys.length; i++) { - node = childNodesObj[childKeys[i]]; - minX = node.x < minX ? node.x : minX; - maxX = node.x > maxX ? node.x : maxX; - minY = node.y < minY ? node.y : minY; - maxY = node.y > maxY ? node.y : maxY; - } - - return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) }; + key: '_pointOnCircle', + value: function _pointOnCircle(x, y, radius, percentage) { + var angle = percentage * 2 * Math.PI; + return { + x: x + radius * Math.cos(angle), + y: y - radius * Math.sin(angle) + }; } /** - * Open a cluster by calling this function. - * @param {String} clusterNodeId | the ID of the cluster node - * @param {Boolean} refreshData | wrap up afterwards if not true - */ + * This function uses binary search to look for the point where the circle crosses the border of the node. + * @param node + * @param ctx + * @param options + * @returns {*} + * @private + */ }, { - key: 'openCluster', - value: function openCluster(clusterNodeId, options) { - var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + key: '_findBorderPositionCircle', + value: function _findBorderPositionCircle(node, ctx, options) { + var x = options.x; + var y = options.y; + var low = options.low; + var high = options.high; + var direction = options.direction; - // kill conditions - if (clusterNodeId === undefined) { - throw new Error("No clusterNodeId supplied to openCluster."); - } - if (this.body.nodes[clusterNodeId] === undefined) { - throw new Error("The clusterNodeId supplied to openCluster does not exist."); - } - if (this.body.nodes[clusterNodeId].containedNodes === undefined) { - console.log("The node:" + clusterNodeId + " is not a cluster."); - return; - } - var clusterNode = this.body.nodes[clusterNodeId]; - var containedNodes = clusterNode.containedNodes; - var containedEdges = clusterNode.containedEdges; + var maxIterations = 10; + var iteration = 0; + var radius = this.options.selfReferenceSize; + var pos = void 0, + angle = void 0, + distanceToBorder = void 0, + distanceToPoint = void 0, + difference = void 0; + var threshold = 0.05; + var middle = (low + high) * 0.5; - // allow the user to position the nodes after release. - if (options !== undefined && options.releaseFunction !== undefined && typeof options.releaseFunction === 'function') { - var positions = {}; - var clusterPosition = { x: clusterNode.x, y: clusterNode.y }; - for (var nodeId in containedNodes) { - if (containedNodes.hasOwnProperty(nodeId)) { - var containedNode = this.body.nodes[nodeId]; - positions[nodeId] = { x: containedNode.x, y: containedNode.y }; - } - } - var newPositions = options.releaseFunction(clusterPosition, positions); + while (low <= high && iteration < maxIterations) { + middle = (low + high) * 0.5; - for (var _nodeId3 in containedNodes) { - if (containedNodes.hasOwnProperty(_nodeId3)) { - var _containedNode = this.body.nodes[_nodeId3]; - if (newPositions[_nodeId3] !== undefined) { - _containedNode.x = newPositions[_nodeId3].x === undefined ? clusterNode.x : newPositions[_nodeId3].x; - _containedNode.y = newPositions[_nodeId3].y === undefined ? clusterNode.y : newPositions[_nodeId3].y; - } + pos = this._pointOnCircle(x, y, radius, middle); + angle = Math.atan2(node.y - pos.y, node.x - pos.x); + distanceToBorder = node.distanceToBorder(ctx, angle); + distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)); + difference = distanceToBorder - distanceToPoint; + if (Math.abs(difference) < threshold) { + break; // found + } else if (difference > 0) { + // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node. + if (direction > 0) { + low = middle; + } else { + high = middle; } - } - } else { - // copy the position from the cluster - for (var _nodeId4 in containedNodes) { - if (containedNodes.hasOwnProperty(_nodeId4)) { - var _containedNode2 = this.body.nodes[_nodeId4]; - _containedNode2 = containedNodes[_nodeId4]; - // inherit position - if (_containedNode2.options.fixed.x === false) { - _containedNode2.x = clusterNode.x; - } - if (_containedNode2.options.fixed.y === false) { - _containedNode2.y = clusterNode.y; - } + } else { + if (direction > 0) { + high = middle; + } else { + low = middle; } } + iteration++; } + pos.t = middle; - // release nodes - for (var _nodeId5 in containedNodes) { - if (containedNodes.hasOwnProperty(_nodeId5)) { - var _containedNode3 = this.body.nodes[_nodeId5]; - - // inherit speed - _containedNode3.vx = clusterNode.vx; - _containedNode3.vy = clusterNode.vy; + return pos; + } - // we use these methods to avoid re-instantiating the shape, which happens with setOptions. - _containedNode3.setOptions({ hidden: false, physics: true }); + /** + * Get the line width of the edge. Depends on width and whether one of the + * connected nodes is selected. + * @return {Number} width + * @private + */ - delete this.clusteredNodes[_nodeId5]; + }, { + key: 'getLineWidth', + value: function getLineWidth(selected, hover) { + if (selected === true) { + return Math.max(this.selectionWidth, 0.3 / this.body.view.scale); + } else { + if (hover === true) { + return Math.max(this.hoverWidth, 0.3 / this.body.view.scale); + } else { + return Math.max(this.options.width, 0.3 / this.body.view.scale); } } + } + }, { + key: 'getColor', + value: function getColor(ctx, values, selected, hover) { + if (values.inheritsColor !== false) { + // when this is a loop edge, just use the 'from' method + if (values.inheritsColor === 'both' && this.from.id !== this.to.id) { + var grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y); + var fromColor = void 0, + toColor = void 0; + fromColor = this.from.options.color.highlight.border; + toColor = this.to.options.color.highlight.border; - // 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 _i4 = 0; _i4 < edgesToBeDeleted.length; _i4++) { - var edge = edgesToBeDeleted[_i4]; - - var otherNodeId = this._getConnectedId(edge, clusterNodeId); - // if the other node is in another cluster, we transfer ownership of this edge to the other cluster - 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 { - fromId = this.clusteredNodes[otherNodeId].clusterId; - } - - // clone the options and apply the cluster options to them - var clonedOptions = _NetworkUtil2['default'].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) { - this._restoreEdge(replacedEdge); + if (this.from.selected === false && this.to.selected === false) { + fromColor = util.overrideOpacity(this.from.options.color.border, values.opacity); + toColor = util.overrideOpacity(this.to.options.color.border, values.opacity); + } else if (this.from.selected === true && this.to.selected === false) { + toColor = this.to.options.color.border; + } else if (this.from.selected === false && this.to.selected === true) { + fromColor = this.from.options.color.border; } - } - edge.cleanup(); - // this removes the edge from node.edges, which is why edgeIds is formed - edge.disconnect(); - delete this.body.edges[edge.id]; - } + grd.addColorStop(0, fromColor); + grd.addColorStop(1, toColor); - // handle the releasing of the edges - for (var edgeId in containedEdges) { - if (containedEdges.hasOwnProperty(edgeId)) { - this._restoreEdge(containedEdges[edgeId]); + // -------------------- this returns -------------------- // + return grd; } - } - // remove clusterNode - delete this.body.nodes[clusterNodeId]; - - if (refreshData === true) { - this.body.emitter.emit('_dataChanged'); - } - } - }, { - key: 'getNodesInCluster', - value: function getNodesInCluster(clusterId) { - var nodesArray = []; - if (this.isCluster(clusterId) === true) { - var containedNodes = this.body.nodes[clusterId].containedNodes; - for (var nodeId in containedNodes) { - if (containedNodes.hasOwnProperty(nodeId)) { - nodesArray.push(this.body.nodes[nodeId].id); - } + if (values.inheritsColor === "to") { + return util.overrideOpacity(this.to.options.color.border, values.opacity); + } else { + // "from" + return util.overrideOpacity(this.from.options.color.border, values.opacity); } + } else { + return util.overrideOpacity(values.color, values.opacity); } - - return nodesArray; } /** - * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node - * @param nodeId - * @returns {Array} - */ + * Draw a line from a node to itself, a circle + * @param {CanvasRenderingContext2D} ctx + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @private + */ }, { - key: 'findNode', - value: function findNode(nodeId) { - var stack = []; - var max = 100; - var counter = 0; + key: '_circle', + value: function _circle(ctx, values, x, y, radius) { + // draw shadow if enabled + this.enableShadow(ctx, values); - while (this.clusteredNodes[nodeId] !== undefined && counter < max) { - stack.push(this.body.nodes[nodeId].id); - nodeId = this.clusteredNodes[nodeId].clusterId; - counter++; - } - stack.push(this.body.nodes[nodeId].id); - stack.reverse(); + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, radius, 0, 2 * Math.PI, false); + ctx.stroke(); - return stack; + // disable shadows for other elements. + this.disableShadow(ctx, values); } /** - * Using a clustered nodeId, update with the new options - * @param clusteredNodeId - * @param {object} newOptions - */ + * 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 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @private + */ }, { - key: 'updateClusteredNode', - value: function updateClusteredNode(clusteredNodeId, newOptions) { - if (clusteredNodeId === undefined) { - throw new Error("No clusteredNodeId supplied to updateClusteredNode."); - } - if (newOptions === undefined) { - throw new Error("No newOptions supplied to updateClusteredNode."); - } - if (this.body.nodes[clusteredNodeId] === undefined) { - throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist."); + key: 'getDistanceToEdge', + value: function getDistanceToEdge(x1, y1, x2, y2, x3, y3, via, values) { + // x3,y3 is the point + var returnValue = 0; + if (this.from != this.to) { + returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via); + } else { + var _getCircleData10 = this._getCircleData(undefined), + _getCircleData11 = (0, _slicedToArray3['default'])(_getCircleData10, 3), + x = _getCircleData11[0], + y = _getCircleData11[1], + radius = _getCircleData11[2]; + + var dx = x - x3; + var dy = y - y3; + returnValue = Math.abs(Math.sqrt(dx * dx + dy * dy) - radius); } - this.body.nodes[clusteredNodeId].setOptions(newOptions); - this.body.emitter.emit('_dataChanged'); + if (this.labelModule.size.left < x3 && this.labelModule.size.left + this.labelModule.size.width > x3 && this.labelModule.size.top < y3 && this.labelModule.size.top + this.labelModule.size.height > y3) { + return 0; + } else { + return returnValue; + } } - - /** - * Using a base edgeId, update all related clustered edges with the new options - * @param startEdgeId - * @param {object} newOptions - */ - }, { - key: 'updateEdge', - value: function updateEdge(startEdgeId, newOptions) { - if (startEdgeId === undefined) { - throw new Error("No startEdgeId supplied to updateEdge."); - } - if (newOptions === undefined) { - throw new Error("No newOptions supplied to updateEdge."); - } - if (this.body.edges[startEdgeId] === undefined) { - throw new Error("The startEdgeId supplied to updateEdge does not exist."); - } + key: '_getDistanceToLine', + value: function _getDistanceToLine(x1, y1, x2, y2, x3, y3) { + var px = x2 - x1; + var py = y2 - y1; + var something = px * px + py * py; + var u = ((x3 - x1) * px + (y3 - y1) * py) / something; - var allEdgeIds = this.getClusteredEdges(startEdgeId); - for (var i = 0; i < allEdgeIds.length; i++) { - var edge = this.body.edges[allEdgeIds[i]]; - edge.setOptions(newOptions); + if (u > 1) { + u = 1; + } else if (u < 0) { + u = 0; } - this.body.emitter.emit('_dataChanged'); - } - /** - * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId) - * @param edgeId - * @returns {Array} - */ + var x = x1 + u * px; + var y = y1 + u * py; + var dx = x - x3; + var dy = y - y3; - }, { - key: 'getClusteredEdges', - value: function getClusteredEdges(edgeId) { - var stack = []; - var max = 100; - var counter = 0; + //# Note: If the actual distance does not matter, + //# if you only want to compare what this function + //# returns to other results of this function, you + //# can just return the squared distance instead + //# (i.e. remove the sqrt) to gain a little performance - while (edgeId !== undefined && this.body.edges[edgeId] !== undefined && counter < max) { - stack.push(this.body.edges[edgeId].id); - edgeId = this.body.edges[edgeId].edgeReplacedById; - counter++; - } - stack.reverse(); - return stack; + return Math.sqrt(dx * dx + dy * dy); } /** - * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge - * @param clusteredEdgeId - * @returns baseEdgeId - */ + * + * @param ctx + * @param position + * @param viaNode + */ }, { - key: 'getBaseEdge', - value: function getBaseEdge(clusteredEdgeId) { - var baseEdgeId = clusteredEdgeId; - var max = 100; - var counter = 0; + key: 'getArrowData', + value: function getArrowData(ctx, position, viaNode, selected, hover, values) { + // set lets + var angle = void 0; + var arrowPoint = void 0; + var node1 = void 0; + var node2 = void 0; + var guideOffset = void 0; + var scaleFactor = void 0; + var type = void 0; + var lineWidth = values.width; - while (clusteredEdgeId !== undefined && this.body.edges[clusteredEdgeId] !== undefined && counter < max) { - clusteredEdgeId = this.body.edges[clusteredEdgeId].clusteringEdgeReplacingId; - counter++; - if (clusteredEdgeId !== undefined) { - baseEdgeId = clusteredEdgeId; - } + if (position === 'from') { + node1 = this.from; + node2 = this.to; + guideOffset = 0.1; + scaleFactor = values.fromArrowScale; + type = values.fromArrowType; + } else if (position === 'to') { + node1 = this.to; + node2 = this.from; + guideOffset = -0.1; + scaleFactor = values.toArrowScale; + type = values.toArrowType; + } else { + node1 = this.to; + node2 = this.from; + scaleFactor = values.middleArrowScale; + type = values.middleArrowType; } - return baseEdgeId; - } - - /** - * Get the Id the node is connected to - * @param edge - * @param nodeId - * @returns {*} - * @private - */ - }, { - key: '_getConnectedId', - value: function _getConnectedId(edge, nodeId) { - if (edge.toId != nodeId) { - return edge.toId; - } else if (edge.fromId != nodeId) { - return edge.fromId; + // if not connected to itself + if (node1 != node2) { + if (position !== 'middle') { + // draw arrow head + if (this.options.smooth.enabled === true) { + arrowPoint = this.findBorderPosition(node1, ctx, { via: viaNode }); + var guidePos = this.getPoint(Math.max(0.0, Math.min(1.0, arrowPoint.t + guideOffset)), viaNode); + angle = Math.atan2(arrowPoint.y - guidePos.y, arrowPoint.x - guidePos.x); + } else { + angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); + arrowPoint = this.findBorderPosition(node1, ctx); + } + } else { + angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); + arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow. + } } else { - return edge.fromId; + // draw circle + var _getCircleData12 = this._getCircleData(ctx), + _getCircleData13 = (0, _slicedToArray3['default'])(_getCircleData12, 3), + x = _getCircleData13[0], + y = _getCircleData13[1], + radius = _getCircleData13[2]; + + if (position === 'from') { + arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 }); + angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI; + } else if (position === 'to') { + arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.6, high: 1.0, direction: 1 }); + angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI; + } else { + arrowPoint = this._pointOnCircle(x, y, radius, 0.175); + angle = 3.9269908169872414; // === 0.175 * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI; + } } + + var length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge. + + var xi = arrowPoint.x - length * 0.9 * Math.cos(angle); + var yi = arrowPoint.y - length * 0.9 * Math.sin(angle); + var arrowCore = { x: xi, y: yi }; + + return { point: arrowPoint, core: arrowCore, angle: angle, length: length, type: type }; } /** - * We determine how many connections denote an important hub. - * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) - * - * @private - */ + * + * @param ctx + * @param selected + * @param hover + * @param arrowData + */ }, { - key: '_getHubSize', - value: function _getHubSize() { - var average = 0; - var averageSquared = 0; - var hubCounter = 0; - var largestHub = 0; + key: 'drawArrowHead', + value: function drawArrowHead(ctx, values, selected, hover, arrowData) { + // set style + ctx.strokeStyle = this.getColor(ctx, values, selected, hover); + ctx.fillStyle = ctx.strokeStyle; + ctx.lineWidth = values.width; - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var node = this.body.nodes[this.body.nodeIndices[i]]; - if (node.edges.length > largestHub) { - largestHub = node.edges.length; - } - average += node.edges.length; - averageSquared += Math.pow(node.edges.length, 2); - hubCounter += 1; + if (arrowData.type && arrowData.type.toLowerCase() === 'circle') { + // draw circle at the end of the line + ctx.circleEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length); + } else { + // draw arrow at the end of the line + ctx.arrowEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length); } - average = average / hubCounter; - averageSquared = averageSquared / hubCounter; - var variance = averageSquared - Math.pow(average, 2); - var standardDeviation = Math.sqrt(variance); - - var hubThreshold = Math.floor(average + 2 * standardDeviation); - - // always have at least one to cluster - if (hubThreshold > largestHub) { - hubThreshold = largestHub; + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.fill(); + // disable shadows for other elements. + this.disableShadow(ctx, values); + } + }, { + key: 'enableShadow', + value: function enableShadow(ctx, values) { + if (values.shadow === true) { + ctx.shadowColor = values.shadowColor; + ctx.shadowBlur = values.shadowSize; + ctx.shadowOffsetX = values.shadowX; + ctx.shadowOffsetY = values.shadowY; + } + } + }, { + key: 'disableShadow', + value: function disableShadow(ctx, values) { + if (values.shadow === true) { + ctx.shadowColor = 'rgba(0,0,0,0)'; + ctx.shadowBlur = 0; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; } - - return hubThreshold; } }]); - return ClusterEngine; + return EdgeBase; }(); - exports['default'] = ClusterEngine; + exports['default'] = EdgeBase; -/***/ }, -/* 214 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43782,142 +41864,232 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _slicedToArray2 = __webpack_require__(170); + + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + + var _getPrototypeOf = __webpack_require__(175); + + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); + var _possibleConstructorReturn2 = __webpack_require__(178); + + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + + var _inherits2 = __webpack_require__(179); + + var _inherits3 = _interopRequireDefault(_inherits2); + + var _BezierEdgeBase2 = __webpack_require__(204); + + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - var util = __webpack_require__(1); + var BezierEdgeDynamic = function (_BezierEdgeBase) { + (0, _inherits3["default"])(BezierEdgeDynamic, _BezierEdgeBase); - var NetworkUtil = function () { - function NetworkUtil() { - (0, _classCallCheck3["default"])(this, NetworkUtil); + function BezierEdgeDynamic(options, body, labelModule) { + (0, _classCallCheck3["default"])(this, BezierEdgeDynamic); + + // --> this calls the setOptions below + var _this = (0, _possibleConstructorReturn3["default"])(this, (BezierEdgeDynamic.__proto__ || (0, _getPrototypeOf2["default"])(BezierEdgeDynamic)).call(this, options, body, labelModule)); + //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked. + + + _this._boundFunction = function () { + _this.positionBezierNode(); + }; + _this.body.emitter.on("_repositionBezierNodes", _this._boundFunction); + return _this; } - /** - * Find the center position of the network considering the bounding boxes - */ + (0, _createClass3["default"])(BezierEdgeDynamic, [{ + key: "setOptions", + value: function setOptions(options) { + // check if the physics has changed. + var physicsChange = false; + if (this.options.physics !== options.physics) { + physicsChange = true; + } + // set the options and the to and from nodes + this.options = options; + this.id = this.options.id; + this.from = this.body.nodes[this.options.from]; + this.to = this.body.nodes[this.options.to]; - (0, _createClass3["default"])(NetworkUtil, null, [{ - key: "getRange", - value: function getRange(allNodes) { - var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + // setup the support node and connect + this.setupSupportNode(); + this.connect(); - var minY = 1e9, - maxY = -1e9, - minX = 1e9, - maxX = -1e9, - node; - if (specificNodes.length > 0) { - for (var i = 0; i < specificNodes.length; i++) { - node = allNodes[specificNodes[i]]; - if (minX > node.shape.boundingBox.left) { - minX = node.shape.boundingBox.left; - } - if (maxX < node.shape.boundingBox.right) { - maxX = node.shape.boundingBox.right; - } - if (minY > node.shape.boundingBox.top) { - minY = node.shape.boundingBox.top; - } // top is negative, bottom is positive - if (maxY < node.shape.boundingBox.bottom) { - maxY = node.shape.boundingBox.bottom; - } // top is negative, bottom is positive + // when we change the physics state of the edge, we reposition the support node. + if (physicsChange === true) { + this.via.setOptions({ physics: this.options.physics }); + this.positionBezierNode(); + } + } + }, { + key: "connect", + value: function connect() { + this.from = this.body.nodes[this.options.from]; + this.to = this.body.nodes[this.options.to]; + if (this.from === undefined || this.to === undefined || this.options.physics === false) { + this.via.setOptions({ physics: false }); + } else { + // fix weird behaviour where a self referencing node has physics enabled + if (this.from.id === this.to.id) { + this.via.setOptions({ physics: false }); + } else { + this.via.setOptions({ physics: true }); } } + } - if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { - minY = 0, maxY = 0, minX = 0, maxX = 0; + /** + * remove the support nodes + * @returns {boolean} + */ + + }, { + key: "cleanup", + value: function cleanup() { + this.body.emitter.off("_repositionBezierNodes", this._boundFunction); + if (this.via !== undefined) { + delete this.body.nodes[this.via.id]; + this.via = undefined; + return true; } - return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; + return false; } /** - * Find the center position of the network + * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but + * are used for the force calculation. + * + * The changed data is not called, if needed, it is returned by the main edge constructor. + * @private */ }, { - key: "getRangeCore", - value: function getRangeCore(allNodes) { - var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - var minY = 1e9, - maxY = -1e9, - minX = 1e9, - maxX = -1e9, - node; - if (specificNodes.length > 0) { - for (var i = 0; i < specificNodes.length; i++) { - node = allNodes[specificNodes[i]]; - if (minX > node.x) { - minX = node.x; - } - if (maxX < node.x) { - maxX = node.x; - } - if (minY > node.y) { - minY = node.y; - } // top is negative, bottom is positive - if (maxY < node.y) { - maxY = node.y; - } // top is negative, bottom is positive - } + key: "setupSupportNode", + value: function setupSupportNode() { + if (this.via === undefined) { + var nodeId = "edgeId:" + this.id; + var node = this.body.functions.createNode({ + id: nodeId, + shape: 'circle', + physics: true, + hidden: true + }); + this.body.nodes[nodeId] = node; + this.via = node; + this.via.parentEdgeId = this.id; + this.positionBezierNode(); } - - if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { - minY = 0, maxY = 0, minX = 0, maxX = 0; + } + }, { + 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); + this.via.y = 0.5 * (this.from.y + this.to.y); + } else if (this.via !== undefined) { + this.via.x = 0; + this.via.y = 0; } - return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; } /** - * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; - * @returns {{x: number, y: number}} + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private */ }, { - key: "findCenter", - value: function findCenter(range) { - return { x: 0.5 * (range.maxX + range.minX), - y: 0.5 * (range.maxY + range.minY) }; + key: "_line", + value: function _line(ctx, values, viaNode) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.fromPoint.x, this.fromPoint.y); + // fallback to normal straight edges + if (viaNode.x === undefined) { + ctx.lineTo(this.toPoint.x, this.toPoint.y); + } else { + ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y); + } + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.stroke(); + this.disableShadow(ctx, values); + } + }, { + key: "getViaNode", + value: function getViaNode() { + return this.via; } /** - * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes. - * @param item - * @param type - * @returns {{}} + * 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 viaNode + * @returns {{x: number, y: number}} + * @private */ }, { - key: "cloneOptions", - value: function cloneOptions(item, type) { - var clonedOptions = {}; - if (type === undefined || type === 'node') { - util.deepExtend(clonedOptions, item.options, true); - clonedOptions.x = item.x; - clonedOptions.y = item.y; - clonedOptions.amountOfConnections = item.edges.length; + key: "getPoint", + value: function getPoint(percentage) { + var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.via; + + var t = percentage; + var x = void 0, + y = void 0; + if (this.from === this.to) { + var _getCircleData = this._getCircleData(this.from), + _getCircleData2 = (0, _slicedToArray3["default"])(_getCircleData, 3), + cx = _getCircleData2[0], + cy = _getCircleData2[1], + cr = _getCircleData2[2]; + + var a = 2 * Math.PI * (1 - t); + x = cx + cr * Math.sin(a); + y = cy + cr - cr * (1 - Math.cos(a)); } else { - util.deepExtend(clonedOptions, item.options, true); + x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x; + y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y; } - return clonedOptions; + + return { x: x, y: y }; + } + }, { + key: "_findBorderPosition", + value: function _findBorderPosition(nearNode, ctx) { + return this._findBorderPositionBezier(nearNode, ctx, this.via); + } + }, { + 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); } }]); - return NetworkUtil; - }(); + return BezierEdgeDynamic; + }(_BezierEdgeBase3["default"]); - exports["default"] = NetworkUtil; + exports["default"] = BezierEdgeDynamic; -/***/ }, -/* 215 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -43925,431 +42097,397 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _getPrototypeOf = __webpack_require__(170); + var _getPrototypeOf = __webpack_require__(175); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _possibleConstructorReturn2 = __webpack_require__(173); - - var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - - var _inherits2 = __webpack_require__(174); - - var _inherits3 = _interopRequireDefault(_inherits2); - - var _Node2 = __webpack_require__(163); - - var _Node3 = _interopRequireDefault(_Node2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - /** - * - */ - var Cluster = function (_Node) { - (0, _inherits3['default'])(Cluster, _Node); - - function Cluster(options, body, imagelist, grouplist, globalOptions) { - (0, _classCallCheck3['default'])(this, Cluster); - - var _this = (0, _possibleConstructorReturn3['default'])(this, (Cluster.__proto__ || (0, _getPrototypeOf2['default'])(Cluster)).call(this, options, body, imagelist, grouplist, globalOptions)); - - _this.isCluster = true; - _this.containedNodes = {}; - _this.containedEdges = {}; - return _this; - } - - return Cluster; - }(_Node3['default']); - - exports['default'] = Cluster; + var _createClass2 = __webpack_require__(135); -/***/ }, -/* 216 */ -/***/ function(module, exports, __webpack_require__) { + var _createClass3 = _interopRequireDefault(_createClass2); - 'use strict'; + var _possibleConstructorReturn2 = __webpack_require__(178); - Object.defineProperty(exports, "__esModule", { - value: true - }); + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - var _classCallCheck2 = __webpack_require__(119); + var _inherits2 = __webpack_require__(179); - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var _inherits3 = _interopRequireDefault(_inherits2); - var _createClass2 = __webpack_require__(120); + var _BezierEdgeBase2 = __webpack_require__(204); - var _createClass3 = _interopRequireDefault(_createClass2); + var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - if (typeof window !== 'undefined') { - window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; - } - - var util = __webpack_require__(1); - - var CanvasRenderer = function () { - function CanvasRenderer(body, canvas) { - (0, _classCallCheck3['default'])(this, CanvasRenderer); - - this.body = body; - this.canvas = canvas; - - this.redrawRequested = false; - this.renderTimer = undefined; - this.requiresTimeout = true; - this.renderingActive = false; - this.renderRequests = 0; - this.pixelRatio = undefined; - this.allowRedraw = true; - - this.dragging = false; - this.options = {}; - this.defaultOptions = { - hideEdgesOnDrag: false, - hideNodesOnDrag: false - }; - util.extend(this.options, this.defaultOptions); + var BezierEdgeStatic = function (_BezierEdgeBase) { + (0, _inherits3['default'])(BezierEdgeStatic, _BezierEdgeBase); - this._determineBrowserMethod(); - this.bindEventListeners(); + function BezierEdgeStatic(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, BezierEdgeStatic); + return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeStatic.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeStatic)).call(this, options, body, labelModule)); } - (0, _createClass3['default'])(CanvasRenderer, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this = this; - - this.body.emitter.on("dragStart", function () { - _this.dragging = true; - }); - this.body.emitter.on("dragEnd", function () { - _this.dragging = false; - }); - this.body.emitter.on("_resizeNodes", function () { - _this._resizeNodes(); - }); - this.body.emitter.on("_redraw", function () { - if (_this.renderingActive === false) { - _this._redraw(); - } - }); - this.body.emitter.on("_blockRedraw", function () { - _this.allowRedraw = false; - }); - this.body.emitter.on("_allowRedraw", function () { - _this.allowRedraw = true;_this.redrawRequested = false; - }); - this.body.emitter.on("_requestRedraw", this._requestRedraw.bind(this)); - this.body.emitter.on("_startRendering", function () { - _this.renderRequests += 1; - _this.renderingActive = true; - _this._startRendering(); - }); - this.body.emitter.on("_stopRendering", function () { - _this.renderRequests -= 1; - _this.renderingActive = _this.renderRequests > 0; - _this.renderTimer = undefined; - }); - this.body.emitter.on('destroy', function () { - _this.renderRequests = 0; - _this.allowRedraw = false; - _this.renderingActive = false; - if (_this.requiresTimeout === true) { - clearTimeout(_this.renderTimer); - } else { - cancelAnimationFrame(_this.renderTimer); - } - _this.body.emitter.off(); - }); - } - }, { - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag']; - util.selectiveDeepExtend(fields, this.options, options); - } - } - }, { - key: '_startRendering', - value: function _startRendering() { - if (this.renderingActive === true) { - if (this.renderTimer === undefined) { - if (this.requiresTimeout === true) { - this.renderTimer = window.setTimeout(this._renderStep.bind(this), this.simulationInterval); // wait this.renderTimeStep milliseconds and perform the animation step function - } else { - this.renderTimer = window.requestAnimationFrame(this._renderStep.bind(this)); // wait this.renderTimeStep milliseconds and perform the animation step function - } - } - } - } - }, { - key: '_renderStep', - value: function _renderStep() { - if (this.renderingActive === true) { - // reset the renderTimer so a new scheduled animation step can be set - this.renderTimer = undefined; + /** + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private + */ - if (this.requiresTimeout === true) { - // this schedules a new simulation step - this._startRendering(); - } - this._redraw(); + (0, _createClass3['default'])(BezierEdgeStatic, [{ + key: '_line', + value: function _line(ctx, values, viaNode) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.fromPoint.x, this.fromPoint.y); - if (this.requiresTimeout === false) { - // this schedules a new simulation step - this._startRendering(); - } + // fallback to normal straight edges + if (viaNode.x === undefined) { + ctx.lineTo(this.toPoint.x, this.toPoint.y); + } else { + ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y); } + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.stroke(); + this.disableShadow(ctx, values); } - - /** - * Redraw the network with the current data - * chart will be resized too. - */ - }, { - key: 'redraw', - value: function redraw() { - this.body.emitter.emit('setSize'); - this._redraw(); + key: 'getViaNode', + value: function getViaNode() { + return this._getViaCoordinates(); } /** - * Redraw the network with the current data - * @param hidden | used to get the first estimate of the node sizes. only the nodes are drawn after which they are quickly drawn over. + * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows. + * @returns {{x: undefined, y: undefined}} * @private */ }, { - key: '_requestRedraw', - value: function _requestRedraw() { - var _this2 = this; - - if (this.redrawRequested !== true && this.renderingActive === false && this.allowRedraw === true) { - this.redrawRequested = true; - if (this.requiresTimeout === true) { - window.setTimeout(function () { - _this2._redraw(false); - }, 0); - } else { - window.requestAnimationFrame(function () { - _this2._redraw(false); - }); - } - } - } - }, { - key: '_redraw', - value: function _redraw() { - var hidden = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this.allowRedraw === true) { - this.body.emitter.emit("initRedraw"); - - this.redrawRequested = false; - var ctx = this.canvas.frame.canvas.getContext('2d'); - - // when the container div was hidden, this fixes it back up! - if (this.canvas.frame.canvas.width === 0 || this.canvas.frame.canvas.height === 0) { - this.canvas.setSize(); - } - - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - - // clear the canvas - var w = this.canvas.frame.canvas.clientWidth; - var h = this.canvas.frame.canvas.clientHeight; - ctx.clearRect(0, 0, w, h); - - // if the div is hidden, we stop the redraw here for performance. - if (this.canvas.frame.clientWidth === 0) { - return; - } - - // set scaling and translation - ctx.save(); - ctx.translate(this.body.view.translation.x, this.body.view.translation.y); - ctx.scale(this.body.view.scale, this.body.view.scale); - - ctx.beginPath(); - this.body.emitter.emit("beforeDrawing", ctx); - ctx.closePath(); - - if (hidden === false) { - if (this.dragging === false || this.dragging === true && this.options.hideEdgesOnDrag === false) { - this._drawEdges(ctx); + 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; } } - - if (this.dragging === false || this.dragging === true && this.options.hideNodesOnDrag === false) { - this._drawNodes(ctx, hidden); + } 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; - ctx.beginPath(); - this.body.emitter.emit("afterDrawing", ctx); - ctx.closePath(); + var originalAngle = Math.atan2(dy, dx); + var myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi); - // restore original scaling and translation - ctx.restore(); - if (hidden === true) { - ctx.clearRect(0, 0, w, h); + 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 viaNode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._getViaCoordinates(); + // x3,y3 is the point + return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode); } /** - * Redraw all nodes - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @param {Boolean} [alwaysShow] + * 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 viaNode + * @returns {{x: number, y: number}} * @private */ }, { - key: '_resizeNodes', - value: function _resizeNodes() { - var ctx = this.canvas.frame.canvas.getContext('2d'); - if (this.pixelRatio === undefined) { - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - } - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - ctx.save(); - ctx.translate(this.body.view.translation.x, this.body.view.translation.y); - ctx.scale(this.body.view.scale, this.body.view.scale); - - var nodes = this.body.nodes; - var node = void 0; + key: 'getPoint', + value: function getPoint(percentage) { + var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates(); - // resize all nodes - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - node = nodes[nodeId]; - node.resize(ctx); - node.updateBoundingBox(ctx, node.selected); - } - } + var t = percentage; + var x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x; + var y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y; - // restore original scaling and translation - ctx.restore(); + return { x: x, y: y }; } + }]); + return BezierEdgeStatic; + }(_BezierEdgeBase3['default']); - /** - * Redraw all nodes - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @param {Boolean} [alwaysShow] - * @private - */ + exports['default'] = BezierEdgeStatic; - }, { - key: '_drawNodes', - value: function _drawNodes(ctx) { - var alwaysShow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { - var nodes = this.body.nodes; - var nodeIndices = this.body.nodeIndices; - var node = void 0; - var selected = []; - var margin = 20; - var topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin }); - var bottomRight = this.canvas.DOMtoCanvas({ - x: this.canvas.frame.canvas.clientWidth + margin, - y: this.canvas.frame.canvas.clientHeight + margin - }); - var viewableArea = { top: topLeft.y, left: topLeft.x, bottom: bottomRight.y, right: bottomRight.x }; + 'use strict'; - // draw unselected nodes; - for (var i = 0; i < nodeIndices.length; i++) { - node = nodes[nodeIndices[i]]; - // set selected nodes aside - if (node.isSelected()) { - selected.push(nodeIndices[i]); - } else { - if (alwaysShow === true) { - node.draw(ctx); - } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) { - node.draw(ctx); - } else { - node.updateBoundingBox(ctx, node.selected); - } - } - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - // draw the selected nodes on top - for (var _i = 0; _i < selected.length; _i++) { - node = nodes[selected[_i]]; - node.draw(ctx); - } - } + var _getPrototypeOf = __webpack_require__(175); - /** - * Redraw all edges - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @private - */ + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - }, { - key: '_drawEdges', - value: function _drawEdges(ctx) { - var edges = this.body.edges; - var edgeIndices = this.body.edgeIndices; - var edge = void 0; + var _classCallCheck2 = __webpack_require__(134); - for (var i = 0; i < edgeIndices.length; i++) { - edge = edges[edgeIndices[i]]; - if (edge.connected === true) { - edge.draw(ctx); - } - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + var _possibleConstructorReturn2 = __webpack_require__(178); + + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + + var _inherits2 = __webpack_require__(179); + + var _inherits3 = _interopRequireDefault(_inherits2); + + var _EdgeBase2 = __webpack_require__(205); + + var _EdgeBase3 = _interopRequireDefault(_EdgeBase2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var StraightEdge = function (_EdgeBase) { + (0, _inherits3['default'])(StraightEdge, _EdgeBase); + + function StraightEdge(options, body, labelModule) { + (0, _classCallCheck3['default'])(this, StraightEdge); + return (0, _possibleConstructorReturn3['default'])(this, (StraightEdge.__proto__ || (0, _getPrototypeOf2['default'])(StraightEdge)).call(this, options, body, labelModule)); + } + + /** + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private + */ + + + (0, _createClass3['default'])(StraightEdge, [{ + key: '_line', + value: function _line(ctx, values) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.fromPoint.x, this.fromPoint.y); + ctx.lineTo(this.toPoint.x, this.toPoint.y); + // draw shadow if enabled + this.enableShadow(ctx, values); + ctx.stroke(); + this.disableShadow(ctx, values); + } + }, { + key: 'getViaNode', + value: function getViaNode() { + return undefined; } /** - * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because - * some implementations (safari and IE9) did not support requestAnimationFrame + * 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 */ }, { - key: '_determineBrowserMethod', - value: function _determineBrowserMethod() { - if (typeof window !== 'undefined') { - var browserType = navigator.userAgent.toLowerCase(); - this.requiresTimeout = false; - if (browserType.indexOf('msie 9.0') != -1) { - // IE 9 - this.requiresTimeout = true; - } else if (browserType.indexOf('safari') != -1) { - // safari - if (browserType.indexOf('chrome') <= -1) { - this.requiresTimeout = true; - } - } - } else { - this.requiresTimeout = true; + key: 'getPoint', + value: function getPoint(percentage) { + return { + x: (1 - percentage) * this.fromPoint.x + percentage * this.toPoint.x, + y: (1 - percentage) * this.fromPoint.y + percentage * this.toPoint.y + }; + } + }, { + key: '_findBorderPosition', + value: function _findBorderPosition(nearNode, ctx) { + var node1 = this.to; + var node2 = this.from; + if (nearNode.id === this.from.id) { + node1 = this.from; + node2 = this.to; } + + var angle = Math.atan2(node1.y - node2.y, node1.x - node2.x); + var dx = node1.x - node2.x; + var dy = node1.y - node2.y; + var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + var toBorderDist = nearNode.distanceToBorder(ctx, angle); + var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; + + var borderPos = {}; + borderPos.x = (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x; + borderPos.y = (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y; + + return borderPos; + } + }, { + key: '_getDistanceToEdge', + value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { + // x3,y3 is the point + return this._getDistanceToLine(x1, y1, x2, y2, x3, y3); } }]); - return CanvasRenderer; - }(); + return StraightEdge; + }(_EdgeBase3['default']); - exports['default'] = CanvasRenderer; + exports['default'] = StraightEdge; -/***/ }, -/* 217 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -44357,4297 +42495,4035 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); + + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var Hammer = __webpack_require__(112); - var hammerUtil = __webpack_require__(125); + var BarnesHutSolver = __webpack_require__(210)['default']; + var Repulsion = __webpack_require__(211)['default']; + var HierarchicalRepulsion = __webpack_require__(212)['default']; + var SpringSolver = __webpack_require__(213)['default']; + var HierarchicalSpringSolver = __webpack_require__(214)['default']; + var CentralGravitySolver = __webpack_require__(215)['default']; + var ForceAtlas2BasedRepulsionSolver = __webpack_require__(216)['default']; + var ForceAtlas2BasedCentralGravitySolver = __webpack_require__(217)['default']; var util = __webpack_require__(1); - /** - * Create the main frame for the Network. - * This function is executed once when a Network object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. - * @private - */ - - var Canvas = function () { - function Canvas(body) { - (0, _classCallCheck3['default'])(this, Canvas); + var PhysicsEngine = function () { + function PhysicsEngine(body) { + (0, _classCallCheck3['default'])(this, PhysicsEngine); this.body = body; - this.pixelRatio = 1; - this.resizeTimer = undefined; - this.resizeFunction = this._onResize.bind(this); - this.cameraState = {}; - this.initialized = false; - this.canvasViewCenter = {}; + this.physicsBody = { physicsNodeIndices: [], physicsEdgeIndices: [], forces: {}, velocities: {} }; + + this.physicsEnabled = true; + this.simulationInterval = 1000 / 60; + this.requiresTimeout = true; + this.previousStates = {}; + this.referenceState = {}; + this.freezeCache = {}; + this.renderTimer = undefined; + + // parameters for the adaptive timestep + this.adaptiveTimestep = false; + this.adaptiveTimestepEnabled = false; + this.adaptiveCounter = 0; + this.adaptiveInterval = 3; + this.stabilized = false; + this.startedStabilization = false; + this.stabilizationIterations = 0; + this.ready = false; // will be set to true if the stabilize + + // default options this.options = {}; this.defaultOptions = { - autoResize: true, - height: '100%', - width: '100%' + enabled: true, + barnesHut: { + theta: 0.5, + gravitationalConstant: -2000, + centralGravity: 0.3, + springLength: 95, + springConstant: 0.04, + damping: 0.09, + avoidOverlap: 0 + }, + forceAtlas2Based: { + theta: 0.5, + gravitationalConstant: -50, + centralGravity: 0.01, + springConstant: 0.08, + springLength: 100, + damping: 0.4, + avoidOverlap: 0 + }, + repulsion: { + centralGravity: 0.2, + springLength: 200, + springConstant: 0.05, + nodeDistance: 100, + damping: 0.09, + avoidOverlap: 0 + }, + hierarchicalRepulsion: { + centralGravity: 0.0, + springLength: 100, + springConstant: 0.01, + nodeDistance: 120, + damping: 0.09 + }, + maxVelocity: 50, + minVelocity: 0.75, // px/s + solver: 'barnesHut', + stabilization: { + enabled: true, + iterations: 1000, // maximum number of iteration to stabilize + updateInterval: 50, + onlyDynamicEdges: false, + fit: true + }, + timestep: 0.5, + adaptiveTimestep: true }; util.extend(this.options, this.defaultOptions); + this.timestep = 0.5; + this.layoutFailed = false; this.bindEventListeners(); } - (0, _createClass3['default'])(Canvas, [{ + (0, _createClass3['default'])(PhysicsEngine, [{ key: 'bindEventListeners', value: function bindEventListeners() { var _this = this; - // bind the events - this.body.emitter.once("resize", function (obj) { - if (obj.width !== 0) { - _this.body.view.translation.x = obj.width * 0.5; - } - if (obj.height !== 0) { - _this.body.view.translation.y = obj.height * 0.5; - } + this.body.emitter.on('initPhysics', function () { + _this.initPhysics(); }); - this.body.emitter.on("setSize", this.setSize.bind(this)); - this.body.emitter.on("destroy", function () { - _this.hammerFrame.destroy(); - _this.hammer.destroy(); - _this._cleanUp(); + this.body.emitter.on('_layoutFailed', function () { + _this.layoutFailed = true; + }); + this.body.emitter.on('resetPhysics', function () { + _this.stopSimulation();_this.ready = false; + }); + this.body.emitter.on('disablePhysics', function () { + _this.physicsEnabled = false;_this.stopSimulation(); + }); + this.body.emitter.on('restorePhysics', function () { + _this.setOptions(_this.options); + if (_this.ready === true) { + _this.startSimulation(); + } + }); + this.body.emitter.on('startSimulation', function () { + if (_this.ready === true) { + _this.startSimulation(); + } + }); + this.body.emitter.on('stopSimulation', function () { + _this.stopSimulation(); + }); + this.body.emitter.on('destroy', function () { + _this.stopSimulation(false); + _this.body.emitter.off(); + }); + // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed. + this.body.emitter.on("_dataChanged", function () { + // update shortcut lists + _this.updatePhysicsData(); }); + + // debug: show forces + // this.body.emitter.on("afterDrawing", (ctx) => {this._drawForces(ctx);}); } + + /** + * set the physics options + * @param options + */ + }, { key: 'setOptions', value: function setOptions(options) { - var _this2 = this; - if (options !== undefined) { - var fields = ['width', 'height', 'autoResize']; - util.selectiveDeepExtend(fields, this.options, options); - } + if (options === false) { + this.options.enabled = false; + this.physicsEnabled = false; + this.stopSimulation(); + } else { + this.physicsEnabled = true; + util.selectiveNotDeepExtend(['stabilization'], this.options, options); + util.mergeOptions(this.options, options, 'stabilization'); - if (this.options.autoResize === true) { - // automatically adapt to a changing size of the browser. - this._cleanUp(); - this.resizeTimer = setInterval(function () { - var changed = _this2.setSize(); - if (changed === true) { - _this2.body.emitter.emit("_requestRedraw"); + if (options.enabled === undefined) { + this.options.enabled = true; } - }, 1000); - this.resizeFunction = this._onResize.bind(this); - util.addEventListener(window, 'resize', this.resizeFunction); + + if (this.options.enabled === false) { + this.physicsEnabled = false; + this.stopSimulation(); + } + + // set the timestep + this.timestep = this.options.timestep; + } } + this.init(); } + + /** + * configure the engine. + */ + }, { - key: '_cleanUp', - value: function _cleanUp() { - // automatically adapt to a changing size of the browser. - if (this.resizeTimer !== undefined) { - clearInterval(this.resizeTimer); + key: 'init', + value: function init() { + var options; + if (this.options.solver === 'forceAtlas2Based') { + options = this.options.forceAtlas2Based; + this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(this.body, this.physicsBody, options); + this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options); + this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(this.body, this.physicsBody, options); + } else if (this.options.solver === 'repulsion') { + options = this.options.repulsion; + this.nodesSolver = new Repulsion(this.body, this.physicsBody, options); + this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options); + this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options); + } else if (this.options.solver === 'hierarchicalRepulsion') { + options = this.options.hierarchicalRepulsion; + this.nodesSolver = new HierarchicalRepulsion(this.body, this.physicsBody, options); + this.edgesSolver = new HierarchicalSpringSolver(this.body, this.physicsBody, options); + this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options); + } else { + // barnesHut + options = this.options.barnesHut; + this.nodesSolver = new BarnesHutSolver(this.body, this.physicsBody, options); + this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options); + this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options); } - util.removeEventListener(window, 'resize', this.resizeFunction); - this.resizeFunction = undefined; - } - }, { - key: '_onResize', - value: function _onResize() { - this.setSize(); - this.body.emitter.emit("_redraw"); + + this.modelOptions = options; } /** - * Get and store the cameraState - * @private + * initialize the engine */ }, { - key: '_getCameraState', - value: function _getCameraState() { - var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.pixelRatio; - - if (this.initialized === true) { - this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio; - this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio; - this.cameraState.scale = this.body.view.scale; - this.cameraState.position = this.DOMtoCanvas({ - x: 0.5 * this.frame.canvas.width / pixelRatio, - y: 0.5 * this.frame.canvas.height / pixelRatio - }); + key: 'initPhysics', + value: function initPhysics() { + if (this.physicsEnabled === true && this.options.enabled === true) { + if (this.options.stabilization.enabled === true) { + this.stabilize(); + } else { + this.stabilized = false; + this.ready = true; + this.body.emitter.emit('fit', {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom + this.startSimulation(); + } + } else { + this.ready = true; + this.body.emitter.emit('fit'); } } /** - * Set the cameraState - * @private + * Start the simulation */ }, { - key: '_setCameraState', - value: function _setCameraState() { - if (this.cameraState.scale !== undefined && this.frame.canvas.clientWidth !== 0 && this.frame.canvas.clientHeight !== 0 && this.pixelRatio !== 0 && this.cameraState.previousWidth > 0) { + key: 'startSimulation', + value: function startSimulation() { + if (this.physicsEnabled === true && this.options.enabled === true) { + this.stabilized = false; - var widthRatio = this.frame.canvas.width / this.pixelRatio / this.cameraState.previousWidth; - var heightRatio = this.frame.canvas.height / this.pixelRatio / this.cameraState.previousHeight; - var newScale = this.cameraState.scale; + // when visible, adaptivity is disabled. + this.adaptiveTimestep = false; - if (widthRatio != 1 && heightRatio != 1) { - newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio); - } else if (widthRatio != 1) { - newScale = this.cameraState.scale * widthRatio; - } else if (heightRatio != 1) { - newScale = this.cameraState.scale * heightRatio; + // this sets the width of all nodes initially which could be required for the avoidOverlap + this.body.emitter.emit("_resizeNodes"); + if (this.viewFunction === undefined) { + this.viewFunction = this.simulationStep.bind(this); + this.body.emitter.on('initRedraw', this.viewFunction); + this.body.emitter.emit('_startRendering'); } - - this.body.view.scale = newScale; - // this comes from the view module. - var currentViewCenter = 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: currentViewCenter.x - this.cameraState.position.x, - y: currentViewCenter.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; + } else { + this.body.emitter.emit('_redraw'); } } + + /** + * Stop the simulation, force stabilization. + */ + }, { - key: '_prepareValue', - value: function _prepareValue(value) { - if (typeof value === 'number') { - return value + 'px'; - } else if (typeof value === 'string') { - if (value.indexOf('%') !== -1 || value.indexOf('px') !== -1) { - return value; - } else if (value.indexOf('%') === -1) { - return value + 'px'; + key: 'stopSimulation', + value: function stopSimulation() { + var emit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + this.stabilized = true; + if (emit === true) { + this._emitStabilized(); + } + if (this.viewFunction !== undefined) { + this.body.emitter.off('initRedraw', this.viewFunction); + this.viewFunction = undefined; + if (emit === true) { + this.body.emitter.emit('_stopRendering'); } } - throw new Error('Could not use the value supplied for width or height:' + value); } /** - * Create the HTML + * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized. + * */ }, { - key: '_create', - value: function _create() { - // remove all elements from the container element. - while (this.body.container.hasChildNodes()) { - this.body.container.removeChild(this.body.container.firstChild); - } - - this.frame = document.createElement('div'); - this.frame.className = 'vis-network'; - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; - this.frame.tabIndex = 900; // tab index is required for keycharm to bind keystrokes to the div instead of the window - - ////////////////////////////////////////////////////////////////// - - this.frame.canvas = document.createElement("canvas"); - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); + key: 'simulationStep', + value: function simulationStep() { + // check if the physics have settled + var startTime = Date.now(); + this.physicsTick(); + var physicsTime = Date.now() - startTime; - 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); - } else { - var ctx = this.frame.canvas.getContext("2d"); - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + // run double speed if it is a little graph + if ((physicsTime < 0.4 * this.simulationInterval || this.runDoubleSpeed === true) && this.stabilized === false) { + this.physicsTick(); - this.frame.canvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + // this makes sure there is no jitter. The decision is taken once to run it at double speed. + this.runDoubleSpeed = true; } - // add the frame to the container element - this.body.container.appendChild(this.frame); - - this.body.view.scale = 1; - this.body.view.translation = { x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight }; - - this._bindHammer(); + if (this.stabilized === true) { + this.stopSimulation(); + } } /** - * This function binds hammer, it can be repeated over and over due to the uniqueness check. + * trigger the stabilized event. * @private */ }, { - key: '_bindHammer', - value: function _bindHammer() { - var _this3 = this; - - if (this.hammer !== undefined) { - this.hammer.destroy(); - } - this.drag = {}; - this.pinch = {}; - - // init hammer - this.hammer = new Hammer(this.frame.canvas); - this.hammer.get('pinch').set({ enable: true }); - // enable to get better response, todo: test on mobile. - this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_ALL }); - - hammerUtil.onTouch(this.hammer, function (event) { - _this3.body.eventListeners.onTouch(event); - }); - this.hammer.on('tap', function (event) { - _this3.body.eventListeners.onTap(event); - }); - this.hammer.on('doubletap', function (event) { - _this3.body.eventListeners.onDoubleTap(event); - }); - this.hammer.on('press', function (event) { - _this3.body.eventListeners.onHold(event); - }); - this.hammer.on('panstart', function (event) { - _this3.body.eventListeners.onDragStart(event); - }); - this.hammer.on('panmove', function (event) { - _this3.body.eventListeners.onDrag(event); - }); - this.hammer.on('panend', function (event) { - _this3.body.eventListeners.onDragEnd(event); - }); - this.hammer.on('pinch', function (event) { - _this3.body.eventListeners.onPinch(event); - }); - - // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work? - this.frame.canvas.addEventListener('mousewheel', function (event) { - _this3.body.eventListeners.onMouseWheel(event); - }); - this.frame.canvas.addEventListener('DOMMouseScroll', function (event) { - _this3.body.eventListeners.onMouseWheel(event); - }); + key: '_emitStabilized', + value: function _emitStabilized() { + var _this2 = this; - this.frame.canvas.addEventListener('mousemove', function (event) { - _this3.body.eventListeners.onMouseMove(event); - }); - this.frame.canvas.addEventListener('contextmenu', function (event) { - _this3.body.eventListeners.onContext(event); - }); + var amountOfIterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.stabilizationIterations; - this.hammerFrame = new Hammer(this.frame); - hammerUtil.onRelease(this.hammerFrame, function (event) { - _this3.body.eventListeners.onRelease(event); - }); + if (this.stabilizationIterations > 1 || this.startedStabilization === true) { + setTimeout(function () { + _this2.body.emitter.emit('stabilized', { iterations: amountOfIterations }); + _this2.startedStabilization = false; + _this2.stabilizationIterations = 0; + }, 0); + } } /** - * Set a new size for the network - * @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%') + * A single simulation step (or 'tick') in the physics simulation + * + * @private */ }, { - key: 'setSize', - value: function setSize() { - var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.width; - var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.height; + key: 'physicsTick', + value: function physicsTick() { + // this is here to ensure that there is no start event when the network is already stable. + if (this.startedStabilization === false) { + this.body.emitter.emit('startStabilizing'); + this.startedStabilization = true; + } - width = this._prepareValue(width); - height = this._prepareValue(height); + if (this.stabilized === false) { + // 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; - var emitEvent = false; - var oldWidth = this.frame.canvas.width; - var oldHeight = this.frame.canvas.height; + // 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(); - // update the pixel ratio - var ctx = this.frame.canvas.getContext("2d"); - var previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); + // 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; - if (width != this.options.width || height != this.options.height || this.frame.style.width != width || this.frame.style.height != height) { - this._getCameraState(previousRatio); + // since it's half the step, we do it twice. + this.calculateForces(); + this.moveNodes(); + this.calculateForces(); + this.moveNodes(); - this.frame.style.width = width; - this.frame.style.height = height; + // 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(); + } - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; + // 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(); + } - this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio); - this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio); + // determine if the network has stabilzied + if (this.stabilized === true) { + this.revert(); + } - this.options.width = width; - this.options.height = height; + this.stabilizationIterations++; + } + } - this.canvasViewCenter = { - x: 0.5 * this.frame.clientWidth, - y: 0.5 * this.frame.clientHeight - }; + /** + * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time. + * + * @private + */ - emitEvent = true; - } else { - // this would adapt the width of the canvas to the width from 100% if and only if - // there is a change. + }, { + key: 'updatePhysicsData', + value: function updatePhysicsData() { + this.physicsBody.forces = {}; + this.physicsBody.physicsNodeIndices = []; + this.physicsBody.physicsEdgeIndices = []; + var nodes = this.body.nodes; + var edges = this.body.edges; - // store the camera if there is a change in size. - if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio) || this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) { - this._getCameraState(previousRatio); + // get node indices for physics + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + if (nodes[nodeId].options.physics === true) { + this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id); + } } + } - if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio)) { - this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio); - emitEvent = true; - } - if (this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) { - this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio); - emitEvent = true; + // get edge indices for physics + for (var edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + if (edges[edgeId].options.physics === true) { + this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id); + } } } - if (emitEvent === true) { - this.body.emitter.emit('resize', { - width: Math.round(this.frame.canvas.width / this.pixelRatio), - height: Math.round(this.frame.canvas.height / this.pixelRatio), - oldWidth: Math.round(oldWidth / this.pixelRatio), - oldHeight: Math.round(oldHeight / this.pixelRatio) - }); + // get the velocity and the forces vector + for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) { + var _nodeId = this.physicsBody.physicsNodeIndices[i]; + this.physicsBody.forces[_nodeId] = { x: 0, y: 0 }; - // restore the camera on change. - this._setCameraState(); + // forces can be reset because they are recalculated. Velocities have to persist. + if (this.physicsBody.velocities[_nodeId] === undefined) { + this.physicsBody.velocities[_nodeId] = { x: 0, y: 0 }; + } } - // set initialized so the get and set camera will work from now on. - this.initialized = true; - return emitEvent; - } - }, { - key: '_XconvertDOMtoCanvas', - - - /** - * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} x - * @returns {number} - * @private - */ - value: function _XconvertDOMtoCanvas(x) { - return (x - this.body.view.translation.x) / this.body.view.scale; + // clean deleted nodes from the velocity vector + for (var _nodeId2 in this.physicsBody.velocities) { + if (nodes[_nodeId2] === undefined) { + delete this.physicsBody.velocities[_nodeId2]; + } + } } /** - * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the X coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} x - * @returns {number} - * @private + * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized. */ }, { - key: '_XconvertCanvasToDOM', - value: function _XconvertCanvasToDOM(x) { - return x * this.body.view.scale + this.body.view.translation.x; - } - - /** - * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} y - * @returns {number} - * @private - */ + key: 'revert', + value: function revert() { + var nodeIds = (0, _keys2['default'])(this.previousStates); + var nodes = this.body.nodes; + var velocities = this.physicsBody.velocities; + this.referenceState = {}; - }, { - key: '_YconvertDOMtoCanvas', - value: function _YconvertDOMtoCanvas(y) { - return (y - this.body.view.translation.y) / this.body.view.scale; + 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; + nodes[nodeId].y = this.previousStates[nodeId].y; + } + } else { + delete this.previousStates[nodeId]; + } + } } /** - * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the Y coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} y - * @returns {number} - * @private + * This compares the reference state to the current state */ }, { - key: '_YconvertCanvasToDOM', - value: function _YconvertCanvasToDOM(y) { - return y * this.body.view.scale + this.body.view.translation.y; - } + key: '_evaluateStepQuality', + value: function _evaluateStepQuality() { + var dx = void 0, + dy = void 0, + dpos = void 0; + var nodes = this.body.nodes; + var reference = this.referenceState; + var posThreshold = 0.3; - /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor - */ + 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; - }, { - key: 'canvasToDOM', - value: function canvasToDOM(pos) { - return { x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y) }; + dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); + + if (dpos > posThreshold) { + return false; + } + } + } + return true; } /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor + * move the nodes one timestep and check if they are stabilized + * @returns {boolean} */ }, { - key: 'DOMtoCanvas', - value: function DOMtoCanvas(pos) { - return { x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y) }; - } - }]); - return Canvas; - }(); - - exports['default'] = Canvas; - -/***/ }, -/* 218 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = __webpack_require__(119); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = __webpack_require__(120); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _NetworkUtil = __webpack_require__(214); - - var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var util = __webpack_require__(1); - - var View = function () { - function View(body, canvas) { - var _this = this; - - (0, _classCallCheck3['default'])(this, View); - - this.body = body; - this.canvas = canvas; - - this.animationSpeed = 1 / this.renderRefreshRate; - this.animationEasingFunction = "easeInOutQuint"; - this.easingTime = 0; - this.sourceScale = 0; - this.targetScale = 0; - this.sourceTranslation = 0; - this.targetTranslation = 0; - this.lockedOnNodeId = undefined; - this.lockedOnNodeOffset = undefined; - this.touchTime = 0; - - this.viewFunction = undefined; + key: 'moveNodes', + value: function moveNodes() { + var nodeIndices = this.physicsBody.physicsNodeIndices; + var maxVelocity = this.options.maxVelocity ? this.options.maxVelocity : 1e9; + var maxNodeVelocity = 0; + var averageNodeVelocity = 0; - this.body.emitter.on("fit", this.fit.bind(this)); - this.body.emitter.on("animationFinished", function () { - _this.body.emitter.emit("_stopRendering"); - }); - this.body.emitter.on("unlockNode", this.releaseNode.bind(this)); - } + // the velocity threshold (energy in the system) for the adaptivity toggle + var velocityAdaptiveThreshold = 5; - (0, _createClass3['default'])(View, [{ - key: 'setOptions', - value: function setOptions() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + 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 + maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity); + averageNodeVelocity += nodeVelocity; + } - this.options = options; + // evaluating the stabilized and adaptiveTimestepEnabled conditions + this.adaptiveTimestepEnabled = averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold; + this.stabilized = maxNodeVelocity < this.options.minVelocity; } /** - * This function zooms out to fit all data on screen based on amount of nodes - * @param {Object} Options - * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; + * Perform the actual step + * + * @param nodeId + * @param maxVelocity + * @returns {number} + * @private */ }, { - key: 'fit', - value: function fit() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { nodes: [] }; - var initialZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var range = void 0; - var zoomLevel = void 0; - if (options.nodes === undefined || options.nodes.length === 0) { - options.nodes = this.body.nodeIndices; - } - - if (initialZoom === true) { - // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation. - var positionDefined = 0; - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - if (node.predefinedPosition === true) { - positionDefined += 1; - } - } - } - if (positionDefined > 0.5 * this.body.nodeIndices.length) { - this.fit(options, false); - return; - } - - range = _NetworkUtil2['default'].getRange(this.body.nodes, options.nodes); + key: '_performStep', + value: function _performStep(nodeId, maxVelocity) { + var node = this.body.nodes[nodeId]; + var timestep = this.timestep; + var forces = this.physicsBody.forces; + var velocities = this.physicsBody.velocities; - var numberOfNodes = this.body.nodeIndices.length; - zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + // store the state so we can revert + this.previousStates[nodeId] = { x: node.x, y: node.y, vx: velocities[nodeId].x, vy: velocities[nodeId].y }; - // correct for larger canvasses. - var factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600); - zoomLevel *= factor; + if (node.options.fixed.x === false) { + var dx = this.modelOptions.damping * velocities[nodeId].x; // damping force + var ax = (forces[nodeId].x - dx) / node.options.mass; // acceleration + velocities[nodeId].x += ax * timestep; // velocity + velocities[nodeId].x = Math.abs(velocities[nodeId].x) > maxVelocity ? velocities[nodeId].x > 0 ? maxVelocity : -maxVelocity : velocities[nodeId].x; + node.x += velocities[nodeId].x * timestep; // position } else { - this.body.emitter.emit("_resizeNodes"); - range = _NetworkUtil2['default'].getRange(this.body.nodes, options.nodes); - - var xDistance = Math.abs(range.maxX - range.minX) * 1.1; - var yDistance = Math.abs(range.maxY - range.minY) * 1.1; - - var xZoomLevel = this.canvas.frame.canvas.clientWidth / xDistance; - var yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance; - - zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel; + forces[nodeId].x = 0; + velocities[nodeId].x = 0; } - if (zoomLevel > 1.0) { - zoomLevel = 1.0; - } else if (zoomLevel === 0) { - zoomLevel = 1.0; + if (node.options.fixed.y === false) { + var dy = this.modelOptions.damping * velocities[nodeId].y; // damping force + var ay = (forces[nodeId].y - dy) / node.options.mass; // acceleration + velocities[nodeId].y += ay * timestep; // velocity + velocities[nodeId].y = Math.abs(velocities[nodeId].y) > maxVelocity ? velocities[nodeId].y > 0 ? maxVelocity : -maxVelocity : velocities[nodeId].y; + node.y += velocities[nodeId].y * timestep; // position + } else { + forces[nodeId].y = 0; + velocities[nodeId].y = 0; } - var center = _NetworkUtil2['default'].findCenter(range); - var animationOptions = { position: center, scale: zoomLevel, animation: options.animation }; - this.moveTo(animationOptions); + var totalVelocity = Math.sqrt(Math.pow(velocities[nodeId].x, 2) + Math.pow(velocities[nodeId].y, 2)); + return totalVelocity; } - // animation - /** - * Center a node in view. - * - * @param {Number} nodeId - * @param {Number} [options] + * calculate the forces for one physics iteration. */ }, { - key: 'focus', - value: function focus(nodeId) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + key: 'calculateForces', + value: function calculateForces() { + this.gravitySolver.solve(); + this.nodesSolver.solve(); + this.edgesSolver.solve(); + } - if (this.body.nodes[nodeId] !== undefined) { - var nodePosition = { x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y }; - options.position = nodePosition; - options.lockedOnNode = nodeId; + /** + * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization + * because only the supportnodes for the smoothCurves have to settle. + * + * @private + */ - this.moveTo(options); - } else { - console.log("Node: " + nodeId + " cannot be found."); + }, { + key: '_freezeNodes', + value: function _freezeNodes() { + var nodes = this.body.nodes; + for (var id in nodes) { + if (nodes.hasOwnProperty(id)) { + if (nodes[id].x && nodes[id].y) { + this.freezeCache[id] = { x: nodes[id].options.fixed.x, y: nodes[id].options.fixed.y }; + nodes[id].options.fixed.x = true; + nodes[id].options.fixed.y = true; + } + } } } /** + * Unfreezes the nodes that have been frozen by _freezeDefinedNodes. * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.scale = Number // scale to move to - * | options.position = {x:Number, y:Number} // position to move to - * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to + * @private */ }, { - key: 'moveTo', - value: function moveTo(options) { - if (options === undefined) { - options = {}; - return; - } - if (options.offset === undefined) { - options.offset = { x: 0, y: 0 }; - } - if (options.offset.x === undefined) { - options.offset.x = 0; - } - if (options.offset.y === undefined) { - options.offset.y = 0; - } - if (options.scale === undefined) { - options.scale = this.body.view.scale; - } - if (options.position === undefined) { - options.position = this.getViewPosition(); - } - if (options.animation === undefined) { - options.animation = { duration: 0 }; - } - if (options.animation === false) { - options.animation = { duration: 0 }; - } - if (options.animation === true) { - options.animation = {}; + key: '_restoreFrozenNodes', + value: function _restoreFrozenNodes() { + var nodes = this.body.nodes; + for (var id in nodes) { + if (nodes.hasOwnProperty(id)) { + if (this.freezeCache[id] !== undefined) { + nodes[id].options.fixed.x = this.freezeCache[id].x; + nodes[id].options.fixed.y = this.freezeCache[id].y; + } + } } - if (options.animation.duration === undefined) { - options.animation.duration = 1000; - } // default duration - if (options.animation.easingFunction === undefined) { - options.animation.easingFunction = "easeInOutQuad"; - } // default easing function - - this.animateView(options); + this.freezeCache = {}; } /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.time = Number // animation time in milliseconds - * | options.scale = Number // scale to animate to - * | options.position = {x:Number, y:Number} // position to animate to - * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, - * // easeInCubic, easeOutCubic, easeInOutCubic, - * // easeInQuart, easeOutQuart, easeInOutQuart, - * // easeInQuint, easeOutQuint, easeInOutQuint + * Find a stable position for all nodes */ }, { - key: 'animateView', - value: function animateView(options) { - if (options === undefined) { - return; - } - this.animationEasingFunction = options.animation.easingFunction; - // release if something focussed on the node - this.releaseNode(); - if (options.locked === true) { - this.lockedOnNodeId = options.lockedOnNode; - this.lockedOnNodeOffset = options.offset; + key: 'stabilize', + value: function stabilize() { + var _this3 = this; + + var iterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.stabilization.iterations; + + if (typeof iterations !== 'number') { + console.log('The stabilize method needs a numeric amount of iterations. Switching to default: ', this.options.stabilization.iterations); + iterations = this.options.stabilization.iterations; } - // forcefully complete the old animation if it was still running - if (this.easingTime != 0) { - this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation. + if (this.physicsBody.physicsNodeIndices.length === 0) { + this.ready = true; + return; } - this.sourceScale = this.body.view.scale; - this.sourceTranslation = this.body.view.translation; - this.targetScale = options.scale; + // enable adaptive timesteps + this.adaptiveTimestep = true && this.options.adaptiveTimestep; - // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw - // but at least then we'll have the target transition - this.body.view.scale = this.targetScale; - var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + // this sets the width of all nodes initially which could be required for the avoidOverlap + this.body.emitter.emit("_resizeNodes"); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - options.position.x, - y: viewCenter.y - options.position.y - }; - this.targetTranslation = { - x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, - y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y - }; + // stop the render loop + this.stopSimulation(); - // if the time is set to 0, don't do an animation - if (options.animation.duration === 0) { - if (this.lockedOnNodeId != undefined) { - this.viewFunction = this._lockedRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - } else { - this.body.view.scale = this.targetScale; - this.body.view.translation = this.targetTranslation; - this.body.emitter.emit("_requestRedraw"); - } - } else { - this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's - this.animationEasingFunction = options.animation.easingFunction; + // set stabilze to false + this.stabilized = false; - this.viewFunction = this._transitionRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - this.body.emitter.emit("_startRendering"); + // block redraw requests + this.body.emitter.emit('_blockRedraw'); + this.targetIterations = iterations; + + // start the stabilization + if (this.options.stabilization.onlyDynamicEdges === true) { + this._freezeNodes(); } + this.stabilizationIterations = 0; + + setTimeout(function () { + return _this3._stabilizationBatch(); + }, 0); } /** - * used to animate smoothly by hijacking the redraw function. + * One batch of stabilization * @private */ }, { - key: '_lockedRedraw', - value: function _lockedRedraw() { - var nodePosition = { x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y }; - var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - nodePosition.x, - y: viewCenter.y - nodePosition.y - }; - var sourceTranslation = this.body.view.translation; - var targetTranslation = { - x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x, - y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y - }; + key: '_stabilizationBatch', + value: function _stabilizationBatch() { + // this is here to ensure that there is at least one start event. + if (this.startedStabilization === false) { + this.body.emitter.emit('startStabilizing'); + this.startedStabilization = true; + } - this.body.view.translation = targetTranslation; - } - }, { - key: 'releaseNode', - value: function releaseNode() { - if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) { - this.body.emitter.off("initRedraw", this.viewFunction); - this.lockedOnNodeId = undefined; - this.lockedOnNodeOffset = undefined; + var count = 0; + while (this.stabilized === false && count < this.options.stabilization.updateInterval && this.stabilizationIterations < this.targetIterations) { + this.physicsTick(); + count++; + } + + if (this.stabilized === false && this.stabilizationIterations < this.targetIterations) { + this.body.emitter.emit('stabilizationProgress', { iterations: this.stabilizationIterations, total: this.targetIterations }); + setTimeout(this._stabilizationBatch.bind(this), 0); + } else { + this._finalizeStabilization(); } } /** - * - * @param easingTime + * Wrap up the stabilization, fit and emit the events. * @private */ }, { - key: '_transitionRedraw', - value: function _transitionRedraw() { - var finished = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this.easingTime += this.animationSpeed; - this.easingTime = finished === true ? 1.0 : this.easingTime; + key: '_finalizeStabilization', + value: function _finalizeStabilization() { + this.body.emitter.emit('_allowRedraw'); + if (this.options.stabilization.fit === true) { + this.body.emitter.emit('fit'); + } - var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); + if (this.options.stabilization.onlyDynamicEdges === true) { + this._restoreFrozenNodes(); + } - this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress; - this.body.view.translation = { - x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, - y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress - }; + this.body.emitter.emit('stabilizationIterationsDone'); + this.body.emitter.emit('_requestRedraw'); - // cleanup - if (this.easingTime >= 1.0) { - this.body.emitter.off("initRedraw", this.viewFunction); - this.easingTime = 0; - if (this.lockedOnNodeId != undefined) { - this.viewFunction = this._lockedRedraw.bind(this); - this.body.emitter.on("initRedraw", this.viewFunction); - } - this.body.emitter.emit("animationFinished"); + if (this.stabilized === true) { + this._emitStabilized(); + } else { + this.startSimulation(); } + + this.ready = true; } }, { - key: 'getScale', - value: function getScale() { - return this.body.view.scale; - } - }, { - key: 'getViewPosition', - value: function getViewPosition() { - return this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + key: '_drawForces', + value: function _drawForces(ctx) { + for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) { + var node = this.body.nodes[this.physicsBody.physicsNodeIndices[i]]; + var force = this.physicsBody.forces[this.physicsBody.physicsNodeIndices[i]]; + var factor = 20; + var colorFactor = 0.03; + var forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2)); + + var size = Math.min(Math.max(5, forceSize), 15); + var arrowSize = 3 * size; + + var color = util.HSVToHex((180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360, 1, 1); + + ctx.lineWidth = size; + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(node.x, node.y); + ctx.lineTo(node.x + factor * force.x, node.y + factor * force.y); + ctx.stroke(); + + var angle = Math.atan2(force.y, force.x); + ctx.fillStyle = color; + ctx.arrowEndpoint(node.x + factor * force.x + Math.cos(angle) * arrowSize, node.y + factor * force.y + Math.sin(angle) * arrowSize, angle, arrowSize); + ctx.fill(); + } } }]); - return View; + return PhysicsEngine; }(); - exports['default'] = View; + exports['default'] = PhysicsEngine; -/***/ }, -/* 219 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { - 'use strict'; + "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _NavigationHandler = __webpack_require__(220); - - var _NavigationHandler2 = _interopRequireDefault(_NavigationHandler); - - var _Popup = __webpack_require__(132); - - var _Popup2 = _interopRequireDefault(_Popup); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var util = __webpack_require__(1); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - var InteractionHandler = function () { - function InteractionHandler(body, canvas, selectionHandler) { - (0, _classCallCheck3['default'])(this, InteractionHandler); + var BarnesHutSolver = function () { + function BarnesHutSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, BarnesHutSolver); this.body = body; - this.canvas = canvas; - this.selectionHandler = selectionHandler; - this.navigationHandler = new _NavigationHandler2['default'](body, canvas); - - // bind the events from hammer to functions in this object - this.body.eventListeners.onTap = this.onTap.bind(this); - this.body.eventListeners.onTouch = this.onTouch.bind(this); - this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this); - this.body.eventListeners.onHold = this.onHold.bind(this); - this.body.eventListeners.onDragStart = this.onDragStart.bind(this); - this.body.eventListeners.onDrag = this.onDrag.bind(this); - this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this); - this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this); - this.body.eventListeners.onPinch = this.onPinch.bind(this); - this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this); - this.body.eventListeners.onRelease = this.onRelease.bind(this); - this.body.eventListeners.onContext = this.onContext.bind(this); - - this.touchTime = 0; - this.drag = {}; - this.pinch = {}; - this.popup = undefined; - this.popupObj = undefined; - this.popupTimer = undefined; - - this.body.functions.getPointer = this.getPointer.bind(this); - - this.options = {}; - this.defaultOptions = { - dragNodes: true, - dragView: true, - hover: false, - keyboard: { - enabled: false, - speed: { x: 10, y: 10, zoom: 0.02 }, - bindToWindow: true - }, - navigationButtons: false, - tooltipDelay: 300, - zoomView: true - }; - util.extend(this.options, this.defaultOptions); + this.physicsBody = physicsBody; + this.barnesHutTree; + this.setOptions(options); + this.randomSeed = 5; - this.bindEventListeners(); + // debug: show grid + //this.body.emitter.on("afterDrawing", (ctx) => {this._debug(ctx,'#ff0000')}) } - (0, _createClass3['default'])(InteractionHandler, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this = this; - - this.body.emitter.on('destroy', function () { - clearTimeout(_this.popupTimer); - delete _this.body.functions.getPointer; - }); + (0, _createClass3["default"])(BarnesHutSolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; + this.thetaInversed = 1 / this.options.theta; + this.overlapAvoidanceFactor = 1 - Math.max(0, Math.min(1, this.options.avoidOverlap)); // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius } }, { - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - // extend all but the values in fields - var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag', 'keyboard', 'multiselect', 'selectable', 'selectConnectedEdges']; - util.selectiveNotDeepExtend(fields, this.options, options); - - // merge the keyboard options in. - util.mergeOptions(this.options, options, 'keyboard'); - - if (options.tooltip) { - util.extend(this.options.tooltip, options.tooltip); - if (options.tooltip.color) { - this.options.tooltip.color = util.parseColor(options.tooltip.color); - } - } - } - - this.navigationHandler.setOptions(this.options); + key: "seededRandom", + value: function seededRandom() { + var x = Math.sin(this.randomSeed++) * 10000; + return x - Math.floor(x); } /** - * Get the pointer location from a touch location - * @param {{x: Number, y: Number}} touch - * @return {{x: Number, y: Number}} pointer + * This function calculates the forces the nodes apply on each other based on a gravitational model. + * The Barnes Hut method is used to speed up this N-body simulation. + * * @private */ }, { - key: 'getPointer', - value: function getPointer(touch) { - return { - x: touch.x - util.getAbsoluteLeft(this.canvas.frame.canvas), - y: touch.y - util.getAbsoluteTop(this.canvas.frame.canvas) - }; - } + key: "solve", + value: function solve() { + if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) { + var node = void 0; + var nodes = this.body.nodes; + var nodeIndices = this.physicsBody.physicsNodeIndices; + var nodeCount = nodeIndices.length; - /** - * On start of a touch gesture, store the pointer - * @param event - * @private - */ + // create the tree + var barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices); - }, { - key: 'onTouch', - value: function onTouch(event) { - if (new Date().valueOf() - this.touchTime > 50) { - this.drag.pointer = this.getPointer(event.center); - this.drag.pinched = false; - this.pinch.scale = this.body.view.scale; - // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) - this.touchTime = new Date().valueOf(); + // for debugging + this.barnesHutTree = barnesHutTree; + + // place the nodes one by one recursively + for (var i = 0; i < nodeCount; i++) { + node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { + // starting with root is irrelevant, it never passes the BarnesHutSolver condition + this._getForceContribution(barnesHutTree.root.children.NW, node); + this._getForceContribution(barnesHutTree.root.children.NE, node); + this._getForceContribution(barnesHutTree.root.children.SW, node); + this._getForceContribution(barnesHutTree.root.children.SE, node); + } + } } } /** - * handle tap/click event: select/unselect a node + * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. + * If a region contains a single node, we check if it is not itself, then we apply the force. + * + * @param parentBranch + * @param node * @private */ }, { - key: 'onTap', - value: function onTap(event) { - var pointer = this.getPointer(event.center); - var multiselect = this.selectionHandler.options.multiselect && (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey); - - this.checkSelectionChanges(pointer, event, multiselect); - this.selectionHandler._generateClickEvent('click', event, pointer); - } + key: "_getForceContribution", + value: function _getForceContribution(parentBranch, node) { + // we get no force contribution from an empty region + if (parentBranch.childrenCount > 0) { + var dx = void 0, + dy = void 0, + distance = void 0; - /** - * handle doubletap event - * @private - */ + // get the distance from the center of mass to the node. + dx = parentBranch.centerOfMass.x - node.x; + dy = parentBranch.centerOfMass.y - node.y; + distance = Math.sqrt(dx * dx + dy * dy); - }, { - key: 'onDoubleTap', - value: function onDoubleTap(event) { - var pointer = this.getPointer(event.center); - this.selectionHandler._generateClickEvent('doubleClick', event, pointer); + // BarnesHutSolver condition + // original condition : s/d < theta = passed === d/s > 1/theta = passed + // calcSize = 1/s --> d * 1/s > 1/theta = passed + if (distance * parentBranch.calcSize > this.thetaInversed) { + this._calculateForces(distance, dx, dy, node, parentBranch); + } else { + // Did not pass the condition, go into children if available + if (parentBranch.childrenCount === 4) { + this._getForceContribution(parentBranch.children.NW, node); + this._getForceContribution(parentBranch.children.NE, node); + this._getForceContribution(parentBranch.children.SW, node); + this._getForceContribution(parentBranch.children.SE, node); + } else { + // parentBranch must have only one node, if it was empty we wouldnt be here + if (parentBranch.children.data.id != node.id) { + // if it is not self + this._calculateForces(distance, dx, dy, node, parentBranch); + } + } + } + } } /** - * handle long tap event: multi select nodes + * Calculate the forces based on the distance. + * + * @param distance + * @param dx + * @param dy + * @param node + * @param parentBranch * @private */ }, { - key: 'onHold', - value: function onHold(event) { - var pointer = this.getPointer(event.center); - var multiselect = this.selectionHandler.options.multiselect; + key: "_calculateForces", + value: function _calculateForces(distance, dx, dy, node, parentBranch) { + if (distance === 0) { + distance = 0.1; + dx = distance; + } - this.checkSelectionChanges(pointer, event, multiselect); + if (this.overlapAvoidanceFactor < 1 && node.shape.radius) { + distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius); + } - this.selectionHandler._generateClickEvent('click', event, pointer); - this.selectionHandler._generateClickEvent('hold', event, pointer); + // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines + // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce + var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass / Math.pow(distance, 3); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + + this.physicsBody.forces[node.id].x += fx; + this.physicsBody.forces[node.id].y += fy; } /** - * handle the release of the screen + * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. * + * @param nodes + * @param nodeIndices * @private */ }, { - key: 'onRelease', - value: function onRelease(event) { - if (new Date().valueOf() - this.touchTime > 10) { - var pointer = this.getPointer(event.center); - this.selectionHandler._generateClickEvent('release', event, pointer); - // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) - this.touchTime = new Date().valueOf(); + key: "_formBarnesHutTree", + value: function _formBarnesHutTree(nodes, nodeIndices) { + var node = void 0; + var nodeCount = nodeIndices.length; + + var minX = nodes[nodeIndices[0]].x; + var minY = nodes[nodeIndices[0]].y; + var maxX = nodes[nodeIndices[0]].x; + var maxY = nodes[nodeIndices[0]].y; + + // get the range of the nodes + for (var i = 1; i < nodeCount; i++) { + var x = nodes[nodeIndices[i]].x; + var y = nodes[nodeIndices[i]].y; + if (nodes[nodeIndices[i]].options.mass > 0) { + if (x < minX) { + minX = x; + } + if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } + if (y > maxY) { + maxY = y; + } + } } - } - }, { - key: 'onContext', - value: function onContext(event) { - var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); - this.selectionHandler._generateClickEvent('oncontext', event, pointer); + // make the range a square + var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y + if (sizeDiff > 0) { + minY -= 0.5 * sizeDiff; + maxY += 0.5 * sizeDiff; + } // xSize > ySize + else { + minX += 0.5 * sizeDiff; + maxX -= 0.5 * sizeDiff; + } // xSize < ySize + + + var minimumTreeSize = 1e-5; + var rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX)); + var halfRootSize = 0.5 * rootSize; + var centerX = 0.5 * (minX + maxX), + centerY = 0.5 * (minY + maxY); + + // construct the barnesHutTree + var barnesHutTree = { + root: { + centerOfMass: { x: 0, y: 0 }, + mass: 0, + range: { + minX: centerX - halfRootSize, maxX: centerX + halfRootSize, + minY: centerY - halfRootSize, maxY: centerY + halfRootSize + }, + size: rootSize, + calcSize: 1 / rootSize, + children: { data: null }, + maxWidth: 0, + level: 0, + childrenCount: 4 + } + }; + this._splitBranch(barnesHutTree.root); + + // place the nodes one by one recursively + for (var _i = 0; _i < nodeCount; _i++) { + node = nodes[nodeIndices[_i]]; + if (node.options.mass > 0) { + this._placeInTree(barnesHutTree.root, node); + } + } + + // make global + return barnesHutTree; } /** + * this updates the mass of a branch. this is increased by adding a node. * - * @param pointer - * @param add + * @param parentBranch + * @param node + * @private */ }, { - key: 'checkSelectionChanges', - value: function checkSelectionChanges(pointer, event) { - var add = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var previouslySelectedEdgeCount = this.selectionHandler._getSelectedEdgeCount(); - var previouslySelectedNodeCount = this.selectionHandler._getSelectedNodeCount(); - var previousSelection = this.selectionHandler.getSelection(); - var selected = void 0; - if (add === true) { - selected = this.selectionHandler.selectAdditionalOnPoint(pointer); - } else { - selected = this.selectionHandler.selectOnPoint(pointer); - } - var selectedEdgesCount = this.selectionHandler._getSelectedEdgeCount(); - var selectedNodesCount = this.selectionHandler._getSelectedNodeCount(); - var currentSelection = this.selectionHandler.getSelection(); - - var _determineIfDifferent2 = this._determineIfDifferent(previousSelection, currentSelection), - nodesChanged = _determineIfDifferent2.nodesChanged, - edgesChanged = _determineIfDifferent2.edgesChanged; - - var nodeSelected = false; + key: "_updateBranchMass", + value: function _updateBranchMass(parentBranch, node) { + var totalMass = parentBranch.mass + node.options.mass; + var totalMassInv = 1 / totalMass; - if (selectedNodesCount - previouslySelectedNodeCount > 0) { - // node was selected - this.selectionHandler._generateClickEvent('selectNode', event, pointer); - selected = true; - nodeSelected = true; - } else if (nodesChanged === true && selectedNodesCount > 0) { - this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); - this.selectionHandler._generateClickEvent('selectNode', event, pointer); - nodeSelected = true; - selected = true; - } else if (selectedNodesCount - previouslySelectedNodeCount < 0) { - // node was deselected - this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); - selected = true; - } + parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; + parentBranch.centerOfMass.x *= totalMassInv; - // handle the selected edges - if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { - // edge was selected - this.selectionHandler._generateClickEvent('selectEdge', event, pointer); - selected = true; - } else if (selectedEdgesCount > 0 && edgesChanged === true) { - this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); - this.selectionHandler._generateClickEvent('selectEdge', event, pointer); - selected = true; - } else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { - // edge was deselected - this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); - selected = true; - } + parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; + parentBranch.centerOfMass.y *= totalMassInv; - // fire the select event if anything has been selected or deselected - if (selected === true) { - // select or unselect - this.selectionHandler._generateClickEvent('select', event, pointer); - } + parentBranch.mass = totalMass; + var biggestSize = Math.max(Math.max(node.height, node.radius), node.width); + parentBranch.maxWidth = parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth; } /** - * This function checks if the nodes and edges previously selected have changed. - * @param previousSelection - * @param currentSelection - * @returns {{nodesChanged: boolean, edgesChanged: boolean}} + * determine in which branch the node will be placed. + * + * @param parentBranch + * @param node + * @param skipMassUpdate * @private */ }, { - key: '_determineIfDifferent', - value: function _determineIfDifferent(previousSelection, currentSelection) { - var nodesChanged = false; - var edgesChanged = false; - - for (var i = 0; i < previousSelection.nodes.length; i++) { - if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { - nodesChanged = true; - } - } - for (var _i = 0; _i < currentSelection.nodes.length; _i++) { - if (previousSelection.nodes.indexOf(previousSelection.nodes[_i]) === -1) { - nodesChanged = true; - } + key: "_placeInTree", + value: function _placeInTree(parentBranch, node, skipMassUpdate) { + if (skipMassUpdate != true || skipMassUpdate === undefined) { + // update the mass of the branch. + this._updateBranchMass(parentBranch, node); } - for (var _i2 = 0; _i2 < previousSelection.edges.length; _i2++) { - if (currentSelection.edges.indexOf(previousSelection.edges[_i2]) === -1) { - edgesChanged = true; + + if (parentBranch.children.NW.range.maxX > node.x) { + // in NW or SW + if (parentBranch.children.NW.range.maxY > node.y) { + // in NW + this._placeInRegion(parentBranch, node, "NW"); + } else { + // in SW + this._placeInRegion(parentBranch, node, "SW"); } - } - for (var _i3 = 0; _i3 < currentSelection.edges.length; _i3++) { - if (previousSelection.edges.indexOf(previousSelection.edges[_i3]) === -1) { - edgesChanged = true; + } else { + // in NE or SE + if (parentBranch.children.NW.range.maxY > node.y) { + // in NE + this._placeInRegion(parentBranch, node, "NE"); + } else { + // in SE + this._placeInRegion(parentBranch, node, "SE"); } } - - return { nodesChanged: nodesChanged, edgesChanged: edgesChanged }; } /** - * This function is called by onDragStart. - * It is separated out because we can then overload it for the datamanipulation system. + * actually place the node in a region (or branch) * + * @param parentBranch + * @param node + * @param region * @private */ }, { - key: 'onDragStart', - value: function onDragStart(event) { - //in case the touch event was triggered on an external div, do the initial touch now. - if (this.drag.pointer === undefined) { - this.onTouch(event); - } - - // note: drag.pointer is set in onTouch to get the initial touch location - var node = this.selectionHandler.getNodeAt(this.drag.pointer); - - this.drag.dragging = true; - this.drag.selection = []; - this.drag.translation = util.extend({}, this.body.view.translation); // copy the object - this.drag.nodeId = undefined; - - if (node !== undefined && this.options.dragNodes === true) { - this.drag.nodeId = node.id; - // select the clicked node if not yet selected - if (node.isSelected() === false) { - this.selectionHandler.unselectAll(); - this.selectionHandler.selectObject(node); - } - - // after select to contain the node - this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer); - - var selection = this.selectionHandler.selectionObj.nodes; - // create an array with the selected nodes and their original location and status - for (var nodeId in selection) { - if (selection.hasOwnProperty(nodeId)) { - var object = selection[nodeId]; - var s = { - id: object.id, - node: object, - - // store original x, y, xFixed and yFixed, make the node temporarily Fixed - x: object.x, - y: object.y, - xFixed: object.options.fixed.x, - yFixed: object.options.fixed.y - }; - - object.options.fixed.x = true; - object.options.fixed.y = true; - - this.drag.selection.push(s); + key: "_placeInRegion", + value: function _placeInRegion(parentBranch, node, region) { + switch (parentBranch.children[region].childrenCount) { + case 0: + // place node here + parentBranch.children[region].children.data = node; + parentBranch.children[region].childrenCount = 1; + this._updateBranchMass(parentBranch.children[region], node); + break; + case 1: + // convert into children + // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) + // we move one node a little bit and we do not put it in the tree. + if (parentBranch.children[region].children.data.x === node.x && parentBranch.children[region].children.data.y === node.y) { + node.x += this.seededRandom(); + node.y += this.seededRandom(); + } else { + this._splitBranch(parentBranch.children[region]); + this._placeInTree(parentBranch.children[region], node); } - } - } else { - // fallback if no node is selected and thus the view is dragged. - this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer, undefined, true); + break; + case 4: + // place in branch + this._placeInTree(parentBranch.children[region], node); + break; } } /** - * handle drag event + * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch + * after the split is complete. + * + * @param parentBranch * @private */ }, { - key: 'onDrag', - value: function onDrag(event) { - var _this2 = this; - - if (this.drag.pinched === true) { - return; + key: "_splitBranch", + value: function _splitBranch(parentBranch) { + // if the branch is shaded with a node, replace the node in the new subset. + var containedNode = null; + if (parentBranch.childrenCount === 1) { + containedNode = parentBranch.children.data; + parentBranch.mass = 0; + parentBranch.centerOfMass.x = 0; + parentBranch.centerOfMass.y = 0; } + parentBranch.childrenCount = 4; + parentBranch.children.data = null; + this._insertRegion(parentBranch, "NW"); + this._insertRegion(parentBranch, "NE"); + this._insertRegion(parentBranch, "SW"); + this._insertRegion(parentBranch, "SE"); - // remove the focus on node if it is focussed on by the focusOnNode - this.body.emitter.emit('unlockNode'); - - var pointer = this.getPointer(event.center); - - var selection = this.drag.selection; - if (selection && selection.length && this.options.dragNodes === true) { - this.selectionHandler._generateClickEvent('dragging', event, pointer); - - // calculate delta's and new location - var deltaX = pointer.x - this.drag.pointer.x; - var deltaY = pointer.y - this.drag.pointer.y; - - // update position of all selected nodes - selection.forEach(function (selection) { - var node = selection.node; - // only move the node if it was not fixed initially - if (selection.xFixed === false) { - node.x = _this2.canvas._XconvertDOMtoCanvas(_this2.canvas._XconvertCanvasToDOM(selection.x) + deltaX); - } - // only move the node if it was not fixed initially - if (selection.yFixed === false) { - node.y = _this2.canvas._YconvertDOMtoCanvas(_this2.canvas._YconvertCanvasToDOM(selection.y) + deltaY); - } - }); - - // start the simulation of the physics - this.body.emitter.emit('startSimulation'); - } else { - // move the network - if (this.options.dragView === true) { - this.selectionHandler._generateClickEvent('dragging', event, pointer, undefined, true); - - // if the drag was not started properly because the click started outside the network div, start it now. - if (this.drag.pointer === undefined) { - this.onDragStart(event); - return; - } - var diffX = pointer.x - this.drag.pointer.x; - var diffY = pointer.y - this.drag.pointer.y; - - this.body.view.translation = { x: this.drag.translation.x + diffX, y: this.drag.translation.y + diffY }; - this.body.emitter.emit('_redraw'); - } + if (containedNode != null) { + this._placeInTree(parentBranch, containedNode); } } /** - * handle drag start event + * This function subdivides the region into four new segments. + * Specifically, this inserts a single new segment. + * It fills the children section of the parentBranch + * + * @param parentBranch + * @param region + * @param parentRange * @private */ }, { - key: 'onDragEnd', - value: function onDragEnd(event) { - this.drag.dragging = false; - var selection = this.drag.selection; - if (selection && selection.length) { - selection.forEach(function (s) { - // restore original xFixed and yFixed - s.node.options.fixed.x = s.xFixed; - s.node.options.fixed.y = s.yFixed; - }); - this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center)); - this.body.emitter.emit('startSimulation'); - } else { - this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center), undefined, true); - this.body.emitter.emit('_requestRedraw'); + key: "_insertRegion", + value: function _insertRegion(parentBranch, region) { + var minX = void 0, + maxX = void 0, + minY = void 0, + maxY = void 0; + var childSize = 0.5 * parentBranch.size; + switch (region) { + case "NW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "NE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "SW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; + case "SE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; } + + parentBranch.children[region] = { + centerOfMass: { x: 0, y: 0 }, + mass: 0, + range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY }, + size: 0.5 * parentBranch.size, + calcSize: 2 * parentBranch.calcSize, + children: { data: null }, + maxWidth: 0, + level: parentBranch.level + 1, + childrenCount: 0 + }; } + //--------------------------- DEBUGGING BELOW ---------------------------// + + /** - * Handle pinch event - * @param event + * This function is for debugging purposed, it draws the tree. + * + * @param ctx + * @param color * @private */ }, { - key: 'onPinch', - value: function onPinch(event) { - var pointer = this.getPointer(event.center); + key: "_debug", + value: function _debug(ctx, color) { + if (this.barnesHutTree !== undefined) { - this.drag.pinched = true; - if (this.pinch['scale'] === undefined) { - this.pinch.scale = 1; - } + ctx.lineWidth = 1; - // TODO: enabled moving while pinching? - var scale = this.pinch.scale * event.scale; - this.zoom(scale, pointer); + this._drawBranch(this.barnesHutTree.root, ctx, color); + } } /** - * Zoom the network in or out - * @param {Number} scale a number around 1, and between 0.01 and 10 - * @param {{x: Number, y: Number}} pointer Position on screen - * @return {Number} appliedScale scale is limited within the boundaries + * This function is for debugging purposes. It draws the branches recursively. + * + * @param branch + * @param ctx + * @param color * @private */ }, { - key: 'zoom', - value: function zoom(scale, pointer) { - if (this.options.zoomView === true) { - var scaleOld = this.body.view.scale; - if (scale < 0.00001) { - scale = 0.00001; - } - if (scale > 10) { - scale = 10; - } - - var preScaleDragPointer = undefined; - if (this.drag !== undefined) { - if (this.drag.dragging === true) { - preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer); - } - } - // + this.canvas.frame.canvas.clientHeight / 2 - var translation = this.body.view.translation; + key: "_drawBranch", + value: function _drawBranch(branch, ctx, color) { + if (color === undefined) { + color = "#FF0000"; + } - var scaleFrac = scale / scaleOld; - var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac; - var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac; + if (branch.childrenCount === 4) { + this._drawBranch(branch.children.NW, ctx); + this._drawBranch(branch.children.NE, ctx); + this._drawBranch(branch.children.SE, ctx); + this._drawBranch(branch.children.SW, ctx); + } + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(branch.range.minX, branch.range.minY); + ctx.lineTo(branch.range.maxX, branch.range.minY); + ctx.stroke(); - this.body.view.scale = scale; - this.body.view.translation = { x: tx, y: ty }; + ctx.beginPath(); + ctx.moveTo(branch.range.maxX, branch.range.minY); + ctx.lineTo(branch.range.maxX, branch.range.maxY); + ctx.stroke(); - if (preScaleDragPointer != undefined) { - var postScaleDragPointer = this.canvas.canvasToDOM(preScaleDragPointer); - this.drag.pointer.x = postScaleDragPointer.x; - this.drag.pointer.y = postScaleDragPointer.y; - } + ctx.beginPath(); + ctx.moveTo(branch.range.maxX, branch.range.maxY); + ctx.lineTo(branch.range.minX, branch.range.maxY); + ctx.stroke(); - this.body.emitter.emit('_requestRedraw'); + ctx.beginPath(); + ctx.moveTo(branch.range.minX, branch.range.maxY); + ctx.lineTo(branch.range.minX, branch.range.minY); + ctx.stroke(); - if (scaleOld < scale) { - this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: pointer }); - } else { - this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: pointer }); - } - } + /* + if (branch.mass > 0) { + ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); + ctx.stroke(); + } + */ } + }]); + return BarnesHutSolver; + }(); + + exports["default"] = BarnesHutSolver; + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _classCallCheck2 = __webpack_require__(134); + + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + + var RepulsionSolver = function () { + function RepulsionSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, RepulsionSolver); + + this.body = body; + this.physicsBody = physicsBody; + this.setOptions(options); + } + (0, _createClass3["default"])(RepulsionSolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; + } /** - * Event handler for mouse wheel event, used to zoom the timeline - * See http://adomas.org/javascript-mouse-wheel/ - * https://github.com/EightMedia/hammer.js/issues/256 - * @param {MouseEvent} event + * Calculate the forces the nodes apply on each other based on a repulsion field. + * This field is linearly approximated. + * * @private */ }, { - key: 'onMouseWheel', - value: function onMouseWheel(event) { - if (this.options.zoomView === true) { - // 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; - } + key: "solve", + value: function solve() { + var dx, dy, distance, fx, fy, repulsingForce, node1, node2; - // 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 !== 0) { + var nodes = this.body.nodes; + var nodeIndices = this.physicsBody.physicsNodeIndices; + var forces = this.physicsBody.forces; - // calculate the new scale - var scale = this.body.view.scale; - var zoom = delta / 10; - if (delta < 0) { - zoom = zoom / (1 - zoom); + // repulsing forces between nodes + var nodeDistance = this.options.nodeDistance; + + // approximation constants + var a = -2 / 3 / nodeDistance; + var b = 4 / 3; + + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j + for (var i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (var j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; + + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping. + if (distance === 0) { + distance = 0.1 * Math.random(); + dx = distance; } - scale *= 1 + zoom; - // calculate the pointer location - var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); + if (distance < 2 * nodeDistance) { + if (distance < 0.5 * nodeDistance) { + repulsingForce = 1.0; + } else { + repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness)) + } + repulsingForce = repulsingForce / distance; - // apply the new scale - this.zoom(scale, pointer); - } + fx = dx * repulsingForce; + fy = dy * repulsingForce; - // Prevent default actions caused by mouse wheel. - event.preventDefault(); + forces[node1.id].x -= fx; + forces[node1.id].y -= fy; + forces[node2.id].x += fx; + forces[node2.id].y += fy; + } + } } } + }]); + return RepulsionSolver; + }(); - /** - * Mouse move handler for checking whether the title moves over a node with a title. - * @param {Event} event - * @private - */ + exports["default"] = RepulsionSolver; - }, { - key: 'onMouseMove', - value: function onMouseMove(event) { - var _this3 = this; +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { - var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); - var popupVisible = false; + "use strict"; - // check if the previously selected node is still selected - if (this.popup !== undefined) { - if (this.popup.hidden === false) { - this._checkHidePopup(pointer); - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - // if the popup was not hidden above - if (this.popup.hidden === false) { - popupVisible = true; - this.popup.setPosition(pointer.x + 3, pointer.y - 5); - this.popup.show(); - } - } + var _classCallCheck2 = __webpack_require__(134); - // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over. - if (this.options.keyboard.bindToWindow === false && this.options.keyboard.enabled === true) { - this.canvas.frame.focus(); - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // start a timeout that will check if the mouse is positioned above an element - if (popupVisible === false) { - if (this.popupTimer !== undefined) { - clearInterval(this.popupTimer); // stop any running calculationTimer - this.popupTimer = undefined; - } - if (!this.drag.dragging) { - this.popupTimer = setTimeout(function () { - return _this3._checkShowPopup(pointer); - }, this.options.tooltipDelay); - } - } + var _createClass2 = __webpack_require__(135); - /** - * Adding hover highlights - */ - if (this.options.hover === true) { - // adding hover highlights - var obj = this.selectionHandler.getNodeAt(pointer); - if (obj === undefined) { - obj = this.selectionHandler.getEdgeAt(pointer); - } - this.selectionHandler.hoverObject(obj); - } + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + + var HierarchicalRepulsionSolver = function () { + function HierarchicalRepulsionSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, HierarchicalRepulsionSolver); + + this.body = body; + this.physicsBody = physicsBody; + this.setOptions(options); + } + + (0, _createClass3["default"])(HierarchicalRepulsionSolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; } /** - * Check if there is an element on the given position in the network - * (a node or edge). If so, and if this element has a title, - * show a popup window with its title. + * Calculate the forces the nodes apply on each other based on a repulsion field. + * This field is linearly approximated. * - * @param {{x:Number, y:Number}} pointer * @private */ }, { - key: '_checkShowPopup', - value: function _checkShowPopup(pointer) { - var x = this.canvas._XconvertDOMtoCanvas(pointer.x); - var y = this.canvas._YconvertDOMtoCanvas(pointer.y); - var pointerObj = { - left: x, - top: y, - right: x, - bottom: y - }; + key: "solve", + value: function solve() { + var dx, dy, distance, fx, fy, repulsingForce, node1, node2, i, j; - var previousPopupObjId = this.popupObj === undefined ? undefined : this.popupObj.id; - var nodeUnderCursor = false; - var popupType = 'node'; + var nodes = this.body.nodes; + var nodeIndices = this.physicsBody.physicsNodeIndices; + var forces = this.physicsBody.forces; - // check if a node is under the cursor. - if (this.popupObj === undefined) { - // search the nodes for overlap, select the top one in case of multiple nodes - var nodeIndices = this.body.nodeIndices; - var nodes = this.body.nodes; - var node = void 0; - var overlappingNodes = []; - for (var i = 0; i < nodeIndices.length; i++) { - node = nodes[nodeIndices[i]]; - if (node.isOverlappingWith(pointerObj) === true) { - if (node.getTitle() !== undefined) { - overlappingNodes.push(nodeIndices[i]); - } - } - } + // repulsing forces between nodes + var nodeDistance = this.options.nodeDistance; - if (overlappingNodes.length > 0) { - // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others - this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]]; - // if you hover over a node, the title of the edge is not supposed to be shown. - nodeUnderCursor = true; - } - } + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j + for (i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; - if (this.popupObj === undefined && nodeUnderCursor === false) { - // search the edges for overlap - var edgeIndices = this.body.edgeIndices; - var edges = this.body.edges; - var edge = void 0; - var overlappingEdges = []; - for (var _i4 = 0; _i4 < edgeIndices.length; _i4++) { - edge = edges[edgeIndices[_i4]]; - if (edge.isOverlappingWith(pointerObj) === true) { - if (edge.connected === true && edge.getTitle() !== undefined) { - overlappingEdges.push(edgeIndices[_i4]); + // nodes only affect nodes on their level + if (node1.level === node2.level) { + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + var steepness = 0.05; + if (distance < nodeDistance) { + repulsingForce = -Math.pow(steepness * distance, 2) + Math.pow(steepness * nodeDistance, 2); + } else { + repulsingForce = 0; } - } - } + // normalize force with + if (distance === 0) { + distance = 0.01; + } else { + repulsingForce = repulsingForce / distance; + } + fx = dx * repulsingForce; + fy = dy * repulsingForce; - if (overlappingEdges.length > 0) { - this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]]; - popupType = 'edge'; + forces[node1.id].x -= fx; + forces[node1.id].y -= fy; + forces[node2.id].x += fx; + forces[node2.id].y += fy; + } } } + } + }]); + return HierarchicalRepulsionSolver; + }(); - if (this.popupObj !== undefined) { - // show popup message window - if (this.popupObj.id !== previousPopupObjId) { - if (this.popup === undefined) { - this.popup = new _Popup2['default'](this.canvas.frame); - } + exports["default"] = HierarchicalRepulsionSolver; - this.popup.popupTargetType = popupType; - this.popup.popupTargetId = this.popupObj.id; +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { - // adjust a small offset such that the mouse cursor is located in the - // bottom left location of the popup, and you can easily move over the - // popup area - this.popup.setPosition(pointer.x + 3, pointer.y - 5); - this.popup.setText(this.popupObj.getTitle()); - this.popup.show(); - this.body.emitter.emit('showPopup', this.popupObj.id); - } - } else { - if (this.popup !== undefined) { - this.popup.hide(); - this.body.emitter.emit('hidePopup'); - } - } + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _classCallCheck2 = __webpack_require__(134); + + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + + var SpringSolver = function () { + function SpringSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, SpringSolver); + + this.body = body; + this.physicsBody = physicsBody; + this.setOptions(options); + } + + (0, _createClass3["default"])(SpringSolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; } /** - * Check if the popup must be hidden, which is the case when the mouse is no - * longer hovering on the object - * @param {{x:Number, y:Number}} pointer + * This function calculates the springforces on the nodes, accounting for the support nodes. + * * @private */ }, { - key: '_checkHidePopup', - value: function _checkHidePopup(pointer) { - var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); + key: "solve", + value: function solve() { + var edgeLength = void 0, + edge = void 0; + var edgeIndices = this.physicsBody.physicsEdgeIndices; + var edges = this.body.edges; + var node1 = void 0, + node2 = void 0, + node3 = void 0; - var stillOnObj = false; - if (this.popup.popupTargetType === 'node') { - if (this.body.nodes[this.popup.popupTargetId] !== undefined) { - stillOnObj = this.body.nodes[this.popup.popupTargetId].isOverlappingWith(pointerObj); + // forces caused by the edges, modelled as springs + for (var i = 0; i < edgeIndices.length; i++) { + edge = edges[edgeIndices[i]]; + if (edge.connected === true && edge.toId !== edge.fromId) { + // only calculate forces if nodes are in the same sector + if (this.body.nodes[edge.toId] !== undefined && this.body.nodes[edge.fromId] !== undefined) { + if (edge.edgeType.via !== undefined) { + edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length; + node1 = edge.to; + node2 = edge.edgeType.via; + node3 = edge.from; - // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it. - // we initially only check stillOnObj because this is much faster. - if (stillOnObj === true) { - var overNode = this.selectionHandler.getNodeAt(pointer); - stillOnObj = overNode === undefined ? false : overNode.id === this.popup.popupTargetId; - } - } - } else { - if (this.selectionHandler.getNodeAt(pointer) === undefined) { - if (this.body.edges[this.popup.popupTargetId] !== undefined) { - stillOnObj = this.body.edges[this.popup.popupTargetId].isOverlappingWith(pointerObj); + this._calculateSpringForce(node1, node2, 0.5 * edgeLength); + this._calculateSpringForce(node2, node3, 0.5 * edgeLength); + } else { + // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use + // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger. + edgeLength = edge.options.length === undefined ? this.options.springLength * 1.5 : edge.options.length; + this._calculateSpringForce(edge.from, edge.to, edgeLength); + } } } } + } - if (stillOnObj === false) { - this.popupObj = undefined; - this.popup.hide(); - this.body.emitter.emit('hidePopup'); + /** + * This is the code actually performing the calculation for the function above. + * + * @param node1 + * @param node2 + * @param edgeLength + * @private + */ + + }, { + key: "_calculateSpringForce", + value: function _calculateSpringForce(node1, node2, edgeLength) { + var dx = node1.x - node2.x; + var dy = node1.y - node2.y; + var distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01); + + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + var springForce = this.options.springConstant * (edgeLength - distance) / distance; + + var fx = dx * springForce; + var fy = dy * springForce; + + // handle the case where one node is not part of the physcis + if (this.physicsBody.forces[node1.id] !== undefined) { + this.physicsBody.forces[node1.id].x += fx; + this.physicsBody.forces[node1.id].y += fy; + } + + if (this.physicsBody.forces[node2.id] !== undefined) { + this.physicsBody.forces[node2.id].x -= fx; + this.physicsBody.forces[node2.id].y -= fy; } } }]); - return InteractionHandler; + return SpringSolver; }(); - exports['default'] = InteractionHandler; + exports["default"] = SpringSolver; -/***/ }, -/* 220 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { - 'use strict'; + "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - var util = __webpack_require__(1); - var Hammer = __webpack_require__(112); - var hammerUtil = __webpack_require__(125); - var keycharm = __webpack_require__(115); + var HierarchicalSpringSolver = function () { + function HierarchicalSpringSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, HierarchicalSpringSolver); - var NavigationHandler = function () { - function NavigationHandler(body, canvas) { - var _this = this; + this.body = body; + this.physicsBody = physicsBody; + this.setOptions(options); + } - (0, _classCallCheck3['default'])(this, NavigationHandler); + (0, _createClass3["default"])(HierarchicalSpringSolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; + } - this.body = body; - this.canvas = canvas; + /** + * This function calculates the springforces on the nodes, accounting for the support nodes. + * + * @private + */ - this.iconsCreated = false; - this.navigationHammers = []; - this.boundFunctions = {}; - this.touchTime = 0; - this.activated = false; + }, { + key: "solve", + value: function solve() { + var edgeLength, edge; + var dx, dy, fx, fy, springForce, distance; + var edges = this.body.edges; + var factor = 0.5; - this.body.emitter.on("activate", function () { - _this.activated = true;_this.configureKeyboardBindings(); - }); - this.body.emitter.on("deactivate", function () { - _this.activated = false;_this.configureKeyboardBindings(); - }); - this.body.emitter.on("destroy", function () { - if (_this.keycharm !== undefined) { - _this.keycharm.destroy(); + var edgeIndices = this.physicsBody.physicsEdgeIndices; + var nodeIndices = this.physicsBody.physicsNodeIndices; + var forces = this.physicsBody.forces; + + // initialize the spring force counters + for (var i = 0; i < nodeIndices.length; i++) { + var nodeId = nodeIndices[i]; + forces[nodeId].springFx = 0; + forces[nodeId].springFy = 0; } - }); - this.options = {}; - } + // forces caused by the edges, modelled as springs + for (var _i = 0; _i < edgeIndices.length; _i++) { + edge = edges[edgeIndices[_i]]; + if (edge.connected === true) { + edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length; - (0, _createClass3['default'])(NavigationHandler, [{ - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - this.options = options; - this.create(); - } - } - }, { - key: 'create', - value: function create() { - if (this.options.navigationButtons === true) { - if (this.iconsCreated === false) { - this.loadNavigationElements(); + dx = edge.from.x - edge.to.x; + dy = edge.from.y - edge.to.y; + distance = Math.sqrt(dx * dx + dy * dy); + distance = distance === 0 ? 0.01 : distance; + + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.options.springConstant * (edgeLength - distance) / distance; + + fx = dx * springForce; + fy = dy * springForce; + + if (edge.to.level != edge.from.level) { + if (forces[edge.toId] !== undefined) { + forces[edge.toId].springFx -= fx; + forces[edge.toId].springFy -= fy; + } + if (forces[edge.fromId] !== undefined) { + forces[edge.fromId].springFx += fx; + forces[edge.fromId].springFy += fy; + } + } else { + if (forces[edge.toId] !== undefined) { + forces[edge.toId].x -= factor * fx; + forces[edge.toId].y -= factor * fy; + } + if (forces[edge.fromId] !== undefined) { + forces[edge.fromId].x += factor * fx; + forces[edge.fromId].y += factor * fy; + } + } } - } else if (this.iconsCreated === true) { - this.cleanNavigation(); } - this.configureKeyboardBindings(); - } - }, { - key: 'cleanNavigation', - value: function cleanNavigation() { - // clean hammer bindings - if (this.navigationHammers.length != 0) { - for (var i = 0; i < this.navigationHammers.length; i++) { - this.navigationHammers[i].destroy(); - } - this.navigationHammers = []; + // normalize spring forces + var springForce = 1; + var springFx, springFy; + for (var _i2 = 0; _i2 < nodeIndices.length; _i2++) { + var _nodeId = nodeIndices[_i2]; + springFx = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFx)); + springFy = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFy)); + + forces[_nodeId].x += springFx; + forces[_nodeId].y += springFy; } - // clean up previous navigation items - if (this.navigationDOM && this.navigationDOM['wrapper'] && this.navigationDOM['wrapper'].parentNode) { - this.navigationDOM['wrapper'].parentNode.removeChild(this.navigationDOM['wrapper']); + // retain energy balance + var totalFx = 0; + var totalFy = 0; + for (var _i3 = 0; _i3 < nodeIndices.length; _i3++) { + var _nodeId2 = nodeIndices[_i3]; + totalFx += forces[_nodeId2].x; + totalFy += forces[_nodeId2].y; } + var correctionFx = totalFx / nodeIndices.length; + var correctionFy = totalFy / nodeIndices.length; - this.iconsCreated = false; + for (var _i4 = 0; _i4 < nodeIndices.length; _i4++) { + var _nodeId3 = nodeIndices[_i4]; + forces[_nodeId3].x -= correctionFx; + forces[_nodeId3].y -= correctionFy; + } } + }]); + return HierarchicalSpringSolver; + }(); - /** - * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation - * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent - * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. - * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. - * - * @private - */ + exports["default"] = HierarchicalSpringSolver; - }, { - key: 'loadNavigationElements', - value: function loadNavigationElements() { - var _this2 = this; +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { - this.cleanNavigation(); + "use strict"; - this.navigationDOM = {}; - var navigationDivs = ['up', 'down', 'left', 'right', 'zoomIn', 'zoomOut', 'zoomExtends']; - var navigationDivActions = ['_moveUp', '_moveDown', '_moveLeft', '_moveRight', '_zoomIn', '_zoomOut', '_fit']; + Object.defineProperty(exports, "__esModule", { + value: true + }); - this.navigationDOM['wrapper'] = document.createElement('div'); - this.navigationDOM['wrapper'].className = 'vis-navigation'; - this.canvas.frame.appendChild(this.navigationDOM['wrapper']); + var _classCallCheck2 = __webpack_require__(134); - for (var i = 0; i < navigationDivs.length; i++) { - this.navigationDOM[navigationDivs[i]] = document.createElement('div'); - this.navigationDOM[navigationDivs[i]].className = 'vis-button vis-' + navigationDivs[i]; - this.navigationDOM['wrapper'].appendChild(this.navigationDOM[navigationDivs[i]]); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var hammer = new Hammer(this.navigationDOM[navigationDivs[i]]); - if (navigationDivActions[i] === "_fit") { - hammerUtil.onTouch(hammer, this._fit.bind(this)); - } else { - hammerUtil.onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i])); - } + var _createClass2 = __webpack_require__(135); - this.navigationHammers.push(hammer); - } + var _createClass3 = _interopRequireDefault(_createClass2); - // use a hammer for the release so we do not require the one used in the rest of the network - // the one the rest uses can be overloaded by the manipulation system. - var hammerFrame = new Hammer(this.canvas.frame); - hammerUtil.onRelease(hammerFrame, function () { - _this2._stopMovement(); - }); - this.navigationHammers.push(hammerFrame); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - this.iconsCreated = true; - } - }, { - key: 'bindToRedraw', - value: function bindToRedraw(action) { - if (this.boundFunctions[action] === undefined) { - this.boundFunctions[action] = this[action].bind(this); - this.body.emitter.on("initRedraw", this.boundFunctions[action]); - this.body.emitter.emit("_startRendering"); - } + var CentralGravitySolver = function () { + function CentralGravitySolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, CentralGravitySolver); + + this.body = body; + this.physicsBody = physicsBody; + this.setOptions(options); + } + + (0, _createClass3["default"])(CentralGravitySolver, [{ + key: "setOptions", + value: function setOptions(options) { + this.options = options; } }, { - key: 'unbindFromRedraw', - value: function unbindFromRedraw(action) { - if (this.boundFunctions[action] !== undefined) { - this.body.emitter.off("initRedraw", this.boundFunctions[action]); - this.body.emitter.emit("_stopRendering"); - delete this.boundFunctions[action]; - } - } + key: "solve", + value: function solve() { + var dx = void 0, + dy = void 0, + distance = void 0, + node = void 0; + var nodes = this.body.nodes; + var nodeIndices = this.physicsBody.physicsNodeIndices; + var forces = this.physicsBody.forces; - /** - * this stops all movement induced by the navigation buttons - * - * @private - */ + for (var i = 0; i < nodeIndices.length; i++) { + var nodeId = nodeIndices[i]; + node = nodes[nodeId]; + dx = -node.x; + dy = -node.y; + distance = Math.sqrt(dx * dx + dy * dy); - }, { - key: '_fit', - value: function _fit() { - if (new Date().valueOf() - this.touchTime > 700) { - // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?) - this.body.emitter.emit("fit", { duration: 700 }); - this.touchTime = new Date().valueOf(); + this._calculateForces(distance, dx, dy, forces, node); } } /** - * this stops all movement induced by the navigation buttons - * + * Calculate the forces based on the distance. * @private */ }, { - key: '_stopMovement', - value: function _stopMovement() { - for (var boundAction in this.boundFunctions) { - if (this.boundFunctions.hasOwnProperty(boundAction)) { - this.body.emitter.off("initRedraw", this.boundFunctions[boundAction]); - this.body.emitter.emit("_stopRendering"); - } - } - this.boundFunctions = {}; + key: "_calculateForces", + value: function _calculateForces(distance, dx, dy, forces, node) { + var gravityForce = distance === 0 ? 0 : this.options.centralGravity / distance; + forces[node.id].x = dx * gravityForce; + forces[node.id].y = dy * gravityForce; } - }, { - key: '_moveUp', - value: function _moveUp() { - this.body.view.translation.y += this.options.keyboard.speed.y; - } - }, { - key: '_moveDown', - value: function _moveDown() { - this.body.view.translation.y -= this.options.keyboard.speed.y; - } - }, { - key: '_moveLeft', - value: function _moveLeft() { - this.body.view.translation.x += this.options.keyboard.speed.x; - } - }, { - key: '_moveRight', - value: function _moveRight() { - this.body.view.translation.x -= this.options.keyboard.speed.x; - } - }, { - key: '_zoomIn', - value: function _zoomIn() { - var scaleOld = this.body.view.scale; - var scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom); - var translation = this.body.view.translation; - var scaleFrac = scale / scaleOld; - var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac; - var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac; + }]); + return CentralGravitySolver; + }(); - this.body.view.scale = scale; - this.body.view.translation = { x: tx, y: ty }; - this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: null }); - } - }, { - key: '_zoomOut', - value: function _zoomOut() { - var scaleOld = this.body.view.scale; - var scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom); - var translation = this.body.view.translation; - var scaleFrac = scale / scaleOld; - var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac; - var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac; + exports["default"] = CentralGravitySolver; - this.body.view.scale = scale; - this.body.view.translation = { x: tx, y: ty }; - this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: null }); - } +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * bind all keys using keycharm. - */ + "use strict"; - }, { - key: 'configureKeyboardBindings', - value: function configureKeyboardBindings() { - var _this3 = this; + Object.defineProperty(exports, "__esModule", { + value: true + }); - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } + var _getPrototypeOf = __webpack_require__(175); - if (this.options.keyboard.enabled === true) { - if (this.options.keyboard.bindToWindow === true) { - this.keycharm = keycharm({ container: window, preventDefault: true }); - } else { - this.keycharm = keycharm({ container: this.canvas.frame, preventDefault: true }); - } + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - this.keycharm.reset(); + var _classCallCheck2 = __webpack_require__(134); - if (this.activated === true) { - this.keycharm.bind("up", function () { - _this3.bindToRedraw("_moveUp"); - }, "keydown"); - this.keycharm.bind("down", function () { - _this3.bindToRedraw("_moveDown"); - }, "keydown"); - this.keycharm.bind("left", function () { - _this3.bindToRedraw("_moveLeft"); - }, "keydown"); - this.keycharm.bind("right", function () { - _this3.bindToRedraw("_moveRight"); - }, "keydown"); - this.keycharm.bind("=", function () { - _this3.bindToRedraw("_zoomIn"); - }, "keydown"); - this.keycharm.bind("num+", function () { - _this3.bindToRedraw("_zoomIn"); - }, "keydown"); - this.keycharm.bind("num-", function () { - _this3.bindToRedraw("_zoomOut"); - }, "keydown"); - this.keycharm.bind("-", function () { - _this3.bindToRedraw("_zoomOut"); - }, "keydown"); - this.keycharm.bind("[", function () { - _this3.bindToRedraw("_zoomOut"); - }, "keydown"); - this.keycharm.bind("]", function () { - _this3.bindToRedraw("_zoomIn"); - }, "keydown"); - this.keycharm.bind("pageup", function () { - _this3.bindToRedraw("_zoomIn"); - }, "keydown"); - this.keycharm.bind("pagedown", function () { - _this3.bindToRedraw("_zoomOut"); - }, "keydown"); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - this.keycharm.bind("up", function () { - _this3.unbindFromRedraw("_moveUp"); - }, "keyup"); - this.keycharm.bind("down", function () { - _this3.unbindFromRedraw("_moveDown"); - }, "keyup"); - this.keycharm.bind("left", function () { - _this3.unbindFromRedraw("_moveLeft"); - }, "keyup"); - this.keycharm.bind("right", function () { - _this3.unbindFromRedraw("_moveRight"); - }, "keyup"); - this.keycharm.bind("=", function () { - _this3.unbindFromRedraw("_zoomIn"); - }, "keyup"); - this.keycharm.bind("num+", function () { - _this3.unbindFromRedraw("_zoomIn"); - }, "keyup"); - this.keycharm.bind("num-", function () { - _this3.unbindFromRedraw("_zoomOut"); - }, "keyup"); - this.keycharm.bind("-", function () { - _this3.unbindFromRedraw("_zoomOut"); - }, "keyup"); - this.keycharm.bind("[", function () { - _this3.unbindFromRedraw("_zoomOut"); - }, "keyup"); - this.keycharm.bind("]", function () { - _this3.unbindFromRedraw("_zoomIn"); - }, "keyup"); - this.keycharm.bind("pageup", function () { - _this3.unbindFromRedraw("_zoomIn"); - }, "keyup"); - this.keycharm.bind("pagedown", function () { - _this3.unbindFromRedraw("_zoomOut"); - }, "keyup"); - } + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + var _possibleConstructorReturn2 = __webpack_require__(178); + + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + + var _inherits2 = __webpack_require__(179); + + var _inherits3 = _interopRequireDefault(_inherits2); + + var _BarnesHutSolver2 = __webpack_require__(210); + + var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + + var ForceAtlas2BasedRepulsionSolver = function (_BarnesHutSolver) { + (0, _inherits3["default"])(ForceAtlas2BasedRepulsionSolver, _BarnesHutSolver); + + function ForceAtlas2BasedRepulsionSolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, ForceAtlas2BasedRepulsionSolver); + return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedRepulsionSolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedRepulsionSolver)).call(this, body, physicsBody, options)); + } + + /** + * Calculate the forces based on the distance. + * + * @param distance + * @param dx + * @param dy + * @param node + * @param parentBranch + * @private + */ + + + (0, _createClass3["default"])(ForceAtlas2BasedRepulsionSolver, [{ + key: "_calculateForces", + value: function _calculateForces(distance, dx, dy, node, parentBranch) { + if (distance === 0) { + distance = 0.1 * Math.random(); + dx = distance; + } + + if (this.overlapAvoidanceFactor < 1 && node.shape.radius) { + distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius); } + + var degree = node.edges.length + 1; + // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines + // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce + var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass * degree / Math.pow(distance, 2); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + + this.physicsBody.forces[node.id].x += fx; + this.physicsBody.forces[node.id].y += fy; } }]); - return NavigationHandler; - }(); + return ForceAtlas2BasedRepulsionSolver; + }(_BarnesHutSolver3["default"]); - exports['default'] = NavigationHandler; + exports["default"] = ForceAtlas2BasedRepulsionSolver; -/***/ }, -/* 221 */ -/***/ function(module, exports, __webpack_require__) { +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { - 'use strict'; + "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _getPrototypeOf = __webpack_require__(175); + + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _Node = __webpack_require__(163); + var _possibleConstructorReturn2 = __webpack_require__(178); + + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + + var _inherits2 = __webpack_require__(179); + + var _inherits3 = _interopRequireDefault(_inherits2); + + var _CentralGravitySolver2 = __webpack_require__(215); + + var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + + var ForceAtlas2BasedCentralGravitySolver = function (_CentralGravitySolver) { + (0, _inherits3["default"])(ForceAtlas2BasedCentralGravitySolver, _CentralGravitySolver); + + function ForceAtlas2BasedCentralGravitySolver(body, physicsBody, options) { + (0, _classCallCheck3["default"])(this, ForceAtlas2BasedCentralGravitySolver); + return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedCentralGravitySolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedCentralGravitySolver)).call(this, body, physicsBody, options)); + } + + /** + * Calculate the forces based on the distance. + * @private + */ + + + (0, _createClass3["default"])(ForceAtlas2BasedCentralGravitySolver, [{ + key: "_calculateForces", + value: function _calculateForces(distance, dx, dy, forces, node) { + if (distance > 0) { + var degree = node.edges.length + 1; + var gravityForce = this.options.centralGravity * degree * node.options.mass; + forces[node.id].x = dx * gravityForce; + forces[node.id].y = dy * gravityForce; + } + } + }]); + return ForceAtlas2BasedCentralGravitySolver; + }(_CentralGravitySolver3["default"]); + + exports["default"] = ForceAtlas2BasedCentralGravitySolver; + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); + + var _typeof2 = __webpack_require__(62); + + var _typeof3 = _interopRequireDefault(_typeof2); + + var _classCallCheck2 = __webpack_require__(134); - var _Node2 = _interopRequireDefault(_Node); + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _Edge = __webpack_require__(196); + var _createClass2 = __webpack_require__(135); - var _Edge2 = _interopRequireDefault(_Edge); + var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var util = __webpack_require__(1); + var NetworkUtil = __webpack_require__(219)['default']; + var Cluster = __webpack_require__(220)['default']; - var SelectionHandler = function () { - function SelectionHandler(body, canvas) { + var ClusterEngine = function () { + function ClusterEngine(body) { var _this = this; - (0, _classCallCheck3['default'])(this, SelectionHandler); + (0, _classCallCheck3['default'])(this, ClusterEngine); this.body = body; - this.canvas = canvas; - this.selectionObj = { nodes: [], edges: [] }; - this.hoverObj = { nodes: {}, edges: {} }; + this.clusteredNodes = {}; + this.clusteredEdges = {}; this.options = {}; - this.defaultOptions = { - multiselect: false, - selectable: true, - selectConnectedEdges: true, - hoverConnectedEdges: true - }; + this.defaultOptions = {}; util.extend(this.options, this.defaultOptions); - this.body.emitter.on("_dataChanged", function () { - _this.updateSelection(); + this.body.emitter.on('_resetData', function () { + _this.clusteredNodes = {};_this.clusteredEdges = {}; }); } - (0, _createClass3['default'])(SelectionHandler, [{ - key: 'setOptions', - value: function setOptions(options) { - if (options !== undefined) { - var fields = ['multiselect', 'hoverConnectedEdges', 'selectable', 'selectConnectedEdges']; - util.selectiveDeepExtend(fields, this.options, options); - } - } - - /** - * handles the selection part of the tap; - * - * @param {Object} pointer - * @private - */ - - }, { - key: 'selectOnPoint', - value: function selectOnPoint(pointer) { - var selected = false; - if (this.options.selectable === true) { - var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer); + /** + * + * @param hubsize + * @param options + */ - // unselect after getting the objects in order to restore width and height. - this.unselectAll(); - if (obj !== undefined) { - selected = this.selectObject(obj); - } - this.body.emitter.emit("_requestRedraw"); + (0, _createClass3['default'])(ClusterEngine, [{ + key: 'clusterByHubsize', + value: function clusterByHubsize(hubsize, options) { + if (hubsize === undefined) { + hubsize = this._getHubSize(); + } else if ((typeof hubsize === 'undefined' ? 'undefined' : (0, _typeof3['default'])(hubsize)) === "object") { + options = this._checkOptions(hubsize); + hubsize = this._getHubSize(); } - return selected; - } - }, { - key: 'selectAdditionalOnPoint', - value: function selectAdditionalOnPoint(pointer) { - var selectionChanged = false; - if (this.options.selectable === true) { - var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer); - - if (obj !== undefined) { - selectionChanged = true; - if (obj.isSelected() === true) { - this.deselectObject(obj); - } else { - this.selectObject(obj); - } - this.body.emitter.emit("_requestRedraw"); + var nodesToCluster = []; + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var node = this.body.nodes[this.body.nodeIndices[i]]; + if (node.edges.length >= hubsize) { + nodesToCluster.push(node.id); } } - return selectionChanged; - } - }, { - key: '_generateClickEvent', - value: function _generateClickEvent(eventType, event, pointer, oldSelection) { - var emptySelection = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - var properties = void 0; - if (emptySelection === true) { - properties = { nodes: [], edges: [] }; - } else { - properties = this.getSelection(); - } - properties['pointer'] = { - DOM: { x: pointer.x, y: pointer.y }, - canvas: this.canvas.DOMtoCanvas(pointer) - }; - properties['event'] = event; - if (oldSelection !== undefined) { - properties['previousSelection'] = oldSelection; + for (var _i = 0; _i < nodesToCluster.length; _i++) { + this.clusterByConnection(nodesToCluster[_i], options, true); } - this.body.emitter.emit(eventType, properties); - } - }, { - key: 'selectObject', - value: function selectObject(obj) { - var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.selectConnectedEdges; - if (obj !== undefined) { - if (obj instanceof _Node2['default']) { - if (highlightEdges === true) { - this._selectConnectedEdges(obj); - } - } - obj.select(); - this._addToSelection(obj); - return true; - } - return false; - } - }, { - key: 'deselectObject', - value: function deselectObject(obj) { - if (obj.isSelected() === true) { - obj.selected = false; - this._removeFromSelection(obj); - } + this.body.emitter.emit('_dataChanged'); } /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ + * loop over all nodes, check if they adhere to the condition and cluster if needed. + * @param options + * @param refreshData + */ }, { - key: '_getAllNodesOverlappingWith', - value: function _getAllNodesOverlappingWith(object) { - var overlappingNodes = []; - var nodes = this.body.nodes; - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var nodeId = this.body.nodeIndices[i]; - if (nodes[nodeId].isOverlappingWith(object)) { - overlappingNodes.push(nodeId); - } - } - return overlappingNodes; - } + key: 'cluster', + value: function cluster() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - /** - * Return a position object in canvasspace from a single point in screenspace - * - * @param pointer - * @returns {{left: number, top: number, right: number, bottom: number}} - * @private - */ + if (options.joinCondition === undefined) { + throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options."); + } - }, { - key: '_pointerToPositionObject', - value: function _pointerToPositionObject(pointer) { - var canvasPos = this.canvas.DOMtoCanvas(pointer); - return { - left: canvasPos.x - 1, - top: canvasPos.y + 1, - right: canvasPos.x + 1, - bottom: canvasPos.y - 1 - }; - } + // check if the options object is fine, append if needed + options = this._checkOptions(options); - /** - * Get the top node at the a specific point (like a click) - * - * @param {{x: Number, y: Number}} pointer - * @return {Node | undefined} node - */ + var childNodesObj = {}; + var childEdgesObj = {}; - }, { - key: 'getNodeAt', - value: function getNodeAt(pointer) { - var returnNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + // collect the nodes that will be in the cluster + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var nodeId = this.body.nodeIndices[i]; + var node = this.body.nodes[nodeId]; + var clonedOptions = NetworkUtil.cloneOptions(node); + if (options.joinCondition(clonedOptions) === true) { + childNodesObj[nodeId] = this.body.nodes[nodeId]; - // we first check if this is an navigation controls element - var positionObject = this._pointerToPositionObject(pointer); - var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); - // if there are overlapping nodes, select the last one, this is the - // one which is drawn on top of the others - if (overlappingNodes.length > 0) { - if (returnNode === true) { - return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]]; - } else { - return overlappingNodes[overlappingNodes.length - 1]; + // collect the nodes that will be in the cluster + for (var _i2 = 0; _i2 < node.edges.length; _i2++) { + var edge = node.edges[_i2]; + if (this.clusteredEdges[edge.id] === undefined) { + childEdgesObj[edge.id] = edge; + } + } } - } else { - return undefined; } + + this._cluster(childNodesObj, childEdgesObj, options, refreshData); } /** - * retrieve all edges overlapping with given object, selector is around center - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private + * Cluster all nodes in the network that have only X edges + * @param edgeCount + * @param options + * @param refreshData */ }, { - key: '_getEdgesOverlappingWith', - value: function _getEdgesOverlappingWith(object, overlappingEdges) { - var edges = this.body.edges; - for (var i = 0; i < this.body.edgeIndices.length; i++) { - var edgeId = this.body.edgeIndices[i]; - if (edges[edgeId].isOverlappingWith(object)) { - overlappingEdges.push(edgeId); - } - } - } + key: 'clusterByEdgeCount', + value: function clusterByEdgeCount(edgeCount, options) { + var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - - }, { - key: '_getAllEdgesOverlappingWith', - value: function _getAllEdgesOverlappingWith(object) { - var overlappingEdges = []; - this._getEdgesOverlappingWith(object, overlappingEdges); - return overlappingEdges; - } + options = this._checkOptions(options); + var clusters = []; + var usedNodes = {}; + var edge = void 0, + edges = void 0, + node = void 0, + nodeId = void 0, + relevantEdgeCount = void 0; + // collect the nodes that will be in the cluster + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var childNodesObj = {}; + var childEdgesObj = {}; + nodeId = this.body.nodeIndices[i]; - /** - * Place holder. To implement change the getNodeAt to a _getObjectAt. Have the _getObjectAt call - * getNodeAt and _getEdgesAt, then priortize the selection to user preferences. - * - * @param pointer - * @returns {undefined} - */ + // if this node is already used in another cluster this session, we do not have to re-evaluate it. + if (usedNodes[nodeId] === undefined) { + relevantEdgeCount = 0; + node = this.body.nodes[nodeId]; + edges = []; + for (var j = 0; j < node.edges.length; j++) { + edge = node.edges[j]; + if (this.clusteredEdges[edge.id] === undefined) { + if (edge.toId !== edge.fromId) { + relevantEdgeCount++; + } + edges.push(edge); + } + } - }, { - key: 'getEdgeAt', - value: function getEdgeAt(pointer) { - var returnEdge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + // this node qualifies, we collect its neighbours to start the clustering process. + if (relevantEdgeCount === edgeCount) { + var gatheringSuccessful = true; + for (var _j = 0; _j < edges.length; _j++) { + edge = edges[_j]; + var childNodeId = this._getConnectedId(edge, nodeId); + // 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 = NetworkUtil.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; + } + } + } - // Iterate over edges, pick closest within 10 - var canvasPos = this.canvas.DOMtoCanvas(pointer); - var mindist = 10; - var overlappingEdge = null; - var edges = this.body.edges; - for (var i = 0; i < this.body.edgeIndices.length; i++) { - var edgeId = this.body.edgeIndices[i]; - var edge = edges[edgeId]; - if (edge.connected) { - var xFrom = edge.from.x; - var yFrom = edge.from.y; - var xTo = edge.to.x; - var yTo = edge.to.y; - var dist = edge.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, canvasPos.x, canvasPos.y); - if (dist < mindist) { - overlappingEdge = edgeId; - mindist = dist; + // add to the cluster queue + if ((0, _keys2['default'])(childNodesObj).length > 0 && (0, _keys2['default'])(childEdgesObj).length > 0 && gatheringSuccessful === true) { + clusters.push({ nodes: childNodesObj, edges: childEdgesObj }); + } } } } - if (overlappingEdge) { - if (returnEdge === true) { - return this.body.edges[overlappingEdge]; - } else { - return overlappingEdge; - } - } else { - return undefined; - } - } - /** - * Add object to the selection array. - * - * @param obj - * @private - */ + for (var _i3 = 0; _i3 < clusters.length; _i3++) { + this._cluster(clusters[_i3].nodes, clusters[_i3].edges, options, false); + } - }, { - key: '_addToSelection', - value: function _addToSelection(obj) { - if (obj instanceof _Node2['default']) { - this.selectionObj.nodes[obj.id] = obj; - } else { - this.selectionObj.edges[obj.id] = obj; + if (refreshData === true) { + this.body.emitter.emit('_dataChanged'); } } /** - * Add object to the selection array. - * - * @param obj - * @private - */ + * Cluster all nodes in the network that have only 1 edge + * @param options + * @param refreshData + */ }, { - key: '_addToHover', - value: function _addToHover(obj) { - if (obj instanceof _Node2['default']) { - this.hoverObj.nodes[obj.id] = obj; - } else { - this.hoverObj.edges[obj.id] = obj; - } + key: 'clusterOutliers', + value: function clusterOutliers(options) { + var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + this.clusterByEdgeCount(1, options, refreshData); } /** - * Remove a single option from selection. - * - * @param {Object} obj - * @private + * Cluster all nodes in the network that have only 2 edge + * @param options + * @param refreshData */ }, { - key: '_removeFromSelection', - value: function _removeFromSelection(obj) { - if (obj instanceof _Node2['default']) { - delete this.selectionObj.nodes[obj.id]; - this._unselectConnectedEdges(obj); - } else { - delete this.selectionObj.edges[obj.id]; - } + key: 'clusterBridges', + value: function clusterBridges(options) { + var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + this.clusterByEdgeCount(2, options, refreshData); } /** - * Unselect all. The selectionObj is useful for this. - */ + * suck all connected nodes of a node into the node. + * @param nodeId + * @param options + * @param refreshData + */ }, { - key: 'unselectAll', - value: function unselectAll() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - this.selectionObj.nodes[nodeId].unselect(); - } + key: 'clusterByConnection', + value: function clusterByConnection(nodeId, options) { + var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + // kill conditions + if (nodeId === undefined) { + throw new Error("No nodeId supplied to clusterByConnection!"); } - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - this.selectionObj.edges[edgeId].unselect(); - } + if (this.body.nodes[nodeId] === undefined) { + throw new Error("The nodeId given to clusterByConnection does not exist!"); } - this.selectionObj = { nodes: {}, edges: {} }; - } + var node = this.body.nodes[nodeId]; + options = this._checkOptions(options, node); + if (options.clusterNodeProperties.x === undefined) { + options.clusterNodeProperties.x = node.x; + } + if (options.clusterNodeProperties.y === undefined) { + options.clusterNodeProperties.y = node.y; + } + if (options.clusterNodeProperties.fixed === undefined) { + options.clusterNodeProperties.fixed = {}; + options.clusterNodeProperties.fixed.x = node.options.fixed.x; + options.clusterNodeProperties.fixed.y = node.options.fixed.y; + } - /** - * return the number of selected nodes - * - * @returns {number} - * @private - */ + var childNodesObj = {}; + var childEdgesObj = {}; + var parentNodeId = node.id; + var parentClonedOptions = NetworkUtil.cloneOptions(node); + childNodesObj[parentNodeId] = node; - }, { - key: '_getSelectedNodeCount', - value: function _getSelectedNodeCount() { - var count = 0; - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; + // collect the nodes that will be in the cluster + for (var i = 0; i < node.edges.length; i++) { + var edge = node.edges[i]; + if (this.clusteredEdges[edge.id] === undefined) { + var childNodeId = this._getConnectedId(edge, parentNodeId); + + // if the child node is not in a cluster + 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 = NetworkUtil.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; + } + } } } - return count; - } - - /** - * return the selected node - * - * @returns {number} - * @private - */ + var childNodeIDs = (0, _keys2['default'])(childNodesObj).map(function (childNode) { + return childNodesObj[childNode].id; + }); - }, { - key: '_getSelectedNode', - value: function _getSelectedNode() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return this.selectionObj.nodes[nodeId]; + for (childNode in childNodesObj) { + var childNode = childNodesObj[childNode]; + for (var y = 0; y < childNode.edges.length; y++) { + var childEdge = childNode.edges[y]; + if (childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) > -1) { + childEdgesObj[childEdge.id] = childEdge; + } } } - return undefined; + this._cluster(childNodesObj, childEdgesObj, options, refreshData); } /** - * return the selected edge - * - * @returns {number} - * @private - */ + * 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 clusterNodeProperties + * @param clusterEdgeProperties + * @private + */ }, { - key: '_getSelectedEdge', - value: function _getSelectedEdge() { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - return this.selectionObj.edges[edgeId]; + key: '_createClusterEdges', + value: function _createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) { + var edge = void 0, + childNodeId = void 0, + childNode = void 0, + toId = void 0, + fromId = void 0, + otherNodeId = void 0; + + // loop over all child nodes and their edges to find edges going out of the cluster + // these edges will be replaced by clusterEdges. + var childKeys = (0, _keys2['default'])(childNodesObj); + var createEdges = []; + for (var i = 0; i < childKeys.length; i++) { + childNodeId = childKeys[i]; + childNode = childNodesObj[childNodeId]; + + // construct new edges from the cluster to others + for (var j = 0; j < childNode.edges.length; j++) { + edge = childNode.edges[j]; + // we only handle edges that are visible to the system, not the disabled ones from the clustering process. + if (this.clusteredEdges[edge.id] === undefined) { + // self-referencing edges will be added to the "hidden" list + if (edge.toId == edge.fromId) { + childEdgesObj[edge.id] = edge; + } else { + // 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; + } + } + + // Only edges from the cluster outwards are being replaced. + if (childNodesObj[otherNodeId] === undefined) { + createEdges.push({ edge: edge, fromId: fromId, toId: toId }); + } + } } } - return undefined; - } - /** - * return the number of selected edges - * - * @returns {number} - * @private - */ + // 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 _j2 = 0; _j2 < createEdges.length; _j2++) { + var _edge = createEdges[_j2].edge; + // copy the options of the edge we will replace + var clonedOptions = NetworkUtil.cloneOptions(_edge, 'edge'); + // make sure the properties of clusterEdges are superimposed on it + util.deepExtend(clonedOptions, clusterEdgeProperties); - }, { - key: '_getSelectedEdgeCount', - value: function _getSelectedEdgeCount() { - var count = 0; - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } + // set up the edge + clonedOptions.from = createEdges[_j2].fromId; + clonedOptions.to = createEdges[_j2].toId; + clonedOptions.id = 'clusterEdge:' + util.randomUUID(); + //clonedOptions.id = '(cf: ' + createEdges[j].fromId + " to: " + createEdges[j].toId + ")" + Math.random(); + + // create the edge and give a reference to the one it replaced. + var newEdge = this.body.functions.createEdge(clonedOptions); + newEdge.clusteringEdgeReplacingId = _edge.id; + + // also reference the new edge in the old edge + this.body.edges[_edge.id].edgeReplacedById = newEdge.id; + + // connect the edge. + this.body.edges[newEdge.id] = newEdge; + newEdge.connect(); + + // hide the replaced edge + this._backupEdgeOptions(_edge); + _edge.setOptions({ physics: false, hidden: true }); } - return count; } /** - * return the number of selected objects. - * - * @returns {number} - * @private - */ + * This function checks the options that can be supplied to the different cluster functions + * for certain fields and inserts defaults if needed + * @param options + * @returns {*} + * @private + */ }, { - key: '_getSelectedObjectCount', - value: function _getSelectedObjectCount() { - var count = 0; - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } + key: '_checkOptions', + value: function _checkOptions() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + if (options.clusterEdgeProperties === undefined) { + options.clusterEdgeProperties = {}; } - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } + if (options.clusterNodeProperties === undefined) { + options.clusterNodeProperties = {}; } - return count; + + return options; } /** - * Check if anything is selected - * - * @returns {boolean} - * @private - */ + * + * @param {Object} childNodesObj | object with node objects, id as keys, same as childNodes except it also contains a source node + * @param {Object} childEdgesObj | object with edge objects, id as keys + * @param {Array} options | object with {clusterNodeProperties, clusterEdgeProperties, processProperties} + * @param {Boolean} refreshData | when true, do not wrap up + * @private + */ }, { - key: '_selectionIsEmpty', - value: function _selectionIsEmpty() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return false; - } + key: '_cluster', + value: function _cluster(childNodesObj, childEdgesObj, options) { + var refreshData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + + // kill condition: no nodes don't bother + if ((0, _keys2['default'])(childNodesObj).length == 0) { + return; } - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - return false; + + // allow clusters of 1 if options allow + if ((0, _keys2['default'])(childNodesObj).length == 1 && options.clusterNodeProperties.allowSingleNodeCluster != true) { + 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; + } } } - return true; - } - /** - * check if one of the selected nodes is a cluster. - * - * @returns {boolean} - * @private - */ + var clusterNodeProperties = util.deepExtend({}, options.clusterNodeProperties); - }, { - key: '_clusterInSelection', - value: function _clusterInSelection() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - return true; + // construct the clusterNodeProperties + if (options.processProperties !== undefined) { + // get the childNode options + var childNodesOptions = []; + for (var _nodeId in childNodesObj) { + if (childNodesObj.hasOwnProperty(_nodeId)) { + var clonedOptions = NetworkUtil.cloneOptions(childNodesObj[_nodeId]); + childNodesOptions.push(clonedOptions); + } + } + + // get cluster properties based on childNodes + var childEdgesOptions = []; + for (var edgeId in childEdgesObj) { + if (childEdgesObj.hasOwnProperty(edgeId)) { + // these cluster edges will be removed on creation of the cluster. + if (edgeId.substr(0, 12) !== "clusterEdge:") { + var _clonedOptions = NetworkUtil.cloneOptions(childEdgesObj[edgeId], 'edge'); + childEdgesOptions.push(_clonedOptions); + } } } + + clusterNodeProperties = options.processProperties(clusterNodeProperties, childNodesOptions, childEdgesOptions); + if (!clusterNodeProperties) { + throw new Error("The processProperties function does not return properties!"); + } } - return false; - } - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ + // check if we have an unique id; + if (clusterNodeProperties.id === undefined) { + clusterNodeProperties.id = 'cluster:' + util.randomUUID(); + } + var clusterId = clusterNodeProperties.id; - }, { - key: '_selectConnectedEdges', - value: function _selectConnectedEdges(node) { - for (var i = 0; i < node.edges.length; i++) { - var edge = node.edges[i]; - edge.select(); - this._addToSelection(edge); + if (clusterNodeProperties.label === undefined) { + clusterNodeProperties.label = 'cluster'; } - } - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ + // give the clusterNode a position if it does not have one. + var pos = undefined; + if (clusterNodeProperties.x === undefined) { + pos = this._getClusterPosition(childNodesObj); + clusterNodeProperties.x = pos.x; + } + if (clusterNodeProperties.y === undefined) { + if (pos === undefined) { + pos = this._getClusterPosition(childNodesObj); + } + clusterNodeProperties.y = pos.y; + } + + // force the ID to remain the same + clusterNodeProperties.id = clusterId; + + // create the clusterNode + var clusterNode = this.body.functions.createNode(clusterNodeProperties, Cluster); + clusterNode.isCluster = true; + clusterNode.containedNodes = childNodesObj; + clusterNode.containedEdges = childEdgesObj; + // cache a copy from the cluster edge properties if we have to reconnect others later on + clusterNode.clusterEdgeProperties = options.clusterEdgeProperties; + + // finally put the cluster node into global + this.body.nodes[clusterNodeProperties.id] = clusterNode; + + // create the new edges that will connect to the cluster, all self-referencing edges will be added to childEdgesObject here. + this._createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties); + // disable the childEdges + for (var _edgeId in childEdgesObj) { + if (childEdgesObj.hasOwnProperty(_edgeId)) { + if (this.body.edges[_edgeId] !== undefined) { + var edge = this.body.edges[_edgeId]; + // cache the options before changing + this._backupEdgeOptions(edge); + // disable physics and hide the edge + edge.setOptions({ physics: false, hidden: true }); + } + } + } + + // disable the childNodes + for (var _nodeId2 in childNodesObj) { + if (childNodesObj.hasOwnProperty(_nodeId2)) { + this.clusteredNodes[_nodeId2] = { clusterId: clusterNodeProperties.id, node: this.body.nodes[_nodeId2] }; + this.body.nodes[_nodeId2].setOptions({ hidden: true, physics: false }); + } + } + + // set ID to undefined so no duplicates arise + clusterNodeProperties.id = undefined; + + // wrap up + if (refreshData === true) { + this.body.emitter.emit('_dataChanged'); + } + } }, { - key: '_hoverConnectedEdges', - value: function _hoverConnectedEdges(node) { - for (var i = 0; i < node.edges.length; i++) { - var edge = node.edges[i]; - edge.hover = true; - this._addToHover(edge); + key: '_backupEdgeOptions', + value: function _backupEdgeOptions(edge) { + if (this.clusteredEdges[edge.id] === undefined) { + this.clusteredEdges[edge.id] = { physics: edge.options.physics, hidden: edge.options.hidden }; + } + } + }, { + key: '_restoreEdge', + value: function _restoreEdge(edge) { + var originalOptions = this.clusteredEdges[edge.id]; + if (originalOptions !== undefined) { + edge.setOptions({ physics: originalOptions.physics, hidden: originalOptions.hidden }); + delete this.clusteredEdges[edge.id]; } } /** - * unselect the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ + * Check if a node is a cluster. + * @param nodeId + * @returns {*} + */ }, { - key: '_unselectConnectedEdges', - value: function _unselectConnectedEdges(node) { - for (var i = 0; i < node.edges.length; i++) { - var edge = node.edges[i]; - edge.unselect(); - this._removeFromSelection(edge); + key: 'isCluster', + value: function isCluster(nodeId) { + if (this.body.nodes[nodeId] !== undefined) { + return this.body.nodes[nodeId].isCluster === true; + } else { + console.log("Node does not exist."); + return false; } } /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ + * get the position of the cluster node based on what's inside + * @param {object} childNodesObj | object with node objects, id as keys + * @returns {{x: number, y: number}} + * @private + */ }, { - key: 'blurObject', - value: function blurObject(object) { - if (object.hover === true) { - object.hover = false; - if (object instanceof _Node2['default']) { - this.body.emitter.emit("blurNode", { node: object.id }); - } else { - this.body.emitter.emit("blurEdge", { edge: object.id }); - } + key: '_getClusterPosition', + value: function _getClusterPosition(childNodesObj) { + var childKeys = (0, _keys2['default'])(childNodesObj); + var minX = childNodesObj[childKeys[0]].x; + var maxX = childNodesObj[childKeys[0]].x; + var minY = childNodesObj[childKeys[0]].y; + var maxY = childNodesObj[childKeys[0]].y; + var node = void 0; + for (var i = 1; i < childKeys.length; i++) { + node = childNodesObj[childKeys[i]]; + minX = node.x < minX ? node.x : minX; + maxX = node.x > maxX ? node.x : maxX; + minY = node.y < minY ? node.y : minY; + maxY = node.y > maxY ? node.y : maxY; } + + return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) }; } /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection - * - * @param {Node || Edge} object - * @private - */ + * Open a cluster by calling this function. + * @param {String} clusterNodeId | the ID of the cluster node + * @param {Boolean} refreshData | wrap up afterwards if not true + */ }, { - key: 'hoverObject', - value: function hoverObject(object) { - var hoverChanged = false; - // remove all node hover highlights - for (var nodeId in this.hoverObj.nodes) { - if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { - if (object === undefined || object instanceof _Node2['default'] && object.id != nodeId || object instanceof _Edge2['default']) { - this.blurObject(this.hoverObj.nodes[nodeId]); - delete this.hoverObj.nodes[nodeId]; - hoverChanged = true; - } - } + key: 'openCluster', + value: function openCluster(clusterNodeId, options) { + var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + // kill conditions + if (clusterNodeId === undefined) { + throw new Error("No clusterNodeId supplied to openCluster."); + } + if (this.body.nodes[clusterNodeId] === undefined) { + throw new Error("The clusterNodeId supplied to openCluster does not exist."); } + if (this.body.nodes[clusterNodeId].containedNodes === undefined) { + console.log("The node:" + clusterNodeId + " is not a cluster."); + return; + } + var clusterNode = this.body.nodes[clusterNodeId]; + var containedNodes = clusterNode.containedNodes; + var containedEdges = clusterNode.containedEdges; - // removing all edge hover highlights - for (var edgeId in this.hoverObj.edges) { - if (this.hoverObj.edges.hasOwnProperty(edgeId)) { - // if the hover has been changed here it means that the node has been hovered over or off - // we then do not use the blurObject method here. - if (hoverChanged === true) { - this.hoverObj.edges[edgeId].hover = false; - delete this.hoverObj.edges[edgeId]; + // allow the user to position the nodes after release. + if (options !== undefined && options.releaseFunction !== undefined && typeof options.releaseFunction === 'function') { + var positions = {}; + var clusterPosition = { x: clusterNode.x, y: clusterNode.y }; + for (var nodeId in containedNodes) { + if (containedNodes.hasOwnProperty(nodeId)) { + var containedNode = this.body.nodes[nodeId]; + positions[nodeId] = { x: containedNode.x, y: containedNode.y }; } - // if the blur remains the same and the object is undefined (mouse off) or another - // edge has been hovered, or another node has been hovered we blur the edge. - else if (object === undefined || object instanceof _Edge2['default'] && object.id != edgeId || object instanceof _Node2['default'] && !object.hover) { - this.blurObject(this.hoverObj.edges[edgeId]); - delete this.hoverObj.edges[edgeId]; - hoverChanged = true; - } } - } + var newPositions = options.releaseFunction(clusterPosition, positions); - if (object !== undefined) { - if (object.hover === false) { - object.hover = true; - this._addToHover(object); - hoverChanged = true; - if (object instanceof _Node2['default']) { - this.body.emitter.emit("hoverNode", { node: object.id }); - } else { - this.body.emitter.emit("hoverEdge", { edge: object.id }); + for (var _nodeId3 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId3)) { + var _containedNode = this.body.nodes[_nodeId3]; + if (newPositions[_nodeId3] !== undefined) { + _containedNode.x = newPositions[_nodeId3].x === undefined ? clusterNode.x : newPositions[_nodeId3].x; + _containedNode.y = newPositions[_nodeId3].y === undefined ? clusterNode.y : newPositions[_nodeId3].y; + } } } - if (object instanceof _Node2['default'] && this.options.hoverConnectedEdges === true) { - this._hoverConnectedEdges(object); + } else { + // copy the position from the cluster + for (var _nodeId4 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId4)) { + var _containedNode2 = this.body.nodes[_nodeId4]; + _containedNode2 = containedNodes[_nodeId4]; + // inherit position + if (_containedNode2.options.fixed.x === false) { + _containedNode2.x = clusterNode.x; + } + if (_containedNode2.options.fixed.y === false) { + _containedNode2.y = clusterNode.y; + } + } } } - if (hoverChanged === true) { - this.body.emitter.emit('_requestRedraw'); - } - } - - /** - * - * retrieve the currently selected objects - * @return {{nodes: Array., edges: Array.}} selection - */ + // release nodes + for (var _nodeId5 in containedNodes) { + if (containedNodes.hasOwnProperty(_nodeId5)) { + var _containedNode3 = this.body.nodes[_nodeId5]; - }, { - key: 'getSelection', - value: function getSelection() { - var nodeIds = this.getSelectedNodes(); - var edgeIds = this.getSelectedEdges(); - return { nodes: nodeIds, edges: edgeIds }; - } + // inherit speed + _containedNode3.vx = clusterNode.vx; + _containedNode3.vy = clusterNode.vy; - /** - * - * retrieve the currently selected nodes - * @return {String[]} selection An array with the ids of the - * selected nodes. - */ + // we use these methods to avoid re-instantiating the shape, which happens with setOptions. + _containedNode3.setOptions({ hidden: false, physics: true }); - }, { - key: 'getSelectedNodes', - value: function getSelectedNodes() { - var idArray = []; - if (this.options.selectable === true) { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - idArray.push(this.selectionObj.nodes[nodeId].id); - } + delete this.clusteredNodes[_nodeId5]; } } - return idArray; - } - - /** - * - * retrieve the currently selected edges - * @return {Array} selection An array with the ids of the - * selected nodes. - */ - }, { - key: 'getSelectedEdges', - value: function getSelectedEdges() { - var idArray = []; - if (this.options.selectable === true) { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - idArray.push(this.selectionObj.edges[edgeId].id); - } - } + // 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]); } - return idArray; - } - /** - * Updates the current selection - * @param {{nodes: Array., edges: Array.}} Selection - * @param {Object} options Options - */ + // actually handling the deleting. + for (var _i4 = 0; _i4 < edgesToBeDeleted.length; _i4++) { + var edge = edgesToBeDeleted[_i4]; - }, { - key: 'setSelection', - value: function setSelection(selection) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + 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; - var i = void 0, - id = void 0; + // delete local reference + delete containedEdges[transferEdge.id]; - if (!selection || !selection.nodes && !selection.edges) throw 'Selection must be an object with nodes and/or edges properties'; - // first unselect any selected node, if option is true or undefined - if (options.unselectAll || options.unselectAll === undefined) { - this.unselectAll(); - } - if (selection.nodes) { - for (i = 0; i < selection.nodes.length; i++) { - id = selection.nodes[i]; + // 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 { + fromId = this.clusteredNodes[otherNodeId].clusterId; + } - var node = this.body.nodes[id]; - if (!node) { - throw new RangeError('Node with id "' + id + '" not found'); + // clone the options and apply the cluster options to them + var clonedOptions = NetworkUtil.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) { + this._restoreEdge(replacedEdge); } - // don't select edges with it - this.selectObject(node, options.highlightEdges); } + edge.cleanup(); + // this removes the edge from node.edges, which is why edgeIds is formed + edge.disconnect(); + delete this.body.edges[edge.id]; } - if (selection.edges) { - for (i = 0; i < selection.edges.length; i++) { - id = selection.edges[i]; + // handle the releasing of the edges + for (var edgeId in containedEdges) { + if (containedEdges.hasOwnProperty(edgeId)) { + this._restoreEdge(containedEdges[edgeId]); + } + } - var edge = this.body.edges[id]; - if (!edge) { - throw new RangeError('Edge with id "' + id + '" not found'); + // remove clusterNode + delete this.body.nodes[clusterNodeId]; + + if (refreshData === true) { + this.body.emitter.emit('_dataChanged'); + } + } + }, { + key: 'getNodesInCluster', + value: function getNodesInCluster(clusterId) { + var nodesArray = []; + if (this.isCluster(clusterId) === true) { + var containedNodes = this.body.nodes[clusterId].containedNodes; + for (var nodeId in containedNodes) { + if (containedNodes.hasOwnProperty(nodeId)) { + nodesArray.push(this.body.nodes[nodeId].id); } - this.selectObject(edge); } } - this.body.emitter.emit('_requestRedraw'); + + return nodesArray; } /** - * select zero or more nodes with the option to highlight edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - * @param {boolean} [highlightEdges] - */ + * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node + * @param nodeId + * @returns {Array} + */ }, { - key: 'selectNodes', - value: function selectNodes(selection) { - var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + key: 'findNode', + value: function findNode(nodeId) { + var stack = []; + var max = 100; + var counter = 0; - if (!selection || selection.length === undefined) throw 'Selection must be an array with ids'; + while (this.clusteredNodes[nodeId] !== undefined && counter < max) { + stack.push(this.body.nodes[nodeId].id); + nodeId = this.clusteredNodes[nodeId].clusterId; + counter++; + } + stack.push(this.body.nodes[nodeId].id); + stack.reverse(); - this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges }); + return stack; } /** - * select zero or more edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - */ + * Using a clustered nodeId, update with the new options + * @param clusteredNodeId + * @param {object} newOptions + */ }, { - key: 'selectEdges', - value: function selectEdges(selection) { - if (!selection || selection.length === undefined) throw 'Selection must be an array with ids'; + key: 'updateClusteredNode', + value: function updateClusteredNode(clusteredNodeId, newOptions) { + if (clusteredNodeId === undefined) { + throw new Error("No clusteredNodeId supplied to updateClusteredNode."); + } + if (newOptions === undefined) { + throw new Error("No newOptions supplied to updateClusteredNode."); + } + if (this.body.nodes[clusteredNodeId] === undefined) { + throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist."); + } - this.setSelection({ edges: selection }); + this.body.nodes[clusteredNodeId].setOptions(newOptions); + this.body.emitter.emit('_dataChanged'); } /** - * Validate the selection: remove ids of nodes which no longer exist - * @private - */ + * Using a base edgeId, update all related clustered edges with the new options + * @param startEdgeId + * @param {object} newOptions + */ }, { - key: 'updateSelection', - value: function updateSelection() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (!this.body.nodes.hasOwnProperty(nodeId)) { - delete this.selectionObj.nodes[nodeId]; - } - } + key: 'updateEdge', + value: function updateEdge(startEdgeId, newOptions) { + if (startEdgeId === undefined) { + throw new Error("No startEdgeId supplied to updateEdge."); } - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - if (!this.body.edges.hasOwnProperty(edgeId)) { - delete this.selectionObj.edges[edgeId]; - } - } + if (newOptions === undefined) { + throw new Error("No newOptions supplied to updateEdge."); + } + if (this.body.edges[startEdgeId] === undefined) { + throw new Error("The startEdgeId supplied to updateEdge does not exist."); + } + + var allEdgeIds = this.getClusteredEdges(startEdgeId); + for (var i = 0; i < allEdgeIds.length; i++) { + var edge = this.body.edges[allEdgeIds[i]]; + edge.setOptions(newOptions); } + this.body.emitter.emit('_dataChanged'); } - }]); - return SelectionHandler; - }(); - exports['default'] = SelectionHandler; + /** + * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId) + * @param edgeId + * @returns {Array} + */ -/***/ }, -/* 222 */ -/***/ function(module, exports, __webpack_require__) { + }, { + key: 'getClusteredEdges', + value: function getClusteredEdges(edgeId) { + var stack = []; + var max = 100; + var counter = 0; - 'use strict'; + while (edgeId !== undefined && this.body.edges[edgeId] !== undefined && counter < max) { + stack.push(this.body.edges[edgeId].id); + edgeId = this.body.edges[edgeId].edgeReplacedById; + counter++; + } + stack.reverse(); + return stack; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); + /** + * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge + * @param clusteredEdgeId + * @returns baseEdgeId + */ - var _keys = __webpack_require__(58); + }, { + key: 'getBaseEdge', + value: function getBaseEdge(clusteredEdgeId) { + var baseEdgeId = clusteredEdgeId; + var max = 100; + var counter = 0; - var _keys2 = _interopRequireDefault(_keys); + while (clusteredEdgeId !== undefined && this.body.edges[clusteredEdgeId] !== undefined && counter < max) { + clusteredEdgeId = this.body.edges[clusteredEdgeId].clusteringEdgeReplacingId; + counter++; + if (clusteredEdgeId !== undefined) { + baseEdgeId = clusteredEdgeId; + } + } + return baseEdgeId; + } - var _slicedToArray2 = __webpack_require__(165); + /** + * Get the Id the node is connected to + * @param edge + * @param nodeId + * @returns {*} + * @private + */ - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + }, { + key: '_getConnectedId', + value: function _getConnectedId(edge, nodeId) { + if (edge.toId != nodeId) { + return edge.toId; + } else if (edge.fromId != nodeId) { + return edge.fromId; + } else { + return edge.fromId; + } + } - var _typeof2 = __webpack_require__(62); + /** + * We determine how many connections denote an important hub. + * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) + * + * @private + */ - var _typeof3 = _interopRequireDefault(_typeof2); + }, { + key: '_getHubSize', + value: function _getHubSize() { + var average = 0; + var averageSquared = 0; + var hubCounter = 0; + var largestHub = 0; - var _classCallCheck2 = __webpack_require__(119); + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var node = this.body.nodes[this.body.nodeIndices[i]]; + if (node.edges.length > largestHub) { + largestHub = node.edges.length; + } + average += node.edges.length; + averageSquared += Math.pow(node.edges.length, 2); + hubCounter += 1; + } + average = average / hubCounter; + averageSquared = averageSquared / hubCounter; - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + var variance = averageSquared - Math.pow(average, 2); + var standardDeviation = Math.sqrt(variance); - var _createClass2 = __webpack_require__(120); + var hubThreshold = Math.floor(average + 2 * standardDeviation); - var _createClass3 = _interopRequireDefault(_createClass2); + // always have at least one to cluster + if (hubThreshold > largestHub) { + hubThreshold = largestHub; + } - var _NetworkUtil = __webpack_require__(214); + return hubThreshold; + } + }]); + return ClusterEngine; + }(); - var _NetworkUtil2 = _interopRequireDefault(_NetworkUtil); + exports['default'] = ClusterEngine; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { - var util = __webpack_require__(1); + "use strict"; - var LayoutEngine = function () { - function LayoutEngine(body) { - (0, _classCallCheck3['default'])(this, LayoutEngine); + Object.defineProperty(exports, "__esModule", { + value: true + }); - this.body = body; + var _classCallCheck2 = __webpack_require__(134); - this.initialRandomSeed = Math.round(Math.random() * 1000000); - this.randomSeed = this.initialRandomSeed; - this.setPhysics = false; - this.options = {}; - this.optionsBackup = { physics: {} }; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - this.defaultOptions = { - randomSeed: undefined, - improvedLayout: true, - hierarchical: { - enabled: false, - levelSeparation: 150, - nodeSpacing: 100, - treeSpacing: 200, - blockShifting: true, - edgeMinimization: true, - parentCentralization: true, - direction: 'UD', // UD, DU, LR, RL - sortMethod: 'hubsize' // hubsize, directed - } - }; - util.extend(this.options, this.defaultOptions); - this.bindEventListeners(); - } + var _createClass2 = __webpack_require__(135); - (0, _createClass3['default'])(LayoutEngine, [{ - key: 'bindEventListeners', - value: function bindEventListeners() { - var _this = this; + var _createClass3 = _interopRequireDefault(_createClass2); - this.body.emitter.on('_dataChanged', function () { - _this.setupHierarchicalLayout(); - }); - this.body.emitter.on('_dataLoaded', function () { - _this.layoutNetwork(); - }); - this.body.emitter.on('_resetHierarchicalLayout', function () { - _this.setupHierarchicalLayout(); - }); - } - }, { - key: 'setOptions', - 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; - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - if (this.options.hierarchical.enabled === true) { - if (prevHierarchicalState === true) { - // refresh the overridden options for nodes and edges. - this.body.emitter.emit('refresh', true); - } + var util = __webpack_require__(1); - // make sure the level separation is the right way up - if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'DU') { - if (this.options.hierarchical.levelSeparation > 0) { - this.options.hierarchical.levelSeparation *= -1; - } - } else { - if (this.options.hierarchical.levelSeparation < 0) { - this.options.hierarchical.levelSeparation *= -1; - } - } + var NetworkUtil = function () { + function NetworkUtil() { + (0, _classCallCheck3["default"])(this, NetworkUtil); + } - this.body.emitter.emit('_resetHierarchicalLayout'); - // because the hierarchical system needs it's own physics and smooth curve settings, we adapt the other options if needed. - return this.adaptAllOptionsForHierarchicalLayout(allOptions); - } else { - if (prevHierarchicalState === true) { - // refresh the overridden options for nodes and edges. - this.body.emitter.emit('refresh'); - return util.deepExtend(allOptions, this.optionsBackup); - } - } - } - return allOptions; - } - }, { - key: 'adaptAllOptionsForHierarchicalLayout', - value: function adaptAllOptionsForHierarchicalLayout(allOptions) { - if (this.options.hierarchical.enabled === true) { - // set the physics - if (allOptions.physics === undefined || allOptions.physics === true) { - allOptions.physics = { - enabled: this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled, - solver: 'hierarchicalRepulsion' - }; - this.optionsBackup.physics.enabled = this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled; - this.optionsBackup.physics.solver = this.optionsBackup.physics.solver || 'barnesHut'; - } else if ((0, _typeof3['default'])(allOptions.physics) === 'object') { - this.optionsBackup.physics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled; - this.optionsBackup.physics.solver = allOptions.physics.solver || 'barnesHut'; - allOptions.physics.solver = 'hierarchicalRepulsion'; - } else if (allOptions.physics !== false) { - this.optionsBackup.physics.solver = 'barnesHut'; - allOptions.physics = { solver: 'hierarchicalRepulsion' }; - } + /** + * Find the center position of the network considering the bounding boxes + */ - // get the type of static smooth curve in case it is required - var type = 'horizontal'; - if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'LR') { - type = 'vertical'; - } - // disable smooth curves if nothing is defined. If smooth curves have been turned on, turn them into static smooth curves. - if (allOptions.edges === undefined) { - this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } }; - allOptions.edges = { smooth: false }; - } else if (allOptions.edges.smooth === undefined) { - this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } }; - allOptions.edges.smooth = false; - } else { - if (typeof allOptions.edges.smooth === 'boolean') { - this.optionsBackup.edges = { smooth: allOptions.edges.smooth }; - allOptions.edges.smooth = { enabled: allOptions.edges.smooth, type: type }; - } else { - // allow custom types except for dynamic - if (allOptions.edges.smooth.type !== undefined && allOptions.edges.smooth.type !== 'dynamic') { - type = allOptions.edges.smooth.type; - } + (0, _createClass3["default"])(NetworkUtil, null, [{ + key: "getRange", + value: function getRange(allNodes) { + var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - this.optionsBackup.edges = { - smooth: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled, - type: allOptions.edges.smooth.type === undefined ? 'dynamic' : allOptions.edges.smooth.type, - roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness, - forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection - }; - allOptions.edges.smooth = { - enabled: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled, - type: type, - roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness, - forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection - }; + var minY = 1e9, + maxY = -1e9, + minX = 1e9, + maxX = -1e9, + node; + if (specificNodes.length > 0) { + for (var i = 0; i < specificNodes.length; i++) { + node = allNodes[specificNodes[i]]; + if (minX > node.shape.boundingBox.left) { + minX = node.shape.boundingBox.left; + } + if (maxX < node.shape.boundingBox.right) { + maxX = node.shape.boundingBox.right; } + if (minY > node.shape.boundingBox.top) { + minY = node.shape.boundingBox.top; + } // top is negative, bottom is positive + if (maxY < node.shape.boundingBox.bottom) { + maxY = node.shape.boundingBox.bottom; + } // top is negative, bottom is positive } - - // force all edges into static smooth curves. Only applies to edges that do not use the global options for smooth. - this.body.emitter.emit('_forceDisableDynamicCurves', type); } - return allOptions; - } - }, { - key: 'seededRandom', - value: function seededRandom() { - var x = Math.sin(this.randomSeed++) * 10000; - return x - Math.floor(x); - } - }, { - key: 'positionInitially', - value: function positionInitially(nodesArray) { - if (this.options.hierarchical.enabled !== true) { - this.randomSeed = this.initialRandomSeed; - for (var i = 0; i < nodesArray.length; i++) { - var node = nodesArray[i]; - var radius = 10 * 0.1 * nodesArray.length + 10; - var angle = 2 * Math.PI * this.seededRandom(); - if (node.x === undefined) { - node.x = radius * Math.cos(angle); - } - if (node.y === undefined) { - node.y = radius * Math.sin(angle); - } - } + if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { + minY = 0, maxY = 0, minX = 0, maxX = 0; } + return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; } /** - * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we - * cluster them first to reduce the amount. + * Find the center position of the network */ }, { - key: 'layoutNetwork', - value: function layoutNetwork() { - if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) { - // first check if we should Kamada Kawai 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; - } - } + key: "getRangeCore", + value: function getRangeCore(allNodes) { + var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[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 = 10; - var level = 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) { - //console.time("clustering") - level += 1; - var before = this.body.nodeIndices.length; - // if there are many nodes we do a hubsize cluster - if (level % 3 === 0) { - this.body.modules.clustering.clusterBridges(); - } else { - this.body.modules.clustering.clusterOutliers(); - } - var after = this.body.nodeIndices.length; - if (before == after && level % 3 !== 0 || level > MAX_LEVELS) { - this._declusterAll(); - this.body.emitter.emit("_layoutFailed"); - console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance."); - return; - } - //console.timeEnd("clustering") - //console.log(level,after) - } - // increase the size of the edges - this.body.modules.kamadaKawai.setOptions({ springLength: Math.max(150, 2 * startLength) }); + var minY = 1e9, + maxY = -1e9, + minX = 1e9, + maxX = -1e9, + node; + if (specificNodes.length > 0) { + for (var i = 0; i < specificNodes.length; i++) { + node = allNodes[specificNodes[i]]; + if (minX > node.x) { + minX = node.x; } - - // position the system for these nodes and edges - this.body.modules.kamadaKawai.solve(this.body.nodeIndices, this.body.edgeIndices, true); - - // shift to center point - this._shiftToCenter(); - - // perturb the nodes a little bit to force the physics to kick in - var offset = 70; - for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { - // Only perturb the nodes that aren't fixed - if (this.body.nodes[this.body.nodeIndices[_i]].predefinedPosition === false) { - this.body.nodes[this.body.nodeIndices[_i]].x += (0.5 - this.seededRandom()) * offset; - this.body.nodes[this.body.nodeIndices[_i]].y += (0.5 - this.seededRandom()) * offset; - } + if (maxX < node.x) { + maxX = node.x; } - - // uncluster all clusters - this._declusterAll(); - - // reposition all bezier nodes. - this.body.emitter.emit("_repositionBezierNodes"); + if (minY > node.y) { + minY = node.y; + } // top is negative, bottom is positive + if (maxY < node.y) { + maxY = node.y; + } // top is negative, bottom is positive } } + + if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { + minY = 0, maxY = 0, minX = 0, maxX = 0; + } + return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; } /** - * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view - * @private + * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; + * @returns {{x: number, y: number}} */ }, { - key: '_shiftToCenter', - value: function _shiftToCenter() { - var range = _NetworkUtil2['default'].getRangeCore(this.body.nodes, this.body.nodeIndices); - var center = _NetworkUtil2['default'].findCenter(range); - for (var i = 0; i < this.body.nodeIndices.length; i++) { - this.body.nodes[this.body.nodeIndices[i]].x -= center.x; - this.body.nodes[this.body.nodeIndices[i]].y -= center.y; - } - } - }, { - 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() { - return this.initialRandomSeed; + key: "findCenter", + value: function findCenter(range) { + return { x: 0.5 * (range.maxX + range.minX), + y: 0.5 * (range.maxY + range.minY) }; } /** - * This is the main function to layout the nodes in a hierarchical way. - * It checks if the node details are supplied correctly - * - * @private + * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes. + * @param item + * @param type + * @returns {{}} */ }, { - key: 'setupHierarchicalLayout', - value: function setupHierarchicalLayout() { - if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) { - // get the size of the largest hubs and check if the user has defined a level for a node. - var node = void 0, - nodeId = void 0; - var definedLevel = false; - var definedPositions = true; - var undefinedLevel = false; - this.hierarchicalLevels = {}; - this.lastNodeOnLevel = {}; - this.hierarchicalChildrenReference = {}; - this.hierarchicalParentReference = {}; - this.hierarchicalTrees = {}; - this.treeIndex = -1; + key: "cloneOptions", + value: function cloneOptions(item, type) { + var clonedOptions = {}; + if (type === undefined || type === 'node') { + util.deepExtend(clonedOptions, item.options, true); + clonedOptions.x = item.x; + clonedOptions.y = item.y; + clonedOptions.amountOfConnections = item.edges.length; + } else { + util.deepExtend(clonedOptions, item.options, true); + } + return clonedOptions; + } + }]); + return NetworkUtil; + }(); - this.distributionOrdering = {}; - this.distributionIndex = {}; - this.distributionOrderingPresence = {}; + exports["default"] = NetworkUtil; - for (nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - node = this.body.nodes[nodeId]; - if (node.options.x === undefined && node.options.y === undefined) { - definedPositions = false; - } - if (node.options.level !== undefined) { - definedLevel = true; - this.hierarchicalLevels[nodeId] = node.options.level; - } else { - undefinedLevel = true; - } - } - } +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { - // if the user defined some levels but not all, alert and run without hierarchical layout - if (undefinedLevel === true && definedLevel === true) { - throw new Error('To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.'); - } else { - // define levels if undefined by the users. Based on hubsize. - if (undefinedLevel === true) { - if (this.options.hierarchical.sortMethod === 'hubsize') { - this._determineLevelsByHubsize(); - } else if (this.options.hierarchical.sortMethod === 'directed') { - this._determineLevelsDirected(); - } else if (this.options.hierarchical.sortMethod === 'custom') { - this._determineLevelsCustomCallback(); - } - } + 'use strict'; - // fallback for cases where there are nodes but no edges - for (var _nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(_nodeId)) { - if (this.hierarchicalLevels[_nodeId] === undefined) { - this.hierarchicalLevels[_nodeId] = 0; - } - } - } - // check the distribution of the nodes per level. - var distribution = this._getDistribution(); + Object.defineProperty(exports, "__esModule", { + value: true + }); - // get the parent children relations. - this._generateMap(); + var _getPrototypeOf = __webpack_require__(175); - // place the nodes on the canvas. - this._placeNodesByHierarchy(distribution); + var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - // condense the whitespace. - this._condenseHierarchy(); + var _classCallCheck2 = __webpack_require__(134); - // shift to center so gravity does not have to do much - this._shiftToCenter(); - } - } - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - /** - * @private - */ + var _possibleConstructorReturn2 = __webpack_require__(178); - }, { - key: '_condenseHierarchy', - value: function _condenseHierarchy() { - var _this2 = this; + var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - // Global var in this scope to define when the movement has stopped. - var stillShifting = false; - var branches = {}; - // first we have some methods to help shifting trees around. - // the main method to shift the trees - var shiftTrees = function shiftTrees() { - var treeSizes = getTreeSizes(); - var shiftBy = 0; - for (var i = 0; i < treeSizes.length - 1; i++) { - var diff = treeSizes[i].max - treeSizes[i + 1].min; - shiftBy += diff + _this2.options.hierarchical.treeSpacing; - shiftTree(i + 1, shiftBy); - } - }; + var _inherits2 = __webpack_require__(179); - // shift a single tree by an offset - var shiftTree = function shiftTree(index, offset) { - for (var nodeId in _this2.hierarchicalTrees) { - if (_this2.hierarchicalTrees.hasOwnProperty(nodeId)) { - if (_this2.hierarchicalTrees[nodeId] === index) { - var node = _this2.body.nodes[nodeId]; - var pos = _this2._getPositionForHierarchy(node); - _this2._setPositionForHierarchy(node, pos + offset, undefined, true); - } - } - } - }; + var _inherits3 = _interopRequireDefault(_inherits2); - // get the width of a tree - var getTreeSize = function getTreeSize(index) { - var min = 1e9; - var max = -1e9; - for (var nodeId in _this2.hierarchicalTrees) { - if (_this2.hierarchicalTrees.hasOwnProperty(nodeId)) { - if (_this2.hierarchicalTrees[nodeId] === index) { - var pos = _this2._getPositionForHierarchy(_this2.body.nodes[nodeId]); - min = Math.min(pos, min); - max = Math.max(pos, max); - } - } - } - return { min: min, max: max }; - }; + var _Node2 = __webpack_require__(168); - // get the width of all trees - var getTreeSizes = function getTreeSizes() { - var treeWidths = []; - for (var i = 0; i <= _this2.treeIndex; i++) { - treeWidths.push(getTreeSize(i)); - } - return treeWidths; - }; + var _Node3 = _interopRequireDefault(_Node2); - // get a map of all nodes in this branch - var getBranchNodes = function getBranchNodes(source, map) { - if (map[source.id]) { - return; - } - map[source.id] = true; - if (_this2.hierarchicalChildrenReference[source.id]) { - var children = _this2.hierarchicalChildrenReference[source.id]; - if (children.length > 0) { - for (var i = 0; i < children.length; i++) { - getBranchNodes(_this2.body.nodes[children[i]], map); - } - } - } - }; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - // get a min max width as well as the maximum movement space it has on either sides - // we use min max terminology because width and height can interchange depending on the direction of the layout - var getBranchBoundary = function getBranchBoundary(branchMap) { - var maxLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e9; + /** + * + */ + var Cluster = function (_Node) { + (0, _inherits3['default'])(Cluster, _Node); - var minSpace = 1e9; - var maxSpace = 1e9; - var min = 1e9; - var max = -1e9; - for (var branchNode in branchMap) { - if (branchMap.hasOwnProperty(branchNode)) { - var node = _this2.body.nodes[branchNode]; - var level = _this2.hierarchicalLevels[node.id]; - var position = _this2._getPositionForHierarchy(node); + function Cluster(options, body, imagelist, grouplist, globalOptions) { + (0, _classCallCheck3['default'])(this, Cluster); - // get the space around the node. + var _this = (0, _possibleConstructorReturn3['default'])(this, (Cluster.__proto__ || (0, _getPrototypeOf2['default'])(Cluster)).call(this, options, body, imagelist, grouplist, globalOptions)); - var _getSpaceAroundNode2 = _this2._getSpaceAroundNode(node, branchMap), - _getSpaceAroundNode3 = (0, _slicedToArray3['default'])(_getSpaceAroundNode2, 2), - minSpaceNode = _getSpaceAroundNode3[0], - maxSpaceNode = _getSpaceAroundNode3[1]; + _this.isCluster = true; + _this.containedNodes = {}; + _this.containedEdges = {}; + return _this; + } - minSpace = Math.min(minSpaceNode, minSpace); - maxSpace = Math.min(maxSpaceNode, maxSpace); + return Cluster; + }(_Node3['default']); - // the width is only relevant for the levels two nodes have in common. This is why we filter on this. - if (level <= maxLevel) { - min = Math.min(position, min); - max = Math.max(position, max); - } - } - } + exports['default'] = Cluster; - return [min, max, minSpace, maxSpace]; - }; +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { - // get the maximum level of a branch. - var getMaxLevel = function getMaxLevel(nodeId) { - var accumulator = {}; - var _getMaxLevel = function _getMaxLevel(nodeId) { - if (accumulator[nodeId] !== undefined) { - return accumulator[nodeId]; - } - var level = _this2.hierarchicalLevels[nodeId]; - if (_this2.hierarchicalChildrenReference[nodeId]) { - var children = _this2.hierarchicalChildrenReference[nodeId]; - if (children.length > 0) { - for (var i = 0; i < children.length; i++) { - level = Math.max(level, _getMaxLevel(children[i])); - } - } - } - accumulator[nodeId] = level; - return level; - }; - return _getMaxLevel(nodeId); - }; + 'use strict'; - // check what the maximum level is these nodes have in common. - var getCollisionLevel = function getCollisionLevel(node1, node2) { - var maxLevel1 = getMaxLevel(node1.id); - var maxLevel2 = getMaxLevel(node2.id); - return Math.min(maxLevel1, maxLevel2); - }; + Object.defineProperty(exports, "__esModule", { + value: true + }); - // check if two nodes have the same parent(s) - var hasSameParent = function hasSameParent(node1, node2) { - var parents1 = _this2.hierarchicalParentReference[node1.id]; - var parents2 = _this2.hierarchicalParentReference[node2.id]; - if (parents1 === undefined || parents2 === undefined) { - return false; - } + var _classCallCheck2 = __webpack_require__(134); - for (var i = 0; i < parents1.length; i++) { - for (var j = 0; j < parents2.length; j++) { - if (parents1[i] == parents2[j]) { - return true; - } - } - } - return false; - }; + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // condense elements. These can be nodes or branches depending on the callback. - var shiftElementsCloser = function shiftElementsCloser(callback, levels, centerParents) { - for (var i = 0; i < levels.length; i++) { - var level = levels[i]; - var levelNodes = _this2.distributionOrdering[level]; - if (levelNodes.length > 1) { - for (var j = 0; j < levelNodes.length - 1; j++) { - if (hasSameParent(levelNodes[j], levelNodes[j + 1]) === true) { - if (_this2.hierarchicalTrees[levelNodes[j].id] === _this2.hierarchicalTrees[levelNodes[j + 1].id]) { - callback(levelNodes[j], levelNodes[j + 1], centerParents); - } - } - } - } - } - }; + var _createClass2 = __webpack_require__(135); - // callback for shifting branches - var branchShiftCallback = function branchShiftCallback(node1, node2) { - var centerParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var _createClass3 = _interopRequireDefault(_createClass2); - //window.CALLBACKS.push(() => { - var pos1 = _this2._getPositionForHierarchy(node1); - var pos2 = _this2._getPositionForHierarchy(node2); - var diffAbs = Math.abs(pos2 - pos1); - //console.log("NOW CHEcKING:", node1.id, node2.id, diffAbs); - if (diffAbs > _this2.options.hierarchical.nodeSpacing) { - var branchNodes1 = {}; - var branchNodes2 = {}; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - getBranchNodes(node1, branchNodes1); - getBranchNodes(node2, branchNodes2); + if (typeof window !== 'undefined') { + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; + } - // check the largest distance between the branches - var maxLevel = getCollisionLevel(node1, node2); + var util = __webpack_require__(1); - var _getBranchBoundary = getBranchBoundary(branchNodes1, maxLevel), - _getBranchBoundary2 = (0, _slicedToArray3['default'])(_getBranchBoundary, 4), - min1 = _getBranchBoundary2[0], - max1 = _getBranchBoundary2[1], - minSpace1 = _getBranchBoundary2[2], - maxSpace1 = _getBranchBoundary2[3]; + var CanvasRenderer = function () { + function CanvasRenderer(body, canvas) { + (0, _classCallCheck3['default'])(this, CanvasRenderer); - var _getBranchBoundary3 = getBranchBoundary(branchNodes2, maxLevel), - _getBranchBoundary4 = (0, _slicedToArray3['default'])(_getBranchBoundary3, 4), - min2 = _getBranchBoundary4[0], - max2 = _getBranchBoundary4[1], - minSpace2 = _getBranchBoundary4[2], - maxSpace2 = _getBranchBoundary4[3]; + this.body = body; + this.canvas = canvas; - //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id, getBranchBoundary(branchNodes2, maxLevel), maxLevel); + this.redrawRequested = false; + this.renderTimer = undefined; + this.requiresTimeout = true; + this.renderingActive = false; + this.renderRequests = 0; + this.pixelRatio = undefined; + this.allowRedraw = true; + + this.dragging = false; + this.options = {}; + this.defaultOptions = { + hideEdgesOnDrag: false, + hideNodesOnDrag: false + }; + util.extend(this.options, this.defaultOptions); + this._determineBrowserMethod(); + this.bindEventListeners(); + } - var diffBranch = Math.abs(max1 - min2); - if (diffBranch > _this2.options.hierarchical.nodeSpacing) { - var offset = max1 - min2 + _this2.options.hierarchical.nodeSpacing; - if (offset < -minSpace2 + _this2.options.hierarchical.nodeSpacing) { - offset = -minSpace2 + _this2.options.hierarchical.nodeSpacing; - //console.log("RESETTING OFFSET", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset); - } - if (offset < 0) { - //console.log("SHIFTING", node2.id, offset); - _this2._shiftBlock(node2.id, offset); - stillShifting = true; + (0, _createClass3['default'])(CanvasRenderer, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this = this; - if (centerParent === true) _this2._centerParent(node2); - } + this.body.emitter.on("dragStart", function () { + _this.dragging = true; + }); + this.body.emitter.on("dragEnd", function () { + _this.dragging = false; + }); + this.body.emitter.on("_resizeNodes", function () { + _this._resizeNodes(); + }); + this.body.emitter.on("_redraw", function () { + if (_this.renderingActive === false) { + _this._redraw(); + } + }); + this.body.emitter.on("_blockRedraw", function () { + _this.allowRedraw = false; + }); + this.body.emitter.on("_allowRedraw", function () { + _this.allowRedraw = true;_this.redrawRequested = false; + }); + this.body.emitter.on("_requestRedraw", this._requestRedraw.bind(this)); + this.body.emitter.on("_startRendering", function () { + _this.renderRequests += 1; + _this.renderingActive = true; + _this._startRendering(); + }); + this.body.emitter.on("_stopRendering", function () { + _this.renderRequests -= 1; + _this.renderingActive = _this.renderRequests > 0; + _this.renderTimer = undefined; + }); + this.body.emitter.on('destroy', function () { + _this.renderRequests = 0; + _this.allowRedraw = false; + _this.renderingActive = false; + if (_this.requiresTimeout === true) { + clearTimeout(_this.renderTimer); + } else { + cancelAnimationFrame(_this.renderTimer); + } + _this.body.emitter.off(); + }); + } + }, { + key: 'setOptions', + value: function setOptions(options) { + if (options !== undefined) { + var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag']; + util.selectiveDeepExtend(fields, this.options, options); + } + } + }, { + key: '_startRendering', + value: function _startRendering() { + if (this.renderingActive === true) { + if (this.renderTimer === undefined) { + if (this.requiresTimeout === true) { + this.renderTimer = window.setTimeout(this._renderStep.bind(this), this.simulationInterval); // wait this.renderTimeStep milliseconds and perform the animation step function + } else { + this.renderTimer = window.requestAnimationFrame(this._renderStep.bind(this)); // wait this.renderTimeStep milliseconds and perform the animation step function } } - //this.body.emitter.emit("_redraw");}) - }; - - var minimizeEdgeLength = function minimizeEdgeLength(iterations, node) { - //window.CALLBACKS.push(() => { - // console.log("ts",node.id); - var nodeId = node.id; - var allEdges = node.edges; - var nodeLevel = _this2.hierarchicalLevels[node.id]; + } + } + }, { + key: '_renderStep', + value: function _renderStep() { + if (this.renderingActive === true) { + // reset the renderTimer so a new scheduled animation step can be set + this.renderTimer = undefined; - // gather constants - var C2 = _this2.options.hierarchical.levelSeparation * _this2.options.hierarchical.levelSeparation; - var referenceNodes = {}; - var aboveEdges = []; - for (var i = 0; i < allEdges.length; i++) { - var edge = allEdges[i]; - if (edge.toId != edge.fromId) { - var otherNode = edge.toId == nodeId ? edge.from : edge.to; - referenceNodes[allEdges[i].id] = otherNode; - if (_this2.hierarchicalLevels[otherNode.id] < nodeLevel) { - aboveEdges.push(edge); - } - } + if (this.requiresTimeout === true) { + // this schedules a new simulation step + this._startRendering(); } - // differentiated sum of lengths based on only moving one node over one axis - var getFx = function getFx(point, edges) { - var sum = 0; - for (var _i2 = 0; _i2 < edges.length; _i2++) { - if (referenceNodes[edges[_i2].id] !== undefined) { - var a = _this2._getPositionForHierarchy(referenceNodes[edges[_i2].id]) - point; - sum += a / Math.sqrt(a * a + C2); - } - } - return sum; - }; + this._redraw(); - // doubly differentiated sum of lengths based on only moving one node over one axis - var getDFx = function getDFx(point, edges) { - var sum = 0; - for (var _i3 = 0; _i3 < edges.length; _i3++) { - if (referenceNodes[edges[_i3].id] !== undefined) { - var a = _this2._getPositionForHierarchy(referenceNodes[edges[_i3].id]) - point; - sum -= C2 * Math.pow(a * a + C2, -1.5); - } - } - return sum; - }; + if (this.requiresTimeout === false) { + // this schedules a new simulation step + this._startRendering(); + } + } + } - var getGuess = function getGuess(iterations, edges) { - var guess = _this2._getPositionForHierarchy(node); - // Newton's method for optimization - var guessMap = {}; - for (var _i4 = 0; _i4 < iterations; _i4++) { - var fx = getFx(guess, edges); - var dfx = getDFx(guess, edges); + /** + * Redraw the network with the current data + * chart will be resized too. + */ - // we limit the movement to avoid instability. - var limit = 40; - var ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx))); - guess = guess - ratio; - // reduce duplicates - if (guessMap[guess] !== undefined) { - break; - } - guessMap[guess] = _i4; - } - return guess; - }; + }, { + key: 'redraw', + value: function redraw() { + this.body.emitter.emit('setSize'); + this._redraw(); + } - var moveBranch = function moveBranch(guess) { - // position node if there is space - var nodePosition = _this2._getPositionForHierarchy(node); + /** + * Redraw the network with the current data + * @param hidden | used to get the first estimate of the node sizes. only the nodes are drawn after which they are quickly drawn over. + * @private + */ - // check movable area of the branch - if (branches[node.id] === undefined) { - var branchNodes = {}; - getBranchNodes(node, branchNodes); - branches[node.id] = branchNodes; - } + }, { + key: '_requestRedraw', + value: function _requestRedraw() { + var _this2 = this; - var _getBranchBoundary5 = getBranchBoundary(branches[node.id]), - _getBranchBoundary6 = (0, _slicedToArray3['default'])(_getBranchBoundary5, 4), - minBranch = _getBranchBoundary6[0], - maxBranch = _getBranchBoundary6[1], - minSpaceBranch = _getBranchBoundary6[2], - maxSpaceBranch = _getBranchBoundary6[3]; + if (this.redrawRequested !== true && this.renderingActive === false && this.allowRedraw === true) { + this.redrawRequested = true; + if (this.requiresTimeout === true) { + window.setTimeout(function () { + _this2._redraw(false); + }, 0); + } else { + window.requestAnimationFrame(function () { + _this2._redraw(false); + }); + } + } + } + }, { + key: '_redraw', + value: function _redraw() { + var hidden = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var diff = guess - nodePosition; + if (this.allowRedraw === true) { + this.body.emitter.emit("initRedraw"); - // check if we are allowed to move the node: - var branchOffset = 0; - if (diff > 0) { - branchOffset = Math.min(diff, maxSpaceBranch - _this2.options.hierarchical.nodeSpacing); - } else if (diff < 0) { - branchOffset = -Math.min(-diff, minSpaceBranch - _this2.options.hierarchical.nodeSpacing); - } + this.redrawRequested = false; + var ctx = this.canvas.frame.canvas.getContext('2d'); - if (branchOffset != 0) { - //console.log("moving branch:",branchOffset, maxSpaceBranch, minSpaceBranch) - _this2._shiftBlock(node.id, branchOffset); - //this.body.emitter.emit("_redraw"); - stillShifting = true; - } - }; + // when the container div was hidden, this fixes it back up! + if (this.canvas.frame.canvas.width === 0 || this.canvas.frame.canvas.height === 0) { + this.canvas.setSize(); + } - var moveNode = function moveNode(guess) { - var nodePosition = _this2._getPositionForHierarchy(node); + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); - // position node if there is space + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - var _getSpaceAroundNode4 = _this2._getSpaceAroundNode(node), - _getSpaceAroundNode5 = (0, _slicedToArray3['default'])(_getSpaceAroundNode4, 2), - minSpace = _getSpaceAroundNode5[0], - maxSpace = _getSpaceAroundNode5[1]; + // clear the canvas + var w = this.canvas.frame.canvas.clientWidth; + var h = this.canvas.frame.canvas.clientHeight; + ctx.clearRect(0, 0, w, h); - var diff = guess - nodePosition; - // check if we are allowed to move the node: - var newPosition = nodePosition; - if (diff > 0) { - newPosition = Math.min(nodePosition + (maxSpace - _this2.options.hierarchical.nodeSpacing), guess); - } else if (diff < 0) { - newPosition = Math.max(nodePosition - (minSpace - _this2.options.hierarchical.nodeSpacing), guess); - } + // if the div is hidden, we stop the redraw here for performance. + if (this.canvas.frame.clientWidth === 0) { + return; + } - if (newPosition !== nodePosition) { - //console.log("moving Node:",diff, minSpace, maxSpace); - _this2._setPositionForHierarchy(node, newPosition, undefined, true); - //this.body.emitter.emit("_redraw"); - stillShifting = true; - } - }; + // set scaling and translation + ctx.save(); + ctx.translate(this.body.view.translation.x, this.body.view.translation.y); + ctx.scale(this.body.view.scale, this.body.view.scale); - var guess = getGuess(iterations, aboveEdges); - moveBranch(guess); - guess = getGuess(iterations, allEdges); - moveNode(guess); - //}) - }; + ctx.beginPath(); + this.body.emitter.emit("beforeDrawing", ctx); + ctx.closePath(); - // method to remove whitespace between branches. Because we do bottom up, we can center the parents. - var minimizeEdgeLengthBottomUp = function minimizeEdgeLengthBottomUp(iterations) { - var levels = (0, _keys2['default'])(_this2.distributionOrdering); - levels = levels.reverse(); - for (var i = 0; i < iterations; i++) { - stillShifting = false; - for (var j = 0; j < levels.length; j++) { - var level = levels[j]; - var levelNodes = _this2.distributionOrdering[level]; - for (var k = 0; k < levelNodes.length; k++) { - minimizeEdgeLength(1000, levelNodes[k]); - } - } - if (stillShifting !== true) { - //console.log("FINISHED minimizeEdgeLengthBottomUp IN " + i); - break; + if (hidden === false) { + if (this.dragging === false || this.dragging === true && this.options.hideEdgesOnDrag === false) { + this._drawEdges(ctx); } } - }; - // method to remove whitespace between branches. Because we do bottom up, we can center the parents. - var shiftBranchesCloserBottomUp = function shiftBranchesCloserBottomUp(iterations) { - var levels = (0, _keys2['default'])(_this2.distributionOrdering); - levels = levels.reverse(); - for (var i = 0; i < iterations; i++) { - stillShifting = false; - shiftElementsCloser(branchShiftCallback, levels, true); - if (stillShifting !== true) { - //console.log("FINISHED shiftBranchesCloserBottomUp IN " + (i+1)); - break; - } + if (this.dragging === false || this.dragging === true && this.options.hideNodesOnDrag === false) { + this._drawNodes(ctx, hidden); } - }; - // center all parents - var centerAllParents = function centerAllParents() { - for (var nodeId in _this2.body.nodes) { - if (_this2.body.nodes.hasOwnProperty(nodeId)) _this2._centerParent(_this2.body.nodes[nodeId]); - } - }; + ctx.beginPath(); + this.body.emitter.emit("afterDrawing", ctx); + ctx.closePath(); - // center all parents - var centerAllParentsBottomUp = function centerAllParentsBottomUp() { - var levels = (0, _keys2['default'])(_this2.distributionOrdering); - levels = levels.reverse(); - for (var i = 0; i < levels.length; i++) { - var level = levels[i]; - var levelNodes = _this2.distributionOrdering[level]; - for (var j = 0; j < levelNodes.length; j++) { - _this2._centerParent(levelNodes[j]); - } + // restore original scaling and translation + ctx.restore(); + if (hidden === true) { + ctx.clearRect(0, 0, w, h); } - }; - - // the actual work is done here. - if (this.options.hierarchical.blockShifting === true) { - shiftBranchesCloserBottomUp(5); - centerAllParents(); - } - - // minimize edge length - if (this.options.hierarchical.edgeMinimization === true) { - minimizeEdgeLengthBottomUp(20); } - - if (this.options.hierarchical.parentCentralization === true) { - centerAllParentsBottomUp(); - } - - shiftTrees(); } /** - * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map. - * This is used to only get the distances to nodes outside of a branch. - * @param node - * @param map - * @returns {*[]} + * Redraw all nodes + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx + * @param {Boolean} [alwaysShow] * @private */ }, { - key: '_getSpaceAroundNode', - value: function _getSpaceAroundNode(node, map) { - var useMap = true; - if (map === undefined) { - useMap = false; + key: '_resizeNodes', + value: function _resizeNodes() { + var ctx = this.canvas.frame.canvas.getContext('2d'); + if (this.pixelRatio === undefined) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); } - var level = this.hierarchicalLevels[node.id]; - if (level !== undefined) { - var index = this.distributionIndex[node.id]; - var position = this._getPositionForHierarchy(node); - var minSpace = 1e9; - var maxSpace = 1e9; - if (index !== 0) { - var prevNode = this.distributionOrdering[level][index - 1]; - if (useMap === true && map[prevNode.id] === undefined || useMap === false) { - var prevPos = this._getPositionForHierarchy(prevNode); - minSpace = position - prevPos; - } - } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + ctx.save(); + ctx.translate(this.body.view.translation.x, this.body.view.translation.y); + ctx.scale(this.body.view.scale, this.body.view.scale); - if (index != this.distributionOrdering[level].length - 1) { - var nextNode = this.distributionOrdering[level][index + 1]; - if (useMap === true && map[nextNode.id] === undefined || useMap === false) { - var nextPos = this._getPositionForHierarchy(nextNode); - maxSpace = Math.min(maxSpace, nextPos - position); - } - } + var nodes = this.body.nodes; + var node = void 0; - return [minSpace, maxSpace]; - } else { - return [0, 0]; + // resize all nodes + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + node = nodes[nodeId]; + node.resize(ctx); + node.updateBoundingBox(ctx, node.selected); + } } + + // restore original scaling and translation + ctx.restore(); } /** - * We use this method to center a parent node and check if it does not cross other nodes when it does. - * @param node + * Redraw all nodes + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx + * @param {Boolean} [alwaysShow] * @private */ }, { - key: '_centerParent', - value: function _centerParent(node) { - if (this.hierarchicalParentReference[node.id]) { - var parents = this.hierarchicalParentReference[node.id]; - for (var i = 0; i < parents.length; i++) { - var parentId = parents[i]; - var parentNode = this.body.nodes[parentId]; - if (this.hierarchicalChildrenReference[parentId]) { - // get the range of the children - var minPos = 1e9; - var maxPos = -1e9; - var children = this.hierarchicalChildrenReference[parentId]; - if (children.length > 0) { - for (var _i5 = 0; _i5 < children.length; _i5++) { - var childNode = this.body.nodes[children[_i5]]; - minPos = Math.min(minPos, this._getPositionForHierarchy(childNode)); - maxPos = Math.max(maxPos, this._getPositionForHierarchy(childNode)); - } - } - - var position = this._getPositionForHierarchy(parentNode); + key: '_drawNodes', + value: function _drawNodes(ctx) { + var alwaysShow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var _getSpaceAroundNode6 = this._getSpaceAroundNode(parentNode), - _getSpaceAroundNode7 = (0, _slicedToArray3['default'])(_getSpaceAroundNode6, 2), - minSpace = _getSpaceAroundNode7[0], - maxSpace = _getSpaceAroundNode7[1]; + var nodes = this.body.nodes; + var nodeIndices = this.body.nodeIndices; + var node = void 0; + var selected = []; + var margin = 20; + var topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin }); + var bottomRight = this.canvas.DOMtoCanvas({ + x: this.canvas.frame.canvas.clientWidth + margin, + y: this.canvas.frame.canvas.clientHeight + margin + }); + var viewableArea = { top: topLeft.y, left: topLeft.x, bottom: bottomRight.y, right: bottomRight.x }; - var newPosition = 0.5 * (minPos + maxPos); - var diff = position - newPosition; - if (diff < 0 && Math.abs(diff) < maxSpace - this.options.hierarchical.nodeSpacing || diff > 0 && Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing) { - this._setPositionForHierarchy(parentNode, newPosition, undefined, true); - } + // draw unselected nodes; + for (var i = 0; i < nodeIndices.length; i++) { + node = nodes[nodeIndices[i]]; + // set selected nodes aside + if (node.isSelected()) { + selected.push(nodeIndices[i]); + } else { + if (alwaysShow === true) { + node.draw(ctx); + } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) { + node.draw(ctx); + } else { + node.updateBoundingBox(ctx, node.selected); } } } + + // draw the selected nodes on top + for (var _i = 0; _i < selected.length; _i++) { + node = nodes[selected[_i]]; + node.draw(ctx); + } } /** - * This function places the nodes on the canvas based on the hierarchial distribution. - * - * @param {Object} distribution | obtained by the function this._getDistribution() + * Redraw all edges + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx * @private */ }, { - key: '_placeNodesByHierarchy', - value: function _placeNodesByHierarchy(distribution) { - this.positionedNodes = {}; - // start placing all the level 0 nodes first. Then recursively position their branches. - for (var level in distribution) { - if (distribution.hasOwnProperty(level)) { - // sort nodes in level by position: - var nodeArray = (0, _keys2['default'])(distribution[level]); - nodeArray = this._indexArrayToNodes(nodeArray); - this._sortNodeArray(nodeArray); - var handledNodeCount = 0; - - for (var i = 0; i < nodeArray.length; i++) { - var node = nodeArray[i]; - if (this.positionedNodes[node.id] === undefined) { - var pos = this.options.hierarchical.nodeSpacing * handledNodeCount; - // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y - if (handledNodeCount > 0) { - pos = this._getPositionForHierarchy(nodeArray[i - 1]) + this.options.hierarchical.nodeSpacing; - } - this._setPositionForHierarchy(node, pos, level); - this._validataPositionAndContinue(node, level, pos); + key: '_drawEdges', + value: function _drawEdges(ctx) { + var edges = this.body.edges; + var edgeIndices = this.body.edgeIndices; + var edge = void 0; - handledNodeCount++; - } - } + for (var i = 0; i < edgeIndices.length; i++) { + edge = edges[edgeIndices[i]]; + if (edge.connected === true) { + edge.draw(ctx); } } } /** - * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes - * on a X position that ensures there will be no overlap. - * - * @param parentId - * @param parentLevel + * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because + * some implementations (safari and IE9) did not support requestAnimationFrame * @private */ }, { - key: '_placeBranchNodes', - value: function _placeBranchNodes(parentId, parentLevel) { - // if this is not a parent, cancel the placing. This can happen with multiple parents to one child. - if (this.hierarchicalChildrenReference[parentId] === undefined) { - return; + key: '_determineBrowserMethod', + value: function _determineBrowserMethod() { + if (typeof window !== 'undefined') { + var browserType = navigator.userAgent.toLowerCase(); + this.requiresTimeout = false; + if (browserType.indexOf('msie 9.0') != -1) { + // IE 9 + this.requiresTimeout = true; + } else if (browserType.indexOf('safari') != -1) { + // safari + if (browserType.indexOf('chrome') <= -1) { + this.requiresTimeout = true; + } + } + } else { + this.requiresTimeout = true; } + } + }]); + return CanvasRenderer; + }(); - // get a list of childNodes - var childNodes = []; - for (var i = 0; i < this.hierarchicalChildrenReference[parentId].length; i++) { - childNodes.push(this.body.nodes[this.hierarchicalChildrenReference[parentId][i]]); - } + exports['default'] = CanvasRenderer; - // use the positions to order the nodes. - this._sortNodeArray(childNodes); +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { - // position the childNodes - for (var _i6 = 0; _i6 < childNodes.length; _i6++) { - var childNode = childNodes[_i6]; - var childNodeLevel = this.hierarchicalLevels[childNode.id]; - // check if the child node is below the parent node and if it has already been positioned. - if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) { - // get the amount of space required for this node. If parent the width is based on the amount of children. - var pos = void 0; + 'use strict'; - // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y - if (_i6 === 0) { - pos = this._getPositionForHierarchy(this.body.nodes[parentId]); - } else { - pos = this._getPositionForHierarchy(childNodes[_i6 - 1]) + this.options.hierarchical.nodeSpacing; - } - this._setPositionForHierarchy(childNode, pos, childNodeLevel); - this._validataPositionAndContinue(childNode, childNodeLevel, pos); - } else { - return; - } - } + Object.defineProperty(exports, "__esModule", { + value: true + }); - // center the parent nodes. - var minPos = 1e9; - var maxPos = -1e9; - for (var _i7 = 0; _i7 < childNodes.length; _i7++) { - var childNodeId = childNodes[_i7].id; - minPos = Math.min(minPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); - maxPos = Math.max(maxPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); - } - this._setPositionForHierarchy(this.body.nodes[parentId], 0.5 * (minPos + maxPos), parentLevel); - } + var _classCallCheck2 = __webpack_require__(134); - /** - * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes. - * Finally it will call _placeBranchNodes to place the branch nodes. - * @param node - * @param level - * @param pos - * @private - */ + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - }, { - key: '_validataPositionAndContinue', - value: function _validataPositionAndContinue(node, level, pos) { - // if overlap has been detected, we shift the branch - if (this.lastNodeOnLevel[level] !== undefined) { - var previousPos = this._getPositionForHierarchy(this.body.nodes[this.lastNodeOnLevel[level]]); - if (pos - previousPos < this.options.hierarchical.nodeSpacing) { - var diff = previousPos + this.options.hierarchical.nodeSpacing - pos; - var sharedParent = this._findCommonParent(this.lastNodeOnLevel[level], node.id); - this._shiftBlock(sharedParent.withChild, diff); - } - } + var _createClass2 = __webpack_require__(135); - // store change in position. - this.lastNodeOnLevel[level] = node.id; + var _createClass3 = _interopRequireDefault(_createClass2); - this.positionedNodes[node.id] = true; + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - this._placeBranchNodes(node.id, level); - } + var Hammer = __webpack_require__(112); + var hammerUtil = __webpack_require__(119); - /** - * Receives an array with node indices and returns an array with the actual node references. Used for sorting based on - * node properties. - * @param idArray - */ + var util = __webpack_require__(1); - }, { - key: '_indexArrayToNodes', - value: function _indexArrayToNodes(idArray) { - var array = []; - for (var i = 0; i < idArray.length; i++) { - array.push(this.body.nodes[idArray[i]]); - } - return array; - } + /** + * Create the main frame for the Network. + * This function is executed once when a Network object is created. The frame + * contains a canvas, and this canvas contains all objects like the axis and + * nodes. + * @private + */ - /** - * This function get the distribution of levels based on hubsize - * - * @returns {Object} - * @private - */ + var Canvas = function () { + function Canvas(body) { + (0, _classCallCheck3['default'])(this, Canvas); + + this.body = body; + this.pixelRatio = 1; + this.resizeTimer = undefined; + this.resizeFunction = this._onResize.bind(this); + this.cameraState = {}; + this.initialized = false; + this.canvasViewCenter = {}; + + this.options = {}; + this.defaultOptions = { + autoResize: true, + height: '100%', + width: '100%' + }; + util.extend(this.options, this.defaultOptions); + + this.bindEventListeners(); + } + + (0, _createClass3['default'])(Canvas, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this = this; + // bind the events + this.body.emitter.once("resize", function (obj) { + if (obj.width !== 0) { + _this.body.view.translation.x = obj.width * 0.5; + } + if (obj.height !== 0) { + _this.body.view.translation.y = obj.height * 0.5; + } + }); + this.body.emitter.on("setSize", this.setSize.bind(this)); + this.body.emitter.on("destroy", function () { + _this.hammerFrame.destroy(); + _this.hammer.destroy(); + _this._cleanUp(); + }); + } }, { - key: '_getDistribution', - value: function _getDistribution() { - var distribution = {}; - var nodeId = void 0, - node = void 0; + key: 'setOptions', + value: function setOptions(options) { + var _this2 = this; - // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. - // the fix of X is removed after the x value has been set. - for (nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - node = this.body.nodes[nodeId]; - var level = this.hierarchicalLevels[nodeId] === undefined ? 0 : this.hierarchicalLevels[nodeId]; - if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { - node.y = this.options.hierarchical.levelSeparation * level; - node.options.fixed.y = true; - } else { - node.x = this.options.hierarchical.levelSeparation * level; - node.options.fixed.x = true; - } - if (distribution[level] === undefined) { - distribution[level] = {}; + if (options !== undefined) { + var fields = ['width', 'height', 'autoResize']; + util.selectiveDeepExtend(fields, this.options, options); + } + + if (this.options.autoResize === true) { + // automatically adapt to a changing size of the browser. + this._cleanUp(); + this.resizeTimer = setInterval(function () { + var changed = _this2.setSize(); + if (changed === true) { + _this2.body.emitter.emit("_requestRedraw"); } - distribution[level][nodeId] = node; - } + }, 1000); + this.resizeFunction = this._onResize.bind(this); + util.addEventListener(window, 'resize', this.resizeFunction); } - return distribution; + } + }, { + key: '_cleanUp', + value: function _cleanUp() { + // automatically adapt to a changing size of the browser. + if (this.resizeTimer !== undefined) { + clearInterval(this.resizeTimer); + } + util.removeEventListener(window, 'resize', this.resizeFunction); + this.resizeFunction = undefined; + } + }, { + key: '_onResize', + value: function _onResize() { + this.setSize(); + this.body.emitter.emit("_redraw"); } /** - * Get the hubsize from all remaining unlevelled nodes. - * - * @returns {number} + * Get and store the cameraState * @private */ }, { - key: '_getHubSize', - value: function _getHubSize() { - var hubSize = 0; - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - if (this.hierarchicalLevels[nodeId] === undefined) { - hubSize = node.edges.length < hubSize ? hubSize : node.edges.length; - } - } + key: '_getCameraState', + value: function _getCameraState() { + var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.pixelRatio; + + if (this.initialized === true) { + this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio; + this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio; + this.cameraState.scale = this.body.view.scale; + this.cameraState.position = this.DOMtoCanvas({ + x: 0.5 * this.frame.canvas.width / pixelRatio, + y: 0.5 * this.frame.canvas.height / pixelRatio + }); } - return hubSize; } /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize + * Set the cameraState * @private */ }, { - key: '_determineLevelsByHubsize', - value: function _determineLevelsByHubsize() { - var _this3 = this; + key: '_setCameraState', + value: function _setCameraState() { + if (this.cameraState.scale !== undefined && this.frame.canvas.clientWidth !== 0 && this.frame.canvas.clientHeight !== 0 && this.pixelRatio !== 0 && this.cameraState.previousWidth > 0) { - var hubSize = 1; + var widthRatio = this.frame.canvas.width / this.pixelRatio / this.cameraState.previousWidth; + var heightRatio = this.frame.canvas.height / this.pixelRatio / this.cameraState.previousHeight; + var newScale = this.cameraState.scale; - var levelDownstream = function levelDownstream(nodeA, nodeB) { - if (_this3.hierarchicalLevels[nodeB.id] === undefined) { - // set initial level - if (_this3.hierarchicalLevels[nodeA.id] === undefined) { - _this3.hierarchicalLevels[nodeA.id] = 0; - } - // set level - _this3.hierarchicalLevels[nodeB.id] = _this3.hierarchicalLevels[nodeA.id] + 1; + if (widthRatio != 1 && heightRatio != 1) { + newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio); + } else if (widthRatio != 1) { + newScale = this.cameraState.scale * widthRatio; + } else if (heightRatio != 1) { + newScale = this.cameraState.scale * heightRatio; } - }; - while (hubSize > 0) { - // determine hubs - hubSize = this._getHubSize(); - if (hubSize === 0) break; + this.body.view.scale = newScale; + // this comes from the view module. + var currentViewCenter = this.DOMtoCanvas({ + x: 0.5 * this.frame.canvas.clientWidth, + y: 0.5 * this.frame.canvas.clientHeight + }); - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - var node = this.body.nodes[nodeId]; - if (node.edges.length === hubSize) { - this._crawlNetwork(levelDownstream, nodeId); - } - } + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: currentViewCenter.x - this.cameraState.position.x, + y: currentViewCenter.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) { + if (typeof value === 'number') { + return value + 'px'; + } else if (typeof value === 'string') { + if (value.indexOf('%') !== -1 || value.indexOf('px') !== -1) { + return value; + } else if (value.indexOf('%') === -1) { + return value + 'px'; } } + throw new Error('Could not use the value supplied for width or height:' + value); } /** - * TODO: release feature - * @private + * Create the HTML */ }, { - key: '_determineLevelsCustomCallback', - value: function _determineLevelsCustomCallback() { - var _this4 = this; + key: '_create', + value: function _create() { + // remove all elements from the container element. + while (this.body.container.hasChildNodes()) { + this.body.container.removeChild(this.body.container.firstChild); + } - var minLevel = 100000; + this.frame = document.createElement('div'); + this.frame.className = 'vis-network'; + this.frame.style.position = 'relative'; + this.frame.style.overflow = 'hidden'; + this.frame.tabIndex = 900; // tab index is required for keycharm to bind keystrokes to the div instead of the window - // TODO: this should come from options. - var customCallback = function customCallback(nodeA, nodeB, edge) {}; + ////////////////////////////////////////////////////////////////// - var levelByDirection = function levelByDirection(nodeA, nodeB, edge) { - var levelA = _this4.hierarchicalLevels[nodeA.id]; - // set initial level - if (levelA === undefined) { - _this4.hierarchicalLevels[nodeA.id] = minLevel; - } + 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); + } else { + var ctx = this.frame.canvas.getContext("2d"); + this._setPixelRatio(ctx); + this.frame.canvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + } - var diff = customCallback(_NetworkUtil2['default'].cloneOptions(nodeA, 'node'), _NetworkUtil2['default'].cloneOptions(nodeB, 'node'), _NetworkUtil2['default'].cloneOptions(edge, 'edge')); + // add the frame to the container element + this.body.container.appendChild(this.frame); - _this4.hierarchicalLevels[nodeB.id] = _this4.hierarchicalLevels[nodeA.id] + diff; - }; + this.body.view.scale = 1; + this.body.view.translation = { x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight }; - this._crawlNetwork(levelByDirection); - this._setMinLevelToZero(); + this._bindHammer(); } /** - * this function allocates nodes in levels based on the direction of the edges - * - * @param hubsize + * This function binds hammer, it can be repeated over and over due to the uniqueness check. * @private */ }, { - key: '_determineLevelsDirected', - value: function _determineLevelsDirected() { - var _this5 = this; + key: '_bindHammer', + value: function _bindHammer() { + var _this3 = this; - var minLevel = 10000; - var levelByDirection = function levelByDirection(nodeA, nodeB, edge) { - var levelA = _this5.hierarchicalLevels[nodeA.id]; - // set initial level - if (levelA === undefined) { - _this5.hierarchicalLevels[nodeA.id] = minLevel; - } - if (edge.toId == nodeB.id) { - _this5.hierarchicalLevels[nodeB.id] = _this5.hierarchicalLevels[nodeA.id] + 1; - } else { - _this5.hierarchicalLevels[nodeB.id] = _this5.hierarchicalLevels[nodeA.id] - 1; - } - }; - this._crawlNetwork(levelByDirection); - this._setMinLevelToZero(); - } + if (this.hammer !== undefined) { + this.hammer.destroy(); + } + this.drag = {}; + this.pinch = {}; - /** - * Small util method to set the minimum levels of the nodes to zero. - * @private - */ + // init hammer + this.hammer = new Hammer(this.frame.canvas); + this.hammer.get('pinch').set({ enable: true }); + // enable to get better response, todo: test on mobile. + this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_ALL }); - }, { - key: '_setMinLevelToZero', - value: function _setMinLevelToZero() { - var minLevel = 1e9; - // get the minimum level - for (var nodeId in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(nodeId)) { - if (this.hierarchicalLevels[nodeId] !== undefined) { - minLevel = Math.min(this.hierarchicalLevels[nodeId], minLevel); - } - } - } + hammerUtil.onTouch(this.hammer, function (event) { + _this3.body.eventListeners.onTouch(event); + }); + this.hammer.on('tap', function (event) { + _this3.body.eventListeners.onTap(event); + }); + this.hammer.on('doubletap', function (event) { + _this3.body.eventListeners.onDoubleTap(event); + }); + this.hammer.on('press', function (event) { + _this3.body.eventListeners.onHold(event); + }); + this.hammer.on('panstart', function (event) { + _this3.body.eventListeners.onDragStart(event); + }); + this.hammer.on('panmove', function (event) { + _this3.body.eventListeners.onDrag(event); + }); + this.hammer.on('panend', function (event) { + _this3.body.eventListeners.onDragEnd(event); + }); + this.hammer.on('pinch', function (event) { + _this3.body.eventListeners.onPinch(event); + }); - // subtract the minimum from the set so we have a range starting from 0 - for (var _nodeId2 in this.body.nodes) { - if (this.body.nodes.hasOwnProperty(_nodeId2)) { - if (this.hierarchicalLevels[_nodeId2] !== undefined) { - this.hierarchicalLevels[_nodeId2] -= minLevel; - } - } - } + // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work? + this.frame.canvas.addEventListener('mousewheel', function (event) { + _this3.body.eventListeners.onMouseWheel(event); + }); + this.frame.canvas.addEventListener('DOMMouseScroll', function (event) { + _this3.body.eventListeners.onMouseWheel(event); + }); + + this.frame.canvas.addEventListener('mousemove', function (event) { + _this3.body.eventListeners.onMouseMove(event); + }); + this.frame.canvas.addEventListener('contextmenu', function (event) { + _this3.body.eventListeners.onContext(event); + }); + + this.hammerFrame = new Hammer(this.frame); + hammerUtil.onRelease(this.hammerFrame, function (event) { + _this3.body.eventListeners.onRelease(event); + }); } /** - * Update the bookkeeping of parent and child. - * @private + * Set a new size for the network + * @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%') */ }, { - key: '_generateMap', - value: function _generateMap() { - var _this6 = this; + key: 'setSize', + value: function setSize() { + var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.width; + var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.height; - var fillInRelations = function fillInRelations(parentNode, childNode) { - if (_this6.hierarchicalLevels[childNode.id] > _this6.hierarchicalLevels[parentNode.id]) { - var parentNodeId = parentNode.id; - var childNodeId = childNode.id; - if (_this6.hierarchicalChildrenReference[parentNodeId] === undefined) { - _this6.hierarchicalChildrenReference[parentNodeId] = []; - } - _this6.hierarchicalChildrenReference[parentNodeId].push(childNodeId); - if (_this6.hierarchicalParentReference[childNodeId] === undefined) { - _this6.hierarchicalParentReference[childNodeId] = []; - } - _this6.hierarchicalParentReference[childNodeId].push(parentNodeId); - } - }; + width = this._prepareValue(width); + height = this._prepareValue(height); - this._crawlNetwork(fillInRelations); - } + var emitEvent = false; + var oldWidth = this.frame.canvas.width; + var oldHeight = this.frame.canvas.height; - /** - * Crawl over the entire network and use a callback on each node couple that is connected to each other. - * @param callback | will receive nodeA nodeB and the connecting edge. A and B are unique. - * @param startingNodeId - * @private - */ + // update the pixel ratio + var ctx = this.frame.canvas.getContext("2d"); + var previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value + this._setPixelRatio(ctx); - }, { - key: '_crawlNetwork', - value: function _crawlNetwork() { - var _this7 = this; + if (width != this.options.width || height != this.options.height || this.frame.style.width != width || this.frame.style.height != height) { + this._getCameraState(previousRatio); - var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; - var startingNodeId = arguments[1]; + this.frame.style.width = width; + this.frame.style.height = height; - var progress = {}; - var treeIndex = 0; + this.frame.canvas.style.width = '100%'; + this.frame.canvas.style.height = '100%'; - var crawler = function crawler(node, tree) { - if (progress[node.id] === undefined) { + this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio); + this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio); - if (_this7.hierarchicalTrees[node.id] === undefined) { - _this7.hierarchicalTrees[node.id] = tree; - _this7.treeIndex = Math.max(tree, _this7.treeIndex); - } + this.options.width = width; + this.options.height = height; - progress[node.id] = true; - var childNode = void 0; - for (var i = 0; i < node.edges.length; i++) { - if (node.edges[i].connected === true) { - if (node.edges[i].toId === node.id) { - childNode = node.edges[i].from; - } else { - childNode = node.edges[i].to; - } + this.canvasViewCenter = { + x: 0.5 * this.frame.clientWidth, + y: 0.5 * this.frame.clientHeight + }; - if (node.id !== childNode.id) { - callback(node, childNode, node.edges[i]); - crawler(childNode, tree); - } - } - } + emitEvent = true; + } else { + // this would adapt the width of the canvas to the width from 100% if and only if + // there is a change. + + var newWidth = Math.round(this.frame.canvas.clientWidth * this.pixelRatio); + var newHeight = Math.round(this.frame.canvas.clientHeight * this.pixelRatio); + + // store the camera if there is a change in size. + if (this.frame.canvas.width !== newWidth || this.frame.canvas.height !== newHeight) { + this._getCameraState(previousRatio); } - }; - // we can crawl from a specific node or over all nodes. - if (startingNodeId === undefined) { - for (var i = 0; i < this.body.nodeIndices.length; i++) { - var node = this.body.nodes[this.body.nodeIndices[i]]; - if (progress[node.id] === undefined) { - crawler(node, treeIndex); - treeIndex += 1; - } + if (this.frame.canvas.width !== newWidth) { + this.frame.canvas.width = newWidth; + emitEvent = true; } - } else { - var _node = this.body.nodes[startingNodeId]; - if (_node === undefined) { - console.error("Node not found:", startingNodeId); - return; + if (this.frame.canvas.height !== newHeight) { + this.frame.canvas.height = newHeight; + emitEvent = true; } - crawler(_node); } + + if (emitEvent === true) { + this.body.emitter.emit('resize', { + width: Math.round(this.frame.canvas.width / this.pixelRatio), + height: Math.round(this.frame.canvas.height / this.pixelRatio), + oldWidth: Math.round(oldWidth / this.pixelRatio), + oldHeight: Math.round(oldHeight / this.pixelRatio) + }); + + // restore the camera on change. + this._setCameraState(); + } + + // set initialized so the get and set camera will work from now on. + this.initialized = true; + return emitEvent; } + }, { + key: '_setPixelRatio', + /** - * Shift a branch a certain distance - * @param parentId - * @param diff * @private */ - - }, { - key: '_shiftBlock', - value: function _shiftBlock(parentId, diff) { - var _this8 = this; - - var progress = {}; - var shifter = function shifter(parentId) { - if (progress[parentId]) { - return; - } - progress[parentId] = true; - if (_this8.options.hierarchical.direction === 'UD' || _this8.options.hierarchical.direction === 'DU') { - _this8.body.nodes[parentId].x += diff; - } else { - _this8.body.nodes[parentId].y += diff; - } - if (_this8.hierarchicalChildrenReference[parentId] !== undefined) { - for (var i = 0; i < _this8.hierarchicalChildrenReference[parentId].length; i++) { - shifter(_this8.hierarchicalChildrenReference[parentId][i]); - } - } - }; - shifter(parentId); + value: function _setPixelRatio(ctx) { + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1); } /** - * Find a common parent between branches. - * @param childA - * @param childB - * @returns {{foundParent, withChild}} + * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to + * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) + * @param {number} x + * @returns {number} * @private */ }, { - key: '_findCommonParent', - value: function _findCommonParent(childA, childB) { - var _this9 = this; + key: '_XconvertDOMtoCanvas', + value: function _XconvertDOMtoCanvas(x) { + return (x - this.body.view.translation.x) / this.body.view.scale; + } - var parents = {}; - var iterateParents = function iterateParents(parents, child) { - if (_this9.hierarchicalParentReference[child] !== undefined) { - for (var i = 0; i < _this9.hierarchicalParentReference[child].length; i++) { - var parent = _this9.hierarchicalParentReference[child][i]; - parents[parent] = true; - iterateParents(parents, parent); - } - } - }; - var findParent = function findParent(parents, child) { - if (_this9.hierarchicalParentReference[child] !== undefined) { - for (var i = 0; i < _this9.hierarchicalParentReference[child].length; i++) { - var parent = _this9.hierarchicalParentReference[child][i]; - if (parents[parent] !== undefined) { - return { foundParent: parent, withChild: child }; - } - var branch = findParent(parents, parent); - if (branch.foundParent !== null) { - return branch; - } - } - } - return { foundParent: null, withChild: child }; - }; + /** + * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to + * the X coordinate in DOM-space (coordinate point in browser relative to the container div) + * @param {number} x + * @returns {number} + * @private + */ - iterateParents(parents, childA); - return findParent(parents, childB); + }, { + key: '_XconvertCanvasToDOM', + value: function _XconvertCanvasToDOM(x) { + return x * this.body.view.scale + this.body.view.translation.x; } /** - * Abstract the getting of the position so we won't have to repeat the check for direction all the time - * @param node - * @param position - * @param level + * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to + * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) + * @param {number} y + * @returns {number} * @private */ }, { - key: '_setPositionForHierarchy', - value: function _setPositionForHierarchy(node, position, level) { - var doNotUpdate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - //console.log('_setPositionForHierarchy',node.id, position) - if (doNotUpdate !== true) { - if (this.distributionOrdering[level] === undefined) { - this.distributionOrdering[level] = []; - this.distributionOrderingPresence[level] = {}; - } + key: '_YconvertDOMtoCanvas', + value: function _YconvertDOMtoCanvas(y) { + return (y - this.body.view.translation.y) / this.body.view.scale; + } - if (this.distributionOrderingPresence[level][node.id] === undefined) { - this.distributionOrdering[level].push(node); - this.distributionIndex[node.id] = this.distributionOrdering[level].length - 1; - } - this.distributionOrderingPresence[level][node.id] = true; - } + /** + * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to + * the Y coordinate in DOM-space (coordinate point in browser relative to the container div) + * @param {number} y + * @returns {number} + * @private + */ - if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { - node.x = position; - } else { - node.y = position; - } + }, { + key: '_YconvertCanvasToDOM', + value: function _YconvertCanvasToDOM(y) { + return y * this.body.view.scale + this.body.view.translation.y; } /** - * Abstract the getting of the position of a node so we do not have to repeat the direction check all the time. - * @param node - * @returns {number|*} - * @private + * + * @param {object} pos = {x: number, y: number} + * @returns {{x: number, y: number}} + * @constructor */ }, { - key: '_getPositionForHierarchy', - value: function _getPositionForHierarchy(node) { - if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { - return node.x; - } else { - return node.y; - } + key: 'canvasToDOM', + value: function canvasToDOM(pos) { + return { x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y) }; } /** - * Use the x or y value to sort the array, allowing users to specify order. - * @param nodeArray - * @private + * + * @param {object} pos = {x: number, y: number} + * @returns {{x: number, y: number}} + * @constructor */ }, { - key: '_sortNodeArray', - value: function _sortNodeArray(nodeArray) { - if (nodeArray.length > 1) { - if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { - nodeArray.sort(function (a, b) { - return a.x - b.x; - }); - } else { - nodeArray.sort(function (a, b) { - return a.y - b.y; - }); - } - } + key: 'DOMtoCanvas', + value: function DOMtoCanvas(pos) { + return { x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y) }; } }]); - return LayoutEngine; + return Canvas; }(); - exports['default'] = LayoutEngine; + exports['default'] = Canvas; -/***/ }, +/***/ }), /* 223 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -48655,3685 +46531,6303 @@ return /******/ (function(modules) { // webpackBootstrap value: true }); - var _keys = __webpack_require__(58); - - var _keys2 = _interopRequireDefault(_keys); - - var _stringify = __webpack_require__(90); - - var _stringify2 = _interopRequireDefault(_stringify); - - var _typeof2 = __webpack_require__(62); - - var _typeof3 = _interopRequireDefault(_typeof2); - - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var util = __webpack_require__(1); - var Hammer = __webpack_require__(112); - var hammerUtil = __webpack_require__(125); - /** - * clears the toolbar div element of children - * - * @private - */ + var NetworkUtil = __webpack_require__(219)['default']; - var ManipulationSystem = function () { - function ManipulationSystem(body, canvas, selectionHandler) { + var View = function () { + function View(body, canvas) { var _this = this; - (0, _classCallCheck3['default'])(this, ManipulationSystem); + (0, _classCallCheck3['default'])(this, View); this.body = body; this.canvas = canvas; - this.selectionHandler = selectionHandler; - - this.editMode = false; - this.manipulationDiv = undefined; - this.editModeDiv = undefined; - this.closeDiv = undefined; - - this.manipulationHammers = []; - this.temporaryUIFunctions = {}; - this.temporaryEventFunctions = []; + this.animationSpeed = 1 / this.renderRefreshRate; + this.animationEasingFunction = "easeInOutQuint"; + this.easingTime = 0; + this.sourceScale = 0; + this.targetScale = 0; + this.sourceTranslation = 0; + this.targetTranslation = 0; + this.lockedOnNodeId = undefined; + this.lockedOnNodeOffset = undefined; this.touchTime = 0; - this.temporaryIds = { nodes: [], edges: [] }; - this.guiEnabled = false; - this.inMode = false; - this.selectedControlNode = undefined; - this.options = {}; - this.defaultOptions = { - enabled: false, - initiallyActive: false, - addNode: true, - addEdge: true, - editNode: undefined, - editEdge: true, - deleteNode: true, - deleteEdge: true, - controlNodeStyle: { - shape: 'dot', - size: 6, - color: { background: '#ff0000', border: '#3c3c3c', highlight: { background: '#07f968', border: '#3c3c3c' } }, - borderWidth: 2, - borderWidthSelected: 2 - } - }; - util.extend(this.options, this.defaultOptions); + this.viewFunction = undefined; - this.body.emitter.on('destroy', function () { - _this._clean(); + this.body.emitter.on("fit", this.fit.bind(this)); + this.body.emitter.on("animationFinished", function () { + _this.body.emitter.emit("_stopRendering"); }); - this.body.emitter.on('_dataChanged', this._restore.bind(this)); - this.body.emitter.on('_resetData', this._restore.bind(this)); + this.body.emitter.on("unlockNode", this.releaseNode.bind(this)); } - /** - * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes. - * @private - */ - + (0, _createClass3['default'])(View, [{ + key: 'setOptions', + value: function setOptions() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - (0, _createClass3['default'])(ManipulationSystem, [{ - key: '_restore', - value: function _restore() { - if (this.inMode !== false) { - if (this.options.initiallyActive === true) { - this.enableEditMode(); - } else { - this.disableEditMode(); - } - } + this.options = options; } /** - * Set the Options - * @param options + * This function zooms out to fit all data on screen based on amount of nodes + * @param {Object} Options + * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; */ }, { - key: 'setOptions', - value: function setOptions(options, allOptions, globalOptions) { - if (allOptions !== undefined) { - if (allOptions.locale !== undefined) { - this.options.locale = allOptions.locale; - } else { - this.options.locale = globalOptions.locale; - } - if (allOptions.locales !== undefined) { - this.options.locales = allOptions.locales; - } else { - this.options.locales = globalOptions.locales; - } + key: 'fit', + value: function fit() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { nodes: [] }; + var initialZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var range = void 0; + var zoomLevel = void 0; + if (options.nodes === undefined || options.nodes.length === 0) { + options.nodes = this.body.nodeIndices; } - if (options !== undefined) { - if (typeof options === 'boolean') { - this.options.enabled = options; - } else { - this.options.enabled = true; - util.deepExtend(this.options, options); + if (initialZoom === true) { + // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation. + var positionDefined = 0; + for (var nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + var node = this.body.nodes[nodeId]; + if (node.predefinedPosition === true) { + positionDefined += 1; + } + } } - if (this.options.initiallyActive === true) { - this.editMode = true; + if (positionDefined > 0.5 * this.body.nodeIndices.length) { + this.fit(options, false); + return; } - this._setup(); - } - } - /** - * Enable or disable edit-mode. Draws the DOM required and cleans up after itself. - * - * @private - */ + range = NetworkUtil.getRange(this.body.nodes, options.nodes); - }, { - key: 'toggleEditMode', - value: function toggleEditMode() { - if (this.editMode === true) { - this.disableEditMode(); + var numberOfNodes = this.body.nodeIndices.length; + zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + + // correct for larger canvasses. + var factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600); + zoomLevel *= factor; } else { - this.enableEditMode(); - } - } - }, { - key: 'enableEditMode', - value: function enableEditMode() { - this.editMode = true; + this.body.emitter.emit("_resizeNodes"); + range = NetworkUtil.getRange(this.body.nodes, options.nodes); - this._clean(); - if (this.guiEnabled === true) { - this.manipulationDiv.style.display = 'block'; - this.closeDiv.style.display = 'block'; - this.editModeDiv.style.display = 'none'; - this.showManipulatorToolbar(); + var xDistance = Math.abs(range.maxX - range.minX) * 1.1; + var yDistance = Math.abs(range.maxY - range.minY) * 1.1; + + var xZoomLevel = this.canvas.frame.canvas.clientWidth / xDistance; + var yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance; + + zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel; } - } - }, { - key: 'disableEditMode', - value: function disableEditMode() { - this.editMode = false; - this._clean(); - if (this.guiEnabled === true) { - this.manipulationDiv.style.display = 'none'; - this.closeDiv.style.display = 'none'; - this.editModeDiv.style.display = 'block'; - this._createEditButton(); + if (zoomLevel > 1.0) { + zoomLevel = 1.0; + } else if (zoomLevel === 0) { + zoomLevel = 1.0; } + + var center = NetworkUtil.findCenter(range); + var animationOptions = { position: center, scale: zoomLevel, animation: options.animation }; + this.moveTo(animationOptions); } + // animation + /** - * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. + * Center a node in view. * - * @private + * @param {Number} nodeId + * @param {Number} [options] */ }, { - key: 'showManipulatorToolbar', - value: function showManipulatorToolbar() { - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); - - // reset global variables - this.manipulationDOM = {}; - - // if the gui is enabled, draw all elements. - if (this.guiEnabled === true) { - // a _restore will hide these menus - this.editMode = true; - this.manipulationDiv.style.display = 'block'; - this.closeDiv.style.display = 'block'; - - var selectedNodeCount = this.selectionHandler._getSelectedNodeCount(); - var selectedEdgeCount = this.selectionHandler._getSelectedEdgeCount(); - var selectedTotalCount = selectedNodeCount + selectedEdgeCount; - var locale = this.options.locales[this.options.locale]; - var needSeperator = false; - - if (this.options.addNode !== false) { - this._createAddNodeButton(locale); - needSeperator = true; - } - if (this.options.addEdge !== false) { - if (needSeperator === true) { - this._createSeperator(1); - } else { - needSeperator = true; - } - this._createAddEdgeButton(locale); - } - - if (selectedNodeCount === 1 && typeof this.options.editNode === 'function') { - if (needSeperator === true) { - this._createSeperator(2); - } else { - needSeperator = true; - } - this._createEditNodeButton(locale); - } else if (selectedEdgeCount === 1 && selectedNodeCount === 0 && this.options.editEdge !== false) { - if (needSeperator === true) { - this._createSeperator(3); - } else { - needSeperator = true; - } - this._createEditEdgeButton(locale); - } - - // remove buttons - if (selectedTotalCount !== 0) { - if (selectedNodeCount > 0 && this.options.deleteNode !== false) { - if (needSeperator === true) { - this._createSeperator(4); - } - this._createDeleteButton(locale); - } else if (selectedNodeCount === 0 && this.options.deleteEdge !== false) { - if (needSeperator === true) { - this._createSeperator(4); - } - this._createDeleteButton(locale); - } - } + key: 'focus', + value: function focus(nodeId) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - // bind the close button - this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + if (this.body.nodes[nodeId] !== undefined) { + var nodePosition = { x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y }; + options.position = nodePosition; + options.lockedOnNode = nodeId; - // refresh this bar based on what has been selected - this._temporaryBindEvent('select', this.showManipulatorToolbar.bind(this)); + this.moveTo(options); + } else { + console.log("Node: " + nodeId + " cannot be found."); } - - // redraw to show any possible changes - this.body.emitter.emit('_redraw'); } /** - * Create the toolbar for adding Nodes + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.scale = Number // scale to move to + * | options.position = {x:Number, y:Number} // position to move to + * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to */ }, { - key: 'addNodeMode', - value: function addNodeMode() { - // when using the gui, enable edit mode if it wasnt already. - if (this.editMode !== true) { - this.enableEditMode(); + key: 'moveTo', + value: function moveTo(options) { + if (options === undefined) { + options = {}; + return; } - - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); - - this.inMode = 'addNode'; - if (this.guiEnabled === true) { - var locale = this.options.locales[this.options.locale]; - this.manipulationDOM = {}; - this._createBackButton(locale); - this._createSeperator(); - this._createDescription(locale['addDescription'] || this.options.locales['en']['addDescription']); - - // bind the close button - this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + if (options.offset === undefined) { + options.offset = { x: 0, y: 0 }; + } + if (options.offset.x === undefined) { + options.offset.x = 0; + } + if (options.offset.y === undefined) { + options.offset.y = 0; } + if (options.scale === undefined) { + options.scale = this.body.view.scale; + } + if (options.position === undefined) { + options.position = this.getViewPosition(); + } + if (options.animation === undefined) { + options.animation = { duration: 0 }; + } + if (options.animation === false) { + options.animation = { duration: 0 }; + } + if (options.animation === true) { + options.animation = {}; + } + if (options.animation.duration === undefined) { + options.animation.duration = 1000; + } // default duration + if (options.animation.easingFunction === undefined) { + options.animation.easingFunction = "easeInOutQuad"; + } // default easing function - this._temporaryBindEvent('click', this._performAddNode.bind(this)); + this.animateView(options); } /** - * call the bound function to handle the editing of the node. The node has to be selected. + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.time = Number // animation time in milliseconds + * | options.scale = Number // scale to animate to + * | options.position = {x:Number, y:Number} // position to animate to + * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, + * // easeInCubic, easeOutCubic, easeInOutCubic, + * // easeInQuart, easeOutQuart, easeInOutQuart, + * // easeInQuint, easeOutQuint, easeInOutQuint */ }, { - key: 'editNode', - value: function editNode() { - var _this2 = this; + key: 'animateView', + value: function animateView(options) { + if (options === undefined) { + return; + } + this.animationEasingFunction = options.animation.easingFunction; + // release if something focussed on the node + this.releaseNode(); + if (options.locked === true) { + this.lockedOnNodeId = options.lockedOnNode; + this.lockedOnNodeOffset = options.offset; + } - // when using the gui, enable edit mode if it wasnt already. - if (this.editMode !== true) { - this.enableEditMode(); + // forcefully complete the old animation if it was still running + if (this.easingTime != 0) { + this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation. } - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); - var node = this.selectionHandler._getSelectedNode(); - if (node !== undefined) { - this.inMode = 'editNode'; - if (typeof this.options.editNode === 'function') { - if (node.isCluster !== true) { - var data = util.deepExtend({}, node.options, false); - data.x = node.x; - data.y = node.y; + this.sourceScale = this.body.view.scale; + this.sourceTranslation = this.body.view.translation; + this.targetScale = options.scale; - if (this.options.editNode.length === 2) { - this.options.editNode(data, function (finalizedData) { - if (finalizedData !== null && finalizedData !== undefined && _this2.inMode === 'editNode') { - // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { - _this2.body.data.nodes.getDataSet().update(finalizedData); - } - _this2.showManipulatorToolbar(); - }); - } else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - } - } else { - alert(this.options.locales[this.options.locale]['editClusterError'] || this.options.locales['en']['editClusterError']); - } + // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw + // but at least then we'll have the target transition + this.body.view.scale = this.targetScale; + var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - options.position.x, + y: viewCenter.y - options.position.y + }; + this.targetTranslation = { + x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, + y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y + }; + + // if the time is set to 0, don't do an animation + if (options.animation.duration === 0) { + if (this.lockedOnNodeId != undefined) { + this.viewFunction = this._lockedRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); } else { - throw new Error('No function has been configured to handle the editing of nodes.'); + this.body.view.scale = this.targetScale; + this.body.view.translation = this.targetTranslation; + this.body.emitter.emit("_requestRedraw"); } } else { - this.showManipulatorToolbar(); + this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's + this.animationEasingFunction = options.animation.easingFunction; + + this.viewFunction = this._transitionRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); + this.body.emitter.emit("_startRendering"); } } /** - * create the toolbar to connect nodes + * used to animate smoothly by hijacking the redraw function. + * @private */ }, { - key: 'addEdgeMode', - value: function addEdgeMode() { - // when using the gui, enable edit mode if it wasnt already. - if (this.editMode !== true) { - this.enableEditMode(); - } - - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); - - this.inMode = 'addEdge'; - if (this.guiEnabled === true) { - var locale = this.options.locales[this.options.locale]; - this.manipulationDOM = {}; - this._createBackButton(locale); - this._createSeperator(); - this._createDescription(locale['edgeDescription'] || this.options.locales['en']['edgeDescription']); + key: '_lockedRedraw', + value: function _lockedRedraw() { + var nodePosition = { x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y }; + var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - nodePosition.x, + y: viewCenter.y - nodePosition.y + }; + var sourceTranslation = this.body.view.translation; + var targetTranslation = { + x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x, + y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y + }; - // bind the close button - this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + this.body.view.translation = targetTranslation; + } + }, { + key: 'releaseNode', + value: function releaseNode() { + if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) { + this.body.emitter.off("initRedraw", this.viewFunction); + this.lockedOnNodeId = undefined; + this.lockedOnNodeOffset = undefined; } - - // temporarily overload functions - 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 () {}); } /** - * create the toolbar to edit edges + * + * @param easingTime + * @private */ }, { - key: 'editEdgeMode', - value: function editEdgeMode() { - // when using the gui, enable edit mode if it wasn't already. - if (this.editMode !== true) { - this.enableEditMode(); - } + key: '_transitionRedraw', + value: function _transitionRedraw() { + var finished = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); + this.easingTime += this.animationSpeed; + this.easingTime = finished === true ? 1.0 : this.easingTime; - this.inMode = 'editEdge'; - if ((0, _typeof3['default'])(this.options.editEdge) === 'object' && typeof this.options.editEdge.editWithoutDrag === "function") { - this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0]; - if (this.edgeBeingEditedId !== undefined) { - var edge = this.body.edges[this.edgeBeingEditedId]; - this._performEditEdge(edge.from, edge.to); - return; + var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); + + this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress; + this.body.view.translation = { + x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, + y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress + }; + + // cleanup + if (this.easingTime >= 1.0) { + this.body.emitter.off("initRedraw", this.viewFunction); + this.easingTime = 0; + if (this.lockedOnNodeId != undefined) { + this.viewFunction = this._lockedRedraw.bind(this); + this.body.emitter.on("initRedraw", this.viewFunction); } + this.body.emitter.emit("animationFinished"); } - if (this.guiEnabled === true) { - var locale = this.options.locales[this.options.locale]; - this.manipulationDOM = {}; - this._createBackButton(locale); - this._createSeperator(); - this._createDescription(locale['editEdgeDescription'] || this.options.locales['en']['editEdgeDescription']); + } + }, { + key: 'getScale', + value: function getScale() { + return this.body.view.scale; + } + }, { + key: 'getViewPosition', + value: function getViewPosition() { + return this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight }); + } + }]); + return View; + }(); - // bind the close button - this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); - } + exports['default'] = View; - this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0]; - if (this.edgeBeingEditedId !== undefined) { - var _edge = this.body.edges[this.edgeBeingEditedId]; +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { - // create control nodes - var controlNodeFrom = this._getNewTargetNode(_edge.from.x, _edge.from.y); - var controlNodeTo = this._getNewTargetNode(_edge.to.x, _edge.to.y); + 'use strict'; - this.temporaryIds.nodes.push(controlNodeFrom.id); - this.temporaryIds.nodes.push(controlNodeTo.id); + Object.defineProperty(exports, "__esModule", { + value: true + }); - this.body.nodes[controlNodeFrom.id] = controlNodeFrom; - this.body.nodeIndices.push(controlNodeFrom.id); - this.body.nodes[controlNodeTo.id] = controlNodeTo; - this.body.nodeIndices.push(controlNodeTo.id); + var _classCallCheck2 = __webpack_require__(134); - // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI - this._temporaryBindUI('onTouch', this._controlNodeTouch.bind(this)); // used to get the position - this._temporaryBindUI('onTap', function () {}); // disabled - this._temporaryBindUI('onHold', function () {}); // disabled - this._temporaryBindUI('onDragStart', this._controlNodeDragStart.bind(this)); // used to select control node - this._temporaryBindUI('onDrag', this._controlNodeDrag.bind(this)); // used to drag control node - this._temporaryBindUI('onDragEnd', this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes - this._temporaryBindUI('onMouseMove', function () {}); // disabled + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - // create function to position control nodes correctly on movement - // automatically cleaned up because we use the temporary bind - this._temporaryBindEvent('beforeDrawing', function (ctx) { - var positions = _edge.edgeType.findBorderPositions(ctx); - if (controlNodeFrom.selected === false) { - controlNodeFrom.x = positions.from.x; - controlNodeFrom.y = positions.from.y; - } - if (controlNodeTo.selected === false) { - controlNodeTo.x = positions.to.x; - controlNodeTo.y = positions.to.y; - } - }); + var _createClass2 = __webpack_require__(135); - this.body.emitter.emit('_redraw'); - } else { - this.showManipulatorToolbar(); - } - } + var _createClass3 = _interopRequireDefault(_createClass2); - /** - * delete everything in the selection - */ + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - }, { - key: 'deleteSelected', - value: function deleteSelected() { - var _this3 = this; + var util = __webpack_require__(1); - // when using the gui, enable edit mode if it wasnt already. - if (this.editMode !== true) { - this.enableEditMode(); - } + var NavigationHandler = __webpack_require__(225)['default']; + var Popup = __webpack_require__(133)['default']; - // restore the state of any bound functions or events, remove control nodes, restore physics - this._clean(); + var InteractionHandler = function () { + function InteractionHandler(body, canvas, selectionHandler) { + (0, _classCallCheck3['default'])(this, InteractionHandler); - this.inMode = 'delete'; - var selectedNodes = this.selectionHandler.getSelectedNodes(); - var selectedEdges = this.selectionHandler.getSelectedEdges(); - var deleteFunction = undefined; - if (selectedNodes.length > 0) { - for (var i = 0; i < selectedNodes.length; i++) { - if (this.body.nodes[selectedNodes[i]].isCluster === true) { - alert(this.options.locales[this.options.locale]['deleteClusterError'] || this.options.locales['en']['deleteClusterError']); - return; - } - } + this.body = body; + this.canvas = canvas; + this.selectionHandler = selectionHandler; + this.navigationHandler = new NavigationHandler(body, canvas); - if (typeof this.options.deleteNode === 'function') { - deleteFunction = this.options.deleteNode; - } - } else if (selectedEdges.length > 0) { - if (typeof this.options.deleteEdge === 'function') { - deleteFunction = this.options.deleteEdge; - } - } + // bind the events from hammer to functions in this object + this.body.eventListeners.onTap = this.onTap.bind(this); + this.body.eventListeners.onTouch = this.onTouch.bind(this); + this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this); + this.body.eventListeners.onHold = this.onHold.bind(this); + this.body.eventListeners.onDragStart = this.onDragStart.bind(this); + this.body.eventListeners.onDrag = this.onDrag.bind(this); + this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this); + this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this); + this.body.eventListeners.onPinch = this.onPinch.bind(this); + this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this); + this.body.eventListeners.onRelease = this.onRelease.bind(this); + this.body.eventListeners.onContext = this.onContext.bind(this); - if (typeof deleteFunction === 'function') { - var data = { nodes: selectedNodes, edges: selectedEdges }; - if (deleteFunction.length === 2) { - deleteFunction(data, function (finalizedData) { - if (finalizedData !== null && finalizedData !== undefined && _this3.inMode === 'delete') { - // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { - _this3.body.data.edges.getDataSet().remove(finalizedData.edges); - _this3.body.data.nodes.getDataSet().remove(finalizedData.nodes); - _this3.body.emitter.emit('startSimulation'); - _this3.showManipulatorToolbar(); - } else { - _this3.body.emitter.emit('startSimulation'); - _this3.showManipulatorToolbar(); - } - }); - } else { - throw new Error('The function for delete does not support two arguments (data, callback)'); - } - } else { - this.body.data.edges.getDataSet().remove(selectedEdges); - this.body.data.nodes.getDataSet().remove(selectedNodes); - this.body.emitter.emit('startSimulation'); - this.showManipulatorToolbar(); - } - } + this.touchTime = 0; + this.drag = {}; + this.pinch = {}; + this.popup = undefined; + this.popupObj = undefined; + this.popupTimer = undefined; - //********************************************** PRIVATE ***************************************// + this.body.functions.getPointer = this.getPointer.bind(this); - /** - * draw or remove the DOM - * @private - */ + this.options = {}; + this.defaultOptions = { + dragNodes: true, + dragView: true, + hover: false, + keyboard: { + enabled: false, + speed: { x: 10, y: 10, zoom: 0.02 }, + bindToWindow: true + }, + navigationButtons: false, + tooltipDelay: 300, + zoomView: true + }; + util.extend(this.options, this.defaultOptions); - }, { - key: '_setup', - value: function _setup() { - if (this.options.enabled === true) { - // Enable the GUI - this.guiEnabled = true; + this.bindEventListeners(); + } - this._createWrappers(); - if (this.editMode === false) { - this._createEditButton(); - } else { - this.showManipulatorToolbar(); - } - } else { - this._removeManipulationDOM(); + (0, _createClass3['default'])(InteractionHandler, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this = this; - // disable the gui - this.guiEnabled = false; - } + this.body.emitter.on('destroy', function () { + clearTimeout(_this.popupTimer); + delete _this.body.functions.getPointer; + }); } - - /** - * create the div overlays that contain the DOM - * @private - */ - }, { - key: '_createWrappers', - value: function _createWrappers() { - // load the manipulator HTML elements. All styling done in css. - if (this.manipulationDiv === undefined) { - this.manipulationDiv = document.createElement('div'); - this.manipulationDiv.className = 'vis-manipulation'; - if (this.editMode === true) { - this.manipulationDiv.style.display = 'block'; - } else { - this.manipulationDiv.style.display = 'none'; - } - this.canvas.frame.appendChild(this.manipulationDiv); - } + key: 'setOptions', + value: function setOptions(options) { + if (options !== undefined) { + // extend all but the values in fields + var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag', 'keyboard', 'multiselect', 'selectable', 'selectConnectedEdges']; + util.selectiveNotDeepExtend(fields, this.options, options); - // container for the edit button. - if (this.editModeDiv === undefined) { - this.editModeDiv = document.createElement('div'); - this.editModeDiv.className = 'vis-edit-mode'; - if (this.editMode === true) { - this.editModeDiv.style.display = 'none'; - } else { - this.editModeDiv.style.display = 'block'; + // merge the keyboard options in. + util.mergeOptions(this.options, options, 'keyboard'); + + if (options.tooltip) { + util.extend(this.options.tooltip, options.tooltip); + if (options.tooltip.color) { + this.options.tooltip.color = util.parseColor(options.tooltip.color); + } } - this.canvas.frame.appendChild(this.editModeDiv); } - // container for the close div button - if (this.closeDiv === undefined) { - this.closeDiv = document.createElement('div'); - this.closeDiv.className = 'vis-close'; - this.closeDiv.style.display = this.manipulationDiv.style.display; - this.canvas.frame.appendChild(this.closeDiv); - } + this.navigationHandler.setOptions(this.options); } /** - * generate a new target node. Used for creating new edges and editing edges - * @param x - * @param y - * @returns {*} + * Get the pointer location from a touch location + * @param {{x: Number, y: Number}} touch + * @return {{x: Number, y: Number}} pointer * @private */ }, { - key: '_getNewTargetNode', - value: function _getNewTargetNode(x, y) { - var controlNodeStyle = util.deepExtend({}, this.options.controlNodeStyle); - - controlNodeStyle.id = 'targetNode' + util.randomUUID(); - controlNodeStyle.hidden = false; - controlNodeStyle.physics = false; - controlNodeStyle.x = x; - controlNodeStyle.y = y; - - // we have to define the bounding box in order for the nodes to be drawn immediately - var node = this.body.functions.createNode(controlNodeStyle); - node.shape.boundingBox = { left: x, right: x, top: y, bottom: y }; - - return node; + key: 'getPointer', + value: function getPointer(touch) { + return { + x: touch.x - util.getAbsoluteLeft(this.canvas.frame.canvas), + y: touch.y - util.getAbsoluteTop(this.canvas.frame.canvas) + }; } /** - * Create the edit button + * On start of a touch gesture, store the pointer + * @param event + * @private */ }, { - key: '_createEditButton', - value: function _createEditButton() { - // restore everything to it's original state (if applicable) - this._clean(); - - // reset the manipulationDOM - this.manipulationDOM = {}; - - // empty the editModeDiv - util.recursiveDOMDelete(this.editModeDiv); - - // create the contents for the editMode button - var locale = this.options.locales[this.options.locale]; - var button = this._createButton('editMode', 'vis-button vis-edit vis-edit-mode', locale['edit'] || this.options.locales['en']['edit']); - this.editModeDiv.appendChild(button); - - // bind a hammer listener to the button, calling the function toggleEditMode. - this._bindHammerToDiv(button, this.toggleEditMode.bind(this)); + key: 'onTouch', + value: function onTouch(event) { + if (new Date().valueOf() - this.touchTime > 50) { + this.drag.pointer = this.getPointer(event.center); + this.drag.pinched = false; + this.pinch.scale = this.body.view.scale; + // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) + this.touchTime = new Date().valueOf(); + } } /** - * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed. + * handle tap/click event: select/unselect a node * @private */ }, { - key: '_clean', - value: function _clean() { - // not in mode - this.inMode = false; - - // _clean the divs - if (this.guiEnabled === true) { - util.recursiveDOMDelete(this.editModeDiv); - util.recursiveDOMDelete(this.manipulationDiv); - - // removes all the bindings and overloads - this._cleanManipulatorHammers(); - } - - // remove temporary nodes and edges - this._cleanupTemporaryNodesAndEdges(); - - // restore overloaded UI functions - this._unbindTemporaryUIs(); - - // remove the temporaryEventFunctions - this._unbindTemporaryEvents(); + key: 'onTap', + value: function onTap(event) { + var pointer = this.getPointer(event.center); + var multiselect = this.selectionHandler.options.multiselect && (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey); - // restore the physics if required - this.body.emitter.emit('restorePhysics'); + this.checkSelectionChanges(pointer, event, multiselect); + this.selectionHandler._generateClickEvent('click', event, pointer); } /** - * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up. + * handle doubletap event * @private */ }, { - key: '_cleanManipulatorHammers', - value: function _cleanManipulatorHammers() { - // _clean hammer bindings - if (this.manipulationHammers.length != 0) { - for (var i = 0; i < this.manipulationHammers.length; i++) { - this.manipulationHammers[i].destroy(); - } - this.manipulationHammers = []; - } + key: 'onDoubleTap', + value: function onDoubleTap(event) { + var pointer = this.getPointer(event.center); + this.selectionHandler._generateClickEvent('doubleClick', event, pointer); } /** - * Remove all DOM elements created by this module. + * handle long tap event: multi select nodes * @private */ }, { - key: '_removeManipulationDOM', - value: function _removeManipulationDOM() { - // removes all the bindings and overloads - this._clean(); - - // empty the manipulation divs - util.recursiveDOMDelete(this.manipulationDiv); - util.recursiveDOMDelete(this.editModeDiv); - util.recursiveDOMDelete(this.closeDiv); + key: 'onHold', + value: function onHold(event) { + var pointer = this.getPointer(event.center); + var multiselect = this.selectionHandler.options.multiselect; - // remove the manipulation divs - if (this.manipulationDiv) { - this.canvas.frame.removeChild(this.manipulationDiv); - } - if (this.editModeDiv) { - this.canvas.frame.removeChild(this.editModeDiv); - } - if (this.closeDiv) { - this.canvas.frame.removeChild(this.closeDiv); - } + this.checkSelectionChanges(pointer, event, multiselect); - // set the references to undefined - this.manipulationDiv = undefined; - this.editModeDiv = undefined; - this.closeDiv = undefined; + this.selectionHandler._generateClickEvent('click', event, pointer); + this.selectionHandler._generateClickEvent('hold', event, pointer); } /** - * create a seperator line. the index is to differentiate in the manipulation dom - * @param index + * handle the release of the screen + * * @private */ }, { - key: '_createSeperator', - value: function _createSeperator() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; - - this.manipulationDOM['seperatorLineDiv' + index] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv' + index].className = 'vis-separator-line'; - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv' + index]); - } - - // ---------------------- DOM functions for buttons --------------------------// - - }, { - key: '_createAddNodeButton', - value: function _createAddNodeButton(locale) { - var button = this._createButton('addNode', 'vis-button vis-add', locale['addNode'] || this.options.locales['en']['addNode']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.addNodeMode.bind(this)); - } - }, { - key: '_createAddEdgeButton', - value: function _createAddEdgeButton(locale) { - var button = this._createButton('addEdge', 'vis-button vis-connect', locale['addEdge'] || this.options.locales['en']['addEdge']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.addEdgeMode.bind(this)); - } - }, { - key: '_createEditNodeButton', - value: function _createEditNodeButton(locale) { - var button = this._createButton('editNode', 'vis-button vis-edit', locale['editNode'] || this.options.locales['en']['editNode']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.editNode.bind(this)); - } - }, { - key: '_createEditEdgeButton', - value: function _createEditEdgeButton(locale) { - var button = this._createButton('editEdge', 'vis-button vis-edit', locale['editEdge'] || this.options.locales['en']['editEdge']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.editEdgeMode.bind(this)); - } - }, { - key: '_createDeleteButton', - value: function _createDeleteButton(locale) { - if (this.options.rtl) { - var deleteBtnClass = 'vis-button vis-delete-rtl'; - } else { - var deleteBtnClass = 'vis-button vis-delete'; + key: 'onRelease', + value: function onRelease(event) { + if (new Date().valueOf() - this.touchTime > 10) { + var pointer = this.getPointer(event.center); + this.selectionHandler._generateClickEvent('release', event, pointer); + // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) + this.touchTime = new Date().valueOf(); } - var button = this._createButton('delete', deleteBtnClass, locale['del'] || this.options.locales['en']['del']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.deleteSelected.bind(this)); } }, { - key: '_createBackButton', - value: function _createBackButton(locale) { - var button = this._createButton('back', 'vis-button vis-back', locale['back'] || this.options.locales['en']['back']); - this.manipulationDiv.appendChild(button); - this._bindHammerToDiv(button, this.showManipulatorToolbar.bind(this)); + key: 'onContext', + value: function onContext(event) { + var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); + this.selectionHandler._generateClickEvent('oncontext', event, pointer); } - }, { - key: '_createButton', - value: function _createButton(id, className, label) { - var labelClassName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'vis-label'; + /** + * + * @param pointer + * @param add + */ - this.manipulationDOM[id + 'Div'] = document.createElement('div'); - this.manipulationDOM[id + 'Div'].className = className; - this.manipulationDOM[id + 'Label'] = document.createElement('div'); - this.manipulationDOM[id + 'Label'].className = labelClassName; - this.manipulationDOM[id + 'Label'].innerHTML = label; - this.manipulationDOM[id + 'Div'].appendChild(this.manipulationDOM[id + 'Label']); - return this.manipulationDOM[id + 'Div']; - } }, { - key: '_createDescription', - value: function _createDescription(label) { - this.manipulationDiv.appendChild(this._createButton('description', 'vis-button vis-none', label)); - } + key: 'checkSelectionChanges', + value: function checkSelectionChanges(pointer, event) { + var add = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - // -------------------------- End of DOM functions for buttons ------------------------------// + var previouslySelectedEdgeCount = this.selectionHandler._getSelectedEdgeCount(); + var previouslySelectedNodeCount = this.selectionHandler._getSelectedNodeCount(); + var previousSelection = this.selectionHandler.getSelection(); + var selected = void 0; + if (add === true) { + selected = this.selectionHandler.selectAdditionalOnPoint(pointer); + } else { + selected = this.selectionHandler.selectOnPoint(pointer); + } + var selectedEdgesCount = this.selectionHandler._getSelectedEdgeCount(); + var selectedNodesCount = this.selectionHandler._getSelectedNodeCount(); + var currentSelection = this.selectionHandler.getSelection(); - /** - * this binds an event until cleanup by the clean functions. - * @param event - * @param newFunction - * @private - */ + var _determineIfDifferent2 = this._determineIfDifferent(previousSelection, currentSelection), + nodesChanged = _determineIfDifferent2.nodesChanged, + edgesChanged = _determineIfDifferent2.edgesChanged; - }, { - key: '_temporaryBindEvent', - value: function _temporaryBindEvent(event, newFunction) { - this.temporaryEventFunctions.push({ event: event, boundFunction: newFunction }); - this.body.emitter.on(event, newFunction); - } + var nodeSelected = false; - /** - * this overrides an UI function until cleanup by the clean function - * @param UIfunctionName - * @param newFunction - * @private - */ + if (selectedNodesCount - previouslySelectedNodeCount > 0) { + // node was selected + this.selectionHandler._generateClickEvent('selectNode', event, pointer); + selected = true; + nodeSelected = true; + } else if (nodesChanged === true && selectedNodesCount > 0) { + this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); + this.selectionHandler._generateClickEvent('selectNode', event, pointer); + nodeSelected = true; + selected = true; + } else if (selectedNodesCount - previouslySelectedNodeCount < 0) { + // node was deselected + this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection); + selected = true; + } - }, { - key: '_temporaryBindUI', - value: function _temporaryBindUI(UIfunctionName, newFunction) { - if (this.body.eventListeners[UIfunctionName] !== undefined) { - this.temporaryUIFunctions[UIfunctionName] = this.body.eventListeners[UIfunctionName]; - this.body.eventListeners[UIfunctionName] = newFunction; - } else { - throw new Error('This UI function does not exist. Typo? You tried: ' + UIfunctionName + ' possible are: ' + (0, _stringify2['default'])((0, _keys2['default'])(this.body.eventListeners))); + // handle the selected edges + if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { + // edge was selected + this.selectionHandler._generateClickEvent('selectEdge', event, pointer); + selected = true; + } else if (selectedEdgesCount > 0 && edgesChanged === true) { + this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); + this.selectionHandler._generateClickEvent('selectEdge', event, pointer); + selected = true; + } else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { + // edge was deselected + this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection); + 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); } } /** - * Restore the overridden UI functions to their original state. - * + * This function checks if the nodes and edges previously selected have changed. + * @param previousSelection + * @param currentSelection + * @returns {{nodesChanged: boolean, edgesChanged: boolean}} * @private */ }, { - key: '_unbindTemporaryUIs', - value: function _unbindTemporaryUIs() { - for (var functionName in this.temporaryUIFunctions) { - if (this.temporaryUIFunctions.hasOwnProperty(functionName)) { - this.body.eventListeners[functionName] = this.temporaryUIFunctions[functionName]; - delete this.temporaryUIFunctions[functionName]; + key: '_determineIfDifferent', + value: function _determineIfDifferent(previousSelection, currentSelection) { + var nodesChanged = false; + var edgesChanged = false; + + for (var i = 0; i < previousSelection.nodes.length; i++) { + if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) { + nodesChanged = true; } } - this.temporaryUIFunctions = {}; + for (var _i = 0; _i < currentSelection.nodes.length; _i++) { + if (previousSelection.nodes.indexOf(previousSelection.nodes[_i]) === -1) { + nodesChanged = true; + } + } + for (var _i2 = 0; _i2 < previousSelection.edges.length; _i2++) { + if (currentSelection.edges.indexOf(previousSelection.edges[_i2]) === -1) { + edgesChanged = true; + } + } + for (var _i3 = 0; _i3 < currentSelection.edges.length; _i3++) { + if (previousSelection.edges.indexOf(previousSelection.edges[_i3]) === -1) { + edgesChanged = true; + } + } + + return { nodesChanged: nodesChanged, edgesChanged: edgesChanged }; } /** - * Unbind the events created by _temporaryBindEvent + * This function is called by onDragStart. + * It is separated out because we can then overload it for the datamanipulation system. + * * @private */ }, { - key: '_unbindTemporaryEvents', - value: function _unbindTemporaryEvents() { - for (var i = 0; i < this.temporaryEventFunctions.length; i++) { - var eventName = this.temporaryEventFunctions[i].event; - var boundFunction = this.temporaryEventFunctions[i].boundFunction; - this.body.emitter.off(eventName, boundFunction); + key: 'onDragStart', + value: function onDragStart(event) { + //in case the touch event was triggered on an external div, do the initial touch now. + if (this.drag.pointer === undefined) { + this.onTouch(event); } - this.temporaryEventFunctions = []; - } - /** - * Bind an hammer instance to a DOM element. - * @param domElement - * @param funct - */ + // note: drag.pointer is set in onTouch to get the initial touch location + var node = this.selectionHandler.getNodeAt(this.drag.pointer); - }, { - key: '_bindHammerToDiv', - value: function _bindHammerToDiv(domElement, boundFunction) { - var hammer = new Hammer(domElement, {}); - hammerUtil.onTouch(hammer, boundFunction); - this.manipulationHammers.push(hammer); - } + this.drag.dragging = true; + this.drag.selection = []; + this.drag.translation = util.extend({}, this.body.view.translation); // copy the object + this.drag.nodeId = undefined; - /** - * Neatly clean up temporary edges and nodes - * @private - */ + if (node !== undefined && this.options.dragNodes === true) { + this.drag.nodeId = node.id; + // select the clicked node if not yet selected + if (node.isSelected() === false) { + this.selectionHandler.unselectAll(); + this.selectionHandler.selectObject(node); + } - }, { - key: '_cleanupTemporaryNodesAndEdges', - value: function _cleanupTemporaryNodesAndEdges() { - // _clean temporary edges - for (var i = 0; i < this.temporaryIds.edges.length; i++) { - this.body.edges[this.temporaryIds.edges[i]].disconnect(); - delete this.body.edges[this.temporaryIds.edges[i]]; - var indexTempEdge = this.body.edgeIndices.indexOf(this.temporaryIds.edges[i]); - if (indexTempEdge !== -1) { - this.body.edgeIndices.splice(indexTempEdge, 1); - } - } + // after select to contain the node + this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer); - // _clean temporary nodes - for (var _i = 0; _i < this.temporaryIds.nodes.length; _i++) { - delete this.body.nodes[this.temporaryIds.nodes[_i]]; - var indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[_i]); - if (indexTempNode !== -1) { - this.body.nodeIndices.splice(indexTempNode, 1); + var selection = this.selectionHandler.selectionObj.nodes; + // create an array with the selected nodes and their original location and status + for (var nodeId in selection) { + if (selection.hasOwnProperty(nodeId)) { + var object = selection[nodeId]; + var s = { + id: object.id, + node: object, + + // store original x, y, xFixed and yFixed, make the node temporarily Fixed + x: object.x, + y: object.y, + xFixed: object.options.fixed.x, + yFixed: object.options.fixed.y + }; + + object.options.fixed.x = true; + object.options.fixed.y = true; + + this.drag.selection.push(s); + } } + } else { + // fallback if no node is selected and thus the view is dragged. + this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer, undefined, true); } - - this.temporaryIds = { nodes: [], edges: [] }; } - // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------// - /** - * the touch is used to get the position of the initial click - * @param event + * handle drag event * @private */ }, { - key: '_controlNodeTouch', - value: function _controlNodeTouch(event) { - this.selectionHandler.unselectAll(); - this.lastTouch = this.body.functions.getPointer(event.center); - this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object - } + key: 'onDrag', + value: function onDrag(event) { + var _this2 = this; - /** - * the drag start is used to mark one of the control nodes as selected. - * @param event - * @private - */ + if (this.drag.pinched === true) { + return; + } - }, { - key: '_controlNodeDragStart', - value: function _controlNodeDragStart(event) { - var pointer = this.lastTouch; - var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); - var from = this.body.nodes[this.temporaryIds.nodes[0]]; - var to = this.body.nodes[this.temporaryIds.nodes[1]]; - var edge = this.body.edges[this.edgeBeingEditedId]; - this.selectedControlNode = undefined; + // remove the focus on node if it is focussed on by the focusOnNode + this.body.emitter.emit('unlockNode'); - var fromSelect = from.isOverlappingWith(pointerObj); - var toSelect = to.isOverlappingWith(pointerObj); + var pointer = this.getPointer(event.center); - if (fromSelect === true) { - this.selectedControlNode = from; - edge.edgeType.from = from; - } else if (toSelect === true) { - this.selectedControlNode = to; - edge.edgeType.to = to; - } + var selection = this.drag.selection; + if (selection && selection.length && this.options.dragNodes === true) { + this.selectionHandler._generateClickEvent('dragging', event, pointer); - // we use the selection to find the node that is being dragged. We explicitly select it here. - if (this.selectedControlNode !== undefined) { - this.selectionHandler.selectObject(this.selectedControlNode); - } + // calculate delta's and new location + var deltaX = pointer.x - this.drag.pointer.x; + var deltaY = pointer.y - this.drag.pointer.y; - this.body.emitter.emit('_redraw'); + // update position of all selected nodes + selection.forEach(function (selection) { + var node = selection.node; + // only move the node if it was not fixed initially + if (selection.xFixed === false) { + node.x = _this2.canvas._XconvertDOMtoCanvas(_this2.canvas._XconvertCanvasToDOM(selection.x) + deltaX); + } + // only move the node if it was not fixed initially + if (selection.yFixed === false) { + node.y = _this2.canvas._YconvertDOMtoCanvas(_this2.canvas._YconvertCanvasToDOM(selection.y) + deltaY); + } + }); + + // start the simulation of the physics + this.body.emitter.emit('startSimulation'); + } else { + // move the network + if (this.options.dragView === true) { + this.selectionHandler._generateClickEvent('dragging', event, pointer, undefined, true); + + // if the drag was not started properly because the click started outside the network div, start it now. + if (this.drag.pointer === undefined) { + this.onDragStart(event); + return; + } + var diffX = pointer.x - this.drag.pointer.x; + var diffY = pointer.y - this.drag.pointer.y; + + this.body.view.translation = { x: this.drag.translation.x + diffX, y: this.drag.translation.y + diffY }; + this.body.emitter.emit('_redraw'); + } + } } /** - * dragging the control nodes or the canvas - * @param event + * handle drag start event * @private */ }, { - key: '_controlNodeDrag', - value: function _controlNodeDrag(event) { - this.body.emitter.emit('disablePhysics'); - var pointer = this.body.functions.getPointer(event.center); - var pos = this.canvas.DOMtoCanvas(pointer); - if (this.selectedControlNode !== undefined) { - this.selectedControlNode.x = pos.x; - this.selectedControlNode.y = pos.y; + key: 'onDragEnd', + value: function onDragEnd(event) { + this.drag.dragging = false; + var selection = this.drag.selection; + if (selection && selection.length) { + selection.forEach(function (s) { + // restore original xFixed and yFixed + s.node.options.fixed.x = s.xFixed; + s.node.options.fixed.y = s.yFixed; + }); + this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center)); + this.body.emitter.emit('startSimulation'); } else { - // if the drag was not started properly because the click started outside the network div, start it now. - var diffX = pointer.x - this.lastTouch.x; - var diffY = pointer.y - this.lastTouch.y; - this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY }; + this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center), undefined, true); + this.body.emitter.emit('_requestRedraw'); } - this.body.emitter.emit('_redraw'); } /** - * connecting or restoring the control nodes. + * Handle pinch event * @param event * @private */ }, { - key: '_controlNodeDragEnd', - value: function _controlNodeDragEnd(event) { - var pointer = this.body.functions.getPointer(event.center); - var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); - var edge = this.body.edges[this.edgeBeingEditedId]; - // if the node that was dragged is not a control node, return - if (this.selectedControlNode === undefined) { - return; - } + key: 'onPinch', + value: function onPinch(event) { + var pointer = this.getPointer(event.center); - // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here. - this.selectionHandler.unselectAll(); - var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj); - var node = undefined; - for (var i = overlappingNodeIds.length - 1; i >= 0; i--) { - if (overlappingNodeIds[i] !== this.selectedControlNode.id) { - node = this.body.nodes[overlappingNodeIds[i]]; - break; - } - } - // perform the connection - if (node !== undefined && this.selectedControlNode !== undefined) { - if (node.isCluster === true) { - alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); - } else { - var from = this.body.nodes[this.temporaryIds.nodes[0]]; - if (this.selectedControlNode.id === from.id) { - this._performEditEdge(node.id, edge.to.id); - } else { - this._performEditEdge(edge.from.id, node.id); - } - } - } else { - edge.updateEdgeType(); - this.body.emitter.emit('restorePhysics'); + this.drag.pinched = true; + if (this.pinch['scale'] === undefined) { + this.pinch.scale = 1; } - this.body.emitter.emit('_redraw'); - } - - // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------// + // TODO: enabled moving while pinching? + var scale = this.pinch.scale * event.scale; + this.zoom(scale, pointer); + } - // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------// /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * + * Zoom the network in or out + * @param {Number} scale a number around 1, and between 0.01 and 10 + * @param {{x: Number, y: Number}} pointer Position on screen + * @return {Number} appliedScale scale is limited within the boundaries * @private */ }, { - key: '_handleConnect', - value: function _handleConnect(event) { - // check to avoid double fireing of this function. - if (new Date().valueOf() - this.touchTime > 100) { - this.lastTouch = this.body.functions.getPointer(event.center); - this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object + key: 'zoom', + value: function zoom(scale, pointer) { + if (this.options.zoomView === true) { + var scaleOld = this.body.view.scale; + if (scale < 0.00001) { + scale = 0.00001; + } + if (scale > 10) { + scale = 10; + } - var pointer = this.lastTouch; - var node = this.selectionHandler.getNodeAt(pointer); + var preScaleDragPointer = undefined; + if (this.drag !== undefined) { + if (this.drag.dragging === true) { + preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer); + } + } + // + this.canvas.frame.canvas.clientHeight / 2 + var translation = this.body.view.translation; - if (node !== undefined) { - if (node.isCluster === true) { - alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); - } else { - // create a node the temporary line can look at - var targetNode = this._getNewTargetNode(node.x, node.y); - this.body.nodes[targetNode.id] = targetNode; - this.body.nodeIndices.push(targetNode.id); + var scaleFrac = scale / scaleOld; + var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac; + var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac; - // create a temporary edge - var connectionEdge = this.body.functions.createEdge({ - id: 'connectionEdge' + util.randomUUID(), - from: node.id, - to: targetNode.id, - physics: false, - smooth: { - enabled: true, - type: 'continuous', - roundness: 0.5 - } - }); - this.body.edges[connectionEdge.id] = connectionEdge; - this.body.edgeIndices.push(connectionEdge.id); + this.body.view.scale = scale; + this.body.view.translation = { x: tx, y: ty }; - this.temporaryIds.nodes.push(targetNode.id); - this.temporaryIds.edges.push(connectionEdge.id); - } + if (preScaleDragPointer != undefined) { + var postScaleDragPointer = this.canvas.canvasToDOM(preScaleDragPointer); + this.drag.pointer.x = postScaleDragPointer.x; + this.drag.pointer.y = postScaleDragPointer.y; + } + + this.body.emitter.emit('_requestRedraw'); + + if (scaleOld < scale) { + this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: pointer }); + } else { + this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: pointer }); } - this.touchTime = new Date().valueOf(); - } - } - }, { - key: '_dragControlNode', - value: function _dragControlNode(event) { - var pointer = this.body.functions.getPointer(event.center); - if (this.temporaryIds.nodes[0] !== undefined) { - var targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode. - targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x); - targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y); - this.body.emitter.emit('_redraw'); - } else { - var diffX = pointer.x - this.lastTouch.x; - var diffY = pointer.y - this.lastTouch.y; - this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY }; } } /** - * Connect the new edge to the target if one exists, otherwise remove temp line - * @param event + * Event handler for mouse wheel event, used to zoom the timeline + * See http://adomas.org/javascript-mouse-wheel/ + * https://github.com/EightMedia/hammer.js/issues/256 + * @param {MouseEvent} event * @private */ }, { - key: '_finishConnect', - value: function _finishConnect(event) { - var pointer = this.body.functions.getPointer(event.center); - var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); - - // remember the edge id - var connectFromId = undefined; - if (this.temporaryIds.edges[0] !== undefined) { - connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId; - } - - // get the overlapping node but NOT the temporary node; - var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj); - var node = undefined; - for (var i = overlappingNodeIds.length - 1; i >= 0; i--) { - // if the node id is NOT a temporary node, accept the node. - if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) { - node = this.body.nodes[overlappingNodeIds[i]]; - break; + key: 'onMouseWheel', + value: function onMouseWheel(event) { + if (this.options.zoomView === true) { + // 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; } - } - // clean temporary nodes and edges. - this._cleanupTemporaryNodesAndEdges(); + // 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 !== 0) { - // perform the connection - if (node !== undefined) { - if (node.isCluster === true) { - alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); - } else { - if (this.body.nodes[connectFromId] !== undefined && this.body.nodes[node.id] !== undefined) { - this._performAddEdge(connectFromId, node.id); + // calculate the new scale + var scale = this.body.view.scale; + var zoom = delta / 10; + if (delta < 0) { + zoom = zoom / (1 - zoom); } - } - } - this.body.emitter.emit('_redraw'); - } + scale *= 1 + zoom; - // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------// + // calculate the pointer location + var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); + // apply the new scale + this.zoom(scale, pointer); + } - // ------------------------------ Performing all the actual data manipulation ------------------------// + // Prevent default actions caused by mouse wheel. + event.preventDefault(); + } + } /** - * Adds a node on the specified location + * Mouse move handler for checking whether the title moves over a node with a title. + * @param {Event} event + * @private */ }, { - key: '_performAddNode', - value: function _performAddNode(clickData) { - var _this4 = this; + key: 'onMouseMove', + value: function onMouseMove(event) { + var _this3 = this; - var defaultData = { - id: util.randomUUID(), - x: clickData.pointer.canvas.x, - y: clickData.pointer.canvas.y, - label: 'new' - }; + var pointer = this.getPointer({ x: event.clientX, y: event.clientY }); + var popupVisible = false; - if (typeof this.options.addNode === 'function') { - if (this.options.addNode.length === 2) { - this.options.addNode(defaultData, function (finalizedData) { - if (finalizedData !== null && finalizedData !== undefined && _this4.inMode === 'addNode') { - // if for whatever reason the mode has changes (due to dataset change) disregard the callback - _this4.body.data.nodes.getDataSet().add(finalizedData); - _this4.showManipulatorToolbar(); - } - }); - } else { - throw new Error('The function for add does not support two arguments (data,callback)'); - this.showManipulatorToolbar(); + // check if the previously selected node is still selected + if (this.popup !== undefined) { + if (this.popup.hidden === false) { + this._checkHidePopup(pointer); + } + + // if the popup was not hidden above + if (this.popup.hidden === false) { + popupVisible = true; + this.popup.setPosition(pointer.x + 3, pointer.y - 5); + this.popup.show(); } - } else { - this.body.data.nodes.getDataSet().add(defaultData); - this.showManipulatorToolbar(); } - } - /** - * connect two nodes with a new edge. - * - * @private - */ + // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over. + if (this.options.keyboard.bindToWindow === false && this.options.keyboard.enabled === true) { + this.canvas.frame.focus(); + } - }, { - key: '_performAddEdge', - value: function _performAddEdge(sourceNodeId, targetNodeId) { - var _this5 = this; + // start a timeout that will check if the mouse is positioned above an element + if (popupVisible === false) { + if (this.popupTimer !== undefined) { + clearInterval(this.popupTimer); // stop any running calculationTimer + this.popupTimer = undefined; + } + if (!this.drag.dragging) { + this.popupTimer = setTimeout(function () { + return _this3._checkShowPopup(pointer); + }, this.options.tooltipDelay); + } + } - var defaultData = { from: sourceNodeId, to: targetNodeId }; - if (typeof this.options.addEdge === 'function') { - if (this.options.addEdge.length === 2) { - this.options.addEdge(defaultData, function (finalizedData) { - if (finalizedData !== null && finalizedData !== undefined && _this5.inMode === 'addEdge') { - // if for whatever reason the mode has changes (due to dataset change) disregard the callback - _this5.body.data.edges.getDataSet().add(finalizedData); - _this5.selectionHandler.unselectAll(); - _this5.showManipulatorToolbar(); - } - }); - } else { - throw new Error('The function for connect does not support two arguments (data,callback)'); + /** + * Adding hover highlights + */ + if (this.options.hover === true) { + // adding hover highlights + var obj = this.selectionHandler.getNodeAt(pointer); + if (obj === undefined) { + obj = this.selectionHandler.getEdgeAt(pointer); } - } else { - this.body.data.edges.getDataSet().add(defaultData); - this.selectionHandler.unselectAll(); - this.showManipulatorToolbar(); + this.selectionHandler.hoverObject(obj); } } /** - * connect two nodes with a new edge. + * Check if there is an element on the given position in the network + * (a node or edge). If so, and if this element has a title, + * show a popup window with its title. * + * @param {{x:Number, y:Number}} pointer * @private */ }, { - key: '_performEditEdge', - value: function _performEditEdge(sourceNodeId, targetNodeId) { - var _this6 = this; + key: '_checkShowPopup', + value: function _checkShowPopup(pointer) { + var x = this.canvas._XconvertDOMtoCanvas(pointer.x); + var y = this.canvas._YconvertDOMtoCanvas(pointer.y); + var pointerObj = { + left: x, + top: y, + right: x, + bottom: y + }; - var defaultData = { id: this.edgeBeingEditedId, from: sourceNodeId, to: targetNodeId, label: this.body.data.edges._data[this.edgeBeingEditedId].label }; - var eeFunct = this.options.editEdge; - if ((typeof eeFunct === 'undefined' ? 'undefined' : (0, _typeof3['default'])(eeFunct)) === 'object') { - eeFunct = eeFunct.editWithoutDrag; - } - if (typeof eeFunct === 'function') { - if (eeFunct.length === 2) { - eeFunct(defaultData, function (finalizedData) { - if (finalizedData === null || finalizedData === undefined || _this6.inMode !== 'editEdge') { - // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { - _this6.body.edges[defaultData.id].updateEdgeType(); - _this6.body.emitter.emit('_redraw'); - _this6.showManipulatorToolbar(); - } else { - _this6.body.data.edges.getDataSet().update(finalizedData); - _this6.selectionHandler.unselectAll(); - _this6.showManipulatorToolbar(); - } - }); - } else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - } + var previousPopupObjId = this.popupObj === undefined ? undefined : this.popupObj.id; + var nodeUnderCursor = false; + var popupType = 'node'; + + // check if a node is under the cursor. + if (this.popupObj === undefined) { + // search the nodes for overlap, select the top one in case of multiple nodes + var nodeIndices = this.body.nodeIndices; + var nodes = this.body.nodes; + var node = void 0; + var overlappingNodes = []; + for (var i = 0; i < nodeIndices.length; i++) { + node = nodes[nodeIndices[i]]; + if (node.isOverlappingWith(pointerObj) === true) { + if (node.getTitle() !== undefined) { + overlappingNodes.push(nodeIndices[i]); + } + } + } + + if (overlappingNodes.length > 0) { + // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others + this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]]; + // if you hover over a node, the title of the edge is not supposed to be shown. + nodeUnderCursor = true; + } + } + + if (this.popupObj === undefined && nodeUnderCursor === false) { + // search the edges for overlap + var edgeIndices = this.body.edgeIndices; + var edges = this.body.edges; + var edge = void 0; + var overlappingEdges = []; + for (var _i4 = 0; _i4 < edgeIndices.length; _i4++) { + edge = edges[edgeIndices[_i4]]; + if (edge.isOverlappingWith(pointerObj) === true) { + if (edge.connected === true && edge.getTitle() !== undefined) { + overlappingEdges.push(edgeIndices[_i4]); + } + } + } + + if (overlappingEdges.length > 0) { + this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]]; + popupType = 'edge'; + } + } + + if (this.popupObj !== undefined) { + // show popup message window + if (this.popupObj.id !== previousPopupObjId) { + if (this.popup === undefined) { + this.popup = new Popup(this.canvas.frame); + } + + this.popup.popupTargetType = popupType; + this.popup.popupTargetId = this.popupObj.id; + + // adjust a small offset such that the mouse cursor is located in the + // bottom left location of the popup, and you can easily move over the + // popup area + this.popup.setPosition(pointer.x + 3, pointer.y - 5); + this.popup.setText(this.popupObj.getTitle()); + this.popup.show(); + this.body.emitter.emit('showPopup', this.popupObj.id); + } } else { - this.body.data.edges.getDataSet().update(defaultData); - this.selectionHandler.unselectAll(); - this.showManipulatorToolbar(); + if (this.popup !== undefined) { + this.popup.hide(); + this.body.emitter.emit('hidePopup'); + } + } + } + + /** + * Check if the popup must be hidden, which is the case when the mouse is no + * longer hovering on the object + * @param {{x:Number, y:Number}} pointer + * @private + */ + + }, { + key: '_checkHidePopup', + value: function _checkHidePopup(pointer) { + var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); + + var stillOnObj = false; + if (this.popup.popupTargetType === 'node') { + if (this.body.nodes[this.popup.popupTargetId] !== undefined) { + stillOnObj = this.body.nodes[this.popup.popupTargetId].isOverlappingWith(pointerObj); + + // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it. + // we initially only check stillOnObj because this is much faster. + if (stillOnObj === true) { + var overNode = this.selectionHandler.getNodeAt(pointer); + stillOnObj = overNode === undefined ? false : overNode.id === this.popup.popupTargetId; + } + } + } else { + if (this.selectionHandler.getNodeAt(pointer) === undefined) { + if (this.body.edges[this.popup.popupTargetId] !== undefined) { + stillOnObj = this.body.edges[this.popup.popupTargetId].isOverlappingWith(pointerObj); + } + } + } + + if (stillOnObj === false) { + this.popupObj = undefined; + this.popup.hide(); + this.body.emitter.emit('hidePopup'); } } }]); - return ManipulationSystem; + return InteractionHandler; }(); - exports['default'] = ManipulationSystem; + exports['default'] = InteractionHandler; -/***/ }, -/* 224 */ -/***/ function(module, exports) { +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - /** - * This object contains all possible options. It will check if the types are correct, if required if the option is one - * of the allowed values. - * - * __any__ means that the name of the property does not matter. - * __type__ is a required field for all objects and contains the allowed types of all objects - */ - var string = 'string'; - var bool = 'boolean'; - var number = 'number'; - var array = 'array'; - var object = 'object'; // should only be in a __type__ property - var dom = 'dom'; - var any = 'any'; - var allOptions = { - configure: { - enabled: { boolean: bool }, - filter: { boolean: bool, string: string, array: array, 'function': 'function' }, - container: { dom: dom }, - showButton: { boolean: bool }, - __type__: { object: object, boolean: bool, string: string, array: array, 'function': 'function' } - }, - edges: { - arrows: { - to: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, - middle: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, - from: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, - __type__: { string: ['from', 'to', 'middle'], object: object } - }, - arrowStrikethrough: { boolean: bool }, - chosen: { - label: { boolean: bool, 'function': 'function' }, - edge: { boolean: bool, 'function': 'function' }, - __type__: { object: object, boolean: bool } - }, - color: { - color: { string: string }, - highlight: { string: string }, - hover: { string: string }, - inherit: { string: ['from', 'to', 'both'], boolean: bool }, - opacity: { number: number }, - __type__: { object: object, string: string } - }, - dashes: { boolean: bool, array: array }, - font: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - background: { string: string }, - strokeWidth: { number: number }, // px - strokeColor: { string: string }, - align: { string: ['horizontal', 'top', 'middle', 'bottom'] }, - vadjust: { number: number }, - multi: { boolean: bool, string: string }, - bold: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - boldital: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - ital: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - mono: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - __type__: { object: object, string: string } - }, - hidden: { boolean: bool }, - hoverWidth: { 'function': 'function', number: number }, - label: { string: string, 'undefined': 'undefined' }, - labelHighlightBold: { boolean: bool }, - length: { number: number, 'undefined': 'undefined' }, - physics: { boolean: bool }, - scaling: { - min: { number: number }, - max: { number: number }, - label: { - enabled: { boolean: bool }, - min: { number: number }, - max: { number: number }, - maxVisible: { number: number }, - drawThreshold: { number: number }, - __type__: { object: object, boolean: bool } - }, - customScalingFunction: { 'function': 'function' }, - __type__: { object: object } - }, - selectionWidth: { 'function': 'function', number: number }, - selfReferenceSize: { number: number }, - shadow: { - enabled: { boolean: bool }, - color: { string: string }, - size: { number: number }, - x: { number: number }, - y: { number: number }, - __type__: { object: object, boolean: bool } - }, - smooth: { - enabled: { boolean: bool }, - type: { string: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'] }, - roundness: { number: number }, - forceDirection: { string: ['horizontal', 'vertical', 'none'], boolean: bool }, - __type__: { object: object, boolean: bool } - }, - title: { string: string, 'undefined': 'undefined' }, - width: { number: number }, - widthConstraint: { - maximum: { number: number }, - __type__: { object: object, boolean: bool, number: number } - }, - value: { number: number, 'undefined': 'undefined' }, - __type__: { object: object } - }, - groups: { - useDefaultGroups: { boolean: bool }, - __any__: 'get from nodes, will be overwritten below', - __type__: { object: object } - }, - interaction: { - dragNodes: { boolean: bool }, - dragView: { boolean: bool }, - hideEdgesOnDrag: { boolean: bool }, - hideNodesOnDrag: { boolean: bool }, - hover: { boolean: bool }, - keyboard: { - enabled: { boolean: bool }, - speed: { x: { number: number }, y: { number: number }, zoom: { number: number }, __type__: { object: object } }, - bindToWindow: { boolean: bool }, - __type__: { object: object, boolean: bool } - }, - multiselect: { boolean: bool }, - navigationButtons: { boolean: bool }, - selectable: { boolean: bool }, - selectConnectedEdges: { boolean: bool }, - hoverConnectedEdges: { boolean: bool }, - tooltipDelay: { number: number }, - zoomView: { boolean: bool }, - __type__: { object: object } - }, - layout: { - randomSeed: { 'undefined': 'undefined', number: number }, - improvedLayout: { boolean: bool }, - hierarchical: { - enabled: { boolean: bool }, - levelSeparation: { number: number }, - nodeSpacing: { number: number }, - treeSpacing: { number: number }, - blockShifting: { boolean: bool }, - edgeMinimization: { boolean: bool }, - parentCentralization: { boolean: bool }, - direction: { string: ['UD', 'DU', 'LR', 'RL'] }, // UD, DU, LR, RL - sortMethod: { string: ['hubsize', 'directed'] }, // hubsize, directed - __type__: { object: object, boolean: bool } - }, - __type__: { object: object } - }, - manipulation: { - enabled: { boolean: bool }, - initiallyActive: { boolean: bool }, - addNode: { boolean: bool, 'function': 'function' }, - addEdge: { boolean: bool, 'function': 'function' }, - editNode: { 'function': 'function' }, - editEdge: { - editWithoutDrag: { 'function': 'function' }, - __type__: { object: object, boolean: bool, 'function': 'function' } - }, - deleteNode: { boolean: bool, 'function': 'function' }, - deleteEdge: { boolean: bool, 'function': 'function' }, - controlNodeStyle: 'get from nodes, will be overwritten below', - __type__: { object: object, boolean: bool } - }, - nodes: { - borderWidth: { number: number }, - borderWidthSelected: { number: number, 'undefined': 'undefined' }, - brokenImage: { string: string, 'undefined': 'undefined' }, - chosen: { - label: { boolean: bool, 'function': 'function' }, - node: { boolean: bool, 'function': 'function' }, - __type__: { object: object, boolean: bool } - }, - color: { - border: { string: string }, - background: { string: string }, - highlight: { - border: { string: string }, - background: { string: string }, - __type__: { object: object, string: string } - }, - hover: { - border: { string: string }, - background: { string: string }, - __type__: { object: object, string: string } - }, - __type__: { object: object, string: string } - }, - fixed: { - x: { boolean: bool }, - y: { boolean: bool }, - __type__: { object: object, boolean: bool } - }, - font: { - align: { string: string }, - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - background: { string: string }, - strokeWidth: { number: number }, // px - strokeColor: { string: string }, - vadjust: { number: number }, - multi: { boolean: bool, string: string }, - bold: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - boldital: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - ital: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - mono: { - color: { string: string }, - size: { number: number }, // px - face: { string: string }, - mod: { string: string }, - vadjust: { number: number }, - __type__: { object: object, string: string } - }, - __type__: { object: object, string: string } - }, - group: { string: string, number: number, 'undefined': 'undefined' }, - heightConstraint: { - minimum: { number: number }, - valign: { string: string }, - __type__: { object: object, boolean: bool, number: number } - }, - hidden: { boolean: bool }, - icon: { - face: { string: string }, - code: { string: string }, //'\uf007', - size: { number: number }, //50, - color: { string: string }, - __type__: { object: object } - }, - id: { string: string, number: number }, - image: { - selected: { string: string, 'undefined': 'undefined' }, // --> URL - unselected: { string: string, 'undefined': 'undefined' }, // --> URL - __type__: { object: object, string: string } - }, - label: { string: string, 'undefined': 'undefined' }, - labelHighlightBold: { boolean: bool }, - level: { number: number, 'undefined': 'undefined' }, - margin: { - top: { number: number }, - right: { number: number }, - bottom: { number: number }, - left: { number: number }, - __type__: { object: object, number: number } - }, - mass: { number: number }, - physics: { boolean: bool }, - scaling: { - min: { number: number }, - max: { number: number }, - label: { - enabled: { boolean: bool }, - min: { number: number }, - max: { number: number }, - maxVisible: { number: number }, - drawThreshold: { number: number }, - __type__: { object: object, boolean: bool } - }, - customScalingFunction: { 'function': 'function' }, - __type__: { object: object } - }, - shadow: { - enabled: { boolean: bool }, - color: { string: string }, - size: { number: number }, - x: { number: number }, - y: { number: number }, - __type__: { object: object, boolean: bool } - }, - shape: { string: ['ellipse', 'circle', 'database', 'box', 'text', 'image', 'circularImage', 'diamond', 'dot', 'star', 'triangle', 'triangleDown', 'square', 'icon'] }, - shapeProperties: { - borderDashes: { boolean: bool, array: array }, - borderRadius: { number: number }, - interpolation: { boolean: bool }, - useImageSize: { boolean: bool }, - useBorderWithImage: { boolean: bool }, - __type__: { object: object } - }, - size: { number: number }, - title: { string: string, 'undefined': 'undefined' }, - value: { number: number, 'undefined': 'undefined' }, - widthConstraint: { - minimum: { number: number }, - maximum: { number: number }, - __type__: { object: object, boolean: bool, number: number } - }, - x: { number: number }, - y: { number: number }, - __type__: { object: object } - }, - physics: { - enabled: { boolean: bool }, - barnesHut: { - gravitationalConstant: { number: number }, - centralGravity: { number: number }, - springLength: { number: number }, - springConstant: { number: number }, - damping: { number: number }, - avoidOverlap: { number: number }, - __type__: { object: object } - }, - forceAtlas2Based: { - gravitationalConstant: { number: number }, - centralGravity: { number: number }, - springLength: { number: number }, - springConstant: { number: number }, - damping: { number: number }, - avoidOverlap: { number: number }, - __type__: { object: object } - }, - repulsion: { - centralGravity: { number: number }, - springLength: { number: number }, - springConstant: { number: number }, - nodeDistance: { number: number }, - damping: { number: number }, - __type__: { object: object } - }, - hierarchicalRepulsion: { - centralGravity: { number: number }, - springLength: { number: number }, - springConstant: { number: number }, - nodeDistance: { number: number }, - damping: { number: number }, - __type__: { object: object } - }, - maxVelocity: { number: number }, - minVelocity: { number: number }, // px/s - solver: { string: ['barnesHut', 'repulsion', 'hierarchicalRepulsion', 'forceAtlas2Based'] }, - stabilization: { - enabled: { boolean: bool }, - iterations: { number: number }, // maximum number of iteration to stabilize - updateInterval: { number: number }, - onlyDynamicEdges: { boolean: bool }, - fit: { boolean: bool }, - __type__: { object: object, boolean: bool } - }, - timestep: { number: number }, - adaptiveTimestep: { boolean: bool }, - __type__: { object: object, boolean: bool } - }, - - //globals : - autoResize: { boolean: bool }, - clickToUse: { boolean: bool }, - locale: { string: string }, - locales: { - __any__: { any: any }, - __type__: { object: object } - }, - height: { string: string }, - width: { string: string }, - __type__: { object: object } - }; - - allOptions.groups.__any__ = allOptions.nodes; - allOptions.manipulation.controlNodeStyle = allOptions.nodes; - - var configureOptions = { - 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: false, - y: false - }, - font: { - color: ['color', '#343434'], - size: [14, 0, 100, 1], // px - face: ['arial', 'verdana', 'tahoma'], - background: ['color', 'none'], - strokeWidth: [0, 0, 50, 1], // px - strokeColor: ['color', '#ffffff'] - }, - //group: 'string', - hidden: false, - labelHighlightBold: true, - //icon: { - // face: 'string', //'FontAwesome', - // code: 'string', //'\uf007', - // size: [50, 0, 200, 1], //50, - // color: ['color','#2B7CE9'] //'#aa00ff' - //}, - //image: 'string', // --> URL - physics: true, - scaling: { - min: [10, 0, 200, 1], - max: [30, 0, 200, 1], - label: { - enabled: false, - min: [14, 0, 200, 1], - max: [30, 0, 200, 1], - maxVisible: [30, 0, 200, 1], - drawThreshold: [5, 0, 20, 1] - } - }, - shadow: { - enabled: false, - color: 'rgba(0,0,0,0.5)', - size: [10, 0, 20, 1], - x: [5, -30, 30, 1], - y: [5, -30, 30, 1] - }, - shape: ['ellipse', 'box', 'circle', 'database', 'diamond', 'dot', 'square', 'star', 'text', 'triangle', 'triangleDown'], - shapeProperties: { - borderDashes: false, - borderRadius: [6, 0, 20, 1], - interpolation: true, - useImageSize: false - }, - size: [25, 0, 200, 1] - }, - edges: { - arrows: { - to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }, - middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }, - from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' } - }, - arrowStrikethrough: true, - color: { - color: ['color', '#848484'], - highlight: ['color', '#848484'], - hover: ['color', '#848484'], - inherit: ['from', 'to', 'both', true, false], - opacity: [1, 0, 1, 0.05] - }, - dashes: false, - font: { - color: ['color', '#343434'], - size: [14, 0, 100, 1], // px - face: ['arial', 'verdana', 'tahoma'], - background: ['color', 'none'], - strokeWidth: [2, 0, 50, 1], // px - strokeColor: ['color', '#ffffff'], - align: ['horizontal', 'top', 'middle', 'bottom'] - }, - hidden: false, - hoverWidth: [1.5, 0, 5, 0.1], - labelHighlightBold: true, - physics: true, - scaling: { - min: [1, 0, 100, 1], - max: [15, 0, 100, 1], - label: { - enabled: true, - 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, 0.1], - selfReferenceSize: [20, 0, 200, 1], - shadow: { - enabled: false, - color: 'rgba(0,0,0,0.5)', - size: [10, 0, 20, 1], - x: [5, -30, 30, 1], - y: [5, -30, 30, 1] - }, - smooth: { - enabled: true, - type: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'], - forceDirection: ['horizontal', 'vertical', 'none'], - roundness: [0.5, 0, 1, 0.05] - }, - width: [1, 0, 30, 1] - }, - layout: { - //randomSeed: [0, 0, 500, 1], - //improvedLayout: true, - hierarchical: { - enabled: false, - levelSeparation: [150, 20, 500, 5], - nodeSpacing: [100, 20, 500, 5], - treeSpacing: [200, 20, 500, 5], - blockShifting: true, - edgeMinimization: true, - parentCentralization: true, - direction: ['UD', 'DU', 'LR', 'RL'], // UD, DU, LR, RL - sortMethod: ['hubsize', 'directed'] // hubsize, directed - } - }, - interaction: { - dragNodes: true, - dragView: true, - hideEdgesOnDrag: false, - hideNodesOnDrag: false, - hover: false, - keyboard: { - enabled: false, - speed: { x: [10, 0, 40, 1], y: [10, 0, 40, 1], zoom: [0.02, 0, 0.1, 0.005] }, - bindToWindow: true - }, - multiselect: false, - navigationButtons: false, - selectable: true, - selectConnectedEdges: true, - hoverConnectedEdges: true, - tooltipDelay: [300, 0, 1000, 25], - zoomView: true - }, - manipulation: { - enabled: false, - initiallyActive: false - }, - physics: { - enabled: true, - barnesHut: { - //theta: [0.5, 0.1, 1, 0.05], - gravitationalConstant: [-2000, -30000, 0, 50], - centralGravity: [0.3, 0, 10, 0.05], - springLength: [95, 0, 500, 5], - springConstant: [0.04, 0, 1.2, 0.005], - damping: [0.09, 0, 1, 0.01], - avoidOverlap: [0, 0, 1, 0.01] - }, - forceAtlas2Based: { - //theta: [0.5, 0.1, 1, 0.05], - gravitationalConstant: [-50, -500, 0, 1], - centralGravity: [0.01, 0, 1, 0.005], - springLength: [95, 0, 500, 5], - springConstant: [0.08, 0, 1.2, 0.005], - damping: [0.4, 0, 1, 0.01], - avoidOverlap: [0, 0, 1, 0.01] - }, - repulsion: { - centralGravity: [0.2, 0, 10, 0.05], - springLength: [200, 0, 500, 5], - springConstant: [0.05, 0, 1.2, 0.005], - nodeDistance: [100, 0, 500, 5], - damping: [0.09, 0, 1, 0.01] - }, - hierarchicalRepulsion: { - centralGravity: [0.2, 0, 10, 0.05], - springLength: [100, 0, 500, 5], - springConstant: [0.01, 0, 1.2, 0.005], - nodeDistance: [120, 0, 500, 5], - damping: [0.09, 0, 1, 0.01] - }, - maxVelocity: [50, 0, 150, 1], - minVelocity: [0.1, 0.01, 0.5, 0.01], - solver: ['barnesHut', 'forceAtlas2Based', 'repulsion', 'hierarchicalRepulsion'], - timestep: [0.5, 0.01, 1, 0.01] - } - }; - - exports.allOptions = allOptions; - exports.configureOptions = configureOptions; - -/***/ }, -/* 225 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _slicedToArray2 = __webpack_require__(165); - - var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - var _FloydWarshall = __webpack_require__(226); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _FloydWarshall2 = _interopRequireDefault(_FloydWarshall); + var util = __webpack_require__(1); + var Hammer = __webpack_require__(112); + var hammerUtil = __webpack_require__(119); + var keycharm = __webpack_require__(115); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + var NavigationHandler = function () { + function NavigationHandler(body, canvas) { + var _this = this; - /** - * 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) { - (0, _classCallCheck3["default"])(this, KamadaKawai); + (0, _classCallCheck3['default'])(this, NavigationHandler); this.body = body; - this.springLength = edgeLength; - this.springConstant = edgeStrength; - this.distanceSolver = new _FloydWarshall2["default"](); - } + this.canvas = canvas; - /** - * Not sure if needed but can be used to update the spring length and spring constant - * @param options - */ + this.iconsCreated = false; + this.navigationHammers = []; + this.boundFunctions = {}; + this.touchTime = 0; + this.activated = false; + + this.body.emitter.on("activate", function () { + _this.activated = true;_this.configureKeyboardBindings(); + }); + this.body.emitter.on("deactivate", function () { + _this.activated = false;_this.configureKeyboardBindings(); + }); + this.body.emitter.on("destroy", function () { + if (_this.keycharm !== undefined) { + _this.keycharm.destroy(); + } + }); + this.options = {}; + } - (0, _createClass3["default"])(KamadaKawai, [{ - key: "setOptions", + (0, _createClass3['default'])(NavigationHandler, [{ + key: 'setOptions', value: function setOptions(options) { - if (options) { - if (options.springLength) { - this.springLength = options.springLength; + if (options !== undefined) { + this.options = options; + this.create(); + } + } + }, { + key: 'create', + value: function create() { + if (this.options.navigationButtons === true) { + if (this.iconsCreated === false) { + this.loadNavigationElements(); } - if (options.springConstant) { - this.springConstant = options.springConstant; + } else if (this.iconsCreated === true) { + this.cleanNavigation(); + } + + this.configureKeyboardBindings(); + } + }, { + key: 'cleanNavigation', + value: function cleanNavigation() { + // clean hammer bindings + if (this.navigationHammers.length != 0) { + for (var i = 0; i < this.navigationHammers.length; i++) { + this.navigationHammers[i].destroy(); } + this.navigationHammers = []; } + + // clean up previous navigation items + if (this.navigationDOM && this.navigationDOM['wrapper'] && this.navigationDOM['wrapper'].parentNode) { + this.navigationDOM['wrapper'].parentNode.removeChild(this.navigationDOM['wrapper']); + } + + this.iconsCreated = false; } /** - * Position the system - * @param nodesArray - * @param edgesArray + * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation + * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent + * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. + * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. + * + * @private */ }, { - key: "solve", - value: function solve(nodesArray, edgesArray) { - var ignoreClusters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - // 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; + key: 'loadNavigationElements', + value: function loadNavigationElements() { + var _this2 = this; - while (maxEnergy > threshold && iterations < maxIterations) { - iterations += 1; + this.cleanNavigation(); - var _getHighestEnergyNode2 = this._getHighestEnergyNode(ignoreClusters); + this.navigationDOM = {}; + var navigationDivs = ['up', 'down', 'left', 'right', 'zoomIn', 'zoomOut', 'zoomExtends']; + var navigationDivActions = ['_moveUp', '_moveDown', '_moveLeft', '_moveRight', '_zoomIn', '_zoomOut', '_fit']; - var _getHighestEnergyNode3 = (0, _slicedToArray3["default"])(_getHighestEnergyNode2, 4); + this.navigationDOM['wrapper'] = document.createElement('div'); + this.navigationDOM['wrapper'].className = 'vis-navigation'; + this.canvas.frame.appendChild(this.navigationDOM['wrapper']); - highE_nodeId = _getHighestEnergyNode3[0]; - maxEnergy = _getHighestEnergyNode3[1]; - dE_dx = _getHighestEnergyNode3[2]; - dE_dy = _getHighestEnergyNode3[3]; + for (var i = 0; i < navigationDivs.length; i++) { + this.navigationDOM[navigationDivs[i]] = document.createElement('div'); + this.navigationDOM[navigationDivs[i]].className = 'vis-button vis-' + navigationDivs[i]; + this.navigationDOM['wrapper'].appendChild(this.navigationDOM[navigationDivs[i]]); - delta_m = maxEnergy; - subIterations = 0; - while (delta_m > innerThreshold && subIterations < maxInnerIterations) { - subIterations += 1; - this._moveNode(highE_nodeId, dE_dx, dE_dy); + var hammer = new Hammer(this.navigationDOM[navigationDivs[i]]); + if (navigationDivActions[i] === "_fit") { + hammerUtil.onTouch(hammer, this._fit.bind(this)); + } else { + hammerUtil.onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i])); + } - var _getEnergy2 = this._getEnergy(highE_nodeId); + this.navigationHammers.push(hammer); + } - var _getEnergy3 = (0, _slicedToArray3["default"])(_getEnergy2, 3); + // use a hammer for the release so we do not require the one used in the rest of the network + // the one the rest uses can be overloaded by the manipulation system. + var hammerFrame = new Hammer(this.canvas.frame); + hammerUtil.onRelease(hammerFrame, function () { + _this2._stopMovement(); + }); + this.navigationHammers.push(hammerFrame); - delta_m = _getEnergy3[0]; - dE_dx = _getEnergy3[1]; - dE_dy = _getEnergy3[2]; - } + this.iconsCreated = true; + } + }, { + key: 'bindToRedraw', + value: function bindToRedraw(action) { + if (this.boundFunctions[action] === undefined) { + this.boundFunctions[action] = this[action].bind(this); + this.body.emitter.on("initRedraw", this.boundFunctions[action]); + this.body.emitter.emit("_startRendering"); } } - - /** - * get the node with the highest energy - * @returns {*[]} - * @private - */ - }, { - key: "_getHighestEnergyNode", - 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 _getEnergy4 = this._getEnergy(m), - _getEnergy5 = (0, _slicedToArray3["default"])(_getEnergy4, 3), - delta_m = _getEnergy5[0], - dE_dx = _getEnergy5[1], - dE_dy = _getEnergy5[2]; - - if (maxEnergy < delta_m) { - maxEnergy = delta_m; - maxEnergyNodeId = m; - dE_dx_max = dE_dx; - dE_dy_max = dE_dy; - } - } + key: 'unbindFromRedraw', + value: function unbindFromRedraw(action) { + if (this.boundFunctions[action] !== undefined) { + this.body.emitter.off("initRedraw", this.boundFunctions[action]); + this.body.emitter.emit("_stopRendering"); + delete this.boundFunctions[action]; } - - return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max]; } /** - * calculate the energy of a single node - * @param m - * @returns {*[]} + * this stops all movement induced by the navigation buttons + * * @private */ }, { - key: "_getEnergy", - 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); - } + key: '_fit', + value: function _fit() { + if (new Date().valueOf() - this.touchTime > 700) { + // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?) + this.body.emitter.emit("fit", { duration: 700 }); + this.touchTime = new Date().valueOf(); } - - var delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2)); - return [delta_m, dE_dx, dE_dy]; } /** - * 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 + * this stops all movement induced by the navigation buttons + * * @private */ }, { - key: "_moveNode", - 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); + key: '_stopMovement', + value: function _stopMovement() { + for (var boundAction in this.boundFunctions) { + if (this.boundFunctions.hasOwnProperty(boundAction)) { + this.body.emitter.off("initRedraw", this.boundFunctions[boundAction]); + this.body.emitter.emit("_stopRendering"); } } - // 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; + this.boundFunctions = {}; + } + }, { + key: '_moveUp', + value: function _moveUp() { + this.body.view.translation.y += this.options.keyboard.speed.y; + } + }, { + key: '_moveDown', + value: function _moveDown() { + this.body.view.translation.y -= this.options.keyboard.speed.y; + } + }, { + key: '_moveLeft', + value: function _moveLeft() { + this.body.view.translation.x += this.options.keyboard.speed.x; + } + }, { + key: '_moveRight', + value: function _moveRight() { + this.body.view.translation.x -= this.options.keyboard.speed.x; + } + }, { + key: '_zoomIn', + value: function _zoomIn() { + var scaleOld = this.body.view.scale; + var scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom); + var translation = this.body.view.translation; + var scaleFrac = scale / scaleOld; + var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac; + var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac; - // solve the linear system for dx and dy - var dy = (C / A + E / B) / (B / A - D / B); - var dx = -(B * dy + C) / A; + this.body.view.scale = scale; + this.body.view.translation = { x: tx, y: ty }; + this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: null }); + } + }, { + key: '_zoomOut', + value: function _zoomOut() { + var scaleOld = this.body.view.scale; + var scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom); + var translation = this.body.view.translation; + var scaleFrac = scale / scaleOld; + var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac; + var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac; - // move the node - nodes[m].x += dx; - nodes[m].y += dy; + this.body.view.scale = scale; + this.body.view.translation = { x: tx, y: ty }; + this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: null }); } /** - * Create the L matrix: edge length times shortest path - * @param D_matrix - * @private + * bind all keys using keycharm. */ }, { - key: "_createL_matrix", - value: function _createL_matrix(D_matrix) { - var nodesArray = this.body.nodeIndices; - var edgeLength = this.springLength; + key: 'configureKeyboardBindings', + value: function configureKeyboardBindings() { + var _this3 = this; - 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]]; - } + if (this.keycharm !== undefined) { + this.keycharm.destroy(); } - } - /** - * Create the K matrix: spring constants times shortest path - * @param D_matrix - * @private - */ + if (this.options.keyboard.enabled === true) { + if (this.options.keyboard.bindToWindow === true) { + this.keycharm = keycharm({ container: window, preventDefault: true }); + } else { + this.keycharm = keycharm({ container: this.canvas.frame, preventDefault: true }); + } - }, { - key: "_createK_matrix", - value: function _createK_matrix(D_matrix) { - var nodesArray = this.body.nodeIndices; - var edgeStrength = this.springConstant; + this.keycharm.reset(); - 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); + if (this.activated === true) { + this.keycharm.bind("up", function () { + _this3.bindToRedraw("_moveUp"); + }, "keydown"); + this.keycharm.bind("down", function () { + _this3.bindToRedraw("_moveDown"); + }, "keydown"); + this.keycharm.bind("left", function () { + _this3.bindToRedraw("_moveLeft"); + }, "keydown"); + this.keycharm.bind("right", function () { + _this3.bindToRedraw("_moveRight"); + }, "keydown"); + this.keycharm.bind("=", function () { + _this3.bindToRedraw("_zoomIn"); + }, "keydown"); + this.keycharm.bind("num+", function () { + _this3.bindToRedraw("_zoomIn"); + }, "keydown"); + this.keycharm.bind("num-", function () { + _this3.bindToRedraw("_zoomOut"); + }, "keydown"); + this.keycharm.bind("-", function () { + _this3.bindToRedraw("_zoomOut"); + }, "keydown"); + this.keycharm.bind("[", function () { + _this3.bindToRedraw("_zoomOut"); + }, "keydown"); + this.keycharm.bind("]", function () { + _this3.bindToRedraw("_zoomIn"); + }, "keydown"); + this.keycharm.bind("pageup", function () { + _this3.bindToRedraw("_zoomIn"); + }, "keydown"); + this.keycharm.bind("pagedown", function () { + _this3.bindToRedraw("_zoomOut"); + }, "keydown"); + + this.keycharm.bind("up", function () { + _this3.unbindFromRedraw("_moveUp"); + }, "keyup"); + this.keycharm.bind("down", function () { + _this3.unbindFromRedraw("_moveDown"); + }, "keyup"); + this.keycharm.bind("left", function () { + _this3.unbindFromRedraw("_moveLeft"); + }, "keyup"); + this.keycharm.bind("right", function () { + _this3.unbindFromRedraw("_moveRight"); + }, "keyup"); + this.keycharm.bind("=", function () { + _this3.unbindFromRedraw("_zoomIn"); + }, "keyup"); + this.keycharm.bind("num+", function () { + _this3.unbindFromRedraw("_zoomIn"); + }, "keyup"); + this.keycharm.bind("num-", function () { + _this3.unbindFromRedraw("_zoomOut"); + }, "keyup"); + this.keycharm.bind("-", function () { + _this3.unbindFromRedraw("_zoomOut"); + }, "keyup"); + this.keycharm.bind("[", function () { + _this3.unbindFromRedraw("_zoomOut"); + }, "keyup"); + this.keycharm.bind("]", function () { + _this3.unbindFromRedraw("_zoomIn"); + }, "keyup"); + this.keycharm.bind("pageup", function () { + _this3.unbindFromRedraw("_zoomIn"); + }, "keyup"); + this.keycharm.bind("pagedown", function () { + _this3.unbindFromRedraw("_zoomOut"); + }, "keyup"); } } } }]); - return KamadaKawai; - }(); // distance finding algorithm - + return NavigationHandler; + }(); - exports["default"] = KamadaKawai; + exports['default'] = NavigationHandler; -/***/ }, +/***/ }), /* 226 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - var _classCallCheck2 = __webpack_require__(119); + var _classCallCheck2 = __webpack_require__(134); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var _createClass2 = __webpack_require__(120); + var _createClass2 = __webpack_require__(135); var _createClass3 = _interopRequireDefault(_createClass2); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - /** - * Created by Alex on 10-Aug-15. - */ + var Node = __webpack_require__(168)['default']; + var Edge = __webpack_require__(201)['default']; - var FloydWarshall = function () { - function FloydWarshall() { - (0, _classCallCheck3["default"])(this, FloydWarshall); - } + var util = __webpack_require__(1); - (0, _createClass3["default"])(FloydWarshall, [{ - key: "getDistances", - value: function getDistances(body, nodesArray, edgesArray) { - var D_matrix = {}; - var edges = body.edges; + var SelectionHandler = function () { + function SelectionHandler(body, canvas) { + var _this = this; - // 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; - } - } + (0, _classCallCheck3['default'])(this, SelectionHandler); - // put the weights for the edges in. This assumes unidirectionality. - for (var _i = 0; _i < edgesArray.length; _i++) { - var edge = edges[edgesArray[_i]]; - // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix - if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) { - D_matrix[edge.fromId][edge.toId] = 1; - D_matrix[edge.toId][edge.fromId] = 1; - } - } + this.body = body; + this.canvas = canvas; + this.selectionObj = { nodes: [], edges: [] }; + this.hoverObj = { nodes: {}, edges: {} }; - var nodeCount = nodesArray.length; + this.options = {}; + this.defaultOptions = { + multiselect: false, + selectable: true, + selectConnectedEdges: true, + hoverConnectedEdges: true + }; + util.extend(this.options, this.defaultOptions); - // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity. - for (var k = 0; k < nodeCount; k++) { - for (var _i2 = 0; _i2 < nodeCount - 1; _i2++) { - for (var _j = _i2 + 1; _j < nodeCount; _j++) { - D_matrix[nodesArray[_i2]][nodesArray[_j]] = Math.min(D_matrix[nodesArray[_i2]][nodesArray[_j]], D_matrix[nodesArray[_i2]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[_j]]); - D_matrix[nodesArray[_j]][nodesArray[_i2]] = D_matrix[nodesArray[_i2]][nodesArray[_j]]; - } - } - } + this.body.emitter.on("_dataChanged", function () { + _this.updateSelection(); + }); + } - return D_matrix; + (0, _createClass3['default'])(SelectionHandler, [{ + key: 'setOptions', + value: function setOptions(options) { + if (options !== undefined) { + var fields = ['multiselect', 'hoverConnectedEdges', 'selectable', 'selectConnectedEdges']; + util.selectiveDeepExtend(fields, this.options, options); + } } - }]); - return FloydWarshall; - }(); - exports["default"] = FloydWarshall; + /** + * handles the selection part of the tap; + * + * @param {Object} pointer + * @private + */ -/***/ }, -/* 227 */ -/***/ function(module, exports) { + }, { + key: 'selectOnPoint', + value: function selectOnPoint(pointer) { + var selected = false; + if (this.options.selectable === true) { + var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer); - 'use strict'; + // unselect after getting the objects in order to restore width and height. + this.unselectAll(); - /** - * Canvas shapes used by Network - */ - if (typeof CanvasRenderingContext2D !== 'undefined') { + if (obj !== undefined) { + selected = this.selectObject(obj); + } + this.body.emitter.emit("_requestRedraw"); + } + return selected; + } + }, { + key: 'selectAdditionalOnPoint', + value: function selectAdditionalOnPoint(pointer) { + var selectionChanged = false; + if (this.options.selectable === true) { + var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer); - /** - * Draw a circle shape - */ - CanvasRenderingContext2D.prototype.circle = function (x, y, r) { - this.beginPath(); - this.arc(x, y, r, 0, 2 * Math.PI, false); - this.closePath(); - }; + if (obj !== undefined) { + selectionChanged = true; + if (obj.isSelected() === true) { + this.deselectObject(obj); + } else { + this.selectObject(obj); + } - /** - * Draw a square shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r size, width and height of the square - */ - CanvasRenderingContext2D.prototype.square = function (x, y, r) { - this.beginPath(); - this.rect(x - r, y - r, r * 2, r * 2); - this.closePath(); - }; + this.body.emitter.emit("_requestRedraw"); + } + } + return selectionChanged; + } + }, { + key: '_generateClickEvent', + value: function _generateClickEvent(eventType, event, pointer, oldSelection) { + var emptySelection = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - /** - * Draw a triangle shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.triangle = function (x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + var properties = void 0; + if (emptySelection === true) { + properties = { nodes: [], edges: [] }; + } else { + properties = this.getSelection(); + } + properties['pointer'] = { + DOM: { x: pointer.x, y: pointer.y }, + canvas: this.canvas.DOMtoCanvas(pointer) + }; + properties['event'] = event; - // the change in radius and the offset is here to center the shape - r *= 1.15; - y += 0.275 * r; + if (oldSelection !== undefined) { + properties['previousSelection'] = oldSelection; + } + this.body.emitter.emit(eventType, properties); + } + }, { + key: 'selectObject', + value: function selectObject(obj) { + var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.selectConnectedEdges; - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + if (obj !== undefined) { + if (obj instanceof Node) { + if (highlightEdges === true) { + this._selectConnectedEdges(obj); + } + } + obj.select(); + this._addToSelection(obj); + return true; + } + return false; + } + }, { + key: 'deselectObject', + value: function deselectObject(obj) { + if (obj.isSelected() === true) { + obj.selected = false; + this._removeFromSelection(obj); + } + } + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ - this.moveTo(x, y - (h - ir)); - this.lineTo(x + s2, y + ir); - this.lineTo(x - s2, y + ir); - this.lineTo(x, y - (h - ir)); - this.closePath(); - }; + }, { + key: '_getAllNodesOverlappingWith', + value: function _getAllNodesOverlappingWith(object) { + var overlappingNodes = []; + var nodes = this.body.nodes; + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var nodeId = this.body.nodeIndices[i]; + if (nodes[nodeId].isOverlappingWith(object)) { + overlappingNodes.push(nodeId); + } + } + return overlappingNodes; + } - /** - * Draw a triangle shape in downward orientation - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius - */ - CanvasRenderingContext2D.prototype.triangleDown = function (x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + /** + * Return a position object in canvasspace from a single point in screenspace + * + * @param pointer + * @returns {{left: number, top: number, right: number, bottom: number}} + * @private + */ - // the change in radius and the offset is here to center the shape - r *= 1.15; - y -= 0.275 * r; + }, { + key: '_pointerToPositionObject', + value: function _pointerToPositionObject(pointer) { + var canvasPos = this.canvas.DOMtoCanvas(pointer); + return { + left: canvasPos.x - 1, + top: canvasPos.y + 1, + right: canvasPos.x + 1, + bottom: canvasPos.y - 1 + }; + } - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + /** + * Get the top node at the passed point (like a click) + * + * @param {{x: Number, y: Number}} pointer + * @return {Node | undefined} node + */ - this.moveTo(x, y + (h - ir)); - this.lineTo(x + s2, y - ir); - this.lineTo(x - s2, y - ir); - this.lineTo(x, y + (h - ir)); - this.closePath(); - }; + }, { + key: 'getNodeAt', + value: function getNodeAt(pointer) { + var returnNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - /** - * Draw a star shape, a star with 5 points - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.star = function (x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); + // we first check if this is an navigation controls element + var positionObject = this._pointerToPositionObject(pointer); + var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); + // if there are overlapping nodes, select the last one, this is the + // one which is drawn on top of the others + if (overlappingNodes.length > 0) { + if (returnNode === true) { + return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]]; + } else { + return overlappingNodes[overlappingNodes.length - 1]; + } + } else { + return undefined; + } + } - // the change in radius and the offset is here to center the shape - r *= 0.82; - y += 0.1 * r; + /** + * retrieve all edges overlapping with given object, selector is around center + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ - for (var n = 0; n < 10; n++) { - var radius = n % 2 === 0 ? r * 1.3 : r * 0.5; - this.lineTo(x + radius * Math.sin(n * 2 * Math.PI / 10), y - radius * Math.cos(n * 2 * Math.PI / 10)); + }, { + key: '_getEdgesOverlappingWith', + value: function _getEdgesOverlappingWith(object, overlappingEdges) { + var edges = this.body.edges; + for (var i = 0; i < this.body.edgeIndices.length; i++) { + var edgeId = this.body.edgeIndices[i]; + if (edges[edgeId].isOverlappingWith(object)) { + overlappingEdges.push(edgeId); + } + } } - this.closePath(); - }; + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ - /** - * Draw a Diamond shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.diamond = function (x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); + }, { + key: '_getAllEdgesOverlappingWith', + value: function _getAllEdgesOverlappingWith(object) { + var overlappingEdges = []; + this._getEdgesOverlappingWith(object, overlappingEdges); + return overlappingEdges; + } - this.lineTo(x, y + r); - this.lineTo(x + r, y); - this.lineTo(x, y - r); - this.lineTo(x - r, y); + /** + * Get the edges nearest to the passed point (like a click) + * + * @param {{x: Number, y: Number}} pointer + * @return {Edge | undefined} node + */ - this.closePath(); - }; + }, { + key: 'getEdgeAt', + value: function getEdgeAt(pointer) { + var returnEdge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - /** - * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - */ - CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) { - var r2d = Math.PI / 180; - if (w - 2 * r < 0) { - r = w / 2; - } //ensure that the radius isn't too large for x - if (h - 2 * r < 0) { - r = h / 2; - } //ensure that the radius isn't too large for y - this.beginPath(); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false); - this.lineTo(x + w, y + h - r); - this.arc(x + w - r, y + h - r, r, 0, r2d * 90, false); - this.lineTo(x + r, y + h); - this.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false); - this.lineTo(x, y + r); - this.arc(x + r, y + r, r, r2d * 180, r2d * 270, false); - this.closePath(); - }; + // Iterate over edges, pick closest within 10 + var canvasPos = this.canvas.DOMtoCanvas(pointer); + var mindist = 10; + var overlappingEdge = null; + var edges = this.body.edges; + for (var i = 0; i < this.body.edgeIndices.length; i++) { + var edgeId = this.body.edgeIndices[i]; + var edge = edges[edgeId]; + if (edge.connected) { + var xFrom = edge.from.x; + var yFrom = edge.from.y; + var xTo = edge.to.x; + var yTo = edge.to.y; + var dist = edge.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, canvasPos.x, canvasPos.y); + if (dist < mindist) { + overlappingEdge = edgeId; + mindist = dist; + } + } + } + if (overlappingEdge !== null) { + if (returnEdge === true) { + return this.body.edges[overlappingEdge]; + } else { + return overlappingEdge; + } + } else { + return undefined; + } + } - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.ellipse = function (x, y, w, h) { - var kappa = .5522848, - ox = w / 2 * kappa, - // control point offset horizontal - oy = h / 2 * kappa, - // control point offset vertical - xe = x + w, - // x-end - ye = y + h, - // y-end - xm = x + w / 2, - // x-middle - ym = y + h / 2; // y-middle + /** + * Add object to the selection array. + * + * @param obj + * @private + */ - this.beginPath(); - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - this.closePath(); - }; + }, { + key: '_addToSelection', + value: function _addToSelection(obj) { + if (obj instanceof Node) { + this.selectionObj.nodes[obj.id] = obj; + } else { + this.selectionObj.edges[obj.id] = obj; + } + } - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.database = function (x, y, w, h) { - var f = 1 / 3; - var wEllipse = w; - var hEllipse = h * f; + /** + * Add object to the selection array. + * + * @param obj + * @private + */ - var kappa = .5522848, - ox = wEllipse / 2 * kappa, - // control point offset horizontal - oy = hEllipse / 2 * kappa, - // control point offset vertical - xe = x + wEllipse, - // x-end - ye = y + hEllipse, - // y-end - xm = x + wEllipse / 2, - // x-middle - ym = y + hEllipse / 2, - // y-middle - ymb = y + (h - hEllipse / 2), - // y-midlle, bottom ellipse - yeb = y + h; // y-end, bottom ellipse + }, { + key: '_addToHover', + value: function _addToHover(obj) { + if (obj instanceof Node) { + this.hoverObj.nodes[obj.id] = obj; + } else { + this.hoverObj.edges[obj.id] = obj; + } + } - this.beginPath(); - this.moveTo(xe, ym); + /** + * Remove a single option from selection. + * + * @param {Object} obj + * @private + */ - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + }, { + key: '_removeFromSelection', + value: function _removeFromSelection(obj) { + if (obj instanceof Node) { + delete this.selectionObj.nodes[obj.id]; + this._unselectConnectedEdges(obj); + } else { + delete this.selectionObj.edges[obj.id]; + } + } - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + /** + * Unselect all. The selectionObj is useful for this. + */ - this.lineTo(xe, ymb); + }, { + key: 'unselectAll', + value: function unselectAll() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + this.selectionObj.nodes[nodeId].unselect(); + } + } + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + this.selectionObj.edges[edgeId].unselect(); + } + } - this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); - this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + this.selectionObj = { nodes: {}, edges: {} }; + } - this.lineTo(x, ym); - }; + /** + * return the number of selected nodes + * + * @returns {number} + * @private + */ - /** - * Draw an arrow at the end of a line with the given angle. - */ - CanvasRenderingContext2D.prototype.arrowEndpoint = function (x, y, angle, length) { - // tail - var xt = x - length * Math.cos(angle); - var yt = y - length * Math.sin(angle); + }, { + key: '_getSelectedNodeCount', + value: function _getSelectedNodeCount() { + var count = 0; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; + } + } + return count; + } - // inner tail - var xi = x - length * 0.9 * Math.cos(angle); - var yi = y - length * 0.9 * Math.sin(angle); + /** + * return the selected node + * + * @returns {number} + * @private + */ - // left - var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); - var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); + }, { + key: '_getSelectedNode', + value: function _getSelectedNode() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return this.selectionObj.nodes[nodeId]; + } + } + return undefined; + } - // right - var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); - var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + /** + * return the selected edge + * + * @returns {number} + * @private + */ - this.beginPath(); - this.moveTo(x, y); - this.lineTo(xl, yl); - this.lineTo(xi, yi); - this.lineTo(xr, yr); - this.closePath(); - }; + }, { + key: '_getSelectedEdge', + value: function _getSelectedEdge() { + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + return this.selectionObj.edges[edgeId]; + } + } + return undefined; + } - /** - * Draw an circle an the end of an line with the given angle. - */ - CanvasRenderingContext2D.prototype.circleEndpoint = function (x, y, angle, length) { - var radius = length * 0.4; - var xc = x - radius * Math.cos(angle); - var yc = y - radius * Math.sin(angle); - this.circle(xc, yc, radius); - }; + /** + * return the number of selected edges + * + * @returns {number} + * @private + */ - /** - * Sets up the dashedLine functionality for drawing - * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas - * @author David Jordan - * @date 2012-08-08 - */ - CanvasRenderingContext2D.prototype.dashedLine = function (x, y, x2, y2, pattern) { - this.beginPath(); - this.moveTo(x, y); + }, { + key: '_getSelectedEdgeCount', + value: function _getSelectedEdgeCount() { + var count = 0; + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } + } + return count; + } - var patternLength = pattern.length; - var dx = x2 - x; - var dy = y2 - y; - var slope = dy / dx; - var distRemaining = Math.sqrt(dx * dx + dy * dy); - var patternIndex = 0; - var draw = true; - var xStep = 0; - var dashLength = pattern[0]; + /** + * return the number of selected objects. + * + * @returns {number} + * @private + */ - while (distRemaining >= 0.1) { - dashLength = pattern[patternIndex++ % patternLength]; - if (dashLength > distRemaining) { - dashLength = distRemaining; + }, { + key: '_getSelectedObjectCount', + value: function _getSelectedObjectCount() { + var count = 0; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; + } + } + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } } + return count; + } - xStep = Math.sqrt(dashLength * dashLength / (1 + slope * slope)); - xStep = dx < 0 ? -xStep : xStep; - x += xStep; - y += slope * xStep; + /** + * Check if anything is selected + * + * @returns {boolean} + * @private + */ - if (draw === true) { - this.lineTo(x, y); - } else { - this.moveTo(x, y); + }, { + key: '_selectionIsEmpty', + value: function _selectionIsEmpty() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return false; + } } - - distRemaining -= dashLength; - draw = !draw; + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + return false; + } + } + return true; } - }; - } -/***/ }, -/* 228 */ -/***/ function(module, exports, __webpack_require__) { + /** + * check if one of the selected nodes is a cluster. + * + * @returns {boolean} + * @private + */ - 'use strict'; + }, { + key: '_clusterInSelection', + value: function _clusterInSelection() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (this.selectionObj.nodes[nodeId].clusterSize > 1) { + return true; + } + } + } + return false; + } - var _create = __webpack_require__(55); + /** + * select the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ - var _create2 = _interopRequireDefault(_create); + }, { + key: '_selectConnectedEdges', + value: function _selectConnectedEdges(node) { + for (var i = 0; i < node.edges.length; i++) { + var edge = node.edges[i]; + edge.select(); + this._addToSelection(edge); + } + } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + /** + * select the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ - /** - * Parse a text source containing data in DOT language into a JSON object. - * The object contains two lists: one with nodes and one with edges. - * - * DOT language reference: http://www.graphviz.org/doc/info/lang.html - * - * DOT language attributes: http://graphviz.org/content/attrs - * - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graph An object containing two parameters: - * {Object[]} nodes - * {Object[]} edges - */ - function parseDOT(data) { - dot = data; - return parseGraph(); - } + }, { + key: '_hoverConnectedEdges', + value: function _hoverConnectedEdges(node) { + for (var i = 0; i < node.edges.length; i++) { + var edge = node.edges[i]; + edge.hover = true; + this._addToHover(edge); + } + } - // mapping of attributes from DOT (the keys) to vis.js (the values) - var NODE_ATTR_MAPPING = { - 'fontsize': 'font.size', - 'fontcolor': 'font.color', - 'labelfontcolor': 'font.color', - 'fontname': 'font.face', - 'color': ['color.border', 'color.background'], - 'fillcolor': 'color.background', - 'tooltip': 'title', - 'labeltooltip': 'title' - }; - var EDGE_ATTR_MAPPING = (0, _create2['default'])(NODE_ATTR_MAPPING); - EDGE_ATTR_MAPPING.color = 'color.color'; + /** + * unselect the edges connected to the node that is being selected + * + * @param {Node} node + * @private + */ - // token types enumeration - var TOKENTYPE = { - NULL: 0, - DELIMITER: 1, - IDENTIFIER: 2, - UNKNOWN: 3 - }; + }, { + key: '_unselectConnectedEdges', + value: function _unselectConnectedEdges(node) { + for (var i = 0; i < node.edges.length; i++) { + var edge = node.edges[i]; + edge.unselect(); + this._removeFromSelection(edge); + } + } - // map with all delimiters - var DELIMITERS = { - '{': true, - '}': true, - '[': true, - ']': true, - ';': true, - '=': true, - ',': true, + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @private + */ - '->': true, - '--': true - }; + }, { + key: 'blurObject', + value: function blurObject(object) { + if (object.hover === true) { + object.hover = false; + if (object instanceof Node) { + this.body.emitter.emit("blurNode", { node: object.id }); + } else { + this.body.emitter.emit("blurEdge", { edge: object.id }); + } + } + } - var dot = ''; // current dot file - var index = 0; // current index in dot file - var c = ''; // current token character in expr - var token = ''; // current token - var tokenType = TOKENTYPE.NULL; // type of the token + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @private + */ - /** - * Get the first character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function first() { - index = 0; - c = dot.charAt(0); - } + }, { + key: 'hoverObject', + value: function hoverObject(object) { + var hoverChanged = false; + // remove all node hover highlights + for (var nodeId in this.hoverObj.nodes) { + if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { + if (object === undefined || object instanceof Node && object.id != nodeId || object instanceof Edge) { + this.blurObject(this.hoverObj.nodes[nodeId]); + delete this.hoverObj.nodes[nodeId]; + hoverChanged = true; + } + } + } - /** - * Get the next character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function next() { - index++; - c = dot.charAt(index); - } + // removing all edge hover highlights + for (var edgeId in this.hoverObj.edges) { + if (this.hoverObj.edges.hasOwnProperty(edgeId)) { + // if the hover has been changed here it means that the node has been hovered over or off + // we then do not use the blurObject method here. + if (hoverChanged === true) { + this.hoverObj.edges[edgeId].hover = false; + delete this.hoverObj.edges[edgeId]; + } + // if the blur remains the same and the object is undefined (mouse off) or another + // edge has been hovered, or another node has been hovered we blur the edge. + else if (object === undefined || object instanceof Edge && object.id != edgeId || object instanceof Node && !object.hover) { + this.blurObject(this.hoverObj.edges[edgeId]); + delete this.hoverObj.edges[edgeId]; + hoverChanged = true; + } + } + } - /** - * Preview the next character from the dot file. - * @return {String} cNext - */ - function nextPreview() { - return dot.charAt(index + 1); - } + if (object !== undefined) { + if (object.hover === false) { + object.hover = true; + this._addToHover(object); + hoverChanged = true; + if (object instanceof Node) { + this.body.emitter.emit("hoverNode", { node: object.id }); + } else { + this.body.emitter.emit("hoverEdge", { edge: object.id }); + } + } + if (object instanceof Node && this.options.hoverConnectedEdges === true) { + this._hoverConnectedEdges(object); + } + } - /** - * Test whether given character is alphabetic or numeric - * @param {String} c - * @return {Boolean} isAlphaNumeric - */ - var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; - function isAlphaNumeric(c) { - return regexAlphaNumeric.test(c); - } + if (hoverChanged === true) { + this.body.emitter.emit('_requestRedraw'); + } + } - /** - * Merge all options of object b into object b - * @param {Object} a - * @param {Object} b - * @return {Object} a - */ - function merge(a, b) { - if (!a) { - a = {}; - } + /** + * + * retrieve the currently selected objects + * @return {{nodes: Array., edges: Array.}} selection + */ - if (b) { - for (var name in b) { - if (b.hasOwnProperty(name)) { - a[name] = b[name]; + }, { + key: 'getSelection', + value: function getSelection() { + var nodeIds = this.getSelectedNodes(); + var edgeIds = this.getSelectedEdges(); + return { nodes: nodeIds, edges: edgeIds }; + } + + /** + * + * retrieve the currently selected nodes + * @return {String[]} selection An array with the ids of the + * selected nodes. + */ + + }, { + key: 'getSelectedNodes', + value: function getSelectedNodes() { + var idArray = []; + if (this.options.selectable === true) { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + idArray.push(this.selectionObj.nodes[nodeId].id); + } + } } + return idArray; } - } - return a; - } - /** - * Set a value in an object, where the provided parameter name can be a - * path with nested parameters. For example: - * - * var obj = {a: 2}; - * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} - * - * @param {Object} obj - * @param {String} path A parameter name or dot-separated parameter path, - * like "color.highlight.border". - * @param {*} value - */ - function setValue(obj, path, value) { - var keys = path.split('.'); - var o = obj; - while (keys.length) { - var key = keys.shift(); - if (keys.length) { - // this isn't the end point - if (!o[key]) { - o[key] = {}; + /** + * + * retrieve the currently selected edges + * @return {Array} selection An array with the ids of the + * selected nodes. + */ + + }, { + key: 'getSelectedEdges', + value: function getSelectedEdges() { + var idArray = []; + if (this.options.selectable === true) { + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + idArray.push(this.selectionObj.edges[edgeId].id); + } + } } - o = o[key]; - } else { - // this is the end point - o[key] = value; + return idArray; } - } - } - /** - * Add a node to a graph object. If there is already a node with - * the same id, their attributes will be merged. - * @param {Object} graph - * @param {Object} node - */ - function addNode(graph, node) { - var i, len; - var current = null; + /** + * Updates the current selection + * @param {{nodes: Array., edges: Array.}} Selection + * @param {Object} options Options + */ - // find root graph (in case of subgraph) - var graphs = [graph]; // list with all graphs from current graph to root graph - var root = graph; - while (root.parent) { - graphs.push(root.parent); - root = root.parent; - } + }, { + key: 'setSelection', + value: function setSelection(selection) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - // find existing node (at root level) by its id - if (root.nodes) { - for (i = 0, len = root.nodes.length; i < len; i++) { - if (node.id === root.nodes[i].id) { - current = root.nodes[i]; - break; + var i = void 0, + id = void 0; + + if (!selection || !selection.nodes && !selection.edges) throw 'Selection must be an object with nodes and/or edges properties'; + // first unselect any selected node, if option is true or undefined + if (options.unselectAll || options.unselectAll === undefined) { + this.unselectAll(); + } + if (selection.nodes) { + for (i = 0; i < selection.nodes.length; i++) { + id = selection.nodes[i]; + + var node = this.body.nodes[id]; + if (!node) { + throw new RangeError('Node with id "' + id + '" not found'); + } + // don't select edges with it + this.selectObject(node, options.highlightEdges); + } + } + + if (selection.edges) { + for (i = 0; i < selection.edges.length; i++) { + id = selection.edges[i]; + + var edge = this.body.edges[id]; + if (!edge) { + throw new RangeError('Edge with id "' + id + '" not found'); + } + this.selectObject(edge); + } } + this.body.emitter.emit('_requestRedraw'); } - } - if (!current) { - // this is a new node - current = { - id: node.id - }; - if (graph.node) { - // clone default attributes - current.attr = merge(current.attr, graph.node); + /** + * select zero or more nodes with the option to highlight edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + * @param {boolean} [highlightEdges] + */ + + }, { + key: 'selectNodes', + value: function selectNodes(selection) { + var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (!selection || selection.length === undefined) throw 'Selection must be an array with ids'; + + this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges }); } - } - // add node to this (sub)graph and all its parent graphs - for (i = graphs.length - 1; i >= 0; i--) { - var g = graphs[i]; + /** + * select zero or more edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + */ - if (!g.nodes) { - g.nodes = []; + }, { + key: 'selectEdges', + value: function selectEdges(selection) { + if (!selection || selection.length === undefined) throw 'Selection must be an array with ids'; + + this.setSelection({ edges: selection }); } - if (g.nodes.indexOf(current) === -1) { - g.nodes.push(current); + + /** + * Validate the selection: remove ids of nodes which no longer exist + * @private + */ + + }, { + key: 'updateSelection', + value: function updateSelection() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (!this.body.nodes.hasOwnProperty(nodeId)) { + delete this.selectionObj.nodes[nodeId]; + } + } + } + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + if (!this.body.edges.hasOwnProperty(edgeId)) { + delete this.selectionObj.edges[edgeId]; + } + } + } } - } + }]); + return SelectionHandler; + }(); - // merge attributes - if (node.attr) { - current.attr = merge(current.attr, node.attr); - } - } + exports['default'] = SelectionHandler; - /** - * Add an edge to a graph object - * @param {Object} graph - * @param {Object} edge - */ - function addEdge(graph, edge) { - if (!graph.edges) { - graph.edges = []; - } - graph.edges.push(edge); - if (graph.edge) { - var attr = merge({}, graph.edge); // clone default attributes - edge.attr = merge(attr, edge.attr); // merge attributes - } - } +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { - /** - * Create an edge to a graph object - * @param {Object} graph - * @param {String | Number | Object} from - * @param {String | Number | Object} to - * @param {String} type - * @param {Object | null} attr - * @return {Object} edge - */ - function createEdge(graph, from, to, type, attr) { - var edge = { - from: from, - to: to, - type: type - }; + 'use strict'; - if (graph.edge) { - edge.attr = merge({}, graph.edge); // clone default attributes - } - edge.attr = merge(edge.attr || {}, attr); // merge attributes + Object.defineProperty(exports, "__esModule", { + value: true + }); - return edge; - } + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); + + var _slicedToArray2 = __webpack_require__(170); + + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + + var _typeof2 = __webpack_require__(62); + + var _typeof3 = _interopRequireDefault(_typeof2); + + var _classCallCheck2 = __webpack_require__(134); + + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var util = __webpack_require__(1); + var NetworkUtil = __webpack_require__(219)['default']; /** - * Get next token in the current dot file. - * The token and token type are available as token and tokenType + * Container for derived data on current network, relating to hierarchy. + * + * Local, private class. + * + * TODO: Perhaps move more code for hierarchy state handling to this class. + * Till now, only the required and most obvious has been done. */ - function getToken() { - tokenType = TOKENTYPE.NULL; - token = ''; - // skip over whitespaces - while (c === ' ' || c === '\t' || c === '\n' || c === '\r') { - // space, tab, enter - next(); + var HierarchicalStatus = function () { + function HierarchicalStatus() { + (0, _classCallCheck3['default'])(this, HierarchicalStatus); + + this.childrenReference = {}; + this.parentReference = {}; + this.levels = {}; + this.trees = {}; + + this.isTree = false; } - do { - var isComment = false; + /** + * Add the relation between given nodes to the current state. + */ - // skip comment - if (c === '#') { - // find the previous non-space character - var i = index - 1; - while (dot.charAt(i) === ' ' || dot.charAt(i) === '\t') { - i--; - } - if (dot.charAt(i) === '\n' || dot.charAt(i) === '') { - // the # is at the start of a line, this is indeed a line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; + + (0, _createClass3['default'])(HierarchicalStatus, [{ + key: 'addRelation', + value: function addRelation(parentNodeId, childNodeId) { + if (this.childrenReference[parentNodeId] === undefined) { + this.childrenReference[parentNodeId] = []; } - } - if (c === '/' && nextPreview() === '/') { - // skip line comment - while (c != '' && c != '\n') { - next(); + this.childrenReference[parentNodeId].push(childNodeId); + + if (this.parentReference[childNodeId] === undefined) { + this.parentReference[childNodeId] = []; } - isComment = true; + this.parentReference[childNodeId].push(parentNodeId); } - if (c === '/' && nextPreview() === '*') { - // skip block comment - while (c != '') { - if (c === '*' && nextPreview() === '/') { - // end of block comment found. skip these last two characters - next(); - next(); - break; - } else { - next(); + + /** + * Check if the current state is for a tree or forest network. + * + * This is the case if every node has at most one parent. + * + * Pre: parentReference init'ed properly for current network + */ + + }, { + key: 'checkIfTree', + value: function checkIfTree() { + for (var i in this.parentReference) { + if (this.parentReference[i].length > 1) { + this.isTree = false; + return; } } - isComment = true; + + this.isTree = true; } - // skip over whitespaces - while (c === ' ' || c === '\t' || c === '\n' || c === '\r') { - // space, tab, enter - next(); + /** + * Ensure level for given id is defined. + * + * Sets level to zero for given node id if not already present + */ + + }, { + key: 'ensureLevel', + value: function ensureLevel(nodeId) { + if (this.levels[nodeId] === undefined) { + this.levels[nodeId] = 0; + } } - } while (isComment); - // check for end of dot file - if (c === '') { - // token is still empty - tokenType = TOKENTYPE.DELIMITER; - return; - } + /** + * get the maximum level of a branch. + * + * TODO: Never entered; find a test case to test this! + */ - // check for delimiters consisting of 2 characters - var c2 = c + nextPreview(); - if (DELIMITERS[c2]) { - tokenType = TOKENTYPE.DELIMITER; - token = c2; - next(); - next(); - return; - } + }, { + key: 'getMaxLevel', + value: function getMaxLevel(nodeId) { + var _this = this; - // check for delimiters consisting of 1 character - if (DELIMITERS[c]) { - tokenType = TOKENTYPE.DELIMITER; - token = c; - next(); - return; - } + var accumulator = {}; - // check for an identifier (number or string) - // TODO: more precise parsing of numbers/strings (and the port separator ':') - if (isAlphaNumeric(c) || c === '-') { - token += c; - next(); + var _getMaxLevel = function _getMaxLevel(nodeId) { + if (accumulator[nodeId] !== undefined) { + return accumulator[nodeId]; + } + var level = _this.levels[nodeId]; + if (_this.childrenReference[nodeId]) { + var children = _this.childrenReference[nodeId]; + if (children.length > 0) { + for (var i = 0; i < children.length; i++) { + level = Math.max(level, _getMaxLevel(children[i])); + } + } + } + accumulator[nodeId] = level; + return level; + }; - while (isAlphaNumeric(c)) { - token += c; - next(); + return _getMaxLevel(nodeId); } - if (token === 'false') { - token = false; // convert to boolean - } else if (token === 'true') { - token = true; // convert to boolean - } else if (!isNaN(Number(token))) { - token = Number(token); // convert to number + }, { + key: 'levelDownstream', + value: function levelDownstream(nodeA, nodeB) { + if (this.levels[nodeB.id] === undefined) { + // set initial level + if (this.levels[nodeA.id] === undefined) { + this.levels[nodeA.id] = 0; + } + // set level + this.levels[nodeB.id] = this.levels[nodeA.id] + 1; + } } - tokenType = TOKENTYPE.IDENTIFIER; - return; - } - // check for a string enclosed by double quotes - if (c === '"') { - next(); - while (c != '' && (c != '"' || c === '"' && nextPreview() === '"')) { - token += c; - if (c === '"') { - // skip the escape character - next(); + /** + * Small util method to set the minimum levels of the nodes to zero. + */ + + }, { + key: 'setMinLevelToZero', + value: function setMinLevelToZero(nodes) { + var minLevel = 1e9; + // get the minimum level + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + if (this.levels[nodeId] !== undefined) { + minLevel = Math.min(this.levels[nodeId], minLevel); + } + } + } + + // subtract the minimum from the set so we have a range starting from 0 + for (var _nodeId in nodes) { + if (nodes.hasOwnProperty(_nodeId)) { + if (this.levels[_nodeId] !== undefined) { + this.levels[_nodeId] -= minLevel; + } + } + } + } + + /** + * Get the min and max xy-coordinates of a given tree + */ + + }, { + key: 'getTreeSize', + value: function getTreeSize(nodes, index) { + var min_x = 1e9; + var max_x = -1e9; + var min_y = 1e9; + var max_y = -1e9; + + for (var nodeId in this.trees) { + if (this.trees.hasOwnProperty(nodeId)) { + if (this.trees[nodeId] === index) { + var node = nodes[nodeId]; + min_x = Math.min(node.x, min_x); + max_x = Math.max(node.x, max_x); + min_y = Math.min(node.y, min_y); + max_y = Math.max(node.y, max_y); + } + } + } + + return { + min_x: min_x, + max_x: max_x, + min_y: min_y, + max_y: max_y + }; + } + }]); + return HierarchicalStatus; + }(); + + var LayoutEngine = function () { + function LayoutEngine(body) { + (0, _classCallCheck3['default'])(this, LayoutEngine); + + this.body = body; + + this.initialRandomSeed = Math.round(Math.random() * 1000000); + this.randomSeed = this.initialRandomSeed; + this.setPhysics = false; + this.options = {}; + this.optionsBackup = { physics: {} }; + + this.defaultOptions = { + randomSeed: undefined, + improvedLayout: true, + hierarchical: { + enabled: false, + levelSeparation: 150, + nodeSpacing: 100, + treeSpacing: 200, + blockShifting: true, + edgeMinimization: true, + parentCentralization: true, + direction: 'UD', // UD, DU, LR, RL + sortMethod: 'hubsize' // hubsize, directed + } + }; + util.extend(this.options, this.defaultOptions); + this.bindEventListeners(); + } + + (0, _createClass3['default'])(LayoutEngine, [{ + key: 'bindEventListeners', + value: function bindEventListeners() { + var _this2 = this; + + this.body.emitter.on('_dataChanged', function () { + _this2.setupHierarchicalLayout(); + }); + this.body.emitter.on('_dataLoaded', function () { + _this2.layoutNetwork(); + }); + this.body.emitter.on('_resetHierarchicalLayout', function () { + _this2.setupHierarchicalLayout(); + }); + } + }, { + key: 'setOptions', + 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; + } + + if (this.options.hierarchical.enabled === true) { + if (prevHierarchicalState === true) { + // refresh the overridden options for nodes and edges. + this.body.emitter.emit('refresh', true); + } + + // make sure the level separation is the right way up + if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'DU') { + if (this.options.hierarchical.levelSeparation > 0) { + this.options.hierarchical.levelSeparation *= -1; + } + } else { + if (this.options.hierarchical.levelSeparation < 0) { + this.options.hierarchical.levelSeparation *= -1; + } + } + + this.body.emitter.emit('_resetHierarchicalLayout'); + // because the hierarchical system needs it's own physics and smooth curve settings, we adapt the other options if needed. + return this.adaptAllOptionsForHierarchicalLayout(allOptions); + } else { + if (prevHierarchicalState === true) { + // refresh the overridden options for nodes and edges. + this.body.emitter.emit('refresh'); + return util.deepExtend(allOptions, this.optionsBackup); + } + } + } + return allOptions; + } + }, { + key: 'adaptAllOptionsForHierarchicalLayout', + value: function adaptAllOptionsForHierarchicalLayout(allOptions) { + if (this.options.hierarchical.enabled === true) { + // set the physics + if (allOptions.physics === undefined || allOptions.physics === true) { + allOptions.physics = { + enabled: this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled, + solver: 'hierarchicalRepulsion' + }; + this.optionsBackup.physics.enabled = this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled; + this.optionsBackup.physics.solver = this.optionsBackup.physics.solver || 'barnesHut'; + } else if ((0, _typeof3['default'])(allOptions.physics) === 'object') { + this.optionsBackup.physics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled; + this.optionsBackup.physics.solver = allOptions.physics.solver || 'barnesHut'; + allOptions.physics.solver = 'hierarchicalRepulsion'; + } else if (allOptions.physics !== false) { + this.optionsBackup.physics.solver = 'barnesHut'; + allOptions.physics = { solver: 'hierarchicalRepulsion' }; + } + + // get the type of static smooth curve in case it is required + var type = 'horizontal'; + if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'LR') { + type = 'vertical'; + } + + // disable smooth curves if nothing is defined. If smooth curves have been turned on, turn them into static smooth curves. + if (allOptions.edges === undefined) { + this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } }; + allOptions.edges = { smooth: false }; + } else if (allOptions.edges.smooth === undefined) { + this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } }; + allOptions.edges.smooth = false; + } else { + if (typeof allOptions.edges.smooth === 'boolean') { + this.optionsBackup.edges = { smooth: allOptions.edges.smooth }; + allOptions.edges.smooth = { enabled: allOptions.edges.smooth, type: type }; + } else { + // allow custom types except for dynamic + if (allOptions.edges.smooth.type !== undefined && allOptions.edges.smooth.type !== 'dynamic') { + type = allOptions.edges.smooth.type; + } + + this.optionsBackup.edges = { + smooth: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled, + type: allOptions.edges.smooth.type === undefined ? 'dynamic' : allOptions.edges.smooth.type, + roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness, + forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection + }; + allOptions.edges.smooth = { + enabled: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled, + type: type, + roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness, + forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection + }; + } + } + + // force all edges into static smooth curves. Only applies to edges that do not use the global options for smooth. + this.body.emitter.emit('_forceDisableDynamicCurves', type); + } + + return allOptions; + } + }, { + key: 'seededRandom', + value: function seededRandom() { + var x = Math.sin(this.randomSeed++) * 10000; + return x - Math.floor(x); + } + }, { + key: 'positionInitially', + value: function positionInitially(nodesArray) { + if (this.options.hierarchical.enabled !== true) { + this.randomSeed = this.initialRandomSeed; + var radius = nodesArray.length + 50; + for (var i = 0; i < nodesArray.length; i++) { + var node = nodesArray[i]; + var angle = 2 * Math.PI * this.seededRandom(); + if (node.x === undefined) { + node.x = radius * Math.cos(angle); + } + if (node.y === undefined) { + node.y = radius * Math.sin(angle); + } + } + } + } + + /** + * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we + * cluster them first to reduce the amount. + */ + + }, { + key: 'layoutNetwork', + value: function layoutNetwork() { + if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) { + // first check if we should Kamada Kawai 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 = 10; + var level = 0; + var clusterThreshold = 150; + //Performance enhancement, during clustering edges need only be simple straight lines. These options don't propagate outside the clustering phase. + var clusterOptions = { + clusterEdgeProperties: { + smooth: { + enabled: false + } + } + }; + + // 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 && level <= MAX_LEVELS) { + //console.time("clustering") + level += 1; + var before = this.body.nodeIndices.length; + // if there are many nodes we do a hubsize cluster + if (level % 3 === 0) { + this.body.modules.clustering.clusterBridges(clusterOptions); + } else { + this.body.modules.clustering.clusterOutliers(clusterOptions); + } + var after = this.body.nodeIndices.length; + if (before == after && level % 3 !== 0) { + this._declusterAll(); + this.body.emitter.emit("_layoutFailed"); + console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance."); + return; + } + //console.timeEnd("clustering") + //console.log(before,level,after); + } + // increase the size of the edges + this.body.modules.kamadaKawai.setOptions({ springLength: Math.max(150, 2 * startLength) }); + } + if (level > MAX_LEVELS) { + console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."); + } + + // position the system for these nodes and edges + this.body.modules.kamadaKawai.solve(this.body.nodeIndices, this.body.edgeIndices, true); + + // shift to center point + this._shiftToCenter(); + + // perturb the nodes a little bit to force the physics to kick in + var offset = 70; + for (var _i = 0; _i < this.body.nodeIndices.length; _i++) { + // Only perturb the nodes that aren't fixed + if (this.body.nodes[this.body.nodeIndices[_i]].predefinedPosition === false) { + this.body.nodes[this.body.nodeIndices[_i]].x += (0.5 - this.seededRandom()) * offset; + this.body.nodes[this.body.nodeIndices[_i]].y += (0.5 - this.seededRandom()) * offset; + } + } + + // uncluster all clusters + this._declusterAll(); + + // reposition all bezier nodes. + this.body.emitter.emit("_repositionBezierNodes"); + } + } + } + + /** + * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view + * @private + */ + + }, { + key: '_shiftToCenter', + value: function _shiftToCenter() { + var range = NetworkUtil.getRangeCore(this.body.nodes, this.body.nodeIndices); + var center = NetworkUtil.findCenter(range); + for (var i = 0; i < this.body.nodeIndices.length; i++) { + this.body.nodes[this.body.nodeIndices[i]].x -= center.x; + this.body.nodes[this.body.nodeIndices[i]].y -= center.y; + } + } + }, { + 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() { + return this.initialRandomSeed; + } + + /** + * This is the main function to layout the nodes in a hierarchical way. + * It checks if the node details are supplied correctly + * + * @private + */ + + }, { + key: 'setupHierarchicalLayout', + value: function setupHierarchicalLayout() { + if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) { + // get the size of the largest hubs and check if the user has defined a level for a node. + var node = void 0, + nodeId = void 0; + var definedLevel = false; + var definedPositions = true; + var undefinedLevel = false; + this.lastNodeOnLevel = {}; + this.hierarchical = new HierarchicalStatus(); + this.treeIndex = -1; + + this.distributionOrdering = {}; + this.distributionIndex = {}; + this.distributionOrderingPresence = {}; + + for (nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + node = this.body.nodes[nodeId]; + if (node.options.x === undefined && node.options.y === undefined) { + definedPositions = false; + } + if (node.options.level !== undefined) { + definedLevel = true; + this.hierarchical.levels[nodeId] = node.options.level; + } else { + undefinedLevel = true; + } + } + } + + // if the user defined some levels but not all, alert and run without hierarchical layout + if (undefinedLevel === true && definedLevel === true) { + throw new Error('To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.'); + } else { + // define levels if undefined by the users. Based on hubsize. + if (undefinedLevel === true) { + if (this.options.hierarchical.sortMethod === 'hubsize') { + this._determineLevelsByHubsize(); + } else if (this.options.hierarchical.sortMethod === 'directed') { + this._determineLevelsDirected(); + } else if (this.options.hierarchical.sortMethod === 'custom') { + this._determineLevelsCustomCallback(); + } + } + + // fallback for cases where there are nodes but no edges + for (var _nodeId2 in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(_nodeId2)) { + this.hierarchical.ensureLevel(_nodeId2); + } + } + // check the distribution of the nodes per level. + var distribution = this._getDistribution(); + + // get the parent children relations. + this._generateMap(); + + // place the nodes on the canvas. + this._placeNodesByHierarchy(distribution); + + // condense the whitespace. + this._condenseHierarchy(); + + // shift to center so gravity does not have to do much + this._shiftToCenter(); + } + } + } + + /** + * @private + */ + + }, { + key: '_condenseHierarchy', + value: function _condenseHierarchy() { + var _this3 = this; + + // Global var in this scope to define when the movement has stopped. + var stillShifting = false; + var branches = {}; + // first we have some methods to help shifting trees around. + // the main method to shift the trees + var shiftTrees = function shiftTrees() { + var treeSizes = getTreeSizes(); + var shiftBy = 0; + for (var i = 0; i < treeSizes.length - 1; i++) { + var diff = treeSizes[i].max - treeSizes[i + 1].min; + shiftBy += diff + _this3.options.hierarchical.treeSpacing; + shiftTree(i + 1, shiftBy); + } + }; + + // shift a single tree by an offset + var shiftTree = function shiftTree(index, offset) { + for (var nodeId in _this3.hierarchical.trees) { + if (_this3.hierarchical.trees.hasOwnProperty(nodeId)) { + if (_this3.hierarchical.trees[nodeId] === index) { + var node = _this3.body.nodes[nodeId]; + var pos = _this3._getPositionForHierarchy(node); + _this3._setPositionForHierarchy(node, pos + offset, undefined, true); + } + } + } + }; + + // get the width of a tree + var getTreeSize = function getTreeSize(index) { + var res = _this3.hierarchical.getTreeSize(_this3.body.nodes, index); + if (_this3._isVertical()) { + return { min: res.min_x, max: res.max_x }; + } else { + return { min: res.min_y, max: res.max_y }; + } + }; + + // get the width of all trees + var getTreeSizes = function getTreeSizes() { + var treeWidths = []; + for (var i = 0; i <= _this3.treeIndex; i++) { + treeWidths.push(getTreeSize(i)); + } + return treeWidths; + }; + + // get a map of all nodes in this branch + var getBranchNodes = function getBranchNodes(source, map) { + if (map[source.id]) { + return; + } + map[source.id] = true; + if (_this3.hierarchical.childrenReference[source.id]) { + var children = _this3.hierarchical.childrenReference[source.id]; + if (children.length > 0) { + for (var i = 0; i < children.length; i++) { + getBranchNodes(_this3.body.nodes[children[i]], map); + } + } + } + }; + + // get a min max width as well as the maximum movement space it has on either sides + // we use min max terminology because width and height can interchange depending on the direction of the layout + var getBranchBoundary = function getBranchBoundary(branchMap) { + var maxLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e9; + + var minSpace = 1e9; + var maxSpace = 1e9; + var min = 1e9; + var max = -1e9; + for (var branchNode in branchMap) { + if (branchMap.hasOwnProperty(branchNode)) { + var node = _this3.body.nodes[branchNode]; + var level = _this3.hierarchical.levels[node.id]; + var position = _this3._getPositionForHierarchy(node); + + // get the space around the node. + + var _getSpaceAroundNode2 = _this3._getSpaceAroundNode(node, branchMap), + _getSpaceAroundNode3 = (0, _slicedToArray3['default'])(_getSpaceAroundNode2, 2), + minSpaceNode = _getSpaceAroundNode3[0], + maxSpaceNode = _getSpaceAroundNode3[1]; + + minSpace = Math.min(minSpaceNode, minSpace); + maxSpace = Math.min(maxSpaceNode, maxSpace); + + // the width is only relevant for the levels two nodes have in common. This is why we filter on this. + if (level <= maxLevel) { + min = Math.min(position, min); + max = Math.max(position, max); + } + } + } + + return [min, max, minSpace, maxSpace]; + }; + + // check what the maximum level is these nodes have in common. + var getCollisionLevel = function getCollisionLevel(node1, node2) { + var maxLevel1 = _this3.hierarchical.getMaxLevel(node1.id); + var maxLevel2 = _this3.hierarchical.getMaxLevel(node2.id); + return Math.min(maxLevel1, maxLevel2); + }; + + // check if two nodes have the same parent(s) + var hasSameParent = function hasSameParent(node1, node2) { + var parents1 = _this3.hierarchical.parentReference[node1.id]; + var parents2 = _this3.hierarchical.parentReference[node2.id]; + if (parents1 === undefined || parents2 === undefined) { + return false; + } + + for (var i = 0; i < parents1.length; i++) { + for (var j = 0; j < parents2.length; j++) { + if (parents1[i] == parents2[j]) { + return true; + } + } + } + return false; + }; + + // condense elements. These can be nodes or branches depending on the callback. + var shiftElementsCloser = function shiftElementsCloser(callback, levels, centerParents) { + for (var i = 0; i < levels.length; i++) { + var level = levels[i]; + var levelNodes = _this3.distributionOrdering[level]; + if (levelNodes.length > 1) { + for (var j = 0; j < levelNodes.length - 1; j++) { + if (hasSameParent(levelNodes[j], levelNodes[j + 1]) === true) { + if (_this3.hierarchical.trees[levelNodes[j].id] === _this3.hierarchical.trees[levelNodes[j + 1].id]) { + callback(levelNodes[j], levelNodes[j + 1], centerParents); + } + } + } + } + } + }; + + // callback for shifting branches + var branchShiftCallback = function branchShiftCallback(node1, node2) { + var centerParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + //window.CALLBACKS.push(() => { + var pos1 = _this3._getPositionForHierarchy(node1); + var pos2 = _this3._getPositionForHierarchy(node2); + var diffAbs = Math.abs(pos2 - pos1); + //console.log("NOW CHEcKING:", node1.id, node2.id, diffAbs); + if (diffAbs > _this3.options.hierarchical.nodeSpacing) { + var branchNodes1 = {}; + var branchNodes2 = {}; + + getBranchNodes(node1, branchNodes1); + getBranchNodes(node2, branchNodes2); + + // check the largest distance between the branches + var maxLevel = getCollisionLevel(node1, node2); + + var _getBranchBoundary = getBranchBoundary(branchNodes1, maxLevel), + _getBranchBoundary2 = (0, _slicedToArray3['default'])(_getBranchBoundary, 4), + min1 = _getBranchBoundary2[0], + max1 = _getBranchBoundary2[1], + minSpace1 = _getBranchBoundary2[2], + maxSpace1 = _getBranchBoundary2[3]; + + var _getBranchBoundary3 = getBranchBoundary(branchNodes2, maxLevel), + _getBranchBoundary4 = (0, _slicedToArray3['default'])(_getBranchBoundary3, 4), + min2 = _getBranchBoundary4[0], + max2 = _getBranchBoundary4[1], + minSpace2 = _getBranchBoundary4[2], + maxSpace2 = _getBranchBoundary4[3]; + + //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id, getBranchBoundary(branchNodes2, maxLevel), maxLevel); + + + var diffBranch = Math.abs(max1 - min2); + if (diffBranch > _this3.options.hierarchical.nodeSpacing) { + var offset = max1 - min2 + _this3.options.hierarchical.nodeSpacing; + if (offset < -minSpace2 + _this3.options.hierarchical.nodeSpacing) { + offset = -minSpace2 + _this3.options.hierarchical.nodeSpacing; + //console.log("RESETTING OFFSET", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset); + } + if (offset < 0) { + //console.log("SHIFTING", node2.id, offset); + _this3._shiftBlock(node2.id, offset); + stillShifting = true; + + if (centerParent === true) _this3._centerParent(node2); + } + } + } + //this.body.emitter.emit("_redraw");}) + }; + + var minimizeEdgeLength = function minimizeEdgeLength(iterations, node) { + //window.CALLBACKS.push(() => { + // console.log("ts",node.id); + var nodeId = node.id; + var allEdges = node.edges; + var nodeLevel = _this3.hierarchical.levels[node.id]; + + // gather constants + var C2 = _this3.options.hierarchical.levelSeparation * _this3.options.hierarchical.levelSeparation; + var referenceNodes = {}; + var aboveEdges = []; + for (var i = 0; i < allEdges.length; i++) { + var edge = allEdges[i]; + if (edge.toId != edge.fromId) { + var otherNode = edge.toId == nodeId ? edge.from : edge.to; + referenceNodes[allEdges[i].id] = otherNode; + if (_this3.hierarchical.levels[otherNode.id] < nodeLevel) { + aboveEdges.push(edge); + } + } + } + + // differentiated sum of lengths based on only moving one node over one axis + var getFx = function getFx(point, edges) { + var sum = 0; + for (var _i2 = 0; _i2 < edges.length; _i2++) { + if (referenceNodes[edges[_i2].id] !== undefined) { + var a = _this3._getPositionForHierarchy(referenceNodes[edges[_i2].id]) - point; + sum += a / Math.sqrt(a * a + C2); + } + } + return sum; + }; + + // doubly differentiated sum of lengths based on only moving one node over one axis + var getDFx = function getDFx(point, edges) { + var sum = 0; + for (var _i3 = 0; _i3 < edges.length; _i3++) { + if (referenceNodes[edges[_i3].id] !== undefined) { + var a = _this3._getPositionForHierarchy(referenceNodes[edges[_i3].id]) - point; + sum -= C2 * Math.pow(a * a + C2, -1.5); + } + } + return sum; + }; + + var getGuess = function getGuess(iterations, edges) { + var guess = _this3._getPositionForHierarchy(node); + // Newton's method for optimization + var guessMap = {}; + for (var _i4 = 0; _i4 < iterations; _i4++) { + var fx = getFx(guess, edges); + var dfx = getDFx(guess, edges); + + // we limit the movement to avoid instability. + var limit = 40; + var ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx))); + guess = guess - ratio; + // reduce duplicates + if (guessMap[guess] !== undefined) { + break; + } + guessMap[guess] = _i4; + } + return guess; + }; + + var moveBranch = function moveBranch(guess) { + // position node if there is space + var nodePosition = _this3._getPositionForHierarchy(node); + + // check movable area of the branch + if (branches[node.id] === undefined) { + var branchNodes = {}; + getBranchNodes(node, branchNodes); + branches[node.id] = branchNodes; + } + + var _getBranchBoundary5 = getBranchBoundary(branches[node.id]), + _getBranchBoundary6 = (0, _slicedToArray3['default'])(_getBranchBoundary5, 4), + minBranch = _getBranchBoundary6[0], + maxBranch = _getBranchBoundary6[1], + minSpaceBranch = _getBranchBoundary6[2], + maxSpaceBranch = _getBranchBoundary6[3]; + + var diff = guess - nodePosition; + + // check if we are allowed to move the node: + var branchOffset = 0; + if (diff > 0) { + branchOffset = Math.min(diff, maxSpaceBranch - _this3.options.hierarchical.nodeSpacing); + } else if (diff < 0) { + branchOffset = -Math.min(-diff, minSpaceBranch - _this3.options.hierarchical.nodeSpacing); + } + + if (branchOffset != 0) { + //console.log("moving branch:",branchOffset, maxSpaceBranch, minSpaceBranch) + _this3._shiftBlock(node.id, branchOffset); + //this.body.emitter.emit("_redraw"); + stillShifting = true; + } + }; + + var moveNode = function moveNode(guess) { + var nodePosition = _this3._getPositionForHierarchy(node); + + // position node if there is space + + var _getSpaceAroundNode4 = _this3._getSpaceAroundNode(node), + _getSpaceAroundNode5 = (0, _slicedToArray3['default'])(_getSpaceAroundNode4, 2), + minSpace = _getSpaceAroundNode5[0], + maxSpace = _getSpaceAroundNode5[1]; + + var diff = guess - nodePosition; + // check if we are allowed to move the node: + var newPosition = nodePosition; + if (diff > 0) { + newPosition = Math.min(nodePosition + (maxSpace - _this3.options.hierarchical.nodeSpacing), guess); + } else if (diff < 0) { + newPosition = Math.max(nodePosition - (minSpace - _this3.options.hierarchical.nodeSpacing), guess); + } + + if (newPosition !== nodePosition) { + //console.log("moving Node:",diff, minSpace, maxSpace); + _this3._setPositionForHierarchy(node, newPosition, undefined, true); + //this.body.emitter.emit("_redraw"); + stillShifting = true; + } + }; + + var guess = getGuess(iterations, aboveEdges); + moveBranch(guess); + guess = getGuess(iterations, allEdges); + moveNode(guess); + //}) + }; + + // method to remove whitespace between branches. Because we do bottom up, we can center the parents. + var minimizeEdgeLengthBottomUp = function minimizeEdgeLengthBottomUp(iterations) { + var levels = (0, _keys2['default'])(_this3.distributionOrdering); + levels = levels.reverse(); + for (var i = 0; i < iterations; i++) { + stillShifting = false; + for (var j = 0; j < levels.length; j++) { + var level = levels[j]; + var levelNodes = _this3.distributionOrdering[level]; + for (var k = 0; k < levelNodes.length; k++) { + minimizeEdgeLength(1000, levelNodes[k]); + } + } + if (stillShifting !== true) { + //console.log("FINISHED minimizeEdgeLengthBottomUp IN " + i); + break; + } + } + }; + + // method to remove whitespace between branches. Because we do bottom up, we can center the parents. + var shiftBranchesCloserBottomUp = function shiftBranchesCloserBottomUp(iterations) { + var levels = (0, _keys2['default'])(_this3.distributionOrdering); + levels = levels.reverse(); + for (var i = 0; i < iterations; i++) { + stillShifting = false; + shiftElementsCloser(branchShiftCallback, levels, true); + if (stillShifting !== true) { + //console.log("FINISHED shiftBranchesCloserBottomUp IN " + (i+1)); + break; + } + } + }; + + // center all parents + var centerAllParents = function centerAllParents() { + for (var nodeId in _this3.body.nodes) { + if (_this3.body.nodes.hasOwnProperty(nodeId)) _this3._centerParent(_this3.body.nodes[nodeId]); + } + }; + + // center all parents + var centerAllParentsBottomUp = function centerAllParentsBottomUp() { + var levels = (0, _keys2['default'])(_this3.distributionOrdering); + levels = levels.reverse(); + for (var i = 0; i < levels.length; i++) { + var level = levels[i]; + var levelNodes = _this3.distributionOrdering[level]; + for (var j = 0; j < levelNodes.length; j++) { + _this3._centerParent(levelNodes[j]); + } + } + }; + + // the actual work is done here. + if (this.options.hierarchical.blockShifting === true) { + shiftBranchesCloserBottomUp(5); + centerAllParents(); + } + + // minimize edge length + if (this.options.hierarchical.edgeMinimization === true) { + minimizeEdgeLengthBottomUp(20); + } + + if (this.options.hierarchical.parentCentralization === true) { + centerAllParentsBottomUp(); + } + + shiftTrees(); + } + + /** + * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map. + * This is used to only get the distances to nodes outside of a branch. + * @param node + * @param map + * @returns {*[]} + * @private + */ + + }, { + key: '_getSpaceAroundNode', + value: function _getSpaceAroundNode(node, map) { + var useMap = true; + if (map === undefined) { + useMap = false; + } + var level = this.hierarchical.levels[node.id]; + if (level !== undefined) { + var index = this.distributionIndex[node.id]; + var position = this._getPositionForHierarchy(node); + var minSpace = 1e9; + var maxSpace = 1e9; + if (index !== 0) { + var prevNode = this.distributionOrdering[level][index - 1]; + if (useMap === true && map[prevNode.id] === undefined || useMap === false) { + var prevPos = this._getPositionForHierarchy(prevNode); + minSpace = position - prevPos; + } + } + + if (index != this.distributionOrdering[level].length - 1) { + var nextNode = this.distributionOrdering[level][index + 1]; + if (useMap === true && map[nextNode.id] === undefined || useMap === false) { + var nextPos = this._getPositionForHierarchy(nextNode); + maxSpace = Math.min(maxSpace, nextPos - position); + } + } + + return [minSpace, maxSpace]; + } else { + return [0, 0]; + } + } + + /** + * We use this method to center a parent node and check if it does not cross other nodes when it does. + * @param node + * @private + */ + + }, { + key: '_centerParent', + value: function _centerParent(node) { + if (this.hierarchical.parentReference[node.id]) { + var parents = this.hierarchical.parentReference[node.id]; + for (var i = 0; i < parents.length; i++) { + var parentId = parents[i]; + var parentNode = this.body.nodes[parentId]; + if (this.hierarchical.childrenReference[parentId]) { + // get the range of the children + var minPos = 1e9; + var maxPos = -1e9; + var children = this.hierarchical.childrenReference[parentId]; + if (children.length > 0) { + for (var _i5 = 0; _i5 < children.length; _i5++) { + var childNode = this.body.nodes[children[_i5]]; + minPos = Math.min(minPos, this._getPositionForHierarchy(childNode)); + maxPos = Math.max(maxPos, this._getPositionForHierarchy(childNode)); + } + } + + var position = this._getPositionForHierarchy(parentNode); + + var _getSpaceAroundNode6 = this._getSpaceAroundNode(parentNode), + _getSpaceAroundNode7 = (0, _slicedToArray3['default'])(_getSpaceAroundNode6, 2), + minSpace = _getSpaceAroundNode7[0], + maxSpace = _getSpaceAroundNode7[1]; + + var newPosition = 0.5 * (minPos + maxPos); + var diff = position - newPosition; + if (diff < 0 && Math.abs(diff) < maxSpace - this.options.hierarchical.nodeSpacing || diff > 0 && Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing) { + this._setPositionForHierarchy(parentNode, newPosition, undefined, true); + } + } + } + } + } + + /** + * This function places the nodes on the canvas based on the hierarchial distribution. + * + * @param {Object} distribution | obtained by the function this._getDistribution() + * @private + */ + + }, { + key: '_placeNodesByHierarchy', + value: function _placeNodesByHierarchy(distribution) { + this.positionedNodes = {}; + // start placing all the level 0 nodes first. Then recursively position their branches. + for (var level in distribution) { + if (distribution.hasOwnProperty(level)) { + // sort nodes in level by position: + var nodeArray = (0, _keys2['default'])(distribution[level]); + nodeArray = this._indexArrayToNodes(nodeArray); + this._sortNodeArray(nodeArray); + var handledNodeCount = 0; + + for (var i = 0; i < nodeArray.length; i++) { + var node = nodeArray[i]; + if (this.positionedNodes[node.id] === undefined) { + var pos = this.options.hierarchical.nodeSpacing * handledNodeCount; + // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y + if (handledNodeCount > 0) { + pos = this._getPositionForHierarchy(nodeArray[i - 1]) + this.options.hierarchical.nodeSpacing; + } + this._setPositionForHierarchy(node, pos, level); + this._validatePositionAndContinue(node, level, pos); + + handledNodeCount++; + } + } + } + } + } + + /** + * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes + * on a X position that ensures there will be no overlap. + * + * @param parentId + * @param parentLevel + * @private + */ + + }, { + key: '_placeBranchNodes', + value: function _placeBranchNodes(parentId, parentLevel) { + // if this is not a parent, cancel the placing. This can happen with multiple parents to one child. + if (this.hierarchical.childrenReference[parentId] === undefined) { + return; + } + + // get a list of childNodes + var childNodes = []; + for (var i = 0; i < this.hierarchical.childrenReference[parentId].length; i++) { + childNodes.push(this.body.nodes[this.hierarchical.childrenReference[parentId][i]]); + } + + // use the positions to order the nodes. + this._sortNodeArray(childNodes); + + // position the childNodes + for (var _i6 = 0; _i6 < childNodes.length; _i6++) { + var childNode = childNodes[_i6]; + var childNodeLevel = this.hierarchical.levels[childNode.id]; + // check if the child node is below the parent node and if it has already been positioned. + if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) { + // get the amount of space required for this node. If parent the width is based on the amount of children. + var pos = void 0; + + // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y + if (_i6 === 0) { + pos = this._getPositionForHierarchy(this.body.nodes[parentId]); + } else { + pos = this._getPositionForHierarchy(childNodes[_i6 - 1]) + this.options.hierarchical.nodeSpacing; + } + this._setPositionForHierarchy(childNode, pos, childNodeLevel); + this._validatePositionAndContinue(childNode, childNodeLevel, pos); + } else { + return; + } + } + + // center the parent nodes. + var minPos = 1e9; + var maxPos = -1e9; + for (var _i7 = 0; _i7 < childNodes.length; _i7++) { + var childNodeId = childNodes[_i7].id; + minPos = Math.min(minPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); + maxPos = Math.max(maxPos, this._getPositionForHierarchy(this.body.nodes[childNodeId])); + } + this._setPositionForHierarchy(this.body.nodes[parentId], 0.5 * (minPos + maxPos), parentLevel); + } + + /** + * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes. + * Finally it will call _placeBranchNodes to place the branch nodes. + * @param node + * @param level + * @param pos + * @private + */ + + }, { + key: '_validatePositionAndContinue', + value: function _validatePositionAndContinue(node, level, pos) { + // This only works for strict hierarchical networks, i.e. trees and forests + // Early exit if this is not the case + if (!this.hierarchical.isTree) return; + + // if overlap has been detected, we shift the branch + if (this.lastNodeOnLevel[level] !== undefined) { + var previousPos = this._getPositionForHierarchy(this.body.nodes[this.lastNodeOnLevel[level]]); + if (pos - previousPos < this.options.hierarchical.nodeSpacing) { + var diff = previousPos + this.options.hierarchical.nodeSpacing - pos; + var sharedParent = this._findCommonParent(this.lastNodeOnLevel[level], node.id); + this._shiftBlock(sharedParent.withChild, diff); + } + } + + // store change in position. + this.lastNodeOnLevel[level] = node.id; + + this.positionedNodes[node.id] = true; + + this._placeBranchNodes(node.id, level); + } + + /** + * Receives an array with node indices and returns an array with the actual node references. Used for sorting based on + * node properties. + * @param idArray + */ + + }, { + key: '_indexArrayToNodes', + value: function _indexArrayToNodes(idArray) { + var array = []; + for (var i = 0; i < idArray.length; i++) { + array.push(this.body.nodes[idArray[i]]); + } + return array; + } + + /** + * This function get the distribution of levels based on hubsize + * + * @returns {Object} + * @private + */ + + }, { + key: '_getDistribution', + value: function _getDistribution() { + var distribution = {}; + var nodeId = void 0, + node = void 0; + + // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. + // the fix of X is removed after the x value has been set. + for (nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + node = this.body.nodes[nodeId]; + var level = this.hierarchical.levels[nodeId] === undefined ? 0 : this.hierarchical.levels[nodeId]; + if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { + node.y = this.options.hierarchical.levelSeparation * level; + node.options.fixed.y = true; + } else { + node.x = this.options.hierarchical.levelSeparation * level; + node.options.fixed.x = true; + } + if (distribution[level] === undefined) { + distribution[level] = {}; + } + distribution[level][nodeId] = node; + } + } + return distribution; + } + + /** + * Get the hubsize from all remaining unlevelled nodes. + * + * @returns {number} + * @private + */ + + }, { + key: '_getHubSize', + value: function _getHubSize() { + var hubSize = 0; + for (var nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + var node = this.body.nodes[nodeId]; + if (this.hierarchical.levels[nodeId] === undefined) { + hubSize = node.edges.length < hubSize ? hubSize : node.edges.length; + } + } + } + return hubSize; + } + + /** + * this function allocates nodes in levels based on the recursive branching from the largest hubs. + * + * @param hubsize + * @private + */ + + }, { + key: '_determineLevelsByHubsize', + value: function _determineLevelsByHubsize() { + var _this4 = this; + + var hubSize = 1; + + var levelDownstream = function levelDownstream(nodeA, nodeB) { + _this4.hierarchical.levelDownstream(nodeA, nodeB); + }; + + while (hubSize > 0) { + // determine hubs + hubSize = this._getHubSize(); + if (hubSize === 0) break; + + for (var nodeId in this.body.nodes) { + if (this.body.nodes.hasOwnProperty(nodeId)) { + var node = this.body.nodes[nodeId]; + if (node.edges.length === hubSize) { + this._crawlNetwork(levelDownstream, nodeId); + } + } + } + } + } + + /** + * TODO: release feature + * TODO: Determine if this feature is needed at all + * + * @private + */ + + }, { + key: '_determineLevelsCustomCallback', + value: function _determineLevelsCustomCallback() { + var _this5 = this; + + var minLevel = 100000; + + // TODO: this should come from options. + var customCallback = function customCallback(nodeA, nodeB, edge) {}; + + // TODO: perhaps move to HierarchicalStatus. + // But I currently don't see the point, this method is not used. + var levelByDirection = function levelByDirection(nodeA, nodeB, edge) { + var levelA = _this5.hierarchical.levels[nodeA.id]; + // set initial level + if (levelA === undefined) { + _this5.hierarchical.levels[nodeA.id] = minLevel; + } + + var diff = customCallback(NetworkUtil.cloneOptions(nodeA, 'node'), NetworkUtil.cloneOptions(nodeB, 'node'), NetworkUtil.cloneOptions(edge, 'edge')); + + _this5.hierarchical.levels[nodeB.id] = _this5.hierarchical.levels[nodeA.id] + diff; + }; + + this._crawlNetwork(levelByDirection); + this.hierarchical.setMinLevelToZero(this.body.nodes); + } + + /** + * this function allocates nodes in levels based on the direction of the edges + * + * @param hubsize + * @private + */ + + }, { + key: '_determineLevelsDirected', + value: function _determineLevelsDirected() { + var _this6 = this; + + var minLevel = 10000; + + var levelByDirection = function levelByDirection(nodeA, nodeB, edge) { + var levelA = _this6.hierarchical.levels[nodeA.id]; + // set initial level + if (levelA === undefined) { + _this6.hierarchical.levels[nodeA.id] = minLevel; + } + if (edge.toId == nodeB.id) { + _this6.hierarchical.levels[nodeB.id] = _this6.hierarchical.levels[nodeA.id] + 1; + } else { + _this6.hierarchical.levels[nodeB.id] = _this6.hierarchical.levels[nodeA.id] - 1; + } + }; + + this._crawlNetwork(levelByDirection); + this.hierarchical.setMinLevelToZero(this.body.nodes); + } + + /** + * Update the bookkeeping of parent and child. + * @private + */ + + }, { + key: '_generateMap', + value: function _generateMap() { + var _this7 = this; + + var fillInRelations = function fillInRelations(parentNode, childNode) { + if (_this7.hierarchical.levels[childNode.id] > _this7.hierarchical.levels[parentNode.id]) { + _this7.hierarchical.addRelation(parentNode.id, childNode.id); + } + }; + + this._crawlNetwork(fillInRelations); + this.hierarchical.checkIfTree(); + } + + /** + * Crawl over the entire network and use a callback on each node couple that is connected to each other. + * @param callback | will receive nodeA nodeB and the connecting edge. A and B are unique. + * @param startingNodeId + * @private + */ + + }, { + key: '_crawlNetwork', + value: function _crawlNetwork() { + var _this8 = this; + + var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; + var startingNodeId = arguments[1]; + + var progress = {}; + var treeIndex = 0; + + var crawler = function crawler(node, tree) { + if (progress[node.id] === undefined) { + + if (_this8.hierarchical.trees[node.id] === undefined) { + _this8.hierarchical.trees[node.id] = tree; + _this8.treeIndex = Math.max(tree, _this8.treeIndex); + } + + progress[node.id] = true; + var childNode = void 0; + for (var i = 0; i < node.edges.length; i++) { + if (node.edges[i].connected === true) { + if (node.edges[i].toId === node.id) { + childNode = node.edges[i].from; + } else { + childNode = node.edges[i].to; + } + + if (node.id !== childNode.id) { + callback(node, childNode, node.edges[i]); + crawler(childNode, tree); + } + } + } + } + }; + + // we can crawl from a specific node or over all nodes. + if (startingNodeId === undefined) { + for (var i = 0; i < this.body.nodeIndices.length; i++) { + var node = this.body.nodes[this.body.nodeIndices[i]]; + if (progress[node.id] === undefined) { + crawler(node, treeIndex); + treeIndex += 1; + } + } + } else { + var _node = this.body.nodes[startingNodeId]; + if (_node === undefined) { + console.error("Node not found:", startingNodeId); + return; + } + crawler(_node); + } + } + + /** + * Shift a branch a certain distance + * @param parentId + * @param diff + * @private + */ + + }, { + key: '_shiftBlock', + value: function _shiftBlock(parentId, diff) { + var _this9 = this; + + var progress = {}; + var shifter = function shifter(parentId) { + if (progress[parentId]) { + return; + } + progress[parentId] = true; + if (_this9.options.hierarchical.direction === 'UD' || _this9.options.hierarchical.direction === 'DU') { + _this9.body.nodes[parentId].x += diff; + } else { + _this9.body.nodes[parentId].y += diff; + } + if (_this9.hierarchical.childrenReference[parentId] !== undefined) { + for (var i = 0; i < _this9.hierarchical.childrenReference[parentId].length; i++) { + shifter(_this9.hierarchical.childrenReference[parentId][i]); + } + } + }; + shifter(parentId); + } + + /** + * Find a common parent between branches. + * @param childA + * @param childB + * @returns {{foundParent, withChild}} + * @private + */ + + }, { + key: '_findCommonParent', + value: function _findCommonParent(childA, childB) { + var _this10 = this; + + var parents = {}; + var iterateParents = function iterateParents(parents, child) { + if (_this10.hierarchical.parentReference[child] !== undefined) { + for (var i = 0; i < _this10.hierarchical.parentReference[child].length; i++) { + var parent = _this10.hierarchical.parentReference[child][i]; + parents[parent] = true; + iterateParents(parents, parent); + } + } + }; + var findParent = function findParent(parents, child) { + if (_this10.hierarchical.parentReference[child] !== undefined) { + for (var i = 0; i < _this10.hierarchical.parentReference[child].length; i++) { + var parent = _this10.hierarchical.parentReference[child][i]; + if (parents[parent] !== undefined) { + return { foundParent: parent, withChild: child }; + } + var branch = findParent(parents, parent); + if (branch.foundParent !== null) { + return branch; + } + } + } + return { foundParent: null, withChild: child }; + }; + + iterateParents(parents, childA); + return findParent(parents, childB); + } + + /** + * Abstract the getting of the position so we won't have to repeat the check for direction all the time + * @param node + * @param position + * @param level + * @private + */ + + }, { + key: '_setPositionForHierarchy', + value: function _setPositionForHierarchy(node, position, level) { + var doNotUpdate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + //console.log('_setPositionForHierarchy',node.id, position) + if (doNotUpdate !== true) { + if (this.distributionOrdering[level] === undefined) { + this.distributionOrdering[level] = []; + this.distributionOrderingPresence[level] = {}; + } + + if (this.distributionOrderingPresence[level][node.id] === undefined) { + this.distributionOrdering[level].push(node); + this.distributionIndex[node.id] = this.distributionOrdering[level].length - 1; + } + this.distributionOrderingPresence[level][node.id] = true; + } + + if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { + node.x = position; + } else { + node.y = position; + } + } + + /** + * Utility function to cut down on typing this all the time. + * + * TODO: use this in all applicable situations in this class. + * + * @private + */ + + }, { + key: '_isVertical', + value: function _isVertical() { + return this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU'; + } + + /** + * Abstract the getting of the position of a node so we do not have to repeat the direction check all the time. + * @param node + * @returns {number|*} + * @private + */ + + }, { + key: '_getPositionForHierarchy', + value: function _getPositionForHierarchy(node) { + if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { + return node.x; + } else { + return node.y; + } + } + + /** + * Use the x or y value to sort the array, allowing users to specify order. + * @param nodeArray + * @private + */ + + }, { + key: '_sortNodeArray', + value: function _sortNodeArray(nodeArray) { + if (nodeArray.length > 1) { + if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') { + nodeArray.sort(function (a, b) { + return a.x - b.x; + }); + } else { + nodeArray.sort(function (a, b) { + return a.y - b.y; + }); + } + } + } + }]); + return LayoutEngine; + }(); + + exports['default'] = LayoutEngine; + +/***/ }), +/* 228 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + + var _keys = __webpack_require__(58); + + var _keys2 = _interopRequireDefault(_keys); + + var _stringify = __webpack_require__(90); + + var _stringify2 = _interopRequireDefault(_stringify); + + var _typeof2 = __webpack_require__(62); + + var _typeof3 = _interopRequireDefault(_typeof2); + + var _classCallCheck2 = __webpack_require__(134); + + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + + var _createClass2 = __webpack_require__(135); + + var _createClass3 = _interopRequireDefault(_createClass2); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var util = __webpack_require__(1); + var Hammer = __webpack_require__(112); + var hammerUtil = __webpack_require__(119); + + /** + * clears the toolbar div element of children + * + * @private + */ + + var ManipulationSystem = function () { + function ManipulationSystem(body, canvas, selectionHandler) { + var _this = this; + + (0, _classCallCheck3['default'])(this, ManipulationSystem); + + this.body = body; + this.canvas = canvas; + this.selectionHandler = selectionHandler; + + this.editMode = false; + this.manipulationDiv = undefined; + this.editModeDiv = undefined; + this.closeDiv = undefined; + + this.manipulationHammers = []; + this.temporaryUIFunctions = {}; + this.temporaryEventFunctions = []; + + this.touchTime = 0; + this.temporaryIds = { nodes: [], edges: [] }; + this.guiEnabled = false; + this.inMode = false; + this.selectedControlNode = undefined; + + this.options = {}; + this.defaultOptions = { + enabled: false, + initiallyActive: false, + addNode: true, + addEdge: true, + editNode: undefined, + editEdge: true, + deleteNode: true, + deleteEdge: true, + controlNodeStyle: { + shape: 'dot', + size: 6, + color: { background: '#ff0000', border: '#3c3c3c', highlight: { background: '#07f968', border: '#3c3c3c' } }, + borderWidth: 2, + borderWidthSelected: 2 + } + }; + util.extend(this.options, this.defaultOptions); + + this.body.emitter.on('destroy', function () { + _this._clean(); + }); + this.body.emitter.on('_dataChanged', this._restore.bind(this)); + this.body.emitter.on('_resetData', this._restore.bind(this)); + } + + /** + * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes. + * @private + */ + + + (0, _createClass3['default'])(ManipulationSystem, [{ + key: '_restore', + value: function _restore() { + if (this.inMode !== false) { + if (this.options.initiallyActive === true) { + this.enableEditMode(); + } else { + this.disableEditMode(); + } + } + } + + /** + * Set the Options + * @param options + */ + + }, { + key: 'setOptions', + value: function setOptions(options, allOptions, globalOptions) { + if (allOptions !== undefined) { + if (allOptions.locale !== undefined) { + this.options.locale = allOptions.locale; + } else { + this.options.locale = globalOptions.locale; + } + if (allOptions.locales !== undefined) { + this.options.locales = allOptions.locales; + } else { + this.options.locales = globalOptions.locales; + } + } + + if (options !== undefined) { + if (typeof options === 'boolean') { + this.options.enabled = options; + } else { + this.options.enabled = true; + util.deepExtend(this.options, options); + } + if (this.options.initiallyActive === true) { + this.editMode = true; + } + this._setup(); + } + } + + /** + * Enable or disable edit-mode. Draws the DOM required and cleans up after itself. + * + * @private + */ + + }, { + key: 'toggleEditMode', + value: function toggleEditMode() { + if (this.editMode === true) { + this.disableEditMode(); + } else { + this.enableEditMode(); + } + } + }, { + key: 'enableEditMode', + value: function enableEditMode() { + this.editMode = true; + + this._clean(); + if (this.guiEnabled === true) { + this.manipulationDiv.style.display = 'block'; + this.closeDiv.style.display = 'block'; + this.editModeDiv.style.display = 'none'; + this.showManipulatorToolbar(); + } + } + }, { + key: 'disableEditMode', + value: function disableEditMode() { + this.editMode = false; + + this._clean(); + if (this.guiEnabled === true) { + this.manipulationDiv.style.display = 'none'; + this.closeDiv.style.display = 'none'; + this.editModeDiv.style.display = 'block'; + this._createEditButton(); + } + } + + /** + * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. + * + * @private + */ + + }, { + key: 'showManipulatorToolbar', + value: function showManipulatorToolbar() { + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + + // reset global variables + this.manipulationDOM = {}; + + // if the gui is enabled, draw all elements. + if (this.guiEnabled === true) { + // a _restore will hide these menus + this.editMode = true; + this.manipulationDiv.style.display = 'block'; + this.closeDiv.style.display = 'block'; + + var selectedNodeCount = this.selectionHandler._getSelectedNodeCount(); + var selectedEdgeCount = this.selectionHandler._getSelectedEdgeCount(); + var selectedTotalCount = selectedNodeCount + selectedEdgeCount; + var locale = this.options.locales[this.options.locale]; + var needSeperator = false; + + if (this.options.addNode !== false) { + this._createAddNodeButton(locale); + needSeperator = true; + } + if (this.options.addEdge !== false) { + if (needSeperator === true) { + this._createSeperator(1); + } else { + needSeperator = true; + } + this._createAddEdgeButton(locale); + } + + if (selectedNodeCount === 1 && typeof this.options.editNode === 'function') { + if (needSeperator === true) { + this._createSeperator(2); + } else { + needSeperator = true; + } + this._createEditNodeButton(locale); + } else if (selectedEdgeCount === 1 && selectedNodeCount === 0 && this.options.editEdge !== false) { + if (needSeperator === true) { + this._createSeperator(3); + } else { + needSeperator = true; + } + this._createEditEdgeButton(locale); + } + + // remove buttons + if (selectedTotalCount !== 0) { + if (selectedNodeCount > 0 && this.options.deleteNode !== false) { + if (needSeperator === true) { + this._createSeperator(4); + } + this._createDeleteButton(locale); + } else if (selectedNodeCount === 0 && this.options.deleteEdge !== false) { + if (needSeperator === true) { + this._createSeperator(4); + } + this._createDeleteButton(locale); + } + } + + // bind the close button + this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + + // refresh this bar based on what has been selected + this._temporaryBindEvent('select', this.showManipulatorToolbar.bind(this)); + } + + // redraw to show any possible changes + this.body.emitter.emit('_redraw'); + } + + /** + * Create the toolbar for adding Nodes + */ + + }, { + key: 'addNodeMode', + value: function addNodeMode() { + // when using the gui, enable edit mode if it wasnt already. + if (this.editMode !== true) { + this.enableEditMode(); + } + + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + + this.inMode = 'addNode'; + if (this.guiEnabled === true) { + var locale = this.options.locales[this.options.locale]; + this.manipulationDOM = {}; + this._createBackButton(locale); + this._createSeperator(); + this._createDescription(locale['addDescription'] || this.options.locales['en']['addDescription']); + + // bind the close button + this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + } + + this._temporaryBindEvent('click', this._performAddNode.bind(this)); + } + + /** + * call the bound function to handle the editing of the node. The node has to be selected. + */ + + }, { + key: 'editNode', + value: function editNode() { + var _this2 = this; + + // when using the gui, enable edit mode if it wasnt already. + if (this.editMode !== true) { + this.enableEditMode(); + } + + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + var node = this.selectionHandler._getSelectedNode(); + if (node !== undefined) { + this.inMode = 'editNode'; + if (typeof this.options.editNode === 'function') { + if (node.isCluster !== true) { + var data = util.deepExtend({}, node.options, false); + data.x = node.x; + data.y = node.y; + + if (this.options.editNode.length === 2) { + this.options.editNode(data, function (finalizedData) { + if (finalizedData !== null && finalizedData !== undefined && _this2.inMode === 'editNode') { + // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { + _this2.body.data.nodes.getDataSet().update(finalizedData); + } + _this2.showManipulatorToolbar(); + }); + } else { + throw new Error('The function for edit does not support two arguments (data, callback)'); + } + } else { + alert(this.options.locales[this.options.locale]['editClusterError'] || this.options.locales['en']['editClusterError']); + } + } else { + throw new Error('No function has been configured to handle the editing of nodes.'); + } + } else { + this.showManipulatorToolbar(); + } + } + + /** + * create the toolbar to connect nodes + */ + + }, { + key: 'addEdgeMode', + value: function addEdgeMode() { + // when using the gui, enable edit mode if it wasnt already. + if (this.editMode !== true) { + this.enableEditMode(); + } + + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + + this.inMode = 'addEdge'; + if (this.guiEnabled === true) { + var locale = this.options.locales[this.options.locale]; + this.manipulationDOM = {}; + this._createBackButton(locale); + this._createSeperator(); + this._createDescription(locale['edgeDescription'] || this.options.locales['en']['edgeDescription']); + + // bind the close button + this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + } + + // temporarily overload functions + 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 () {}); + } + + /** + * create the toolbar to edit edges + */ + + }, { + key: 'editEdgeMode', + value: function editEdgeMode() { + // when using the gui, enable edit mode if it wasn't already. + if (this.editMode !== true) { + this.enableEditMode(); + } + + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + + this.inMode = 'editEdge'; + if ((0, _typeof3['default'])(this.options.editEdge) === 'object' && typeof this.options.editEdge.editWithoutDrag === "function") { + this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0]; + if (this.edgeBeingEditedId !== undefined) { + var edge = this.body.edges[this.edgeBeingEditedId]; + this._performEditEdge(edge.from, edge.to); + return; + } + } + if (this.guiEnabled === true) { + var locale = this.options.locales[this.options.locale]; + this.manipulationDOM = {}; + this._createBackButton(locale); + this._createSeperator(); + this._createDescription(locale['editEdgeDescription'] || this.options.locales['en']['editEdgeDescription']); + + // bind the close button + this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this)); + } + + this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0]; + if (this.edgeBeingEditedId !== undefined) { + var _edge = this.body.edges[this.edgeBeingEditedId]; + + // create control nodes + var controlNodeFrom = this._getNewTargetNode(_edge.from.x, _edge.from.y); + var controlNodeTo = this._getNewTargetNode(_edge.to.x, _edge.to.y); + + this.temporaryIds.nodes.push(controlNodeFrom.id); + this.temporaryIds.nodes.push(controlNodeTo.id); + + this.body.nodes[controlNodeFrom.id] = controlNodeFrom; + this.body.nodeIndices.push(controlNodeFrom.id); + this.body.nodes[controlNodeTo.id] = controlNodeTo; + this.body.nodeIndices.push(controlNodeTo.id); + + // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI + this._temporaryBindUI('onTouch', this._controlNodeTouch.bind(this)); // used to get the position + this._temporaryBindUI('onTap', function () {}); // disabled + this._temporaryBindUI('onHold', function () {}); // disabled + this._temporaryBindUI('onDragStart', this._controlNodeDragStart.bind(this)); // used to select control node + this._temporaryBindUI('onDrag', this._controlNodeDrag.bind(this)); // used to drag control node + this._temporaryBindUI('onDragEnd', this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes + this._temporaryBindUI('onMouseMove', function () {}); // disabled + + // create function to position control nodes correctly on movement + // automatically cleaned up because we use the temporary bind + this._temporaryBindEvent('beforeDrawing', function (ctx) { + var positions = _edge.edgeType.findBorderPositions(ctx); + if (controlNodeFrom.selected === false) { + controlNodeFrom.x = positions.from.x; + controlNodeFrom.y = positions.from.y; + } + if (controlNodeTo.selected === false) { + controlNodeTo.x = positions.to.x; + controlNodeTo.y = positions.to.y; + } + }); + + this.body.emitter.emit('_redraw'); + } else { + this.showManipulatorToolbar(); + } + } + + /** + * delete everything in the selection + */ + + }, { + key: 'deleteSelected', + value: function deleteSelected() { + var _this3 = this; + + // when using the gui, enable edit mode if it wasnt already. + if (this.editMode !== true) { + this.enableEditMode(); + } + + // restore the state of any bound functions or events, remove control nodes, restore physics + this._clean(); + + this.inMode = 'delete'; + var selectedNodes = this.selectionHandler.getSelectedNodes(); + var selectedEdges = this.selectionHandler.getSelectedEdges(); + var deleteFunction = undefined; + if (selectedNodes.length > 0) { + for (var i = 0; i < selectedNodes.length; i++) { + if (this.body.nodes[selectedNodes[i]].isCluster === true) { + alert(this.options.locales[this.options.locale]['deleteClusterError'] || this.options.locales['en']['deleteClusterError']); + return; + } + } + + if (typeof this.options.deleteNode === 'function') { + deleteFunction = this.options.deleteNode; + } + } else if (selectedEdges.length > 0) { + if (typeof this.options.deleteEdge === 'function') { + deleteFunction = this.options.deleteEdge; + } + } + + if (typeof deleteFunction === 'function') { + var data = { nodes: selectedNodes, edges: selectedEdges }; + if (deleteFunction.length === 2) { + deleteFunction(data, function (finalizedData) { + if (finalizedData !== null && finalizedData !== undefined && _this3.inMode === 'delete') { + // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { + _this3.body.data.edges.getDataSet().remove(finalizedData.edges); + _this3.body.data.nodes.getDataSet().remove(finalizedData.nodes); + _this3.body.emitter.emit('startSimulation'); + _this3.showManipulatorToolbar(); + } else { + _this3.body.emitter.emit('startSimulation'); + _this3.showManipulatorToolbar(); + } + }); + } else { + throw new Error('The function for delete does not support two arguments (data, callback)'); + } + } else { + this.body.data.edges.getDataSet().remove(selectedEdges); + this.body.data.nodes.getDataSet().remove(selectedNodes); + this.body.emitter.emit('startSimulation'); + this.showManipulatorToolbar(); + } + } + + //********************************************** PRIVATE ***************************************// + + /** + * draw or remove the DOM + * @private + */ + + }, { + key: '_setup', + value: function _setup() { + if (this.options.enabled === true) { + // Enable the GUI + this.guiEnabled = true; + + this._createWrappers(); + if (this.editMode === false) { + this._createEditButton(); + } else { + this.showManipulatorToolbar(); + } + } else { + this._removeManipulationDOM(); + + // disable the gui + this.guiEnabled = false; + } + } + + /** + * create the div overlays that contain the DOM + * @private + */ + + }, { + key: '_createWrappers', + value: function _createWrappers() { + // load the manipulator HTML elements. All styling done in css. + if (this.manipulationDiv === undefined) { + this.manipulationDiv = document.createElement('div'); + this.manipulationDiv.className = 'vis-manipulation'; + if (this.editMode === true) { + this.manipulationDiv.style.display = 'block'; + } else { + this.manipulationDiv.style.display = 'none'; + } + this.canvas.frame.appendChild(this.manipulationDiv); + } + + // container for the edit button. + if (this.editModeDiv === undefined) { + this.editModeDiv = document.createElement('div'); + this.editModeDiv.className = 'vis-edit-mode'; + if (this.editMode === true) { + this.editModeDiv.style.display = 'none'; + } else { + this.editModeDiv.style.display = 'block'; + } + this.canvas.frame.appendChild(this.editModeDiv); + } + + // container for the close div button + if (this.closeDiv === undefined) { + this.closeDiv = document.createElement('div'); + this.closeDiv.className = 'vis-close'; + this.closeDiv.style.display = this.manipulationDiv.style.display; + this.canvas.frame.appendChild(this.closeDiv); + } + } + + /** + * generate a new target node. Used for creating new edges and editing edges + * @param x + * @param y + * @returns {*} + * @private + */ + + }, { + key: '_getNewTargetNode', + value: function _getNewTargetNode(x, y) { + var controlNodeStyle = util.deepExtend({}, this.options.controlNodeStyle); + + controlNodeStyle.id = 'targetNode' + util.randomUUID(); + controlNodeStyle.hidden = false; + controlNodeStyle.physics = false; + controlNodeStyle.x = x; + controlNodeStyle.y = y; + + // we have to define the bounding box in order for the nodes to be drawn immediately + var node = this.body.functions.createNode(controlNodeStyle); + node.shape.boundingBox = { left: x, right: x, top: y, bottom: y }; + + return node; + } + + /** + * Create the edit button + */ + + }, { + key: '_createEditButton', + value: function _createEditButton() { + // restore everything to it's original state (if applicable) + this._clean(); + + // reset the manipulationDOM + this.manipulationDOM = {}; + + // empty the editModeDiv + util.recursiveDOMDelete(this.editModeDiv); + + // create the contents for the editMode button + var locale = this.options.locales[this.options.locale]; + var button = this._createButton('editMode', 'vis-button vis-edit vis-edit-mode', locale['edit'] || this.options.locales['en']['edit']); + this.editModeDiv.appendChild(button); + + // bind a hammer listener to the button, calling the function toggleEditMode. + this._bindHammerToDiv(button, this.toggleEditMode.bind(this)); + } + + /** + * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed. + * @private + */ + + }, { + key: '_clean', + value: function _clean() { + // not in mode + this.inMode = false; + + // _clean the divs + if (this.guiEnabled === true) { + util.recursiveDOMDelete(this.editModeDiv); + util.recursiveDOMDelete(this.manipulationDiv); + + // removes all the bindings and overloads + this._cleanManipulatorHammers(); + } + + // remove temporary nodes and edges + this._cleanupTemporaryNodesAndEdges(); + + // restore overloaded UI functions + this._unbindTemporaryUIs(); + + // remove the temporaryEventFunctions + this._unbindTemporaryEvents(); + + // restore the physics if required + this.body.emitter.emit('restorePhysics'); + } + + /** + * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up. + * @private + */ + + }, { + key: '_cleanManipulatorHammers', + value: function _cleanManipulatorHammers() { + // _clean hammer bindings + if (this.manipulationHammers.length != 0) { + for (var i = 0; i < this.manipulationHammers.length; i++) { + this.manipulationHammers[i].destroy(); + } + this.manipulationHammers = []; + } + } + + /** + * Remove all DOM elements created by this module. + * @private + */ + + }, { + key: '_removeManipulationDOM', + value: function _removeManipulationDOM() { + // removes all the bindings and overloads + this._clean(); + + // empty the manipulation divs + util.recursiveDOMDelete(this.manipulationDiv); + util.recursiveDOMDelete(this.editModeDiv); + util.recursiveDOMDelete(this.closeDiv); + + // remove the manipulation divs + if (this.manipulationDiv) { + this.canvas.frame.removeChild(this.manipulationDiv); + } + if (this.editModeDiv) { + this.canvas.frame.removeChild(this.editModeDiv); + } + if (this.closeDiv) { + this.canvas.frame.removeChild(this.closeDiv); + } + + // set the references to undefined + this.manipulationDiv = undefined; + this.editModeDiv = undefined; + this.closeDiv = undefined; + } + + /** + * create a seperator line. the index is to differentiate in the manipulation dom + * @param index + * @private + */ + + }, { + key: '_createSeperator', + value: function _createSeperator() { + var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + this.manipulationDOM['seperatorLineDiv' + index] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv' + index].className = 'vis-separator-line'; + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv' + index]); + } + + // ---------------------- DOM functions for buttons --------------------------// + + }, { + key: '_createAddNodeButton', + value: function _createAddNodeButton(locale) { + var button = this._createButton('addNode', 'vis-button vis-add', locale['addNode'] || this.options.locales['en']['addNode']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.addNodeMode.bind(this)); + } + }, { + key: '_createAddEdgeButton', + value: function _createAddEdgeButton(locale) { + var button = this._createButton('addEdge', 'vis-button vis-connect', locale['addEdge'] || this.options.locales['en']['addEdge']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.addEdgeMode.bind(this)); + } + }, { + key: '_createEditNodeButton', + value: function _createEditNodeButton(locale) { + var button = this._createButton('editNode', 'vis-button vis-edit', locale['editNode'] || this.options.locales['en']['editNode']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.editNode.bind(this)); + } + }, { + key: '_createEditEdgeButton', + value: function _createEditEdgeButton(locale) { + var button = this._createButton('editEdge', 'vis-button vis-edit', locale['editEdge'] || this.options.locales['en']['editEdge']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.editEdgeMode.bind(this)); + } + }, { + key: '_createDeleteButton', + value: function _createDeleteButton(locale) { + if (this.options.rtl) { + var deleteBtnClass = 'vis-button vis-delete-rtl'; + } else { + var deleteBtnClass = 'vis-button vis-delete'; + } + var button = this._createButton('delete', deleteBtnClass, locale['del'] || this.options.locales['en']['del']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.deleteSelected.bind(this)); + } + }, { + key: '_createBackButton', + value: function _createBackButton(locale) { + var button = this._createButton('back', 'vis-button vis-back', locale['back'] || this.options.locales['en']['back']); + this.manipulationDiv.appendChild(button); + this._bindHammerToDiv(button, this.showManipulatorToolbar.bind(this)); + } + }, { + key: '_createButton', + value: function _createButton(id, className, label) { + var labelClassName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'vis-label'; + + + this.manipulationDOM[id + 'Div'] = document.createElement('div'); + this.manipulationDOM[id + 'Div'].className = className; + this.manipulationDOM[id + 'Label'] = document.createElement('div'); + this.manipulationDOM[id + 'Label'].className = labelClassName; + this.manipulationDOM[id + 'Label'].innerHTML = label; + this.manipulationDOM[id + 'Div'].appendChild(this.manipulationDOM[id + 'Label']); + return this.manipulationDOM[id + 'Div']; + } + }, { + key: '_createDescription', + value: function _createDescription(label) { + this.manipulationDiv.appendChild(this._createButton('description', 'vis-button vis-none', label)); + } + + // -------------------------- End of DOM functions for buttons ------------------------------// + + /** + * this binds an event until cleanup by the clean functions. + * @param event + * @param newFunction + * @private + */ + + }, { + key: '_temporaryBindEvent', + value: function _temporaryBindEvent(event, newFunction) { + this.temporaryEventFunctions.push({ event: event, boundFunction: newFunction }); + this.body.emitter.on(event, newFunction); + } + + /** + * this overrides an UI function until cleanup by the clean function + * @param UIfunctionName + * @param newFunction + * @private + */ + + }, { + key: '_temporaryBindUI', + value: function _temporaryBindUI(UIfunctionName, newFunction) { + if (this.body.eventListeners[UIfunctionName] !== undefined) { + this.temporaryUIFunctions[UIfunctionName] = this.body.eventListeners[UIfunctionName]; + this.body.eventListeners[UIfunctionName] = newFunction; + } else { + throw new Error('This UI function does not exist. Typo? You tried: ' + UIfunctionName + ' possible are: ' + (0, _stringify2['default'])((0, _keys2['default'])(this.body.eventListeners))); + } + } + + /** + * Restore the overridden UI functions to their original state. + * + * @private + */ + + }, { + key: '_unbindTemporaryUIs', + value: function _unbindTemporaryUIs() { + for (var functionName in this.temporaryUIFunctions) { + if (this.temporaryUIFunctions.hasOwnProperty(functionName)) { + this.body.eventListeners[functionName] = this.temporaryUIFunctions[functionName]; + delete this.temporaryUIFunctions[functionName]; + } + } + this.temporaryUIFunctions = {}; + } + + /** + * Unbind the events created by _temporaryBindEvent + * @private + */ + + }, { + key: '_unbindTemporaryEvents', + value: function _unbindTemporaryEvents() { + for (var i = 0; i < this.temporaryEventFunctions.length; i++) { + var eventName = this.temporaryEventFunctions[i].event; + var boundFunction = this.temporaryEventFunctions[i].boundFunction; + this.body.emitter.off(eventName, boundFunction); + } + this.temporaryEventFunctions = []; + } + + /** + * Bind an hammer instance to a DOM element. + * @param domElement + * @param funct + */ + + }, { + key: '_bindHammerToDiv', + value: function _bindHammerToDiv(domElement, boundFunction) { + var hammer = new Hammer(domElement, {}); + hammerUtil.onTouch(hammer, boundFunction); + this.manipulationHammers.push(hammer); + } + + /** + * Neatly clean up temporary edges and nodes + * @private + */ + + }, { + key: '_cleanupTemporaryNodesAndEdges', + value: function _cleanupTemporaryNodesAndEdges() { + // _clean temporary edges + for (var i = 0; i < this.temporaryIds.edges.length; i++) { + this.body.edges[this.temporaryIds.edges[i]].disconnect(); + delete this.body.edges[this.temporaryIds.edges[i]]; + var indexTempEdge = this.body.edgeIndices.indexOf(this.temporaryIds.edges[i]); + if (indexTempEdge !== -1) { + this.body.edgeIndices.splice(indexTempEdge, 1); + } + } + + // _clean temporary nodes + for (var _i = 0; _i < this.temporaryIds.nodes.length; _i++) { + delete this.body.nodes[this.temporaryIds.nodes[_i]]; + var indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[_i]); + if (indexTempNode !== -1) { + this.body.nodeIndices.splice(indexTempNode, 1); + } + } + + this.temporaryIds = { nodes: [], edges: [] }; + } + + // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------// + + /** + * the touch is used to get the position of the initial click + * @param event + * @private + */ + + }, { + key: '_controlNodeTouch', + value: function _controlNodeTouch(event) { + this.selectionHandler.unselectAll(); + this.lastTouch = this.body.functions.getPointer(event.center); + this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object + } + + /** + * the drag start is used to mark one of the control nodes as selected. + * @param event + * @private + */ + + }, { + key: '_controlNodeDragStart', + value: function _controlNodeDragStart(event) { + var pointer = this.lastTouch; + var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); + var from = this.body.nodes[this.temporaryIds.nodes[0]]; + var to = this.body.nodes[this.temporaryIds.nodes[1]]; + var edge = this.body.edges[this.edgeBeingEditedId]; + this.selectedControlNode = undefined; + + var fromSelect = from.isOverlappingWith(pointerObj); + var toSelect = to.isOverlappingWith(pointerObj); + + if (fromSelect === true) { + this.selectedControlNode = from; + edge.edgeType.from = from; + } else if (toSelect === true) { + this.selectedControlNode = to; + edge.edgeType.to = to; + } + + // we use the selection to find the node that is being dragged. We explicitly select it here. + if (this.selectedControlNode !== undefined) { + this.selectionHandler.selectObject(this.selectedControlNode); + } + + this.body.emitter.emit('_redraw'); + } + + /** + * dragging the control nodes or the canvas + * @param event + * @private + */ + + }, { + key: '_controlNodeDrag', + value: function _controlNodeDrag(event) { + this.body.emitter.emit('disablePhysics'); + var pointer = this.body.functions.getPointer(event.center); + var pos = this.canvas.DOMtoCanvas(pointer); + if (this.selectedControlNode !== undefined) { + this.selectedControlNode.x = pos.x; + this.selectedControlNode.y = pos.y; + } else { + // if the drag was not started properly because the click started outside the network div, start it now. + var diffX = pointer.x - this.lastTouch.x; + var diffY = pointer.y - this.lastTouch.y; + this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY }; + } + this.body.emitter.emit('_redraw'); + } + + /** + * connecting or restoring the control nodes. + * @param event + * @private + */ + + }, { + key: '_controlNodeDragEnd', + value: function _controlNodeDragEnd(event) { + var pointer = this.body.functions.getPointer(event.center); + var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); + var edge = this.body.edges[this.edgeBeingEditedId]; + // if the node that was dragged is not a control node, return + if (this.selectedControlNode === undefined) { + return; + } + + // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here. + this.selectionHandler.unselectAll(); + var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj); + var node = undefined; + for (var i = overlappingNodeIds.length - 1; i >= 0; i--) { + if (overlappingNodeIds[i] !== this.selectedControlNode.id) { + node = this.body.nodes[overlappingNodeIds[i]]; + break; + } + } + // perform the connection + if (node !== undefined && this.selectedControlNode !== undefined) { + if (node.isCluster === true) { + alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); + } else { + var from = this.body.nodes[this.temporaryIds.nodes[0]]; + if (this.selectedControlNode.id === from.id) { + this._performEditEdge(node.id, edge.to.id); + } else { + this._performEditEdge(edge.from.id, node.id); + } + } + } else { + edge.updateEdgeType(); + this.body.emitter.emit('restorePhysics'); + } + this.body.emitter.emit('_redraw'); + } + + // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------// + + + // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------// + /** + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. + * + * @private + */ + + }, { + key: '_handleConnect', + value: function _handleConnect(event) { + // check to avoid double fireing of this function. + if (new Date().valueOf() - this.touchTime > 100) { + this.lastTouch = this.body.functions.getPointer(event.center); + this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object + + var pointer = this.lastTouch; + var node = this.selectionHandler.getNodeAt(pointer); + + if (node !== undefined) { + if (node.isCluster === true) { + alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); + } else { + // create a node the temporary line can look at + var targetNode = this._getNewTargetNode(node.x, node.y); + this.body.nodes[targetNode.id] = targetNode; + this.body.nodeIndices.push(targetNode.id); + + // create a temporary edge + var connectionEdge = this.body.functions.createEdge({ + id: 'connectionEdge' + util.randomUUID(), + from: node.id, + to: targetNode.id, + physics: false, + smooth: { + enabled: true, + type: 'continuous', + roundness: 0.5 + } + }); + this.body.edges[connectionEdge.id] = connectionEdge; + this.body.edgeIndices.push(connectionEdge.id); + + this.temporaryIds.nodes.push(targetNode.id); + this.temporaryIds.edges.push(connectionEdge.id); + } + } + this.touchTime = new Date().valueOf(); + } + } + }, { + key: '_dragControlNode', + value: function _dragControlNode(event) { + var pointer = this.body.functions.getPointer(event.center); + if (this.temporaryIds.nodes[0] !== undefined) { + var targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode. + targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x); + targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y); + this.body.emitter.emit('_redraw'); + } else { + var diffX = pointer.x - this.lastTouch.x; + var diffY = pointer.y - this.lastTouch.y; + this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY }; + } + } + + /** + * Connect the new edge to the target if one exists, otherwise remove temp line + * @param event + * @private + */ + + }, { + key: '_finishConnect', + value: function _finishConnect(event) { + var pointer = this.body.functions.getPointer(event.center); + var pointerObj = this.selectionHandler._pointerToPositionObject(pointer); + + // remember the edge id + var connectFromId = undefined; + if (this.temporaryIds.edges[0] !== undefined) { + connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId; + } + + // get the overlapping node but NOT the temporary node; + var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj); + var node = undefined; + for (var i = overlappingNodeIds.length - 1; i >= 0; i--) { + // if the node id is NOT a temporary node, accept the node. + if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) { + node = this.body.nodes[overlappingNodeIds[i]]; + break; + } + } + + // clean temporary nodes and edges. + this._cleanupTemporaryNodesAndEdges(); + + // perform the connection + if (node !== undefined) { + if (node.isCluster === true) { + alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']); + } else { + if (this.body.nodes[connectFromId] !== undefined && this.body.nodes[node.id] !== undefined) { + this._performAddEdge(connectFromId, node.id); + } + } + } + this.body.emitter.emit('_redraw'); + } + + // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------// + + + // ------------------------------ Performing all the actual data manipulation ------------------------// + + /** + * Adds a node on the specified location + */ + + }, { + key: '_performAddNode', + value: function _performAddNode(clickData) { + var _this4 = this; + + var defaultData = { + id: util.randomUUID(), + x: clickData.pointer.canvas.x, + y: clickData.pointer.canvas.y, + label: 'new' + }; + + if (typeof this.options.addNode === 'function') { + if (this.options.addNode.length === 2) { + this.options.addNode(defaultData, function (finalizedData) { + if (finalizedData !== null && finalizedData !== undefined && _this4.inMode === 'addNode') { + // if for whatever reason the mode has changes (due to dataset change) disregard the callback + _this4.body.data.nodes.getDataSet().add(finalizedData); + _this4.showManipulatorToolbar(); + } + }); + } else { + throw new Error('The function for add does not support two arguments (data,callback)'); + this.showManipulatorToolbar(); + } + } else { + this.body.data.nodes.getDataSet().add(defaultData); + this.showManipulatorToolbar(); + } + } + + /** + * connect two nodes with a new edge. + * + * @private + */ + + }, { + key: '_performAddEdge', + value: function _performAddEdge(sourceNodeId, targetNodeId) { + var _this5 = this; + + var defaultData = { from: sourceNodeId, to: targetNodeId }; + if (typeof this.options.addEdge === 'function') { + if (this.options.addEdge.length === 2) { + this.options.addEdge(defaultData, function (finalizedData) { + if (finalizedData !== null && finalizedData !== undefined && _this5.inMode === 'addEdge') { + // if for whatever reason the mode has changes (due to dataset change) disregard the callback + _this5.body.data.edges.getDataSet().add(finalizedData); + _this5.selectionHandler.unselectAll(); + _this5.showManipulatorToolbar(); + } + }); + } else { + throw new Error('The function for connect does not support two arguments (data,callback)'); + } + } else { + this.body.data.edges.getDataSet().add(defaultData); + this.selectionHandler.unselectAll(); + this.showManipulatorToolbar(); + } + } + + /** + * connect two nodes with a new edge. + * + * @private + */ + + }, { + key: '_performEditEdge', + value: function _performEditEdge(sourceNodeId, targetNodeId) { + var _this6 = this; + + var defaultData = { id: this.edgeBeingEditedId, from: sourceNodeId, to: targetNodeId, label: this.body.data.edges._data[this.edgeBeingEditedId].label }; + var eeFunct = this.options.editEdge; + if ((typeof eeFunct === 'undefined' ? 'undefined' : (0, _typeof3['default'])(eeFunct)) === 'object') { + eeFunct = eeFunct.editWithoutDrag; + } + if (typeof eeFunct === 'function') { + if (eeFunct.length === 2) { + eeFunct(defaultData, function (finalizedData) { + if (finalizedData === null || finalizedData === undefined || _this6.inMode !== 'editEdge') { + // if for whatever reason the mode has changes (due to dataset change) disregard the callback) { + _this6.body.edges[defaultData.id].updateEdgeType(); + _this6.body.emitter.emit('_redraw'); + _this6.showManipulatorToolbar(); + } else { + _this6.body.data.edges.getDataSet().update(finalizedData); + _this6.selectionHandler.unselectAll(); + _this6.showManipulatorToolbar(); + } + }); + } else { + throw new Error('The function for edit does not support two arguments (data, callback)'); + } + } else { + this.body.data.edges.getDataSet().update(defaultData); + this.selectionHandler.unselectAll(); + this.showManipulatorToolbar(); + } + } + }]); + return ManipulationSystem; + }(); + + exports['default'] = ManipulationSystem; + +/***/ }), +/* 229 */ +/***/ (function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + /** + * This object contains all possible options. It will check if the types are correct, if required if the option is one + * of the allowed values. + * + * __any__ means that the name of the property does not matter. + * __type__ is a required field for all objects and contains the allowed types of all objects + */ + var string = 'string'; + var bool = 'boolean'; + var number = 'number'; + var array = 'array'; + var object = 'object'; // should only be in a __type__ property + var dom = 'dom'; + var any = 'any'; + + var allOptions = { + configure: { + enabled: { boolean: bool }, + filter: { boolean: bool, string: string, array: array, 'function': 'function' }, + container: { dom: dom }, + showButton: { boolean: bool }, + __type__: { object: object, boolean: bool, string: string, array: array, 'function': 'function' } + }, + edges: { + arrows: { + to: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, + middle: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, + from: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: ['arrow', 'circle'] }, __type__: { object: object, boolean: bool } }, + __type__: { string: ['from', 'to', 'middle'], object: object } + }, + arrowStrikethrough: { boolean: bool }, + chosen: { + label: { boolean: bool, 'function': 'function' }, + edge: { boolean: bool, 'function': 'function' }, + __type__: { object: object, boolean: bool } + }, + color: { + color: { string: string }, + highlight: { string: string }, + hover: { string: string }, + inherit: { string: ['from', 'to', 'both'], boolean: bool }, + opacity: { number: number }, + __type__: { object: object, string: string } + }, + dashes: { boolean: bool, array: array }, + font: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + background: { string: string }, + strokeWidth: { number: number }, // px + strokeColor: { string: string }, + align: { string: ['horizontal', 'top', 'middle', 'bottom'] }, + vadjust: { number: number }, + multi: { boolean: bool, string: string }, + bold: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + boldital: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + ital: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + mono: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + __type__: { object: object, string: string } + }, + hidden: { boolean: bool }, + hoverWidth: { 'function': 'function', number: number }, + label: { string: string, 'undefined': 'undefined' }, + labelHighlightBold: { boolean: bool }, + length: { number: number, 'undefined': 'undefined' }, + physics: { boolean: bool }, + scaling: { + min: { number: number }, + max: { number: number }, + label: { + enabled: { boolean: bool }, + min: { number: number }, + max: { number: number }, + maxVisible: { number: number }, + drawThreshold: { number: number }, + __type__: { object: object, boolean: bool } + }, + customScalingFunction: { 'function': 'function' }, + __type__: { object: object } + }, + selectionWidth: { 'function': 'function', number: number }, + selfReferenceSize: { number: number }, + shadow: { + enabled: { boolean: bool }, + color: { string: string }, + size: { number: number }, + x: { number: number }, + y: { number: number }, + __type__: { object: object, boolean: bool } + }, + smooth: { + enabled: { boolean: bool }, + type: { string: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'] }, + roundness: { number: number }, + forceDirection: { string: ['horizontal', 'vertical', 'none'], boolean: bool }, + __type__: { object: object, boolean: bool } + }, + title: { string: string, 'undefined': 'undefined' }, + width: { number: number }, + widthConstraint: { + maximum: { number: number }, + __type__: { object: object, boolean: bool, number: number } + }, + value: { number: number, 'undefined': 'undefined' }, + __type__: { object: object } + }, + groups: { + useDefaultGroups: { boolean: bool }, + __any__: 'get from nodes, will be overwritten below', + __type__: { object: object } + }, + interaction: { + dragNodes: { boolean: bool }, + dragView: { boolean: bool }, + hideEdgesOnDrag: { boolean: bool }, + hideNodesOnDrag: { boolean: bool }, + hover: { boolean: bool }, + keyboard: { + enabled: { boolean: bool }, + speed: { x: { number: number }, y: { number: number }, zoom: { number: number }, __type__: { object: object } }, + bindToWindow: { boolean: bool }, + __type__: { object: object, boolean: bool } + }, + multiselect: { boolean: bool }, + navigationButtons: { boolean: bool }, + selectable: { boolean: bool }, + selectConnectedEdges: { boolean: bool }, + hoverConnectedEdges: { boolean: bool }, + tooltipDelay: { number: number }, + zoomView: { boolean: bool }, + __type__: { object: object } + }, + layout: { + randomSeed: { 'undefined': 'undefined', number: number }, + improvedLayout: { boolean: bool }, + hierarchical: { + enabled: { boolean: bool }, + levelSeparation: { number: number }, + nodeSpacing: { number: number }, + treeSpacing: { number: number }, + blockShifting: { boolean: bool }, + edgeMinimization: { boolean: bool }, + parentCentralization: { boolean: bool }, + direction: { string: ['UD', 'DU', 'LR', 'RL'] }, // UD, DU, LR, RL + sortMethod: { string: ['hubsize', 'directed'] }, // hubsize, directed + __type__: { object: object, boolean: bool } + }, + __type__: { object: object } + }, + manipulation: { + enabled: { boolean: bool }, + initiallyActive: { boolean: bool }, + addNode: { boolean: bool, 'function': 'function' }, + addEdge: { boolean: bool, 'function': 'function' }, + editNode: { 'function': 'function' }, + editEdge: { + editWithoutDrag: { 'function': 'function' }, + __type__: { object: object, boolean: bool, 'function': 'function' } + }, + deleteNode: { boolean: bool, 'function': 'function' }, + deleteEdge: { boolean: bool, 'function': 'function' }, + controlNodeStyle: 'get from nodes, will be overwritten below', + __type__: { object: object, boolean: bool } + }, + nodes: { + borderWidth: { number: number }, + borderWidthSelected: { number: number, 'undefined': 'undefined' }, + brokenImage: { string: string, 'undefined': 'undefined' }, + chosen: { + label: { boolean: bool, 'function': 'function' }, + node: { boolean: bool, 'function': 'function' }, + __type__: { object: object, boolean: bool } + }, + color: { + border: { string: string }, + background: { string: string }, + highlight: { + border: { string: string }, + background: { string: string }, + __type__: { object: object, string: string } + }, + hover: { + border: { string: string }, + background: { string: string }, + __type__: { object: object, string: string } + }, + __type__: { object: object, string: string } + }, + fixed: { + x: { boolean: bool }, + y: { boolean: bool }, + __type__: { object: object, boolean: bool } + }, + font: { + align: { string: string }, + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + background: { string: string }, + strokeWidth: { number: number }, // px + strokeColor: { string: string }, + vadjust: { number: number }, + multi: { boolean: bool, string: string }, + bold: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + boldital: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + ital: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + mono: { + color: { string: string }, + size: { number: number }, // px + face: { string: string }, + mod: { string: string }, + vadjust: { number: number }, + __type__: { object: object, string: string } + }, + __type__: { object: object, string: string } + }, + group: { string: string, number: number, 'undefined': 'undefined' }, + heightConstraint: { + minimum: { number: number }, + valign: { string: string }, + __type__: { object: object, boolean: bool, number: number } + }, + hidden: { boolean: bool }, + icon: { + face: { string: string }, + code: { string: string }, //'\uf007', + size: { number: number }, //50, + color: { string: string }, + __type__: { object: object } + }, + id: { string: string, number: number }, + image: { + selected: { string: string, 'undefined': 'undefined' }, // --> URL + unselected: { string: string, 'undefined': 'undefined' }, // --> URL + __type__: { object: object, string: string } + }, + label: { string: string, 'undefined': 'undefined' }, + labelHighlightBold: { boolean: bool }, + level: { number: number, 'undefined': 'undefined' }, + margin: { + top: { number: number }, + right: { number: number }, + bottom: { number: number }, + left: { number: number }, + __type__: { object: object, number: number } + }, + mass: { number: number }, + physics: { boolean: bool }, + scaling: { + min: { number: number }, + max: { number: number }, + label: { + enabled: { boolean: bool }, + min: { number: number }, + max: { number: number }, + maxVisible: { number: number }, + drawThreshold: { number: number }, + __type__: { object: object, boolean: bool } + }, + customScalingFunction: { 'function': 'function' }, + __type__: { object: object } + }, + shadow: { + enabled: { boolean: bool }, + color: { string: string }, + size: { number: number }, + x: { number: number }, + y: { number: number }, + __type__: { object: object, boolean: bool } + }, + shape: { string: ['ellipse', 'circle', 'database', 'box', 'text', 'image', 'circularImage', 'diamond', 'dot', 'star', 'triangle', 'triangleDown', 'square', 'icon'] }, + shapeProperties: { + borderDashes: { boolean: bool, array: array }, + borderRadius: { number: number }, + interpolation: { boolean: bool }, + useImageSize: { boolean: bool }, + useBorderWithImage: { boolean: bool }, + __type__: { object: object } + }, + size: { number: number }, + title: { string: string, 'undefined': 'undefined' }, + value: { number: number, 'undefined': 'undefined' }, + widthConstraint: { + minimum: { number: number }, + maximum: { number: number }, + __type__: { object: object, boolean: bool, number: number } + }, + x: { number: number }, + y: { number: number }, + __type__: { object: object } + }, + physics: { + enabled: { boolean: bool }, + barnesHut: { + gravitationalConstant: { number: number }, + centralGravity: { number: number }, + springLength: { number: number }, + springConstant: { number: number }, + damping: { number: number }, + avoidOverlap: { number: number }, + __type__: { object: object } + }, + forceAtlas2Based: { + gravitationalConstant: { number: number }, + centralGravity: { number: number }, + springLength: { number: number }, + springConstant: { number: number }, + damping: { number: number }, + avoidOverlap: { number: number }, + __type__: { object: object } + }, + repulsion: { + centralGravity: { number: number }, + springLength: { number: number }, + springConstant: { number: number }, + nodeDistance: { number: number }, + damping: { number: number }, + __type__: { object: object } + }, + hierarchicalRepulsion: { + centralGravity: { number: number }, + springLength: { number: number }, + springConstant: { number: number }, + nodeDistance: { number: number }, + damping: { number: number }, + __type__: { object: object } + }, + maxVelocity: { number: number }, + minVelocity: { number: number }, // px/s + solver: { string: ['barnesHut', 'repulsion', 'hierarchicalRepulsion', 'forceAtlas2Based'] }, + stabilization: { + enabled: { boolean: bool }, + iterations: { number: number }, // maximum number of iteration to stabilize + updateInterval: { number: number }, + onlyDynamicEdges: { boolean: bool }, + fit: { boolean: bool }, + __type__: { object: object, boolean: bool } + }, + timestep: { number: number }, + adaptiveTimestep: { boolean: bool }, + __type__: { object: object, boolean: bool } + }, + + //globals : + autoResize: { boolean: bool }, + clickToUse: { boolean: bool }, + locale: { string: string }, + locales: { + __any__: { any: any }, + __type__: { object: object } + }, + height: { string: string }, + width: { string: string }, + __type__: { object: object } + }; + + allOptions.groups.__any__ = allOptions.nodes; + allOptions.manipulation.controlNodeStyle = allOptions.nodes; + + var configureOptions = { + 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: false, + y: false + }, + font: { + color: ['color', '#343434'], + size: [14, 0, 100, 1], // px + face: ['arial', 'verdana', 'tahoma'], + background: ['color', 'none'], + strokeWidth: [0, 0, 50, 1], // px + strokeColor: ['color', '#ffffff'] + }, + //group: 'string', + hidden: false, + labelHighlightBold: true, + //icon: { + // face: 'string', //'FontAwesome', + // code: 'string', //'\uf007', + // size: [50, 0, 200, 1], //50, + // color: ['color','#2B7CE9'] //'#aa00ff' + //}, + //image: 'string', // --> URL + physics: true, + scaling: { + min: [10, 0, 200, 1], + max: [30, 0, 200, 1], + label: { + enabled: false, + min: [14, 0, 200, 1], + max: [30, 0, 200, 1], + maxVisible: [30, 0, 200, 1], + drawThreshold: [5, 0, 20, 1] + } + }, + shadow: { + enabled: false, + color: 'rgba(0,0,0,0.5)', + size: [10, 0, 20, 1], + x: [5, -30, 30, 1], + y: [5, -30, 30, 1] + }, + shape: ['ellipse', 'box', 'circle', 'database', 'diamond', 'dot', 'square', 'star', 'text', 'triangle', 'triangleDown'], + shapeProperties: { + borderDashes: false, + borderRadius: [6, 0, 20, 1], + interpolation: true, + useImageSize: false + }, + size: [25, 0, 200, 1] + }, + edges: { + arrows: { + to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }, + middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }, + from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' } + }, + arrowStrikethrough: true, + color: { + color: ['color', '#848484'], + highlight: ['color', '#848484'], + hover: ['color', '#848484'], + inherit: ['from', 'to', 'both', true, false], + opacity: [1, 0, 1, 0.05] + }, + dashes: false, + font: { + color: ['color', '#343434'], + size: [14, 0, 100, 1], // px + face: ['arial', 'verdana', 'tahoma'], + background: ['color', 'none'], + strokeWidth: [2, 0, 50, 1], // px + strokeColor: ['color', '#ffffff'], + align: ['horizontal', 'top', 'middle', 'bottom'] + }, + hidden: false, + hoverWidth: [1.5, 0, 5, 0.1], + labelHighlightBold: true, + physics: true, + scaling: { + min: [1, 0, 100, 1], + max: [15, 0, 100, 1], + label: { + enabled: true, + min: [14, 0, 200, 1], + max: [30, 0, 200, 1], + maxVisible: [30, 0, 200, 1], + drawThreshold: [5, 0, 20, 1] } - next(); - } - if (c != '"') { - throw newSyntaxError('End of string " expected'); + }, + selectionWidth: [1.5, 0, 5, 0.1], + selfReferenceSize: [20, 0, 200, 1], + shadow: { + enabled: false, + color: 'rgba(0,0,0,0.5)', + size: [10, 0, 20, 1], + x: [5, -30, 30, 1], + y: [5, -30, 30, 1] + }, + smooth: { + enabled: true, + type: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'], + forceDirection: ['horizontal', 'vertical', 'none'], + roundness: [0.5, 0, 1, 0.05] + }, + width: [1, 0, 30, 1] + }, + layout: { + //randomSeed: [0, 0, 500, 1], + //improvedLayout: true, + hierarchical: { + enabled: false, + levelSeparation: [150, 20, 500, 5], + nodeSpacing: [100, 20, 500, 5], + treeSpacing: [200, 20, 500, 5], + blockShifting: true, + edgeMinimization: true, + parentCentralization: true, + direction: ['UD', 'DU', 'LR', 'RL'], // UD, DU, LR, RL + sortMethod: ['hubsize', 'directed'] // hubsize, directed } - next(); - tokenType = TOKENTYPE.IDENTIFIER; - return; - } - - // something unknown is found, wrong characters, a syntax error - tokenType = TOKENTYPE.UNKNOWN; - while (c != '') { - token += c; - next(); - } - throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); - } - - /** - * Parse a graph. - * @returns {Object} graph - */ - function parseGraph() { - var graph = {}; - - first(); - getToken(); - - // optional strict keyword - if (token === 'strict') { - graph.strict = true; - getToken(); - } - - // graph or digraph keyword - if (token === 'graph' || token === 'digraph') { - graph.type = token; - getToken(); + }, + interaction: { + dragNodes: true, + dragView: true, + hideEdgesOnDrag: false, + hideNodesOnDrag: false, + hover: false, + keyboard: { + enabled: false, + speed: { x: [10, 0, 40, 1], y: [10, 0, 40, 1], zoom: [0.02, 0, 0.1, 0.005] }, + bindToWindow: true + }, + multiselect: false, + navigationButtons: false, + selectable: true, + selectConnectedEdges: true, + hoverConnectedEdges: true, + tooltipDelay: [300, 0, 1000, 25], + zoomView: true + }, + manipulation: { + enabled: false, + initiallyActive: false + }, + physics: { + enabled: true, + barnesHut: { + //theta: [0.5, 0.1, 1, 0.05], + gravitationalConstant: [-2000, -30000, 0, 50], + centralGravity: [0.3, 0, 10, 0.05], + springLength: [95, 0, 500, 5], + springConstant: [0.04, 0, 1.2, 0.005], + damping: [0.09, 0, 1, 0.01], + avoidOverlap: [0, 0, 1, 0.01] + }, + forceAtlas2Based: { + //theta: [0.5, 0.1, 1, 0.05], + gravitationalConstant: [-50, -500, 0, 1], + centralGravity: [0.01, 0, 1, 0.005], + springLength: [95, 0, 500, 5], + springConstant: [0.08, 0, 1.2, 0.005], + damping: [0.4, 0, 1, 0.01], + avoidOverlap: [0, 0, 1, 0.01] + }, + repulsion: { + centralGravity: [0.2, 0, 10, 0.05], + springLength: [200, 0, 500, 5], + springConstant: [0.05, 0, 1.2, 0.005], + nodeDistance: [100, 0, 500, 5], + damping: [0.09, 0, 1, 0.01] + }, + hierarchicalRepulsion: { + centralGravity: [0.2, 0, 10, 0.05], + springLength: [100, 0, 500, 5], + springConstant: [0.01, 0, 1.2, 0.005], + nodeDistance: [120, 0, 500, 5], + damping: [0.09, 0, 1, 0.01] + }, + maxVelocity: [50, 0, 150, 1], + minVelocity: [0.1, 0.01, 0.5, 0.01], + solver: ['barnesHut', 'forceAtlas2Based', 'repulsion', 'hierarchicalRepulsion'], + timestep: [0.5, 0.01, 1, 0.01] } + }; - // optional graph id - if (tokenType === TOKENTYPE.IDENTIFIER) { - graph.id = token; - getToken(); - } + exports.allOptions = allOptions; + exports.configureOptions = configureOptions; - // open angle bracket - if (token != '{') { - throw newSyntaxError('Angle bracket { expected'); - } - getToken(); +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { - // statements - parseStatements(graph); + "use strict"; - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); - } - getToken(); + Object.defineProperty(exports, "__esModule", { + value: true + }); - // end of file - if (token !== '') { - throw newSyntaxError('End of file expected'); - } - getToken(); + var _slicedToArray2 = __webpack_require__(170); - // remove temporary default options - delete graph.node; - delete graph.edge; - delete graph.graph; + var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - return graph; - } + var _classCallCheck2 = __webpack_require__(134); - /** - * Parse a list with statements. - * @param {Object} graph - */ - function parseStatements(graph) { - while (token !== '' && token != '}') { - parseStatement(graph); - if (token === ';') { - getToken(); - } - } - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - /** - * Parse a single statement. Can be a an attribute statement, node - * statement, a series of node statements and edge statements, or a - * parameter. - * @param {Object} graph - */ - function parseStatement(graph) { - // parse subgraph - var subgraph = parseSubgraph(graph); - if (subgraph) { - // edge statements - parseEdge(graph, subgraph); + var _createClass2 = __webpack_require__(135); - return; - } + var _createClass3 = _interopRequireDefault(_createClass2); - // parse an attribute statement - var attr = parseAttributeStatement(graph); - if (attr) { - return; - } + var _FloydWarshall = __webpack_require__(231); - // parse node - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - var id = token; // id can be a string or a number - getToken(); + var _FloydWarshall2 = _interopRequireDefault(_FloydWarshall); - if (token === '=') { - // id statement - getToken(); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - graph[id] = token; - getToken(); - // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " - } else { - parseNodeStatement(graph, id); - } - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /** - * Parse a subgraph - * @param {Object} graph parent graph object - * @return {Object | null} subgraph + * 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. */ - function parseSubgraph(graph) { - var subgraph = null; - - // optional subgraph keyword - if (token === 'subgraph') { - subgraph = {}; - subgraph.type = 'subgraph'; - getToken(); + var KamadaKawai = function () { + function KamadaKawai(body, edgeLength, edgeStrength) { + (0, _classCallCheck3["default"])(this, KamadaKawai); - // optional graph id - if (tokenType === TOKENTYPE.IDENTIFIER) { - subgraph.id = token; - getToken(); - } + this.body = body; + this.springLength = edgeLength; + this.springConstant = edgeStrength; + this.distanceSolver = new _FloydWarshall2["default"](); } - // open angle bracket - if (token === '{') { - getToken(); - - if (!subgraph) { - subgraph = {}; - } - subgraph.parent = graph; - subgraph.node = graph.node; - subgraph.edge = graph.edge; - subgraph.graph = graph.graph; - - // statements - parseStatements(subgraph); - - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); - } - getToken(); + /** + * Not sure if needed but can be used to update the spring length and spring constant + * @param options + */ - // remove temporary default options - delete subgraph.node; - delete subgraph.edge; - delete subgraph.graph; - delete subgraph.parent; - // register at the parent graph - if (!graph.subgraphs) { - graph.subgraphs = []; + (0, _createClass3["default"])(KamadaKawai, [{ + key: "setOptions", + value: function setOptions(options) { + if (options) { + if (options.springLength) { + this.springLength = options.springLength; + } + if (options.springConstant) { + this.springConstant = options.springConstant; + } + } } - graph.subgraphs.push(subgraph); - } - - return subgraph; - } - /** - * parse an attribute statement like "node [shape=circle fontSize=16]". - * Available keywords are 'node', 'edge', 'graph'. - * The previous list with default attributes will be replaced - * @param {Object} graph - * @returns {String | null} keyword Returns the name of the parsed attribute - * (node, edge, graph), or null if nothing - * is parsed. - */ - function parseAttributeStatement(graph) { - // attribute statements - if (token === 'node') { - getToken(); - - // node attributes - graph.node = parseAttributeList(); - return 'node'; - } else if (token === 'edge') { - getToken(); + /** + * Position the system + * @param nodesArray + * @param edgesArray + */ - // edge attributes - graph.edge = parseAttributeList(); - return 'edge'; - } else if (token === 'graph') { - getToken(); + }, { + key: "solve", + value: function solve(nodesArray, edgesArray) { + var ignoreClusters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - // graph attributes - graph.graph = parseAttributeList(); - return 'graph'; - } + // get distance matrix + var D_matrix = this.distanceSolver.getDistances(this.body, nodesArray, edgesArray); // distance matrix - return null; - } + // get the L Matrix + this._createL_matrix(D_matrix); - /** - * parse a node statement - * @param {Object} graph - * @param {String | Number} id - */ - function parseNodeStatement(graph, id) { - // node statement - var node = { - id: id - }; - var attr = parseAttributeList(); - if (attr) { - node.attr = attr; - } - addNode(graph, node); + // get the K Matrix + this._createK_matrix(D_matrix); - // edge statements - parseEdge(graph, id); - } + // initial E Matrix + this._createE_matrix(); - /** - * Parse an edge or a series of edges - * @param {Object} graph - * @param {String | Number} from Id of the from node - */ - function parseEdge(graph, from) { - while (token === '->' || token === '--') { - var to; - var type = token; - getToken(); + // 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 subgraph = parseSubgraph(graph); - if (subgraph) { - to = subgraph; - } else { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier or subgraph expected'); - } - to = token; - addNode(graph, { - id: to - }); - getToken(); - } + var maxEnergy = 1e9; + var highE_nodeId = 0, + dE_dx = 0, + dE_dy = 0, + delta_m = 0, + subIterations = 0; - // parse edge attributes - var attr = parseAttributeList(); + while (maxEnergy > threshold && iterations < maxIterations) { + iterations += 1; - // create edge - var edge = createEdge(graph, from, to, type, attr); - addEdge(graph, edge); + var _getHighestEnergyNode2 = this._getHighestEnergyNode(ignoreClusters); - from = to; - } - } + var _getHighestEnergyNode3 = (0, _slicedToArray3["default"])(_getHighestEnergyNode2, 4); - /** - * Parse a set with attributes, - * for example [label="1.000", shape=solid] - * @return {Object | null} attr - */ - function parseAttributeList() { - var attr = null; + highE_nodeId = _getHighestEnergyNode3[0]; + maxEnergy = _getHighestEnergyNode3[1]; + dE_dx = _getHighestEnergyNode3[2]; + dE_dy = _getHighestEnergyNode3[3]; - while (token === '[') { - getToken(); - attr = {}; - while (token !== '' && token != ']') { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute name expected'); - } - var name = token; + delta_m = maxEnergy; + subIterations = 0; + while (delta_m > innerThreshold && subIterations < maxInnerIterations) { + subIterations += 1; + this._moveNode(highE_nodeId, dE_dx, dE_dy); - getToken(); - if (token != '=') { - throw newSyntaxError('Equal sign = expected'); - } - getToken(); + var _getEnergy2 = this._getEnergy(highE_nodeId); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute value expected'); - } - var value = token; - setValue(attr, name, value); // name can be a path + var _getEnergy3 = (0, _slicedToArray3["default"])(_getEnergy2, 3); - getToken(); - if (token == ',') { - getToken(); + delta_m = _getEnergy3[0]; + dE_dx = _getEnergy3[1]; + dE_dy = _getEnergy3[2]; + } } } - if (token != ']') { - throw newSyntaxError('Bracket ] expected'); - } - getToken(); - } - - return attr; - } - - /** - * Create a syntax error with extra information on current token and index. - * @param {String} message - * @returns {SyntaxError} err - */ - function newSyntaxError(message) { - return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); - } - - /** - * Chop off text after a maximum length - * @param {String} text - * @param {Number} maxLength - * @returns {String} - */ - function chop(text, maxLength) { - return text.length <= maxLength ? text : text.substr(0, 27) + '...'; - } + /** + * get the node with the highest energy + * @returns {*[]} + * @private + */ - /** - * Execute a function fn for each pair of elements in two arrays - * @param {Array | *} array1 - * @param {Array | *} array2 - * @param {function} fn - */ - function forEach2(array1, array2, fn) { - if (Array.isArray(array1)) { - array1.forEach(function (elem1) { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(elem1, elem2); - }); - } else { - fn(elem1, array2); + }, { + key: "_getHighestEnergyNode", + 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 _getEnergy4 = this._getEnergy(m), + _getEnergy5 = (0, _slicedToArray3["default"])(_getEnergy4, 3), + delta_m = _getEnergy5[0], + dE_dx = _getEnergy5[1], + dE_dy = _getEnergy5[2]; + + if (maxEnergy < delta_m) { + maxEnergy = delta_m; + maxEnergyNodeId = m; + dE_dx_max = dE_dx; + dE_dy_max = dE_dy; + } + } } - }); - } else { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(array1, elem2); - }); - } else { - fn(array1, array2); + + return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max]; } - } - } - /** - * Set a nested property on an object - * When nested objects are missing, they will be created. - * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}} - * @param {Object} object - * @param {string} path A dot separated string like 'font.color' - * @param {*} value Value for the property - * @return {Object} Returns the original object, allows for chaining. - */ - function setProp(object, path, value) { - var names = path.split('.'); - var prop = names.pop(); + /** + * calculate the energy of a single node + * @param m + * @returns {*[]} + * @private + */ - // traverse over the nested objects - var obj = object; - for (var i = 0; i < names.length; i++) { - var name = names[i]; - if (!(name in obj)) { - obj[name] = {}; + }, { + key: "_getEnergy", + value: function _getEnergy(m) { + var _E_sums$m = (0, _slicedToArray3["default"])(this.E_sums[m], 2), + dE_dx = _E_sums$m[0], + dE_dy = _E_sums$m[1]; + + var delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2)); + return [delta_m, dE_dx, dE_dy]; } - obj = obj[name]; - } - // set the property value - obj[prop] = value; + /** + * 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 + */ - return object; - } + }, { + key: "_moveNode", + 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; - /** - * Convert an object with DOT attributes to their vis.js equivalents. - * @param {Object} attr Object with DOT attributes - * @param {Object} mapping - * @return {Object} Returns an object with vis.js attributes - */ - function convertAttr(attr, mapping) { - var converted = {}; + var x_m = nodes[m].x; + var y_m = nodes[m].y; + var km = this.K_matrix[m]; + var lm = this.L_matrix[m]; - for (var prop in attr) { - if (attr.hasOwnProperty(prop)) { - var visProp = mapping[prop]; - if (Array.isArray(visProp)) { - visProp.forEach(function (visPropI) { - setProp(converted, visPropI, attr[prop]); - }); - } else if (typeof visProp === 'string') { - setProp(converted, visProp, attr[prop]); - } else { - setProp(converted, prop, attr[prop]); + 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 kmat = km[i]; + var lmat = lm[i]; + var denominator = 1.0 / Math.pow(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2), 1.5); + d2E_dx2 += kmat * (1 - lmat * Math.pow(y_m - y_i, 2) * denominator); + d2E_dxdy += kmat * (lmat * (x_m - x_i) * (y_m - y_i) * denominator); + d2E_dy2 += kmat * (1 - lmat * 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; + + // Recalculate E_matrix (should be incremental) + this._updateE_matrix(m); } - } - return converted; - } + /** + * Create the L matrix: edge length times shortest path + * @param D_matrix + * @private + */ - /** - * Convert a string containing a graph in DOT language into a map containing - * with nodes and edges in the format of graph. - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graphData - */ - function DOTToGraph(data) { - // parse the DOT file - var dotData = parseDOT(data); - var graphData = { - nodes: [], - edges: [], - options: {} - }; + }, { + key: "_createL_matrix", + value: function _createL_matrix(D_matrix) { + var nodesArray = this.body.nodeIndices; + var edgeLength = this.springLength; - // copy the nodes - if (dotData.nodes) { - dotData.nodes.forEach(function (dotNode) { - var graphNode = { - id: dotNode.id, - label: String(dotNode.label || dotNode.id) - }; - merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING)); - if (graphNode.image) { - graphNode.shape = 'image'; + 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]]; + } } - graphData.nodes.push(graphNode); - }); - } + } - // copy the edges - if (dotData.edges) { /** - * Convert an edge in DOT format to an edge with VisGraph format - * @param {Object} dotEdge - * @returns {Object} graphEdge + * Create the K matrix: spring constants times shortest path + * @param D_matrix + * @private */ - var convertEdge = function convertEdge(dotEdge) { - var graphEdge = { - from: dotEdge.from, - to: dotEdge.to - }; - merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING)); - graphEdge.arrows = dotEdge.type === '->' ? 'to' : undefined; - return graphEdge; - }; + }, { + key: "_createK_matrix", + value: function _createK_matrix(D_matrix) { + var nodesArray = this.body.nodeIndices; + var edgeStrength = this.springConstant; - dotData.edges.forEach(function (dotEdge) { - var from, to; - if (dotEdge.from instanceof Object) { - from = dotEdge.from.nodes; - } else { - from = { - id: dotEdge.from - }; + 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); + } } + } - // TODO: support of solid/dotted/dashed edges (attr = 'style') - // TODO: support for attributes 'dir' and 'arrowhead' (edge arrows) + /** + * Create matrix with all energies between nodes + * @private + */ - if (dotEdge.to instanceof Object) { - to = dotEdge.to.nodes; - } else { - to = { - id: dotEdge.to - }; + }, { + key: "_createE_matrix", + value: function _createE_matrix() { + var nodesArray = this.body.nodeIndices; + var nodes = this.body.nodes; + this.E_matrix = {}; + this.E_sums = {}; + for (var mIdx = 0; mIdx < nodesArray.length; mIdx++) { + this.E_matrix[nodesArray[mIdx]] = []; } - - if (dotEdge.from instanceof Object && dotEdge.from.edges) { - dotEdge.from.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); + for (var _mIdx = 0; _mIdx < nodesArray.length; _mIdx++) { + var m = nodesArray[_mIdx]; + var x_m = nodes[m].x; + var y_m = nodes[m].y; + var dE_dx = 0; + var dE_dy = 0; + for (var iIdx = _mIdx; 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)); + this.E_matrix[m][iIdx] = [this.K_matrix[m][i] * (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator), this.K_matrix[m][i] * (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator)]; + this.E_matrix[i][_mIdx] = this.E_matrix[m][iIdx]; + dE_dx += this.E_matrix[m][iIdx][0]; + dE_dy += this.E_matrix[m][iIdx][1]; + } + } + //Store sum + this.E_sums[m] = [dE_dx, dE_dy]; } + } - forEach2(from, to, function (from, to) { - var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); + //Update method, just doing single column (rows are auto-updated) (update all sums) - if (dotEdge.to instanceof Object && dotEdge.to.edges) { - dotEdge.to.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); + }, { + key: "_updateE_matrix", + value: function _updateE_matrix(m) { + var nodesArray = this.body.nodeIndices; + var nodes = this.body.nodes; + var colm = this.E_matrix[m]; + var kcolm = this.K_matrix[m]; + var lcolm = this.L_matrix[m]; + 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) { + //Keep old energy value for sum modification below + var cell = colm[iIdx]; + var oldDx = cell[0]; + var oldDy = cell[1]; + + //Calc new energy: + 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)); + var dx = kcolm[i] * (x_m - x_i - lcolm[i] * (x_m - x_i) * denominator); + var dy = kcolm[i] * (y_m - y_i - lcolm[i] * (y_m - y_i) * denominator); + colm[iIdx] = [dx, dy]; + dE_dx += dx; + dE_dy += dy; + + //add new energy to sum of each column + var sum = this.E_sums[i]; + sum[0] += dx - oldDx; + sum[1] += dy - oldDy; + } } - }); - } + //Store sum at -1 index + this.E_sums[m] = [dE_dx, dE_dy]; + } + }]); + return KamadaKawai; + }(); // distance finding algorithm - // copy the options - if (dotData.attr) { - graphData.options = dotData.attr; - } - return graphData; - } + exports["default"] = KamadaKawai; - // exports - exports.parseDOT = parseDOT; - exports.DOTToGraph = DOTToGraph; +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { -/***/ }, -/* 229 */ -/***/ function(module, exports) { + "use strict"; - 'use strict'; + Object.defineProperty(exports, "__esModule", { + value: true + }); - function parseGephi(gephiJSON, optionsObj) { - var edges = []; - var nodes = []; - var options = { - edges: { - inheritColor: false - }, - nodes: { - fixed: false, - parseColor: false - } - }; + var _classCallCheck2 = __webpack_require__(134); - if (optionsObj !== undefined) { - if (optionsObj.fixed !== undefined) { - options.nodes.fixed = optionsObj.fixed; - } - if (optionsObj.parseColor !== undefined) { - options.nodes.parseColor = optionsObj.parseColor; - } - if (optionsObj.inheritColor !== undefined) { - options.edges.inheritColor = optionsObj.inheritColor; - } - } + var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - var gEdges = gephiJSON.edges; - var gNodes = gephiJSON.nodes; - for (var i = 0; i < gEdges.length; i++) { - var edge = {}; - var gEdge = gEdges[i]; - edge['id'] = gEdge.id; - 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) { - edge['color'] = gEdge.color; - } - edges.push(edge); - } + var _createClass2 = __webpack_require__(135); - for (var i = 0; i < gNodes.length; i++) { - var node = {}; - var gNode = gNodes[i]; - node['id'] = gNode.id; - node['attributes'] = gNode.attributes; - node['title'] = gNode.title; - 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 { - node['color'] = gNode.color !== undefined ? { background: gNode.color, border: gNode.color, highlight: { background: gNode.color, border: gNode.color }, hover: { background: gNode.color, border: gNode.color } } : undefined; - } - node['size'] = gNode.size; - node['fixed'] = options.nodes.fixed && gNode.x !== undefined && gNode.y !== undefined; - nodes.push(node); - } + var _createClass3 = _interopRequireDefault(_createClass2); - return { nodes: nodes, edges: edges }; - } + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - exports.parseGephi = parseGephi; + /** + * Created by Alex on 10-Aug-15. + */ -/***/ }, -/* 230 */ -/***/ function(module, exports) { + var FloydWarshall = function () { + function FloydWarshall() { + (0, _classCallCheck3["default"])(this, FloydWarshall); + } - 'use strict'; + (0, _createClass3["default"])(FloydWarshall, [{ + key: "getDistances", + value: function getDistances(body, nodesArray, edgesArray) { + var D_matrix = {}; + var edges = body.edges; - // English - exports['en'] = { - edit: 'Edit', - del: 'Delete selected', - back: 'Back', - addNode: 'Add Node', - addEdge: 'Add Edge', - editNode: 'Edit Node', - editEdge: 'Edit Edge', - addDescription: 'Click in an empty space to place a new node.', - edgeDescription: 'Click on a node and drag the edge to another node to connect them.', - editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', - createEdgeError: 'Cannot link edges to a cluster.', - deleteClusterError: 'Clusters cannot be deleted.', - editClusterError: 'Clusters cannot be edited.' - }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; + // prepare matrix with large numbers + for (var i = 0; i < nodesArray.length; i++) { + var node = nodesArray[i]; + var cell = {}; + D_matrix[node] = cell; + for (var j = 0; j < nodesArray.length; j++) { + cell[nodesArray[j]] = i == j ? 0 : 1e9; + } + } - // German - exports['de'] = { - edit: 'Editieren', - del: 'L\xF6sche Auswahl', - back: 'Zur\xFCck', - addNode: 'Knoten hinzuf\xFCgen', - addEdge: 'Kante hinzuf\xFCgen', - editNode: 'Knoten editieren', - editEdge: 'Kante editieren', - addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.', - edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.', - editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.', - createEdgeError: 'Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.', - deleteClusterError: 'Cluster k\xF6nnen nicht gel\xF6scht werden.', - editClusterError: 'Cluster k\xF6nnen nicht editiert werden.' - }; - exports['de_DE'] = exports['de']; + // put the weights for the edges in. This assumes unidirectionality. + for (var _i = 0; _i < edgesArray.length; _i++) { + var edge = edges[edgesArray[_i]]; + // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix + if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) { + D_matrix[edge.fromId][edge.toId] = 1; + D_matrix[edge.toId][edge.fromId] = 1; + } + } - // Spanish - exports['es'] = { - edit: 'Editar', - del: 'Eliminar selecci\xF3n', - back: '\xC1tras', - addNode: 'A\xF1adir nodo', - addEdge: 'A\xF1adir arista', - editNode: 'Editar nodo', - editEdge: 'Editar arista', - addDescription: 'Haga clic en un lugar vac\xEDo 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']; + var nodeCount = nodesArray.length; - //Italiano - exports['it'] = { - edit: 'Modifica', - del: 'Cancella la selezione', - back: 'Indietro', - addNode: 'Aggiungi un nodo', - addEdge: 'Aggiungi un vertice', - editNode: 'Modifica il nodo', - editEdge: 'Modifica il vertice', - addDescription: 'Clicca per aggiungere un nuovo nodo', - edgeDescription: 'Clicca su un nodo e trascinalo ad un altro nodo per connetterli.', - editEdgeDescription: 'Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.', - createEdgeError: 'Non si possono collegare vertici ad un cluster', - deleteClusterError: 'I cluster non possono essere cancellati', - editClusterError: 'I clusters non possono essere modificati.' - }; - exports['it_IT'] = exports['it']; + // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity. + for (var k = 0; k < nodeCount; k++) { + var knode = nodesArray[k]; + var kcolm = D_matrix[knode]; + for (var _i2 = 0; _i2 < nodeCount - 1; _i2++) { + var inode = nodesArray[_i2]; + var icolm = D_matrix[inode]; + for (var _j = _i2 + 1; _j < nodeCount; _j++) { + var jnode = nodesArray[_j]; + var jcolm = D_matrix[jnode]; - // Dutch - exports['nl'] = { - edit: 'Wijzigen', - del: 'Selectie verwijderen', - back: 'Terug', - addNode: 'Node toevoegen', - addEdge: 'Link toevoegen', - editNode: 'Node wijzigen', - editEdge: 'Link wijzigen', - addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', - edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', - editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', - createEdgeError: 'Kan geen link maken naar een cluster.', - deleteClusterError: 'Clusters kunnen niet worden verwijderd.', - editClusterError: 'Clusters kunnen niet worden aangepast.' - }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; + var val = Math.min(icolm[jnode], icolm[knode] + kcolm[jnode]); + icolm[jnode] = val; + jcolm[inode] = val; + } + } + } - // Portuguese Brazil - exports['pt-br'] = { - edit: 'Editar', - del: 'Remover selecionado', - back: 'Voltar', - addNode: 'Adicionar nó', - addEdge: 'Adicionar aresta', - editNode: 'Editar nó', - editEdge: 'Editar aresta', - addDescription: 'Clique em um espaço em branco para adicionar um novo nó', - edgeDescription: 'Clique em um nó e arraste a aresta até outro nó para conectá-los', - editEdgeDescription: 'Clique nos pontos de controle e os arraste para um nó para conectá-los', - createEdgeError: 'Não foi possível linkar arestas a um cluster.', - deleteClusterError: 'Clusters não puderam ser removidos.', - editClusterError: 'Clusters não puderam ser editados.' - }; - exports['pt-BR'] = exports['pt-br']; - exports['pt_BR'] = exports['pt-br']; - exports['pt_br'] = exports['pt-br']; + return D_matrix; + } + }]); + return FloydWarshall; + }(); - // Russian - exports['ru'] = { - edit: 'Редактировать', - del: 'Удалить выбранное', - back: 'Назад', - addNode: 'Добавить узел', - addEdge: 'Добавить ребро', - editNode: 'Редактировать узел', - editEdge: 'Редактировать ребро', - addDescription: 'Кликните в свободное место, чтобы добавить новый узел.', - edgeDescription: 'Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.', - editEdgeDescription: 'Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.', - createEdgeError: 'Невозможно соединить ребра в кластер.', - deleteClusterError: 'Кластеры не могут быть удалены', - editClusterError: 'Кластеры недоступны для редактирования.' - }; - exports['ru_RU'] = exports['ru']; + exports["default"] = FloydWarshall; -/***/ } +/***/ }) /******/ ]) }); ; \ No newline at end of file diff --git a/dist/vis.map b/dist/vis.map index 1720c86a..8f05d61c 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"sources":["vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","extend","_interopRequireDefault","obj","__esModule","default","_getIterator2","_getIterator3","_create","_create2","_keys","_keys2","_typeof2","_typeof3","moment","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","arguments","length","undefined","protoExtend","i","other","selectiveExtend","props","Array","isArray","Error","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","match","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","className","classes","split","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","throttle","fn","scheduled","requestAnimationFrame","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","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","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","member","err","global","hide","Iterators","TO_STRING_TAG","collections","NAME","Collection","proto","prototype","addToUnscopables","step","toIObject","iterated","kind","_t","_i","_k","O","Arguments","IObject","defined","it","cof","propertyIsEnumerable","LIBRARY","$export","redefine","has","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","keys","returnThis","Base","Constructor","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","name","values","P","F","core","ctx","source","own","out","IS_FORCED","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","C","apply","Function","virtual","R","U","self","__g","version","__e","aFunction","that","dP","createDesc","anObject","IE8_DOM_DEFINE","toPrimitive","defineProperty","Attributes","isObject","get","is","val","bitmap","enumerable","configurable","writable","create","descriptor","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","display","src","contentWindow","open","write","lt","close","Properties","getKeys","defineProperties","$keys","arrayIndexOf","names","toLength","toIndex","IS_INCLUDES","$this","el","fromIndex","toInteger","ceil","shared","uid","store","px","random","concat","documentElement","def","tag","stat","Symbol","USE_SYMBOL","toObject","ObjectProto","$at","point","TO_STRING","pos","l","charCodeAt","charAt","getIterator","iterFn","classof","getIteratorMethod","ARG","tryGet","T","callee","$Object","D","fails","KEY","exp","_iterator2","_symbol","_symbol2","_typeof","DESCRIPTORS","META","$fails","wks","wksExt","wksDefine","keyOf","enumKeys","gOPNExt","$GOPD","$DP","gOPD","gOPN","$Symbol","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","symbols","for","keyFor","useSetter","useSimple","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","replacer","$replacer","args","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","gOPS","pIE","getSymbols","arg","windowNames","getWindowNames","hiddenKeys","hooks","hookCallback","input","isObjectEmpty","isUndefined","res","hasOwnProp","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","some$1","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","copyConfig","to","from","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","number","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","stack","deprecateSimple","deprecations","isFunction","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","now","output","_calendar","longDateFormat","_longDateFormat","formatUpper","toUpperCase","invalidDate","_invalidDate","ordinal","_ordinal","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priority","priorities","getPrioritizedUnits","unitsObj","u","sort","makeGetSet","keepTime","set$1","stringGet","stringSet","prioritized","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","addFormatToken","token","padded","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","replaceLongDateFormatTokens","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","indexOf$1","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","isLeapYear","getIsLeapYear","createDate","y","M","ms","getFullYear","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","weekdays","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","normalizeLocale","chooseLocale","loadLocale","oldLocale","locales","globalLocale","_abbr","code","getSetGlobalLocale","data","getLocale","defineLocale","baseConfig","abbr","parentLocale","localeFamilies","x","updateLocale","listLocales","keys$1","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","configFromRFC2822","dayFormat","timezone","timezoneIndex","timezones"," GMT"," EDT"," EST"," CDT"," CST"," MDT"," MST"," PDT"," PST","military","basicRfcRegex","momentDate","momentDay","configFromString","aspNetJsonRegex","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","weekYear","temp","weekdayOverflow","GG","createLocal","curWeek","gg","ISO_8601","RFC_2822","parsedInput","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","hour","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","ordering","unitHasDecimal","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","days","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","delta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","inspect","zone","prefix","suffix","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","isoWeekday","unix","toJSON","isValid$2","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","withSuffix","toISOString$1","abs$1","Y","asSeconds","some","fun","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","match6","matchWord","o","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","getSetHour","dayOfMonthOrdinalParse","meridiemParse","prototypeMin","prototypeMax","invalid","lang","isoWeekYear","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","isoWeeks","isoWeeksInYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","webpackPolyfill","paths","children","webpackContext","req","resolve","buf","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","n","rnds","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Hammer","keycharm","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","groupTemplate","labelObj","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","_options","_fieldId","fieldId","_type","_subscribers","setOptions","_stringify2","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","subscriber","addedIds","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","ids","firstType","returnType","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","fieldType","count","exists","types","raw","converted","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","original","method","context","entry","clearTimeout","setTimeout","_ids","_onEvent","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","container","SyntaxError","containerElement","dataTable","dataPoints","Settings","setDefaults","DEFAULTS","colX","colY","colZ","colValue","colFilter","getMouseX","clientX","targetTouches","getMouseY","clientY","_assign","_assign2","Emitter","Range","STYLE","autoByDefault","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter","DOT","tooltip","tooltipStyle","padding","borderRadius","boxShadow","line","borderLeft","dot","showLegend","backgroundColor","dataColor","fill","stroke","strokeWidth","cameraPosition","horizontal","vertical","distance","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep","_setScale","xRange","range","yRange","zRange","z","valueRange","center","zCenter","camera","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","cameraLocation","getCameraLocation","cameraRotation","getCameraRotation","ax","ay","az","cx","cy","cz","sinTx","sin","cosTx","cos","sinTy","cosTy","sinTz","cosTz","bx","by","ex","eye","ey","ez","dx","dy","dz","getArmLength","currentXCenter","frame","canvas","currentYCenter","_calcTranslations","points","trans","screen","transBottom","bottom","dist","sortDepth","getNumberOfRows","getNumberOfColumns","counter","column","getDistinctValues","distinctValues","getSmallestDifference","smallest_diff","getColumnRange","_checkValueField","BARCOLOR","BARSIZE","DOTCOLOR","DOTSIZE","_setRangeDefaults","defaultMin","defaultMax","_dataInitialize","rawData","_onChange","withBars","BAR","defaultXBarWidth","defaultYBarWidth","expand","defaultXMin","defaultXMax","defaultXStep","defaultYMin","defaultYMax","defaultYStep","defaultZMin","defaultZMax","defaultZStep","defaultValueMin","defaultValueMax","dataFilter","setOnLoadCallback","redraw","_getDataPoints","GRID","SURFACE","dataX","dataY","sortNumber","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","LINE","pointNext","noCanvas","fontWeight","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onclick","_onClick","_setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","getCameraPosition","getArmRotation","_readData","_redrawFilter","setPointDrawingMethod","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","DOTLINE","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","getContext","lineJoin","lineCap","clearRect","_dotSize","_getLegendWidth","dotSize","isSizeLegend","isValueLegend","margin","lineWidth","font","ymax","hue","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","widthMin","fillStyle","closePath","legendMin","legendMax","start","end","getCurrent","_line","textAlign","textBaseline","fillText","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","drawAxisLabelX","text","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","prettyStep","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","from3d","xMin2d","xMax2d","H","V","Hi","X","_getStrokeWidth","_redrawBar","xWidth","yWidth","borderColor","surface","surfaces","corners","avg","transCenter","_polygon","_drawCircle","radius","_calcRadius","arc","PI","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","cross","topSideVisible","showGrayBottom","aDiff","bDiff","crossproduct","crossProduct","zAvg","_drawGridLine","_storeMousePosition","startMouseX","startMouseY","_startCameraOffset","getOffset","leftButtonDown","_onMouseUp","which","button","touchDown","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","moving","diffX","diffY","ctrlKey","scaleX","scaleY","offXNew","armLength","offYNew","setOffset","horizontalNew","verticalNew","snapValue","setArmRotation","parameters","emit","onclick_callback","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","showTooltip","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","wheelDelta","detail","oldLength","newLength","setArmLength","_insideTriangle","triangle","bs","cs","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","dom","contentWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","setCameraPosition","setSize","assign","$assign","A","K","aLen","mixin","_callbacks","once","removeListener","removeAllListeners","callbacks","cb","listeners","hasListeners","sub","sum","armLocation","armRotation","cameraOffset","offsetMultiplier","calculateCameraOrientation","_sign","_sign2","mul","rot","xa","za","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","progress","prev","bar","MozBorderRadius","slide","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","precision","_current","setRange","isNumeric","setStep","calculatePrettyStep","log10","log","LN10","step1","step2","step5","toPrecision","getStep","checkFirst","combine","newMin","newMax","isEmpty","capitalize","str","prefixFieldName","fieldName","forceCopy","dst","srcKey","dstKey","safeCopy","OPTIONKEYS","PREFIXEDOPTIONKEYS","setSpecialSettings","setBackgroundColor","setDataColor","setStyle","setShowLegend","isLegendGraphStyle","getStyleNumberByName","styleName","STYLENAME","checkStyleNumber","valid","styleNumber","borderWidth","borderStyle","camPos","dot-line","dot-color","dot-size","grid","bar-color","bar-size","propagating","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_firstTarget","hammer","events","propagatedHandler","srcEvent","_handled","stopped","stopPropagation","srcStop","bind","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","wrapper","pointerType","isFirst","handler","eventType","hammers","idx","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","each","message","deprecationMessage","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","find","inArray","findByKey","uniqueArray","results","prefixed","property","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","enable","init","createInputInstance","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","angle","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","atan2","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","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","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","DEDUP_TIMEOUT","isSyntheticEvent","DEDUP_DISTANCE","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","oldCssProps","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","nextKey","dest","merge","MOBILE_REGEX","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","compute","getTouchAction","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","force","curRecognizer","existing","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","_exportFunctions","_bound","keydown","keyup","fromCharCode","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","Timeline","Graph2d","timeline","Core","DateUtil","TimeStep","components","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","groups","forthArgument","throttleRedraw","defaultOptions","autoResize","orientation","axis","maxHeight","minHeight","rtl","directionFromDom","domNode","getComputedStyle","parentElement","rollingMode","domProps","emitter","hiddenDates","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","ondblclick","oncontextmenu","onmouseover","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","_Configurator","_Configurator2","_Validator","_Validator2","printStyle","allOptions","configureOptions","_createConfigurator","markDirty","refreshItems","validate","selection","getSelection","setSelection","newDataSet","group","focus","itemData","dataset","getDataRange","minItem","maxItem","getStart","getEnd","factor","groupShowing","show","repositionX","startSide","getWidthRight","endSide","getWidthLeft","lhs","rhs","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","foreground","labelSet","groupId","pageX","pageY","toggleRollingMode","rolling","stopRolling","startRolling","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","_ColorPicker","_ColorPicker2","Configurator","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","_removePopup","_clean","_this","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseout","optionsContainer","_push","_showPopupIfNeeded","path","_len","_key","div","objectLabel","select","selectedValue","selected","_update","_makeLabel","popupString","popupValue","oninput","itemIndex","_setupPopup","_this2","html","hideTimeout","deleteTimeout","_this3","correspondingElement","checkbox","checked","_this4","defaultColor","_showColorPicker","_this5","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","_label","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","pointer","getOptions","instance","_defineProperty","_defineProperty2","protoProps","staticProps","desc","hammerUtil","ColorPicker","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","_rgbaArray","rgbObj","alpha","_setColor","_generateHueCircle","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","drag","pinch","onTouch","_moveSelector","sat","sfac","fillRect","getImageData","centerY","centerX","newTop","newLeft","onRelease","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","errorFound","Validator","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","localSearch","findInOptions","globalSearch","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","_j","_j2","matrix","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","rollingModeBtn","validateDirection","conversion","currentTimeTimer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","dragging","ease","_applyRange","updateHiddenDates","getMillisecondsPerPixel","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","horizontalScroll","pointerDate","getPointer","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","runUntil","dayOffset","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","timeOffset","requiredDuration","previousPoint","correctionEnabled","Activator","onMouseWheel","isActive","verticalScroll","scrollTop","adjusted","_setScrollTop","onMouseScrollSide","handleDragOver","itemAddedToTimeline","dataTransfer","dropEffect","handleDrop","getData","_onAddItem","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTopMin","initialDrawDone","_origRedraw","initialItemSetDrawn","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","removeCustomTime","getVisibleItems","getWindow","zoomIn","percentage","newInterval","zoomOut","borderRootHeight","borderRootWidth","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","contentsOverflow","centerWidth","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","align","stackSubgroups","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","overrideItems","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","followMouse","overflowMethod","tooltipOnItemUpdateTime","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","popup","touchParams","groupTouchParams","_Popup","_Popup2","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","_onMouseOver","_onMouseOut","addCallback","dirty","displayed","unselect","rawVisibleItems","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","scrolled","lastRangeStart","restack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","nestedGroups","nestedGroupId","updatedNestedGroup","nestedInGroup","showNested","_order","getGroups","removeItem","_getType","_removeItem","groupData","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","oldGroupId","oldSubGroupId","subgroup","oldGroup","changeSubgroup","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","itemIsDragging","selectedItem","initialX","dragLeft","_cloneItemData","dragRight","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","initialEnd","initialStart","newOffset","_moveToGroup","collapsedDirClassName","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","oldSelection","newSelection","itemFromRelatedTarget","getTitle","setText","setPosition","offsetTop","_onUpdateItem","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","itemSetFromTarget","Popup","Element","doShow","maxWidth","isLeft","isTop","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","_moment","currentMonth","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","isVisible","itemsInRange","byStart","byEnd","checkRangedItems","marker","templateFunction","paddingRight","paddingLeft","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","_isGroupVisible","customOrderedItems","_updateItemsInRange","nostack","_updateSubgroupsSizes","_calculateHeight","repositionY","resetSubgroups","setParent","_addToSubgroup","orderSubgroups","_checkIfVisible","subgroupId","sortArray","sortField","_removeFromSubgroup","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","oldSubgroup","newSubgroup","collidingItem","jj","collision","otherSubgroup","collisionByTimes","baseClassName","visibleFrame","_updateContents","_updateDataAttributes","_updateStyle","_repaintOnItemUpdateTimeTooltip","_repaintDeleteButton","_repaintDragCenter","_repaintDragLeft","_repaintDragRight","limitSize","contentStartPosition","parentWidth","boxWidth","_updateEditStatus","dragCenter","dragCenterItem","deleteButton","onItemUpdateTimeTooltip","itemDistanceFromTop","template","itemVisibleFrameContent","visibleFrameTemplateFunction","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","dataAttributes","attributes","setAttribute","removeAttribute","outerHTML","widthInMs","previousRight","previousLeft","itemSetHeight","marginLeft","marginRight","itemSubgroup","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","prevWidth","labelMinor","xFirstMajorLabel","showMinorGrid","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","eventParams","warned","substring","elementsCensor","showCurrentTime","bool","boolean","function","any","null","groupsDraggable","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","Bars","Lines","Points","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existing_items","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","screen_end","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconOffset","groupArray","iconHeight","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","amount","resolved","accumulatedNegative","accumulatedPositive","dataWidth","pointData","groupLabel","_getStackedYRange","xpos","getGroupTemplate","callbackResult","getCallback","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","bp1","bp2","d1","d2","d3","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","Network","network","Images","dotparser","gephiParser","convertDot","DOTToGraph","convertGephi","parseGephi","nodes","nodeIndices","edges","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","view","bindEventListeners","images","_Images2","_Groups2","_Canvas2","selectionHandler","_SelectionHandler2","interactionHandler","_InteractionHandler2","_View2","renderer","_CanvasRenderer2","_PhysicsEngine2","layoutEngine","_LayoutEngine2","clustering","_Clustering2","manipulation","_ManipulationSystem2","nodesHandler","_NodesHandler2","edgesHandler","_EdgesHandler2","_KamadaKawai2","_Images","_Groups","_NodesHandler","_EdgesHandler","_PhysicsEngine","_Clustering","_CanvasRenderer","_Canvas","_View","_InteractionHandler","_SelectionHandler","_LayoutEngine","_ManipulationSystem","_KamadaKawai","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","imageBroken","url","imageToCache","brokenUrl","imageToLoadBrokenUrlOn","onerror","_addImageToCache","Image","imageToRedrawWith","cachedImage","img","onload","_redrawWithImage","_tryloadBrokenUrl","Groups","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","_index","_Node","_Node2","_Label","_Label2","NodesHandler","nodesListeners","borderWidthSelected","brokenImage","fixed","face","strokeColor","vadjust","multi","bold","mod","boldital","ital","mono","image","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shape","shapeProperties","borderDashes","useImageSize","useBorderWithImage","nodeOptions","parseOptions","updateShape","updateLabelModule","_reset","_nodeId2","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","clearPositions","dataArray","_node","_node2","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","_Box","_Box2","_Circle","_Circle2","_CircularImage","_CircularImage2","_Database","_Database2","_Diamond","_Diamond2","_Dot","_Dot2","_Ellipse","_Ellipse2","_Icon","_Icon2","_Image","_Image2","_Square","_Square2","_Star","_Star2","_Text","_Text2","_Triangle","_Triangle2","_TriangleDown","_TriangleDown2","Node","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","choosify","imageObj","load","unselected","imageObjAlt","propagateFonts","chooser","chosen","chosenNode","shadowColor","shadowSize","shadowX","shadowY","constrain","distanceToBorder","sizeDiff","fontDiff","getFormattingValues","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","_slicedToArray2","_slicedToArray3","Label","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","elementOptions","labelDirty","constrainWidth","maxWdt","minWdt","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","constrainHeight","minHgt","valign","heightConstraint","heightConstraintMinimum","heightConstraintValign","chosenLabel","margins","widthBias","heightBias","mods","optionsFontMod","modOptionsArray","ratio","_ratio","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","fontSize","_setAlignment2","_setAlignment","_setAlignment3","labelHeight","lineCount","blocks","block","_getColor2","_getColor","_getColor3","fontColor","strokeText","initialStrokeColor","_processLabel","markupSystem","system","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","beginable","spacing","buffer","modStack","modName","emitBlock","ch","unshift","selectedState","hoverState","accumulate","addAndAccumulate","_nlLines","splitBlocks","_values","words","atStart","measure","lastMeasure","pre","measureText","_values2","_measure","_values3","_words","_text","_measure2","_lastMeasure","_pre","_text2","_measure3","newOptionsArray","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_e","_s","isIterable","_getPrototypeOf","_getPrototypeOf2","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_NodeBase2","_NodeBase3","Box","_NodeBase","__proto__","_setMargins","differentState","textSize","getTextSize","roundRect","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","$getPrototypeOf","ReferenceError","_setPrototypeOf","_setPrototypeOf2","subClass","superClass","setPrototypeOf","buggy","NodeBase","adjustSizes","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","_CircleImageBase2","_CircleImageBase3","Circle","_CircleImageBase","diameter","_drawRawCircle","CircleImageBase","labelOffset","imageLoaded","setImages","imageTmp","globalAlpha","can2","ctx2","drawImage","iterations","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","switchImages","clip","_drawImageAtPosition","_drawImageLabel","Database","database","_distanceToBorder","_ShapeBase2","_ShapeBase3","Diamond","_ShapeBase","_resizeShape","_drawShape","ShapeBase","sizeMultiplier","Dot","Ellipse","ellipse","Icon","_icon","neutralborderWidth","selectionLineWidth","Square","Star","Text","Triangle","TriangleDown","_Edge","_Edge2","EdgesHandler","edgesListeners","arrows","scaleFactor","arrowStrikethrough","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","updateEdgeType","_edgeId","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","cleanup","_CubicBezierEdge","_CubicBezierEdge2","_BezierEdgeDynamic","_BezierEdgeDynamic2","_BezierEdgeStatic","_BezierEdgeStatic2","_StraightEdge","_StraightEdge2","Edge","baseWidth","edgeType","connected","_setInteractionWidths","chosenEdge","toArrow","fromArrow","middleArrow","inheritsColor","toArrowScale","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","selectedWidth","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","colorsDefined","_CubicBezierEdgeBase2","_CubicBezierEdgeBase3","CubicBezierEdge","_CubicBezierEdgeBase","viaNodes","via1","via2","bezierCurveTo","x1","y1","x2","y2","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref4","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","via","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_getCircleData2","_getCircleData","_getCircleData3","_circle","pattern","lineDashOffset","_getCircleData4","_getCircleData5","dashedLine","_getCircleData6","_getCircleData7","_x","_y","_radius","_findBorderPosition","_findBorderPositionCircle","_getCircleData8","_getCircleData9","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","_getCircleData10","_getCircleData11","py","something","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData12","_getCircleData13","circleEndpoint","arrowEndpoint","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","cr","BezierEdgeStatic","xVia","yVia","pi","originalAngle","myAngle","_pi","_originalAngle","_myAngle","StraightEdge","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","_BarnesHutSolver","_BarnesHutSolver2","_RepulsionSolver","_RepulsionSolver2","_HierarchicalRepulsionSolver","_HierarchicalRepulsionSolver2","_SpringSolver","_SpringSolver2","_HierarchicalSpringSolver","_HierarchicalSpringSolver2","_CentralGravitySolver","_CentralGravitySolver2","_FA2BasedRepulsionSolver","_FA2BasedRepulsionSolver2","_FA2BasedCentralGravitySolver","_FA2BasedCentralGravitySolver2","PhysicsEngine","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","BarnesHutSolver","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","SpringSolver","edgeLength","node3","_calculateSpringForce","springForce","HierarchicalSpringSolver","springFx","springFy","_i2","totalFx","totalFy","_i3","correctionFx","correctionFy","_i4","_nodeId3","CentralGravitySolver","_BarnesHutSolver3","ForceAtlas2BasedRepulsionSolver","degree","_CentralGravitySolver3","ForceAtlas2BasedCentralGravitySolver","_NetworkUtil","_NetworkUtil2","_Cluster","_Cluster2","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","edgeReplacedById","_backupEdgeOptions","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","_clonedOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","_containedNode","_nodeId4","_containedNode2","_nodeId5","_containedNode3","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","baseEdgeId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","NetworkUtil","allNodes","specificNodes","amountOfConnections","_Node3","Cluster","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","_NavigationHandler","_NavigationHandler2","InteractionHandler","navigationHandler","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent2","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","SelectionHandler","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","idArray","RangeError","LayoutEngine","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","startLength","before","clusterBridges","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","hierarchicalLevels","lastNodeOnLevel","hierarchicalChildrenReference","hierarchicalParentReference","hierarchicalTrees","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","getTreeSizes","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode3","minSpaceNode","maxSpaceNode","getMaxLevel","accumulator","_getMaxLevel","getCollisionLevel","maxLevel1","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","levels","centerParents","levelNodes","branchShiftCallback","centerParent","branchNodes1","branchNodes2","_getBranchBoundary","_getBranchBoundary2","max1","_getBranchBoundary3","_getBranchBoundary4","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","_getBranchBoundary5","_getBranchBoundary6","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode4","_getSpaceAroundNode5","newPosition","treeSizes","shiftBy","useMap","prevNode","nextNode","nextPos","parents","parentId","minPos","maxPos","_i5","_getSpaceAroundNode6","_getSpaceAroundNode7","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validataPositionAndContinue","parentLevel","_i6","childNodeLevel","_i7","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","nodeA","nodeB","_crawlNetwork","levelByDirection","_setMinLevelToZero","minLevel","_this6","fillInRelations","_this7","startingNodeId","crawler","tree","_this8","shifter","childA","childB","_this9","iterateParents","findParent","foundParent","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","editWithoutDrag","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","maximum","minimum","_FloydWarshall","_FloydWarshall2","KamadaKawai","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode3","_moveNode","_getEnergy2","_getEnergy","_getEnergy3","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy4","_getEnergy5","x_m","y_m","iIdx","x_i","y_i","denominator","K_matrix","L_matrix","d2E_dx2","d2E_dxdy","d2E_dy2","FloydWarshall","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","xc","yc","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","setValue","graphs","attr","getToken","tokenType","TOKENTYPE","NULL","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","maxLength","forEach2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError"],"mappings":"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","file":"vis"} \ No newline at end of file +{"version":3,"sources":["vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","extend","_interopRequireDefault","obj","__esModule","default","_getIterator2","_getIterator3","_create","_create2","_keys","_keys2","_typeof2","_typeof3","moment","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","arguments","length","undefined","protoExtend","i","other","selectiveExtend","props","Array","isArray","Error","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","match","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","classNames","classes","className","split","newClasses","concat","filter","join","removeClassName","oldClasses","forEach","callback","toArray","array","updateProperty","key","throttle","fn","scheduled","requestAnimationFrame","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","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","member","err","global","hide","Iterators","TO_STRING_TAG","collections","NAME","Collection","proto","prototype","addToUnscopables","step","toIObject","iterated","kind","_t","_i","_k","O","index","Arguments","IObject","defined","it","cof","propertyIsEnumerable","LIBRARY","$export","redefine","has","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","keys","returnThis","Base","Constructor","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","name","values","P","F","core","ctx","source","own","out","IS_FORCED","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","C","apply","Function","virtual","R","U","self","__g","version","__e","aFunction","that","dP","createDesc","anObject","IE8_DOM_DEFINE","toPrimitive","defineProperty","Attributes","isObject","get","is","val","bitmap","enumerable","configurable","writable","create","descriptor","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","display","src","contentWindow","open","write","lt","close","Properties","getKeys","defineProperties","$keys","arrayIndexOf","names","toLength","toIndex","IS_INCLUDES","$this","el","fromIndex","toInteger","ceil","shared","uid","store","px","random","documentElement","def","tag","stat","Symbol","USE_SYMBOL","toObject","ObjectProto","$at","point","TO_STRING","pos","l","charCodeAt","charAt","getIterator","iterFn","classof","getIteratorMethod","ARG","tryGet","T","callee","$Object","D","fails","KEY","exp","_iterator2","_symbol","_symbol2","_typeof","DESCRIPTORS","META","$fails","wks","wksExt","wksDefine","keyOf","enumKeys","gOPNExt","$GOPD","$DP","gOPD","gOPN","$Symbol","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","symbols","for","keyFor","useSetter","useSimple","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","replacer","$replacer","args","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","gOPS","pIE","getSymbols","arg","windowNames","getWindowNames","hiddenKeys","hooks","hookCallback","input","isObjectEmpty","isUndefined","res","hasOwnProp","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","some$1","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","copyConfig","to","from","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","number","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","stack","deprecateSimple","deprecations","isFunction","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","now","output","_calendar","longDateFormat","_longDateFormat","formatUpper","toUpperCase","invalidDate","_invalidDate","ordinal","_ordinal","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priority","priorities","getPrioritizedUnits","unitsObj","u","sort","makeGetSet","keepTime","set$1","stringGet","stringSet","prioritized","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","addFormatToken","token","padded","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","replaceLongDateFormatTokens","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","indexOf$1","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","isLeapYear","getIsLeapYear","createDate","y","M","ms","getFullYear","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","weekdays","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","normalizeLocale","chooseLocale","loadLocale","oldLocale","locales","globalLocale","_abbr","code","getSetGlobalLocale","data","getLocale","defineLocale","baseConfig","abbr","parentLocale","localeFamilies","x","updateLocale","listLocales","keys$1","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","configFromRFC2822","dayFormat","timezone","timezoneIndex","timezones"," GMT"," EDT"," EST"," CDT"," CST"," MDT"," MST"," PDT"," PST","military","basicRfcRegex","momentDate","momentDay","splice","configFromString","aspNetJsonRegex","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","weekYear","temp","weekdayOverflow","GG","createLocal","curWeek","gg","ISO_8601","RFC_2822","parsedInput","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","hour","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","ordering","unitHasDecimal","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","days","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","delta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","inspect","zone","prefix","suffix","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","isoWeekday","unix","toJSON","isValid$2","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","withSuffix","toISOString$1","abs$1","Y","asSeconds","some","fun","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","o","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","prototypeMin","prototypeMax","invalid","lang","isoWeekYear","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","isoWeeks","isoWeeksInYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","webpackPolyfill","paths","children","webpackContext","req","resolve","buf","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","n","rnds","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Hammer","keycharm","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","groupTemplate","labelObj","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","_options","_fieldId","fieldId","_type","_subscribers","setOptions","_stringify2","queue","_queue","destroy","on","subscribers","subscribe","off","unsubscribe","_trigger","params","senderId","subscriber","addedIds","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","ids","firstType","returnType","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","fieldType","count","exists","types","raw","converted","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","original","method","context","entry","clearTimeout","setTimeout","_ids","_onEvent","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","container","SyntaxError","containerElement","dataTable","dataPoints","Settings","setDefaults","DEFAULTS","colX","colY","colZ","colValue","colFilter","getMouseX","clientX","targetTouches","getMouseY","clientY","_assign","_assign2","Emitter","Range","STYLE","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter","DOT","tooltip","tooltipStyle","padding","borderRadius","boxShadow","line","borderLeft","dot","showLegend","backgroundColor","dataColor","fill","stroke","strokeWidth","cameraPosition","horizontal","vertical","distance","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep","_setScale","xRange","range","yRange","zRange","z","valueRange","center","zCenter","camera","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","cameraLocation","getCameraLocation","cameraRotation","getCameraRotation","ax","ay","az","cx","cy","cz","sinTx","sin","cosTx","cos","sinTy","cosTy","sinTz","cosTz","bx","by","ex","eye","ey","ez","dx","dy","dz","getArmLength","currentXCenter","frame","canvas","currentYCenter","_calcTranslations","points","trans","screen","transBottom","bottom","dist","sortDepth","getNumberOfRows","getNumberOfColumns","counter","column","getDistinctValues","distinctValues","getSmallestDifference","smallest_diff","getColumnRange","_checkValueField","BARCOLOR","BARSIZE","DOTCOLOR","DOTSIZE","_setRangeDefaults","defaultMin","defaultMax","_dataInitialize","rawData","_onChange","withBars","BAR","defaultXBarWidth","defaultYBarWidth","expand","defaultXMin","defaultXMax","defaultXStep","defaultYMin","defaultYMax","defaultYStep","defaultZMin","defaultZMax","defaultZStep","defaultValueMin","defaultValueMax","dataFilter","setOnLoadCallback","redraw","_getDataPoints","GRID","SURFACE","dataX","dataY","sortNumber","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","LINE","pointNext","noCanvas","fontWeight","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onclick","_onClick","_setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","getCameraPosition","getArmRotation","_readData","_redrawFilter","setPointDrawingMethod","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","DOTLINE","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","getContext","lineJoin","lineCap","clearRect","_dotSize","_getLegendWidth","isSizeLegend","isValueLegend","margin","lineWidth","font","ymax","hue","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","widthMin","fillStyle","closePath","legendMin","legendMax","start","end","getCurrent","_line","textAlign","textBaseline","fillText","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","drawAxisLabelX","text","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","prettyStep","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","from3d","xMin2d","xMax2d","H","V","Hi","X","_getStrokeWidth","_redrawBar","xWidth","yWidth","borderColor","surface","surfaces","corners","avg","transCenter","_polygon","_drawCircle","radius","_calcRadius","arc","PI","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","dotSize","sizeMin","sizeRange","cross","topSideVisible","showGrayBottom","aDiff","bDiff","crossproduct","crossProduct","zAvg","_drawGridLine","_storeMousePosition","startMouseX","startMouseY","_startCameraOffset","getOffset","leftButtonDown","_onMouseUp","which","button","touchDown","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","moving","diffX","diffY","ctrlKey","scaleX","scaleY","offXNew","armLength","offYNew","setOffset","horizontalNew","verticalNew","snapValue","setArmRotation","parameters","emit","onclick_callback","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","showTooltip","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","wheelDelta","detail","oldLength","newLength","setArmLength","_insideTriangle","triangle","bs","cs","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","dom","contentWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","setCameraPosition","setSize","assign","$assign","A","K","aLen","mixin","_callbacks","once","removeListener","removeAllListeners","callbacks","cb","listeners","hasListeners","sub","sum","armLocation","armRotation","cameraOffset","offsetMultiplier","calculateCameraOrientation","_sign","_sign2","mul","rot","xa","za","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","progress","prev","bar","MozBorderRadius","slide","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","precision","_current","setRange","isNumeric","setStep","calculatePrettyStep","log10","log","LN10","step1","step2","step5","toPrecision","getStep","checkFirst","combine","newMin","newMax","isEmpty","capitalize","str","prefixFieldName","fieldName","forceCopy","dst","srcKey","dstKey","safeCopy","OPTIONKEYS","PREFIXEDOPTIONKEYS","setSpecialSettings","setBackgroundColor","setDataColor","setStyle","setShowLegend","isLegendGraphStyle","getStyleNumberByName","styleName","STYLENAME","checkStyleNumber","valid","styleNumber","borderWidth","borderStyle","camPos","dot-line","dot-color","dot-size","grid","bar-color","bar-size","propagating","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_firstTarget","hammer","events","propagatedHandler","srcEvent","_handled","stopped","stopPropagation","srcStop","bind","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","wrapper","pointerType","isFirst","handler","eventType","hammers","idx","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","each","message","deprecationMessage","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","find","inArray","findByKey","uniqueArray","results","prefixed","property","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","enable","init","createInputInstance","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","angle","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","atan2","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","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","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","DEDUP_TIMEOUT","isSyntheticEvent","DEDUP_DISTANCE","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","oldCssProps","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","nextKey","dest","merge","MOBILE_REGEX","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","compute","getTouchAction","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","force","curRecognizer","existing","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","_exportFunctions","_bound","keydown","keyup","fromCharCode","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","Timeline","Graph2d","timeline","Core","DateUtil","TimeStep","components","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","groups","forthArgument","throttleRedraw","defaultOptions","autoResize","orientation","axis","maxHeight","minHeight","rtl","directionFromDom","domNode","getComputedStyle","parentElement","rollingMode","domProps","emitter","hiddenDates","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","ondblclick","oncontextmenu","onmouseover","onpointerdown","onpointermove","onpointerup","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","printStyle","allOptions","configureOptions","Configurator","Validator","_createConfigurator","markDirty","refreshItems","validate","selection","getSelection","setSelection","newDataSet","group","focus","itemData","dataset","getDataRange","minItem","maxItem","getStart","getEnd","factor","groupShowing","show","repositionX","startSide","getWidthRight","endSide","getWidthLeft","lhs","rhs","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","foreground","labelSet","groupId","pageX","pageY","toggleRollingMode","rolling","stopRolling","startRolling","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","follow","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","rollingModeBtn","validateDirection","conversion","currentTimeTimer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","dragging","ease","_applyRange","updateHiddenDates","timeoutID","getMillisecondsPerPixel","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","horizontalScroll","pointerDate","pointer","getPointer","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","onTouch","onRelease","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","runUntil","dayOffset","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","timeOffset","requiredDuration","previousPoint","correctionEnabled","hammerUtil","Activator","onMouseWheel","isActive","verticalScroll","scrollTop","adjusted","_setScrollTop","onMouseScrollSide","handleDragOver","itemAddedToTimeline","dataTransfer","dropEffect","handleDrop","getData","_onAddItem","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTopMin","initialDrawDone","_origRedraw","initialItemSetDrawn","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","removeCustomTime","getVisibleItems","getWindow","zoomIn","percentage","newInterval","zoomOut","borderRootHeight","borderRootWidth","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","contentsOverflow","centerWidth","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","align","stackSubgroups","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","overrideItems","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","showTooltips","followMouse","overflowMethod","tooltipOnItemUpdateTime","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","popup","touchParams","groupTouchParams","Popup","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","_onMouseOver","_onMouseOut","dirty","displayed","unselect","select","rawVisibleItems","isVisible","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","scrolled","lastRangeStart","forceRestack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","nestedGroups","nestedGroupId","updatedNestedGroup","nestedInGroup","showNested","_order","getGroups","removeItem","_getType","selected","_removeItem","groupData","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","itemIsDragging","selectedItem","initialX","dragLeft","_cloneItemData","dragRight","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","initialEnd","initialStart","newOffset","_moveToGroup","oldGroup","collapsedDirClassName","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","oldSelection","newSelection","itemFromRelatedTarget","getTitle","setText","setPosition","offsetTop","_onUpdateItem","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","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","_moment","currentWeek","currentMonth","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","stackDirty","itemsInRange","byStart","byEnd","checkRangedItems","marker","templateFunction","Element","paddingRight","paddingLeft","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","lastIsVisible","_isGroupVisible","customOrderedItems","_updateItemsInRange","nostack","_updateSubgroupsSizes","_calculateHeight","repositionY","resetSubgroups","subgroup","setParent","_addToSubgroup","orderSubgroups","_checkIfVisible","subgroupId","sortArray","sortField","_removeFromSubgroup","itemIndex","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","changeSubgroup","oldSubgroup","newSubgroup","collidingItem","jj","collision","newTop","otherSubgroup","collisionByTimes","baseClassName","visibleFrame","_updateContents","_updateDataAttributes","_updateStyle","maxWidth","_repaintOnItemUpdateTimeTooltip","_repaintDeleteButton","_repaintDragCenter","_repaintDragLeft","_repaintDragRight","limitSize","contentStartPosition","parentWidth","boxWidth","_updateEditStatus","dragCenter","dragCenterItem","deleteButton","onItemUpdateTimeTooltip","itemDistanceFromTop","template","itemVisibleFrameContent","visibleFrameTemplateFunction","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","dataAttributes","attributes","setAttribute","removeAttribute","outerHTML","widthInMs","previousRight","previousLeft","itemSetHeight","marginLeft","marginRight","itemSubgroup","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","doShow","isLeft","isTop","instance","_defineProperty","_defineProperty2","protoProps","staticProps","desc","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","showMinorGrid","prevWidth","labelMinor","xFirstMajorLabel","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","eventParams","drag","warned","substring","showCurrentTime","errorFound","referenceOptions","subObject","usedOptions","path","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","localSearch","findInOptions","globalSearch","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","_j","_j2","matrix","bool","boolean","function","any","null","groupsDraggable","ColorPicker","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","_removePopup","_clean","_this","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseout","optionsContainer","_push","_showPopupIfNeeded","_len","_key","div","objectLabel","selectedValue","_update","_makeLabel","popupString","popupValue","oninput","_setupPopup","_this2","html","hideTimeout","deleteTimeout","_this3","correspondingElement","checkbox","checked","_this4","defaultColor","_showColorPicker","_this5","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","_label","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","getOptions","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","_rgbaArray","rgbObj","alpha","_setColor","_generateHueCircle","_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","sfac","fillRect","getImageData","centerY","centerX","newLeft","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","Bars","Lines","Points","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existingItemsMap","existing_items","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","screen_end","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconOffset","groupArray","iconHeight","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","amount","resolved","accumulatedNegative","accumulatedPositive","dataWidth","pointData","groupLabel","_getStackedYRange","xpos","getGroupTemplate","callbackResult","getCallback","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","bp1","bp2","d1","d2","d3","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","Network","network","Images","dotparser","gephiParser","convertDot","DOTToGraph","convertGephi","parseGephi","nodes","nodeIndices","edges","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","view","bindEventListeners","images","Groups","Canvas","selectionHandler","SelectionHandler","interactionHandler","InteractionHandler","View","renderer","CanvasRenderer","PhysicsEngine","layoutEngine","LayoutEngine","clustering","ClusterEngine","manipulation","ManipulationSystem","nodesHandler","NodesHandler","edgesHandler","EdgesHandler","KamadaKawai","_require","_require2","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","roundRect","r2d","ellipse_vis","ox","oy","xe","ye","xm","ym","bezierCurveTo","database","wEllipse","hEllipse","ymb","yeb","arrowEndpoint","xt","yt","xi","yi","xl","yl","xr","yr","circleEndpoint","xc","yc","dashedLine","x2","y2","pattern","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","setValue","addNode","graphs","attr","addEdge","getToken","tokenType","TOKENTYPE","NULL","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","maxLength","forEach2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","image","shape","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","arrows","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","gephiJSON","inheritColor","fixed","gEdges","gNodes","gEdge","gNode","edit","del","back","editEdge","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError","_CachedImage","_CachedImage2","imageBroken","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","imageToRedrawWith","cachedImage","img","onload","_fixImageCoordinates","_redrawWithImage","_tryloadBrokenUrl","imageToCache","CachedImage","NUM_ITERATIONS","Image","coordinates","_fillMipMap","drawImage","iterations","_to","_isImageOk","complete","naturalWidth","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","_index","Node","Label","nodesListeners","borderWidthSelected","brokenImage","face","strokeColor","vadjust","multi","bold","mod","boldital","ital","mono","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shapeProperties","borderDashes","useImageSize","useBorderWithImage","nodeOptions","parseOptions","updateShape","updateLabelModule","needsRefresh","_nodeId2","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","clearPositions","dataArray","_node","_node2","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","Box","Circle","CircularImage","Database","Diamond","Dot","Ellipse","Icon","Square","Star","Text","Triangle","TriangleDown","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","choosify","_load_images","propagateFonts","imageObj","load","unselected","imageObjAlt","chooser","chosen","chosenNode","shadowColor","shadowSize","shadowX","shadowY","constrain","refreshNeeded","distanceToBorder","sizeDiff","fontDiff","getFormattingValues","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","_slicedToArray2","_slicedToArray3","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","elementOptions","labelDirty","constrainWidth","maxWdt","minWdt","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","constrainHeight","minHgt","valign","heightConstraint","heightConstraintMinimum","heightConstraintValign","chosenLabel","margins","widthBias","heightBias","pathP","opt","getP","mods","modOptions","modDefaults","parseFontString","ratio","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","fontSize","_setAlignment2","_setAlignment","_setAlignment3","labelHeight","lineCount","blocks","block","_getColor2","_getColor","_getColor3","fontColor","strokeText","initialStrokeColor","_processLabel","markupSystem","system","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","beginable","spacing","buffer","modStack","modName","emitBlock","ch","unshift","selectedState","hoverState","accumulate","addAndAccumulate","_nlLines","splitBlocks","_values","words","atStart","measure","lastMeasure","pre","measureText","_values2","_measure","_values3","_words","_text","_measure2","_lastMeasure","_pre","_text2","_measure3","outOptions","inOptions","newOptionsArray","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_e","_s","isIterable","_getPrototypeOf","_getPrototypeOf2","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_NodeBase2","_NodeBase3","_NodeBase","__proto__","_setMargins","textSize","getTextSize","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","$getPrototypeOf","ReferenceError","_setPrototypeOf","_setPrototypeOf2","subClass","superClass","setPrototypeOf","buggy","NodeBase","adjustSizes","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","differentState","_CircleImageBase2","_CircleImageBase3","_CircleImageBase","diameter","_drawRawCircle","CircleImageBase","labelOffset","setImages","selection_changed","imageTmp","ratio_width","ratio_height","globalAlpha","drawImageAtPosition","labelDimensions","_resizeImage","switchImages","clip","_drawImageAtPosition","_drawImageLabel","_distanceToBorder","_ShapeBase2","_ShapeBase3","_ShapeBase","_drawShape","ShapeBase","sizeMultiplier","_icon","neutralborderWidth","selectionLineWidth","Edge","edgesListeners","scaleFactor","arrowStrikethrough","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","updateEdgeType","_edgeId","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","cleanup","CubicBezierEdge","BezierEdgeDynamic","BezierEdgeStatic","StraightEdge","baseWidth","edgeType","connected","_setInteractionWidths","chosenEdge","toArrow","fromArrow","middleArrow","inheritsColor","toArrowScale","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","selectedWidth","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","colorsDefined","_CubicBezierEdgeBase2","_CubicBezierEdgeBase3","_CubicBezierEdgeBase","viaNodes","via1","via2","x1","y1","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref4","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","via","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_getCircleData2","_getCircleData","_getCircleData3","_circle","lineDashOffset","_getCircleData4","_getCircleData5","_getCircleData6","_getCircleData7","_x","_y","_radius","_findBorderPosition","_findBorderPositionCircle","_getCircleData8","_getCircleData9","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","_getCircleData10","_getCircleData11","py","something","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData12","_getCircleData13","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","cr","xVia","yVia","pi","originalAngle","myAngle","_pi","_originalAngle","_myAngle","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","BarnesHutSolver","Repulsion","HierarchicalRepulsion","SpringSolver","HierarchicalSpringSolver","CentralGravitySolver","ForceAtlas2BasedRepulsionSolver","ForceAtlas2BasedCentralGravitySolver","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","edgeLength","node3","_calculateSpringForce","springForce","springFx","springFy","_i2","totalFx","totalFy","_i3","correctionFx","correctionFy","_i4","_nodeId3","_BarnesHutSolver2","_BarnesHutSolver3","_BarnesHutSolver","degree","_CentralGravitySolver2","_CentralGravitySolver3","_CentralGravitySolver","NetworkUtil","Cluster","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","edgeReplacedById","_backupEdgeOptions","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","_clonedOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","_containedNode","_nodeId4","_containedNode2","_nodeId5","_containedNode3","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","baseEdgeId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","allNodes","specificNodes","amountOfConnections","_Node2","_Node3","_Node","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_setPixelRatio","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","newWidth","newHeight","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","NavigationHandler","navigationHandler","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent2","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","idArray","RangeError","HierarchicalStatus","childrenReference","parentReference","levels","trees","isTree","accumulator","_getMaxLevel","nodeA","nodeB","minLevel","min_x","max_x","min_y","max_y","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","clusterOptions","startLength","before","clusterBridges","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","lastNodeOnLevel","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","ensureLevel","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","_isVertical","getTreeSizes","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode3","minSpaceNode","maxSpaceNode","getCollisionLevel","maxLevel1","getMaxLevel","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","centerParents","levelNodes","branchShiftCallback","centerParent","branchNodes1","branchNodes2","_getBranchBoundary","_getBranchBoundary2","max1","_getBranchBoundary3","_getBranchBoundary4","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","_getBranchBoundary5","_getBranchBoundary6","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode4","_getSpaceAroundNode5","newPosition","treeSizes","shiftBy","useMap","prevNode","nextNode","nextPos","parents","parentId","minPos","maxPos","_i5","_getSpaceAroundNode6","_getSpaceAroundNode7","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validatePositionAndContinue","parentLevel","_i6","childNodeLevel","_i7","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","_crawlNetwork","levelByDirection","setMinLevelToZero","_this6","_this7","fillInRelations","addRelation","checkIfTree","_this8","startingNodeId","crawler","tree","_this9","shifter","childA","childB","_this10","iterateParents","findParent","foundParent","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","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","editWithoutDrag","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","maximum","minimum","_FloydWarshall","_FloydWarshall2","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode3","_moveNode","_getEnergy2","_getEnergy","_getEnergy3","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy4","_getEnergy5","_E_sums$m","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","_mIdx","colm","kcolm","lcolm","cell","oldDx","oldDy","FloydWarshall","knode","inode","icolm","jnode","jcolm"],"mappings":"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","file":"vis"} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index 1964beac..7c48489d 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 4.19.1 - * @date 2017-03-19 + * @version 4.20.0 + * @date 2017-05-21 * * @license * Copyright (C) 2011-2017 Almende B.V, http://almende.com @@ -22,25 +22,25 @@ * * 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){var o=i(1);o.extend(e,i(87)),o.extend(e,i(116)),o.extend(e,i(158))},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}var n=i(2),s=o(n),r=i(55),a=o(r),h=i(58),d=o(h),l=i(62),u=o(l),c=i(82),p=i(86);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;t.hasChildNodes()===!0;)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,u.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||o!==!0?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&t.indexOf(s)==-1)if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&n===!0?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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){t=t.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(t,e,i,o){return e+e+i+i+o+o});var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},e.overrideOpacity=function(t,i){if(t.indexOf("rgba")!=-1)return t;if(t.indexOf("rgb")!=-1){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;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={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(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.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){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;l==-1?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-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 t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in M)return M[t];switch(t){case"keys":return function(){return new i(this,t)};case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",O="values"==v,S=!1,M=t.prototype,D=M[c]||M["@@iterator"]||v&&M[v],C=D||x(v),T=v?O?x("entries"):C:void 0,E="Array"==e?M.entries||D:D;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),O&&D&&"values"!==D.name&&(S=!0,C=function(){return D.call(this)}),o&&!y||!p&&!S&&M[c]||r(M,c,C),h[e]=C,h[k]=f,v)if(b={values:O?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in M||s(M,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(""),t.close(),h=t.F;o--;)delete h.prototype[s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a.prototype=o(t),i=new a,a.prototype=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e,i){var o=i(21),n=i(22),s=i(35);t.exports=i(25)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(36),n=i(44);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){var o=i(31),n=i(9),s=i(37)(!1),r=i(41)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(9),n=i(38),s=i(40);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if((a=h[l++])!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(39),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(39),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(42)("keys"),n=i(43);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(16),n=o["__core-js_shared__"]||(o["__core-js_shared__"]={});t.exports=function(t){return n[t]||(n[t]={})}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){t.exports=i(16).document&&document.documentElement},function(t,e,i){var o=i(21).f,n=i(31),s=i(47)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(42)("wks"),n=i(43),s=i(16).Symbol,r="function"==typeof s;(t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))}).store=o},function(t,e,i){var o=i(31),n=i(49),s=i(41)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(12);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(51)(!0);i(13)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){var o=i(39),n=i(12);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):r-56320+(s-55296<<10)+65536)}}},function(t,e,i){var o=i(22),n=i(53);t.exports=i(17).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(11),n=i(47)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){t.exports={default:i(56),__esModule:!0}},function(t,e,i){i(57);var o=i(17).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(15);o(o.S,"Object",{create:i(33)})},function(t,e,i){t.exports={default:i(59),__esModule:!0}},function(t,e,i){i(60),t.exports=i(17).Object.keys},function(t,e,i){var o=i(49),n=i(35);i(61)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(15),n=i(17),s=i(26);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(63),s=o(n),r=i(66),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return void 0===t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":void 0===t?"undefined":h(t)}},function(t,e,i){t.exports={default:i(64),__esModule:!0}},function(t,e,i){i(50),i(4),t.exports=i(65).f("iterator")},function(t,e,i){e.f=i(47)},function(t,e,i){t.exports={default:i(67),__esModule:!0}},function(t,e,i){i(68),i(79),i(80),i(81),t.exports=i(17).Symbol},function(t,e,i){var o=i(16),n=i(31),s=i(25),r=i(15),a=i(30),h=i(69).KEY,d=i(26),l=i(42),u=i(46),c=i(43),p=i(47),f=i(65),m=i(70),v=i(71),g=i(72),y=i(75),b=i(22),_=i(9),w=i(28),x=i(29),k=i(33),O=i(76),S=i(78),M=i(21),D=i(35),C=S.f,T=M.f,E=O.f,P=o.Symbol,I=o.JSON,N=I&&I.stringify,R=p("_hidden"),z=p("toPrimitive"),A={}.propertyIsEnumerable,L=l("symbol-registry"),F=l("symbols"),B=l("op-symbols"),j=Object.prototype,H="function"==typeof P,W=o.QObject,Y=!W||!W.prototype||!W.prototype.findChild,G=s&&d(function(){return 7!=k(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=C(j,e);o&&delete j[e],T(t,e,i),o&&t!==j&&T(j,e,o)}:T,V=function(t){var e=F[t]=k(P.prototype);return e._k=t,e},U=H&&"symbol"==typeof P.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof P},q=function(t,e,i){return t===j&&q(B,e,i),b(t),e=w(e,!0),b(i),n(F,e)?(i.enumerable?(n(t,R)&&t[R][e]&&(t[R][e]=!1),i=k(i,{enumerable:x(0,!1)})):(n(t,R)||T(t,R,x(1,{})),t[R][e]=!0),G(t,e,i)):T(t,e,i)},X=function(t,e){b(t);for(var i,o=g(e=_(e)),n=0,s=o.length;s>n;)q(t,i=o[n++],e[i]);return t},Z=function(t,e){return void 0===e?k(t):X(k(t),e)},K=function(t){var e=A.call(this,t=w(t,!0));return!(this===j&&n(F,t)&&!n(B,t))&&(!(e||!n(this,t)||!n(F,t)||n(this,R)&&this[R][t])||e)},J=function(t,e){if(t=_(t),e=w(e,!0),t!==j||!n(F,e)||n(B,e)){var i=C(t,e);return!i||!n(F,e)||n(t,R)&&t[R][e]||(i.enumerable=!0),i}},Q=function(t){for(var e,i=E(_(t)),o=[],s=0;i.length>s;)n(F,e=i[s++])||e==R||e==h||o.push(e);return o},$=function(t){for(var e,i=t===j,o=E(i?B:_(t)),s=[],r=0;o.length>r;)!n(F,e=o[r++])||i&&!n(j,e)||s.push(F[e]);return s};H||(P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===j&&e.call(B,i),n(this,R)&&n(this[R],t)&&(this[R][t]=!1),G(this,t,x(1,i))};return s&&Y&&G(j,t,{configurable:!0,set:e}),V(t)},a(P.prototype,"toString",function(){return this._k}),S.f=J,M.f=q,i(77).f=O.f=Q,i(74).f=K,i(73).f=$,s&&!i(14)&&a(j,"propertyIsEnumerable",K,!0),f.f=function(t){return V(p(t))}),r(r.G+r.W+r.F*!H,{Symbol:P});for(var tt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),et=0;tt.length>et;)p(tt[et++]);for(var tt=D(p.store),et=0;tt.length>et;)m(tt[et++]);r(r.S+r.F*!H,"Symbol",{for:function(t){return n(L,t+="")?L[t]:L[t]=P(t)},keyFor:function(t){if(U(t))return v(L,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){Y=!0},useSimple:function(){Y=!1}}),r(r.S+r.F*!H,"Object",{create:Z,defineProperty:q,defineProperties:X,getOwnPropertyDescriptor:J,getOwnPropertyNames:Q,getOwnPropertySymbols:$}),I&&r(r.S+r.F*(!H||d(function(){var t=P();return"[null]"!=N([t])||"{}"!=N({a:t})||"{}"!=N(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!U(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&y(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!U(e))return e}),o[1]=e,N.apply(I,o)}}}),P.prototype[z]||i(20)(P.prototype,z,P.prototype.valueOf),u(P,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(43)("meta"),n=i(23),s=i(31),r=i(21).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(26)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},p=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:p}},function(t,e,i){var o=i(16),n=i(17),s=i(14),r=i(65),a=i(21).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e,i){var o=i(35),n=i(9);t.exports=function(t,e){for(var i,s=n(t),r=o(s),a=r.length,h=0;a>h;)if(s[i=r[h++]]===e)return i}},function(t,e,i){var o=i(35),n=i(73),s=i(74);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){var o=i(11);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(9),n=i(77).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(36),n=i(44).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(74),n=i(29),s=i(9),r=i(28),a=i(31),h=i(24),d=Object.getOwnPropertyDescriptor;e.f=i(25)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(70)("asyncIterator")},function(t,e,i){i(70)("observable")},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(83)},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(0,function(){function e(){return bo.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function n(t){var e;for(e in t)return!1;return!0}function s(t){return void 0===t}function r(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i0)for(i=0;i0?"future":"past"];return S(i)?i(e):i.replace(/%s/i,e)}function z(t,e){var i=t.toLowerCase();Po[i]=Po[i+"s"]=Po[e]=t}function A(t){return"string"==typeof t?Po[t]||Po[t.toLowerCase()]:void 0}function L(t){var e,i,o={};for(i in t)d(t,i)&&(e=A(i))&&(o[e]=t[i]);return o}function F(t,e){Io[t]=e}function B(t){var e=[];for(var i in t)e.push({unit:i,priority:Io[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,i){return function(o){return null!=o?(W(this,t,o),e.updateOffset(this,i),this):H(this,t)}}function H(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function W(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function Y(t){return t=A(t),S(this[t])?this[t]():this}function G(t,e){if("object"==typeof t){t=L(t);for(var i=B(t),o=0;o=0?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function U(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Ao[t]=n),e&&(Ao[e[0]]=function(){return V(n.apply(this,arguments),e[1],e[2])}),i&&(Ao[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function q(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function X(t){var e,i,o=t.match(No);for(e=0,i=o.length;e=0&&Ro.test(t);)t=t.replace(Ro,i),Ro.lastIndex=0,o-=1;return t}function J(t,e,i){Ho[t]=S(e)?e:function(t,o){return t&&i?i:e}}function Q(t,e){return d(Ho,t)?Ho[t](e._strict,e._locale):new RegExp($(t))}function $(t){return tt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function tt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function et(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),r(e)&&(o=function(t,i){i[e]=_(t)}),i=0;i=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function bt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function _t(t,e,i){var o=7+e-i;return-((7+bt(t,0,o).getUTCDay()-e)%7)+o-1}function wt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=_t(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=mt(s)+d):d>mt(t)?(s=t+1,r=d-mt(t)):(s=t,r=d),{year:s,dayOfYear:r}}function xt(t,e,i){var o,n,s=_t(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+kt(n,e,i)):r>kt(t.year(),e,i)?(o=r-kt(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function kt(t,e,i){var o=_t(t,e,i),n=_t(t+1,e,i);return(mt(t)-o+n)/7}function Ot(t){return xt(t,this._week.dow,this._week.doy).week}function St(){return this._week.dow}function Mt(){return this._week.doy}function Dt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ct(t){var e=xt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Et(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Pt(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function It(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Nt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Rt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=Qo.call(this._weekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=Qo.call(this._shortWeekdaysParse,r),n!==-1?n:null):(n=Qo.call(this._minWeekdaysParse,r),n!==-1?n:null):"dddd"===e?(n=Qo.call(this._weekdaysParse,r))!==-1?n:(n=Qo.call(this._shortWeekdaysParse,r))!==-1?n:(n=Qo.call(this._minWeekdaysParse,r),n!==-1?n:null):"ddd"===e?(n=Qo.call(this._shortWeekdaysParse,r))!==-1?n:(n=Qo.call(this._weekdaysParse,r))!==-1?n:(n=Qo.call(this._minWeekdaysParse,r),n!==-1?n:null):(n=Qo.call(this._minWeekdaysParse,r))!==-1?n:(n=Qo.call(this._weekdaysParse,r))!==-1?n:(n=Qo.call(this._shortWeekdaysParse,r),n!==-1?n:null)}function zt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return Rt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=u([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function At(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function Lt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Ft(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Et(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Bt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=ln),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function jt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=un),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=cn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=u([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=tt(a[e]),h[e]=tt(h[e]),d[e]=tt(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Yt(){return this.hours()%12||12}function Gt(){return this.hours()||24}function Vt(t,e){U(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Ut(t,e){return e._meridiemParse}function qt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Xt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Zt(t){return t?t.toLowerCase().replace("_","-"):t}function Kt(t){for(var e,i,o,n,s=0;s0;){if(o=Jt(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&w(n,i,!0)>=e-1)break;e--}s++}return null}function Jt(e){var i=null;if(!vn[e]&&void 0!==t&&t&&t.exports)try{i=pn._abbr,function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return vn[e]}function Qt(t,e){var i;return t&&(i=s(e)?ee(t):$t(t,e))&&(pn=i),pn._abbr}function $t(t,e){if(null!==e){var i=mn;if(e.abbr=t,null!=vn[t])O("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=vn[t]._config;else if(null!=e.parentLocale){if(null==vn[e.parentLocale])return gn[e.parentLocale]||(gn[e.parentLocale]=[]),gn[e.parentLocale].push({name:t,config:e}),null;i=vn[e.parentLocale]._config}return vn[t]=new C(D(i,e)),gn[t]&&gn[t].forEach(function(t){$t(t.name,t.config)}),Qt(t),vn[t]}return delete vn[t],null}function te(t,e){if(null!=e){var i,o=mn;null!=vn[t]&&(o=vn[t]._config),e=D(o,e),i=new C(e),i.parentLocale=vn[t],vn[t]=i,Qt(t)}else null!=vn[t]&&(null!=vn[t].parentLocale?vn[t]=vn[t].parentLocale:null!=vn[t]&&delete vn[t]);return vn[t]}function ee(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return pn;if(!i(t)){if(e=Jt(t))return e;t=[t]}return Kt(t)}function ie(){return Do(vn)}function oe(t){var e,i=t._a;return i&&p(t).overflow===-2&&(e=i[Go]<0||i[Go]>11?Go:i[Vo]<1||i[Vo]>nt(i[Yo],i[Go])?Vo:i[Uo]<0||i[Uo]>24||24===i[Uo]&&(0!==i[qo]||0!==i[Xo]||0!==i[Zo])?Uo:i[qo]<0||i[qo]>59?qo:i[Xo]<0||i[Xo]>59?Xo:i[Zo]<0||i[Zo]>999?Zo:-1,p(t)._overflowDayOfYear&&(eVo)&&(e=Vo),p(t)._overflowWeeks&&e===-1&&(e=Ko),p(t)._overflowWeekday&&e===-1&&(e=Jo),p(t).overflow=e),t}function ne(t){var e,i,o,n,s,r,a=t._i,h=yn.exec(a)||bn.exec(a);if(h){for(p(t).iso=!0,e=0,i=wn.length;e10?"YYYY ":"YY "),s="HH:mm"+(i[4]?":ss":""),i[1]){var u=new Date(i[2]),c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][u.getDay()];if(i[1].substr(0,3)!==c)return p(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(i[5].length){case 2:0===h?a=" +0000":(h=l.indexOf(i[5][1].toUpperCase())-12,a=(h<0?" -":" +")+(""+h).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:a=d[i[5]];break;default:a=d[" GMT"]}i[5]=a,t._i=i.splice(1).join(""),r=" ZZ",t._f=o+n+s+r,ue(t),p(t).rfc2822=!0}else t._isValid=!1}function re(t){var i=kn.exec(t._i);if(null!==i)return void(t._d=new Date(+i[1]));ne(t),t._isValid===!1&&(delete t._isValid,se(t),t._isValid===!1&&(delete t._isValid,e.createFromInputFallback(t)))}function ae(t,e,i){return null!=t?t:null!=e?e:i}function he(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function de(t){var e,i,o,n,s=[];if(!t._d){for(o=he(t),t._w&&null==t._a[Vo]&&null==t._a[Go]&&le(t),null!=t._dayOfYear&&(n=ae(t._a[Yo],o[Yo]),(t._dayOfYear>mt(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=bt(n,0,t._dayOfYear),t._a[Go]=i.getUTCMonth(),t._a[Vo]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Uo]&&0===t._a[qo]&&0===t._a[Xo]&&0===t._a[Zo]&&(t._nextDay=!0,t._a[Uo]=0),t._d=(t._useUTC?bt:yt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Uo]=24)}}function le(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=ae(e.GG,t._a[Yo],xt(be(),1,4).year),o=ae(e.W,1),((n=ae(e.E,1))<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=xt(be(),s,r);i=ae(e.gg,t._a[Yo],d.year),o=ae(e.w,d.week),null!=e.d?((n=e.d)<0||n>6)&&(h=!0):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>kt(i,s,r)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=wt(i,o,n,s,r),t._a[Yo]=a.year,t._dayOfYear=a.dayOfYear)}function ue(t){if(t._f===e.ISO_8601)return void ne(t);if(t._f===e.RFC_2822)return void se(t);t._a=[],p(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=K(t._f,t._locale).match(No)||[],i=0;i0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Ao[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),ot(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=h-d,a.length>0&&p(t).unusedInput.push(a),t._a[Uo]<=12&&p(t).bigHour===!0&&t._a[Uo]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[Uo]=ce(t._locale,t._a[Uo],t._meridiem),de(t),oe(t)}function ce(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function pe(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function je(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=ve(t),t._a){var e=t._isUTC?u(t._a):be(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function He(){return!!this.isValid()&&!this._isUTC}function We(){return!!this.isValid()&&this._isUTC}function Ye(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ge(t,e){var i,o,n,s=t,a=null;return De(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:r(t)?(s={},e?s[e]=t:s.milliseconds=t):(a=En.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[Vo])*i,h:_(a[Uo])*i,m:_(a[qo])*i,s:_(a[Xo])*i,ms:_(Ce(1e3*a[Zo]))*i}):(a=Pn.exec(t))?(i="-"===a[1]?-1:1,s={y:Ve(a[2],i),M:Ve(a[3],i),w:Ve(a[4],i),d:Ve(a[5],i),h:Ve(a[6],i),m:Ve(a[7],i),s:Ve(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=qe(be(s.from),be(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Me(s),De(t)&&d(t,"_locale")&&(o._locale=t._locale),o}function Ve(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function Ue(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 qe(t,e){var i;return t.isValid()&&e.isValid()?(e=Pe(e,t),t.isBefore(e)?i=Ue(t,e):(i=Ue(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function Xe(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(O(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ge(i,o),Ze(this,n,t),this}}function Ze(t,i,o,n){var s=i._milliseconds,r=Ce(i._days),a=Ce(i._months);t.isValid()&&(n=null==n||n,s&&t._d.setTime(t._d.valueOf()+s*o),r&&W(t,"Date",H(t,"Date")+r*o),a&&dt(t,H(t,"Month")+a*o),n&&e.updateOffset(t,r||a))}function Ke(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function Je(t,i){var o=t||be(),n=Pe(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(S(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,be(o)))}function Qe(){return new g(this)}function $e(t,e){var i=y(t)?t:be(t);return!(!this.isValid()||!i.isValid())&&(e=A(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()9999?Z(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):S(Date.prototype.toISOString)?this.toDate().toISOString():Z(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function di(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=e+'[")]';return this.format(i+o+"-MM-DD[T]HH:mm:ss.SSS"+n)}function li(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=Z(this,t);return this.localeData().postformat(i)}function ui(t,e){return this.isValid()&&(y(t)&&t.isValid()||be(t).isValid())?Ge({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ci(t){return this.from(be(),t)}function pi(t,e){return this.isValid()&&(y(t)&&t.isValid()||be(t).isValid())?Ge({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function fi(t){return this.to(be(),t)}function mi(t){var e;return void 0===t?this._locale._abbr:(e=ee(t),null!=e&&(this._locale=e),this)}function vi(){return this._locale}function gi(t){switch(t=A(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function yi(t){return void 0===(t=A(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function bi(){return this._d.valueOf()-6e4*(this._offset||0)}function _i(){return Math.floor(this.valueOf()/1e3)}function wi(){return new Date(this.valueOf())}function xi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function ki(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Oi(){return this.isValid()?this.toISOString():null}function Si(){return f(this)}function Mi(){return l({},p(this))}function Di(){return p(this).overflow}function Ci(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ti(t,e){U(0,[t,t.length],0,e)}function Ei(t){return Ri.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Pi(t){return Ri.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Ii(){return kt(this.year(),1,4)}function Ni(){var t=this.localeData()._week;return kt(this.year(),t.dow,t.doy)}function Ri(t,e,i,o,n){var s;return null==t?xt(this,o,n).year:(s=kt(t,o,n),e>s&&(e=s),zi.call(this,t,e,i,o,n))}function zi(t,e,i,o,n){var s=wt(t,e,i,o,n),r=bt(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Ai(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Li(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 Fi(t,e){e[Zo]=_(1e3*("0."+t))}function Bi(){return this._isUTC?"UTC":""}function ji(){return this._isUTC?"Coordinated Universal Time":""}function Hi(t){return be(1e3*t)}function Wi(){return be.apply(null,arguments).parseZone()}function Yi(t){return t}function Gi(t,e,i,o){var n=ee(),s=u().set(o,e);return n[i](s,t)}function Vi(t,e,i){if(r(t)&&(e=t,t=void 0),t=t||"",null!=e)return Gi(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Gi(t,o,i,"month");return n}function Ui(t,e,i,o){"boolean"==typeof t?(r(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,r(e)&&(i=e,e=void 0),e=e||"");var n=ee(),s=t?n._week.dow:0;if(null!=i)return Gi(e,(i+s)%7,o,"day");var a,h=[];for(a=0;a<7;a++)h[a]=Gi(e,(a+s)%7,o,"day");return h}function qi(t,e){return Vi(t,e,"months")}function Xi(t,e){return Vi(t,e,"monthsShort")}function Zi(t,e,i){return Ui(t,e,i,"weekdays")}function Ki(t,e,i){return Ui(t,e,i,"weekdaysShort")}function Ji(t,e,i){return Ui(t,e,i,"weekdaysMin")}function Qi(){var t=this._data -;return this._milliseconds=Wn(this._milliseconds),this._days=Wn(this._days),this._months=Wn(this._months),t.milliseconds=Wn(t.milliseconds),t.seconds=Wn(t.seconds),t.minutes=Wn(t.minutes),t.hours=Wn(t.hours),t.months=Wn(t.months),t.years=Wn(t.years),this}function $i(t,e,i,o){var n=Ge(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function to(t,e){return $i(this,t,e,1)}function eo(t,e){return $i(this,t,e,-1)}function io(t){return t<0?Math.floor(t):Math.ceil(t)}function oo(){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||s<=0&&r<=0&&a<=0||(s+=864e5*io(so(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=b(s/1e3),h.seconds=t%60,e=b(t/60),h.minutes=e%60,i=b(e/60),h.hours=i%24,r+=b(i/24),n=b(no(r)),a+=n,r-=io(so(n)),o=b(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function no(t){return 4800*t/146097}function so(t){return 146097*t/4800}function ro(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if("month"===(t=A(t))||"year"===t)return e=this._days+o/864e5,i=this._months+no(e),"month"===t?i:i/12;switch(e=this._days+Math.round(so(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 ao(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function ho(t){return function(){return this.as(t)}}function lo(t){return t=A(t),this.isValid()?this[t+"s"]():NaN}function uo(t){return function(){return this.isValid()?this._data[t]:NaN}}function co(){return b(this.days()/7)}function po(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function fo(t,e,i){var o=Ge(t).abs(),n=ns(o.as("s")),s=ns(o.as("m")),r=ns(o.as("h")),a=ns(o.as("d")),h=ns(o.as("M")),d=ns(o.as("y")),l=n<=ss.ss&&["s",n]||n0,l[4]=i,po.apply(null,l)}function mo(t){return void 0===t?ns:"function"==typeof t&&(ns=t,!0)}function vo(t,e){return void 0!==ss[t]&&(void 0===e?ss[t]:(ss[t]=e,"s"===t&&(ss.ss=e-1),!0))}function go(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=fo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function yo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=rs(this._milliseconds)/1e3,n=rs(this._days),s=rs(this._months);t=b(o/60),e=b(t/60),o%=60,t%=60,i=b(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o,c=this.asSeconds();return c?(c<0?"-":"")+"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 bo,_o;_o=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o68?1900:2e3)};var sn=j("FullYear",!0);U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),F("week",5),F("isoWeek",5),J("w",/\d\d?/),J("ww",/\d\d?/,/\d\d/),J("W",/\d\d?/),J("WW",/\d\d?/,/\d\d/),it(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=_(t)});var rn={dow:0,doy:6};U("d",0,"do","day"),U("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),U("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),U("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),J("d",/\d\d?/),J("e",/\d\d?/),J("E",/\d\d?/),J("dd",function(t,e){return e.weekdaysMinRegex(t)}),J("ddd",function(t,e){return e.weekdaysShortRegex(t)}),J("dddd",function(t,e){return e.weekdaysRegex(t)}),it(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:p(i).invalidWeekday=t}),it(["d","e","E"],function(t,e,i,o){e[o]=_(t)});var an="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),hn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),dn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ln=jo,un=jo,cn=jo;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Yt),U("k",["kk",2],0,Gt),U("hmm",0,0,function(){return""+Yt.apply(this)+V(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Yt.apply(this)+V(this.minutes(),2)+V(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+V(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+V(this.minutes(),2)+V(this.seconds(),2)}),Vt("a",!0),Vt("A",!1),z("hour","h"),F("hour",13),J("a",Ut),J("A",Ut),J("H",/\d\d?/),J("h",/\d\d?/),J("k",/\d\d?/),J("HH",/\d\d?/,/\d\d/),J("hh",/\d\d?/,/\d\d/),J("kk",/\d\d?/,/\d\d/),J("hmm",/\d\d\d\d?/),J("hmmss",/\d\d\d\d\d\d?/),J("Hmm",/\d\d\d\d?/),J("Hmmss",/\d\d\d\d\d\d?/),et(["H","HH"],Uo),et(["k","kk"],function(t,e,i){var o=_(t);e[Uo]=24===o?0:o}),et(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),et(["h","hh"],function(t,e,i){e[Uo]=_(t),p(i).bigHour=!0}),et("hmm",function(t,e,i){var o=t.length-2;e[Uo]=_(t.substr(0,o)),e[qo]=_(t.substr(o)),p(i).bigHour=!0}),et("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Uo]=_(t.substr(0,o)),e[qo]=_(t.substr(o,2)),e[Xo]=_(t.substr(n)),p(i).bigHour=!0}),et("Hmm",function(t,e,i){var o=t.length-2;e[Uo]=_(t.substr(0,o)),e[qo]=_(t.substr(o))}),et("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[Uo]=_(t.substr(0,o)),e[qo]=_(t.substr(o,2)),e[Xo]=_(t.substr(n))});var pn,fn=j("Hours",!0),mn={calendar:Co,longDateFormat:To,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:Eo,months:tn,monthsShort:en,week:rn,weekdays:an,weekdaysMin:dn,weekdaysShort:hn,meridiemParse:/[ap]\.?m?\.?/i},vn={},gn={},yn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,bn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/Z|[+-]\d\d(?::?\d\d)?/,wn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],xn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],kn=/^\/?Date\((\-?\d+)/i,On=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=k("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Sn=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=be.apply(null,arguments);return this.isValid()&&t.isValid()?tthis?this:t:m()}),Dn=function(){return Date.now?Date.now():+new Date},Cn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Te("Z",":"),Te("ZZ",""),J("Z",Bo),J("ZZ",Bo),et(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Ee(Bo,t)});var Tn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var En=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Pn=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ge.fn=Me.prototype,Ge.invalid=Se;var In=Xe(1,"add"),Nn=Xe(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Rn=k("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)});U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ti("gggg","weekYear"),Ti("ggggg","weekYear"),Ti("GGGG","isoWeekYear"),Ti("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),J("G",/[+-]?\d+/),J("g",/[+-]?\d+/),J("GG",/\d\d?/,/\d\d/),J("gg",/\d\d?/,/\d\d/),J("GGGG",/\d{1,4}/,/\d{4}/),J("gggg",/\d{1,4}/,/\d{4}/),J("GGGGG",/[+-]?\d{1,6}/,Lo),J("ggggg",/[+-]?\d{1,6}/,Lo),it(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=_(t)}),it(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),U("Q",0,"Qo","quarter"),z("quarter","Q"),F("quarter",7),J("Q",/\d/),et("Q",function(t,e){e[Go]=3*(_(t)-1)}),U("D",["DD",2],"Do","date"),z("date","D"),F("date",9),J("D",/\d\d?/),J("DD",/\d\d?/,/\d\d/),J("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),et(["D","DD"],Vo),et("Do",function(t,e){e[Vo]=_(t.match(/\d\d?/)[0],10)});var zn=j("Date",!0);U("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),F("dayOfYear",4),J("DDD",/\d{1,3}/),J("DDDD",/\d{3}/),et(["DDD","DDDD"],function(t,e,i){i._dayOfYear=_(t)}),U("m",["mm",2],0,"minute"),z("minute","m"),F("minute",14),J("m",/\d\d?/),J("mm",/\d\d?/,/\d\d/),et(["m","mm"],qo);var An=j("Minutes",!1);U("s",["ss",2],0,"second"),z("second","s"),F("second",15),J("s",/\d\d?/),J("ss",/\d\d?/,/\d\d/),et(["s","ss"],Xo);var Ln=j("Seconds",!1);U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),F("millisecond",16),J("S",/\d{1,3}/,/\d/),J("SS",/\d{1,3}/,/\d\d/),J("SSS",/\d{1,3}/,/\d{3}/);var Fn;for(Fn="SSSS";Fn.length<=9;Fn+="S")J(Fn,/\d+/);for(Fn="S";Fn.length<=9;Fn+="S")et(Fn,Fi);var Bn=j("Milliseconds",!1);U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var jn=g.prototype;jn.add=In,jn.calendar=Je,jn.clone=Qe,jn.diff=si,jn.endOf=yi,jn.format=li,jn.from=ui,jn.fromNow=ci,jn.to=pi,jn.toNow=fi,jn.get=Y,jn.invalidAt=Di,jn.isAfter=$e,jn.isBefore=ti,jn.isBetween=ei,jn.isSame=ii,jn.isSameOrAfter=oi,jn.isSameOrBefore=ni,jn.isValid=Si,jn.lang=Rn,jn.locale=mi,jn.localeData=vi,jn.max=Mn,jn.min=Sn,jn.parsingFlags=Mi,jn.set=G,jn.startOf=gi,jn.subtract=Nn,jn.toArray=xi,jn.toObject=ki,jn.toDate=wi,jn.toISOString=hi,jn.inspect=di,jn.toJSON=Oi,jn.toString=ai,jn.unix=_i,jn.valueOf=bi,jn.creationData=Ci,jn.year=sn,jn.isLeapYear=gt,jn.weekYear=Ei,jn.isoWeekYear=Pi,jn.quarter=jn.quarters=Ai,jn.month=lt,jn.daysInMonth=ut,jn.week=jn.weeks=Dt,jn.isoWeek=jn.isoWeeks=Ct,jn.weeksInYear=Ni,jn.isoWeeksInYear=Ii,jn.date=zn,jn.day=jn.days=At,jn.weekday=Lt,jn.isoWeekday=Ft,jn.dayOfYear=Li,jn.hour=jn.hours=fn,jn.minute=jn.minutes=An,jn.second=jn.seconds=Ln,jn.millisecond=jn.milliseconds=Bn,jn.utcOffset=Ne,jn.utc=ze,jn.local=Ae,jn.parseZone=Le,jn.hasAlignedHourOffset=Fe,jn.isDST=Be,jn.isLocal=He,jn.isUtcOffset=We,jn.isUtc=Ye,jn.isUTC=Ye,jn.zoneAbbr=Bi,jn.zoneName=ji,jn.dates=k("dates accessor is deprecated. Use date instead.",zn),jn.months=k("months accessor is deprecated. Use month instead",lt),jn.years=k("years accessor is deprecated. Use year instead",sn),jn.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Re),jn.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",je);var Hn=C.prototype;Hn.calendar=T,Hn.longDateFormat=E,Hn.invalidDate=P,Hn.ordinal=I,Hn.preparse=Yi,Hn.postformat=Yi,Hn.relativeTime=N,Hn.pastFuture=R,Hn.set=M,Hn.months=st,Hn.monthsShort=rt,Hn.monthsParse=ht,Hn.monthsRegex=pt,Hn.monthsShortRegex=ct,Hn.week=Ot,Hn.firstDayOfYear=Mt,Hn.firstDayOfWeek=St,Hn.weekdays=Pt,Hn.weekdaysMin=Nt,Hn.weekdaysShort=It,Hn.weekdaysParse=zt,Hn.weekdaysRegex=Bt,Hn.weekdaysShortRegex=jt,Hn.weekdaysMinRegex=Ht,Hn.isPM=qt,Hn.meridiem=Xt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=k("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ee);var Wn=Math.abs,Yn=ho("ms"),Gn=ho("s"),Vn=ho("m"),Un=ho("h"),qn=ho("d"),Xn=ho("w"),Zn=ho("M"),Kn=ho("y"),Jn=uo("milliseconds"),Qn=uo("seconds"),$n=uo("minutes"),ts=uo("hours"),es=uo("days"),is=uo("months"),os=uo("years"),ns=Math.round,ss={ss:44,s:45,m:45,h:22,d:26,M:11},rs=Math.abs,as=Me.prototype;return as.isValid=Oe,as.abs=Qi,as.add=to,as.subtract=eo,as.as=ro,as.asMilliseconds=Yn,as.asSeconds=Gn,as.asMinutes=Vn,as.asHours=Un,as.asDays=qn,as.asWeeks=Xn,as.asMonths=Zn,as.asYears=Kn,as.valueOf=ao,as._bubble=oo,as.get=lo,as.milliseconds=Jn,as.seconds=Qn,as.minutes=$n,as.hours=ts,as.days=es,as.weeks=co,as.months=is,as.years=os,as.humanize=go,as.toISOString=yo,as.toString=yo,as.toJSON=yo,as.locale=mi,as.localeData=vi,as.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",yo),as.lang=Rn,U("X",0,0,"unix"),U("x",0,0,"valueOf"),J("x",/[+-]?\d+/),J("X",/[+-]?\d+(\.\d{1,3})?/),et("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),et("x",function(t,e,i){i._d=new Date(_(t))}),e.version="2.18.0",function(t){bo=t}(be),e.fn=jn,e.min=we,e.max=xe,e.now=Dn,e.utc=u,e.unix=Hi,e.months=qi,e.isDate=a,e.locale=Qt,e.invalid=m,e.duration=Ge,e.isMoment=y,e.weekdays=Zi,e.parseZone=Wi,e.localeData=ee,e.isDuration=De,e.monthsShort=Xi,e.weekdaysMin=Ji,e.defineLocale=$t,e.updateLocale=te,e.locales=ie,e.weekdaysShort=Ki,e.normalizeUnits=A,e.relativeTimeRounding=mo,e.relativeTimeThreshold=vo,e.calendarFormat=Ke,e.prototype=jn,e})}).call(e,i(84)(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=85},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){n<16&&(e[o+n++]=u[t])});n<16;)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(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||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;p<6;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;a<16;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:void 0!==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;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},c=0;c<256;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,i){e.util=i(1),e.DOMutil=i(88),e.DataSet=i(89),e.DataView=i(93),e.Queue=i(92),e.Graph3d=i(94),e.graph3d={Camera:i(102),Filter:i(107),Point2d:i(101),Point3d:i(100),Slider:i(108),StepNumber:i(109)},e.moment=i(82),e.Hammer=i(112),e.keycharm=i(115)},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(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){return t&&t.__esModule?t:{default:t}}function n(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=(0,l.default)(this._options.type),o=0,n=i.length;on?1:or)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;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(58),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(1),a=i(89);o.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;os)&&(o=s)}return o},o.prototype.getColumnRange=function(t,e){for(var i=new g,o=0;o0&&(h[n-1].pointNext=r),h.push(r);return h},o.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),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);var e=this,i=function(t){e._onMouseDown(t)},o=function(t){e._onTouchStart(t)},n=function(t){e._onWheel(t)},s=function(t){e._onTooltip(t)},r=function(t){e._onClick(t)};u.addEventListener(this.frame.canvas,"mousedown",i),u.addEventListener(this.frame.canvas,"touchstart",o),u.addEventListener(this.frame.canvas,"mousewheel",n),u.addEventListener(this.frame.canvas,"mousemove",s),u.addEventListener(this.frame.canvas,"click",r),this.containerElement.appendChild(this.frame)},o.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},o.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},o.prototype.animationStart=function(){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()},o.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},o.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},o.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},o.prototype._readData=function(t){this._dataInitialize(t,this.style),this.dataFilter?this.dataPoints=this.dataFilter._getDataPoints():this.dataPoints=this._getDataPoints(this.dataTable),this._redrawFilter()},o.prototype.setData=function(t){this._readData(t),this.redraw(),this.animationAutoStart&&this.dataFilter&&this.animationStart()},o.prototype.setOptions=function(t){this.animationStop(),y.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.dataTable&&this.setData(this.dataTable),this.animationAutoStart&&this.dataFilter&&this.animationStart()},o.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case o.STYLE.BAR:t=o.prototype._redrawBarGraphPoint;break;case o.STYLE.BARCOLOR:t=o.prototype._redrawBarColorGraphPoint;break;case o.STYLE.BARSIZE:t=o.prototype._redrawBarSizeGraphPoint;break;case o.STYLE.DOT:t=o.prototype._redrawDotGraphPoint;break;case o.STYLE.DOTLINE:t=o.prototype._redrawDotLineGraphPoint;break;case o.STYLE.DOTCOLOR:t=o.prototype._redrawDotColorGraphPoint;break;case o.STYLE.DOTSIZE:t=o.prototype._redrawDotSizeGraphPoint;break;case o.STYLE.SURFACE:t=o.prototype._redrawSurfaceGraphPoint;break;case o.STYLE.GRID:t=o.prototype._redrawGridGraphPoint;break;case o.STYLE.LINE:t=o.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},o.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},o.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},o.prototype._redrawClear=function(){var t=this.frame.canvas;t.getContext("2d").clearRect(0,0,t.width,t.height)},o.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},o.prototype._getLegendWidth=function(){var t;if(this.style===o.STYLE.DOTSIZE){var e=this._dotSize();t=e/2+2*e}else t=this.style===o.STYLE.BARSIZE?this.xBarWidth:20;return t},o.prototype._redrawLegend=function(){if(this.showLegend===!0&&this.style!==o.STYLE.LINE&&this.style!==o.STYLE.BARSIZE){var t=this.style===o.STYLE.BARSIZE||this.style===o.STYLE.DOTSIZE,e=this.style===o.STYLE.DOTSIZE||this.style===o.STYLE.DOTCOLOR||this.style===o.STYLE.BARCOLOR,i=Math.max(.25*this.frame.clientHeight,100),n=this.margin,s=this._getLegendWidth(),r=this.frame.clientWidth-this.margin,a=r-s,h=n+i,d=this._getContext();if(d.lineWidth=1,d.font="14px arial",t===!1){var l,u=i;for(l=0;l0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelY=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e);Math.cos(2*o)<0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelZ=function(t,e,i,o){void 0===o&&(o=0);var n=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(i,n.x-o,n.y)},o.prototype._line3d=function(t,e,i,o){var n=this._convert3Dto2D(e),s=this._convert3Dto2D(i);this._line(t,n,s,o)},o.prototype._redrawAxis=function(){var t,e,i,o,n,s,r,a,h,d,l,u=this._getContext();u.font=24/this.camera.getArmLength()+"px arial";var f=.025/this.scale.x,m=.025/this.scale.y,g=5/this.camera.getArmLength(),y=this.camera.getArmRotation().horizontal,b=new p(Math.cos(y),Math.sin(y)),_=this.xRange,w=this.yRange,x=this.zRange;for(u.lineWidth=1,o=void 0===this.defaultXStep,i=new v(_.min,_.max,this.xStep,o),i.start(!0);!i.end();){var k=i.getCurrent();if(this.showGrid?(t=new c(k,w.min,x.min),e=new c(k,w.max,x.min),this._line3d(u,t,e,this.gridColor)):this.showXAxis&&(t=new c(k,w.min,x.min),e=new c(k,w.min+f,x.min),this._line3d(u,t,e,this.axisColor),t=new c(k,w.max,x.min),e=new c(k,w.max-f,x.min),this._line3d(u,t,e,this.axisColor)),this.showXAxis){r=b.x>0?w.min:w.max;var O=new c(k,r,x.min),S=" "+this.xValueLabel(k)+" ";this.drawAxisLabelX(u,O,S,y,g)}i.next()}for(u.lineWidth=1,o=void 0===this.defaultYStep,i=new v(w.min,w.max,this.yStep,o),i.start(!0);!i.end();){var M=i.getCurrent();if(this.showGrid?(t=new c(_.min,M,x.min),e=new c(_.max,M,x.min),this._line3d(u,t,e,this.gridColor)):this.showYAxis&&(t=new c(_.min,M,x.min),e=new c(_.min+m,M,x.min),this._line3d(u,t,e,this.axisColor),t=new c(_.max,M,x.min),e=new c(_.max-m,M,x.min),this._line3d(u,t,e,this.axisColor)),this.showYAxis){s=b.y>0?_.min:_.max,O=new c(s,M,x.min);var S=" "+this.yValueLabel(M)+" ";this.drawAxisLabelY(u,O,S,y,g)}i.next()}if(this.showZAxis){for(u.lineWidth=1,o=void 0===this.defaultZStep,i=new v(x.min,x.max,this.zStep,o),i.start(!0),s=b.x>0?_.min:_.max,r=b.y<0?w.min:w.max;!i.end();){var D=i.getCurrent(),C=new c(s,r,D),T=this._convert3Dto2D(C);e=new p(T.x-g,T.y),this._line(u,T,e,this.axisColor);var S=this.zValueLabel(D)+" ";this.drawAxisLabelZ(u,C,S,5),i.next()}u.lineWidth=1,t=new c(s,r,x.min),e=new c(s,r,x.max),this._line3d(u,t,e,this.axisColor)}if(this.showXAxis){var E,P;u.lineWidth=1,E=new c(_.min,w.min,x.min),P=new c(_.max,w.min,x.min),this._line3d(u,E,P,this.axisColor),E=new c(_.min,w.max,x.min),P=new c(_.max,w.max,x.min),this._line3d(u,E,P,this.axisColor)}this.showYAxis&&(u.lineWidth=1,t=new c(_.min,w.min,x.min),e=new c(_.min,w.max,x.min),this._line3d(u,t,e,this.axisColor),t=new c(_.max,w.min,x.min),e=new c(_.max,w.max,x.min),this._line3d(u,t,e,this.axisColor));var I=this.xLabel;I.length>0&&this.showXAxis&&(l=.1/this.scale.y,s=(_.max+3*_.min)/4,r=b.x>0?w.min-l:w.max+l,n=new c(s,r,x.min),this.drawAxisLabelX(u,n,I,y));var N=this.yLabel;N.length>0&&this.showYAxis&&(d=.1/this.scale.x,s=b.y>0?_.min-d:_.max+d,r=(w.max+3*w.min)/4,n=new c(s,r,x.min),this.drawAxisLabelY(u,n,N,y));var R=this.zLabel;R.length>0&&this.showZAxis&&(h=30,s=b.x>0?_.min:_.max,r=b.y<0?w.min:w.max,a=(x.max+3*x.min)/4,n=new c(s,r,a),this.drawAxisLabelZ(u,n,R,h))},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._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-(this.eye.z/this.camera.getArmLength())*this.dataColor.strokeWidth:this.dataColor.strokeWidth},o.prototype._redrawBar=function(t,e,i,o,n,s){var r,a,h=this,d=e.point,l=this.zRange.min,u=[{point:new c(d.x-i,d.y-o,d.z)},{point:new c(d.x+i,d.y-o,d.z)},{point:new c(d.x+i,d.y+o,d.z)},{point:new c(d.x-i,d.y+o,d.z)}],p=[{point:new c(d.x-i,d.y-o,l)},{point:new c(d.x+i,d.y-o,l)},{point:new c(d.x+i,d.y+o,l)},{point:new c(d.x-i,d.y+o,l)}];u.forEach(function(t){t.screen=h._convert3Dto2D(t.point)}),p.forEach(function(t){t.screen=h._convert3Dto2D(t.point)});var f=[{corners:u,center:c.avg(p[0].point,p[2].point)},{corners:[u[0],u[1],p[1],p[0]],center:c.avg(p[1].point,p[0].point)},{corners:[u[1],u[2],p[2],p[1]],center:c.avg(p[2].point,p[1].point)},{corners:[u[2],u[3],p[3],p[2]],center:c.avg(p[3].point,p[2].point)},{corners:[u[3],u[0],p[0],p[3]],center:c.avg(p[0].point,p[3].point)}];for(e.surfaces=f,r=0;r0}if(a){var p,f=(e.point.z+i.point.z+o.point.z+n.point.z)/4,m=240*(1-(f-this.zRange.min)*this.scale.z/this.verticalRatio);this.showShadow?(p=Math.min(1+l.x/u/2,1),s=this._hsv2rgb(m,1,p),r=s):(p=1,s=this._hsv2rgb(m,1,p),r=this.axisColor)}else s="gray",r=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var v=[e,i,n,o];this._polygon(t,v,s,r)}},o.prototype._drawGridLine=function(t,e,i){if(void 0!==e&&void 0!==i){var o=(e.point.z+i.point.z)/2,n=240*(1-(o-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(n,1,1),this._line(t,e.screen,i.screen)}},o.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},o.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},o.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t0?1:t<0?-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=null,s=null,r=null,a=new p(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--){n=this.dataPoints[i];var h=n.surfaces;if(h)for(var d=h.length-1;d>=0;d--){var l=h[d],u=l.corners,c=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(a,c)||this._insideTriangle(a,f))return n}}else for(i=0;i"+this.xLabel+":"+t.point.x+""+this.yLabel+":"+t.point.y+""+this.zLabel+":"+t.point.z+"",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,h=o.offsetWidth,d=o.offsetHeight,l=t.screen.x-n/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-n),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=l+"px",e.style.top=t.screen.y-r-s+"px",o.style.left=t.screen.x-h/2+"px",o.style.top=t.screen.y-d/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)}}},o.prototype.setCameraPosition=function(t){y.setCameraPosition(t,this),this.redraw()},o.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=o},function(t,e,i){t.exports={default:i(96),__esModule:!0}},function(t,e,i){i(97),t.exports=i(17).Object.assign},function(t,e,i){var o=i(15);o(o.S+o.F,"Object",{assign:i(98)})},function(t,e,i){var o=i(35),n=i(73),s=i(74),r=i(49),a=i(10),h=Object.assign;t.exports=!h||i(26)(function(){var t={},e={},i=Symbol(),o="abcdefghijklmnopqrst";return t[i]=7,o.split("").forEach(function(t){e[t]=t}),7!=h({},t)[i]||Object.keys(h({},e)).join("")!=o})?function(t,e){for(var i=r(t),h=arguments.length,d=1,l=n.f,u=s.f;h>d;)for(var c,p=a(arguments[d++]),f=l?o(p).concat(l(p)):o(p),m=f.length,v=0;m>v;)u.call(p,c=f[v++])&&(i[c]=p[c]);return i}:h},function(t,e){function i(t){if(t)return o(t)}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;nr&&(t=o(t)*r),i(e)>r&&(e=o(e)*r),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},o.prototype.getOffset=function(t,e){return this.cameraOffset},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.setOffset(this.cameraOffset.x,this.cameraOffset.y),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;var t=this.cameraRotation.x,e=(this.cameraRotation.y,this.cameraRotation.z),i=this.cameraOffset.x,o=this.cameraOffset.y,n=Math.sin,s=Math.cos;this.cameraLocation.x=this.cameraLocation.x+i*s(e)+o*-n(e)*s(t),this.cameraLocation.y=this.cameraLocation.y+i*n(e)+o*s(e)*s(t),this.cameraLocation.z=this.cameraLocation.z+o*n(t)},t.exports=o},function(t,e,i){t.exports={default:i(104),__esModule:!0}},function(t,e,i){i(105),t.exports=i(17).Math.sign},function(t,e,i){var o=i(15);o(o.S,"Math",{sign:i(106)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},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:t0&&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(93);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(){if(void 0!==this.index)return this.values[this.index]},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw new 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 new 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(!(tthis.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;return t/(this.values.length-1)*e+3},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.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},i.prototype.setRange=function(t,e,i,o){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(i))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t?t:0,this._end=e?e:0,this.setStep(i,o)},i.prototype.setStep=function(t,e){void 0===t||t<=0||(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),s<=0&&(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(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()this._end},t.exports=i},function(t,e){function i(){this.min=void 0,this.max=void 0}i.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.maxi)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=i}},i.prototype.range=function(){return this.max-this.min},i.prototype.center=function(){return(this.min+this.max)/2},t.exports=i},function(t,e,i){function o(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function n(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+n(e)}function r(t,e,i,o){var n,r;for(var a in i)n=i[a],r=s(o,n),e[r]=t[n]}function a(t,e,i,o){var n,r;for(var a in i)n=i[a],void 0!==t[n]&&(r=s(o,n),e[r]=t[n])}function h(t,e){if(void 0===t||o(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");D=t,r(t,e,S),r(t,e,M,"default"),l(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new x(0,0,-1)}function d(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===D||o(D))throw new Error("DEFAULTS not set for module Settings");a(t,e,S),a(t,e,M,"default"),l(t,e)}}function l(t,e){void 0!==t.backgroundColor&&m(t.backgroundColor,e),v(t.dataColor,e),f(t.style,e),u(t.showLegend,e),g(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&_.selectiveDeepExtend(["tooltipStyle"],e,t)}function u(t,e){if(void 0===t){if(void 0===D.showLegend){var i=e.style===k.DOTCOLOR||e.style===k.DOTSIZE;e.showLegend=i}}else e.showLegend=t}function c(t){var e=O[t];return void 0===e?-1:e}function p(t){var e=!1;for(var i in k)if(k[i]===t){e=!0;break}return e}function f(t,e){if(void 0!==t){var i;if("string"==typeof t){if((i=c(t))===-1)throw new Error("Style '"+t+"' is invalid")}else{if(!p(t))throw new Error("Style '"+t+"' is invalid");i=t}e.style=i}}function m(t,e){var i="white",o="gray",n=1;if("string"==typeof t)i=t,o="none",n=0;else{if("object"!==(void 0===t?"undefined":(0,b.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(i=t.fill),void 0!==t.stroke&&(o=t.stroke),void 0!==t.strokeWidth&&(n=t.strokeWidth)}e.frame.style.backgroundColor=i,e.frame.style.borderColor=o,e.frame.style.borderWidth=n+"px",e.frame.style.borderStyle="solid"}function v(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function g(t,e){var i=t;void 0!==i&&(void 0===e.camera&&(e.camera=new w),e.camera.setArmRotation(i.horizontal,i.vertical),e.camera.setArmLength(i.distance))}var y=i(62),b=function(t){return t&&t.__esModule?t:{default:t}}(y),_=i(1),w=i(102),x=i(100),k={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},O={dot:k.DOT,"dot-line":k.DOTLINE,"dot-color":k.DOTCOLOR,"dot-size":k.DOTSIZE,line:k.LINE,grid:k.GRID,surface:k.SURFACE,bar:k.BAR,"bar-color":k.BARCOLOR,"bar-size":k.BARSIZE},S=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],M=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],D=void 0;t.exports.STYLE=k,t.exports.setDefaults=h,t.exports.setOptions=d,t.exports.setCameraPosition=g},function(t,e,i){if("undefined"!=typeof window){var o=i(113),n=window.Hammer||i(114);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,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);e!==-1&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ft(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]}):o.sort()),o}function O(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=R(o);e.timeStamp=_t(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=L(a,h),P(i,e),e.offsetDirection=A(e.deltaX,e.deltaY);var d=z(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=bt(d.x)>bt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?B(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Tt&&s.eventType!==Pt||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=It&&(h>Ct||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=z(h,d,l);o=u.x,n=u.y,i=bt(u.x)>bt(u.y)?u.x:u.y,s=A(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;i=bt(e)?t<0?Rt:zt:e<0?At:Lt}function L(t,e,i){i||(i=Ht);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=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function B(t,e){return F(e[1],e[0],Wt)+F(t[1],t[0],Wt)}function j(t,e){return L(e[0],e[1],Wt)/L(t[0],t[1],Wt)}function H(){this.evEl=Gt,this.evWin=Vt,this.pressed=!1,D.apply(this,arguments)}function W(){this.evEl=Xt,this.evWin=Zt,D.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Jt,this.evWin=Qt,this.started=!1,D.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Pt|It)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=te,this.targetIds={},D.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Tt|Et)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Tt)for(n=0;n-1&&o.splice(t,1)};setTimeout(n,ee)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o=fe&&e(i.options.event+tt(o))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;te.threshold&&n&e.direction},attrTest:function(t){return ot.prototype.attrTest.call(this,t)&&(this.state&ce||!(this.state&ce)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(st,ot,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ce)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(rt,$,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distancee.time;if(this._input=t,!o||!i||t.eventType&(Pt|It)&&!n)this.reset();else if(t.eventType&Tt)this.reset(),this._timer=h(function(){this.state=me,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return me;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===me&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=_t(),this.manager.emit(this.options.event,this._input)))}}),c(at,ot,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ce)}}),c(ht,ot,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ft|Bt,pointers:1},getTouchAction:function(){return nt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ft|Bt)?e=t.overallVelocity:i&Ft?e=t.overallVelocityX:i&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&bt(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(dt,$,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distances)&&(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;this.range.setRange(r-a/2,r+a/2,h)}}},n.prototype.fit=function(t){var e,i=!t||void 0===t.animation||t.animation,o=this.itemsData&&this.itemsData.getDataSet();1===o.length&&void 0===o.get()[0].end?(e=this.getDataRange(),this.moveTo(e.min.valueOf(),{animation:i})):(e=this.getItemRange(),this.range.setRange(e.min,e.max,i))},n.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,n=null;if(null!=e&&null!=i){var s=function(t){return l.convert(t.data.start,"Date").valueOf()},r=function(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return l.convert(e,"Date").valueOf()},a=i-e;a<=0&&(a=10);var h=a/this.props.center.width;if(l.forEach(this.itemSet.items,function(t){t.groupShowing&&(t.show(),t.repositionX());var a=s(t),d=r(t);if(this.options.rtl)var l=a-(t.getWidthRight()+10)*h,u=d+(t.getWidthLeft()+10)*h;else var l=a-(t.getWidthLeft()+10)*h,u=d+(t.getWidthRight()+10)*h;li&&(i=u,n=t)}.bind(this)),o&&n){var d=o.getWidthLeft()+10,u=n.getWidthRight()+10,c=this.props.center.width-d-u;c>0&&(this.options.rtl?(e=s(o)-u*a/c,i=r(n)+d*a/c):(e=s(o)-d*a/c,i=r(n)+u*a/c))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},n.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=l.convert(i.start,"Date").valueOf(),n=l.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||oe)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},n.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY;if(this.options.rtl)var o=l.getAbsoluteRight(this.dom.centerContainer)-e;else var o=e-l.getAbsoluteLeft(this.dom.centerContainer);var n=i-l.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=g.customTimeFromTarget(t),h=this.itemSet.options.snap||null,d=this.body.util.getScale(),u=this.body.util.getStep(),c=this._toTime(o),p=h?h(c,d,u):c,f=l.getTarget(t),m=null;return null!=s?m="item":null!=a?m="custom-time":l.hasParent(f,this.timeAxis.dom.foreground)?m="axis":this.timeAxis2&&l.hasParent(f,this.timeAxis2.dom.foreground)?m="axis":l.hasParent(f,this.itemSet.dom.labelSet)?m="group-label":l.hasParent(f,this.currentTime.bar)?m="current-time":l.hasParent(f,this.dom.center)&&(m="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:m,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:c,snappedTime:p}},n.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(90),s=o(n),r=i(62),a=o(r),h=i(119),d=o(h),l=i(120),u=o(l),c=i(124),p=o(c),f=i(1),m=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},f.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new p.default(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===(void 0===t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),this.options.filter===!1&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,this.options.enabled===!0&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):e!==!0&&e.indexOf(n)===-1||(o=!0),o!==!1&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(this.options.showButton===!0){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),n=1;n2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,o.innerHTML=i===!0?""+t+":":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&&t.indexOf(e)!==-1&&(n=t.indexOf(e));for(var s=0;ss&&1!==s&&(a.max=Math.ceil(1.2*e),d=a.max,h="range increased"),a.value=e}else a.value=o;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var c=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,c,a,l);""!==h&&this.popupHistory[p]!==d&&(this.popupHistory[p]=d,this._setupPopup(h,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(this.initialized===!0&&this.allowCreation===!0&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&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],h=f.copyAndExtendArray(e,r);if("function"==typeof n&&(o=n(r,e))===!1&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=i===!1),o!==!1){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(e.indexOf("physics")!==-1&&this.moduleOptions.physics.solver!==r&&(l=!1),l===!0)if(void 0!==a.enabled){var u=f.copyAndExtendArray(h,"enabled"),c=this._getValue(u);if(c===!0){var p=this._makeLabel(r,h,!0);this._makeItem(h,p),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,c,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}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.initialized=!0,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||t,t="false"!==t&&t;for(var n=0;nvar options = "+(0,s.default)(t,null,2)+""}},{key:"getOptions",value:function(){for(var t={},e=0;e0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={ -black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),c.isString(t)===!0){if(c.isValidRGB(t)===!0){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(c.isValidRGBA(t)===!0){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(c.isValidHex(t)===!0){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])===!0&&(this.previousColor=c.extend({},this.color)),this.applied===!0&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])===!0&&(this.initialColor=c.extend({},t)),this.color=t;var e=c.RGBToHSV(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,n=this.centerCoordinates.x+o*Math.sin(i*e.h),s=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=n-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,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+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(this.generated===!1){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(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);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/this.r,d=void 0;for(s=0;s<360;s++)for(r=0;rs.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,""),g):n.distance<=8?console.log('%cUnknown option detected: "'+e+'". Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e),g):console.log('%cUnknown option detected: "'+e+'". Did you mean one of these: '+t.print((0,d.default)(i))+t.printLocation(o,e),g),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&n===!0){var c=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,d=c.indexMatch)}else l.toLowerCase().indexOf(h)!==-1&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){o!==!0&&(o=!1);var s=void 0!=t?c.convert(t,"Date").valueOf():null,r=void 0!=e?c.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var h=this,l=this.start,p=this.end,f="object"===(void 0===i?"undefined":(0,u.default)(i))&&"duration"in i?i.duration:500,v="object"===(void 0===i?"undefined":(0,u.default)(i))&&"easingFunction"in i?i.easingFunction:"easeInOutQuad",g=c.easingFunctions[v];if(!g)throw new Error("Unknown easing function "+(0,d.default)(v)+". Choose from: "+(0,a.default)(c.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1;return function t(){if(!h.props.touch.dragging){var e=(new Date).valueOf(),i=e-y,a=g(i/f),d=i>f,u=d||null===s?s:l+(s-l)*a,c=d||null===r?r:p+(r-p)*a;_=h._applyRange(u,c),m.updateHiddenDates(h.options.moment,h.body,h.options.hiddenDates),b=b||_;var v={start:new Date(h.start),end:new Date(h.end),byUser:o,event:n};_&&h.body.emitter.emit("rangechange",v),d?b&&h.body.emitter.emit("rangechanged",v):h.animationTimer=setTimeout(t,20)}}()}var _=this._applyRange(s,r);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:o,event:n};this.body.emitter.emit("rangechange",w),this.body.emitter.emit("rangechanged",w)}},n.prototype.getMillisecondsPerPixel=function(){return(this.end-this.start)/this.body.dom.center.clientWidth},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?c.convert(t,"Date").valueOf():this.start,n=null!=e?c.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?c.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?c.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(ns&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o=this.start-.5&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var h=parseFloat(this.options.zoomMax);h<0&&(h=0),n-o>h&&(this.end-this.start===h&&othis.end?(o=this.start,n=this.end):(i=n-o-h,o+=i/2,n-=i/2))}var d=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,d},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.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}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),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"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start;o-=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);var n="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;if(this.options.rtl)var r=i/n*o;else var r=-i/n*o;var a=this.props.touch.start+r,h=this.props.touch.end+r,d=m.snapAwayFromHidden(this.body.hiddenDates,a,this.previousDelta-i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0);if(d!=a||l!=h)return this.deltaDifference+=i,this.props.touch.start=d,this.props.touch.end=l,void this._onDrag(t);this.previousDelta=i,this._applyRange(a,h);var u=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:u,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.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,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable){if(this.options.horizontalScroll){t.preventDefault();var i=e*(this.end-this.start)/20,o=this.start-i,n=this.end-i;this.setRange(o,n,!1,!0,t)}}else if(this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var s;s=e<0?1-e/5:1/(1+e/5);var r;if(this.rolling)r=(this.start+this.end)/2;else{var a=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);r=this._pointerToDate(a)}this.zoom(s,r,e,t),t.preventDefault()}},n.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},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d),this.setRange(r,a,!1,!0,t),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e=t.center?t.center.x:t.clientX;if(this.options.rtl)var i=e-c.getAbsoluteLeft(this.body.dom.centerContainer);else var i=c.getAbsoluteRight(this.body.dom.centerContainer)-e;var o=this.body.util.toTime(i);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(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},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:c.getAbsoluteRight(e)-t.x,y:t.y-c.getAbsoluteTop(e)}:{x:t.x-c.getAbsoluteLeft(e),y:t.y-c.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l),this.setRange(a,h,!1,!0,o),this.startToFront=!1,this.endToFront=!0},n.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},n.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,!1,!0,null)},t.exports=n},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(1);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.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=o},function(t,e){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n=4*a){var c=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(c=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-c,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),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(;d=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&&nt.range.end){var h={start:t.range.start,end:i};i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale}i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i);var n=t.range.conversion(o,r);return(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a);return new Date(h+a+t.range.start)},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n=e&&r=e&&r<=i&&(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?o<0?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&&t-1||a))return t.dataTransfer.dropEffect="move",a=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{if(!JSON.parse(t.dataTransfer.getData("text")).content)return}catch(t){return!1}return a=!1,t.center={x:t.clientX,y:t.clientY},s.itemSet._onAddItem(t),!1}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.rollingModeBtn=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.rollingModeBtn.className="vis-rolling-mode-btn",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.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),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.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){this.initialDrawDone===!0&&this._redraw()}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=c.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={},["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var a=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(c.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),this.options.orientation={item:void 0,axis:void 0},"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(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 p(this.body);i.setOptions=function(t){var e=t?c.extend({},t):{};e.orientation="top",p.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);o!==-1&&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&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(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=c.deepExtend({},this.options);this.components.forEach(function(t){c.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.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},n.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 "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.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 "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?c.convert(t,"Date").valueOf():new Date;if(this.customTimes.some(function(t){return t.options.id===e}))throw new Error("A custom time with id "+(0,r.default)(e)+" already exists");var o=new v(this.body,c.extend({},this.options,{time:i,id:e}));return this.customTimes.push(o),this.components.push(o),this._redraw(),e},n.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 "+(0,r.default)(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))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.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;this.range.setRange(o,n,s)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i){var o;if(1==arguments.length){var n=arguments[0];o=void 0===n.animation||n.animation,this.range.setRange(n.start,n.end,o)}else o=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,o)},n.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,o=c.convert(t,"Date").valueOf(),n=o-i/2,s=o+i/2,r=!e||void 0===e.animation||e.animation;this.range.setRange(n,s,r)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e){if(!(!t||t<0||t>1)){var i=this.getWindow(),o=i.start.valueOf(),n=i.end.valueOf(),s=n-o,r=s/(1+t),a=(s-r)/2,h=o+a,d=n-a;this.setWindow(h,d,e)}},n.prototype.zoomOut=function(t,e){if(!(!t||t<0||t>1)){var i=this.getWindow(),o=i.start.valueOf(),n=i.end.valueOf(),s=n-o,r=o-s*t/2,a=n+s*t/2;this.setWindow(r,a,e)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(c.addClassName(o.root,"vis-top"),c.removeClassName(o.root,"vis-bottom")):(c.removeClassName(o.root,"vis-top"),c.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=c.option.asSize(e.maxHeight,""),o.root.style.minHeight=c.option.asSize(e.minHeight,""),o.root.style.width=c.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,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=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&&(i.borderRootWidth=i.borderRootHeight),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 n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=c.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=c.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.heighti.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});if(t){if(this.redrawCount<5)return void this.body.emitter.emit("_change");console.log("WARNING: infinite loop in redraw?")}else this.redrawCount=0;this.initialDrawDone=!0,this.body.emitter.emit("changed")}},n.prototype._setDOM=function(){var t=this.props,e=this.dom;t.leftContainer.width=t.left.width,t.rightContainer.width=t.right.width;var i=t.root.width-t.left.width-t.right.width-t.borderRootWidth;t.center.width=i,t.centerContainer.width=i,t.top.width=i,t.bottom.width=i,e.background.style.height=t.background.height+"px",e.backgroundVertical.style.height=t.background.height+"px",e.backgroundHorizontal.style.height=t.centerContainer.height+"px",e.centerContainer.style.height=t.centerContainer.height+"px",e.leftContainer.style.height=t.leftContainer.height+"px",e.rightContainer.style.height=t.rightContainer.height+"px",e.background.style.width=t.background.width+"px",e.backgroundVertical.style.width=t.centerContainer.width+"px",e.backgroundHorizontal.style.width=t.background.width+"px",e.centerContainer.style.width=t.center.width+"px",e.top.style.width=t.top.width+"px",e.bottom.style.width=t.bottom.width+"px",e.background.style.left="0",e.background.style.top="0",e.backgroundVertical.style.left=t.left.width+t.border.left+"px",e.backgroundVertical.style.top="0",e.backgroundHorizontal.style.left="0",e.backgroundHorizontal.style.top=t.top.height+"px",e.centerContainer.style.left=t.left.width+"px",e.centerContainer.style.top=t.top.height+"px",e.leftContainer.style.left="0",e.leftContainer.style.top=t.top.height+"px",e.rightContainer.style.left=t.left.width+t.center.width+"px",e.rightContainer.style.top=t.top.height+"px",e.top.style.left=t.left.width+"px",e.top.style.top="0",e.bottom.style.left=t.left.width+"px",e.bottom.style.top=t.top.height+t.centerContainer.height+"px",e.center.style.left="0",e.left.style.left="0",e.right.style.left="0"},n.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},n.prototype.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},n.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},n.prototype._toTime=function(t){return m.toTime(this,t,this.props.center.width)},n.prototype._toGlobalTime=function(t){return m.toTime(this,t,this.props.root.width)},n.prototype._toScreen=function(t){return m.toScreen(this,t,this.props.center.width)},n.prototype._toGlobalScreen=function(t){return m.toScreen(this,t,this.props.root.width)},n.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},n.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){if(1!=t.options.autoResize)return void t._stopAutoResize();t.dom.root&&(t.dom.root.offsetWidth==t.props.lastWidth&&t.dom.root.offsetHeight==t.props.lastHeight||(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,t.props.scrollbarWidth=c.getScrollBarWidth(),t.body.emitter.emit("_change")))},c.addEventListener(window,"resize",this._onResize),t.dom.root&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight),this.watchTimer=setInterval(this._onResize,1e3)},n.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),this._onResize&&(c.removeEventListener(window,"resize",this._onResize),this._onResize=null)},n.prototype._onTouch=function(t){this.touch.allowDragging=!0,this.touch.initialScrollTop=this.props.scrollTop},n.prototype._onPinch=function(t){this.touch.allowDragging=!1},n.prototype._onDrag=function(t){if(t&&this.touch.allowDragging){var e=t.deltaY,i=this._getScrollTop(),o=this._setScrollTop(this.touch.initialScrollTop+e);this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),o!=i&&this.emit("verticalDrag")}},n.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},n.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("top"!=this.options.orientation.item&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTope&&o.push(h.id):h.lefti&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;in)return}}if(i&&i!=this.groupTouchParams.group){var a=e.get(i.groupId),h=e.get(this.groupTouchParams.group.groupId);h&&a&&(this.options.groupOrderSwap(h,a,e),e.update(h),e.update(a));var d=e.getIds({order:this.options.groupOrder});if(!c.equalArray(d,this.groupTouchParams.originalOrder))for(var l=this.groupTouchParams.originalOrder,u=this.groupTouchParams.group.groupId,p=Math.min(l.length,d.length),m=0,v=0,g=0;m=p)break;if(d[m+v]!=u)if(l[m+g]!=u){var y=d.indexOf(l[m+g]),b=e.get(d[m+v]),_=e.get(l[m+g]);this.options.groupOrderSwap(b,_,e),e.update(b),e.update(_);var w=d[m+v];d[m+v]=l[m+g],d[y]=w,m++}else g=1;else v=1}}}},n.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=c.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(!c.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),l=o.get(s[a]);e.options.groupOrderSwap(d,l,o),o.update(d),o.update(l);var u=n[a];n[a]=s[a],n[h]=u,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.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})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){if(e!==this.itemFromRelatedTarget(t)){var i=e.getTitle();if(i){null==this.popup&&(this.popup=new l.default(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(i);var o=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-c.getAbsoluteLeft(o)+o.offsetLeft,t.clientY-c.getAbsoluteTop(o)+o.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){e!==this.itemFromRelatedTarget(t)&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){if(this.itemFromTarget(t)&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var e=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-c.getAbsoluteLeft(e)+e.offsetLeft,t.clientY-c.getAbsoluteTop(e)+e.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.options.snap||null;if(!this.itemFromTarget(t)){if(this.options.rtl)var o=c.getAbsoluteRight(this.dom.frame),n=o-t.center.x;else var o=c.getAbsoluteLeft(this.dom.frame),n=t.center.x-o;var s=this.body.util.toTime(n),r=this.body.util.getScale(),a=this.body.util.getStep(),h={start:i?i(s,r,a):s,content:"new item"};if("drop"==t.type){var d=JSON.parse(t.dataTransfer.getData("text"));if(h.content=d.content,h.type=d.type||"box",h[this.itemsData._fieldId]=d.id||c.randomUUID(),"range"==d.type||d.end&&d.start)if(d.end)h.end=d.end,h.start=d.start;else{var l=this.body.util.toTime(n+this.props.width/5);h.end=i?i(l,r,a):l}}else if(h[this.itemsData._fieldId]=c.randomUUID(),"range"===this.options.type){var l=this.body.util.toTime(n+this.props.width/5);h.end=i?i(l,r,a):l}var u=this.groupFromTarget(t);u&&(h.group=u.groupId),h=this._cloneItemData(h),this.options.onAdd(h,function(i){i&&(e.itemsData.getDataSet().add(i),"drop"==t.type&&e.setSelection([i.id]))})}}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[];if((t.srcEvent&&t.srcEvent.shiftKey||!1)&&this.options.multiselect){var o=this.itemsData.get(e.id).group,s=void 0;this.options.multiselectPerGroup&&i.length>0&&(s=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=s&&s!=o||i.push(e.id);var r=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||s==o){i=[];for(var a in this.items)if(this.items.hasOwnProperty(a)){var h=this.items[a],d=h.data.start,l=void 0!==h.data.end?h.data.end:d;!(d>=r.min&&l<=r.max)||this.options.multiselectPerGroup&&s!=this.itemsData.get(h.id).group||h instanceof x||i.push(h.id)}}}else{var u=i.indexOf(e.id);u==-1?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._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}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){for(var e=t.center?t.center.y:t.clientY,i=0;ir&&er)return n}else if(0===i&&en-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),rn&&(s=n-i-this.padding),s0&&this.current.milliseconds()0&&this.current.seconds()0&&this.current.minutes()0&&this.current.hours()0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){31104e9>t&&(this.scale="year",this.step=1e3),15552e9>t&&(this.scale="year",this.step=500),31104e8>t&&(this.scale="year",this.step=100),15552e8>t&&(this.scale="year",this.step=50),31104e7>t&&(this.scale="year",this.step=10),15552e7>t&&(this.scale="year",this.step=5),31104e6>t&&(this.scale="year",this.step=1),7776e6>t&&(this.scale="month",this.step=3),2592e6>t&&(this.scale="month",this.step=1),432e6>t&&(this.scale="day",this.step=5),1728e5>t&&(this.scale="day",this.step=2),864e5>t&&(this.scale="day",this.step=1),432e5>t&&(this.scale="weekday",this.step=1),144e5>t&&(this.scale="hour",this.step=4),36e5>t&&(this.scale="hour",this.step=1),9e5>t&&(this.scale="minute",this.step=15),6e5>t&&(this.scale="minute",this.step=10),3e5>t&&(this.scale="minute",this.step=5),6e4>t&&(this.scale="minute",this.step=1),15e3>t&&(this.scale="second",this.step=15),1e4>t&&(this.scale="second",this.step=10),5e3>t&&(this.scale="second",this.step=5),1e3>t&&(this.scale="second",this.step=1),200>t&&(this.scale="millisecond",this.step=200),100>t&&(this.scale="millisecond",this.step=100),50>t&&(this.scale="millisecond",this.step=50),10>t&&(this.scale="millisecond",this.step=10),5>t&&(this.scale="millisecond",this.step=5),1>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.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.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.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){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);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/r%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(o().add(1,"day"),"day")?" vis-tomorrow":t.isSame(o().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"month")?" vis-current-month":""}var o=this.moment,n=this.moment(this.current),s=n.locale?n.locale("en"):n.lang("en"),r=this.step;switch(this.scale){case"millisecond":return e(s)+t(s.milliseconds()).trim();case"second":return e(s)+t(s.seconds()).trim();case"minute":return e(s)+t(s.minutes()).trim();case"hour":return"vis-h"+s.hours()+(4==this.step?"-h"+(s.hours()+4):"")+e(s)+t(s.hours());case"weekday":return"vis-"+s.format("dddd").toLowerCase()+e(s)+function(t){return t.isSame(new Date,"week")?" vis-current-week":""}(s)+t(s.date());case"day":return"vis-day"+s.date()+" vis-"+s.format("MMMM").toLowerCase()+e(s)+i(s)+(this.step<=2?e(s):"")+(this.step<=2?" vis-"+s.format("dddd").toLowerCase():""+t(s.date()-1));case"month":return"vis-"+s.format("MMMM").toLowerCase()+i(s)+t(s.month());case"year":var a=s.year();return"vis-year"+a+function(t){return t.isSame(new Date,"year")?" vis-current-year":""}(s)+t(a);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.isVisible=null,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],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(58),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(1),a=i(135);i(136);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.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=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 e instanceof Object?i(t,this.dom.inner):this.dom.inner.innerHTML=void 0!==e&&null!==e?e:this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?r.removeClassName(this.dom.inner,"vis-hidden"):r.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),r.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(r.removeClassName(this.dom.label,o),r.addClassName(this.dom.label,"expanded")):(r.removeClassName(this.dom.label,"expanded"),r.addClassName(this.dom.label,o))}else if(this.nestedGroups){this.nestedGroups=null;var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";r.removeClassName(this.dom.label,o),r.removeClassName(this.dom.label,"expanded"),r.removeClassName(this.dom.label,"vis-nesting-group")}t&&t.nestedInGroup&&(r.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null -;n!=this.className&&(this.className&&(r.removeClassName(this.dom.label,this.className),r.removeClassName(this.dom.foreground,this.className),r.removeClassName(this.dom.background,this.className),r.removeClassName(this.dom.axis,this.className)),r.addClassName(this.dom.label,n),r.addClassName(this.dom.foreground,n),r.addClassName(this.dom.background,n),r.addClassName(this.dom.axis,n),this.className=n),this.style&&(r.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(r.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,n=this.dom.marker.clientHeight;n!=this.lastMarkerHeight&&(this.lastMarkerHeight=n,r.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()}),i=!0),this._calculateSubGroupHeights(e);var s=this.dom.foreground;if(this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth,this.isVisible=this._isGroupVisible(t,e),"function"==typeof this.itemSet.options.order){if(i){var h=this;r.forEach(this.items,function(t){t.displayed||(t.redraw(),h.visibleItems.push(t)),t.repositionX(!1)});var d=this.orderedItems.byStart.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stack(d,e,!0)}this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t)}else this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.itemSet.options.stack?a.stack(this.visibleItems,e,i):a.nostack(this.visibleItems,e,this.subgroups,this.itemSet.options.stackSubgroups);this._updateSubgroupsSizes();var l=this._calculateHeight(e),s=this.dom.foreground;this.top=s.offsetTop,this.right=s.offsetLeft,this.width=s.offsetWidth,o=r.updateProperty(this,"height",l)||o,o=r.updateProperty(this.props.label,"width",this.dom.inner.clientWidth)||o,o=r.updateProperty(this.props.label,"height",this.dom.inner.clientHeight)||o,this.dom.background.style.height=l+"px",this.dom.foreground.style.height=l+"px",this.dom.label.style.height=l+"px";for(var u=0,c=this.visibleItems.length;u0){var e=this;this.resetSubgroups(),r.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},o.prototype._isGroupVisible=function(t,e){return this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(r.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,r.forEach(i,function(t){t.top-=s})}e=n+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&&(this._addToSubgroup(t),this.orderSubgroups()),this.visibleItems.indexOf(t)==-1){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),new Date(t.data.start)new Date(this.subgroups[e].end)&&(this.subgroups[e].end=t.data.end),this.subgroups[e].items.push(t)},o.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.end;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)new Date(o)&&(o=t.data.end)}),t.subgroups[e].start=i,t.subgroups[e].end=o}},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;i=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},o.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},o.prototype.order=function(){for(var t=r.toArray(this.items),e=[],i=[],o=0;o0)for(var l=0;lh}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;lh})}for(var l=0;l=0;s--){var r=e[s];if(n(r))break;void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}for(var s=t+1;so[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;ae.right&&t.top-i.vertical+.001e.top:t.left-i.horizontal+.001e.left&&t.top-i.vertical+.001e.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.tope.top||e.start<=t.start&&e.end>=t.start&&e.topt.top}},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,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(112),i(137));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.visibleFrame=document.createElement("div"),t.visibleFrame.className="vis-item-visible-frame",t.box.appendChild(t.visibleFrame),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._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=this.editable.updateTime||this.editable.updateGroup,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._repaintOnItemUpdateTimeTooltip(t.box),this._repaintDeleteButton(t.box),this._repaintDragCenter(),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||(n<-o&&(n=-o),s>2*o&&(s=2*o));var r=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=r+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=r,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=r+"px",this.options.align){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(r-i,0)+"px":this.dom.content.style.left=Math.max(r-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((r-i)/2,0)+"px":this.dom.content.style.left=Math.max((r-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+e+"px)")}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;e.style.top="top"==t?this.top+"px":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){return t&&t.__esModule?t:{default:t}}function n(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.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(62),r=o(s),a=i(58),h=o(a),d=i(112),l=i(1),u=i(82);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){void 0!=t.group&&this.data.group!=t.group&&this.parent.itemSet._moveToGroup(this,t.group),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this,new d(e).on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t)}),this.dom.box?this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(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)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||this.data.editable===!0)&&this.data.editable!==!1;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;o+this.parent.top-50<-n?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var s,r;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(r=this.options.tooltipOnItemUpdateTime.template.bind(this),s=r(this.data)):(s="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(s+="
end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=s}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else{var h=this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o);if(h){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else{var h=this._contentToString(this.content)!==this._contentToString(e);if(h){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}}},n.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=(0,h.default)(this.data)}for(var i=0;it.start&&this.data.start.getTime()-it.start&&this.data.start.getTime()t.start&&this.data.start.getTime()-i/2t.start&&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._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,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup,n=this.parent.subgroups;n[o].index;this.dom.box.style.height=this.parent.subgroups[o].height+"px",this.dom.box.style.top="top"==i?this.parent.top+this.parent.subgroups[o].top+"px":this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:h.FORMAT,moment:l,timeAxis:null},this.options=r.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(62),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(1),a=i(128),h=i(133),d=i(129),l=i(82);o.prototype=new a,o.prototype.setOptions=function(t){t&&(r.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment","rtl"],this.options,t),r.selectiveDeepExtend(["format"],this.options,t), -"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===(0,s.default)(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof l.locale?l.locale(t.locale):l.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=r.convert(this.body.range.start,"Number"),i=r.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var s=new h(new Date(e),new Date(i),n,this.body.hiddenDates);s.setMoment(this.options.moment),this.options.format&&s.setFormat(this.options.format),this.options.timeAxis&&s.setScale(this.options.timeAxis),this.step=s;var a=this.dom;a.redundant.lines=a.lines,a.redundant.majorTexts=a.majorTexts,a.redundant.minorTexts=a.minorTexts,a.lines=[],a.majorTexts=[],a.minorTexts=[];var l,c,p,f,m,v,g,y,b=0,_=void 0,w=0;for(s.start(),l=s.getCurrent(),p=this.body.util.toScreen(l);s.hasNext()&&w<1e3;){w++,f=s.isMajor(),y=s.getClassName(),g=s.getLabelMinor(),l,c=p,s.next(),l=s.getCurrent(),s.isMajor(),p=this.body.util.toScreen(l),m=b,b=p-c;var x=b>=.4*m;if(this.options.showMinorLabels&&x){var k=this._repaintMinorText(c,g,t,y);k.style.width=b+"px"}f&&this.options.showMajorLabels?(c>0&&(void 0==_&&(_=c),k=this._repaintMajorText(c,s.getLabelMajor(),t,y)),v=this._repaintMajorLine(c,b,t,y)):x?v=this._repaintMinorLine(c,b,t,y):v&&(v.style.width=parseInt(v.style.width)+b+"px")}if(1e3!==w||u||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to 1000 lines."),u=!0),this.options.showMajorLabels){var O=this.body.util.toTime(0),S=s.getLabelMajor(O),M=S.length*(this.props.majorCharWidth||10)+10;(void 0==_||M<_)&&this._repaintMajorText(0,S,t,y)}r.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.innerHTML=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",this.options.rtl?(n.style.left="",n.style.right=t+"px"):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.createElement("div");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return n.childNodes[0].innerHTML=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",this.dom.majorTexts.push(n),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 n.style.top="top"==i?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-minor "+o):(n.style.left=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-minor "+o),n.style.width=e+"px",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 n.style.top="top"==i?"0":this.body.domProps.top.height+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-major "+o):(n.style.left=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-major "+o),n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="vis-text vis-major vis-measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth};var u=!1;t.exports=o},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this;["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].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(115),r=i(99),a=i(112),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){function o(t,e){this.body=t,this.defaultOptions={moment:a,locales:h,locale:"en",id:void 0,title:void 0},this.options=s.extend({},this.defaultOptions),e&&e.time?this.customTime=e.time:this.customTime=new Date,this.eventParams={},this.setOptions(e),this._create()}var n=i(112),s=i(1),r=i(128),a=i(82),h=i(145);o.prototype=new r,o.prototype.setOptions=function(t){t&&s.selectiveExtend(["moment","locale","locales","id"],this.options,t)},o.prototype._create=function(){function t(t){this.body.range._onMouseWheel(t)}var e=document.createElement("div");e["custom-time"]=this,e.className="vis-custom-time "+(this.options.id||""),e.style.position="absolute",e.style.top="0px",e.style.height="100%",this.bar=e;var i=document.createElement("div");i.style.position="relative",i.style.top="0px",i.style.left="-10px",i.style.height="100%",i.style.width="20px",i.addEventListener?(i.addEventListener("mousewheel",t.bind(this),!1),i.addEventListener("DOMMouseScroll",t.bind(this),!1)):i.attachEvent("onmousewheel",t.bind(this)),e.appendChild(i),this.hammer=new n(i),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:n.DIRECTION_HORIZONTAL})},o.prototype.destroy=function(){this.hide(),this.hammer.destroy(),this.hammer=null,this.body=null},o.prototype.redraw=function(){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale];i||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),i=this.options.locales.en);var o=this.options.title;return void 0===o?(o=i.time+": "+this.options.moment(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss"),o=o.charAt(0).toUpperCase()+o.substring(1)):"function"==typeof o&&(o=o.call(this.customTime)),this.bar.style.left=e+"px",this.bar.title=o,!1},o.prototype.hide=function(){this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar)},o.prototype.setCustomTime=function(t){this.customTime=s.convert(t,"Date"),this.redraw()},o.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},o.prototype.setCustomTitle=function(t){this.options.title=t},o.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation()},o.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=this.body.util.toScreen(this.eventParams.customTime)+t.deltaX,i=this.body.util.toTime(e);this.setCustomTime(i),this.body.emitter.emit("timechange",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:s.elementsCensor(t)}),t.stopPropagation()}},o.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:s.elementsCensor(t)}),t.stopPropagation())},o.customTimeFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("custom-time"))return e["custom-time"];e=e.parentNode}return null},t.exports=o},function(t,e){e.en={current:"current",time:"time"},e.en_EN=e.en,e.en_US=e.en,e.it={current:"attuale",time:"tempo"},e.it_IT=e.it,e.it_CH=e.it,e.nl={current:"huidige",time:"tijd"},e.nl_NL=e.nl,e.nl_BE=e.nl,e.de={current:"Aktuelle",time:"Zeit"},e.de_DE=e.de,e.fr={current:"actuel",time:"heure"},e.fr_FR=e.fr,e.fr_CA=e.fr,e.fr_BE=e.fr,e.es={current:"corriente",time:"hora"},e.es_ES=e.es},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={rtl:!1,showCurrentTime:!0,moment:r,locales:a,locale:"en"},this.options=n.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var n=i(1),s=i(128),r=i(82),a=i(145);o.prototype=new s,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-current-time",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},o.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},o.prototype.setOptions=function(t){t&&n.selectiveExtend(["rtl","showCurrentTime","moment","locale","locales"],this.options,t)},o.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=this.options.moment((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),o=this.options.locales[this.options.locale];o||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),o=this.options.locales.en);var n=o.current+" "+o.time+": "+e.format("dddd, MMMM Do YYYY, H:mm:ss");n=n.charAt(0).toUpperCase()+n.substring(1),this.options.rtl?this.bar.style.right=i+"px":this.bar.style.left=i+"px",this.bar.title=n}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},o.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,o=1/i/10;o<30&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="object",r={configure:{enabled:{boolean:o},filter:{boolean:o,function:"function"},container:{dom:"dom"},__type__:{object:s,boolean:o,function:"function"}},align:{string:i},rtl:{boolean:o,undefined:"undefined"},rollingMode:{boolean:o,undefined:"undefined"},verticalScroll:{boolean:o,undefined:"undefined"},horizontalScroll:{boolean:o,undefined:"undefined"},autoResize:{boolean:o},throttleRedraw:{number:n},clickToUse:{boolean:o},dataAttributes:{string:i,array:"array"},editable:{add:{boolean:o,undefined:"undefined"},remove:{boolean:o,undefined:"undefined"},updateGroup:{boolean:o,undefined:"undefined"},updateTime:{boolean:o,undefined:"undefined"},overrideItems:{boolean:o,undefined:"undefined"},__type__:{boolean:o,object:s}},end:{number:n,date:"date",string:i,moment:"moment"},format:{minorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:s,function:"function"}},majorLabels:{millisecond:{string:i,undefined:"undefined"},second:{string:i,undefined:"undefined"},minute:{string:i,undefined:"undefined"},hour:{string:i,undefined:"undefined"},weekday:{string:i,undefined:"undefined"},day:{string:i,undefined:"undefined"},month:{string:i,undefined:"undefined"},year:{string:i,undefined:"undefined"},__type__:{object:s,function:"function"}},__type__:{object:s}},moment:{function:"function"},groupOrder:{string:i,function:"function"},groupEditable:{add:{boolean:o,undefined:"undefined"},remove:{boolean:o,undefined:"undefined"},order:{boolean:o,undefined:"undefined"},__type__:{boolean:o,object:s}},groupOrderSwap:{function:"function"},height:{string:i,number:n},hiddenDates:{start:{date:"date",number:n,string:i,moment:"moment"},end:{date:"date",number:n,string:i,moment:"moment"},repeat:{string:i},__type__:{object:s,array:"array"}},itemsAlwaysDraggable:{boolean:o},locale:{string:i},locales:{__any__:{any:"any"},__type__:{object:s}},margin:{axis:{number:n},item:{horizontal:{number:n,undefined:"undefined"},vertical:{number:n,undefined:"undefined"},__type__:{object:s,number:n}},__type__:{object:s,number:n}},max:{date:"date",number:n,string:i,moment:"moment"},maxHeight:{number:n,string:i},maxMinorChars:{number:n},min:{date:"date",number:n,string:i,moment:"moment"},minHeight:{number:n,string:i},moveable:{boolean:o},multiselect:{boolean:o},multiselectPerGroup:{boolean:o},onAdd:{function:"function"},onUpdate:{function:"function"},onMove:{function:"function"},onMoving:{function:"function"},onRemove:{function:"function"},onAddGroup:{function:"function"},onMoveGroup:{function:"function"},onRemoveGroup:{function:"function"},order:{function:"function"},orientation:{axis:{string:i,undefined:"undefined"},item:{string:i,undefined:"undefined"},__type__:{string:i,object:s}},selectable:{boolean:o},showCurrentTime:{boolean:o},showMajorLabels:{boolean:o},showMinorLabels:{boolean:o},stack:{boolean:o},stackSubgroups:{boolean:o},snap:{function:"function",null:"null"},start:{date:"date",number:n,string:i,moment:"moment"},template:{function:"function"},groupTemplate:{function:"function"},visibleFrameTemplate:{string:i,function:"function"},tooltip:{followMouse:{boolean:o},overflowMethod:{string:["cap","flip"]},__type__:{object:s}},tooltipOnItemUpdateTime:{template:{function:"function"},__type__:{boolean:o,object:s}},timeAxis:{scale:{string:i,undefined:"undefined"},step:{number:n,undefined:"undefined"},__type__:{object:s}},type:{string:i},width:{string:i,number:n},zoomable:{boolean:o},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:n},zoomMin:{number:n},__type__:{object:s}},a={global:{align:["center","left","right"],direction:!1,autoResize:!0,clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,stackSubgroups:!0,start:"",tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1,type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=r,e.configureOptions=a},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i,o){if(!(Array.isArray(i)||i instanceof u||i instanceof c)&&i instanceof Object){var n=o;o=i,i=n}o&&o.throttleRedraw&&console.warn('Graph2d option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var s=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:d,width:null,height:null,maxHeight:null,minHeight:null},this.options=l.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{toScreen:s._toScreen.bind(s),toGlobalScreen:s._toGlobalScreen.bind(s),toTime:s._toTime.bind(s),toGlobalTime:s._toGlobalTime.bind(s)}},this.range=new p(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new m(this.body),this.components.push(this.timeAxis),this.currentTime=new v(this.body),this.components.push(this.currentTime),this.linegraph=new y(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){s.emit("click",s.getEventProperties(t))}),this.on("doubletap",function(t){s.emit("doubleClick",s.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){s.emit("contextmenu",s.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var s=i(118),r=o(s),a=i(126),h=o(a),d=(i(99),i(112),i(82)),l=i(1),u=i(89),c=i(93),p=i(127),f=i(130),m=i(142),v=i(146),g=i(144),y=i(149),b=i(126).printStyle,_=i(157).allOptions,w=i(157).configureOptions;n.prototype=new f,n.prototype.setOptions=function(t){h.default.validate(t,_)===!0&&console.log("%cErrors have been found in the supplied options object.",b),f.prototype.setOptions.call(this,t)},n.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof u||t instanceof c?t:new u(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},n.prototype.setGroups=function(t){var e;e=t?t instanceof u||t instanceof c?t:new u(t):null,this.groupsData=e,this.linegraph.setGroups(e)},n.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:'"+t+"'"},n.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]&&(this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]))},n.prototype.getDataRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var o=0;os?s:t,e=null==e?s:e0&&d.push(u.screenToValue(n)),!c.hidden&&this.itemsData.length>0&&d.push(c.screenToValue(n)),{event:t,what:h,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:s,value:d}},n.prototype._createConfigurator=function(){return new r.default(this,this.dom.container,w)},t.exports=n},function(t,e,i){function o(t,e){this.id=r.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=r.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=r.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n=i(62),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(1),a=i(88),h=i(89),d=i(93),l=i(128),u=i(150),c=i(152),p=i(156),f=i(153),m=i(155),v=i(154);o.prototype=new l,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 u(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new p(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new p(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var r={};for(this._getRelevantData(s,r,o,n),this._applySampling(s,r),e=0;e0)switch(t.options.style){case"line":d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(r[s[e]],t)),m.draw(d[s[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(r[s[e]],t,this.framework);break;case"bar":}}}return a.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;at[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,t[a].y=0==o?t[a].orginalY+r.y:t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,s,a,h;if(t.length>0)for(s=0;s0)for(var o=0;o0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l0){for(s=0;s0&&(n=this.groups[t[s]],r.stack===!0&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));f.getStackedYRange(a,i,t,"__barStackLeft","left"),f.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=di?i:h,l=l=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),t.master===!0&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var r=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(r=this.props.titleCharHeight);var h=this.options.icons===!0?Math.max(this.options.iconWidth,r)+this.options.labelOffsetX+15:r+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-h&&this.options.visible===!0?(this.width=this.maxLabelSize+h,this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+h),this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var s=a.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>h.magnitudefactor*h.minorSteps[h.minorStepIdx]*.5?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}i.prototype.setCharHeight=function(t){this.majorCharHeight=t},i.prototype.setHeight=function(t){this.containerHeight=t},i.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r=e){n=!0,this.minorStepIdx=r;break}}if(n===!0)break}},i.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])==0},i.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},i.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},i.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},i.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},i.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdxo+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&ue.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];r.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){i={svg:document.createElementNS("http://www.w3.org/2000/svg","svg"),svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":h.drawIcon(this,o,n,t,e,i);break;case"points":case"point":d.drawIcon(this,o,n,t,e,i);break;case"bar":a.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;ot[o].y?t[o].y:e,i=i0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t0?(o=t0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupIde[s].screen_y?e[s].screen_y:o,n=nt[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n0){return 1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o=e;if(i)for(var n=t.length-2;n>0;n--)o+=t[n][0]+","+t[n][1]+" ";else for(var n=1;n0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+c*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+c*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i")}this.dom.textArea.innerHTML=r,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,s.default)(this.groups);t.sort(function(t,e){return t0){var i=this.groupIndex%this.groupsArray.length;this.groupIndex++,e={},e.color=this.groups[this.groupsArray[i]],this.groups[t]=e}else{var o=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,e={},e.color=this.defaultGroups[o],this.groups[t]=e}return e}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(163),d=o(h),l=i(164),u=o(l),c=i(1),p=i(89),f=i(93),m=function(){function t(e,i,o,n){var r=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},c.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){c.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(this.nodeOptions=t,void 0!==t){if(d.default.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font){u.default.parseOptions(this.options.font,t);for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i]._reset())}if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o]._reset();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){ -var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof p||t instanceof f)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new p,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new p}if(i&&c.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;c.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}e===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:d.default)(t,this.body,this.images,this.groups,this.options,this.defaultOptions,this.nodeOptions)}},{key:"refresh",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.body.nodes;for(var i in e){var o=void 0;e.hasOwnProperty(i)&&(o=e[i]);var n=this.body.data.nodes._data[i];void 0!==o&&void 0!==n&&(t===!0&&o.setOptions({x:null,y:null}),o.setOptions({fixed:!1}),o.setOptions(n))}}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(Array.isArray(t)===!0){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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["color","font","fixed","shadow"];if(H.selectiveNotDeepExtend(n,t,e,i),H.mergeOptions(t,e,"shadow",i,o),void 0!==e.color&&null!==e.color){var s=H.parseColor(e.color);H.fillIfDefined(t.color,s)}else i===!0&&null===e.color&&(t.color=H.bridgeObject(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),void 0!==e.font&&null!==e.font?u.default.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=H.bridgeObject(o.font)),void 0!==e.scaling&&H.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)}}]),t}();e.default=W},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(165),s=o(n),r=i(2),a=o(r),h=i(62),d=o(h),l=i(119),u=o(l),c=i(120),p=o(c),f=i(1),m=function(){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,u.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,p.default)(t,[{key:"setOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.elementOptions=e,this.fontOptions=f.deepExtend({},e.font,!0),void 0!==e.label&&(this.labelDirty=!0),void 0!==e.font&&(t.parseOptions(this.fontOptions,e,i),"string"==typeof e.font?this.baseSize=this.fontOptions.size:"object"===(0,d.default)(e.font)&&void 0!==e.font.size&&(this.baseSize=e.font.size))}},{key:"constrain",value:function(t,e,i){this.fontOptions.constrainWidth=!1,this.fontOptions.maxWdt=-1,this.fontOptions.minWdt=-1;var o=[e,t,i],n=f.topMost(o,"widthConstraint");if("number"==typeof n)this.fontOptions.maxWdt=Number(n),this.fontOptions.minWdt=Number(n);else if("object"===(void 0===n?"undefined":(0,d.default)(n))){var s=f.topMost(o,["widthConstraint","maximum"]);"number"==typeof s&&(this.fontOptions.maxWdt=Number(s));var r=f.topMost(o,["widthConstraint","minimum"]);"number"==typeof r&&(this.fontOptions.minWdt=Number(r))}this.fontOptions.constrainHeight=!1,this.fontOptions.minHgt=-1,this.fontOptions.valign="middle";var a=f.topMost(o,"heightConstraint");if("number"==typeof a)this.fontOptions.minHgt=Number(a);else if("object"===(void 0===a?"undefined":(0,d.default)(a))){var h=f.topMost(o,["heightConstraint","minimum"]);"number"==typeof h&&(this.fontOptions.minHgt=Number(h));var l=f.topMost(o,["heightConstraint","valign"]);"string"==typeof l&&("top"!==l&&"bottom"!==l||(this.fontOptions.valign=l))}}},{key:"choosify",value:function(t,e,i){this.fontOptions.chooser=!0;var o=[e,t,i],n=f.topMost(o,"chosen");if("boolean"==typeof n)this.fontOptions.chooser=n;else if("object"===(void 0===n?"undefined":(0,d.default)(n))){var s=f.topMost(o,["chosen","label"]);"boolean"!=typeof s&&"function"!=typeof s||(this.fontOptions.chooser=s)}}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"propagateFonts",value:function(t,e,i){if(this.fontOptions.multi){var o=["bold","ital","boldital","mono"],n=!0,s=!1,r=void 0;try{for(var h,d=(0,a.default)(o);!(n=(h=d.next()).done);n=!0){var l=h.value,u=void 0;if(t.font&&(u=t.font[l]),"string"==typeof u){var c=u.split(" ");this.fontOptions[l].size=c[0].replace("px",""),this.fontOptions[l].face=c[1],this.fontOptions[l].color=c[2],this.fontOptions[l].vadjust=this.fontOptions.vadjust,this.fontOptions[l].mod=i.font[l].mod}else{if(u&&u.hasOwnProperty("face")?this.fontOptions[l].face=u.face:e.font&&e.font[l]&&e.font[l].hasOwnProperty("face")?this.fontOptions[l].face=e.font[l].face:"mono"===l?this.fontOptions[l].face=i.font[l].face:e.font&&e.font.hasOwnProperty("face")?this.fontOptions[l].face=e.font.face:this.fontOptions[l].face=this.fontOptions.face,u&&u.hasOwnProperty("color")?this.fontOptions[l].color=u.color:e.font&&e.font[l]&&e.font[l].hasOwnProperty("color")?this.fontOptions[l].color=e.font[l].color:e.font&&e.font.hasOwnProperty("color")?this.fontOptions[l].color=e.font.color:this.fontOptions[l].color=this.fontOptions.color,u&&u.hasOwnProperty("mod")?this.fontOptions[l].mod=u.mod:e.font&&e.font[l]&&e.font[l].hasOwnProperty("mod")?this.fontOptions[l].mod=e.font[l].mod:e.font&&e.font.hasOwnProperty("mod")?this.fontOptions[l].mod=e.font.mod:this.fontOptions[l].mod=i.font[l].mod,u&&u.hasOwnProperty("size"))this.fontOptions[l].size=u.size;else if(e.font&&e.font[l]&&e.font[l].hasOwnProperty("size"))this.fontOptions[l].size=e.font[l].size;else if(this.fontOptions[l].face===i.font[l].face&&this.fontOptions.face===i.font.face){var p=this.fontOptions.size/Number(i.font.size);this.fontOptions[l].size=i.font[l].size*p}else e.font&&e.font.hasOwnProperty("size")?this.fontOptions[l].size=e.font.size:this.fontOptions[l].size=this.fontOptions.size;if(u&&u.hasOwnProperty("vadjust"))this.fontOptions[l].vadjust=u.vadjust;else if(e.font&&e.font[l]&&e.font[l].hasOwnProperty("vadjust"))this.fontOptions[l].vadjust=e.font[l].vadjust;else if(this.fontOptions[l].face===i.font[l].face&&this.fontOptions.face===i.font.face){var f=this.fontOptions.size/Number(i.font.size);this.fontOptions[l].vadjust=i.font[l].vadjust*Math.round(f)}else e.font&&e.font.hasOwnProperty("vadjust")?this.fontOptions[l].vadjust=e.font.vadjust:this.fontOptions[l].vadjust=this.fontOptions.vadjust}this.fontOptions[l].size=Number(this.fontOptions[l].size),this.fontOptions[l].vadjust=Number(this.fontOptions[l].vadjust)}}catch(t){s=!0,r=t}finally{try{!n&&d.return&&d.return()}finally{if(s)throw r}}}}},{key:"draw",value:function(t,e,i,o,n){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r5&&void 0!==arguments[5]?arguments[5]:"middle",a=this.fontOptions.size,h=a*this.body.view.scale;h>=this.elementOptions.scaling.label.maxVisible&&(a=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale);var d=this.size.yLine,l=this._setAlignment(t,o,d,r),u=(0,s.default)(l,2);o=u[0],d=u[1],t.textAlign="left",o-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(d-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(d+=(this.size.height-this.size.labelHeight)/2));for(var c=0;c0&&(t.lineWidth=m.strokeWidth,t.strokeStyle=b,t.lineJoin="round"),t.fillStyle=y,m.strokeWidth>0&&t.strokeText(m.text,o+p,d+m.vadjust),t.fillText(m.text,o+p,d+m.vadjust),p+=m.width}d+=this.lines[c].height}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&this.pointToSelf===!1){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=f.overrideOpacity(o,s),n=f.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this.labelDirty===!0&&this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4),this.labelDirty=!1}},{key:"decodeMarkupSystem",value:function(t){var e="none";return"markdown"===t||"md"===t?e="markdown":t!==!0&&"html"!==t||(e="html"),e}},{key:"splitBlocks",value:function(t,e){var i=this.decodeMarkupSystem(e);return"none"===i?[{text:t,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(t):"html"===i?this.splitHtmlBlocks(t):void 0}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position/.test(t.substr(i.position,3))?i.mono||i.ital||!//.test(t.substr(i.position,3))?!i.mono&&//.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/</.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"getFormattingValues",value:function(t,e,i,o){var n={color:"normal"===o?this.fontOptions.color:this.fontOptions[o].color,size:"normal"===o?this.fontOptions.size:this.fontOptions[o].size,face:"normal"===o?this.fontOptions.face:this.fontOptions[o].face,mod:"normal"===o?"":this.fontOptions[o].mod,vadjust:"normal"===o?this.fontOptions.vadjust:this.fontOptions[o].vadjust,strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};return"normal"===o?(e||i)&&(this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?n.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,n,this.elementOptions.id,e,i)):(e||i)&&"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(t,n,this.elementOptions.id,e,i),t.font=(n.mod+" "+n.size+"px "+n.face).replace(/"/g,""),n.font=t.font,n.height=n.size,n}},{key:"differentState",value:function(t,e){return t!==this.fontOptions.selectedState&&e!==this.fontOptions.hoverState}},{key:"_processLabel",value:function(t,e,i){var o=0,n=0,s=[],r=0;if(s.add=function(t,e,i,o,n,s,r,a,h,d){this.length==t&&(this[t]={width:0,height:0,blocks:[]}),this[t].blocks.push({text:e,font:i,color:o,width:n,height:s,vadjust:r,mod:a,strokeWidth:h,strokeColor:d})},s.accumulate=function(t,e,i){this[t].width+=e,this[t].height=i>this[t].height?i:this[t].height},s.addAndAccumulate=function(t,e,i,o,n,s,r,a,h,d){this.add(t,e,i,o,n,s,r,a,h,d),this.accumulate(t,n,s)},void 0!==this.elementOptions.label){var a=String(this.elementOptions.label).split("\n"),h=a.length;if(this.elementOptions.font.multi)for(var d=0;d0)for(var m=this.getFormattingValues(t,e,i,l[f].mod),v=l[f].text.split(" "),g=!0,y="",b={width:0},_=void 0,w=0;wthis.fontOptions.maxWdt&&0!=_.width?(c=m.height>c?m.height:c,s.add(r,y,m.font,m.color,_.width,m.height,m.vadjust,l[f].mod,m.strokeWidth,m.strokeColor),s.accumulate(r,_.width,c),y="",g=!0,u=0,o=s[r].width>o?s[r].width:o,n+=s[r].height,r++):(y=y+x+v[w],w===v.length-1&&(c=m.height>c?m.height:c,u+=b.width,s.add(r,y,m.font,m.color,b.width,m.height,m.vadjust,l[f].mod,m.strokeWidth,m.strokeColor),s.accumulate(r,b.width,c),f===l.length-1&&(o=s[r].width>o?s[r].width:o,n+=s[r].height,r++)),w++,g=!1)}else{var k=this.getFormattingValues(t,e,i,l[f].mod),O=t.measureText(l[f].text);s.addAndAccumulate(r,l[f].text,k.font,k.color,O.width,k.height,k.vadjust,l[f].mod,k.strokeWidth,k.strokeColor),o=s[r].width>o?s[r].width:o,l.length-1===f&&(n+=s[r].height,r++)}}}else for(var S=0;S0)for(var D=a[S].split(" "),C="",T={width:0},E=void 0,P=0;Pthis.fontOptions.maxWdt&&0!=E.width?(s.addAndAccumulate(r,C,M.font,M.color,E.width,M.size,M.vadjust,"normal",M.strokeWidth,M.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,C="",r++):(C=C+I+D[P],P===D.length-1&&(s.addAndAccumulate(r,C,M.font,M.color,T.width,M.size,M.vadjust,"normal",M.strokeWidth,M.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++),P++)}else{var N=a[S],R=t.measureText(N);s.addAndAccumulate(r,N,M.font,M.color,R.width,M.size,M.vadjust,"normal",M.strokeWidth,M.strokeColor),o=s[r].width>o?s[r].width:o,n+=s[r].height,r++}}}this.fontOptions.minWdt>0&&o0&&n2&&void 0!==arguments[2]&&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],t.vadjust=0}else"object"===(0,d.default)(e.font)&&f.fillIfDefined(t,e.font,i);t.size=Number(t.size),t.vadjust=Number(t.vadjust)}}]),t}();e.default=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(166),s=o(n),r=i(2),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,h=(0,a.default)(t);!(o=(r=h.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e,i){t.exports={default:i(167),__esModule:!0}},function(t,e,i){i(4),i(50),t.exports=i(168)},function(t,e,i){var o=i(54),n=i(47)("iterator"),s=i(8);t.exports=i(17).isIterable=function(t){var e=Object(t);return void 0!==e[n]||"@@iterator"in e||s.hasOwnProperty(o(e))}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;(void 0===this.width||this.labelModule.differentState(e,i))&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=this.width/2)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,t.strokeStyle=s.borderColor,t.lineWidth=s.borderWidth,t.lineWidth/=this.body.view.scale,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=s.color,t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),s.borderWidth>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2;var s=this.options.shapeProperties.borderRadius;this.boundingBox.left=this.left-s,this.boundingBox.top=this.top-s,this.boundingBox.bottom=this.top+this.height+s,this.boundingBox.right=this.left+this.width+s}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(m.default);e.default=v},function(t,e,i){t.exports={default:i(171),__esModule:!0}},function(t,e,i){i(172),t.exports=i(17).Object.getPrototypeOf},function(t,e,i){ -var o=i(49),n=i(48);i(61)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){e.__esModule=!0;var o=i(62),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":(0,n.default)(e))&&"function"!=typeof e?t:e}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(175),s=o(n),r=i(55),a=o(r),h=i(62),d=o(h);e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":(0,d.default)(e)));t.prototype=(0,a.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(s.default?(0,s.default)(t,e):t.__proto__=e)}},function(t,e,i){t.exports={default:i(176),__esModule:!0}},function(t,e,i){i(177),t.exports=i(17).Object.setPrototypeOf},function(t,e,i){var o=i(15);o(o.S,"Object",{setPrototypeOf:i(178).set})},function(t,e,i){var o=i(23),n=i(22),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(18)(Function.call,i(78).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(62),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,d.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"_setMargins",value:function(t){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(t,e){var i=this.options.borderWidth;return this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:"enableShadow",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(t,e){if(e.borderDashes!==!1)if(void 0!==t.setLineDash){var i=e.borderDashes;i===!0&&(i=[5,15]),t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:"disableBorderDashes",value:function(t,e){e.borderDashes!==!1&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(181),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.options.size;if(void 0===this.width||this.labelModule.differentState(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=Math.max(this.textSize.width+this.margin.right+this.margin.left,this.textSize.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,o,n,s),this.boundingBox.top=i-s.size,this.boundingBox.left=e-s.size,this.boundingBox.right=e+s.size,this.boundingBox.bottom=i+s.size,this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n.labelOffset=0,n.imageLoaded=!1,n.selected=!1,n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"setOptions",value:function(t,e,i){this.options=t,this.setImages(e,i)}},{key:"setImages",value:function(t,e){t&&(this.imageObj=t,e&&(this.imageObjAlt=e))}},{key:"switchImages",value:function(t){if(t&&!this.selected||!t&&this.selected){var e=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=e}this.selected=t}},{key:"_resizeImage",value:function(){var t=!1;if(this.imageObj.width&&this.imageObj.height?this.imageLoaded===!1&&(this.imageLoaded=!0,t=!0):this.imageLoaded=!1,!this.width||!this.height||t===!0){var e,i,o;this.imageObj.width&&this.imageObj.height&&(e=0,i=0),this.options.shapeProperties.useImageSize===!1?this.imageObj.width>this.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=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.circle(e,i,s.size),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore()}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=this.imageObj.width/this.width/this.body.view.scale;if(i>2&&this.options.shapeProperties.interpolation===!0){var o=this.imageObj.width,n=this.imageObj.height,s=document.createElement("canvas");s.width=o,s.height=o;var r=s.getContext("2d");i*=.5,o*=.5,n*=.5,r.drawImage(this.imageObj,0,0,o,n);for(var a=0,h=1;i>2&&h<4;)r.drawImage(s,a,0,o,n,a+o,0,o/2,n/2),a+=o,i*=.5,o*=.5,n*=.5,h+=1;t.drawImage(s,a,0,o,n,this.left,this.top,this.width,this.height)}else t.drawImage(this.imageObj,this.left,this.top,this.width,this.height);this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(181),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h._swapToImageResizeWhenImageLoaded=!0,h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height||this.labelModule.differentState(e,i)){var o=2*this.options.size;this.width=o,this.height=o,this._swapToImageResizeWhenImageLoaded=!0,this.radius=.5*this.width}else this._swapToImageResizeWhenImageLoaded&&(this.width=void 0,this.height=void 0,this._swapToImageResizeWhenImageLoaded=!1),this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.imageObjAlt&&this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2;Math.min(.5*this.height,.5*this.width);this._drawRawCircle(t,e,i,o,n,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){if(void 0===this.width||this.labelModule.differentState(e,i)){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width+this.margin.right+this.margin.left;this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments[3];this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_resizeShape",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.selected,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.hover,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{size:this.options.size};if(void 0===this.width||this.labelModule.differentState(t,e)){var o=2*i.size;this.width=o,this.height=o,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){this._resizeShape(s,r,a),this.left=o-this.width/2,this.top=n-this.height/2;var h=a.borderWidth/this.body.view.scale;if(t.lineWidth=Math.min(this.width,h),t.strokeStyle=a.borderColor,t.fillStyle=a.color,t[e](o,n,a.size),this.enableShadow(t,a),t.fill(),this.disableShadow(t,a),t.save(),h>0&&(this.enableBorderDashes(t,a),t.stroke(),this.disableBorderDashes(t,a)),t.restore(),void 0!==this.options.label){var d=n+.5*this.height+3;this.labelModule.draw(t,o,d,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+3))}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments[3];this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.width||this.labelModule.differentState(e,i)){var o=this.labelModule.getTextSize(t,e,i);this.height=2*o.height,this.width=o.width+this.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height;var r=s.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.strokeStyle=s.borderColor,t.fillStyle=s.color,t.ellipse(this.left,this.top,this.width,this.height),this.enableShadow(t,s),t.fill(),this.disableShadow(t,s),t.save(),r>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-.5*this.width,this.top=e-.5*this.height,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){(void 0===this.width||this.labelModule.differentState(e,i))&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+5,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,o,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(181),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(){this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.imageObjAlt&&this.switchImages(o),this.selected=o,this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this.options.shapeProperties.useBorderWithImage===!0){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),t.save(),h>0&&(this.enableBorderDashes(t,s),t.stroke(),this.disableBorderDashes(t,s)),t.restore(),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i,o){this._resizeShape(e,i,o)}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(179),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){(void 0===this.width||this.labelModule.differentState(e,i))&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.top=this.top,this.boundingBox.left=this.left,this.boundingBox.right=this.left+this.width,this.boundingBox.bottom=this.top+this.height}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(185),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){this._resizeShape()}},{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(196),d=o(h),l=i(164),u=o(l),c=i(1),p=i(89),f=i(93),m=function(){function t(e,i,o){var n=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.body.functions.createEdge=this.create.bind(this),this.edgesListeners={add:function(t,e){n.add(e.items)},update:function(t,e){n.update(e.items)},remove:function(t,e){n.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},selectionWidth:1.5,selfReferenceSize:20,shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},c.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_forceDisableDynamicCurves",function(e){"dynamic"===e&&(e="continuous");var i=!1;for(var o in t.body.edges)if(t.body.edges.hasOwnProperty(o)){var n=t.body.edges[o],s=t.body.data.edges._data[o];if(void 0!==s){var r=s.smooth;void 0!==r&&r.enabled===!0&&"dynamic"===r.type&&(void 0===e?n.setOptions({smooth:!1}):n.setOptions({smooth:{type:e}}),i=!0)}}i===!0&&t.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){t.reconnectEdges()}),this.body.emitter.on("refreshEdges",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){c.forEach(t.edgesListeners,function(e,i){t.body.data.edges&&t.body.data.edges.off(i,e)}),delete t.body.functions.createEdge,delete t.edgesListeners.add,delete t.edgesListeners.update,delete t.edgesListeners.remove,delete t.edgesListeners})}},{key:"setOptions",value:function(t){if(this.edgeOptions=t,void 0!==t){d.default.parseOptions(this.options,t);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)this.body.edges.hasOwnProperty(i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font){u.default.parseOptions(this.options.font,t);for(var o in this.body.edges)this.body.edges.hasOwnProperty(o)&&this.body.edges[o].updateLabelModule()}void 0===t.hidden&&void 0===t.physics&&e!==!0||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof p||t instanceof f)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new p,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new p}if(o&&c.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){c.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}i===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;ni.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,this.hover)}}}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,o=this.to.x,n=this.to.y,s=t.left,r=t.top;return this.edgeType.getDistanceToEdge(e,i,o,n,s,r)<10}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);(o<-1&&i<0||o>0&&i<0)&&(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]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=["arrowStrikethrough","id","from","hidden","hoverWidth","label","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width"];if(O.selectiveDeepExtend(n,t,e,i),O.mergeOptions(t,e,"smooth",i,o),O.mergeOptions(t,e,"shadow",i,o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:i===!0&&null===e.dashes&&(t.dashes=(0,a.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),O.mergeOptions(t.scaling,e.scaling,"label",i,o.scaling)):i===!0&&null===e.scaling&&(t.scaling=(0,a.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();t.arrows.to.enabled=r.indexOf("to")!=-1,t.arrows.middle.enabled=r.indexOf("middle")!=-1,t.arrows.from.enabled=r.indexOf("from")!=-1}else{if("object"!==(0,d.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));O.mergeOptions(t.arrows,e.arrows,"to",i,o.arrows),O.mergeOptions(t.arrows,e.arrows,"middle",i,o.arrows),O.mergeOptions(t.arrows,e.arrows,"from",i,o.arrows)}else i===!0&&null===e.arrows&&(t.arrows=(0,a.default)(o.arrows));if(void 0!==e.color&&null!==e.color)if(t.color=O.deepExtend({},t.color,!0),O.isString(e.color))t.color.color=e.color,t.color.highlight=e.color,t.color.hover=e.color,t.color.inherit=!1;else{var h=!1;void 0!==e.color.color&&(t.color.color=e.color.color,h=!0),void 0!==e.color.highlight&&(t.color.highlight=e.color.highlight,h=!0),void 0!==e.color.hover&&(t.color.hover=e.color.hover,h=!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&&h===!0&&(t.color.inherit=!1)}else i===!0&&null===e.color&&(t.color=O.bridgeObject(o.color));void 0!==e.font&&null!==e.font?m.default.parseOptions(t.font,e):i===!0&&null===e.font&&(t.font=O.bridgeObject(o.font))}}]),t}();e.default=S},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(165),s=o(n),r=i(170),a=o(r),h=i(119),d=o(h),l=i(120),u=o(l),c=i(173),p=o(c),f=i(174),m=o(f),v=i(198),g=o(v),y=function(t){function e(t,i,o){return(0,d.default)(this,e),(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,m.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i||void 0===o.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.bezierCurveTo(o.x,o.y,n.x,n.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||this.options.smooth.forceDirection===!0||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),h=(0,s.default)(a,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];return a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3),{x:a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,y:a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y}}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(199),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var h=1e9,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=t,m=e,v=[0,0,0,0];for(l=1;l<10;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=d2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),h=0,d=0,l=1,u=this.to,c=!1;for(t.id===this.from.id&&(u=this.from,c=!0);d<=l&&h<10;){var p=.5*(d+l);if(i=this.getPoint(p,a),o=Math.atan2(u.y-i.y,u.x-i.x),n=u.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-u.x,2)+Math.pow(i.y-u.y,2)),r=n-s,Math.abs(r)<.2)break;r<0?c===!1?d=p:l=p:c===!1?l=p:d=p,h++}return i.t=p,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;d<10;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=ho.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=0,d=this.options.selfReferenceSize,l=void 0,u=void 0,c=void 0,p=void 0,f=void 0,m=.5*(s+r);s<=r&&h<10&&(m=.5*(s+r),l=this._pointOnCircle(o,n,d,m),u=Math.atan2(t.y-l.y,t.x-l.x),c=t.distanceToBorder(e,u),p=Math.sqrt(Math.pow(l.x-t.x,2)+Math.pow(l.y-t.y,2)),f=c-p,!(Math.abs(f)<.05));)f>0?a>0?s=m:r=m:a>0?r=m:s=m,h++;return l.t=m,l}},{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,o){if(e.inheritsColor!==!1){if("both"===e.inheritsColor&&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,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,this.from.selected===!1&&this.to.selected===!1?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):this.from.selected===!0&&this.to.selected===!1?r=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,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle",value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,h){var d=0;if(this.from!=this.to)d=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2],m=c-n,v=p-r;d=Math.abs(Math.sqrt(m*m+v*v)-f)}return this.labelModule.size.leftn&&this.labelModule.size.topr?0:d}},{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:d<0&&(d=0);var l=t+d*r,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=r.width;if("from"===e?(d=this.from,l=this.to,u=.1,c=r.fromArrowScale,p=r.fromArrowType):"to"===e?(d=this.to,l=this.from,u=-.1,c=r.toArrowScale,p=r.toArrowType):(d=this.to,l=this.from,c=r.middleArrowScale,p=r.middleArrowType),d!=l)if("middle"!==e)if(this.options.smooth.enabled===!0){h=this.findBorderPosition(d,t,{via:i});var m=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);a=Math.atan2(h.y-m.y,h.x-m.x)}else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.5,i);else{var v=this._getCircleData(t),g=(0,s.default)(v,3),y=g[0],b=g[1],_=g[2];"from"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),a=h.t*-2*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),a=h.t*-2*Math.PI+1.5*Math.PI-1.1*Math.PI):(h=this._pointOnCircle(y,b,_,.175),a=3.9269908169872414)}var w=15*c+3*f;return{point:h,core:{x:h.x-.9*w*Math.cos(a),y:h.y-.9*w*Math.sin(a)},angle:a,length:w,type:p}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,n.type&&"circle"===n.type.toLowerCase()?t.circleEndpoint(n.point.x,n.point.y,n.angle,n.length):t.arrowEndpoint(n.point.x,n.point.y,n.angle,n.length),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow===!0&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(165),s=o(n),r=i(170),a=o(r),h=i(119),d=o(h),l=i(120),u=o(l),c=i(173),p=o(c),f=i(174),m=o(f),v=i(199),g=o(v),y=function(t){function e(t,i,o){(0,d.default)(this,e);var n=(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o));return n._boundFunction=function(){n.positionBezierNode()},n.body.emitter.on("_repositionBezierNodes",n._boundFunction),n}return(0,m.default)(e,t),(0,u.default)(e,[{key:"setOptions",value:function(t){var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),e===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||this.options.physics===!1?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var t="edgeId:"+this.id,e=this.body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this.body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2],u=2*Math.PI*(1-i);o=h+l*Math.sin(u),n=d+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(199),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e,i){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),void 0===i.x?t.lineTo(this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o)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*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=nMath.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=sMath.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.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(170),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(173),u=o(l),c=i(174),p=o(c),f=i(200),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),h=t.distanceToBorder(e,n),d=(a-h)/a,l={};return l.x=(1-d)*o.x+d*i.x,l.y=(1-d)*o.y+d*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(205),u=o(l),c=i(206),p=o(c),f=i(207),m=o(f),v=i(208),g=o(v),y=i(209),b=o(y),_=i(210),w=o(_),x=i(211),k=o(x),O=i(212),S=o(O),M=i(1),D=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},M.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,d.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),t.ready===!0&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){t.ready===!0&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(t===!1?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):(this.physicsEnabled=!0,M.selectiveNotDeepExtend(["stabilization"],this.options,t),M.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new k.default(this.body,this.physicsBody,t),this.edgesSolver=new g.default(this.body,this.physicsBody,t), -this.gravitySolver=new S.default(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new p.default(this.body,this.physicsBody,t),this.edgesSolver=new g.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new m.default(this.body,this.physicsBody,t),this.edgesSolver=new b.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new u.default(this.body,this.physicsBody,t),this.edgesSolver=new g.default(this.body,this.physicsBody,t),this.gravitySolver=new w.default(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,t===!0&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,t===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick(),(Date.now()-t<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsTick",value:function(){if(this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0),this.stabilized===!1){if(this.adaptiveTimestep===!0&&this.adaptiveTimestepEnabled===!0){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=1.2*this.timestep:this.timestep/1.2.3))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=0;ne?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;return Math.sqrt(Math.pow(s[t].x,2)+Math.pow(s[t].y,2))}},{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]?arguments[0]:this.options.stabilization.iterations;if("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)return 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,setTimeout(function(){return t._stabilizationBatch()},0)}},{key:"_stabilizationBatch",value:function(){this.startedStabilization===!1&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0);for(var t=0;this.stabilized===!1&&t0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s0&&(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&&o.shape.radius&&(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;h0&&(dr&&(r=d),la&&(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=Math.max(1e-5,Math.abs(r-n)),p=.5*c,f=.5*(n+r),m=.5*(s+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-p,maxX:f+p,minY:m-p,maxY:m+p},size:c,calcSize:1/c,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(v.root);for(var g=0;g0&&this._placeInTree(v.root,i);return v}},{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=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,h=this.body.nodes,d=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,p=0;p0){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}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(62),a=o(r),h=i(119),d=o(h),l=i(120),u=o(l),c=i(214),p=o(c),f=i(215),m=o(f),v=i(1),g=function(){function t(e){var i=this;(0,d.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},v.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===(void 0===t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o=t&&i.push(n.id)}for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{},e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===t.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");t=this._checkOptions(t);for(var i={},o={},n=0;n2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o=[],n={},r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=0;u0&&(0,s.default)(f).length>0&&v===!0&&o.push({nodes:c,edges:f})}}}for(var _=0;_1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,h=p.default.cloneOptions(o);n[a]=o;for(var d=0;d-1&&(r[g.id]=g)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=(0,s.default)(t),c=[],f=0;f0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){for(var n in t)if(t.hasOwnProperty(n)&&void 0!==this.clusteredNodes[n])return;var r=v.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var a=[];for(var h in t)if(t.hasOwnProperty(h)){var d=p.default.cloneOptions(t[h]);a.push(d)}var l=[];for(var u in e)if(e.hasOwnProperty(u)&&"clusterEdge:"!==u.substr(0,12)){var c=p.default.cloneOptions(e[u],"edge");l.push(c)}if(!(r=i.processProperties(r,a,l)))throw new Error("The processProperties function does not return properties!")}void 0===r.id&&(r.id="cluster:"+v.randomUUID());var f=r.id;void 0===r.label&&(r.label="cluster");var g=void 0;void 0===r.x&&(g=this._getClusterPosition(t),r.x=g.x),void 0===r.y&&(void 0===g&&(g=this._getClusterPosition(t)),r.y=g.y),r.id=f;var y=this.body.functions.createNode(r,m.default);y.isCluster=!0,y.containedNodes=t,y.containedEdges=e,y.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[r.id]=y,this._createClusterEdges(t,e,r,i.clusterEdgeProperties);for(var b in e)if(e.hasOwnProperty(b)&&void 0!==this.body.edges[b]){var _=this.body.edges[b];this._backupEdgeOptions(_),_.setOptions({physics:!1,hidden:!0})}for(var w in t)t.hasOwnProperty(w)&&(this.clusteredNodes[w]={clusterId:r.id,node:this.body.nodes[w]},this.body.nodes[w].setOptions({hidden:!0,physics:!1}));r.id=void 0,o===!0&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics,hidden:t.options.hidden})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics,hidden:e.hidden}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?this.body.nodes[t].isCluster===!0:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,h=1;ho?a.x:o,n=a.yr?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||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 h in n)if(n.hasOwnProperty(h)){var d=this.body.nodes[h];r[h]={x:d.x,y:d.y}}var l=e.releaseFunction(a,r);for(var u in n)if(n.hasOwnProperty(u)){var c=this.body.nodes[u];void 0!==l[u]&&(c.x=void 0===l[u].x?o.x:l[u].x,c.y=void 0===l[u].y?o.y:l[u].y)}}else for(var f in n)if(n.hasOwnProperty(f)){var m=this.body.nodes[f];m=n[f],m.options.fixed.x===!1&&(m.x=o.x),m.options.fixed.y===!1&&(m.y=o.y)}for(var g in n)if(n.hasOwnProperty(g)){var y=this.body.nodes[g];y.vx=o.vx,y.vy=o.vy,y.setOptions({hidden:!1,physics:!0}),delete this.clusteredNodes[g]}for(var b=[],_=0;_o&&(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=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(1),d=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,null,[{key:"getRange",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.shape.boundingBox.left&&(s=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;ae.x&&(s=e.x),re.y&&(o=e.y),n0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,t.requiresTimeout===!0?clearTimeout(t.renderTimer):cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];h.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]&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e=this.canvas.frame.canvas.getContext("2d");0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),t===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&this._drawEdges(e),(this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),t===!0&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){var t=this.canvas.frame.canvas.getContext("2d");void 0===this.pixelRatio&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0),t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=this.canvas.DOMtoCanvas({x:-20,y:-20}),a=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),h={top:r.y,left:r.x,bottom:a.y,right:a.x},d=0;d0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(t.indexOf("%")!==-1||t.indexOf("px")!==-1)return t;if(t.indexOf("%")===-1)return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new h(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:h.DIRECTION_ALL}),d.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new h(this.frame),d.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.frame.canvas.getContext("2d"),r=this.pixelRatio;return this.pixelRatio=(window.devicePixelRatio||1)/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e?(this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0):(this.frame.canvas.width==Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&this.frame.canvas.height==Math.round(this.frame.canvas.clientHeight*this.pixelRatio)||this._getCameraState(r),this.frame.canvas.width!=Math.round(this.frame.canvas.clientWidth*this.pixelRatio)&&(this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),i=!0),this.frame.canvas.height!=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)&&(this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),i=!0)),i===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(214),d=o(h),l=i(1),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){o.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),e===!0){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];r.predefinedPosition===!0&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=d.default.getRange(this.body.nodes,t.nodes);o=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;o*=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600)}else{this.body.emitter.emit("_resizeNodes"),i=d.default.getRange(this.body.nodes,t.nodes);var a=1.1*Math.abs(i.maxX-i.minX),h=1.1*Math.abs(i.maxY-i.minY),l=this.canvas.frame.canvas.clientWidth/a,u=this.canvas.frame.canvas.clientHeight/h;o=l<=u?l:u}o>1?o=1:0===o&&(o=1);var c=d.default.findCenter(i),p={position:c,scale:o,animation:t.animation};this.moveTo(p)}},{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){if(void 0===t)return 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"),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]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=t===!0?1:this.easingTime;var e=l.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=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(220),d=o(h),l=i(132),u=o(l),c=i(1),p=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new d.default(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},c.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];c.selectiveNotDeepExtend(e,this.options,t),c.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(c.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=c.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-c.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-c.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(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]&&arguments[2],o=this.selectionHandler._getSelectedEdgeCount(),n=this.selectionHandler._getSelectedNodeCount(),s=this.selectionHandler.getSelection(),r=void 0;r=i===!0?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var a=this.selectionHandler._getSelectedEdgeCount(),h=this.selectionHandler._getSelectedNodeCount(),d=this.selectionHandler.getSelection(),l=this._determineIfDifferent(s,d),u=l.nodesChanged,c=l.edgesChanged,p=!1;h-n>0?(this.selectionHandler._generateClickEvent("selectNode",e,t),r=!0,p=!0):u===!0&&h>0?(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),this.selectionHandler._generateClickEvent("selectNode",e,t),p=!0,r=!0):h-n<0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,s),r=!0),a-o>0&&p===!1?(this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a>0&&c===!0?(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),this.selectionHandler._generateClickEvent("selectEdge",e,t),r=!0):a-o<0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,s),r=!0),r===!0&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineIfDifferent",value:function(t,e){for(var i=!1,o=!1,n=0;n10&&(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"),i0&&(this.popupObj=h[l[l.length-1]],s=!0)}if(void 0===this.popupObj&&s===!1){for(var p=this.body.edgeIndices,f=this.body.edges,m=void 0,v=[],g=0;g0&&(this.popupObj=f[v[v.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new u.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))===!0){var o=this.selectionHandler.getNodeAt(t);i=void 0!==o&&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=p},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=(i(1),i(112)),d=i(125),l=i(115),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){this.options.navigationButtons===!0?this.iconsCreated===!1&&this.loadNavigationElements():this.iconsCreated===!0&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t700&&(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(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{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=l({container:window,preventDefault:!0}):this.keycharm=l({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=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(119),s=o(n),r=i(120),a=o(r),h=i(163),d=o(h),l=i(196),u=o(l),c=i(1),p=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionObj={nodes:[],edges:[]},this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_dataChanged",function(){o.updateSelection()})}return(0,a.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){var e=["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"];c.selectiveDeepExtend(e,this.options,t)}}},{key:"selectOnPoint",value:function(t){var e=!1;if(this.options.selectable===!0){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return e}},{key:"selectAdditionalOnPoint",value:function(t){var e=!1;if(this.options.selectable===!0){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,i.isSelected()===!0?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return e}},{key:"_generateClickEvent",value:function(t,e,i,o){var n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=void 0;s=n===!0?{nodes:[],edges:[]}:this.getSelection(),s.pointer={DOM:{x:i.x,y:i.y},canvas:this.canvas.DOMtoCanvas(i)},s.event=e,void 0!==o&&(s.previousSelection=o),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof d.default&&e===!0&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){t.isSelected()===!0&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?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;o1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties";if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}}]),t}();e.default=p},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(165),a=o(r),h=i(62),d=o(h),l=i(119),u=o(l),c=i(120),p=o(c),f=i(214),m=o(f),v=i(1),g=function(){function t(e){(0,u.default)(this,t),this.body=e,this.initialRandomSeed=Math.round(1e6*Math.random()),this.randomSeed=this.initialRandomSeed,this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:"UD",sortMethod:"hubsize"}},v.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,p.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",function(){t.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",function(){t.setupHierarchicalLayout()})}},{key:"setOptions",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical.enabled;if(v.selectiveDeepExtend(["randomSeed","improvedLayout"],this.options,t),v.mergeOptions(this.options,t,"hierarchical"),void 0!==t.randomSeed&&(this.initialRandomSeed=t.randomSeed),this.options.hierarchical.enabled===!0)return i===!0&&this.body.emitter.emit("refresh",!0),"RL"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?this.options.hierarchical.levelSeparation>0&&(this.options.hierarchical.levelSeparation*=-1):this.options.hierarchical.levelSeparation<0&&(this.options.hierarchical.levelSeparation*=-1),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(i===!0)return this.body.emitter.emit("refresh"),v.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(this.options.hierarchical.enabled===!0){void 0===t.physics||t.physics===!0?(t.physics={enabled:void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,solver:"hierarchicalRepulsion"},this.optionsBackup.physics.enabled=void 0===this.optionsBackup.physics.enabled||this.optionsBackup.physics.enabled,this.optionsBackup.physics.solver=this.optionsBackup.physics.solver||"barnesHut"):"object"===(0,d.default)(t.physics)?(this.optionsBackup.physics.enabled=void 0===t.physics.enabled||t.physics.enabled,this.optionsBackup.physics.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):t.physics!==!1&&(this.optionsBackup.physics.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var e="horizontal";"RL"!==this.options.hierarchical.direction&&"LR"!==this.options.hierarchical.direction||(e="vertical"),void 0===t.edges?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1}):void 0===t.edges.smooth?(this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1):"boolean"==typeof t.edges.smooth?(this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:e}):(void 0!==t.edges.smooth.type&&"dynamic"!==t.edges.smooth.type&&(e=t.edges.smooth.type),this.optionsBackup.edges={smooth:void 0===t.edges.smooth.enabled||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&&t.edges.smooth.forceDirection},t.edges.smooth={enabled:void 0===t.edges.smooth.enabled||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&&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;e100){for(var o=this.body.nodeIndices.length;this.body.nodeIndices.length>100;){i+=1;var n=this.body.nodeIndices.length;i%3==0?this.body.modules.clustering.clusterBridges():this.body.modules.clustering.clusterOutliers();if(n==this.body.nodeIndices.length&&i%3!=0||i>10)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*o)})}this.body.modules.kamadaKawai.solve(this.body.nodeIndices,this.body.edgeIndices,!0),this._shiftToCenter();for(var s=0;s0){var t=void 0,e=void 0,i=!1,o=!1;this.hierarchicalLevels={},this.lastNodeOnLevel={},this.hierarchicalChildrenReference={},this.hierarchicalParentReference={},this.hierarchicalTrees={},this.treeIndex=-1,this.distributionOrdering={},this.distributionIndex={},this.distributionOrderingPresence={};for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0===t.options.x&&void 0===t.options.y&&!1,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():"custom"===this.options.hierarchical.sortMethod&&this._determineLevelsCustomCallback());for(var n in this.body.nodes)this.body.nodes.hasOwnProperty(n)&&void 0===this.hierarchicalLevels[n]&&(this.hierarchicalLevels[n]=0);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(e,i){for(var o in t.hierarchicalTrees)if(t.hierarchicalTrees.hasOwnProperty(o)&&t.hierarchicalTrees[o]===e){var n=t.body.nodes[o],s=t._getPositionForHierarchy(n);t._setPositionForHierarchy(n,s+i,void 0,!0)}},n=function(e){var i=1e9,o=-1e9;for(var n in t.hierarchicalTrees)if(t.hierarchicalTrees.hasOwnProperty(n)&&t.hierarchicalTrees[n]===e){var s=t._getPositionForHierarchy(t.body.nodes[n]);i=Math.min(s,i),o=Math.max(s,o)}return{min:i,max:o}},r=function(){for(var e=[],i=0;i<=t.treeIndex;i++)e.push(n(i));return e},h=function e(i,o){if(!o[i.id]&&(o[i.id]=!0,t.hierarchicalChildrenReference[i.id])){var n=t.hierarchicalChildrenReference[i.id];if(n.length>0)for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,s=1e9,r=-1e9;for(var h in e)if(e.hasOwnProperty(h)){var d=t.body.nodes[h],l=t.hierarchicalLevels[d.id],u=t._getPositionForHierarchy(d),c=t._getSpaceAroundNode(d,e),p=(0,a.default)(c,2),f=p[0],m=p[1];o=Math.min(f,o),n=Math.min(m,n),l<=i&&(s=Math.min(u,s),r=Math.max(u,r))}return[s,r,o,n]},l=function(e){var i={};return function e(o){if(void 0!==i[o])return i[o];var n=t.hierarchicalLevels[o];if(t.hierarchicalChildrenReference[o]){var s=t.hierarchicalChildrenReference[o];if(s.length>0)for(var r=0;r1)for(var a=0;a2&&void 0!==arguments[2]&&arguments[2],s=t._getPositionForHierarchy(i),r=t._getPositionForHierarchy(o);if(Math.abs(r-s)>t.options.hierarchical.nodeSpacing){var l={},c={};h(i,l),h(o,c);var p=u(i,o),f=d(l,p),m=(0,a.default)(f,4),v=(m[0],m[1]),g=(m[2],m[3],d(c,p)),y=(0,a.default)(g,4),b=y[0],_=(y[1],y[2]);if(y[3],Math.abs(v-b)>t.options.hierarchical.nodeSpacing){var w=v-b+t.options.hierarchical.nodeSpacing;w<-_+t.options.hierarchical.nodeSpacing&&(w=-_+t.options.hierarchical.nodeSpacing),w<0&&(t._shiftBlock(o.id,w),e=!0,n===!0&&t._centerParent(o))}}},m=function(o,n){for(var s=n.id,r=n.edges,l=t.hierarchicalLevels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},p=[],f=0;f0?m=Math.min(f,p-t.options.hierarchical.nodeSpacing):f<0&&(m=-Math.min(-f,c-t.options.hierarchical.nodeSpacing)),0!=m&&(t._shiftBlock(n.id,m),e=!0)}(_),_=b(o,r),function(i){var o=t._getPositionForHierarchy(n),s=t._getSpaceAroundNode(n),r=(0,a.default)(s,2),h=r[0],d=r[1],l=i-o,u=o;l>0?u=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t._setPositionForHierarchy(n,u,void 0,!0),e=!0)}(_)};this.options.hierarchical.blockShifting===!0&&(function(i){var o=(0,s.default)(t.distributionOrdering);o=o.reverse();for(var n=0;n0)for(var d=0;d0&&Math.abs(g)0&&(a=this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing),this._setPositionForHierarchy(r,a,e),this._validataPositionAndContinue(r,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){if(void 0!==this.hierarchicalChildrenReference[t]){for(var i=[],o=0;oe&&void 0===this.positionedNodes[s.id]))return;var a=void 0;a=0===n?this._getPositionForHierarchy(this.body.nodes[t]):this._getPositionForHierarchy(i[n-1])+this.options.hierarchical.nodeSpacing,this._setPositionForHierarchy(s,a,r),this._validataPositionAndContinue(s,r,a)}for(var h=1e9,d=-1e9,l=0;l0&&0!==(e=this._getHubSize());)for(var o in this.body.nodes)if(this.body.nodes.hasOwnProperty(o)){var n=this.body.nodes[o];n.edges.length===e&&this._crawlNetwork(i,o)}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=function(e,i,o){void 0===t.hierarchicalLevels[e.id]&&(t.hierarchicalLevels[e.id]=1e5);var n=(m.default.cloneOptions(e,"node"),m.default.cloneOptions(i,"node"),void m.default.cloneOptions(o,"edge"));t.hierarchicalLevels[i.id]=t.hierarchicalLevels[e.id]+n};this._crawlNetwork(e),this._setMinLevelToZero()}},{key:"_determineLevelsDirected",value:function(){var t=this,e=function(e,i,o){void 0===t.hierarchicalLevels[e.id]&&(t.hierarchicalLevels[e.id]=1e4),o.toId==i.id?t.hierarchicalLevels[i.id]=t.hierarchicalLevels[e.id]+1:t.hierarchicalLevels[i.id]=t.hierarchicalLevels[e.id]-1};this._crawlNetwork(e),this._setMinLevelToZero()}},{key:"_setMinLevelToZero",value:function(){var t=1e9;for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&void 0!==this.hierarchicalLevels[e]&&(t=Math.min(this.hierarchicalLevels[e],t));for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&void 0!==this.hierarchicalLevels[i]&&(this.hierarchicalLevels[i]-=t)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){if(t.hierarchicalLevels[i.id]>t.hierarchicalLevels[e.id]){var o=e.id,n=i.id;void 0===t.hierarchicalChildrenReference[o]&&(t.hierarchicalChildrenReference[o]=[]),t.hierarchicalChildrenReference[o].push(n),void 0===t.hierarchicalParentReference[n]&&(t.hierarchicalParentReference[n]=[]),t.hierarchicalParentReference[n].push(o)}};this._crawlNetwork(e)}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=0,s=function i(n,s){if(void 0===o[n.id]){void 0===t.hierarchicalTrees[n.id]&&(t.hierarchicalTrees[n.id]=s,t.treeIndex=Math.max(s,t.treeIndex)),o[n.id]=!0;for(var r=void 0,a=0;a3&&void 0!==arguments[3]&&arguments[3])!==!0&&(void 0===this.distributionOrdering[i]&&(this.distributionOrdering[i]=[],this.distributionOrderingPresence[i]={}),void 0===this.distributionOrderingPresence[i][t.id]&&(this.distributionOrdering[i].push(t),this.distributionIndex[t.id]=this.distributionOrdering[i].length-1),this.distributionOrderingPresence[i][t.id]=!0),"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x=e:t.y=e}},{key:"_getPositionForHierarchy",value:function(t){return"UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.x:t.y}},{key:"_sortNodeArray",value:function(t){t.length>1&&("UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction?t.sort(function(t,e){return t.x-e.x}):t.sort(function(t,e){return t.y-e.y}))}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(58),s=o(n),r=i(90),a=o(r),h=i(62),d=o(h),l=i(119),u=o(l),c=i(120),p=o(c),f=i(1),m=i(112),v=i(125),g=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},f.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,p.default)(t,[{key:"_restore",value:function(){this.inMode!==!1&&(this.options.initiallyActive===!0?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,f.deepExtend(this.options,t)),this.options.initiallyActive===!0&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){this.editMode===!0?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},this.guiEnabled===!0){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;this.options.addNode!==!1&&(this._createAddNodeButton(o),n=!0),this.options.addEdge!==!1&&(n===!0?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(n===!0?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&this.options.editEdge!==!1&&(n===!0?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&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=f.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",function(){}),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,d.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(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))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);o.selected===!1&&(o.x=e.from.x,o.y=e.from.y),n.selected===!1&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else 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=f.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+f.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},f.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&&(f.recursiveDOMDelete(this.editModeDiv),f.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;t0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){if(this.options.rtl)var e="vis-button vis-delete-rtl";else var e="vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){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=f.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"+f.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(this.temporaryIds.nodes.indexOf(n[r])===-1){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:f.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,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===(void 0===n?"undefined":(0,d.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(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=g},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var i="string",o="boolean",n="number",s="object",r={configure:{enabled:{boolean:o},filter:{boolean:o,string:i,array:"array",function:"function"},container:{dom:"dom"},showButton:{boolean:o},__type__:{object:s,boolean:o,string:i,array:"array",function:"function"}},edges:{arrows:{to:{enabled:{boolean:o},scaleFactor:{number:n},type:{string:["arrow","circle"]},__type__:{object:s,boolean:o}},middle:{enabled:{boolean:o},scaleFactor:{number:n},type:{string:["arrow","circle"]},__type__:{object:s,boolean:o}},from:{enabled:{boolean:o},scaleFactor:{number:n},type:{string:["arrow","circle"]},__type__:{object:s,boolean:o}},__type__:{string:["from","to","middle"],object:s}},arrowStrikethrough:{boolean:o},chosen:{label:{boolean:o,function:"function"},edge:{boolean:o,function:"function"},__type__:{object:s,boolean:o}},color:{color:{string:i},highlight:{string:i},hover:{string:i},inherit:{string:["from","to","both"],boolean:o},opacity:{number:n},__type__:{object:s,string:i}},dashes:{boolean:o,array:"array"},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"]},vadjust:{number:n},multi:{boolean:o,string:i},bold:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},boldital:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},ital:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},mono:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},__type__:{object:s,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:s,boolean:o}},customScalingFunction:{function:"function"},__type__:{object:s}},selectionWidth:{function:"function",number:n},selfReferenceSize:{number:n},shadow:{enabled:{boolean:o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:s,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:s,boolean:o}},title:{string:i,undefined:"undefined"},width:{number:n},widthConstraint:{maximum:{number:n},__type__:{object:s,boolean:o,number:n}},value:{number:n,undefined:"undefined"},__type__:{object:s}},groups:{useDefaultGroups:{boolean:o},__any__:"get from nodes, will be overwritten below",__type__:{object:s}},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:s}},bindToWindow:{boolean:o},__type__:{object:s,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:s}},layout:{randomSeed:{undefined:"undefined",number:n},improvedLayout:{boolean:o},hierarchical:{enabled:{boolean:o},levelSeparation:{number:n},nodeSpacing:{number:n},treeSpacing:{number:n},blockShifting:{boolean:o},edgeMinimization:{boolean:o},parentCentralization:{boolean:o},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:s,boolean:o}},__type__:{object:s}},manipulation:{enabled:{boolean:o},initiallyActive:{boolean:o},addNode:{boolean:o,function:"function"},addEdge:{boolean:o,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:s,boolean:o,function:"function"}},deleteNode:{boolean:o,function:"function"},deleteEdge:{boolean:o,function:"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:s,boolean:o}},nodes:{borderWidth:{number:n},borderWidthSelected:{number:n,undefined:"undefined"},brokenImage:{string:i,undefined:"undefined"},chosen:{label:{boolean:o,function:"function"},node:{boolean:o,function:"function"},__type__:{object:s,boolean:o}},color:{border:{string:i},background:{string:i},highlight:{border:{string:i},background:{string:i},__type__:{object:s,string:i}},hover:{border:{string:i},background:{string:i},__type__:{object:s,string:i}},__type__:{object:s,string:i}},fixed:{x:{boolean:o},y:{boolean:o},__type__:{object:s,boolean:o}},font:{align:{string:i},color:{string:i},size:{number:n},face:{string:i},background:{string:i},strokeWidth:{number:n},strokeColor:{string:i},vadjust:{number:n},multi:{boolean:o,string:i},bold:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},boldital:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},ital:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},mono:{color:{string:i},size:{number:n},face:{string:i},mod:{string:i},vadjust:{number:n},__type__:{object:s,string:i}},__type__:{object:s,string:i}},group:{string:i,number:n,undefined:"undefined"},heightConstraint:{minimum:{number:n},valign:{string:i},__type__:{object:s,boolean:o,number:n}},hidden:{boolean:o},icon:{face:{string:i},code:{string:i},size:{number:n},color:{string:i},__type__:{object:s}},id:{string:i,number:n},image:{selected:{string:i,undefined:"undefined"},unselected:{string:i,undefined:"undefined"},__type__:{object:s,string:i}},label:{string:i,undefined:"undefined"},labelHighlightBold:{boolean:o},level:{number:n,undefined:"undefined"},margin:{top:{number:n},right:{number:n},bottom:{number:n},left:{number:n},__type__:{object:s,number:n}},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:s,boolean:o}},customScalingFunction:{function:"function"}, -__type__:{object:s}},shadow:{enabled:{boolean:o},color:{string:i},size:{number:n},x:{number:n},y:{number:n},__type__:{object:s,boolean:o}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon"]},shapeProperties:{borderDashes:{boolean:o,array:"array"},borderRadius:{number:n},interpolation:{boolean:o},useImageSize:{boolean:o},useBorderWithImage:{boolean:o},__type__:{object:s}},size:{number:n},title:{string:i,undefined:"undefined"},value:{number:n,undefined:"undefined"},widthConstraint:{minimum:{number:n},maximum:{number:n},__type__:{object:s,boolean:o,number:n}},x:{number:n},y:{number:n},__type__:{object:s}},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:s}},forceAtlas2Based:{gravitationalConstant:{number:n},centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},damping:{number:n},avoidOverlap:{number:n},__type__:{object:s}},repulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:s}},hierarchicalRepulsion:{centralGravity:{number:n},springLength:{number:n},springConstant:{number:n},nodeDistance:{number:n},damping:{number:n},__type__:{object:s}},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:s,boolean:o}},timestep:{number:n},adaptiveTimestep:{boolean:o},__type__:{object:s,boolean:o}},autoResize:{boolean:o},clickToUse:{boolean:o},locale:{string:i},locales:{__any__:{any:"any"},__type__:{object:s}},height:{string:i},width:{string:i},__type__:{object:s}};r.groups.__any__=r.nodes,r.manipulation.controlNodeStyle=r.nodes;var a={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]}};e.allOptions=r,e.configureOptions=a},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(165),s=o(n),r=i(119),a=o(r),h=i(120),d=o(h),l=i(226),u=o(l),c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=e,this.springLength=i,this.springConstant=o,this.distanceSolver=new u.default}return(0,d.default)(t,[{key:"setOptions",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:"solve",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o);for(var n=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),a=1e9,h=0,d=0,l=0,u=0,c=0;a>.01&&n1&&c<5;){c+=1,this._moveNode(h,d,l);var m=this._getEnergy(h),v=(0,s.default)(m,3);u=v[0],d=v[1],l=v[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;h=.1;)p=n[l++%s],p>d&&(p=d),c=Math.sqrt(p*p/(1+h*h)),c=r<0?-c:c,t+=c,e+=h*c,u===!0?this.lineTo(t,e):this.moveTo(t,e),d-=p,u=!u})},function(t,e,i){function o(t){return R=t,f()}function n(){z=0,A=R.charAt(0)}function s(){z++,A=R.charAt(z)}function r(){return R.charAt(z+1)}function a(t){return B.test(t)}function h(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function d(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 l(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;i=0;i--){var a=s[i];a.nodes||(a.nodes=[]),a.nodes.indexOf(n)===-1&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function u(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function c(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(F=I.NULL,L="";" "===A||"\t"===A||"\n"===A||"\r"===A;)s();do{var t=!1;if("#"===A){for(var e=z-1;" "===R.charAt(e)||"\t"===R.charAt(e);)e--;if("\n"===R.charAt(e)||""===R.charAt(e)){for(;""!=A&&"\n"!=A;)s();t=!0}}if("/"===A&&"/"===r()){for(;""!=A&&"\n"!=A;)s();t=!0}if("/"===A&&"*"===r()){for(;""!=A;){if("*"===A&&"/"===r()){s(),s();break}s()}t=!0}for(;" "===A||"\t"===A||"\n"===A||"\r"===A;)s()}while(t);if(""===A)return void(F=I.DELIMITER);var i=A+r();if(N[i])return F=I.DELIMITER,L=i,s(),void s();if(N[A])return F=I.DELIMITER,L=A,void s();if(a(A)||"-"===A){for(L+=A,s();a(A);)L+=A,s();return"false"===L?L=!1:"true"===L?L=!0:isNaN(Number(L))||(L=Number(L)),void(F=I.IDENTIFIER)}if('"'===A){for(s();""!=A&&('"'!=A||'"'===A&&'"'===r());)L+=A,'"'===A&&s(),s();if('"'!=A)throw x('End of string " expected');return s(),void(F=I.IDENTIFIER)}for(F=I.UNKNOWN;""!=A;)L+=A,s();throw new SyntaxError('Syntax error in part "'+k(L,30)+'"')}function f(){var t={};if(n(),p(),"strict"===L&&(t.strict=!0,p()),"graph"!==L&&"digraph"!==L||(t.type=L,p()),F===I.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)v(t),";"===L&&p()}function v(t){var e=g(t);if(e)return void _(t,e);if(!y(t)){if(F!=I.IDENTIFIER)throw x("Identifier expected");var i=L;if(p(),"="===L){if(p(),F!=I.IDENTIFIER)throw x("Identifier expected");t[i]=L,p()}else b(t,i)}}function g(t){var e=null;if("subgraph"===L&&(e={},e.type="subgraph",p(),F===I.IDENTIFIER&&(e.id=L,p())),"{"===L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function y(t){return"node"===L?(p(),t.node=w(),"node"):"edge"===L?(p(),t.edge=w(),"edge"):"graph"===L?(p(),t.graph=w(),"graph"):null}function b(t,e){var i={id:e},o=w();o&&(i.attr=o),l(t,i),_(t,e)}function _(t,e){for(;"->"===L||"--"===L;){var i,o=L;p();var n=g(t);if(n)i=n;else{if(F!=I.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,l(t,{id:i}),p()}u(t,c(t,e,i,o,w())),e=i}}function w(){for(var t=null;"["===L;){for(p(),t={};""!==L&&"]"!=L;){if(F!=I.IDENTIFIER)throw x("Attribute name expected");var e=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),F!=I.IDENTIFIER)throw x("Attribute value expected");d(t,e,L),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+k(L,30)+'" (char '+z+")")}function k(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function O(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 S(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r":!0,"--":!0},R="",z=0,A="",L="",F=I.NULL,B=/[a-zA-Z_0-9.:#]/;e.parseDOT=o,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;a2&&void 0!==arguments[2]&&arguments[2];for(var n in t)void 0!==i[n]&&("object"!==(0,u.default)(i[n])?void 0!==i[n]&&null!==i[n]||void 0===t[n]||!0!==o?t[n]=i[n]:delete t[n]:"object"===(0,u.default)(t[n])&&e.fillIfDefined(t[n],i[n],o))},e.protoExtend=function(t,e){for(var i=1;i3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s=2;s3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var s in o)if(o.hasOwnProperty(s)&&-1==t.indexOf(s))if(o[s]&&o[s].constructor===Object)void 0===i[s]&&(i[s]={}),i[s].constructor===Object?e.deepExtend(i[s],o[s]):null===o[s]&&void 0!==i[s]&&!0===n?delete i[s]:i[s]=o[s];else if(Array.isArray(o[s])){i[s]=[];for(var r=0;r=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(!0===e.isString(t)){if(!0===e.isValidRGB(t)){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(!0===e.isValidHex(t)){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;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var m={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(0,d.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=m.split(t.style.cssText),n=m.split(i),s=e.extend(o,n);t.style.cssText=m.join(s)},e.removeCssText=function(t,e){var i=m.split(t.style.cssText),o=m.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=m.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){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if("object"==(void 0===i?"undefined":(0,u.default)(i))){for(var o=(0,a.default)(i),n=0;n0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=(arguments.length>3&&void 0!==arguments[3]&&arguments[3],arguments.length>4&&void 0!==arguments[4]?arguments[4]:{});if(null===e[i])t[i]=(0,a.default)(o[i]);else if(void 0!==e[i])if("boolean"==typeof e[i])t[i].enabled=e[i];else{void 0===e[i].enabled&&(t[i].enabled=!0);for(var n in e[i])e[i].hasOwnProperty(n)&&(t[i][n]=e[i][n])}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){for(var s,r,a,h,d=0,l=0,u=t.length-1,n=void 0!=n?n:function(t,e){return t==e?0:t0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-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 t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?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 t<.5?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 t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,r=void 0;try{for(var a,h=(0,s.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports={}},function(t,e,i){var o=i(10),n=i(12);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(11);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,i){var o=i(14),n=i(15),s=i(30),r=i(20),a=i(31),h=i(8),d=i(32),l=i(46),u=i(48),c=i(47)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",M="values"==v,S=!1,D=t.prototype,O=D[c]||D["@@iterator"]||v&&D[v],C=O||x(v),T=v?M?x("entries"):C:void 0,E="Array"==e?D.entries||O:O;if(E&&(w=u(E.call(new t)))!==Object.prototype&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),M&&O&&"values"!==O.name&&(S=!0,C=function(){return O.call(this)}),o&&!y||!p&&!S&&D[c]||r(D,c,C),h[e]=C,h[k]=f,v)if(b={values:M?C:x("values"),keys:g?C:x("keys"),entries:T},y)for(_ in b)_ in D||s(D,_,b[_]);else n(n.P+n.F*(p||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,i){var o=i(16),n=i(17),s=i(18),r=i(20),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e){var i=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=i)},function(t,e,i){var o=i(19);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(21),n=i(29);t.exports=i(25)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(22),n=i(24),s=i(28),r=Object.defineProperty;e.f=i(25)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var o=i(23);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){t.exports=!i(25)&&!i(26)(function(){return 7!=Object.defineProperty(i(27)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){t.exports=!i(26)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var o=i(23),n=i(16).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){var o=i(23);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){t.exports=i(20)},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){var o=i(33),n=i(29),s=i(46),r={};i(20)(r,i(47)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(22),n=i(34),s=i(44),r=i(41)("IE_PROTO"),a=function(){},h=function(){var t,e=i(27)("iframe"),o=s.length;for(e.style.display="none",i(45).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("