/* @license dhtmlxGantt v.8.0.6 Standard This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects. To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com (c) XB Software */ !function(t, e) { "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define("dhtmlxgantt", [], e) : "object" == typeof exports ? exports.dhtmlxgantt = e() : t.dhtmlxgantt = e() }(window, function() { return function(t) { var e = {}; function n(i) { if (e[i]) return e[i].exports; var r = e[i] = { i: i, l: !1, exports: {} }; return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports } return n.m = t, n.c = e, n.d = function(t, e, i) { n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: i }) } , n.r = function(t) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 }) } , n.t = function(t, e) { if (1 & e && (t = n(t)), 8 & e) return t; if (4 & e && "object" == typeof t && t && t.__esModule) return t; var i = Object.create(null); if (n.r(i), Object.defineProperty(i, "default", { enumerable: !0, value: t }), 2 & e && "string" != typeof t) for (var r in t) n.d(i, r, function(e) { return t[e] } .bind(null, r)); return i } , n.n = function(t) { var e = t && t.__esModule ? function() { return t.default } : function() { return t } ; return n.d(e, "a", e), e } , n.o = function(t, e) { return Object.prototype.hasOwnProperty.call(t, e) } , n.p = "/codebase/", n(n.s = 299) }([function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r, a = n(2), o = {}.constructor.toString(); t.exports = { copy: function t(e) { var n, r; if (e && "object" == i(e)) switch (!0) { case a.isDate(e): r = new Date(e); break; case a.isArray(e): for (r = new Array(e.length), n = 0; n < e.length; n++) r[n] = t(e[n]); break; default: for (n in r = function(t) { return t.constructor.toString() !== o }(e) ? Object.create(e) : {}, e) Object.prototype.hasOwnProperty.apply(e, [n]) && (r[n] = t(e[n])) } return r || e }, defined: function(t) { return void 0 !== t }, mixin: function(t, e, n) { for (var i in e) (void 0 === t[i] || n) && (t[i] = e[i]); return t }, uid: function() { return r || (r = (new Date).valueOf()), ++r }, bind: function(t, e) { return t.bind ? t.bind(e) : function() { return t.apply(e, arguments) } }, event: function(t, e, n, i) { t.addEventListener ? t.addEventListener(e, n, void 0 !== i && i) : t.attachEvent && t.attachEvent("on" + e, n) }, eventRemove: function(t, e, n, i) { t.removeEventListener ? t.removeEventListener(e, n, void 0 !== i && i) : t.detachEvent && t.detachEvent("on" + e, n) } } } , function(t, e) { function n(t) { var e = 0 , n = 0 , i = 0 , r = 0; if (t.getBoundingClientRect) { var a = t.getBoundingClientRect() , o = document.body , s = document.documentElement || document.body.parentNode || document.body , l = window.pageYOffset || s.scrollTop || o.scrollTop , c = window.pageXOffset || s.scrollLeft || o.scrollLeft , u = s.clientTop || o.clientTop || 0 , d = s.clientLeft || o.clientLeft || 0; e = a.top + l - u, n = a.left + c - d, i = document.body.offsetWidth - a.right, r = document.body.offsetHeight - a.bottom } else { for (; t; ) e += parseInt(t.offsetTop, 10), n += parseInt(t.offsetLeft, 10), t = t.offsetParent; i = document.body.offsetWidth - t.offsetWidth - n, r = document.body.offsetHeight - t.offsetHeight - e } return { y: Math.round(e), x: Math.round(n), width: t.offsetWidth, height: t.offsetHeight, right: Math.round(i), bottom: Math.round(r) } } function i(t) { var e = !1 , n = !1; if (window.getComputedStyle) { var i = window.getComputedStyle(t, null); e = i.display, n = i.visibility } else t.currentStyle && (e = t.currentStyle.display, n = t.currentStyle.visibility); return "none" != e && "hidden" != n } function r(t) { return !isNaN(t.getAttribute("tabindex")) && 1 * t.getAttribute("tabindex") >= 0 } function a(t) { return !{ a: !0, area: !0 }[t.nodeName.loLowerCase()] || !!t.getAttribute("href") } function o(t) { return !{ input: !0, select: !0, textarea: !0, button: !0, object: !0 }[t.nodeName.toLowerCase()] || !t.hasAttribute("disabled") } function s(t) { if (!t) return ""; var e = t.className || ""; return e.baseVal && (e = e.baseVal), e.indexOf || (e = ""), u(e) } var l; function c(t) { var e; return t.tagName ? e = t : (e = (t = t || window.event).target || t.srcElement).shadowRoot && t.composedPath && (e = t.composedPath()[0]), e } function u(t) { return (String.prototype.trim || function() { return this.replace(/^\s+|\s+$/g, "") } ).apply(t) } function d() { return document.head.createShadowRoot || document.head.attachShadow } function h(t) { if (!t) return document.body; if (!d()) return document.body; for (; t.parentNode && (t = t.parentNode); ) if (t instanceof ShadowRoot) return t.host; return document.body } t.exports = { getNodePosition: n, getFocusableNodes: function(t) { for (var e = t.querySelectorAll(["a[href]", "area[href]", "input", "select", "textarea", "button", "iframe", "object", "embed", "[tabindex]", "[contenteditable]"].join(", ")), n = Array.prototype.slice.call(e, 0), s = 0; s < n.length; s++) n[s].$position = s; for (n.sort(function(t, e) { return 0 === t.tabIndex && 0 !== e.tabIndex ? 1 : 0 !== t.tabIndex && 0 === e.tabIndex ? -1 : t.tabIndex === e.tabIndex ? t.$position - e.$position : t.tabIndex < e.tabIndex ? -1 : 1 }), s = 0; s < n.length; s++) { var l = n[s]; (r(l) || o(l) || a(l)) && i(l) || (n.splice(s, 1), s--) } return n }, getScrollSize: function() { var t = document.createElement("div"); t.style.cssText = "visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;", document.body.appendChild(t); var e = t.offsetWidth - t.clientWidth; return document.body.removeChild(t), e }, getClassName: s, addClassName: function(t, e) { e && -1 === t.className.indexOf(e) && (t.className += " " + e) }, removeClassName: function(t, e) { e = e.split(" "); for (var n = 0; n < e.length; n++) { var i = new RegExp("\\s?\\b" + e[n] + "\\b(?![-_.])",""); t.className = t.className.replace(i, "") } }, insertNode: function(t, e) { l || (l = document.createElement("div")), l.innerHTML = e; var n = l.firstChild; return t.appendChild(n), n }, removeNode: function(t) { t && t.parentNode && t.parentNode.removeChild(t) }, getChildNodes: function(t, e) { for (var n = t.childNodes, i = n.length, r = [], a = 0; a < i; a++) { var o = n[a]; o.className && -1 !== o.className.indexOf(e) && r.push(o) } return r }, toNode: function(t) { return "string" == typeof t ? document.getElementById(t) || document.querySelector(t) || document.body : t || document.body }, locateClassName: function(t, e, n) { var i = c(t) , r = ""; for (void 0 === n && (n = !0); i; ) { if (r = s(i)) { var a = r.indexOf(e); if (a >= 0) { if (!n) return i; var o = 0 === a || !u(r.charAt(a - 1)) , l = a + e.length >= r.length || !u(r.charAt(a + e.length)); if (o && l) return i } } i = i.parentNode } return null }, locateAttribute: function(t, e) { if (e) { for (var n = c(t); n; ) { if (n.getAttribute && n.getAttribute(e)) return n; n = n.parentNode } return null } }, getTargetNode: c, getRelativeEventPosition: function(t, e) { var i = document.documentElement , r = n(e); return { x: t.clientX + i.scrollLeft - i.clientLeft - r.x + e.scrollLeft, y: t.clientY + i.scrollTop - i.clientTop - r.y + e.scrollTop } }, isChildOf: function(t, e) { if (!t || !e) return !1; for (; t && t != e; ) t = t.parentNode; return t === e }, hasClass: function(t, e) { return "classList"in t ? t.classList.contains(e) : new RegExp("\\b" + e + "\\b").test(t.className) }, closest: function(t, e) { if (t.closest) return t.closest(e); if (t.matches || t.msMatchesSelector || t.webkitMatchesSelector) { var n = t; if (!document.documentElement.contains(n)) return null; do { if ((n.matches || n.msMatchesSelector || n.webkitMatchesSelector).call(n, e)) return n; n = n.parentElement || n.parentNode } while (null !== n && 1 === n.nodeType); return null } return console.error("Your browser is not supported"), null }, getRootNode: h, hasShadowParent: function(t) { return !!h(t) }, isShadowDomSupported: d, getActiveElement: function() { var t = document.activeElement; return t.shadowRoot && (t = t.shadowRoot.activeElement), t === document.body && document.getSelection && (t = document.getSelection().focusNode || document.body), t } } } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var i = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2592e3, quarter: 7776e3, year: 31536e3 }; function r(t) { return !(!t || "object" !== n(t)) && !!(t.getFullYear && t.getMonth && t.getDate) } function a(t, e) { var n = []; if (t.filter) return t.filter(e); for (var i = 0; i < t.length; i++) e(t[i], i) && (n[n.length] = t[i]); return n } function o(t) { return 0 === t } t.exports = { getSecondsInUnit: function(t) { return i[t] || i.hour }, forEach: function(t, e) { if (t.forEach) t.forEach(e); else for (var n = t.slice(), i = 0; i < n.length; i++) e(n[i], i) }, arrayMap: function(t, e) { if (t.map) return t.map(e); for (var n = t.slice(), i = [], r = 0; r < n.length; r++) i.push(e(n[r], r)); return i }, arrayIncludes: function(t, e) { if (t.includes) return t.includes(e); for (var n = 0; n < t.length; n++) if (t[n] === e) return !0; return !1 }, arrayFind: function(t, e) { if (t.find) return t.find(e); for (var n = 0; n < t.length; n++) if (e(t[n], n)) return t[n] }, arrayFilter: a, arrayDifference: function(t, e) { return a(t, function(t, n) { return !e(t, n) }) }, arraySome: function(t, e) { if (0 === t.length) return !1; for (var n = 0; n < t.length; n++) if (e(t[n], n, t)) return !0; return !1 }, hashToArray: function(t) { var e = []; for (var n in t) t.hasOwnProperty(n) && e.push(t[n]); return e }, sortArrayOfHash: function(t, e, n) { var i = function(t, e) { return t < e }; t.sort(function(t, r) { return t[e] === r[e] ? 0 : n ? i(t[e], r[e]) : i(r[e], t[e]) }) }, throttle: function(t, e) { var n = !1; return function() { n || (t.apply(null, arguments), n = !0, setTimeout(function() { n = !1 }, e)) } }, isArray: function(t) { return Array.isArray ? Array.isArray(t) : t && void 0 !== t.length && t.pop && t.push }, isDate: r, isValidDate: function(t) { return r(t) && !isNaN(t.getTime()) }, isStringObject: function(t) { return t && "object" === n(t) && "function String() { [native code] }" === Function.prototype.toString.call(t.constructor) }, isNumberObject: function(t) { return t && "object" === n(t) && "function Number() { [native code] }" === Function.prototype.toString.call(t.constructor) }, isBooleanObject: function(t) { return t && "object" === n(t) && "function Boolean() { [native code] }" === Function.prototype.toString.call(t.constructor) }, delay: function(t, e) { var n, i = function i() { i.$cancelTimeout(), i.$pending = !0; var r = Array.prototype.slice.call(arguments); n = setTimeout(function() { t.apply(this, r), i.$pending = !1 }, e) }; return i.$pending = !1, i.$cancelTimeout = function() { clearTimeout(n), i.$pending = !1 } , i.$execute = function() { var e = Array.prototype.slice.call(arguments); t.apply(this, e), i.$cancelTimeout() } , i }, objectKeys: function(t) { if (Object.keys) return Object.keys(t); var e, n = []; for (e in t) Object.prototype.hasOwnProperty.call(t, e) && n.push(e); return n }, isEventable: function(t) { return t.attachEvent && t.detachEvent }, replaceValidZeroId: function(t, e) { return o(t) && !o(e) && (t = "0"), t }, checkZeroId: o, findBinary: function(t, e) { for (var n, i, r, a = 0, o = t.length - 1; a <= o; ) if (i = +t[n = Math.floor((a + o) / 2)], r = +t[n - 1], i < e) a = n + 1; else { if (!(i > e)) { for (; +t[n] == +t[n + 1]; ) n++; return n } if (!isNaN(r) && r < e) return n - 1; o = n - 1 } return t.length - 1 } } } , function(t, e) { t.exports = function(t, e) { for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]); function i() { this.constructor = t } t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i) } } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var i; i = function() { return this }(); try { i = i || Function("return this")() || (0, eval)("this") } catch (t) { "object" === ("undefined" == typeof window ? "undefined" : n(window)) && (i = window) } t.exports = i } , function(t, e) { var n = function() { this._silent_mode = !1, this.listeners = {} }; n.prototype = { _silentStart: function() { this._silent_mode = !0 }, _silentEnd: function() { this._silent_mode = !1 } }; var i = function(t) { var e = {} , n = 0 , i = function() { var n = !0; for (var i in e) { var r = e[i].apply(t, arguments); n = n && r } return n }; return i.addEvent = function(t, r) { if ("function" == typeof t) { var a; if (r && r.id ? a = r.id : (a = n, n++), r && r.once) { var o = t; t = function() { o(), i.removeEvent(a) } } return e[a] = t, a } return !1 } , i.removeEvent = function(t) { delete e[t] } , i.clear = function() { e = {} } , i }; t.exports = function(t) { var e = new n; t.attachEvent = function(t, n, r) { t = "ev_" + t.toLowerCase(), e.listeners[t] || (e.listeners[t] = i(this)), r && r.thisObject && (n = n.bind(r.thisObject)); var a = t + ":" + e.listeners[t].addEvent(n, r); return r && r.id && (a = r.id), a } , t.attachAll = function(t) { this.attachEvent("listen_all", t) } , t.callEvent = function(t, n) { if (e._silent_mode) return !0; var i = "ev_" + t.toLowerCase() , r = e.listeners; return r.ev_listen_all && r.ev_listen_all.apply(this, [t].concat(n)), !r[i] || r[i].apply(this, n) } , t.checkEvent = function(t) { return !!e.listeners["ev_" + t.toLowerCase()] } , t.detachEvent = function(t) { if (t) { var n = e.listeners; for (var i in n) n[i].removeEvent(t); var r = t.split(":"); if (n = e.listeners, 2 === r.length) { var a = r[0] , o = r[1]; n[a] && n[a].removeEvent(o) } } } , t.detachAllEvents = function() { for (var t in e.listeners) e.listeners[t].clear() } } } , function(t, e) { t.exports = function(t, e, n, i, r) { var a = e.getItemIndexByTopPosition(r.y) || 0 , o = e.getItemIndexByTopPosition(r.y_end) || i.count(); return { start: Math.max(0, a - 1), end: Math.min(i.count(), o + 1) } } } , function(t, e) { function n() { console.log("Method is not implemented.") } function i() {} i.prototype.render = n, i.prototype.set_value = n, i.prototype.get_value = n, i.prototype.focus = n, t.exports = function(t) { return i } } , function(t, e) { "function" == typeof Object.create ? t.exports = function(t, e) { t.super_ = e, t.prototype = Object.create(e.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }) } : t.exports = function(t, e) { t.super_ = e; var n = function() {}; n.prototype = e.prototype, t.prototype = new n, t.prototype.constructor = t } } , function(t, e) { var n, i, r = t.exports = {}; function a() { throw new Error("setTimeout has not been defined") } function o() { throw new Error("clearTimeout has not been defined") } function s(t) { if (n === setTimeout) return setTimeout(t, 0); if ((n === a || !n) && setTimeout) return n = setTimeout, setTimeout(t, 0); try { return n(t, 0) } catch (e) { try { return n.call(null, t, 0) } catch (e) { return n.call(this, t, 0) } } } !function() { try { n = "function" == typeof setTimeout ? setTimeout : a } catch (t) { n = a } try { i = "function" == typeof clearTimeout ? clearTimeout : o } catch (t) { i = o } }(); var l, c = [], u = !1, d = -1; function h() { u && l && (u = !1, l.length ? c = l.concat(c) : d = -1, c.length && f()) } function f() { if (!u) { var t = s(h); u = !0; for (var e = c.length; e; ) { for (l = c, c = []; ++d < e; ) l && l[d].run(); d = -1, e = c.length } l = null, u = !1, function(t) { if (i === clearTimeout) return clearTimeout(t); if ((i === o || !i) && clearTimeout) return i = clearTimeout, clearTimeout(t); try { i(t) } catch (e) { try { return i.call(null, t) } catch (e) { return i.call(this, t) } } }(t) } } function _(t, e) { this.fun = t, this.array = e } function g() {} r.nextTick = function(t) { var e = new Array(arguments.length - 1); if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n]; c.push(new _(t,e)), 1 !== c.length || u || s(f) } , _.prototype.run = function() { this.fun.apply(null, this.array) } , r.title = "browser", r.browser = !0, r.env = {}, r.argv = [], r.version = "", r.versions = {}, r.on = g, r.addListener = g, r.once = g, r.off = g, r.removeListener = g, r.removeAllListeners = g, r.emit = g, r.prependListener = g, r.prependOnceListener = g, r.listeners = function(t) { return [] } , r.binding = function(t) { throw new Error("process.binding is not supported") } , r.cwd = function() { return "/" } , r.chdir = function(t) { throw new Error("process.chdir is not supported") } , r.umask = function() { return 0 } } , function(t, e) { t.exports = function(t) { var e = function() {}; return e.prototype = { show: function(t, e, n, i) {}, hide: function() {}, set_value: function(t, e, n, i) { this.get_input(i).value = t }, get_value: function(t, e, n) { return this.get_input(n).value || "" }, is_changed: function(t, e, n, i) { var r = this.get_value(e, n, i); return r && t && r.valueOf && t.valueOf ? r.valueOf() != t.valueOf() : r != t }, is_valid: function(t, e, n, i) { return !0 }, save: function(t, e, n) {}, get_input: function(t) { return t.querySelector("input") }, focus: function(t) { var e = this.get_input(t); e && (e.focus && e.focus(), e.select && e.select()) } }, e } } , function(t, e) { var n = "undefined" != typeof window , i = { isIE: n && (navigator.userAgent.indexOf("MSIE") >= 0 || navigator.userAgent.indexOf("Trident") >= 0), isIE6: n && !XMLHttpRequest && navigator.userAgent.indexOf("MSIE") >= 0, isIE7: n && navigator.userAgent.indexOf("MSIE 7.0") >= 0 && navigator.userAgent.indexOf("Trident") < 0, isIE8: n && navigator.userAgent.indexOf("MSIE 8.0") >= 0 && navigator.userAgent.indexOf("Trident") >= 0, isOpera: n && navigator.userAgent.indexOf("Opera") >= 0, isChrome: n && navigator.userAgent.indexOf("Chrome") >= 0, isKHTML: n && (navigator.userAgent.indexOf("Safari") >= 0 || navigator.userAgent.indexOf("Konqueror") >= 0), isFF: n && navigator.userAgent.indexOf("Firefox") >= 0, isIPad: n && navigator.userAgent.search(/iPad/gi) >= 0, isEdge: n && -1 != navigator.userAgent.indexOf("Edge"), isNode: !n || "undefined" == typeof navigator }; t.exports = i } , function(t, e, n) { "use strict"; var i = n(23) , r = Object.keys || function(t) { var e = []; for (var n in t) e.push(n); return e } ; t.exports = d; var a = n(17); a.inherits = n(8); var o = n(62) , s = n(58); a.inherits(d, o); for (var l = r(s.prototype), c = 0; c < l.length; c++) { var u = l[c]; d.prototype[u] || (d.prototype[u] = s.prototype[u]) } function d(t) { if (!(this instanceof d)) return new d(t); o.call(this, t), s.call(this, t), t && !1 === t.readable && (this.readable = !1), t && !1 === t.writable && (this.writable = !1), this.allowHalfOpen = !0, t && !1 === t.allowHalfOpen && (this.allowHalfOpen = !1), this.once("end", h) } function h() { this.allowHalfOpen || this._writableState.ended || i.nextTick(f, this) } function f(t) { t.end() } Object.defineProperty(d.prototype, "writableHighWaterMark", { enumerable: !1, get: function() { return this._writableState.highWaterMark } }), Object.defineProperty(d.prototype, "destroyed", { get: function() { return void 0 !== this._readableState && void 0 !== this._writableState && (this._readableState.destroyed && this._writableState.destroyed) }, set: function(t) { void 0 !== this._readableState && void 0 !== this._writableState && (this._readableState.destroyed = t, this._writableState.destroyed = t) } }), d.prototype._destroy = function(t, e) { this.push(null), this.end(), i.nextTick(e, t) } } , function(t, e, n) { "use strict"; (function(t) { /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ var i = n(291) , r = n(290) , a = n(67); function o() { return l.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823 } function s(t, e) { if (o() < e) throw new RangeError("Invalid typed array length"); return l.TYPED_ARRAY_SUPPORT ? (t = new Uint8Array(e)).__proto__ = l.prototype : (null === t && (t = new l(e)), t.length = e), t } function l(t, e, n) { if (!(l.TYPED_ARRAY_SUPPORT || this instanceof l)) return new l(t,e,n); if ("number" == typeof t) { if ("string" == typeof e) throw new Error("If encoding is specified then the first argument must be a string"); return d(this, t) } return c(this, t, e, n) } function c(t, e, n, i) { if ("number" == typeof e) throw new TypeError('"value" argument must not be a number'); return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? function(t, e, n, i) { if (e.byteLength, n < 0 || e.byteLength < n) throw new RangeError("'offset' is out of bounds"); if (e.byteLength < n + (i || 0)) throw new RangeError("'length' is out of bounds"); e = void 0 === n && void 0 === i ? new Uint8Array(e) : void 0 === i ? new Uint8Array(e,n) : new Uint8Array(e,n,i); l.TYPED_ARRAY_SUPPORT ? (t = e).__proto__ = l.prototype : t = h(t, e); return t }(t, e, n, i) : "string" == typeof e ? function(t, e, n) { "string" == typeof n && "" !== n || (n = "utf8"); if (!l.isEncoding(n)) throw new TypeError('"encoding" must be a valid string encoding'); var i = 0 | _(e, n) , r = (t = s(t, i)).write(e, n); r !== i && (t = t.slice(0, r)); return t }(t, e, n) : function(t, e) { if (l.isBuffer(e)) { var n = 0 | f(e.length); return 0 === (t = s(t, n)).length ? t : (e.copy(t, 0, 0, n), t) } if (e) { if ("undefined" != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || "length"in e) return "number" != typeof e.length || function(t) { return t != t }(e.length) ? s(t, 0) : h(t, e); if ("Buffer" === e.type && a(e.data)) return h(t, e.data) } throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.") }(t, e) } function u(t) { if ("number" != typeof t) throw new TypeError('"size" argument must be a number'); if (t < 0) throw new RangeError('"size" argument must not be negative') } function d(t, e) { if (u(e), t = s(t, e < 0 ? 0 : 0 | f(e)), !l.TYPED_ARRAY_SUPPORT) for (var n = 0; n < e; ++n) t[n] = 0; return t } function h(t, e) { var n = e.length < 0 ? 0 : 0 | f(e.length); t = s(t, n); for (var i = 0; i < n; i += 1) t[i] = 255 & e[i]; return t } function f(t) { if (t >= o()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + o().toString(16) + " bytes"); return 0 | t } function _(t, e) { if (l.isBuffer(t)) return t.length; if ("undefined" != typeof ArrayBuffer && "function" == typeof ArrayBuffer.isView && (ArrayBuffer.isView(t) || t instanceof ArrayBuffer)) return t.byteLength; "string" != typeof t && (t = "" + t); var n = t.length; if (0 === n) return 0; for (var i = !1; ; ) switch (e) { case "ascii": case "latin1": case "binary": return n; case "utf8": case "utf-8": case void 0: return F(t).length; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return 2 * n; case "hex": return n >>> 1; case "base64": return B(t).length; default: if (i) return F(t).length; e = ("" + e).toLowerCase(), i = !0 } } function g(t, e, n) { var i = t[e]; t[e] = t[n], t[n] = i } function p(t, e, n, i, r) { if (0 === t.length) return -1; if ("string" == typeof n ? (i = n, n = 0) : n > 2147483647 ? n = 2147483647 : n < -2147483648 && (n = -2147483648), n = +n, isNaN(n) && (n = r ? 0 : t.length - 1), n < 0 && (n = t.length + n), n >= t.length) { if (r) return -1; n = t.length - 1 } else if (n < 0) { if (!r) return -1; n = 0 } if ("string" == typeof e && (e = l.from(e, i)), l.isBuffer(e)) return 0 === e.length ? -1 : v(t, e, n, i, r); if ("number" == typeof e) return e &= 255, l.TYPED_ARRAY_SUPPORT && "function" == typeof Uint8Array.prototype.indexOf ? r ? Uint8Array.prototype.indexOf.call(t, e, n) : Uint8Array.prototype.lastIndexOf.call(t, e, n) : v(t, [e], n, i, r); throw new TypeError("val must be string, number or Buffer") } function v(t, e, n, i, r) { var a, o = 1, s = t.length, l = e.length; if (void 0 !== i && ("ucs2" === (i = String(i).toLowerCase()) || "ucs-2" === i || "utf16le" === i || "utf-16le" === i)) { if (t.length < 2 || e.length < 2) return -1; o = 2, s /= 2, l /= 2, n /= 2 } function c(t, e) { return 1 === o ? t[e] : t.readUInt16BE(e * o) } if (r) { var u = -1; for (a = n; a < s; a++) if (c(t, a) === c(e, -1 === u ? 0 : a - u)) { if (-1 === u && (u = a), a - u + 1 === l) return u * o } else -1 !== u && (a -= a - u), u = -1 } else for (n + l > s && (n = s - l), a = n; a >= 0; a--) { for (var d = !0, h = 0; h < l; h++) if (c(t, a + h) !== c(e, h)) { d = !1; break } if (d) return a } return -1 } function m(t, e, n, i) { n = Number(n) || 0; var r = t.length - n; i ? (i = Number(i)) > r && (i = r) : i = r; var a = e.length; if (a % 2 != 0) throw new TypeError("Invalid hex string"); i > a / 2 && (i = a / 2); for (var o = 0; o < i; ++o) { var s = parseInt(e.substr(2 * o, 2), 16); if (isNaN(s)) return o; t[n + o] = s } return o } function y(t, e, n, i) { return z(F(e, t.length - n), t, n, i) } function k(t, e, n, i) { return z(function(t) { for (var e = [], n = 0; n < t.length; ++n) e.push(255 & t.charCodeAt(n)); return e }(e), t, n, i) } function b(t, e, n, i) { return k(t, e, n, i) } function x(t, e, n, i) { return z(B(e), t, n, i) } function w(t, e, n, i) { return z(function(t, e) { for (var n, i, r, a = [], o = 0; o < t.length && !((e -= 2) < 0); ++o) n = t.charCodeAt(o), i = n >> 8, r = n % 256, a.push(r), a.push(i); return a }(e, t.length - n), t, n, i) } function S(t, e, n) { return 0 === e && n === t.length ? i.fromByteArray(t) : i.fromByteArray(t.slice(e, n)) } function T(t, e, n) { n = Math.min(t.length, n); for (var i = [], r = e; r < n; ) { var a, o, s, l, c = t[r], u = null, d = c > 239 ? 4 : c > 223 ? 3 : c > 191 ? 2 : 1; if (r + d <= n) switch (d) { case 1: c < 128 && (u = c); break; case 2: 128 == (192 & (a = t[r + 1])) && (l = (31 & c) << 6 | 63 & a) > 127 && (u = l); break; case 3: a = t[r + 1], o = t[r + 2], 128 == (192 & a) && 128 == (192 & o) && (l = (15 & c) << 12 | (63 & a) << 6 | 63 & o) > 2047 && (l < 55296 || l > 57343) && (u = l); break; case 4: a = t[r + 1], o = t[r + 2], s = t[r + 3], 128 == (192 & a) && 128 == (192 & o) && 128 == (192 & s) && (l = (15 & c) << 18 | (63 & a) << 12 | (63 & o) << 6 | 63 & s) > 65535 && l < 1114112 && (u = l) } null === u ? (u = 65533, d = 1) : u > 65535 && (u -= 65536, i.push(u >>> 10 & 1023 | 55296), u = 56320 | 1023 & u), i.push(u), r += d } return function(t) { var e = t.length; if (e <= $) return String.fromCharCode.apply(String, t); var n = "" , i = 0; for (; i < e; ) n += String.fromCharCode.apply(String, t.slice(i, i += $)); return n }(i) } e.Buffer = l, e.SlowBuffer = function(t) { +t != t && (t = 0); return l.alloc(+t) } , e.INSPECT_MAX_BYTES = 50, l.TYPED_ARRAY_SUPPORT = void 0 !== t.TYPED_ARRAY_SUPPORT ? t.TYPED_ARRAY_SUPPORT : function() { try { var t = new Uint8Array(1); return t.__proto__ = { __proto__: Uint8Array.prototype, foo: function() { return 42 } }, 42 === t.foo() && "function" == typeof t.subarray && 0 === t.subarray(1, 1).byteLength } catch (t) { return !1 } }(), e.kMaxLength = o(), l.poolSize = 8192, l._augment = function(t) { return t.__proto__ = l.prototype, t } , l.from = function(t, e, n) { return c(null, t, e, n) } , l.TYPED_ARRAY_SUPPORT && (l.prototype.__proto__ = Uint8Array.prototype, l.__proto__ = Uint8Array, "undefined" != typeof Symbol && Symbol.species && l[Symbol.species] === l && Object.defineProperty(l, Symbol.species, { value: null, configurable: !0 })), l.alloc = function(t, e, n) { return function(t, e, n, i) { return u(e), e <= 0 ? s(t, e) : void 0 !== n ? "string" == typeof i ? s(t, e).fill(n, i) : s(t, e).fill(n) : s(t, e) }(null, t, e, n) } , l.allocUnsafe = function(t) { return d(null, t) } , l.allocUnsafeSlow = function(t) { return d(null, t) } , l.isBuffer = function(t) { return !(null == t || !t._isBuffer) } , l.compare = function(t, e) { if (!l.isBuffer(t) || !l.isBuffer(e)) throw new TypeError("Arguments must be Buffers"); if (t === e) return 0; for (var n = t.length, i = e.length, r = 0, a = Math.min(n, i); r < a; ++r) if (t[r] !== e[r]) { n = t[r], i = e[r]; break } return n < i ? -1 : i < n ? 1 : 0 } , l.isEncoding = function(t) { switch (String(t).toLowerCase()) { case "hex": case "utf8": case "utf-8": case "ascii": case "latin1": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return !0; default: return !1 } } , l.concat = function(t, e) { if (!a(t)) throw new TypeError('"list" argument must be an Array of Buffers'); if (0 === t.length) return l.alloc(0); var n; if (void 0 === e) for (e = 0, n = 0; n < t.length; ++n) e += t[n].length; var i = l.allocUnsafe(e) , r = 0; for (n = 0; n < t.length; ++n) { var o = t[n]; if (!l.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); o.copy(i, r), r += o.length } return i } , l.byteLength = _, l.prototype._isBuffer = !0, l.prototype.swap16 = function() { var t = this.length; if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); for (var e = 0; e < t; e += 2) g(this, e, e + 1); return this } , l.prototype.swap32 = function() { var t = this.length; if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); for (var e = 0; e < t; e += 4) g(this, e, e + 3), g(this, e + 1, e + 2); return this } , l.prototype.swap64 = function() { var t = this.length; if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); for (var e = 0; e < t; e += 8) g(this, e, e + 7), g(this, e + 1, e + 6), g(this, e + 2, e + 5), g(this, e + 3, e + 4); return this } , l.prototype.toString = function() { var t = 0 | this.length; return 0 === t ? "" : 0 === arguments.length ? T(this, 0, t) : function(t, e, n) { var i = !1; if ((void 0 === e || e < 0) && (e = 0), e > this.length) return ""; if ((void 0 === n || n > this.length) && (n = this.length), n <= 0) return ""; if ((n >>>= 0) <= (e >>>= 0)) return ""; for (t || (t = "utf8"); ; ) switch (t) { case "hex": return A(this, e, n); case "utf8": case "utf-8": return T(this, e, n); case "ascii": return C(this, e, n); case "latin1": case "binary": return E(this, e, n); case "base64": return S(this, e, n); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return D(this, e, n); default: if (i) throw new TypeError("Unknown encoding: " + t); t = (t + "").toLowerCase(), i = !0 } } .apply(this, arguments) } , l.prototype.equals = function(t) { if (!l.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); return this === t || 0 === l.compare(this, t) } , l.prototype.inspect = function() { var t = "" , n = e.INSPECT_MAX_BYTES; return this.length > 0 && (t = this.toString("hex", 0, n).match(/.{2}/g).join(" "), this.length > n && (t += " ... ")), "" } , l.prototype.compare = function(t, e, n, i, r) { if (!l.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); if (void 0 === e && (e = 0), void 0 === n && (n = t ? t.length : 0), void 0 === i && (i = 0), void 0 === r && (r = this.length), e < 0 || n > t.length || i < 0 || r > this.length) throw new RangeError("out of range index"); if (i >= r && e >= n) return 0; if (i >= r) return -1; if (e >= n) return 1; if (e >>>= 0, n >>>= 0, i >>>= 0, r >>>= 0, this === t) return 0; for (var a = r - i, o = n - e, s = Math.min(a, o), c = this.slice(i, r), u = t.slice(e, n), d = 0; d < s; ++d) if (c[d] !== u[d]) { a = c[d], o = u[d]; break } return a < o ? -1 : o < a ? 1 : 0 } , l.prototype.includes = function(t, e, n) { return -1 !== this.indexOf(t, e, n) } , l.prototype.indexOf = function(t, e, n) { return p(this, t, e, n, !0) } , l.prototype.lastIndexOf = function(t, e, n) { return p(this, t, e, n, !1) } , l.prototype.write = function(t, e, n, i) { if (void 0 === e) i = "utf8", n = this.length, e = 0; else if (void 0 === n && "string" == typeof e) i = e, n = this.length, e = 0; else { if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); e |= 0, isFinite(n) ? (n |= 0, void 0 === i && (i = "utf8")) : (i = n, n = void 0) } var r = this.length - e; if ((void 0 === n || n > r) && (n = r), t.length > 0 && (n < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds"); i || (i = "utf8"); for (var a = !1; ; ) switch (i) { case "hex": return m(this, t, e, n); case "utf8": case "utf-8": return y(this, t, e, n); case "ascii": return k(this, t, e, n); case "latin1": case "binary": return b(this, t, e, n); case "base64": return x(this, t, e, n); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return w(this, t, e, n); default: if (a) throw new TypeError("Unknown encoding: " + i); i = ("" + i).toLowerCase(), a = !0 } } , l.prototype.toJSON = function() { return { type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0) } } ; var $ = 4096; function C(t, e, n) { var i = ""; n = Math.min(t.length, n); for (var r = e; r < n; ++r) i += String.fromCharCode(127 & t[r]); return i } function E(t, e, n) { var i = ""; n = Math.min(t.length, n); for (var r = e; r < n; ++r) i += String.fromCharCode(t[r]); return i } function A(t, e, n) { var i = t.length; (!e || e < 0) && (e = 0), (!n || n < 0 || n > i) && (n = i); for (var r = "", a = e; a < n; ++a) r += H(t[a]); return r } function D(t, e, n) { for (var i = t.slice(e, n), r = "", a = 0; a < i.length; a += 2) r += String.fromCharCode(i[a] + 256 * i[a + 1]); return r } function M(t, e, n) { if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint"); if (t + e > n) throw new RangeError("Trying to access beyond buffer length") } function I(t, e, n, i, r, a) { if (!l.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance'); if (e > r || e < a) throw new RangeError('"value" argument is out of bounds'); if (n + i > t.length) throw new RangeError("Index out of range") } function P(t, e, n, i) { e < 0 && (e = 65535 + e + 1); for (var r = 0, a = Math.min(t.length - n, 2); r < a; ++r) t[n + r] = (e & 255 << 8 * (i ? r : 1 - r)) >>> 8 * (i ? r : 1 - r) } function N(t, e, n, i) { e < 0 && (e = 4294967295 + e + 1); for (var r = 0, a = Math.min(t.length - n, 4); r < a; ++r) t[n + r] = e >>> 8 * (i ? r : 3 - r) & 255 } function O(t, e, n, i, r, a) { if (n + i > t.length) throw new RangeError("Index out of range"); if (n < 0) throw new RangeError("Index out of range") } function L(t, e, n, i, a) { return a || O(t, 0, n, 4), r.write(t, e, n, i, 23, 4), n + 4 } function R(t, e, n, i, a) { return a || O(t, 0, n, 8), r.write(t, e, n, i, 52, 8), n + 8 } l.prototype.slice = function(t, e) { var n, i = this.length; if (t = ~~t, e = void 0 === e ? i : ~~e, t < 0 ? (t += i) < 0 && (t = 0) : t > i && (t = i), e < 0 ? (e += i) < 0 && (e = 0) : e > i && (e = i), e < t && (e = t), l.TYPED_ARRAY_SUPPORT) (n = this.subarray(t, e)).__proto__ = l.prototype; else { var r = e - t; n = new l(r,void 0); for (var a = 0; a < r; ++a) n[a] = this[a + t] } return n } , l.prototype.readUIntLE = function(t, e, n) { t |= 0, e |= 0, n || M(t, e, this.length); for (var i = this[t], r = 1, a = 0; ++a < e && (r *= 256); ) i += this[t + a] * r; return i } , l.prototype.readUIntBE = function(t, e, n) { t |= 0, e |= 0, n || M(t, e, this.length); for (var i = this[t + --e], r = 1; e > 0 && (r *= 256); ) i += this[t + --e] * r; return i } , l.prototype.readUInt8 = function(t, e) { return e || M(t, 1, this.length), this[t] } , l.prototype.readUInt16LE = function(t, e) { return e || M(t, 2, this.length), this[t] | this[t + 1] << 8 } , l.prototype.readUInt16BE = function(t, e) { return e || M(t, 2, this.length), this[t] << 8 | this[t + 1] } , l.prototype.readUInt32LE = function(t, e) { return e || M(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3] } , l.prototype.readUInt32BE = function(t, e) { return e || M(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]) } , l.prototype.readIntLE = function(t, e, n) { t |= 0, e |= 0, n || M(t, e, this.length); for (var i = this[t], r = 1, a = 0; ++a < e && (r *= 256); ) i += this[t + a] * r; return i >= (r *= 128) && (i -= Math.pow(2, 8 * e)), i } , l.prototype.readIntBE = function(t, e, n) { t |= 0, e |= 0, n || M(t, e, this.length); for (var i = e, r = 1, a = this[t + --i]; i > 0 && (r *= 256); ) a += this[t + --i] * r; return a >= (r *= 128) && (a -= Math.pow(2, 8 * e)), a } , l.prototype.readInt8 = function(t, e) { return e || M(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t] } , l.prototype.readInt16LE = function(t, e) { e || M(t, 2, this.length); var n = this[t] | this[t + 1] << 8; return 32768 & n ? 4294901760 | n : n } , l.prototype.readInt16BE = function(t, e) { e || M(t, 2, this.length); var n = this[t + 1] | this[t] << 8; return 32768 & n ? 4294901760 | n : n } , l.prototype.readInt32LE = function(t, e) { return e || M(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24 } , l.prototype.readInt32BE = function(t, e) { return e || M(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3] } , l.prototype.readFloatLE = function(t, e) { return e || M(t, 4, this.length), r.read(this, t, !0, 23, 4) } , l.prototype.readFloatBE = function(t, e) { return e || M(t, 4, this.length), r.read(this, t, !1, 23, 4) } , l.prototype.readDoubleLE = function(t, e) { return e || M(t, 8, this.length), r.read(this, t, !0, 52, 8) } , l.prototype.readDoubleBE = function(t, e) { return e || M(t, 8, this.length), r.read(this, t, !1, 52, 8) } , l.prototype.writeUIntLE = function(t, e, n, i) { (t = +t, e |= 0, n |= 0, i) || I(this, t, e, n, Math.pow(2, 8 * n) - 1, 0); var r = 1 , a = 0; for (this[e] = 255 & t; ++a < n && (r *= 256); ) this[e + a] = t / r & 255; return e + n } , l.prototype.writeUIntBE = function(t, e, n, i) { (t = +t, e |= 0, n |= 0, i) || I(this, t, e, n, Math.pow(2, 8 * n) - 1, 0); var r = n - 1 , a = 1; for (this[e + r] = 255 & t; --r >= 0 && (a *= 256); ) this[e + r] = t / a & 255; return e + n } , l.prototype.writeUInt8 = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 1, 255, 0), l.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), this[e] = 255 & t, e + 1 } , l.prototype.writeUInt16LE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 2, 65535, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : P(this, t, e, !0), e + 2 } , l.prototype.writeUInt16BE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 2, 65535, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : P(this, t, e, !1), e + 2 } , l.prototype.writeUInt32LE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 4, 4294967295, 0), l.TYPED_ARRAY_SUPPORT ? (this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t) : N(this, t, e, !0), e + 4 } , l.prototype.writeUInt32BE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 4, 4294967295, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : N(this, t, e, !1), e + 4 } , l.prototype.writeIntLE = function(t, e, n, i) { if (t = +t, e |= 0, !i) { var r = Math.pow(2, 8 * n - 1); I(this, t, e, n, r - 1, -r) } var a = 0 , o = 1 , s = 0; for (this[e] = 255 & t; ++a < n && (o *= 256); ) t < 0 && 0 === s && 0 !== this[e + a - 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; return e + n } , l.prototype.writeIntBE = function(t, e, n, i) { if (t = +t, e |= 0, !i) { var r = Math.pow(2, 8 * n - 1); I(this, t, e, n, r - 1, -r) } var a = n - 1 , o = 1 , s = 0; for (this[e + a] = 255 & t; --a >= 0 && (o *= 256); ) t < 0 && 0 === s && 0 !== this[e + a + 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; return e + n } , l.prototype.writeInt8 = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 1, 127, -128), l.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1 } , l.prototype.writeInt16LE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 2, 32767, -32768), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : P(this, t, e, !0), e + 2 } , l.prototype.writeInt16BE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 2, 32767, -32768), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : P(this, t, e, !1), e + 2 } , l.prototype.writeInt32LE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 4, 2147483647, -2147483648), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24) : N(this, t, e, !0), e + 4 } , l.prototype.writeInt32BE = function(t, e, n) { return t = +t, e |= 0, n || I(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : N(this, t, e, !1), e + 4 } , l.prototype.writeFloatLE = function(t, e, n) { return L(this, t, e, !0, n) } , l.prototype.writeFloatBE = function(t, e, n) { return L(this, t, e, !1, n) } , l.prototype.writeDoubleLE = function(t, e, n) { return R(this, t, e, !0, n) } , l.prototype.writeDoubleBE = function(t, e, n) { return R(this, t, e, !1, n) } , l.prototype.copy = function(t, e, n, i) { if (n || (n = 0), i || 0 === i || (i = this.length), e >= t.length && (e = t.length), e || (e = 0), i > 0 && i < n && (i = n), i === n) return 0; if (0 === t.length || 0 === this.length) return 0; if (e < 0) throw new RangeError("targetStart out of bounds"); if (n < 0 || n >= this.length) throw new RangeError("sourceStart out of bounds"); if (i < 0) throw new RangeError("sourceEnd out of bounds"); i > this.length && (i = this.length), t.length - e < i - n && (i = t.length - e + n); var r, a = i - n; if (this === t && n < e && e < i) for (r = a - 1; r >= 0; --r) t[r + e] = this[r + n]; else if (a < 1e3 || !l.TYPED_ARRAY_SUPPORT) for (r = 0; r < a; ++r) t[r + e] = this[r + n]; else Uint8Array.prototype.set.call(t, this.subarray(n, n + a), e); return a } , l.prototype.fill = function(t, e, n, i) { if ("string" == typeof t) { if ("string" == typeof e ? (i = e, e = 0, n = this.length) : "string" == typeof n && (i = n, n = this.length), 1 === t.length) { var r = t.charCodeAt(0); r < 256 && (t = r) } if (void 0 !== i && "string" != typeof i) throw new TypeError("encoding must be a string"); if ("string" == typeof i && !l.isEncoding(i)) throw new TypeError("Unknown encoding: " + i) } else "number" == typeof t && (t &= 255); if (e < 0 || this.length < e || this.length < n) throw new RangeError("Out of range index"); if (n <= e) return this; var a; if (e >>>= 0, n = void 0 === n ? this.length : n >>> 0, t || (t = 0), "number" == typeof t) for (a = e; a < n; ++a) this[a] = t; else { var o = l.isBuffer(t) ? t : F(new l(t,i).toString()) , s = o.length; for (a = 0; a < n - e; ++a) this[a + e] = o[a % s] } return this } ; var j = /[^+\/0-9A-Za-z-_]/g; function H(t) { return t < 16 ? "0" + t.toString(16) : t.toString(16) } function F(t, e) { var n; e = e || 1 / 0; for (var i = t.length, r = null, a = [], o = 0; o < i; ++o) { if ((n = t.charCodeAt(o)) > 55295 && n < 57344) { if (!r) { if (n > 56319) { (e -= 3) > -1 && a.push(239, 191, 189); continue } if (o + 1 === i) { (e -= 3) > -1 && a.push(239, 191, 189); continue } r = n; continue } if (n < 56320) { (e -= 3) > -1 && a.push(239, 191, 189), r = n; continue } n = 65536 + (r - 55296 << 10 | n - 56320) } else r && (e -= 3) > -1 && a.push(239, 191, 189); if (r = null, n < 128) { if ((e -= 1) < 0) break; a.push(n) } else if (n < 2048) { if ((e -= 2) < 0) break; a.push(n >> 6 | 192, 63 & n | 128) } else if (n < 65536) { if ((e -= 3) < 0) break; a.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128) } else { if (!(n < 1114112)) throw new Error("Invalid code point"); if ((e -= 4) < 0) break; a.push(n >> 18 | 240, n >> 12 & 63 | 128, n >> 6 & 63 | 128, 63 & n | 128) } } return a } function B(t) { return i.toByteArray(function(t) { if ((t = function(t) { return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "") }(t).replace(j, "")).length < 2) return ""; for (; t.length % 4 != 0; ) t += "="; return t }(t)) } function z(t, e, n, i) { for (var r = 0; r < i && !(r + n >= e.length || r >= t.length); ++r) e[r + n] = t[r]; return r } } ).call(this, n(4)) } , function(t, e, n) { var i = n(0) , r = n(5) , a = n(1) , o = function() { "use strict"; function t(t, e, n, o) { t && (this.$container = a.toNode(t), this.$parent = t), this.$config = i.mixin(e, { headerHeight: 33 }), this.$gantt = o, this.$domEvents = o._createDomEventScope(), this.$id = e.id || "c" + i.uid(), this.$name = "cell", this.$factory = n, r(this) } return t.prototype.destructor = function() { this.$parent = this.$container = this.$view = null, this.$gantt.$services.getService("mouseEvents").detach("click", "gantt_header_arrow", this._headerClickHandler), this.$domEvents.detachAll(), this.callEvent("onDestroy", []), this.detachAllEvents() } , t.prototype.cell = function(t) { return null } , t.prototype.scrollTo = function(t, e) { var n = this.$view; this.$config.html && (n = this.$view.firstChild), 1 * t == t && (n.scrollLeft = t), 1 * e == e && (n.scrollTop = e) } , t.prototype.clear = function() { this.getNode().innerHTML = "", this.getNode().className = "gantt_layout_content", this.getNode().style.padding = "0" } , t.prototype.resize = function(t) { if (this.$parent) return this.$parent.resize(t); !1 === t && (this.$preResize = !0); var e = this.$container , n = e.offsetWidth , i = e.offsetHeight , r = this.getSize(); e === document.body && (n = document.body.offsetWidth, i = document.body.offsetHeight), n < r.minWidth && (n = r.minWidth), n > r.maxWidth && (n = r.maxWidth), i < r.minHeight && (i = r.minHeight), i > r.maxHeight && (i = r.maxHeight), this.setSize(n, i), this.$preResize, this.$preResize = !1 } , t.prototype.hide = function() { this._hide(!0), this.resize() } , t.prototype.show = function(t) { this._hide(!1), t && this.$parent && this.$parent.show(), this.resize() } , t.prototype._hide = function(t) { if (!0 === t && this.$view.parentNode) this.$view.parentNode.removeChild(this.$view); else if (!1 === t && !this.$view.parentNode) { var e = this.$parent.cellIndex(this.$id); this.$parent.moveView(this, e) } this.$config.hidden = t } , t.prototype.$toHTML = function(t, e) { void 0 === t && (t = ""), e = [e || "", this.$config.css || ""].join(" "); var n = this.$config , i = ""; n.raw ? t = "string" == typeof n.raw ? n.raw : "" : (t || (t = "
" + (n.html || "") + "
"), n.header && (i = "
" + (n.canCollapse ? "
" : "") + "
" + n.header + "
")); return "
" + i + t + "
" } , t.prototype.$fill = function(t, e) { this.$view = t, this.$parent = e, this.init() } , t.prototype.getNode = function() { return this.$view.querySelector("gantt_layout_cell") || this.$view } , t.prototype.init = function() { var t = this; this._headerClickHandler = function(e) { a.locateAttribute(e, "data-cell-id") == t.$id && t.toggle() } , this.$gantt.$services.getService("mouseEvents").delegate("click", "gantt_header_arrow", this._headerClickHandler), this.callEvent("onReady", []) } , t.prototype.toggle = function() { this.$config.collapsed = !this.$config.collapsed, this.resize() } , t.prototype.getSize = function() { var t = { height: this.$config.height || 0, width: this.$config.width || 0, gravity: this.$config.gravity || 1, minHeight: this.$config.minHeight || 0, minWidth: this.$config.minWidth || 0, maxHeight: this.$config.maxHeight || 1e11, maxWidth: this.$config.maxWidth || 1e11 }; if (this.$config.collapsed) { var e = "x" === this.$config.mode; t[e ? "width" : "height"] = t[e ? "maxWidth" : "maxHeight"] = this.$config.headerHeight } return t } , t.prototype.getContentSize = function() { var t = this.$lastSize.contentX; t !== 1 * t && (t = this.$lastSize.width); var e = this.$lastSize.contentY; return e !== 1 * e && (e = this.$lastSize.height), { width: t, height: e } } , t.prototype._getBorderSizes = function() { var t = { top: 0, right: 0, bottom: 0, left: 0, horizontal: 0, vertical: 0 }; return this._currentBorders && (this._currentBorders[this._borders.left] && (t.left = 1, t.horizontal++), this._currentBorders[this._borders.right] && (t.right = 1, t.horizontal++), this._currentBorders[this._borders.top] && (t.top = 1, t.vertical++), this._currentBorders[this._borders.bottom] && (t.bottom = 1, t.vertical++)), t } , t.prototype.setSize = function(t, e) { this.$view.style.width = t + "px", this.$view.style.height = e + "px"; var n = this._getBorderSizes() , i = e - n.vertical , r = t - n.horizontal; this.$lastSize = { x: t, y: e, contentX: r, contentY: i }, this.$config.header ? this._sizeHeader() : this._sizeContent() } , t.prototype._borders = { left: "gantt_layout_cell_border_left", right: "gantt_layout_cell_border_right", top: "gantt_layout_cell_border_top", bottom: "gantt_layout_cell_border_bottom" }, t.prototype._setBorders = function(t, e) { e || (e = this); var n = e.$view; for (var i in this._borders) a.removeClassName(n, this._borders[i]); "string" == typeof t && (t = [t]); var r = {}; for (i = 0; i < t.length; i++) a.addClassName(n, t[i]), r[t[i]] = !0; e._currentBorders = r } , t.prototype._sizeContent = function() { var t = this.$view.childNodes[0]; t && "gantt_layout_content" == t.className && (t.style.height = this.$lastSize.contentY + "px") } , t.prototype._sizeHeader = function() { var t = this.$lastSize; t.contentY -= this.$config.headerHeight; var e = this.$view.childNodes[0] , n = this.$view.childNodes[1] , i = "x" === this.$config.mode; if (this.$config.collapsed) if (n.style.display = "none", i) { e.className = "gantt_layout_header collapsed_x", e.style.width = t.y + "px"; var r = Math.floor(t.y / 2 - t.x / 2); e.style.transform = "rotate(90deg) translate(" + r + "px, " + r + "px)", n.style.display = "none" } else e.className = "gantt_layout_header collapsed_y"; else e.className = i ? "gantt_layout_header" : "gantt_layout_header vertical", e.style.width = "auto", e.style.transform = "", n.style.display = "", n.style.height = t.contentY + "px"; e.style.height = this.$config.headerHeight + "px" } , t }(); t.exports = o } , function(t, e, n) { var i = n(11); t.exports = function(t) { return i.isNode || !t.$root } } , function(t, e) { t.exports = function(t, e, n, i) { if ((i = e ? e.config : i) && i.placeholder_task && n.exists(t)) return n.getItem(t).type === i.types.placeholder; return !1 } } , function(t, e, n) { (function(t) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } function i(t) { return Object.prototype.toString.call(t) } e.isArray = function(t) { return Array.isArray ? Array.isArray(t) : "[object Array]" === i(t) } , e.isBoolean = function(t) { return "boolean" == typeof t } , e.isNull = function(t) { return null === t } , e.isNullOrUndefined = function(t) { return null == t } , e.isNumber = function(t) { return "number" == typeof t } , e.isString = function(t) { return "string" == typeof t } , e.isSymbol = function(t) { return "symbol" === n(t) } , e.isUndefined = function(t) { return void 0 === t } , e.isRegExp = function(t) { return "[object RegExp]" === i(t) } , e.isObject = function(t) { return "object" === n(t) && null !== t } , e.isDate = function(t) { return "[object Date]" === i(t) } , e.isError = function(t) { return "[object Error]" === i(t) || t instanceof Error } , e.isFunction = function(t) { return "function" == typeof t } , e.isPrimitive = function(t) { return null === t || "boolean" == typeof t || "number" == typeof t || "string" == typeof t || "symbol" === n(t) || void 0 === t } , e.isBuffer = t.isBuffer } ).call(this, n(13).Buffer) } , function(t, e, n) { var i = n(3) , r = n(36); t.exports = function(t) { var e = n(7)(t); function a() { return e.apply(this, arguments) || this } return i(a, e), a.prototype.render = function(t) { var e = "
"; return e += r.getHtmlSelect(t.options, [{ key: "style", value: "width:100%;" }, { key: "title", value: t.name }]), e += "
" } , a.prototype.set_value = function(t, e, n, i) { var r = t.firstChild; !r._dhx_onchange && i.onchange && (r.onchange = i.onchange, r._dhx_onchange = !0), void 0 === e && (e = (r.options[0] || {}).value), r.value = e || "" } , a.prototype.get_value = function(t) { return t.firstChild.value } , a.prototype.focus = function(e) { var n = e.firstChild; t._focus(n, !0) } , a } } , function(t, e) { t.exports = function(t, e, n, i, r) { if (!t.start_date || !t.end_date) return null; var a = n.getItemTop(t.id) , o = n.getItemHeight(t.id); if (a > e.y_end || a + o < e.y) return !1; var s = n.posFromDate(t.start_date) , l = n.posFromDate(t.end_date) , c = Math.min(s, l) - 200 , u = Math.max(s, l) + 200; return !(c > e.x_end || u < e.x) } } , function(t, e) { t.exports = function(t) { return t.config.smart_rendering && t._smart_render } } , function(t, e, n) { (function(e) { var n; n = "undefined" != typeof window ? window : e, t.exports = n } ).call(this, n(4)) } , function(t, e, n) { var i = n(13) , r = i.Buffer; function a(t, e) { for (var n in t) e[n] = t[n] } function o(t, e, n) { return r(t, e, n) } r.from && r.alloc && r.allocUnsafe && r.allocUnsafeSlow ? t.exports = i : (a(i, e), e.Buffer = o), a(r, o), o.from = function(t, e, n) { if ("number" == typeof t) throw new TypeError("Argument must not be a number"); return r(t, e, n) } , o.alloc = function(t, e, n) { if ("number" != typeof t) throw new TypeError("Argument must be a number"); var i = r(t); return void 0 !== e ? "string" == typeof n ? i.fill(e, n) : i.fill(e) : i.fill(0), i } , o.allocUnsafe = function(t) { if ("number" != typeof t) throw new TypeError("Argument must be a number"); return r(t) } , o.allocUnsafeSlow = function(t) { if ("number" != typeof t) throw new TypeError("Argument must be a number"); return i.SlowBuffer(t) } } , function(t, e, n) { "use strict"; (function(e) { !e.version || 0 === e.version.indexOf("v0.") || 0 === e.version.indexOf("v1.") && 0 !== e.version.indexOf("v1.8.") ? t.exports = { nextTick: function(t, n, i, r) { if ("function" != typeof t) throw new TypeError('"callback" argument must be a function'); var a, o, s = arguments.length; switch (s) { case 0: case 1: return e.nextTick(t); case 2: return e.nextTick(function() { t.call(null, n) }); case 3: return e.nextTick(function() { t.call(null, n, i) }); case 4: return e.nextTick(function() { t.call(null, n, i, r) }); default: for (a = new Array(s - 1), o = 0; o < a.length; ) a[o++] = arguments[o]; return e.nextTick(function() { t.apply(null, a) }) } } } : t.exports = e } ).call(this, n(9)) } , function(t, e, n) { var i = n(0); t.exports = { createDropTargetObject: function(t) { var e = { targetParent: null, targetIndex: 0, targetId: null, child: !1, nextSibling: !1, prevSibling: !1 }; return t && i.mixin(e, t, !0), e }, nextSiblingTarget: function(t, e, n) { var i = this.createDropTargetObject(); return i.targetId = e, i.nextSibling = !0, i.targetParent = n.getParent(i.targetId), i.targetIndex = n.getBranchIndex(i.targetId), (n.getParent(t) != i.targetParent || i.targetIndex < n.getBranchIndex(t)) && (i.targetIndex += 1), i }, prevSiblingTarget: function(t, e, n) { var i = this.createDropTargetObject(); return i.targetId = e, i.prevSibling = !0, i.targetParent = n.getParent(i.targetId), i.targetIndex = n.getBranchIndex(i.targetId), n.getParent(t) == i.targetParent && i.targetIndex > n.getBranchIndex(t) && (i.targetIndex -= 1), i }, firstChildTarget: function(t, e, n) { var i = this.createDropTargetObject(); return i.targetId = e, i.targetParent = i.targetId, i.targetIndex = 0, i.child = !0, i }, lastChildTarget: function(t, e, n) { var i = n.getChildren(e) , r = this.createDropTargetObject(); return r.targetId = i[i.length - 1], r.targetParent = e, r.targetIndex = i.length, r.nextSibling = !0, r } } } , function(t, e, n) { var i = n(20); t.exports = function(t, e, n, r) { var a = e.width[t]; if (a <= 0) return !1; if (!r.config.smart_rendering || i(r)) return !0; var o = e.left[t] - a , s = e.left[t] + a; return o <= n.x_end && s >= n.x } } , function(t, e) { t.exports = function(t, e) { var n = 0 , i = t.left.length - 1; if (e) for (var r = 0; r < t.left.length; r++) { var a = t.left[r]; if (a < e.x && (n = r), a > e.x_end) { i = r; break } } return { start: n, end: i } } } , function(t, e) { t.exports = function(t, e, n) { return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: 0, right: 1 / 0 } } } , function(t, e) { t.exports = function(t) { function e(e, a, o) { if (!t._isAllowedUnscheduledTask(e) && t._isTaskInTimelineLimits(e)) { var s = a.getItemPosition(e) , l = o , c = a.$getTemplates() , u = t.getTaskType(e.type) , d = a.getBarHeight(e.id, u == l.types.milestone) , h = 0; u == l.types.milestone && (h = (d - s.height) / 2); var f = Math.floor((a.getItemHeight(e.id) - d) / 2); u == l.types.milestone && (s.left -= Math.round(d / 2), s.width = d); var _ = document.createElement("div") , g = Math.round(s.width); a.$config.item_attribute && (_.setAttribute(a.$config.item_attribute, e.id), _.setAttribute(a.$config.bind + "_id", e.id)), l.show_progress && u != l.types.milestone && function(e, n, i, r, a) { var o = 1 * e.progress || 0; i = Math.max(i - 2, 0); var s = document.createElement("div") , l = Math.round(i * o); l = Math.min(i, l), e.progressColor && (s.style.backgroundColor = e.progressColor, s.style.opacity = 1), s.style.width = l + "px", s.className = "gantt_task_progress", s.innerHTML = a.progress_text(e.start_date, e.end_date, e), r.rtl && (s.style.position = "absolute", s.style.right = "0px"); var c = document.createElement("div"); if (c.className = "gantt_task_progress_wrapper", c.appendChild(s), n.appendChild(c), t.config.drag_progress && !t.isReadonly(e)) { var u = document.createElement("div") , d = l; r.rtl && (d = i - l), u.style.left = d + "px", u.className = "gantt_task_progress_drag", s.appendChild(u), n.appendChild(u) } }(e, _, g, l, c); var p = function(e, n, i) { var r = document.createElement("div"); return t.getTaskType(e.type) != t.config.types.milestone ? r.innerHTML = i.task_text(e.start_date, e.end_date, e) : t.getTaskType(e.type) == t.config.types.milestone && n && (r.style.height = r.style.width = n + "px"), r.className = "gantt_task_content", r }(e, g, c); e.textColor && (p.style.color = e.textColor), _.appendChild(p); var v = function(e, n, i, r) { var a = r.$getConfig() , o = [e]; n && o.push(n); var s = t.getState() , l = t.getTask(i); if (t.getTaskType(l.type) == a.types.milestone ? o.push("gantt_milestone") : t.getTaskType(l.type) == a.types.project && o.push("gantt_project"), o.push("gantt_bar_" + t.getTaskType(l.type)), t.isSummaryTask(l) && o.push("gantt_dependent_task"), t.isSplitTask(l) && (a.open_split_tasks && !l.$open || !a.open_split_tasks) && o.push("gantt_split_parent"), a.select_task && t.isSelectedTask(i) && o.push("gantt_selected"), i == s.drag_id && (o.push("gantt_drag_" + s.drag_mode), s.touch_drag && o.push("gantt_touch_" + s.drag_mode)), s.link_source_id == i && o.push("gantt_link_source"), s.link_target_id == i && o.push("gantt_link_target"), a.highlight_critical_path && t.isCriticalTask && t.isCriticalTask(l) && o.push("gantt_critical_task"), s.link_landing_area && s.link_target_id && s.link_source_id && s.link_target_id != s.link_source_id && (s.link_target_id == i || s.link_source_id == i)) { var c = s.link_source_id , u = s.link_from_start , d = s.link_to_start , h = t.isLinkAllowed(c, i, u, d) , f = ""; f = h ? d ? "link_start_allow" : "link_finish_allow" : d ? "link_start_deny" : "link_finish_deny", o.push(f) } return o.join(" ") }("gantt_task_line", c.task_class(e.start_date, e.end_date, e), e.id, a); (e.color || e.progressColor || e.textColor) && (v += " gantt_task_inline_color"), s.width < 20 && (v += " gantt_thin_task"), _.className = v; var m = ["left:" + s.left + "px", "top:" + (f + s.top) + "px", "height:" + (u == l.types.milestone ? s.height : d) + "px", "line-height:" + Math.max(d < 30 ? d - 2 : d, 0) + "px", "width:" + g + "px"]; e.color && m.push("background-color:" + e.color), e.textColor && m.push("color:" + e.textColor), _.style.cssText = m.join(";"); var y = function(t, e, r, a) { var o = "gantt_left " + i(!e.rtl, t) , s = null; return a && (s = { type: "marginRight", value: a }), n(t, r.leftside_text, o, s) }(e, l, c, h); y && _.appendChild(y), (y = function(t, e, r, a) { var o = "gantt_right " + i(!!e.rtl, t) , s = null; return a && (s = { type: "marginLeft", value: a }), n(t, r.rightside_text, o, s) }(e, l, c, h)) && _.appendChild(y), t._waiAria.setTaskBarAttr(e, _); var k = t.getState(); return t.isReadonly(e) || (l.drag_resize && !t.isSummaryTask(e) && u != l.types.milestone && r(_, "gantt_task_drag", e, function(t) { var e = document.createElement("div"); return e.className = t, e }, l), l.drag_links && l.show_links && r(_, "gantt_link_control", e, function(t) { var e = document.createElement("div"); e.className = t, e.style.cssText = ["height:" + d + "px", "line-height:" + d + "px"].join(";"); var n = document.createElement("div"); n.className = "gantt_link_point"; var i = !1; return k.link_source_id && l.touch && (i = !0), n.style.display = i ? "block" : "", e.appendChild(n), e }, l, h)), _ } } function n(t, e, n, i) { if (!e) return null; var r = e(t.start_date, t.end_date, t); if (!r) return null; var a = document.createElement("div"); return a.className = "gantt_side_content " + n, a.innerHTML = r, i && (a.style[i.type] = Math.abs(i.value) + "px"), a } function i(e, n) { var i = function(e) { return e ? { $source: [t.config.links.start_to_start], $target: [t.config.links.start_to_start, t.config.links.finish_to_start] } : { $source: [t.config.links.finish_to_start, t.config.links.finish_to_finish], $target: [t.config.links.finish_to_finish] } }(e); for (var r in i) for (var a = n[r], o = 0; o < a.length; o++) for (var s = t.getLink(a[o]), l = 0; l < i[r].length; l++) if (s.type == i[r][l]) return "gantt_link_crossing"; return "" } function r(e, n, i, r, a, o) { var s, l = t.getState(); +i.start_date >= +l.min_date && ((s = r([n, a.rtl ? "task_right" : "task_left", "task_start_date"].join(" "))).setAttribute("data-bind-property", "start_date"), o && (s.style.marginLeft = o + "px"), e.appendChild(s)), +i.end_date <= +l.max_date && ((s = r([n, a.rtl ? "task_left" : "task_right", "task_end_date"].join(" "))).setAttribute("data-bind-property", "end_date"), o && (s.style.marginRight = o + "px"), e.appendChild(s)) } return function(n, i, r) { var a = (r = i.$getConfig()).type_renderers[t.getTaskType(n.type)] , o = e; return a ? a.call(t, n, function(e) { return o.call(t, e, i, r) }, i) : o.call(t, n, i, r) } } } , function(t, e, n) { var i = n(33) , r = n(5) , a = n(0) , o = n(2) , s = n(43) , l = n(128) , c = function(t, e, n, o) { this.$config = a.mixin({}, e || {}), this.$scaleHelper = new i(o), this.$gantt = o, this._posFromDateCache = {}, this._timelineDragScroll = null, a.mixin(this, s(this)), r(this) }; c.prototype = { init: function(t) { t.innerHTML += "
", this.$task = t.childNodes[0], this.$task.innerHTML = "
", this.$task_scale = this.$task.childNodes[0], this.$task_data = this.$task.childNodes[1], this.$task_data.innerHTML = "
", this.$task_bg = this.$task_data.childNodes[0], this.$task_links = this.$task_data.childNodes[1], this.$task_bars = this.$task_data.childNodes[2], this._tasks = { col_width: 0, width: [], full_width: 0, trace_x: [], rendered: {} }; var e = this.$getConfig() , n = e[this.$config.bind + "_attribute"] , i = e[this.$config.bindLinks + "_attribute"]; !n && this.$config.bind && (n = "data-" + this.$config.bind + "-id"), !i && this.$config.bindLinks && (i = "data-" + this.$config.bindLinks + "-id"), this.$config.item_attribute = n || null, this.$config.link_attribute = i || null; var r = this._createLayerConfig(); this.$config.layers || (this.$config.layers = r.tasks), this.$config.linkLayers || (this.$config.linkLayers = r.links), this._attachLayers(this.$gantt), this.callEvent("onReady", []), this.$gantt.ext.dragTimeline && (this._timelineDragScroll = this.$gantt.ext.dragTimeline.create(), this._timelineDragScroll.attach(this)) }, setSize: function(t, e) { var n = this.$getConfig(); if (1 * t === t && (this.$config.width = t), 1 * e === e) { this.$config.height = e; var i = Math.max(this.$config.height - n.scale_height); this.$task_data.style.height = i + "px" } this.refresh(), this.$task_bg.style.backgroundImage = "", n.smart_rendering && this.$config.rowStore ? this.$task_bg.style.height = this.getTotalHeight() + "px" : this.$task_bg.style.height = ""; for (var r = this._tasks, a = this.$task_data.childNodes, o = 0, s = a.length; o < s; o++) { var l = a[o]; l.hasAttribute("data-layer") && l.style && (l.style.width = r.full_width + "px") } }, isVisible: function() { return this.$parent && this.$parent.$config ? !this.$parent.$config.hidden : this.$task.offsetWidth }, getSize: function() { var t = this.$getConfig() , e = this.$config.rowStore ? this.getTotalHeight() : 0 , n = this.isVisible() ? this._tasks.full_width : 0; return { x: this.isVisible() ? this.$config.width : 0, y: this.isVisible() ? this.$config.height : 0, contentX: this.isVisible() ? n : 0, contentY: this.isVisible() ? t.scale_height + e : 0, scrollHeight: this.isVisible() ? e : 0, scrollWidth: this.isVisible() ? n : 0 } }, scrollTo: function(t, e) { if (this.isVisible()) { var n = !1; this.$config.scrollTop = this.$config.scrollTop || 0, this.$config.scrollLeft = this.$config.scrollLeft || 0, 1 * e === e && (this.$config.scrollTop = e, this.$task_data.scrollTop = this.$config.scrollTop, n = !0), 1 * t === t && (this.$task.scrollLeft = t, this.$config.scrollLeft = this.$task.scrollLeft, this._refreshScales(), n = !0), n && this.callEvent("onScroll", [this.$config.scrollLeft, this.$config.scrollTop]) } }, _refreshScales: function() { if (this.isVisible() && this.$getConfig().smart_scales) { var t = this.getViewPort() , e = this._scales; this.$task_scale.innerHTML = this._getScaleChunkHtml(e, t.x, t.x_end) } }, getViewPort: function() { var t = this.$config.scrollLeft || 0 , e = this.$config.scrollTop || 0 , n = this.$config.height || 0 , i = this.$config.width || 0; return { y: e, y_end: e + n, x: t, x_end: t + i, height: n, width: i } }, _createLayerConfig: function() { var t = this , e = function() { return t.isVisible() }; return { tasks: [{ expose: !0, renderer: this.$gantt.$ui.layers.taskBar(), container: this.$task_bars, filter: [e, function(t, e) { return !e.hide_bar } ] }, { renderer: this.$gantt.$ui.layers.taskSplitBar(), filter: [e], container: this.$task_bars, append: !0 }, { renderer: this.$gantt.$ui.layers.taskRollupBar(), filter: [e], container: this.$task_bars, append: !0 }, { renderer: this.$gantt.$ui.layers.taskBg(), container: this.$task_bg, filter: [e] }], links: [{ expose: !0, renderer: this.$gantt.$ui.layers.link(), container: this.$task_links, filter: [e] }] } }, _attachLayers: function(t) { this._taskLayers = [], this._linkLayers = []; var e = this , n = this.$gantt.$services.getService("layers"); if (this.$config.bind) { this._bindStore(); var i = n.getDataRender(this.$config.bind); i || (i = n.createDataRender({ name: this.$config.bind, defaultContainer: function() { return e.$task_data } })), i.container = function() { return e.$task_data } ; for (var r = this.$config.layers, a = 0; r && a < r.length; a++) { "string" == typeof (c = r[a]) && (c = this.$gantt.$ui.layers[c]()), ("function" == typeof c || c && c.render && c.update) && (c = { renderer: c }), c.view = this; var o = i.addLayer(c); this._taskLayers.push(o), c.expose && (this._taskRenderer = i.getLayer(o)) } this._initStaticBackgroundRender() } if (this.$config.bindLinks) { e.$config.linkStore = e.$gantt.getDatastore(e.$config.bindLinks); var s = n.getDataRender(this.$config.bindLinks); s || (s = n.createDataRender({ name: this.$config.bindLinks, defaultContainer: function() { return e.$task_data } })); var l = this.$config.linkLayers; for (a = 0; l && a < l.length; a++) { var c; "string" == typeof c && (c = this.$gantt.$ui.layers[c]()), (c = l[a]).view = this; var u = s.addLayer(c); this._taskLayers.push(u), l[a].expose && (this._linkRenderer = s.getLayer(u)) } } }, _initStaticBackgroundRender: function() { var t = this , e = l.create() , n = t.$config.rowStore; n && (this._staticBgHandler = n.attachEvent("onStoreUpdated", function(n, i, r) { if (null === n && t.isVisible()) { var a = t.$getConfig(); if (a.static_background || a.timeline_placeholder) { var o = t.$gantt.getDatastore(t.$config.bind) , s = t.$task_bg_static; if (s || ((s = document.createElement("div")).className = "gantt_task_bg", t.$task_bg_static = s, t.$task_bg.nextSibling ? t.$task_data.insertBefore(s, t.$task_bg.nextSibling) : t.$task_data.appendChild(s)), o) { var l = t.getTotalHeight(); a.timeline_placeholder && (l = a.timeline_placeholder.height || t.$task_data.offsetHeight || 99999), e.render(s, a, t.getScale(), l, t.getItemHeight(i ? i.id : null)) } } else a.static_background && t.$task_bg_static && t.$task_bg_static.parentNode && t.$task_bg_static.parentNode.removeChild(t.$task_bg_static) } }), this.attachEvent("onDestroy", function() { e.destroy() }), this._initStaticBackgroundRender = function() {} ) }, _clearLayers: function(t) { var e = this.$gantt.$services.getService("layers") , n = e.getDataRender(this.$config.bind) , i = e.getDataRender(this.$config.bindLinks); if (this._taskLayers) for (var r = 0; r < this._taskLayers.length; r++) n.removeLayer(this._taskLayers[r]); if (this._linkLayers) for (r = 0; r < this._linkLayers.length; r++) i.removeLayer(this._linkLayers[r]); this._linkLayers = [], this._taskLayers = [] }, _render_tasks_scales: function() { var t = this.$getConfig() , e = "" , n = 0 , i = 0 , r = this.$gantt.getState(); if (this.isVisible()) { var a = this.$scaleHelper , o = this._getScales(); i = t.scale_height; var s = this.$config.width; "x" != t.autosize && "xy" != t.autosize || (s = Math.max(t.autosize_min_width, 0)); var l = a.prepareConfigs(o, t.min_column_width, s, i - 1, r.min_date, r.max_date, t.rtl) , c = this._tasks = l[l.length - 1]; this._scales = l, this._posFromDateCache = {}, e = this._getScaleChunkHtml(l, 0, this.$config.width), n = c.full_width + "px", i += "px" } this.$task_scale.style.height = i, this.$task_data.style.width = this.$task_scale.style.width = n, this.$task_scale.innerHTML = e }, _getScaleChunkHtml: function(t, e, n) { for (var i = [], r = this.$gantt.templates.scale_row_class, a = 0; a < t.length; a++) { var o = "gantt_scale_line" , s = r(t[a]); s && (o += " " + s), i.push('
' + this._prepareScaleHtml(t[a], e, n) + "
") } return i.join("") }, _prepareScaleHtml: function(t, e, n) { var i = this.$getConfig() , r = this.$gantt.templates , a = [] , s = null , l = null , c = t.format || t.template || t.date; "string" == typeof c && (c = this.$gantt.date.date_to_str(c)); var u = 0 , d = t.count; !i.smart_scales || isNaN(e) || isNaN(n) || (u = o.findBinary(t.left, e), d = o.findBinary(t.left, n) + 1), l = t.css || function() {} , !t.css && i.inherit_scale_class && (l = r.scale_cell_class); for (var h = u; h < d && t.trace_x[h]; h++) { s = new Date(t.trace_x[h]); var f = c.call(this, s) , _ = t.width[h] , g = t.height , p = t.left[h] , v = "" , m = "" , y = ""; if (_) { v = "width:" + _ + "px;height:" + g + "px;" + (i.smart_scales ? "position:absolute;left:" + p + "px" : ""), y = "gantt_scale_cell" + (h == t.count - 1 ? " gantt_last_cell" : ""), (m = l.call(this, s)) && (y += " " + m); var k = "
" + f + "
"; a.push(k) } } return a.join("") }, dateFromPos: function(t) { var e = this._tasks; if (t < 0 || t > e.full_width || !e.full_width) return null; var n = o.findBinary(this._tasks.left, t) , i = this._tasks.left[n] , r = e.width[n] || e.col_width , a = 0; r && (a = (t - i) / r, e.rtl && (a = 1 - a)); var s = 0; return a && (s = this._getColumnDuration(e, e.trace_x[n])), new Date(e.trace_x[n].valueOf() + Math.round(a * s)) }, posFromDate: function(t) { if (!this.isVisible()) return 0; if (!t) return 0; var e = String(t.valueOf()); if (void 0 !== this._posFromDateCache[e]) return this._posFromDateCache[e]; var n = this.columnIndexByDate(t); this.$gantt.assert(n >= 0, "Invalid day index"); var i = Math.floor(n) , r = n % 1 , a = this._tasks.left[Math.min(i, this._tasks.width.length - 1)]; i == this._tasks.width.length && (a += this._tasks.width[this._tasks.width.length - 1]), r && (i < this._tasks.width.length ? a += this._tasks.width[i] * (r % 1) : a += 1); var o = Math.round(a); return this._posFromDateCache[e] = o, Math.round(o) }, _getNextVisibleColumn: function(t, e, n) { for (var i = +e[t], r = t; n[i]; ) i = +e[++r]; return r }, _getPrevVisibleColumn: function(t, e, n) { for (var i = +e[t], r = t; n[i]; ) i = +e[--r]; return r }, _getClosestVisibleColumn: function(t, e, n) { var i = this._getNextVisibleColumn(t, e, n); return e[i] || (i = this._getPrevVisibleColumn(t, e, n)), i }, columnIndexByDate: function(t) { var e = new Date(t).valueOf() , n = this._tasks.trace_x_ascending , i = this._tasks.ignore_x , r = this.$gantt.getState(); if (e <= r.min_date) return this._tasks.rtl ? n.length : 0; if (e >= r.max_date) return this._tasks.rtl ? 0 : n.length; var a = o.findBinary(n, e) , s = this._getClosestVisibleColumn(a, n, i) , l = n[s] , c = this._tasks.trace_index_transition; if (!l) return c ? c[0] : 0; var u = (t - n[s]) / this._getColumnDuration(this._tasks, n[s]); return c ? c[s] + (1 - u) : s + u }, getItemPosition: function(t, e, n) { var i, r, a; return this._tasks.rtl ? (r = this.posFromDate(e || t.start_date), i = this.posFromDate(n || t.end_date)) : (i = this.posFromDate(e || t.start_date), r = this.posFromDate(n || t.end_date)), a = Math.max(r - i, 0), { left: i, top: this.getItemTop(t.id), height: this.getBarHeight(t.id), width: a, rowHeight: this.getItemHeight(t.id) } }, getBarHeight: function(t, e) { var n = this.$getConfig() , i = this.$config.rowStore.getItem(t) , r = i.task_height || i.bar_height || n.bar_height || n.task_height , a = this.getItemHeight(t); "full" == r && (r = a - (n.task_height_offset || 5)); return r = Math.min(r, a), e && (r = Math.round(r / Math.sqrt(2))), Math.max(r, 0) }, getScale: function() { return this._tasks }, _getScales: function() { var t = this.$getConfig() , e = this.$scaleHelper , n = [e.primaryScale(t)].concat(e.getSubScales(t)); return e.sortScales(n), n }, _getColumnDuration: function(t, e) { return this.$gantt.date.add(e, t.step, t.unit) - e }, _bindStore: function() { if (this.$config.bind) { var t = this.$gantt.getDatastore(this.$config.bind); if (this.$config.rowStore = t, t && !t._timelineCacheAttached) { var e = this; t._timelineCacheAttached = t.attachEvent("onBeforeFilter", function() { e._resetTopPositionHeight() }) } } }, _unbindStore: function() { if (this.$config.bind) { var t = this.$gantt.getDatastore(this.$config.bind); t && t._timelineCacheAttached && (t.detachEvent(t._timelineCacheAttached), t._timelineCacheAttached = !1) } }, refresh: function() { this._bindStore(), this.$config.bindLinks && (this.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks)), this._resetTopPositionHeight(), this._resetHeight(), this._initStaticBackgroundRender(), this._render_tasks_scales() }, destructor: function() { var t = this.$gantt; this._clearLayers(t), this._unbindStore(), this.$task = null, this.$task_scale = null, this.$task_data = null, this.$task_bg = null, this.$task_links = null, this.$task_bars = null, this.$gantt = null, this.$config.rowStore && (this.$config.rowStore.detachEvent(this._staticBgHandler), this.$config.rowStore = null), this.$config.linkStore && (this.$config.linkStore = null), this._timelineDragScroll && (this._timelineDragScroll.destructor(), this._timelineDragScroll = null), this.callEvent("onDestroy", []), this.detachAllEvents() } }, t.exports = c } , function(t, e) { t.exports = function(t, e, n) { return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: 0, right: 1 / 0 } } } , function(t, e) { t.exports = function(t) { var e = []; return { delegate: function(n, i, r, a) { e.push([n, i, r, a]), t.$services.getService("mouseEvents").delegate(n, i, r, a) }, destructor: function() { for (var n = t.$services.getService("mouseEvents"), i = 0; i < e.length; i++) { var r = e[i]; n.detach(r[0], r[1], r[2], r[3]) } e = [] } } } } , function(t, e, n) { var i = n(1) , r = n(0) , a = n(5) , o = n(209) , s = n(43) , l = n(207) , c = n(206).default , u = function(t, e, n, i) { this.$config = r.mixin({}, e || {}), this.$gantt = i, this.$parent = t, a(this), this.$state = {}, r.mixin(this, s(this)) }; u.prototype = { init: function(t) { var e = this.$gantt , i = e._waiAria.gridAttrString() , r = e._waiAria.gridDataAttrString() , a = this.$getConfig() , s = a.reorder_grid_columns || !1; void 0 !== this.$config.reorder_grid_columns && (s = this.$config.reorder_grid_columns), t.innerHTML = "
", this.$grid = t.childNodes[0], this.$grid.innerHTML = "
", this.$grid_scale = this.$grid.childNodes[0], this.$grid_data = this.$grid.childNodes[1]; var u = a[this.$config.bind + "_attribute"]; if (!u && this.$config.bind && (u = "data-" + this.$config.bind + "-id"), this.$config.item_attribute = u || null, !this.$config.layers) { var d = this._createLayerConfig(); this.$config.layers = d } var h = o(e, this); h.init(), this._renderHeaderResizers = h.doOnRender, this._mouseDelegates = n(31)(e), l(e, this).init(), this._addLayers(this.$gantt), this._initEvents(), s && (this._columnDND = new c(e,this), this._columnDND.init()), this.callEvent("onReady", []) }, _validateColumnWidth: function(t, e) { var n = t[e]; if (n && "*" != n) { var i = this.$gantt , r = 1 * n; isNaN(r) ? i.assert(!1, "Wrong " + e + " value of column " + t.name) : t[e] = r } }, setSize: function(t, e) { this.$config.width = this.$state.width = t, this.$config.height = this.$state.height = e; for (var n, i = this.getGridColumns(), r = 0, a = (d = this.$getConfig()).grid_elastic_columns, o = 0, s = i.length; o < s; o++) this._validateColumnWidth(i[o], "min_width"), this._validateColumnWidth(i[o], "max_width"), this._validateColumnWidth(i[o], "width"), r += 1 * i[o].width; if (!isNaN(r) && this.$config.scrollable || (r = n = this._setColumnsWidth(t + 1)), this.$config.scrollable && a && !isNaN(r)) { var l = "width"; "min_width" == a && (l = "min_width"); var c = 0; i.forEach(function(t) { c += t[l] || d.min_grid_column_width }); var u = Math.max(c, t); r = this._setColumnsWidth(u), n = t } this.$config.scrollable ? (this.$grid_scale.style.width = r + "px", this.$grid_data.style.width = r + "px") : (this.$grid_scale.style.width = "inherit", this.$grid_data.style.width = "inherit"), this.$config.width -= 1; var d = this.$getConfig(); n !== t && (void 0 !== n ? (d.grid_width = n, this.$config.width = n - 1) : isNaN(r) || (this._setColumnsWidth(r), d.grid_width = r, this.$config.width = r - 1)); var h = Math.max(this.$state.height - d.scale_height, 0); this.$grid_data.style.height = h + "px", this.refresh() }, getSize: function() { var t = this.$getConfig() , e = this.$config.rowStore ? this.getTotalHeight() : 0 , n = this._getGridWidth(); return { x: this.$state.width, y: this.$state.height, contentX: this.isVisible() ? n : 0, contentY: this.isVisible() ? t.scale_height + e : 0, scrollHeight: this.isVisible() ? e : 0, scrollWidth: this.isVisible() ? n : 0 } }, _bindStore: function() { if (this.$config.bind) { var t = this.$gantt.getDatastore(this.$config.bind); if (this.$config.rowStore = t, t && !t._gridCacheAttached) { var e = this; t._gridCacheAttached = t.attachEvent("onBeforeFilter", function() { e._resetTopPositionHeight() }) } } }, _unbindStore: function() { if (this.$config.bind) { var t = this.$gantt.getDatastore(this.$config.bind); t && t._gridCacheAttached && (t.detachEvent(t._gridCacheAttached), t._gridCacheAttached = !1) } }, refresh: function() { this._bindStore(), this._resetTopPositionHeight(), this._resetHeight(), this._initSmartRenderingPlaceholder(), this._calculateGridWidth(), this._renderGridHeader() }, getViewPort: function() { var t = this.$config.scrollLeft || 0 , e = this.$config.scrollTop || 0 , n = this.$config.height || 0 , i = this.$config.width || 0; return { y: e, y_end: e + n, x: t, x_end: t + i, height: n, width: i } }, scrollTo: function(t, e) { if (this.isVisible()) { var n = !1; this.$config.scrollTop = this.$config.scrollTop || 0, this.$config.scrollLeft = this.$config.scrollLeft || 0, 1 * t == t && (this.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = t, n = !0), 1 * e == e && (this.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = e, n = !0), n && this.callEvent("onScroll", [this.$config.scrollLeft, this.$config.scrollTop]) } }, getColumnIndex: function(t, e) { for (var n = this.$getConfig().columns, i = 0, r = 0; r < n.length; r++) if (e && n[r].hide && i++, n[r].name == t) return r - i; return null }, getColumn: function(t) { var e = this.getColumnIndex(t); return null === e ? null : this.$getConfig().columns[e] }, getGridColumns: function() { return this.$getConfig().columns.slice() }, isVisible: function() { return this.$parent && this.$parent.$config ? !this.$parent.$config.hidden : this.$grid.offsetWidth }, _createLayerConfig: function() { var t = this.$gantt , e = this; return [{ renderer: t.$ui.layers.gridLine(), container: this.$grid_data, filter: [function() { return e.isVisible() } ] }, { renderer: t.$ui.layers.gridTaskRowResizer(), container: this.$grid_data, append: !0, filter: [function() { return t.config.resize_rows } ] }] }, _addLayers: function(t) { if (this.$config.bind) { this._taskLayers = []; var e = this , n = this.$gantt.$services.getService("layers") , i = n.getDataRender(this.$config.bind); i || (i = n.createDataRender({ name: this.$config.bind, defaultContainer: function() { return e.$grid_data } })); for (var r = this.$config.layers, a = 0; r && a < r.length; a++) { var o = r[a]; o.view = this; var s = i.addLayer(o); this._taskLayers.push(s) } this._bindStore(), this._initSmartRenderingPlaceholder() } }, _refreshPlaceholderOnStoreUpdate: function(t) { var e = this.$getConfig() , n = this.$config.rowStore; if (n && null === t && this.isVisible() && e.smart_rendering) { var i; if (this.$config.scrollY) { var r = this.$gantt.$ui.getView(this.$config.scrollY); r && (i = r.getScrollState().scrollSize) } if (i || (i = n ? this.getTotalHeight() : 0), i) { this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode && this.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder); var a = this.$rowsPlaceholder = document.createElement("div"); a.style.visibility = "hidden", a.style.height = i + "px", a.style.width = "1px", this.$grid_data.appendChild(a) } } }, _initSmartRenderingPlaceholder: function() { var t = this.$config.rowStore; t && (this._initSmartRenderingPlaceholder = function() {} , this._staticBgHandler = t.attachEvent("onStoreUpdated", r.bind(this._refreshPlaceholderOnStoreUpdate, this))) }, _initEvents: function() { var t = this.$gantt; this._mouseDelegates.delegate("click", "gantt_close", t.bind(function(t, e, n) { var r = this.$config.rowStore; if (!r) return !0; var a = i.locateAttribute(t, this.$config.item_attribute); return a && r.close(a.getAttribute(this.$config.item_attribute)), !1 }, this), this.$grid), this._mouseDelegates.delegate("click", "gantt_open", t.bind(function(t, e, n) { var r = this.$config.rowStore; if (!r) return !0; var a = i.locateAttribute(t, this.$config.item_attribute); return a && r.open(a.getAttribute(this.$config.item_attribute)), !1 }, this), this.$grid) }, _clearLayers: function(t) { var e = this.$gantt.$services.getService("layers").getDataRender(this.$config.bind); if (this._taskLayers) for (var n = 0; n < this._taskLayers.length; n++) e.removeLayer(this._taskLayers[n]); this._taskLayers = [] }, _getColumnWidth: function(t, e, n) { var i = t.min_width || e.min_grid_column_width , r = Math.max(n, i || 10); return t.max_width && (r = Math.min(r, t.max_width)), r }, _checkGridColumnMinWidthLimits: function(t, e) { for (var n = 0, i = t.length; n < i; n++) { var r = 1 * t[n].width; !t[n].min_width && r < e.min_grid_column_width && (t[n].min_width = r) } }, _getGridWidthLimits: function() { for (var t = this.$getConfig(), e = this.getGridColumns(), n = 0, i = 0, r = 0; r < e.length; r++) n += e[r].min_width ? e[r].min_width : t.min_grid_column_width, void 0 !== i && (i = e[r].max_width ? i + e[r].max_width : void 0); return this._checkGridColumnMinWidthLimits(e, t), [n, i] }, _setColumnsWidth: function(t, e) { var n = this.$getConfig() , i = this.getGridColumns() , r = 0 , a = t; e = window.isNaN(e) ? -1 : e; for (var o = 0, s = i.length; o < s; o++) r += 1 * i[o].width; if (window.isNaN(r)) { this._calculateGridWidth(), r = 0; for (o = 0, s = i.length; o < s; o++) r += 1 * i[o].width } var l = a - r , c = 0; for (o = 0; o < e + 1; o++) c += i[o].width; r -= c; for (o = e + 1; o < i.length; o++) { var u = i[o] , d = Math.round(l * (u.width / r)); l < 0 ? u.min_width && u.width + d < u.min_width ? d = u.min_width - u.width : !u.min_width && n.min_grid_column_width && u.width + d < n.min_grid_column_width && (d = n.min_grid_column_width - u.width) : u.max_width && u.width + d > u.max_width && (d = u.max_width - u.width), r -= u.width, u.width += d, l -= d } for (var h = l > 0 ? 1 : -1; l > 0 && 1 === h || l < 0 && -1 === h; ) { var f = l; for (o = e + 1; o < i.length; o++) { var _; if ((_ = i[o].width + h) == this._getColumnWidth(i[o], n, _) && (l -= h, i[o].width = _), !l) break } if (f == l) break } l && e > -1 && ((_ = i[e].width + l) == this._getColumnWidth(i[e], n, _) && (i[e].width = _)); return this._getColsTotalWidth() }, _getColsTotalWidth: function() { for (var t = this.getGridColumns(), e = 0, n = 0; n < t.length; n++) { var i = parseFloat(t[n].width); if (window.isNaN(i)) return !1; e += i } return e }, _calculateGridWidth: function() { for (var t = this.$getConfig(), e = this.getGridColumns(), n = 0, i = [], r = [], a = 0; a < e.length; a++) { var o = parseFloat(e[a].width); window.isNaN(o) && (o = t.min_grid_column_width || 10, i.push(a)), r[a] = o, n += o } var s = this._getGridWidth() + 1; if (t.autofit || i.length) { var l = s - n; if (t.autofit && !t.grid_elastic_columns) for (a = 0; a < r.length; a++) { var c = Math.round(l / (r.length - a)); r[a] += c, (u = this._getColumnWidth(e[a], t, r[a])) != r[a] && (c = u - r[a], r[a] = u), l -= c } else if (i.length) for (a = 0; a < i.length; a++) { c = Math.round(l / (i.length - a)); var u, d = i[a]; r[d] += c, (u = this._getColumnWidth(e[d], t, r[d])) != r[d] && (c = u - r[d], r[d] = u), l -= c } for (a = 0; a < r.length; a++) e[a].width = r[a] } else { var h = s != n; this.$config.width = n - 1, t.grid_width = n, h && this.$parent._setContentSize(this.$config.width, null) } }, _renderGridHeader: function() { var t = this.$gantt , e = this.$getConfig() , n = this.$gantt.locale , i = this.$gantt.templates , r = this.getGridColumns(); e.rtl && (r = r.reverse()); for (var a = [], o = 0, s = n.labels, l = e.scale_height - 1, c = 0; c < r.length; c++) { var u = c == r.length - 1 , d = r[c]; d.name || (d.name = t.uid() + ""); var h = 1 * d.width , f = this._getGridWidth(); u && f > o + h && (d.width = h = f - o), o += h; var _ = t._sort && d.name == t._sort.name ? "
" : "" , g = ["gantt_grid_head_cell", "gantt_grid_head_" + d.name, u ? "gantt_last_cell" : "", i.grid_header_class(d.name, d)].join(" ") , p = "width:" + (h - (u ? 1 : 0)) + "px;" , v = d.label || s["column_" + d.name] || s[d.name]; v = v || ""; var m = "
" + v + _ + "
"; a.push(m) } this.$grid_scale.style.height = e.scale_height + "px", this.$grid_scale.style.lineHeight = l + "px", this.$grid_scale.innerHTML = a.join(""), this._renderHeaderResizers && this._renderHeaderResizers() }, _getGridWidth: function() { return this.$config.width }, destructor: function() { this._clearLayers(this.$gantt), this._mouseDelegates && (this._mouseDelegates.destructor(), this._mouseDelegates = null), this._unbindStore(), this.$grid = null, this.$grid_scale = null, this.$grid_data = null, this.$gantt = null, this.$config.rowStore && (this.$config.rowStore.detachEvent(this._staticBgHandler), this.$config.rowStore = null), this.callEvent("onDestroy", []), this.detachAllEvents() } }, t.exports = u } , function(t, e, n) { var i = n(0); t.exports = function(t) { var e = t.date , n = t.$services; return { getSum: function(t, e, n) { void 0 === n && (n = t.length - 1), void 0 === e && (e = 0); for (var i = 0, r = e; r <= n; r++) i += t[r]; return i }, setSumWidth: function(t, e, n, i) { var r = e.width; void 0 === i && (i = r.length - 1), void 0 === n && (n = 0); var a = i - n + 1; if (!(n > r.length - 1 || a <= 0 || i > r.length - 1)) { var o = t - this.getSum(r, n, i); this.adjustSize(o, r, n, i), this.adjustSize(-o, r, i + 1), e.full_width = this.getSum(r) } }, splitSize: function(t, e) { for (var n = [], i = 0; i < e; i++) n[i] = 0; return this.adjustSize(t, n), n }, adjustSize: function(t, e, n, i) { n || (n = 0), void 0 === i && (i = e.length - 1); for (var r = i - n + 1, a = this.getSum(e, n, i), o = n; o <= i; o++) { var s = Math.floor(t * (a ? e[o] / a : 1 / r)); a -= e[o], t -= s, r--, e[o] += s } e[e.length - 1] += t }, sortScales: function(t) { function n(t, n) { var i = new Date(1970,0,1); return e.add(i, n, t) - i } t.sort(function(t, e) { return n(t.unit, t.step) < n(e.unit, e.step) ? 1 : n(t.unit, t.step) > n(e.unit, e.step) ? -1 : 0 }); for (var i = 0; i < t.length; i++) t[i].index = i }, _isLegacyMode: function(e) { var n = e || t.config; return n.scale_unit || n.date_scale || n.subscales }, _prepareScaleObject: function(e) { var n = e.format; return n || (n = e.template || e.date || "%d %M"), "string" == typeof n && (n = t.date.date_to_str(n)), { unit: e.unit || "day", step: e.step || 1, format: n, css: e.css } }, primaryScale: function(e) { var i, r = n.getService("templateLoader"), a = this._isLegacyMode(e), o = e || t.config; if (a) r.initTemplate("date_scale", void 0, void 0, o, t.config.templates), i = { unit: t.config.scale_unit, step: t.config.step, template: t.templates.date_scale, date: t.config.date_scale, css: t.templates.scale_cell_class }; else { var s = o.scales[0]; i = { unit: s.unit, step: s.step, template: s.template, format: s.format, date: s.date, css: s.css || t.templates.scale_cell_class } } return this._prepareScaleObject(i) }, getSubScales: function(e) { var n = this._isLegacyMode(e) , i = e || t.config; return (n ? i.subscales || [] : i.scales.slice(1)).map(function(t) { return this._prepareScaleObject(t) } .bind(this)) }, prepareConfigs: function(t, e, n, i, r, a, o) { for (var s = this.splitSize(i, t.length), l = n, c = [], u = t.length - 1; u >= 0; u--) { var d = u == t.length - 1 , h = this.initScaleConfig(t[u], r, a); d && this.processIgnores(h), this.initColSizes(h, e, l, s[u]), this.limitVisibleRange(h), d && (l = h.full_width), c.unshift(h) } for (u = 0; u < c.length - 1; u++) this.alineScaleColumns(c[c.length - 1], c[u]); for (u = 0; u < c.length; u++) o && this.reverseScale(c[u]), this.setPosSettings(c[u]); return c }, reverseScale: function(t) { t.width = t.width.reverse(), t.trace_x = t.trace_x.reverse(); var e = t.trace_indexes; t.trace_indexes = {}, t.trace_index_transition = {}, t.rtl = !0; for (var n = 0; n < t.trace_x.length; n++) t.trace_indexes[t.trace_x[n].valueOf()] = n, t.trace_index_transition[e[t.trace_x[n].valueOf()]] = n; return t }, setPosSettings: function(t) { for (var e = 0, n = t.trace_x.length; e < n; e++) t.left.push((t.width[e - 1] || 0) + (t.left[e - 1] || 0)) }, _ignore_time_config: function(n, i) { if (t.config.skip_off_time) { for (var r = !0, a = n, o = 0; o < i.step; o++) o && (a = e.add(n, o, i.unit)), r = r && !this.isWorkTime(a, i.unit); return r } return !1 }, processIgnores: function(t) { t.ignore_x = {}, t.display_count = t.count }, initColSizes: function(t, n, i, r) { var a = i; t.height = r; var o = void 0 === t.display_count ? t.count : t.display_count; o || (o = 1), t.col_width = Math.floor(a / o), n && t.col_width < n && (t.col_width = n, a = t.col_width * o), t.width = []; for (var s = t.ignore_x || {}, l = 0; l < t.trace_x.length; l++) if (s[t.trace_x[l].valueOf()] || t.display_count == t.count) t.width[l] = 0; else { var c = 1; "month" == t.unit && (c = Math.round((e.add(t.trace_x[l], t.step, t.unit) - t.trace_x[l]) / 864e5)), t.width[l] = c } this.adjustSize(a - this.getSum(t.width), t.width), t.full_width = this.getSum(t.width) }, initScaleConfig: function(t, e, n) { var r = i.mixin({ count: 0, col_width: 0, full_width: 0, height: 0, width: [], left: [], trace_x: [], trace_indexes: {}, min_date: new Date(e), max_date: new Date(n) }, t); return this.eachColumn(t.unit, t.step, e, n, function(t) { r.count++, r.trace_x.push(new Date(t)), r.trace_indexes[t.valueOf()] = r.trace_x.length - 1 }), r.trace_x_ascending = r.trace_x.slice(), r }, iterateScales: function(t, e, n, i, r) { for (var a = e.trace_x, o = t.trace_x, s = n || 0, l = i || o.length - 1, c = 0, u = 1; u < a.length; u++) { var d = t.trace_indexes[+a[u]]; void 0 !== d && d <= l && (r && r.apply(this, [c, u, s, d]), s = d, c = u) } }, alineScaleColumns: function(t, e, n, i) { this.iterateScales(t, e, n, i, function(n, i, r, a) { var o = this.getSum(t.width, r, a - 1); this.getSum(e.width, n, i - 1) != o && this.setSumWidth(o, e, n, i - 1) }) }, eachColumn: function(n, i, r, a, o) { var s = new Date(r) , l = new Date(a); e[n + "_start"] && (s = e[n + "_start"](s)); var c = new Date(s); for (+c >= +l && (l = e.add(c, i, n)); +c < +l; ) { o.call(this, new Date(c)); var u = c.getTimezoneOffset(); c = e.add(c, i, n), c = t._correct_dst_change(c, u, i, n), e[n + "_start"] && (c = e[n + "_start"](c)) } }, limitVisibleRange: function(t) { var n = t.trace_x , i = t.width.length - 1 , r = 0; if (+n[0] < +t.min_date && 0 != i) { var a = Math.floor(t.width[0] * ((n[1] - t.min_date) / (n[1] - n[0]))); r += t.width[0] - a, t.width[0] = a, n[0] = new Date(t.min_date) } var o = n.length - 1 , s = n[o] , l = e.add(s, t.step, t.unit); if (+l > +t.max_date && o > 0 && (a = t.width[o] - Math.floor(t.width[o] * ((l - t.max_date) / (l - s))), r += t.width[o] - a, t.width[o] = a), r) { for (var c = this.getSum(t.width), u = 0, d = 0; d < t.width.length; d++) { var h = Math.floor(r * (t.width[d] / c)); t.width[d] += h, u += h } this.adjustSize(r - u, t.width) } } } } } , , function(t, e, n) {} , function(t, e, n) { var i = n(2) , r = { getHtmlSelect: function(t, e, n) { var r = "" , o = this; return t = t || [], i.forEach(t, function(t) { var e = [{ key: "value", value: t.key }]; n == t.key && (e[e.length] = { key: "selected", value: "selected" }), t.attributes && (e = e.concat(t.attributes)), r += o.getHtmlOption({ innerHTML: t.label }, e) }), a("select", { innerHTML: r }, e) }, getHtmlOption: function(t, e) { return a("option", t, e) }, getHtmlButton: function(t, e) { return a("button", t, e) }, getHtmlDiv: function(t, e) { return a("div", t, e) }, getHtmlLabel: function(t, e) { return a("label", t, e) }, getHtmlInput: function(t) { return "" } }; function a(t, e, n) { return e = e || [], "<" + t + o(n || []) + ">" + (e.innerHTML || "") + "" } function o(t) { var e = ""; return i.forEach(t, function(t) { e += " " + t.key + "='" + t.value + "'" }), e } t.exports = r } , function(t, e, n) { var i = n(2); t.exports = function(t) { var e = {}; return t.$data.tasksStore.attachEvent("onStoreUpdated", function() { e = {} }), function(n, r, a, o) { var s = n.id + "_" + r + "_" + a.unit + "_" + a.step; return e[s] ? e[s] : e[s] = function(e, n, r, a) { var o, s = !1, l = {}; t.config.process_resource_assignments && n === t.config.resource_property ? (o = "task" == e.$role ? t.getResourceAssignments(e.$resource_id, e.$task_id) : t.getResourceAssignments(e.id), s = !0) : o = "task" == e.$role ? [] : t.getTaskBy(n, e.id); for (var c, u, d, h, f, l = function(e, n, r) { for (var a = n.unit, o = n.step, s = {}, l = {}, c = 0; c < e.length; c++) { var u = e[c] , d = u; r && (d = t.getTask(u.task_id)); var h = u.start_date || d.start_date , f = u.end_date || d.end_date; r && (u.start_date && (h = new Date(Math.max(u.start_date.valueOf(), d.start_date.valueOf()))), u.end_date && (f = new Date(Math.min(u.end_date.valueOf(), d.end_date.valueOf())))); var _ = i.findBinary(n.trace_x, h.valueOf()) , g = new Date(n.trace_x[_] || t.date[a + "_start"](new Date(h))) , p = t.config.work_time ? t.getTaskCalendar(d) : t; for (l[p.id] = {}; g < f; ) { var v = l[p.id] , m = g , y = m.valueOf(); if (g = t.date.add(g, o, a), !1 !== v[y]) { var k = p.isWorkTime({ date: m, task: d, unit: a }); k ? (s[y] || (s[y] = { tasks: [], assignments: [] }), s[y].tasks.push(d), r && s[y].assignments.push(u)) : v[y] = !1 } } } return s }(o, r, s), _ = r.unit, g = r.step, p = [], v = a.$getConfig(), m = 0; m < r.trace_x.length; m++) c = new Date(r.trace_x[m]), u = t.date.add(c, g, _), f = l[c.valueOf()] || {}, d = f.tasks || [], h = f.assignments || [], d.length || v.resource_render_empty_cells ? p.push({ start_date: c, end_date: u, tasks: d, assignments: h }) : p.push(null); return p }(n, r, a, o) } } } , function(t, e, n) { var i = n(3) , r = n(1) , a = function(t) { "use strict"; function e(e, n, i) { var r = t.apply(this, arguments) || this; return e && (r.$root = !0), r._parseConfig(n), r.$name = "layout", r } return i(e, t), e.prototype.destructor = function() { this.$container && this.$view && r.removeNode(this.$view); for (var e = 0; e < this.$cells.length; e++) { this.$cells[e].destructor() } this.$cells = [], t.prototype.destructor.call(this) } , e.prototype._resizeScrollbars = function(t, e) { var n, i = !1, r = [], a = [], o = []; function s(t) { t.$parent.show(), i = !0, r.push(t) } function l(t) { t.$parent.hide(), i = !0, a.push(t) } for (var c = 0; c < e.length; c++) t[(n = e[c]).$config.scroll] ? l(n) : n.shouldHide() ? o.push(n) : n.shouldShow() ? s(n) : n.isVisible() ? r.push(n) : a.push(n); var u = {}; for (c = 0; c < r.length; c++) r[c].$config.group && (u[r[c].$config.group] = !0); o.forEach(function(t) { t.$config.group && u[t.$config.group] || l(t) }); for (c = 0; c < a.length; c++) if ((n = a[c]).$config.group && u[n.$config.group]) { s(n); for (var d = 0; d < r.length; d++) if (r[d] == n) { this.$gantt.$scrollbarRepaint = !0; break } } return i } , e.prototype._syncCellSizes = function(t, e) { if (t) { var n = {}; return this._eachChild(function(t) { t.$config.group && "scrollbar" != t.$name && "resizer" != t.$name && (n[t.$config.group] || (n[t.$config.group] = []), n[t.$config.group].push(t)) }), n[t] && this._syncGroupSize(n[t], e), n[t] } } , e.prototype._syncGroupSize = function(t, e) { if (t.length) for (var n = t[0].$parent._xLayout ? "width" : "height", i = t[0].$parent.getNextSibling(t[0].$id) ? 1 : -1, r = e.value, a = e.isGravity, o = 0; o < t.length; o++) { var s = t[o].getSize() , l = i > 0 ? t[o].$parent.getNextSibling(t[o].$id) : t[o].$parent.getPrevSibling(t[o].$id); "resizer" == l.$name && (l = i > 0 ? l.$parent.getNextSibling(l.$id) : l.$parent.getPrevSibling(l.$id)); var c = l.getSize(); if (a) t[o].$config.gravity = r; else if (l[n]) { var u = s.gravity + c.gravity , d = s[n] + c[n] , h = u / d; t[o].$config.gravity = h * r, l.$config[n] = d - r, l.$config.gravity = u - h * r } else t[o].$config[n] = r; var f = this.$gantt.$ui.getView("grid"); !f || t[o].$content !== f || f.$config.scrollable || a || (this.$gantt.config.grid_width = r) } } , e.prototype.resize = function(e) { var n = !1; if (this.$root && !this._resizeInProgress && (this.callEvent("onBeforeResize", []), n = !0, this._resizeInProgress = !0), t.prototype.resize.call(this, !0), t.prototype.resize.call(this, !1), n) { var i = []; i = (i = (i = i.concat(this.getCellsByType("viewCell"))).concat(this.getCellsByType("viewLayout"))).concat(this.getCellsByType("hostCell")); for (var r = this.getCellsByType("scroller"), a = 0; a < i.length; a++) i[a].$config.hidden || i[a].setContentSize(); var o = this._getAutosizeMode(this.$config.autosize) , s = this._resizeScrollbars(o, r); if (this.$config.autosize && (this.autosize(this.$config.autosize), i.forEach(function(t) { var e = t.$parent , n = e.getContentSize(o); o.x && (e.$config.$originalWidthStored || (e.$config.$originalWidthStored = !0, e.$config.$originalWidth = e.$config.width), e.$config.width = n.width), o.y && (e.$config.$originalHeightStored || (e.$config.$originalHeightStored = !0, e.$config.$originalHeight = e.$config.height), e.$config.height = n.height) }), s = !0), s) { this.resize(); for (a = 0; a < i.length; a++) i[a].$config.hidden || i[a].setContentSize() } this.callEvent("onResize", []) } n && (this._resizeInProgress = !1) } , e.prototype._eachChild = function(t, e) { if (t(e = e || this), e.$cells) for (var n = 0; n < e.$cells.length; n++) this._eachChild(t, e.$cells[n]) } , e.prototype.isChild = function(t) { var e = !1; return this._eachChild(function(n) { n !== t && n.$content !== t || (e = !0) }), e } , e.prototype.getCellsByType = function(t) { var n = []; if (t === this.$name && n.push(this), this.$content && this.$content.$name == t && n.push(this.$content), this.$cells) for (var i = 0; i < this.$cells.length; i++) { var r = e.prototype.getCellsByType.call(this.$cells[i], t); r.length && n.push.apply(n, r) } return n } , e.prototype.getNextSibling = function(t) { var e = this.cellIndex(t); return e >= 0 && this.$cells[e + 1] ? this.$cells[e + 1] : null } , e.prototype.getPrevSibling = function(t) { var e = this.cellIndex(t); return e >= 0 && this.$cells[e - 1] ? this.$cells[e - 1] : null } , e.prototype.cell = function(t) { for (var e = 0; e < this.$cells.length; e++) { var n = this.$cells[e]; if (n.$id === t) return n; var i = n.cell(t); if (i) return i } } , e.prototype.cellIndex = function(t) { for (var e = 0; e < this.$cells.length; e++) if (this.$cells[e].$id === t) return e; return -1 } , e.prototype.moveView = function(t, e) { if (this.$cells[e] !== t) return window.alert("Not implemented"); e += this.$config.header ? 1 : 0; var n = this.$view; e >= n.childNodes.length ? n.appendChild(t.$view) : n.insertBefore(t.$view, n.childNodes[e]) } , e.prototype._parseConfig = function(t) { this.$cells = [], this._xLayout = !t.rows; for (var e = t.rows || t.cols || t.views, n = 0; n < e.length; n++) { var i = e[n]; i.mode = this._xLayout ? "x" : "y"; var r = this.$factory.initUI(i, this); r ? (r.$parent = this, this.$cells.push(r)) : (e.splice(n, 1), n--) } } , e.prototype.getCells = function() { return this.$cells } , e.prototype.render = function() { var t = r.insertNode(this.$container, this.$toHTML()); this.$fill(t, null), this.callEvent("onReady", []), this.resize(), this.render = this.resize } , e.prototype.$fill = function(t, e) { this.$view = t, this.$parent = e; for (var n = r.getChildNodes(t, "gantt_layout_cell"), i = n.length - 1; i >= 0; i--) { var a = this.$cells[i]; a.$fill(n[i], this), a.$config.hidden && a.$view.parentNode.removeChild(a.$view) } } , e.prototype.$toHTML = function() { for (var e = this._xLayout ? "x" : "y", n = [], i = 0; i < this.$cells.length; i++) n.push(this.$cells[i].$toHTML()); return t.prototype.$toHTML.call(this, n.join(""), (this.$root ? "gantt_layout_root " : "") + "gantt_layout gantt_layout_" + e) } , e.prototype.getContentSize = function(t) { for (var e, n, i, r = 0, a = 0, o = 0; o < this.$cells.length; o++) (n = this.$cells[o]).$config.hidden || (e = n.getContentSize(t), "scrollbar" === n.$config.view && t[n.$config.scroll] && (e.height = 0, e.width = 0), n.$config.resizer && (this._xLayout ? e.height = 0 : e.width = 0), i = n._getBorderSizes(), this._xLayout ? (r += e.width + i.horizontal, a = Math.max(a, e.height + i.vertical)) : (r = Math.max(r, e.width + i.horizontal), a += e.height + i.vertical)); return { width: r += (i = this._getBorderSizes()).horizontal, height: a += i.vertical } } , e.prototype._cleanElSize = function(t) { return 1 * (t || "").toString().replace("px", "") || 0 } , e.prototype._getBoxStyles = function(t) { var e = null , n = ["width", "height", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth"] , i = { boxSizing: "border-box" == (e = window.getComputedStyle ? window.getComputedStyle(t, null) : { width: t.clientWidth, height: t.clientHeight }).boxSizing }; e.MozBoxSizing && (i.boxSizing = "border-box" == e.MozBoxSizing); for (var r = 0; r < n.length; r++) i[n[r]] = e[n[r]] ? this._cleanElSize(e[n[r]]) : 0; var a = { horPaddings: i.paddingLeft + i.paddingRight + i.borderLeftWidth + i.borderRightWidth, vertPaddings: i.paddingTop + i.paddingBottom + i.borderTopWidth + i.borderBottomWidth, borderBox: i.boxSizing, innerWidth: i.width, innerHeight: i.height, outerWidth: i.width, outerHeight: i.height }; return a.borderBox ? (a.innerWidth -= a.horPaddings, a.innerHeight -= a.vertPaddings) : (a.outerWidth += a.horPaddings, a.outerHeight += a.vertPaddings), a } , e.prototype._getAutosizeMode = function(t) { var e = { x: !1, y: !1 }; return "xy" === t ? e.x = e.y = !0 : "y" === t || !0 === t ? e.y = !0 : "x" === t && (e.x = !0), e } , e.prototype.autosize = function(t) { var e = this._getAutosizeMode(t) , n = this._getBoxStyles(this.$container) , i = this.getContentSize(t) , r = this.$container; e.x && (n.borderBox && (i.width += n.horPaddings), r.style.width = i.width + "px"), e.y && (n.borderBox && (i.height += n.vertPaddings), r.style.height = i.height + "px") } , e.prototype.getSize = function() { this._sizes = []; for (var e = 0, n = 0, i = 1e11, r = 0, a = 1e11, o = 0, s = 0; s < this.$cells.length; s++) { var l = this._sizes[s] = this.$cells[s].getSize(); this.$cells[s].$config.hidden || (this._xLayout ? (!l.width && l.minWidth ? e += l.minWidth : e += l.width, i += l.maxWidth, n += l.minWidth, r = Math.max(r, l.height), a = Math.min(a, l.maxHeight), o = Math.max(o, l.minHeight)) : (!l.height && l.minHeight ? r += l.minHeight : r += l.height, a += l.maxHeight, o += l.minHeight, e = Math.max(e, l.width), i = Math.min(i, l.maxWidth), n = Math.max(n, l.minWidth))) } var c = t.prototype.getSize.call(this); return c.maxWidth >= 1e5 && (c.maxWidth = i), c.maxHeight >= 1e5 && (c.maxHeight = a), c.minWidth = c.minWidth != c.minWidth ? 0 : c.minWidth, c.minHeight = c.minHeight != c.minHeight ? 0 : c.minHeight, this._xLayout ? (c.minWidth += this.$config.margin * this.$cells.length || 0, c.minWidth += 2 * this.$config.padding || 0, c.minHeight += 2 * this.$config.padding || 0) : (c.minHeight += this.$config.margin * this.$cells.length || 0, c.minHeight += 2 * this.$config.padding || 0), c } , e.prototype._calcFreeSpace = function(t, e, n) { var i = n ? e.minWidth : e.minHeight , r = e.maxWidth , a = t; return a ? (a > r && (a = r), a < i && (a = i), this._free -= a) : ((a = Math.floor(this._free / this._gravity * e.gravity)) > r && (a = r, this._free -= a, this._gravity -= e.gravity), a < i && (a = i, this._free -= a, this._gravity -= e.gravity)), a } , e.prototype._calcSize = function(t, e, n) { var i = t , r = n ? e.minWidth : e.minHeight , a = n ? e.maxWidth : e.maxHeight; return i || (i = Math.floor(this._free / this._gravity * e.gravity)), i > a && (i = a), i < r && (i = r), i } , e.prototype._configureBorders = function() { this.$root && this._setBorders([this._borders.left, this._borders.top, this._borders.right, this._borders.bottom], this); for (var t = this._xLayout ? this._borders.right : this._borders.bottom, e = this.$cells, n = e.length - 1, i = n; i >= 0; i--) if (!e[i].$config.hidden) { n = i; break } for (i = 0; i < e.length; i++) if (!e[i].$config.hidden) { var r = i >= n , a = ""; !r && e[i + 1] && "scrollbar" == e[i + 1].$config.view && (this._xLayout ? r = !0 : a = "gantt_layout_cell_border_transparent"), this._setBorders(r ? [] : [t, a], e[i]) } } , e.prototype._updateCellVisibility = function() { for (var t = this._visibleCells || {}, e = !this._visibleCells, n = {}, i = null, r = [], a = 0; a < this._sizes.length; a++) (i = this.$cells[a]).$config.hide_empty && r.push(i), !e && i.$config.hidden && t[i.$id] ? i._hide(!0) : i.$config.hidden || t[i.$id] || i._hide(!1), i.$config.hidden || (n[i.$id] = !0); this._visibleCells = n; for (a = 0; a < r.length; a++) { var o = !0; (i = r[a]).$cells.forEach(function(t) { t.$config.hidden || t.$config.resizer || (o = !1) }), i.$config.hidden = o } } , e.prototype.setSize = function(e, n) { this._configureBorders(), t.prototype.setSize.call(this, e, n), n = this.$lastSize.contentY, e = this.$lastSize.contentX; var i, r, a = this.$config.padding || 0; this.$view.style.padding = a + "px", this._gravity = 0, this._free = this._xLayout ? e : n, this._free -= 2 * a, this._updateCellVisibility(); for (var o = 0; o < this._sizes.length; o++) if (!(i = this.$cells[o]).$config.hidden) { var s = this.$config.margin || 0; "resizer" != i.$name || s || (s = -1); var l = i.$view , c = this._xLayout ? "marginRight" : "marginBottom"; o !== this.$cells.length - 1 && (l.style[c] = s + "px", this._free -= s), r = this._sizes[o], this._xLayout ? r.width || (this._gravity += r.gravity) : r.height || (this._gravity += r.gravity) } for (o = 0; o < this._sizes.length; o++) if (!(i = this.$cells[o]).$config.hidden) { var u = (r = this._sizes[o]).width , d = r.height; this._xLayout ? this._calcFreeSpace(u, r, !0) : this._calcFreeSpace(d, r, !1) } for (o = 0; o < this.$cells.length; o++) if (!(i = this.$cells[o]).$config.hidden) { r = this._sizes[o]; var h = void 0 , f = void 0; this._xLayout ? (h = this._calcSize(r.width, r, !0), f = n - 2 * a) : (h = e - 2 * a, f = this._calcSize(r.height, r, !1)), i.setSize(h, f) } } , e }(n(14)); t.exports = a } , function(t, e) { t.exports = function(t, e, n, i, r) { var a = n.$gantt.getTask(t.source) , o = n.$gantt.getTask(t.target) , s = n.getItemTop(a.id) , l = n.getItemHeight(a.id) , c = n.getItemTop(o.id) , u = n.getItemHeight(o.id); if (e.y > s + l && e.y > c + u) return !1; if (e.y_end < c && e.y_end < s) return !1; var d = n.posFromDate(a.start_date) , h = n.posFromDate(a.end_date) , f = n.posFromDate(o.start_date) , _ = n.posFromDate(o.end_date); if (d > h) { var g = h; h = d, d = g } if (f > _) { g = _; _ = f, f = g } return d += -100, h += 100, f += -100, _ += 100, !(e.x > h && e.x > _) && !(e.x_end < d && e.x_end < f) } } , function(t, e, n) { var i = n(134); t.exports = function() { var t = [] , e = !1; function n() { t = [], e = !1 } var r = !1; return function(a, o, s, l, c) { !function(t) { r || (r = !0, t.attachEvent("onPreFilter", n), t.attachEvent("onStoreUpdated", n), t.attachEvent("onClearAll", n), t.attachEvent("onBeforeStoreUpdate", n)) }(l), e || function(n, r, a) { var o = r.$getConfig(); n.getVisibleItems().forEach(function(e) { var n = i(e, r, o, a); n && t.push({ id: e.id, rec: n }) }), t.sort(function(t, e) { return t.rec.right < e.rec.right ? -1 : 1 }), e = !0 }(l, o, a); for (var u = [], d = 0; d < t.length; d++) { var h = t[d] , f = h.rec; f.right < c.x || f.left < c.x_end && f.right > c.x && f.top < c.y_end && f.bottom > c.y && u.push(h.id) } return { ids: u } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(196) , r = n(195) , a = n(194); e.LargerUnitsCache = a.LargerUnitsCache, e.createCacheObject = function() { return "undefined" != typeof Map ? new i.WorkUnitsMapCache : new r.WorkUnitsObjectCache } } , function(t, e, n) { var i = n(0) , r = n(2); function a(t, e, n, i, r) { return this.date = t, this.unit = e, this.task = n, this.id = i, this.calendar = r, this } function o(t, e, n, i, r, a) { return this.date = t, this.dir = e, this.unit = n, this.task = i, this.id = r, this.calendar = a, this } function s(t, e, n, i, r, a, o) { return this.start_date = t, this.duration = e, this.unit = n, this.step = i, this.task = r, this.id = a, this.calendar = o, this } function l(t, e, n, i) { return this.start_date = t, this.end_date = e, this.task = n, this.calendar = i, this.unit = null, this.step = null, this } t.exports = function(t) { return { getWorkHoursArguments: function() { var e = arguments[0]; if (e = r.isDate(e) ? { date: e } : i.mixin({}, e), !r.isValidDate(e.date)) throw t.assert(!1, "Invalid date argument for getWorkHours method"), new Error("Invalid date argument for getWorkHours method"); return e }, setWorkTimeArguments: function() { return arguments[0] }, unsetWorkTimeArguments: function() { return arguments[0] }, isWorkTimeArguments: function() { var e, n = arguments[0]; if (n instanceof a) return n; if ((e = n.date ? new a(n.date,n.unit,n.task,null,n.calendar) : new a(arguments[0],arguments[1],arguments[2],null,arguments[3])).unit = e.unit || t.config.duration_unit, !r.isValidDate(e.date)) throw t.assert(!1, "Invalid date argument for isWorkTime method"), new Error("Invalid date argument for isWorkTime method"); return e }, getClosestWorkTimeArguments: function(e) { var n, i = arguments[0]; if (i instanceof o) return i; if (n = r.isDate(i) ? new o(i) : new o(i.date,i.dir,i.unit,i.task,null,i.calendar), i.id && (n.task = i), n.dir = i.dir || "any", n.unit = i.unit || t.config.duration_unit, !r.isValidDate(n.date)) throw t.assert(!1, "Invalid date argument for getClosestWorkTime method"), new Error("Invalid date argument for getClosestWorkTime method"); return n }, _getStartEndConfig: function(e) { var n, i = l; if (e instanceof i) return e; if (r.isDate(e) ? n = new i(arguments[0],arguments[1],arguments[2],arguments[3]) : (n = new i(e.start_date,e.end_date,e.task), null !== e.id && void 0 !== e.id && (n.task = e)), n.unit = n.unit || t.config.duration_unit, n.step = n.step || t.config.duration_step, n.start_date = n.start_date || n.start || n.date, !r.isValidDate(n.start_date)) throw t.assert(!1, "Invalid start_date argument for getDuration method"), new Error("Invalid start_date argument for getDuration method"); if (!r.isValidDate(n.end_date)) throw t.assert(!1, "Invalid end_date argument for getDuration method"), new Error("Invalid end_date argument for getDuration method"); return n }, getDurationArguments: function(t, e, n, i) { return this._getStartEndConfig.apply(this, arguments) }, hasDurationArguments: function(t, e, n, i) { return this._getStartEndConfig.apply(this, arguments) }, calculateEndDateArguments: function(e, n, i, a) { var o, l = arguments[0]; if (l instanceof s) return l; if (o = r.isDate(l) ? new s(arguments[0],arguments[1],arguments[2],void 0,arguments[3],void 0,arguments[4]) : new s(l.start_date,l.duration,l.unit,l.step,l.task,null,l.calendar), null !== l.id && void 0 !== l.id && (o.task = l, o.unit = null, o.step = null), o.unit = o.unit || t.config.duration_unit, o.step = o.step || t.config.duration_step, !r.isValidDate(o.start_date)) throw t.assert(!1, "Invalid start_date argument for calculateEndDate method"), new Error("Invalid start_date argument for calculateEndDate method"); return o } } } } , function(t, e, n) { var i = n(208); t.exports = function(t) { var e = {} , n = {} , r = null , a = -1 , o = null , s = i(t); return { _resetTopPositionHeight: function() { e = {}, n = {}, s.resetCache() }, _resetHeight: function() { var t = this.$config.rowStore , e = this.getCacheStateTotalHeight(t); o ? this.shouldClearHeightCache(o, e) && (o = e, r = null) : o = e, a = -1, s.resetCache() }, getRowTop: function(t) { if (s.canUseSimpleCalculation()) return s.getRowTop(t); var e = this.$config.rowStore; if (!e) return 0; if (void 0 !== n[t]) return n[t]; for (var i = e.getIndexRange(), r = 0, a = 0, o = 0; o < i.length; o++) n[o] = r, r += this.getItemHeight(i[o].id), o < t && (a = r); return a }, getItemTop: function(t) { if (this.$config.rowStore) { if (void 0 !== e[t]) return e[t]; var n = this.$config.rowStore; if (!n) return 0; var i = n.getIndexById(t); if (-1 === i && n.getParent && n.exists(t)) { var r = n.getParent(t); if (n.exists(r)) { var a = n.getItem(r); if (this.$gantt.isSplitTask(a)) return this.getItemTop(r) } } return e[t] = this.getRowTop(i), e[t] } return 0 }, getItemHeight: function(t) { if (s.canUseSimpleCalculation()) return s.getItemHeight(t); if (!r && this.$config.rowStore && this._fillHeightCache(this.$config.rowStore), void 0 !== r[t]) return r[t]; var e = this.$getConfig().row_height; if (this.$config.rowStore) { var n = this.$config.rowStore; if (!n) return e; var i = n.getItem(t); return r[t] = i && i.row_height || e } return e }, _fillHeightCache: function(t) { if (t) { r = {}; var e = this.$getConfig().row_height; t.eachItem(function(t) { return r[t.id] = t && t.row_height || e }) } }, getCacheStateTotalHeight: function(t) { var e = this.$getConfig().row_height , n = {} , i = [] , r = 0; return t && t.eachItem(function(t) { i.push(t), n[t.id] = t.row_height, r += t.row_height || e }), { globalHeight: e, items: i, count: i.length, sumHeight: r } }, shouldClearHeightCache: function(t, e) { if (t.count != e.count) return !0; if (t.globalHeight != e.globalHeight) return !0; if (t.sumHeight != e.sumHeight) return !0; for (var n in t.items) { var i = e.items[n]; if (void 0 !== i && i != t.items[n]) return !0 } return !1 }, getTotalHeight: function() { if (s.canUseSimpleCalculation()) return s.getTotalHeight(); if (-1 != a) return a; if (this.$config.rowStore) { var t = this.$config.rowStore; this._fillHeightCache(t); var e = this.getItemHeight.bind(this) , n = 0; return t.getVisibleItems().forEach(function(t) { n += e(t.id) }), a = n, n } return 0 }, getItemIndexByTopPosition: function(t) { if (this.$config.rowStore) { if (s.canUseSimpleCalculation()) return s.getItemIndexByTopPosition(t); for (var e = this.$config.rowStore, n = 0; n < e.countVisible(); n++) { var i = this.getRowTop(n) , r = this.getRowTop(n + 1); if (!r) { var a = e.getIdByIndex(n); r = i + this.getItemHeight(a) } if (t >= i && t < r) return n } return e.countVisible() + 2 } return 0 } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t() { var t = this; this.canParse = function(e) { return !isNaN(t.parse(e)) } , this.format = function(t) { return String(t) } , this.parse = function(t) { return parseInt(t, 10) } } return t.create = function(e) { return void 0 === e && (e = null), new t } , t }(); e.default = i } , function(t, e) { function n(t, e, n) { for (var i = 0; i < e.length; i++) t.isLinkExists(e[i]) && (n[e[i]] = t.getLink(e[i])) } function i(t, e, i) { n(t, e.$source, i), n(t, e.$target, i) } t.exports = { getSubtreeLinks: function(t, e) { var n = {}; return t.isTaskExists(e) && i(t, t.getTask(e), n), t.eachTask(function(e) { i(t, e, n) }, e), n }, getSubtreeTasks: function(t, e) { var n = {}; return t.eachTask(function(t) { n[t.id] = t }, e), n } } } , function(t, e, n) { var i = n(33) , r = n(33); function a(t) { var e = function(t) { var e = new r(t).primaryScale() , n = e.unit , a = e.step; if (t.config.scale_offset_minimal) { var o = new i(t) , s = [o.primaryScale()].concat(o.getSubScales()); o.sortScales(s), n = s[s.length - 1].unit, a = s[s.length - 1].step || 1 } return { unit: n, step: a } }(t) , n = e.unit , a = e.step , o = function(t, e) { var n = { start_date: null, end_date: null }; if (e.config.start_date && e.config.end_date) { n.start_date = e.date[t + "_start"](new Date(e.config.start_date)); var i = new Date(e.config.end_date) , r = e.date[t + "_start"](new Date(i)); i = +i != +r ? e.date.add(r, 1, t) : r, n.end_date = i } return n }(n, t); if (!o.start_date || !o.end_date) { for (var s = !0, l = t.getTaskByTime(), c = 0; c < l.length; c++) { if (l[c].type !== t.config.types.project) { s = !1; break } } if (l.length && s) { var u = l[0].start_date , d = t.date.add(u, 1, t.config.duration_unit); o = { start_date: new Date(u), end_date: new Date(d) } } else o = t.getSubtaskDates(); o.start_date && o.end_date || (o = { start_date: new Date, end_date: new Date }), o.start_date = t.date[n + "_start"](o.start_date), o.start_date = t.calculateEndDate({ start_date: t.date[n + "_start"](o.start_date), duration: -1, unit: n, step: a }), o.end_date = t.date[n + "_start"](o.end_date), o.end_date = t.calculateEndDate({ start_date: o.end_date, duration: 2, unit: n, step: a }) } t._min_date = o.start_date, t._max_date = o.end_date } t.exports = function(t) { a(t), function(t) { if (t.config.fit_tasks) { var e = +t._min_date , n = +t._max_date; if (+t._min_date != e || +t._max_date != n) return t.render(), t.callEvent("onScaleAdjusted", []), !0 } }(t) } } , function(t, e, n) { var i = n(48) , r = n(0) , a = n(2) , o = n(49) , s = n(16) , l = n(2).replaceValidZeroId; o.default && (o = o.default); var c = function(t) { o.apply(this, [t]), this._branches = {}, this.pull = {}, this.$initItem = function(e) { var n = e; t.initItem && (n = t.initItem(n)); var i = this.getItem(e.id); return i && i.parent != n.parent && this.move(n.id, n.$index || -1, n.parent || this._ganttConfig.root_id), n } , this.$parentProperty = t.parentProperty || "parent", "function" != typeof t.rootId ? this.$getRootId = function(t) { return function() { return t } }(t.rootId || 0) : this.$getRootId = t.rootId, this.$openInitially = t.openInitially, this.visibleOrder = i.$create(), this.fullOrder = i.$create(), this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._eachItemMainRangeCache = null, this._getItemsCache = null, this._skip_refresh = !1, this._ganttConfig = null, t.getConfig && (this._ganttConfig = t.getConfig()); var e = {} , n = {} , r = {} , a = {} , s = !1; return this._attachDataChange(function() { return this._indexRangeCache = {}, this._eachItemMainRangeCache = null, this._getItemsCache = null, !0 }), this.attachEvent("onPreFilter", function() { this._indexRangeCache = {}, this._eachItemMainRangeCache = null, e = {}, n = {}, r = {}, a = {}, s = !1, this.eachItem(function(t) { var i = this.getParent(t.id); t.$open && !1 !== r[i] ? r[t.id] = !0 : r[t.id] = !1, this._isSplitItem(t) && (s = !0, e[t.id] = !0, n[t.id] = !0), s && n[i] && (n[t.id] = !0), r[i] || void 0 === r[i] ? a[t.id] = !0 : a[t.id] = !1 }) }), this.attachEvent("onFilterItem", function(t, i) { var r = !1; if (this._ganttConfig) r = this._ganttConfig.open_split_tasks; var o = a[i.id]; return s && (o && n[i.id] && !e[i.id] && (o = !!r), n[i.id] && !e[i.id] && (i.$split_subtask = !0)), i.$expanded_branch = !!a[i.id], !!o }), this.attachEvent("onFilter", function() { e = {}, n = {}, r = {}, a = {} }), this }; c.prototype = r.mixin({ _buildTree: function(t) { for (var e = null, n = this.$getRootId(), i = 0, a = t.length; i < a; i++) e = t[i], this.setParent(e, l(this.getParent(e), n) || n); for (i = 0, a = t.length; i < a; i++) e = t[i], this._add_branch(e), e.$level = this.calculateItemLevel(e), e.$local_index = this.getBranchIndex(e.id), r.defined(e.$open) || (e.$open = r.defined(e.open) ? e.open : this.$openInitially()); this._updateOrder() }, _isSplitItem: function(t) { return "split" == t.render && this.hasChild(t.id) }, parse: function(t) { this._skip_refresh || this.callEvent("onBeforeParse", [t]); var e = this._parseInner(t); this._buildTree(e), this.filter(), this._skip_refresh || this.callEvent("onParse", [e]) }, _addItemInner: function(t, e) { var n = this.getParent(t); r.defined(n) || (n = this.$getRootId(), this.setParent(t, n)); var i = this.getIndexById(n) + Math.min(Math.max(e, 0), this.visibleOrder.length); 1 * i !== i && (i = void 0), o.prototype._addItemInner.call(this, t, i), this.setParent(t, n), t.hasOwnProperty("$rendered_parent") && this._move_branch(t, t.$rendered_parent), this._add_branch(t, e) }, _changeIdInner: function(t, e) { var n = this.getChildren(t) , i = this._searchVisibleOrder[t]; o.prototype._changeIdInner.call(this, t, e); var r = this.getParent(e); this._replace_branch_child(r, t, e), this._branches[t] && (this._branches[e] = this._branches[t]); for (var a = 0; a < n.length; a++) { var s = this.getItem(n[a]); s[this.$parentProperty] = e, s.$rendered_parent = e } this._searchVisibleOrder[e] = i, delete this._branches[t] }, _traverseBranches: function(t, e) { r.defined(e) || (e = this.$getRootId()); var n = this._branches[e]; if (n) for (var i = 0; i < n.length; i++) { var a = n[i]; t.call(this, a), this._branches[a] && this._traverseBranches(t, a) } }, _updateOrder: function(t) { this.fullOrder = i.$create(), this._traverseBranches(function(t) { this.fullOrder.push(t) }), t && o.prototype._updateOrder.call(this, t) }, _removeItemInner: function(t) { var e = []; this.eachItem(function(t) { e.push(t) }, t), e.push(this.getItem(t)); for (var n = 0; n < e.length; n++) this._move_branch(e[n], this.getParent(e[n]), null), o.prototype._removeItemInner.call(this, e[n].id), this._move_branch(e[n], this.getParent(e[n]), null) }, move: function(t, e, n) { var i = arguments[3] , a = (this._ganttConfig || {}).root_id || 0; if (i = l(i, a)) { if (i === t) return; n = this.getParent(i), e = this.getBranchIndex(i) } if (t != n) { r.defined(n) || (n = this.$getRootId()); var o = this.getItem(t) , c = this.getParent(o.id) , u = this.getChildren(n); if (-1 == e && (e = u.length + 1), c == n) if (this.getBranchIndex(t) == e) return; if (!1 === this.callEvent("onBeforeItemMove", [t, n, e])) return !1; for (var d = [], h = 0; h < u.length; h++) s(u[h], null, this, this._ganttConfig) && (d.push(u[h]), u.splice(h, 1), h--); this._replace_branch_child(c, t); var f = (u = this.getChildren(n))[e]; (f = l(f, a)) ? u = u.slice(0, e).concat([t]).concat(u.slice(e)) : u.push(t), d.length && (u = u.concat(d)), this.setParent(o, n), this._branches[n] = u; var _ = this.calculateItemLevel(o) - o.$level; o.$level += _, this.eachItem(function(t) { t.$level += _ }, o.id, this), this._moveInner(this.getIndexById(t), this.getIndexById(n) + e), this.callEvent("onAfterItemMove", [t, n, e]), this.refresh() } }, getBranchIndex: function(t) { var e = this.getChildren(this.getParent(t)) , n = e.indexOf(t + ""); return -1 == n && (n = e.indexOf(+t)), n }, hasChild: function(t) { var e = this._branches[t]; return e && e.length }, getChildren: function(t) { var e = this._branches[t]; return e || i.$create() }, isChildOf: function(t, e) { if (!this.exists(t)) return !1; if (e === this.$getRootId()) return !0; if (!this.hasChild(e)) return !1; var n = this.getItem(t) , i = this.getParent(t); if (this.getItem(e).$level >= n.$level) return !1; for (; n && this.exists(i); ) { if ((n = this.getItem(i)) && n.id == e) return !0; i = this.getParent(n) } return !1 }, getSiblings: function(t) { if (!this.exists(t)) return i.$create(); var e = this.getParent(t); return this.getChildren(e) }, getNextSibling: function(t) { for (var e = this.getSiblings(t), n = 0, i = e.length; n < i; n++) if (e[n] == t) { var r = e[n + 1]; return 0 === r && n > 0 && (r = "0"), r || null } return null }, getPrevSibling: function(t) { for (var e = this.getSiblings(t), n = 0, i = e.length; n < i; n++) if (e[n] == t) { var r = e[n - 1]; return 0 === r && n > 0 && (r = "0"), r || null } return null }, getParent: function(t) { var e = null; return (e = void 0 !== t.id ? t : this.getItem(t)) ? e[this.$parentProperty] : this.$getRootId() }, clearAll: function() { this._branches = {}, o.prototype.clearAll.call(this) }, calculateItemLevel: function(t) { var e = 0; return this.eachParent(function() { e++ }, t), e }, _setParentInner: function(t, e, n) { n || (t.hasOwnProperty("$rendered_parent") ? this._move_branch(t, t.$rendered_parent, e) : this._move_branch(t, t[this.$parentProperty], e)) }, setParent: function(t, e, n) { this._setParentInner(t, e, n), t[this.$parentProperty] = e }, _eachItemCached: function(t, e) { for (var n = 0, i = e.length; n < i; n++) t.call(this, e[n]) }, _eachItemIterate: function(t, e, n) { var i = this.getChildren(e); for (i.length && (i = i.slice().reverse()); i.length; ) { var r = i.pop() , a = this.getItem(r); if (t.call(this, a), n && n.push(a), this.hasChild(a.id)) for (var o = this.getChildren(a.id), s = o.length - 1; s >= 0; s--) i.push(o[s]) } }, eachItem: function(t, e) { var n = this.$getRootId(); r.defined(e) || (e = n); var i = l(e, n) || n , a = !1 , o = !1 , s = null; i === n && (this._eachItemMainRangeCache ? (a = !0, s = this._eachItemMainRangeCache) : (o = !0, s = this._eachItemMainRangeCache = [])), a ? this._eachItemCached(t, s) : this._eachItemIterate(t, i, o ? s : null) }, eachParent: function(t, e) { for (var n = {}, i = e, r = this.getParent(i); this.exists(r); ) { if (n[r]) throw new Error("Invalid tasks tree. Cyclic reference has been detected on task " + r); n[r] = !0, i = this.getItem(r), t.call(this, i), r = this.getParent(i) } }, _add_branch: function(t, e, n) { var r = void 0 === n ? this.getParent(t) : n; this.hasChild(r) || (this._branches[r] = i.$create()); var a = this.getChildren(r); a.indexOf(t.id + "") > -1 || a.indexOf(+t.id) > -1 || (1 * e == e ? a.splice(e, 0, t.id) : a.push(t.id), t.$rendered_parent = r) }, _move_branch: function(t, e, n) { this._eachItemMainRangeCache = null, this._replace_branch_child(e, t.id), this.exists(n) || n == this.$getRootId() ? this._add_branch(t, void 0, n) : delete this._branches[t.id], t.$level = this.calculateItemLevel(t), this.eachItem(function(t) { t.$level = this.calculateItemLevel(t) }, t.id) }, _replace_branch_child: function(t, e, n) { var r = this.getChildren(t); if (r && void 0 !== t) { var a = i.$create() , o = r.indexOf(e + ""); -1 != o || isNaN(+e) || (o = r.indexOf(+e)), o > -1 && (n ? r.splice(o, 1, n) : r.splice(o, 1)), a = r, this._branches[t] = a } }, sort: function(t, e, n) { this.exists(n) || (n = this.$getRootId()), t || (t = "order"); var i = "string" == typeof t ? function(e, n) { return e[t] == n[t] || a.isDate(e[t]) && a.isDate(n[t]) && e[t].valueOf() == n[t].valueOf() ? 0 : e[t] > n[t] ? 1 : -1 } : t; if (e) { var r = i; i = function(t, e) { return r(e, t) } } var o = this.getChildren(n); if (o) { for (var s = [], l = o.length - 1; l >= 0; l--) s[l] = this.getItem(o[l]); s.sort(i); for (l = 0; l < s.length; l++) o[l] = s[l].id, this.sort(t, e, o[l]) } }, filter: function(t) { for (var e in this.pull) { var n = this.pull[e].$rendered_parent , i = this.getParent(this.pull[e]); n !== i && this._move_branch(this.pull[e], n, i) } return o.prototype.filter.apply(this, arguments) }, open: function(t) { this.exists(t) && (this.getItem(t).$open = !0, this._skipTaskRecalculation = !0, this.callEvent("onItemOpen", [t])) }, close: function(t) { this.exists(t) && (this.getItem(t).$open = !1, this._skipTaskRecalculation = !0, this.callEvent("onItemClose", [t])) }, destructor: function() { o.prototype.destructor.call(this), this._branches = null, this._indexRangeCache = {}, this._eachItemMainRangeCache = null } }, o.prototype), t.exports = c } , function(t, e, n) { var i = n(0) , r = { $create: function(t) { return i.mixin(t || [], this) }, $removeAt: function(t, e) { t >= 0 && this.splice(t, e || 1) }, $remove: function(t) { this.$removeAt(this.$find(t)) }, $insertAt: function(t, e) { if (e || 0 === e) { var n = this.splice(e, this.length - e); this[e] = t, this.push.apply(this, n) } else this.push(t) }, $find: function(t) { for (var e = 0; e < this.length; e++) if (t == this[e]) return e; return -1 }, $each: function(t, e) { for (var n = 0; n < this.length; n++) t.call(e || this, this[n]) }, $map: function(t, e) { for (var n = 0; n < this.length; n++) this[n] = t.call(e || this, this[n]); return this }, $filter: function(t, e) { for (var n = 0; n < this.length; n++) t.call(e || this, this[n]) || (this.splice(n, 1), n--); return this } }; t.exports = r } , function(t, e, n) { var i = n(48) , r = n(0) , a = n(5) , o = n(16) , s = function(t) { return this.pull = {}, this.$initItem = t.initItem, this.visibleOrder = i.$create(), this.fullOrder = i.$create(), this._skip_refresh = !1, this._filterRule = null, this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._getItemsCache = null, this.$config = t, a(this), this._attachDataChange(function() { return this._indexRangeCache = {}, this._getItemsCache = null, !0 }), this }; s.prototype = { _attachDataChange: function(t) { this.attachEvent("onClearAll", t), this.attachEvent("onBeforeParse", t), this.attachEvent("onBeforeUpdate", t), this.attachEvent("onBeforeDelete", t), this.attachEvent("onBeforeAdd", t), this.attachEvent("onParse", t), this.attachEvent("onBeforeFilter", t) }, _parseInner: function(t) { for (var e = null, n = [], i = 0, a = t.length; i < a; i++) e = t[i], this.$initItem && (this.$config.copyOnParse() && (e = r.copy(e)), e = this.$initItem(e)), this.callEvent("onItemLoading", [e]) && (this.pull.hasOwnProperty(e.id) || this.fullOrder.push(e.id), n.push(e), this.pull[e.id] = e); return n }, parse: function(t) { this.isSilent() || this.callEvent("onBeforeParse", [t]); var e = this._parseInner(t); this.isSilent() || (this.refresh(), this.callEvent("onParse", [e])) }, getItem: function(t) { return this.pull[t] }, _updateOrder: function(t) { t.call(this.visibleOrder), t.call(this.fullOrder) }, updateItem: function(t, e) { if (r.defined(e) || (e = this.getItem(t)), !this.isSilent() && !1 === this.callEvent("onBeforeUpdate", [e.id, e])) return !1; r.mixin(this.pull[t], e, !0), this.isSilent() || (this.callEvent("onAfterUpdate", [e.id, e]), this.callEvent("onStoreUpdated", [e.id, e, "update"])) }, _removeItemInner: function(t) { this._updateOrder(function() { this.$remove(t) }), delete this.pull[t] }, removeItem: function(t) { var e = this.getItem(t); if (!this.isSilent() && !1 === this.callEvent("onBeforeDelete", [e.id, e])) return !1; this.callEvent("onAfterDeleteConfirmed", [e.id, e]), this._removeItemInner(t), this.isSilent() || (this.filter(), this.callEvent("onAfterDelete", [e.id, e]), this.callEvent("onStoreUpdated", [e.id, e, "delete"])) }, _addItemInner: function(t, e) { if (this.exists(t.id)) this.silent(function() { this.updateItem(t.id, t) }); else { var n = this.visibleOrder , i = n.length; (!r.defined(e) || e < 0) && (e = i), e > i && (e = Math.min(n.length, e)) } this.pull[t.id] = t, this.isSilent() || this._updateOrder(function() { -1 === this.$find(t.id) && this.$insertAt(t.id, e) }), this.filter() }, isVisible: function(t) { return this.visibleOrder.$find(t) > -1 }, getVisibleItems: function() { return this.getIndexRange() }, addItem: function(t, e) { return r.defined(t.id) || (t.id = r.uid()), this.$initItem && (t = this.$initItem(t)), !(!this.isSilent() && !1 === this.callEvent("onBeforeAdd", [t.id, t])) && (this._addItemInner(t, e), this.isSilent() || (this.callEvent("onAfterAdd", [t.id, t]), this.callEvent("onStoreUpdated", [t.id, t, "add"])), t.id) }, _changeIdInner: function(t, e) { this.pull[t] && (this.pull[e] = this.pull[t]); var n = this._searchVisibleOrder[t]; this.pull[e].id = e, this._updateOrder(function() { this[this.$find(t)] = e }), this._searchVisibleOrder[e] = n, delete this._searchVisibleOrder[t], delete this.pull[t] }, changeId: function(t, e) { this._changeIdInner(t, e), this.callEvent("onIdChange", [t, e]) }, exists: function(t) { return !!this.pull[t] }, _moveInner: function(t, e) { var n = this.getIdByIndex(t); this._updateOrder(function() { this.$removeAt(t), this.$insertAt(n, Math.min(this.length, e)) }) }, move: function(t, e) { var n = this.getIdByIndex(t) , i = this.getItem(n); this._moveInner(t, e), this.isSilent() || this.callEvent("onStoreUpdated", [i.id, i, "move"]) }, clearAll: function() { this.$destroyed || (this.silent(function() { this.unselect() }), this.pull = {}, this.visibleOrder = i.$create(), this.fullOrder = i.$create(), this.isSilent() || (this.callEvent("onClearAll", []), this.refresh())) }, silent: function(t, e) { var n = !1; this.isSilent() && (n = !0), this._skip_refresh = !0, t.call(e || this), n || (this._skip_refresh = !1) }, isSilent: function() { return !!this._skip_refresh }, arraysEqual: function(t, e) { if (t.length !== e.length) return !1; for (var n = 0; n < t.length; n++) if (t[n] !== e[n]) return !1; return !0 }, refresh: function(t, e) { var n, i; if (!this.isSilent() && (t && (n = this.getItem(t)), i = t ? [t, n, "paint"] : [null, null, null], !1 !== this.callEvent("onBeforeStoreUpdate", i))) { var r = this._quick_refresh && !this._mark_recompute; if (this._mark_recompute = !1, t) { if (!e && !r) { var a = this.visibleOrder; this.filter(), this.arraysEqual(a, this.visibleOrder) || (t = void 0) } } else r || this.filter(); i = t ? [t, n, "paint"] : [null, null, null], this.callEvent("onStoreUpdated", i) } }, count: function() { return this.fullOrder.length }, countVisible: function() { return this.visibleOrder.length }, sort: function(t) {}, serialize: function() {}, eachItem: function(t) { for (var e = 0; e < this.fullOrder.length; e++) { var n = this.getItem(this.fullOrder[e]); t.call(this, n) } }, find: function(t) { var e = []; return this.eachItem(function(n) { t(n) && e.push(n) }), e }, filter: function(t) { this.isSilent() || this.callEvent("onBeforeFilter", []), this.callEvent("onPreFilter", []); var e = i.$create() , n = []; this.eachItem(function(t) { this.callEvent("onFilterItem", [t.id, t]) && (o(t.id, null, this, this._ganttConfig) ? n.push(t.id) : e.push(t.id)) }); for (var r = 0; r < n.length; r++) e.push(n[r]); this.visibleOrder = e, this._searchVisibleOrder = {}; for (r = 0; r < this.visibleOrder.length; r++) this._searchVisibleOrder[this.visibleOrder[r]] = r; this.isSilent() || this.callEvent("onFilter", []) }, getIndexRange: function(t, e) { var n = Math.min(e || 1 / 0, this.countVisible() - 1) , i = t || 0 , r = i + "-" + n; if (this._indexRangeCache[r]) return this._indexRangeCache[r].slice(); for (var a = [], o = i; o <= n; o++) a.push(this.getItem(this.visibleOrder[o])); return this._indexRangeCache[r] = a.slice(), a }, getItems: function() { if (this._getItemsCache) return this._getItemsCache.slice(); var t = []; for (var e in this.pull) t.push(this.pull[e]); return this._getItemsCache = t.slice(), t }, getIdByIndex: function(t) { return this.visibleOrder[t] }, getIndexById: function(t) { var e = this._searchVisibleOrder[t]; return void 0 === e && (e = -1), e }, _getNullIfUndefined: function(t) { return void 0 === t ? null : t }, getFirst: function() { return this._getNullIfUndefined(this.visibleOrder[0]) }, getLast: function() { return this._getNullIfUndefined(this.visibleOrder[this.visibleOrder.length - 1]) }, getNext: function(t) { return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(t) + 1]) }, getPrev: function(t) { return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(t) - 1]) }, destructor: function() { this.callEvent("onDestroy", []), this.detachAllEvents(), this.$destroyed = !0, this.pull = null, this.$initItem = null, this.visibleOrder = null, this.fullOrder = null, this._skip_refresh = null, this._filterRule = null, this._searchVisibleOrder = null, this._indexRangeCache = {} } }, t.exports = s } , function(t, e) { t.exports = function(t, e) { if (!e) return !0; if (t._on_timeout) return !1; var n = Math.ceil(1e3 / e); return n < 2 || (setTimeout(function() { delete t._on_timeout }, n), t._on_timeout = !0, !0) } } , function(t, e, n) { var i = n(0); t.exports = function t(e, n) { e = e || i.event, n = n || i.eventRemove; var r = [] , a = { attach: function(t, n, i, a) { r.push({ element: t, event: n, callback: i, capture: a }), e(t, n, i, a) }, detach: function(t, e, i, a) { n(t, e, i, a); for (var o = 0; o < r.length; o++) { var s = r[o]; s.element === t && s.event === e && s.callback === i && s.capture === a && (r.splice(o, 1), o--) } }, detachAll: function() { for (var t = r.slice(), e = 0; e < t.length; e++) { var n = t[e]; a.detach(n.element, n.event, n.callback, n.capture), a.detach(n.element, n.event, n.callback, void 0), a.detach(n.element, n.event, n.callback, !1), a.detach(n.element, n.event, n.callback, !0) } r.splice(0, r.length) }, extend: function() { return t(this.event, this.eventRemove) } }; return a } } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = "object" == ("undefined" == typeof self ? "undefined" : n(self)) ? self.FormData : window.FormData } , function(t, e) { (function(e) { t.exports = e } ).call(this, {}) } , function(t, e, n) { "use strict"; function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(278) , a = n(276); function o() { this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null } e.parse = k, e.resolve = function(t, e) { return k(t, !1, !0).resolve(e) } , e.resolveObject = function(t, e) { return t ? k(t, !1, !0).resolveObject(e) : e } , e.format = function(t) { a.isString(t) && (t = k(t)); return t instanceof o ? t.format() : o.prototype.format.call(t) } , e.Url = o; var s = /^([a-z0-9.+-]+:)/i , l = /:[0-9]*$/ , c = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/ , u = ["{", "}", "|", "\\", "^", "`"].concat(["<", ">", '"', "`", " ", "\r", "\n", "\t"]) , d = ["'"].concat(u) , h = ["%", "/", "?", ";", "#"].concat(d) , f = ["/", "?", "#"] , _ = /^[+a-z0-9A-Z_-]{0,63}$/ , g = /^([+a-z0-9A-Z_-]{0,63})(.*)$/ , p = { javascript: !0, "javascript:": !0 } , v = { javascript: !0, "javascript:": !0 } , m = { http: !0, https: !0, ftp: !0, gopher: !0, file: !0, "http:": !0, "https:": !0, "ftp:": !0, "gopher:": !0, "file:": !0 } , y = n(275); function k(t, e, n) { if (t && a.isObject(t) && t instanceof o) return t; var i = new o; return i.parse(t, e, n), i } o.prototype.parse = function(t, e, n) { if (!a.isString(t)) throw new TypeError("Parameter 'url' must be a string, not " + i(t)); var o = t.indexOf("?") , l = -1 !== o && o < t.indexOf("#") ? "?" : "#" , u = t.split(l); u[0] = u[0].replace(/\\/g, "/"); var k = t = u.join(l); if (k = k.trim(), !n && 1 === t.split("#").length) { var b = c.exec(k); if (b) return this.path = k, this.href = k, this.pathname = b[1], b[2] ? (this.search = b[2], this.query = e ? y.parse(this.search.substr(1)) : this.search.substr(1)) : e && (this.search = "", this.query = {}), this } var x = s.exec(k); if (x) { var w = (x = x[0]).toLowerCase(); this.protocol = w, k = k.substr(x.length) } if (n || x || k.match(/^\/\/[^@\/]+@[^@\/]+/)) { var S = "//" === k.substr(0, 2); !S || x && v[x] || (k = k.substr(2), this.slashes = !0) } if (!v[x] && (S || x && !m[x])) { for (var T, $, C = -1, E = 0; E < f.length; E++) { -1 !== (A = k.indexOf(f[E])) && (-1 === C || A < C) && (C = A) } -1 !== ($ = -1 === C ? k.lastIndexOf("@") : k.lastIndexOf("@", C)) && (T = k.slice(0, $), k = k.slice($ + 1), this.auth = decodeURIComponent(T)), C = -1; for (E = 0; E < h.length; E++) { var A; -1 !== (A = k.indexOf(h[E])) && (-1 === C || A < C) && (C = A) } -1 === C && (C = k.length), this.host = k.slice(0, C), k = k.slice(C), this.parseHost(), this.hostname = this.hostname || ""; var D = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1]; if (!D) for (var M = this.hostname.split(/\./), I = (E = 0, M.length); E < I; E++) { var P = M[E]; if (P && !P.match(_)) { for (var N = "", O = 0, L = P.length; O < L; O++) P.charCodeAt(O) > 127 ? N += "x" : N += P[O]; if (!N.match(_)) { var R = M.slice(0, E) , j = M.slice(E + 1) , H = P.match(g); H && (R.push(H[1]), j.unshift(H[2])), j.length && (k = "/" + j.join(".") + k), this.hostname = R.join("."); break } } } this.hostname.length > 255 ? this.hostname = "" : this.hostname = this.hostname.toLowerCase(), D || (this.hostname = r.toASCII(this.hostname)); var F = this.port ? ":" + this.port : "" , B = this.hostname || ""; this.host = B + F, this.href += this.host, D && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== k[0] && (k = "/" + k)) } if (!p[w]) for (E = 0, I = d.length; E < I; E++) { var z = d[E]; if (-1 !== k.indexOf(z)) { var U = encodeURIComponent(z); U === z && (U = escape(z)), k = k.split(z).join(U) } } var W = k.indexOf("#"); -1 !== W && (this.hash = k.substr(W), k = k.slice(0, W)); var V = k.indexOf("?"); if (-1 !== V ? (this.search = k.substr(V), this.query = k.substr(V + 1), e && (this.query = y.parse(this.query)), k = k.slice(0, V)) : e && (this.search = "", this.query = {}), k && (this.pathname = k), m[w] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) { F = this.pathname || ""; var q = this.search || ""; this.path = F + q } return this.href = this.format(), this } , o.prototype.format = function() { var t = this.auth || ""; t && (t = (t = encodeURIComponent(t)).replace(/%3A/i, ":"), t += "@"); var e = this.protocol || "" , n = this.pathname || "" , i = this.hash || "" , r = !1 , o = ""; this.host ? r = t + this.host : this.hostname && (r = t + (-1 === this.hostname.indexOf(":") ? this.hostname : "[" + this.hostname + "]"), this.port && (r += ":" + this.port)), this.query && a.isObject(this.query) && Object.keys(this.query).length && (o = y.stringify(this.query)); var s = this.search || o && "?" + o || ""; return e && ":" !== e.substr(-1) && (e += ":"), this.slashes || (!e || m[e]) && !1 !== r ? (r = "//" + (r || ""), n && "/" !== n.charAt(0) && (n = "/" + n)) : r || (r = ""), i && "#" !== i.charAt(0) && (i = "#" + i), s && "?" !== s.charAt(0) && (s = "?" + s), e + r + (n = n.replace(/[?#]/g, function(t) { return encodeURIComponent(t) })) + (s = s.replace("#", "%23")) + i } , o.prototype.resolve = function(t) { return this.resolveObject(k(t, !1, !0)).format() } , o.prototype.resolveObject = function(t) { if (a.isString(t)) { var e = new o; e.parse(t, !1, !0), t = e } for (var n = new o, i = Object.keys(this), r = 0; r < i.length; r++) { var s = i[r]; n[s] = this[s] } if (n.hash = t.hash, "" === t.href) return n.href = n.format(), n; if (t.slashes && !t.protocol) { for (var l = Object.keys(t), c = 0; c < l.length; c++) { var u = l[c]; "protocol" !== u && (n[u] = t[u]) } return m[n.protocol] && n.hostname && !n.pathname && (n.path = n.pathname = "/"), n.href = n.format(), n } if (t.protocol && t.protocol !== n.protocol) { if (!m[t.protocol]) { for (var d = Object.keys(t), h = 0; h < d.length; h++) { var f = d[h]; n[f] = t[f] } return n.href = n.format(), n } if (n.protocol = t.protocol, t.host || v[t.protocol]) n.pathname = t.pathname; else { for (var _ = (t.pathname || "").split("/"); _.length && !(t.host = _.shift()); ) ; t.host || (t.host = ""), t.hostname || (t.hostname = ""), "" !== _[0] && _.unshift(""), _.length < 2 && _.unshift(""), n.pathname = _.join("/") } if (n.search = t.search, n.query = t.query, n.host = t.host || "", n.auth = t.auth, n.hostname = t.hostname || t.host, n.port = t.port, n.pathname || n.search) { var g = n.pathname || "" , p = n.search || ""; n.path = g + p } return n.slashes = n.slashes || t.slashes, n.href = n.format(), n } var y = n.pathname && "/" === n.pathname.charAt(0) , k = t.host || t.pathname && "/" === t.pathname.charAt(0) , b = k || y || n.host && t.pathname , x = b , w = n.pathname && n.pathname.split("/") || [] , S = (_ = t.pathname && t.pathname.split("/") || [], n.protocol && !m[n.protocol]); if (S && (n.hostname = "", n.port = null, n.host && ("" === w[0] ? w[0] = n.host : w.unshift(n.host)), n.host = "", t.protocol && (t.hostname = null, t.port = null, t.host && ("" === _[0] ? _[0] = t.host : _.unshift(t.host)), t.host = null), b = b && ("" === _[0] || "" === w[0])), k) n.host = t.host || "" === t.host ? t.host : n.host, n.hostname = t.hostname || "" === t.hostname ? t.hostname : n.hostname, n.search = t.search, n.query = t.query, w = _; else if (_.length) w || (w = []), w.pop(), w = w.concat(_), n.search = t.search, n.query = t.query; else if (!a.isNullOrUndefined(t.search)) { if (S) n.hostname = n.host = w.shift(), (A = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) && (n.auth = A.shift(), n.host = n.hostname = A.shift()); return n.search = t.search, n.query = t.query, a.isNull(n.pathname) && a.isNull(n.search) || (n.path = (n.pathname ? n.pathname : "") + (n.search ? n.search : "")), n.href = n.format(), n } if (!w.length) return n.pathname = null, n.search ? n.path = "/" + n.search : n.path = null, n.href = n.format(), n; for (var T = w.slice(-1)[0], $ = (n.host || t.host || w.length > 1) && ("." === T || ".." === T) || "" === T, C = 0, E = w.length; E >= 0; E--) "." === (T = w[E]) ? w.splice(E, 1) : ".." === T ? (w.splice(E, 1), C++) : C && (w.splice(E, 1), C--); if (!b && !x) for (; C--; C) w.unshift(".."); !b || "" === w[0] || w[0] && "/" === w[0].charAt(0) || w.unshift(""), $ && "/" !== w.join("/").substr(-1) && w.push(""); var A, D = "" === w[0] || w[0] && "/" === w[0].charAt(0); S && (n.hostname = n.host = D ? "" : w.length ? w.shift() : "", (A = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) && (n.auth = A.shift(), n.host = n.hostname = A.shift())); return (b = b || n.host && w.length) && !D && w.unshift(""), w.length ? n.pathname = w.join("/") : (n.pathname = null, n.path = null), a.isNull(n.pathname) && a.isNull(n.search) || (n.path = (n.pathname ? n.pathname : "") + (n.search ? n.search : "")), n.auth = t.auth || n.auth, n.slashes = n.slashes || t.slashes, n.href = n.format(), n } , o.prototype.parseHost = function() { var t = this.host , e = l.exec(t); e && (":" !== (e = e[0]) && (this.port = e.substr(1)), t = t.substr(0, t.length - e.length)), t && (this.hostname = t) } } , function(t, e, n) { "use strict"; t.exports = a; var i = n(12) , r = n(17); function a(t) { if (!(this instanceof a)) return new a(t); i.call(this, t), this._transformState = { afterTransform: function(t, e) { var n = this._transformState; n.transforming = !1; var i = n.writecb; if (!i) return this.emit("error", new Error("write callback called multiple times")); n.writechunk = null, n.writecb = null, null != e && this.push(e), i(t); var r = this._readableState; r.reading = !1, (r.needReadable || r.length < r.highWaterMark) && this._read(r.highWaterMark) } .bind(this), needTransform: !1, transforming: !1, writecb: null, writechunk: null, writeencoding: null }, this._readableState.needReadable = !0, this._readableState.sync = !1, t && ("function" == typeof t.transform && (this._transform = t.transform), "function" == typeof t.flush && (this._flush = t.flush)), this.on("prefinish", o) } function o() { var t = this; "function" == typeof this._flush ? this._flush(function(e, n) { s(t, e, n) }) : s(this, null, null) } function s(t, e, n) { if (e) return t.emit("error", e); if (null != n && t.push(n), t._writableState.length) throw new Error("Calling transform done when ws.length != 0"); if (t._transformState.transforming) throw new Error("Calling transform done when still transforming"); return t.push(null) } r.inherits = n(8), r.inherits(a, i), a.prototype.push = function(t, e) { return this._transformState.needTransform = !1, i.prototype.push.call(this, t, e) } , a.prototype._transform = function(t, e, n) { throw new Error("_transform() is not implemented") } , a.prototype._write = function(t, e, n) { var i = this._transformState; if (i.writecb = n, i.writechunk = t, i.writeencoding = e, !i.transforming) { var r = this._readableState; (i.needTransform || r.needReadable || r.length < r.highWaterMark) && this._read(r.highWaterMark) } } , a.prototype._read = function(t) { var e = this._transformState; null !== e.writechunk && e.writecb && !e.transforming ? (e.transforming = !0, this._transform(e.writechunk, e.writeencoding, e.afterTransform)) : e.needTransform = !0 } , a.prototype._destroy = function(t, e) { var n = this; i.prototype._destroy.call(this, t, function(t) { e(t), n.emit("close") }) } } , function(t, e, n) { "use strict"; var i = n(22).Buffer , r = i.isEncoding || function(t) { switch ((t = "" + t) && t.toLowerCase()) { case "hex": case "utf8": case "utf-8": case "ascii": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": case "raw": return !0; default: return !1 } } ; function a(t) { var e; switch (this.encoding = function(t) { var e = function(t) { if (!t) return "utf8"; for (var e; ; ) switch (t) { case "utf8": case "utf-8": return "utf8"; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return "utf16le"; case "latin1": case "binary": return "latin1"; case "base64": case "ascii": case "hex": return t; default: if (e) return; t = ("" + t).toLowerCase(), e = !0 } }(t); if ("string" != typeof e && (i.isEncoding === r || !r(t))) throw new Error("Unknown encoding: " + t); return e || t }(t), this.encoding) { case "utf16le": this.text = l, this.end = c, e = 4; break; case "utf8": this.fillLast = s, e = 4; break; case "base64": this.text = u, this.end = d, e = 3; break; default: return this.write = h, void (this.end = f) } this.lastNeed = 0, this.lastTotal = 0, this.lastChar = i.allocUnsafe(e) } function o(t) { return t <= 127 ? 0 : t >> 5 == 6 ? 2 : t >> 4 == 14 ? 3 : t >> 3 == 30 ? 4 : t >> 6 == 2 ? -1 : -2 } function s(t) { var e = this.lastTotal - this.lastNeed , n = function(t, e, n) { if (128 != (192 & e[0])) return t.lastNeed = 0, "�"; if (t.lastNeed > 1 && e.length > 1) { if (128 != (192 & e[1])) return t.lastNeed = 1, "�"; if (t.lastNeed > 2 && e.length > 2 && 128 != (192 & e[2])) return t.lastNeed = 2, "�" } }(this, t); return void 0 !== n ? n : this.lastNeed <= t.length ? (t.copy(this.lastChar, e, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal)) : (t.copy(this.lastChar, e, 0, t.length), void (this.lastNeed -= t.length)) } function l(t, e) { if ((t.length - e) % 2 == 0) { var n = t.toString("utf16le", e); if (n) { var i = n.charCodeAt(n.length - 1); if (i >= 55296 && i <= 56319) return this.lastNeed = 2, this.lastTotal = 4, this.lastChar[0] = t[t.length - 2], this.lastChar[1] = t[t.length - 1], n.slice(0, -1) } return n } return this.lastNeed = 1, this.lastTotal = 2, this.lastChar[0] = t[t.length - 1], t.toString("utf16le", e, t.length - 1) } function c(t) { var e = t && t.length ? this.write(t) : ""; if (this.lastNeed) { var n = this.lastTotal - this.lastNeed; return e + this.lastChar.toString("utf16le", 0, n) } return e } function u(t, e) { var n = (t.length - e) % 3; return 0 === n ? t.toString("base64", e) : (this.lastNeed = 3 - n, this.lastTotal = 3, 1 === n ? this.lastChar[0] = t[t.length - 1] : (this.lastChar[0] = t[t.length - 2], this.lastChar[1] = t[t.length - 1]), t.toString("base64", e, t.length - n)) } function d(t) { var e = t && t.length ? this.write(t) : ""; return this.lastNeed ? e + this.lastChar.toString("base64", 0, 3 - this.lastNeed) : e } function h(t) { return t.toString(this.encoding) } function f(t) { return t && t.length ? this.write(t) : "" } e.StringDecoder = a, a.prototype.write = function(t) { if (0 === t.length) return ""; var e, n; if (this.lastNeed) { if (void 0 === (e = this.fillLast(t))) return ""; n = this.lastNeed, this.lastNeed = 0 } else n = 0; return n < t.length ? e ? e + this.text(t, n) : this.text(t, n) : e || "" } , a.prototype.end = function(t) { var e = t && t.length ? this.write(t) : ""; return this.lastNeed ? e + "�" : e } , a.prototype.text = function(t, e) { var n = function(t, e, n) { var i = e.length - 1; if (i < n) return 0; var r = o(e[i]); if (r >= 0) return r > 0 && (t.lastNeed = r - 1), r; if (--i < n || -2 === r) return 0; if ((r = o(e[i])) >= 0) return r > 0 && (t.lastNeed = r - 2), r; if (--i < n || -2 === r) return 0; if ((r = o(e[i])) >= 0) return r > 0 && (2 === r ? r = 0 : t.lastNeed = r - 3), r; return 0 }(this, t, e); if (!this.lastNeed) return t.toString("utf8", e); this.lastTotal = n; var i = t.length - (n - this.lastNeed); return t.copy(this.lastChar, 0, i), t.toString("utf8", e, i) } , a.prototype.fillLast = function(t) { if (this.lastNeed <= t.length) return t.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal); t.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, t.length), this.lastNeed -= t.length } } , function(t, e, n) { (function(t) { var i = void 0 !== t && t || "undefined" != typeof self && self || window , r = Function.prototype.apply; function a(t, e) { this._id = t, this._clearFn = e } e.setTimeout = function() { return new a(r.call(setTimeout, i, arguments),clearTimeout) } , e.setInterval = function() { return new a(r.call(setInterval, i, arguments),clearInterval) } , e.clearTimeout = e.clearInterval = function(t) { t && t.close() } , a.prototype.unref = a.prototype.ref = function() {} , a.prototype.close = function() { this._clearFn.call(i, this._id) } , e.enroll = function(t, e) { clearTimeout(t._idleTimeoutId), t._idleTimeout = e } , e.unenroll = function(t) { clearTimeout(t._idleTimeoutId), t._idleTimeout = -1 } , e._unrefActive = e.active = function(t) { clearTimeout(t._idleTimeoutId); var e = t._idleTimeout; e >= 0 && (t._idleTimeoutId = setTimeout(function() { t._onTimeout && t._onTimeout() }, e)) } , n(284), e.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== t && t.setImmediate || this && this.setImmediate, e.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== t && t.clearImmediate || this && this.clearImmediate } ).call(this, n(4)) } , function(t, e, n) { "use strict"; (function(e, i, r) { var a = n(23); function o(t) { var e = this; this.next = null, this.entry = null, this.finish = function() { !function(t, e, n) { var i = t.entry; t.entry = null; for (; i; ) { var r = i.callback; e.pendingcb--, r(n), i = i.next } e.corkedRequestsFree ? e.corkedRequestsFree.next = t : e.corkedRequestsFree = t }(e, t) } } t.exports = m; var s, l = !e.browser && ["v0.10", "v0.9."].indexOf(e.version.slice(0, 5)) > -1 ? i : a.nextTick; m.WritableState = v; var c = n(17); c.inherits = n(8); var u = { deprecate: n(283) } , d = n(60) , h = n(22).Buffer , f = r.Uint8Array || function() {} ; var _, g = n(59); function p() {} function v(t, e) { s = s || n(12), t = t || {}; var i = e instanceof s; this.objectMode = !!t.objectMode, i && (this.objectMode = this.objectMode || !!t.writableObjectMode); var r = t.highWaterMark , c = t.writableHighWaterMark , u = this.objectMode ? 16 : 16384; this.highWaterMark = r || 0 === r ? r : i && (c || 0 === c) ? c : u, this.highWaterMark = Math.floor(this.highWaterMark), this.finalCalled = !1, this.needDrain = !1, this.ending = !1, this.ended = !1, this.finished = !1, this.destroyed = !1; var d = !1 === t.decodeStrings; this.decodeStrings = !d, this.defaultEncoding = t.defaultEncoding || "utf8", this.length = 0, this.writing = !1, this.corked = 0, this.sync = !0, this.bufferProcessing = !1, this.onwrite = function(t) { !function(t, e) { var n = t._writableState , i = n.sync , r = n.writecb; if (function(t) { t.writing = !1, t.writecb = null, t.length -= t.writelen, t.writelen = 0 }(n), e) !function(t, e, n, i, r) { --e.pendingcb, n ? (a.nextTick(r, i), a.nextTick(S, t, e), t._writableState.errorEmitted = !0, t.emit("error", i)) : (r(i), t._writableState.errorEmitted = !0, t.emit("error", i), S(t, e)) }(t, n, i, e, r); else { var o = x(n); o || n.corked || n.bufferProcessing || !n.bufferedRequest || b(t, n), i ? l(k, t, n, o, r) : k(t, n, o, r) } }(e, t) } , this.writecb = null, this.writelen = 0, this.bufferedRequest = null, this.lastBufferedRequest = null, this.pendingcb = 0, this.prefinished = !1, this.errorEmitted = !1, this.bufferedRequestCount = 0, this.corkedRequestsFree = new o(this) } function m(t) { if (s = s || n(12), !(_.call(m, this) || this instanceof s)) return new m(t); this._writableState = new v(t,this), this.writable = !0, t && ("function" == typeof t.write && (this._write = t.write), "function" == typeof t.writev && (this._writev = t.writev), "function" == typeof t.destroy && (this._destroy = t.destroy), "function" == typeof t.final && (this._final = t.final)), d.call(this) } function y(t, e, n, i, r, a, o) { e.writelen = i, e.writecb = o, e.writing = !0, e.sync = !0, n ? t._writev(r, e.onwrite) : t._write(r, a, e.onwrite), e.sync = !1 } function k(t, e, n, i) { n || function(t, e) { 0 === e.length && e.needDrain && (e.needDrain = !1, t.emit("drain")) }(t, e), e.pendingcb--, i(), S(t, e) } function b(t, e) { e.bufferProcessing = !0; var n = e.bufferedRequest; if (t._writev && n && n.next) { var i = e.bufferedRequestCount , r = new Array(i) , a = e.corkedRequestsFree; a.entry = n; for (var s = 0, l = !0; n; ) r[s] = n, n.isBuf || (l = !1), n = n.next, s += 1; r.allBuffers = l, y(t, e, !0, e.length, r, "", a.finish), e.pendingcb++, e.lastBufferedRequest = null, a.next ? (e.corkedRequestsFree = a.next, a.next = null) : e.corkedRequestsFree = new o(e), e.bufferedRequestCount = 0 } else { for (; n; ) { var c = n.chunk , u = n.encoding , d = n.callback; if (y(t, e, !1, e.objectMode ? 1 : c.length, c, u, d), n = n.next, e.bufferedRequestCount--, e.writing) break } null === n && (e.lastBufferedRequest = null) } e.bufferedRequest = n, e.bufferProcessing = !1 } function x(t) { return t.ending && 0 === t.length && null === t.bufferedRequest && !t.finished && !t.writing } function w(t, e) { t._final(function(n) { e.pendingcb--, n && t.emit("error", n), e.prefinished = !0, t.emit("prefinish"), S(t, e) }) } function S(t, e) { var n = x(e); return n && (!function(t, e) { e.prefinished || e.finalCalled || ("function" == typeof t._final ? (e.pendingcb++, e.finalCalled = !0, a.nextTick(w, t, e)) : (e.prefinished = !0, t.emit("prefinish"))) }(t, e), 0 === e.pendingcb && (e.finished = !0, t.emit("finish"))), n } c.inherits(m, d), v.prototype.getBuffer = function() { for (var t = this.bufferedRequest, e = []; t; ) e.push(t), t = t.next; return e } , function() { try { Object.defineProperty(v.prototype, "buffer", { get: u.deprecate(function() { return this.getBuffer() }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003") }) } catch (t) {} }(), "function" == typeof Symbol && Symbol.hasInstance && "function" == typeof Function.prototype[Symbol.hasInstance] ? (_ = Function.prototype[Symbol.hasInstance], Object.defineProperty(m, Symbol.hasInstance, { value: function(t) { return !!_.call(this, t) || this === m && (t && t._writableState instanceof v) } })) : _ = function(t) { return t instanceof this } , m.prototype.pipe = function() { this.emit("error", new Error("Cannot pipe, not readable")) } , m.prototype.write = function(t, e, n) { var i = this._writableState , r = !1 , o = !i.objectMode && function(t) { return h.isBuffer(t) || t instanceof f }(t); return o && !h.isBuffer(t) && (t = function(t) { return h.from(t) }(t)), "function" == typeof e && (n = e, e = null), o ? e = "buffer" : e || (e = i.defaultEncoding), "function" != typeof n && (n = p), i.ended ? function(t, e) { var n = new Error("write after end"); t.emit("error", n), a.nextTick(e, n) }(this, n) : (o || function(t, e, n, i) { var r = !0 , o = !1; return null === n ? o = new TypeError("May not write null values to stream") : "string" == typeof n || void 0 === n || e.objectMode || (o = new TypeError("Invalid non-string/buffer chunk")), o && (t.emit("error", o), a.nextTick(i, o), r = !1), r }(this, i, t, n)) && (i.pendingcb++, r = function(t, e, n, i, r, a) { if (!n) { var o = function(t, e, n) { t.objectMode || !1 === t.decodeStrings || "string" != typeof e || (e = h.from(e, n)); return e }(e, i, r); i !== o && (n = !0, r = "buffer", i = o) } var s = e.objectMode ? 1 : i.length; e.length += s; var l = e.length < e.highWaterMark; l || (e.needDrain = !0); if (e.writing || e.corked) { var c = e.lastBufferedRequest; e.lastBufferedRequest = { chunk: i, encoding: r, isBuf: n, callback: a, next: null }, c ? c.next = e.lastBufferedRequest : e.bufferedRequest = e.lastBufferedRequest, e.bufferedRequestCount += 1 } else y(t, e, !1, s, i, r, a); return l }(this, i, o, t, e, n)), r } , m.prototype.cork = function() { this._writableState.corked++ } , m.prototype.uncork = function() { var t = this._writableState; t.corked && (t.corked--, t.writing || t.corked || t.finished || t.bufferProcessing || !t.bufferedRequest || b(this, t)) } , m.prototype.setDefaultEncoding = function(t) { if ("string" == typeof t && (t = t.toLowerCase()), !(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((t + "").toLowerCase()) > -1)) throw new TypeError("Unknown encoding: " + t); return this._writableState.defaultEncoding = t, this } , Object.defineProperty(m.prototype, "writableHighWaterMark", { enumerable: !1, get: function() { return this._writableState.highWaterMark } }), m.prototype._write = function(t, e, n) { n(new Error("_write() is not implemented")) } , m.prototype._writev = null, m.prototype.end = function(t, e, n) { var i = this._writableState; "function" == typeof t ? (n = t, t = null, e = null) : "function" == typeof e && (n = e, e = null), null !== t && void 0 !== t && this.write(t, e), i.corked && (i.corked = 1, this.uncork()), i.ending || i.finished || function(t, e, n) { e.ending = !0, S(t, e), n && (e.finished ? a.nextTick(n) : t.once("finish", n)); e.ended = !0, t.writable = !1 }(this, i, n) } , Object.defineProperty(m.prototype, "destroyed", { get: function() { return void 0 !== this._writableState && this._writableState.destroyed }, set: function(t) { this._writableState && (this._writableState.destroyed = t) } }), m.prototype.destroy = g.destroy, m.prototype._undestroy = g.undestroy, m.prototype._destroy = function(t, e) { this.end(), e(t) } } ).call(this, n(9), n(57).setImmediate, n(4)) } , function(t, e, n) { "use strict"; var i = n(23); function r(t, e) { t.emit("error", e) } t.exports = { destroy: function(t, e) { var n = this , a = this._readableState && this._readableState.destroyed , o = this._writableState && this._writableState.destroyed; return a || o ? (e ? e(t) : !t || this._writableState && this._writableState.errorEmitted || i.nextTick(r, this, t), this) : (this._readableState && (this._readableState.destroyed = !0), this._writableState && (this._writableState.destroyed = !0), this._destroy(t || null, function(t) { !e && t ? (i.nextTick(r, n, t), n._writableState && (n._writableState.errorEmitted = !0)) : e && e(t) }), this) }, undestroy: function() { this._readableState && (this._readableState.destroyed = !1, this._readableState.reading = !1, this._readableState.ended = !1, this._readableState.endEmitted = !1), this._writableState && (this._writableState.destroyed = !1, this._writableState.ended = !1, this._writableState.ending = !1, this._writableState.finished = !1, this._writableState.errorEmitted = !1) } } } , function(t, e, n) { t.exports = n(61).EventEmitter } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } function i() { this._events = this._events || {}, this._maxListeners = this._maxListeners || void 0 } function r(t) { return "function" == typeof t } function a(t) { return "object" === n(t) && null !== t } function o(t) { return void 0 === t } t.exports = i, i.EventEmitter = i, i.prototype._events = void 0, i.prototype._maxListeners = void 0, i.defaultMaxListeners = 10, i.prototype.setMaxListeners = function(t) { if (!function(t) { return "number" == typeof t }(t) || t < 0 || isNaN(t)) throw TypeError("n must be a positive number"); return this._maxListeners = t, this } , i.prototype.emit = function(t) { var e, n, i, s, l, c; if (this._events || (this._events = {}), "error" === t && (!this._events.error || a(this._events.error) && !this._events.error.length)) { if ((e = arguments[1])instanceof Error) throw e; var u = new Error('Uncaught, unspecified "error" event. (' + e + ")"); throw u.context = e, u } if (o(n = this._events[t])) return !1; if (r(n)) switch (arguments.length) { case 1: n.call(this); break; case 2: n.call(this, arguments[1]); break; case 3: n.call(this, arguments[1], arguments[2]); break; default: s = Array.prototype.slice.call(arguments, 1), n.apply(this, s) } else if (a(n)) for (s = Array.prototype.slice.call(arguments, 1), i = (c = n.slice()).length, l = 0; l < i; l++) c[l].apply(this, s); return !0 } , i.prototype.addListener = function(t, e) { var n; if (!r(e)) throw TypeError("listener must be a function"); return this._events || (this._events = {}), this._events.newListener && this.emit("newListener", t, r(e.listener) ? e.listener : e), this._events[t] ? a(this._events[t]) ? this._events[t].push(e) : this._events[t] = [this._events[t], e] : this._events[t] = e, a(this._events[t]) && !this._events[t].warned && (n = o(this._maxListeners) ? i.defaultMaxListeners : this._maxListeners) && n > 0 && this._events[t].length > n && (this._events[t].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[t].length), "function" == typeof console.trace && console.trace()), this } , i.prototype.on = i.prototype.addListener, i.prototype.once = function(t, e) { if (!r(e)) throw TypeError("listener must be a function"); var n = !1; function i() { this.removeListener(t, i), n || (n = !0, e.apply(this, arguments)) } return i.listener = e, this.on(t, i), this } , i.prototype.removeListener = function(t, e) { var n, i, o, s; if (!r(e)) throw TypeError("listener must be a function"); if (!this._events || !this._events[t]) return this; if (o = (n = this._events[t]).length, i = -1, n === e || r(n.listener) && n.listener === e) delete this._events[t], this._events.removeListener && this.emit("removeListener", t, e); else if (a(n)) { for (s = o; s-- > 0; ) if (n[s] === e || n[s].listener && n[s].listener === e) { i = s; break } if (i < 0) return this; 1 === n.length ? (n.length = 0, delete this._events[t]) : n.splice(i, 1), this._events.removeListener && this.emit("removeListener", t, e) } return this } , i.prototype.removeAllListeners = function(t) { var e, n; if (!this._events) return this; if (!this._events.removeListener) return 0 === arguments.length ? this._events = {} : this._events[t] && delete this._events[t], this; if (0 === arguments.length) { for (e in this._events) "removeListener" !== e && this.removeAllListeners(e); return this.removeAllListeners("removeListener"), this._events = {}, this } if (r(n = this._events[t])) this.removeListener(t, n); else if (n) for (; n.length; ) this.removeListener(t, n[n.length - 1]); return delete this._events[t], this } , i.prototype.listeners = function(t) { return this._events && this._events[t] ? r(this._events[t]) ? [this._events[t]] : this._events[t].slice() : [] } , i.prototype.listenerCount = function(t) { if (this._events) { var e = this._events[t]; if (r(e)) return 1; if (e) return e.length } return 0 } , i.listenerCount = function(t, e) { return t.listenerCount(e) } } , function(t, e, n) { "use strict"; (function(e, i) { var r = n(23); t.exports = y; var a, o = n(67); y.ReadableState = m; n(61).EventEmitter; var s = function(t, e) { return t.listeners(e).length } , l = n(60) , c = n(22).Buffer , u = e.Uint8Array || function() {} ; var d = n(17); d.inherits = n(8); var h = n(287) , f = void 0; f = h && h.debuglog ? h.debuglog("stream") : function() {} ; var _, g = n(286), p = n(59); d.inherits(y, l); var v = ["error", "close", "destroy", "pause", "resume"]; function m(t, e) { a = a || n(12), t = t || {}; var i = e instanceof a; this.objectMode = !!t.objectMode, i && (this.objectMode = this.objectMode || !!t.readableObjectMode); var r = t.highWaterMark , o = t.readableHighWaterMark , s = this.objectMode ? 16 : 16384; this.highWaterMark = r || 0 === r ? r : i && (o || 0 === o) ? o : s, this.highWaterMark = Math.floor(this.highWaterMark), this.buffer = new g, this.length = 0, this.pipes = null, this.pipesCount = 0, this.flowing = null, this.ended = !1, this.endEmitted = !1, this.reading = !1, this.sync = !0, this.needReadable = !1, this.emittedReadable = !1, this.readableListening = !1, this.resumeScheduled = !1, this.destroyed = !1, this.defaultEncoding = t.defaultEncoding || "utf8", this.awaitDrain = 0, this.readingMore = !1, this.decoder = null, this.encoding = null, t.encoding && (_ || (_ = n(56).StringDecoder), this.decoder = new _(t.encoding), this.encoding = t.encoding) } function y(t) { if (a = a || n(12), !(this instanceof y)) return new y(t); this._readableState = new m(t,this), this.readable = !0, t && ("function" == typeof t.read && (this._read = t.read), "function" == typeof t.destroy && (this._destroy = t.destroy)), l.call(this) } function k(t, e, n, i, r) { var a, o = t._readableState; null === e ? (o.reading = !1, function(t, e) { if (e.ended) return; if (e.decoder) { var n = e.decoder.end(); n && n.length && (e.buffer.push(n), e.length += e.objectMode ? 1 : n.length) } e.ended = !0, S(t) }(t, o)) : (r || (a = function(t, e) { var n; (function(t) { return c.isBuffer(t) || t instanceof u } )(e) || "string" == typeof e || void 0 === e || t.objectMode || (n = new TypeError("Invalid non-string/buffer chunk")); return n }(o, e)), a ? t.emit("error", a) : o.objectMode || e && e.length > 0 ? ("string" == typeof e || o.objectMode || Object.getPrototypeOf(e) === c.prototype || (e = function(t) { return c.from(t) }(e)), i ? o.endEmitted ? t.emit("error", new Error("stream.unshift() after end event")) : b(t, o, e, !0) : o.ended ? t.emit("error", new Error("stream.push() after EOF")) : (o.reading = !1, o.decoder && !n ? (e = o.decoder.write(e), o.objectMode || 0 !== e.length ? b(t, o, e, !1) : $(t, o)) : b(t, o, e, !1))) : i || (o.reading = !1)); return function(t) { return !t.ended && (t.needReadable || t.length < t.highWaterMark || 0 === t.length) }(o) } function b(t, e, n, i) { e.flowing && 0 === e.length && !e.sync ? (t.emit("data", n), t.read(0)) : (e.length += e.objectMode ? 1 : n.length, i ? e.buffer.unshift(n) : e.buffer.push(n), e.needReadable && S(t)), $(t, e) } Object.defineProperty(y.prototype, "destroyed", { get: function() { return void 0 !== this._readableState && this._readableState.destroyed }, set: function(t) { this._readableState && (this._readableState.destroyed = t) } }), y.prototype.destroy = p.destroy, y.prototype._undestroy = p.undestroy, y.prototype._destroy = function(t, e) { this.push(null), e(t) } , y.prototype.push = function(t, e) { var n, i = this._readableState; return i.objectMode ? n = !0 : "string" == typeof t && ((e = e || i.defaultEncoding) !== i.encoding && (t = c.from(t, e), e = ""), n = !0), k(this, t, e, !1, n) } , y.prototype.unshift = function(t) { return k(this, t, null, !0, !1) } , y.prototype.isPaused = function() { return !1 === this._readableState.flowing } , y.prototype.setEncoding = function(t) { return _ || (_ = n(56).StringDecoder), this._readableState.decoder = new _(t), this._readableState.encoding = t, this } ; var x = 8388608; function w(t, e) { return t <= 0 || 0 === e.length && e.ended ? 0 : e.objectMode ? 1 : t != t ? e.flowing && e.length ? e.buffer.head.data.length : e.length : (t > e.highWaterMark && (e.highWaterMark = function(t) { return t >= x ? t = x : (t--, t |= t >>> 1, t |= t >>> 2, t |= t >>> 4, t |= t >>> 8, t |= t >>> 16, t++), t }(t)), t <= e.length ? t : e.ended ? e.length : (e.needReadable = !0, 0)) } function S(t) { var e = t._readableState; e.needReadable = !1, e.emittedReadable || (f("emitReadable", e.flowing), e.emittedReadable = !0, e.sync ? r.nextTick(T, t) : T(t)) } function T(t) { f("emit readable"), t.emit("readable"), D(t) } function $(t, e) { e.readingMore || (e.readingMore = !0, r.nextTick(C, t, e)) } function C(t, e) { for (var n = e.length; !e.reading && !e.flowing && !e.ended && e.length < e.highWaterMark && (f("maybeReadMore read 0"), t.read(0), n !== e.length); ) n = e.length; e.readingMore = !1 } function E(t) { f("readable nexttick read 0"), t.read(0) } function A(t, e) { e.reading || (f("resume read 0"), t.read(0)), e.resumeScheduled = !1, e.awaitDrain = 0, t.emit("resume"), D(t), e.flowing && !e.reading && t.read(0) } function D(t) { var e = t._readableState; for (f("flow", e.flowing); e.flowing && null !== t.read(); ) ; } function M(t, e) { return 0 === e.length ? null : (e.objectMode ? n = e.buffer.shift() : !t || t >= e.length ? (n = e.decoder ? e.buffer.join("") : 1 === e.buffer.length ? e.buffer.head.data : e.buffer.concat(e.length), e.buffer.clear()) : n = function(t, e, n) { var i; t < e.head.data.length ? (i = e.head.data.slice(0, t), e.head.data = e.head.data.slice(t)) : i = t === e.head.data.length ? e.shift() : n ? function(t, e) { var n = e.head , i = 1 , r = n.data; t -= r.length; for (; n = n.next; ) { var a = n.data , o = t > a.length ? a.length : t; if (o === a.length ? r += a : r += a.slice(0, t), 0 === (t -= o)) { o === a.length ? (++i, n.next ? e.head = n.next : e.head = e.tail = null) : (e.head = n, n.data = a.slice(o)); break } ++i } return e.length -= i, r }(t, e) : function(t, e) { var n = c.allocUnsafe(t) , i = e.head , r = 1; i.data.copy(n), t -= i.data.length; for (; i = i.next; ) { var a = i.data , o = t > a.length ? a.length : t; if (a.copy(n, n.length - t, 0, o), 0 === (t -= o)) { o === a.length ? (++r, i.next ? e.head = i.next : e.head = e.tail = null) : (e.head = i, i.data = a.slice(o)); break } ++r } return e.length -= r, n }(t, e); return i }(t, e.buffer, e.decoder), n); var n } function I(t) { var e = t._readableState; if (e.length > 0) throw new Error('"endReadable()" called on non-empty stream'); e.endEmitted || (e.ended = !0, r.nextTick(P, e, t)) } function P(t, e) { t.endEmitted || 0 !== t.length || (t.endEmitted = !0, e.readable = !1, e.emit("end")) } function N(t, e) { for (var n = 0, i = t.length; n < i; n++) if (t[n] === e) return n; return -1 } y.prototype.read = function(t) { f("read", t), t = parseInt(t, 10); var e = this._readableState , n = t; if (0 !== t && (e.emittedReadable = !1), 0 === t && e.needReadable && (e.length >= e.highWaterMark || e.ended)) return f("read: emitReadable", e.length, e.ended), 0 === e.length && e.ended ? I(this) : S(this), null; if (0 === (t = w(t, e)) && e.ended) return 0 === e.length && I(this), null; var i, r = e.needReadable; return f("need readable", r), (0 === e.length || e.length - t < e.highWaterMark) && f("length less than watermark", r = !0), e.ended || e.reading ? f("reading or ended", r = !1) : r && (f("do read"), e.reading = !0, e.sync = !0, 0 === e.length && (e.needReadable = !0), this._read(e.highWaterMark), e.sync = !1, e.reading || (t = w(n, e))), null === (i = t > 0 ? M(t, e) : null) ? (e.needReadable = !0, t = 0) : e.length -= t, 0 === e.length && (e.ended || (e.needReadable = !0), n !== t && e.ended && I(this)), null !== i && this.emit("data", i), i } , y.prototype._read = function(t) { this.emit("error", new Error("_read() is not implemented")) } , y.prototype.pipe = function(t, e) { var n = this , a = this._readableState; switch (a.pipesCount) { case 0: a.pipes = t; break; case 1: a.pipes = [a.pipes, t]; break; default: a.pipes.push(t) } a.pipesCount += 1, f("pipe count=%d opts=%j", a.pipesCount, e); var l = (!e || !1 !== e.end) && t !== i.stdout && t !== i.stderr ? u : y; function c(e, i) { f("onunpipe"), e === n && i && !1 === i.hasUnpiped && (i.hasUnpiped = !0, f("cleanup"), t.removeListener("close", v), t.removeListener("finish", m), t.removeListener("drain", d), t.removeListener("error", p), t.removeListener("unpipe", c), n.removeListener("end", u), n.removeListener("end", y), n.removeListener("data", g), h = !0, !a.awaitDrain || t._writableState && !t._writableState.needDrain || d()) } function u() { f("onend"), t.end() } a.endEmitted ? r.nextTick(l) : n.once("end", l), t.on("unpipe", c); var d = function(t) { return function() { var e = t._readableState; f("pipeOnDrain", e.awaitDrain), e.awaitDrain && e.awaitDrain--, 0 === e.awaitDrain && s(t, "data") && (e.flowing = !0, D(t)) } }(n); t.on("drain", d); var h = !1; var _ = !1; function g(e) { f("ondata"), _ = !1, !1 !== t.write(e) || _ || ((1 === a.pipesCount && a.pipes === t || a.pipesCount > 1 && -1 !== N(a.pipes, t)) && !h && (f("false write response, pause", n._readableState.awaitDrain), n._readableState.awaitDrain++, _ = !0), n.pause()) } function p(e) { f("onerror", e), y(), t.removeListener("error", p), 0 === s(t, "error") && t.emit("error", e) } function v() { t.removeListener("finish", m), y() } function m() { f("onfinish"), t.removeListener("close", v), y() } function y() { f("unpipe"), n.unpipe(t) } return n.on("data", g), function(t, e, n) { if ("function" == typeof t.prependListener) return t.prependListener(e, n); t._events && t._events[e] ? o(t._events[e]) ? t._events[e].unshift(n) : t._events[e] = [n, t._events[e]] : t.on(e, n) }(t, "error", p), t.once("close", v), t.once("finish", m), t.emit("pipe", n), a.flowing || (f("pipe resume"), n.resume()), t } , y.prototype.unpipe = function(t) { var e = this._readableState , n = { hasUnpiped: !1 }; if (0 === e.pipesCount) return this; if (1 === e.pipesCount) return t && t !== e.pipes ? this : (t || (t = e.pipes), e.pipes = null, e.pipesCount = 0, e.flowing = !1, t && t.emit("unpipe", this, n), this); if (!t) { var i = e.pipes , r = e.pipesCount; e.pipes = null, e.pipesCount = 0, e.flowing = !1; for (var a = 0; a < r; a++) i[a].emit("unpipe", this, n); return this } var o = N(e.pipes, t); return -1 === o ? this : (e.pipes.splice(o, 1), e.pipesCount -= 1, 1 === e.pipesCount && (e.pipes = e.pipes[0]), t.emit("unpipe", this, n), this) } , y.prototype.on = function(t, e) { var n = l.prototype.on.call(this, t, e); if ("data" === t) !1 !== this._readableState.flowing && this.resume(); else if ("readable" === t) { var i = this._readableState; i.endEmitted || i.readableListening || (i.readableListening = i.needReadable = !0, i.emittedReadable = !1, i.reading ? i.length && S(this) : r.nextTick(E, this)) } return n } , y.prototype.addListener = y.prototype.on, y.prototype.resume = function() { var t = this._readableState; return t.flowing || (f("resume"), t.flowing = !0, function(t, e) { e.resumeScheduled || (e.resumeScheduled = !0, r.nextTick(A, t, e)) }(this, t)), this } , y.prototype.pause = function() { return f("call pause flowing=%j", this._readableState.flowing), !1 !== this._readableState.flowing && (f("pause"), this._readableState.flowing = !1, this.emit("pause")), this } , y.prototype.wrap = function(t) { var e = this , n = this._readableState , i = !1; for (var r in t.on("end", function() { if (f("wrapped end"), n.decoder && !n.ended) { var t = n.decoder.end(); t && t.length && e.push(t) } e.push(null) }), t.on("data", function(r) { (f("wrapped data"), n.decoder && (r = n.decoder.write(r)), !n.objectMode || null !== r && void 0 !== r) && ((n.objectMode || r && r.length) && (e.push(r) || (i = !0, t.pause()))) }), t) void 0 === this[r] && "function" == typeof t[r] && (this[r] = function(e) { return function() { return t[e].apply(t, arguments) } }(r)); for (var a = 0; a < v.length; a++) t.on(v[a], this.emit.bind(this, v[a])); return this._read = function(e) { f("wrapped _read", e), i && (i = !1, t.resume()) } , this } , Object.defineProperty(y.prototype, "readableHighWaterMark", { enumerable: !1, get: function() { return this._readableState.highWaterMark } }), y._fromList = M } ).call(this, n(4), n(9)) } , function(t, e, n) { (e = t.exports = n(62)).Stream = e, e.Readable = e, e.Writable = n(58), e.Duplex = n(12), e.Transform = n(55), e.PassThrough = n(282) } , function(t, e, n) { (function(t, i, r) { var a = n(65) , o = n(8) , s = n(63) , l = e.readyStates = { UNSENT: 0, OPENED: 1, HEADERS_RECEIVED: 2, LOADING: 3, DONE: 4 } , c = e.IncomingMessage = function(e, n, o, l) { var c = this; if (s.Readable.call(c), c._mode = o, c.headers = {}, c.rawHeaders = [], c.trailers = {}, c.rawTrailers = [], c.on("end", function() { t.nextTick(function() { c.emit("close") }) }), "fetch" === o) { if (c._fetchResponse = n, c.url = n.url, c.statusCode = n.status, c.statusMessage = n.statusText, n.headers.forEach(function(t, e) { c.headers[e.toLowerCase()] = t, c.rawHeaders.push(e, t) }), a.writableStream) { var u = new WritableStream({ write: function(t) { return new Promise(function(e, n) { c._destroyed ? n() : c.push(new r(t)) ? e() : c._resumeFetch = e } ) }, close: function() { i.clearTimeout(l), c._destroyed || c.push(null) }, abort: function(t) { c._destroyed || c.emit("error", t) } }); try { return void n.body.pipeTo(u).catch(function(t) { i.clearTimeout(l), c._destroyed || c.emit("error", t) }) } catch (t) {} } var d = n.body.getReader(); !function t() { d.read().then(function(e) { if (!c._destroyed) { if (e.done) return i.clearTimeout(l), void c.push(null); c.push(new r(e.value)), t() } }).catch(function(t) { i.clearTimeout(l), c._destroyed || c.emit("error", t) }) }() } else { if (c._xhr = e, c._pos = 0, c.url = e.responseURL, c.statusCode = e.status, c.statusMessage = e.statusText, e.getAllResponseHeaders().split(/\r?\n/).forEach(function(t) { var e = t.match(/^([^:]+):\s*(.*)/); if (e) { var n = e[1].toLowerCase(); "set-cookie" === n ? (void 0 === c.headers[n] && (c.headers[n] = []), c.headers[n].push(e[2])) : void 0 !== c.headers[n] ? c.headers[n] += ", " + e[2] : c.headers[n] = e[2], c.rawHeaders.push(e[1], e[2]) } }), c._charset = "x-user-defined", !a.overrideMimeType) { var h = c.rawHeaders["mime-type"]; if (h) { var f = h.match(/;\s*charset=([^;])(;|$)/); f && (c._charset = f[1].toLowerCase()) } c._charset || (c._charset = "utf-8") } } } ; o(c, s.Readable), c.prototype._read = function() { var t = this._resumeFetch; t && (this._resumeFetch = null, t()) } , c.prototype._onXHRProgress = function() { var t = this , e = t._xhr , n = null; switch (t._mode) { case "text:vbarray": if (e.readyState !== l.DONE) break; try { n = new i.VBArray(e.responseBody).toArray() } catch (t) {} if (null !== n) { t.push(new r(n)); break } case "text": try { n = e.responseText } catch (e) { t._mode = "text:vbarray"; break } if (n.length > t._pos) { var a = n.substr(t._pos); if ("x-user-defined" === t._charset) { for (var o = new r(a.length), s = 0; s < a.length; s++) o[s] = 255 & a.charCodeAt(s); t.push(o) } else t.push(a, t._charset); t._pos = n.length } break; case "arraybuffer": if (e.readyState !== l.DONE || !e.response) break; n = e.response, t.push(new r(new Uint8Array(n))); break; case "moz-chunked-arraybuffer": if (n = e.response, e.readyState !== l.LOADING || !n) break; t.push(new r(new Uint8Array(n))); break; case "ms-stream": if (n = e.response, e.readyState !== l.LOADING) break; var c = new i.MSStreamReader; c.onprogress = function() { c.result.byteLength > t._pos && (t.push(new r(new Uint8Array(c.result.slice(t._pos)))), t._pos = c.result.byteLength) } , c.onload = function() { t.push(null) } , c.readAsArrayBuffer(n) } t._xhr.readyState === l.DONE && "ms-stream" !== t._mode && t.push(null) } } ).call(this, n(9), n(4), n(13).Buffer) } , function(t, e, n) { (function(t) { e.fetch = s(t.fetch) && s(t.ReadableStream), e.writableStream = s(t.WritableStream), e.abortController = s(t.AbortController), e.blobConstructor = !1; try { new Blob([new ArrayBuffer(1)]), e.blobConstructor = !0 } catch (t) {} var n; function i() { if (void 0 !== n) return n; if (t.XMLHttpRequest) { n = new t.XMLHttpRequest; try { n.open("GET", t.XDomainRequest ? "/" : "https://example.com") } catch (t) { n = null } } else n = null; return n } function r(t) { var e = i(); if (!e) return !1; try { return e.responseType = t, e.responseType === t } catch (t) {} return !1 } var a = void 0 !== t.ArrayBuffer , o = a && s(t.ArrayBuffer.prototype.slice); function s(t) { return "function" == typeof t } e.arraybuffer = e.fetch || a && r("arraybuffer"), e.msstream = !e.fetch && o && r("ms-stream"), e.mozchunkedarraybuffer = !e.fetch && a && r("moz-chunked-arraybuffer"), e.overrideMimeType = e.fetch || !!i() && s(i().overrideMimeType), e.vbArray = s(t.VBArray), n = null } ).call(this, n(4)) } , function(t, e, n) { (function(t) { var i = n(288) , r = n(64) , a = n(280) , o = n(279) , s = n(54) , l = e; l.request = function(e, n) { e = "string" == typeof e ? s.parse(e) : a(e); var r = -1 === t.location.protocol.search(/^https?:$/) ? "http:" : "" , o = e.protocol || r , l = e.hostname || e.host , c = e.port , u = e.path || "/"; l && -1 !== l.indexOf(":") && (l = "[" + l + "]"), e.url = (l ? o + "//" + l : "") + (c ? ":" + c : "") + u, e.method = (e.method || "GET").toUpperCase(), e.headers = e.headers || {}; var d = new i(e); return n && d.on("response", n), d } , l.get = function(t, e) { var n = l.request(t, e); return n.end(), n } , l.ClientRequest = i, l.IncomingMessage = r.IncomingMessage, l.Agent = function() {} , l.Agent.defaultMaxSockets = 4, l.globalAgent = new l.Agent, l.STATUS_CODES = o, l.METHODS = ["CHECKOUT", "CONNECT", "COPY", "DELETE", "GET", "HEAD", "LOCK", "M-SEARCH", "MERGE", "MKACTIVITY", "MKCOL", "MOVE", "NOTIFY", "OPTIONS", "PATCH", "POST", "PROPFIND", "PROPPATCH", "PURGE", "PUT", "REPORT", "SEARCH", "SUBSCRIBE", "TRACE", "UNLOCK", "UNSUBSCRIBE"] } ).call(this, n(4)) } , function(t, e) { var n = {}.toString; t.exports = Array.isArray || function(t) { return "[object Array]" == n.call(t) } } , function(t, e) { t.exports = function(t) { var e = new RegExp("<(?:.|\n)*?>","gm") , n = new RegExp(" +","gm"); function i(t) { return (t + "").replace(e, " ").replace(n, " ") } var r = new RegExp("'","gm"); function a(t) { return (t + "").replace(r, "'") } for (var o in t._waiAria = { getAttributeString: function(t) { var e = [" "]; for (var n in t) { var r = a(i(t[n])); e.push(n + "='" + r + "'") } return e.push(" "), e.join(" ") }, getTimelineCellAttr: function(e) { return t._waiAria.getAttributeString({ "aria-label": e }) }, _taskCommonAttr: function(e, n) { e.start_date && e.end_date && (n.setAttribute("aria-label", i(t.templates.tooltip_text(e.start_date, e.end_date, e))), e.$dataprocessor_class && n.setAttribute("aria-busy", !0)) }, setTaskBarAttr: function(e, n) { this._taskCommonAttr(e, n), n.setAttribute("role", "img"), !t.isReadonly(e) && t.config.drag_move && (e.id != t.getState("tasksDnd").drag_id ? n.setAttribute("aria-grabbed", !1) : n.setAttribute("aria-grabbed", !0)) }, taskRowAttr: function(e, n) { this._taskCommonAttr(e, n), !t.isReadonly(e) && t.config.order_branch && n.setAttribute("aria-grabbed", !1), n.setAttribute("role", "row"), n.setAttribute("aria-selected", t.isSelectedTask(e.id) ? "true" : "false"), n.setAttribute("aria-level", e.$level + 1 || 1), t.hasChild(e.id) && n.setAttribute("aria-expanded", e.$open ? "true" : "false") }, linkAttr: function(e, n) { var r = t.config.links , a = e.type == r.finish_to_start || e.type == r.start_to_start , o = e.type == r.start_to_start || e.type == r.start_to_finish , s = t.locale.labels.link + " " + t.templates.drag_link(e.source, o, e.target, a); n.setAttribute("role", "img"), n.setAttribute("aria-label", i(s)), t.isReadonly(e) && n.setAttribute("aria-readonly", !0) }, gridSeparatorAttr: function(t) { t.setAttribute("role", "columnheader") }, rowResizerAttr: function(t) { t.setAttribute("role", "row") }, lightboxHiddenAttr: function(t) { t.setAttribute("aria-hidden", "true") }, lightboxVisibleAttr: function(t) { t.setAttribute("aria-hidden", "false") }, lightboxAttr: function(t) { t.setAttribute("role", "dialog"), t.setAttribute("aria-hidden", "true"), t.firstChild.setAttribute("role", "heading"), t.firstChild.setAttribute("aria-level", "1") }, lightboxButtonAttrString: function(e) { return this.getAttributeString({ role: "button", "aria-label": t.locale.labels[e], tabindex: "0" }) }, lightboxHeader: function(t, e) { t.setAttribute("aria-label", e) }, lightboxSelectAttrString: function(e) { var n = ""; switch (e) { case "%Y": n = t.locale.labels.years; break; case "%m": n = t.locale.labels.months; break; case "%d": n = t.locale.labels.days; break; case "%H:%i": n = t.locale.labels.hours + t.locale.labels.minutes } return t._waiAria.getAttributeString({ "aria-label": n }) }, lightboxDurationInputAttrString: function(e) { return this.getAttributeString({ "aria-label": t.locale.labels.column_duration, "aria-valuemin": "0", role: "spinbutton" }) }, inlineEditorAttr: function(t) { t.setAttribute("role", "row") }, gridAttrString: function() { return [" role='treegrid'", t.config.multiselect ? "aria-multiselectable='true'" : "aria-multiselectable='false'", " "].join(" ") }, gridScaleRowAttrString: function() { return "role='row'" }, gridScaleCellAttrString: function(e, n) { var i = ""; if ("add" == e.name) i = this.getAttributeString({ role: "columnheader", "aria-label": t.locale.labels.new_task }); else { var r = { role: "columnheader", "aria-label": n }; t._sort && t._sort.name == e.name && ("asc" == t._sort.direction ? r["aria-sort"] = "ascending" : r["aria-sort"] = "descending"), i = this.getAttributeString(r) } return i }, gridDataAttrString: function() { return "role='rowgroup'" }, reorderMarkerAttr: function(t) { t.setAttribute("role", "grid"), t.firstChild.removeAttribute("aria-level"), t.firstChild.setAttribute("aria-grabbed", "true") }, gridCellAttrString: function(e, n, i) { var r = { role: "gridcell", "aria-label": n }; return e.editor && !t.isReadonly(i) || (r["aria-readonly"] = !0), this.getAttributeString(r) }, gridAddButtonAttrString: function(e) { return this.getAttributeString({ role: "button", "aria-label": t.locale.labels.new_task }) }, messageButtonAttrString: function(t) { return "tabindex='0' role='button' aria-label='" + t + "'" }, messageInfoAttr: function(t) { t.setAttribute("role", "alert") }, messageModalAttr: function(t, e) { t.setAttribute("role", "dialog"), e && t.setAttribute("aria-labelledby", e) }, quickInfoAttr: function(t) { t.setAttribute("role", "dialog") }, quickInfoHeaderAttrString: function() { return " role='heading' aria-level='1' " }, quickInfoHeader: function(t, e) { t.setAttribute("aria-label", e) }, quickInfoButtonAttrString: function(e) { return t._waiAria.getAttributeString({ role: "button", "aria-label": e, tabindex: "0" }) }, tooltipAttr: function(t) { t.setAttribute("role", "tooltip") }, tooltipVisibleAttr: function(t) { t.setAttribute("aria-hidden", "false") }, tooltipHiddenAttr: function(t) { t.setAttribute("aria-hidden", "true") } }, t._waiAria) t._waiAria[o] = function(e) { return function() { return t.config.wai_aria_attributes ? e.apply(this, arguments) : "" } }(t._waiAria[o]) } } , function(t, e) { t.exports = function(t) { t._extend_to_optional = function(e) { var n = e , i = { render: n.render, focus: n.focus, set_value: function(e, r, a, o) { var s = t._resolve_default_mapping(o); if (!a[s.start_date] || "start_date" == s.start_date && this._isAllowedUnscheduledTask(a)) { i.disable(e, o); var l = {}; for (var c in s) l[s[c]] = a[c]; return n.set_value.call(t, e, r, l, o) } return i.enable(e, o), n.set_value.call(t, e, r, a, o) }, get_value: function(e, i, r) { return r.disabled ? { start_date: null } : n.get_value.call(t, e, i, r) }, update_block: function(e, n) { if (t.callEvent("onSectionToggle", [t._lightbox_id, n]), e.style.display = n.disabled ? "none" : "block", n.button) { var i = e.previousSibling.querySelector(".gantt_custom_button_label") , r = t.locale.labels , a = n.disabled ? r[n.name + "_enable_button"] : r[n.name + "_disable_button"]; i.innerHTML = a } t.resizeLightbox() }, disable: function(t, e) { e.disabled = !0, i.update_block(t, e) }, enable: function(t, e) { e.disabled = !1, i.update_block(t, e) }, button_click: function(e, n, r, a) { if (!1 !== t.callEvent("onSectionButton", [t._lightbox_id, r])) { var o = t._get_typed_lightbox_config()[e]; o.disabled ? i.enable(a, o) : i.disable(a, o) } } }; return i } , t.form_blocks.duration_optional = t._extend_to_optional(t.form_blocks.duration), t.form_blocks.time_optional = t._extend_to_optional(t.form_blocks.time) } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(18)(t); function r() { return e.apply(this, arguments) || this } return i(r, e), r.prototype.render = function(n) { var i = t.config.types , r = t.locale.labels , a = [] , o = n.filter || function(t, e) { return !i.placeholder || e !== i.placeholder } ; for (var s in i) !1 == !o(s, i[s]) && a.push({ key: i[s], label: r["type_" + s] }); n.options = a; var l = n.onchange; return n.onchange = function() { t.changeLightboxType(this.value), this.value === t.config.types.task && (t._lightbox_new_type = "task"), "function" == typeof l && l.apply(this, arguments) } , e.prototype.render.apply(this, arguments) } , r } } , function(t, e, n) { var i = n(3) , r = n(36); t.exports = function(t) { var e = n(7)(t); function a() { return e.apply(this, arguments) || this } function o(e) { return !e || e === t.config.constraint_types.ASAP || e === t.config.constraint_types.ALAP } function s(t, e) { for (var n = o(e), i = 0; i < t.length; i++) t[i].disabled = n } return i(a, e), a.prototype.render = function(e) { var n = (e.height || 30) + "px" , i = "
" , a = []; for (var o in t.config.constraint_types) a.push({ key: t.config.constraint_types[o], label: t.locale.labels[t.config.constraint_types[o]] }); return e.options = e.options || a, i += "" + r.getHtmlSelect(e.options, [{ key: "data-type", value: "constraint-type" }]) + "", i += "", i += "
" } , a.prototype.set_value = function(e, n, i, r) { var a = e.querySelector("[data-constraint-type-select] select") , o = e.querySelectorAll("[data-constraint-time-select] select") , l = r._time_format_order , c = t._resolve_default_mapping(r); a._eventsInitialized || (a.addEventListener("change", function(t) { s(o, t.target.value) }), a._eventsInitialized = !0); var u = i[c.constraint_date] || new Date; t.form_blocks._fill_lightbox_select(o, 0, u, l, r); var d = i[c.constraint_type] || t.getConstraintType(i); a.value = d, s(o, d) } , a.prototype.get_value = function(e, n, i) { var r = e.querySelector("[data-constraint-type-select] select") , a = e.querySelectorAll("[data-constraint-time-select] select") , s = r.value , l = null; return o(s) || (l = t.form_blocks.getTimePickerValue(a, i)), { constraint_type: s, constraint_date: l } } , a.prototype.focus = function(e) { t._focus(e.querySelector("select")) } , a } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(18)(t); function r() { return e.apply(this, arguments) || this } function a(e, n) { var i = [] , r = []; n && (i = t.getTaskByTime(), e.allow_root && i.unshift({ id: t.config.root_id, text: e.root_label || "" }), i = function(e, n, i) { var r = n.filter || function() { return !0 } ; e = e.slice(0); for (var a = 0; a < e.length; a++) { var o = e[a]; (o.id == i || t.isChildOf(o.id, i) || !1 === r(o.id, o)) && (e.splice(a, 1), a--) } return e }(i, e, n), e.sort && i.sort(e.sort)); for (var a = e.template || t.templates.task_text, o = 0; o < i.length; o++) { var s = a.apply(t, [i[o].start_date, i[o].end_date, i[o]]); void 0 === s && (s = ""), r.push({ key: i[o].id, label: s }) } return e.options = r, e.map_to = e.map_to || "parent", t.form_blocks.select.render.apply(this, arguments) } return i(r, e), r.prototype.render = function(t) { return a(t, !1) } , r.prototype.set_value = function(e, n, i, r) { 0 === n && (n = "0"); var o = document.createElement("div"); o.innerHTML = a(r, i.id); var s = o.removeChild(o.firstChild); return e.onselect = null, e.parentNode.replaceChild(s, e), t.form_blocks.select.set_value.apply(t, [s, n, i, r]) } , r } } , function(t, e, n) { var i = n(3) , r = n(44).default; t.exports = function(t) { var e = n(7)(t); function a() { return e.apply(this, arguments) || this } function o(t) { return t.formatter || new r } function s(e, n) { var i = e.getElementsByTagName("select") , r = n._time_format_order , a = 0 , o = 0; if (t.defined(r[3])) { var s = i[r[3]] , l = parseInt(s.value, 10); isNaN(l) && s.hasAttribute("data-value") && (l = parseInt(s.getAttribute("data-value"), 10)), a = Math.floor(l / 60), o = l % 60 } return new Date(i[r[2]].value,i[r[1]].value,i[r[0]].value,a,o) } function l(t, e) { var n = t.getElementsByTagName("input")[1]; return (n = o(e).parse(n.value)) && !window.isNaN(n) || (n = 1), n < 0 && (n *= -1), n } return i(a, e), a.prototype.render = function(e) { var n = "
" + t.form_blocks.getTimePicker.call(this, e) + "
" , i = " " + t.locale.labels[t.config.duration_unit + "s"] + " " , r = e.single_date ? " style='display:none'" : "" , a = e.readonly ? " disabled='disabled'" : "" , o = t._waiAria.lightboxDurationInputAttrString(e) , s = "gantt_duration_value"; e.formatter && (i = "", s += " gantt_duration_value_formatted"); var l = "
" + i + "
"; return "
" + n + " " + l + "
" } , a.prototype.set_value = function(e, n, i, r) { var a, c, u, d, h = e.getElementsByTagName("select"), f = e.getElementsByTagName("input"), _ = f[1], g = [f[0], f[2]], p = e.getElementsByTagName("span")[0], v = r._time_format_order; function m() { var n = s.call(t, e, r) , a = l.call(t, e, r) , o = t.calculateEndDate({ start_date: n, duration: a, task: i }) , c = t.templates.task_end_date || t.templates.task_date; p.innerHTML = c(o) } function y(t) { var e = _.value; e = o(r).parse(e), window.isNaN(e) && (e = 0), (e += t) < 1 && (e = 1), _.value = o(r).format(e), m() } g[0].onclick = t.bind(function() { y(-1 * t.config.duration_step) }, this), g[1].onclick = t.bind(function() { y(1 * t.config.duration_step) }, this), h[0].onchange = m, h[1].onchange = m, h[2].onchange = m, h[3] && (h[3].onchange = m), _.onkeydown = t.bind(function(e) { var n; return (n = (e = e || window.event).charCode || e.keyCode || e.which) == t.constants.KEY_CODES.DOWN ? (y(-1 * t.config.duration_step), !1) : n == t.constants.KEY_CODES.UP ? (y(1 * t.config.duration_step), !1) : void window.setTimeout(m, 1) }, this), _.onchange = t.bind(m, this), "string" == typeof (a = t._resolve_default_mapping(r)) && (a = { start_date: a }), c = i[a.start_date] || new Date, u = i[a.end_date] || t.calculateEndDate({ start_date: c, duration: 1, task: i }), d = Math.round(i[a.duration]) || t.calculateDuration({ start_date: c, end_date: u, task: i }), d = o(r).format(d), t.form_blocks._fill_lightbox_select(h, 0, c, v, r), _.value = d, m() } , a.prototype.get_value = function(e, n, i) { var r = s(e, i) , a = l(e, i) , o = t.calculateEndDate({ start_date: r, duration: a, task: n }); return "string" == typeof t._resolve_default_mapping(i) ? r : { start_date: r, end_date: o, duration: a } } , a.prototype.focus = function(e) { t._focus(e.getElementsByTagName("select")[0]) } , a } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(7)(t); function r() { return e.apply(this, arguments) || this } return i(r, e), r.prototype.render = function(t) { var e = "
"; if (t.options && t.options.length) for (var n = 0; n < t.options.length; n++) e += ""; return e += "
" } , r.prototype.set_value = function(t, e, n, i) { var r; i.options && i.options.length && (r = t.querySelector("input[type=radio][value='" + e + "']") || t.querySelector("input[type=radio][value='" + i.default_value + "']")) && (!t._dhx_onchange && i.onchange && (t.onchange = i.onchange, t._dhx_onchange = !0), r.checked = !0) } , r.prototype.get_value = function(t, e) { var n = t.querySelector("input[type=radio]:checked"); return n ? n.value : "" } , r.prototype.focus = function(e) { t._focus(e.querySelector("input[type=radio]")) } , r } } , function(t, e, n) { var i = n(2) , r = n(3); t.exports = function(t) { var e = n(7)(t); function a() { return e.apply(this, arguments) || this } return r(a, e), a.prototype.render = function(t) { var e = "
"; if (t.options && t.options.length) for (var n = 0; n < t.options.length; n++) e += ""; else t.single_value = !0, e += ""; return e += "
" } , a.prototype.set_value = function(t, e, n, r) { var a = Array.prototype.slice.call(t.querySelectorAll("input[type=checkbox]")); (!t._dhx_onchange && r.onchange && (t.onchange = r.onchange, t._dhx_onchange = !0), r.single_value) ? a[0].checked = !!e : i.forEach(a, function(t) { t.checked = !!e && e.indexOf(t.value) >= 0 }) } , a.prototype.get_value = function(t, e, n) { return n.single_value ? t.querySelector("input[type=checkbox]").checked : i.arrayMap(Array.prototype.slice.call(t.querySelectorAll("input[type=checkbox]:checked")), function(t) { return t.value }) } , a.prototype.focus = function(e) { t._focus(e.querySelector("input[type=checkbox]")) } , a } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(7)(t); function r() { return e.apply(this, arguments) || this } return i(r, e), r.prototype.render = function(e) { var n = t.form_blocks.getTimePicker.call(this, e) , i = "
"; return i += n, e.single_date ? (n = t.form_blocks.getTimePicker.call(this, e, !0), i += "") : i += "  –  ", i += n, i += "
" } , r.prototype.set_value = function(e, n, i, r) { var a = r , o = e.getElementsByTagName("select") , s = r._time_format_order; if (a.auto_end_date) for (var l = function() { d = new Date(o[s[2]].value,o[s[1]].value,o[s[0]].value,0,0), h = t.calculateEndDate({ start_date: d, duration: 1, task: i }), t.form_blocks._fill_lightbox_select(o, s.size, h, s, a) }, c = 0; c < 4; c++) o[c].onchange = l; var u = t._resolve_default_mapping(r); "string" == typeof u && (u = { start_date: u }); var d = i[u.start_date] || new Date , h = i[u.end_date] || t.calculateEndDate({ start_date: d, duration: 1, task: i }); t.form_blocks._fill_lightbox_select(o, 0, d, s, a), t.form_blocks._fill_lightbox_select(o, s.size, h, s, a) } , r.prototype.get_value = function(e, n, i) { var r, a = e.getElementsByTagName("select"), o = i._time_format_order; return r = t.form_blocks.getTimePickerValue(a, i), "string" == typeof t._resolve_default_mapping(i) ? r : { start_date: r, end_date: function(e, n, r) { var a = t.form_blocks.getTimePickerValue(e, i, n.size); return a <= r && (!1 !== i.autofix_end || i.single_date) ? t.date.add(r, t._get_timepicker_step(), "minute") : a }(a, o, r) } } , r.prototype.focus = function(e) { t._focus(e.getElementsByTagName("select")[0]) } , r } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(7)(t); function r() { return e.apply(this, arguments) || this } return i(r, e), r.prototype.render = function(t) { return "
" } , r.prototype.set_value = function(e, n) { t.form_blocks.textarea._get_input(e).value = n || "" } , r.prototype.get_value = function(e) { return t.form_blocks.textarea._get_input(e).value } , r.prototype.focus = function(e) { var n = t.form_blocks.textarea._get_input(e); t._focus(n, !0) } , r.prototype._get_input = function(t) { return t.querySelector("textarea") } , r } } , function(t, e, n) { var i = n(3); t.exports = function(t) { var e = n(7)(t); function r() { return e.apply(this, arguments) || this } return i(r, e), r.prototype.render = function(t) { return "
" } , r.prototype.set_value = function(t, e) { t.innerHTML = e || "" } , r.prototype.get_value = function(t) { return t.innerHTML || "" } , r.prototype.focus = function() {} , r } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = function(t) { var e = n(1) , r = n(2) , a = n(78)(t) , o = n(77)(t) , s = n(76)(t) , l = n(18)(t) , c = n(75)(t) , u = n(74)(t) , d = n(73)(t) , h = n(72)(t) , f = n(18)(t) , _ = n(71)(t) , g = n(70)(t); function p(e, n) { var i, r, a = ""; for (r = 0; r < e.length; r++) i = t.config._migrate_buttons[e[r]] ? t.config._migrate_buttons[e[r]] : e[r], a += "
" + t.locale.labels[i] + "
"; return a } function v(e, n, i) { var r, a, o, s, l, c, u = ""; switch (i.timeFormat[n]) { case "%Y": for (e._time_format_order[2] = n, e._time_format_order.size++, e.year_range && (isNaN(e.year_range) ? e.year_range.push && (o = e.year_range[0], s = e.year_range[1]) : r = e.year_range), r = r || 10, a = a || Math.floor(r / 2), o = o || i.date.getFullYear() - a, s = s || t.getState().max_date.getFullYear() + a, l = o; l < s; l++) u += ""; break; case "%m": for (e._time_format_order[1] = n, e._time_format_order.size++, l = 0; l < 12; l++) u += ""; break; case "%d": for (e._time_format_order[0] = n, e._time_format_order.size++, l = 1; l < 32; l++) u += ""; break; case "%H:%i": for (e._time_format_order[3] = n, e._time_format_order.size++, l = i.first, c = i.date.getDate(), e._time_values = []; l < i.last; ) u += "", e._time_values.push(l), i.date.setTime(i.date.valueOf() + 60 * t._get_timepicker_step() * 1e3), l = 24 * (i.date.getDate() != c ? 1 : 0) * 60 + 60 * i.date.getHours() + i.date.getMinutes() } return u } t._lightbox_methods = {}, t._lightbox_template = "
 
", t._lightbox_root = t.$root, t.$services.getService("state").registerProvider("lightbox", function() { return { lightbox: t._lightbox_id } }), t.showLightbox = function(t) { if (this.callEvent("onBeforeLightbox", [t])) { var e = this.getTask(t) , n = this.getLightbox(this.getTaskType(e.type)); this._center_lightbox(n), this.showCover(), this._fill_lightbox(t, n), this._waiAria.lightboxVisibleAttr(n), this.callEvent("onLightbox", [t]) } } , t._get_timepicker_step = function() { if (this.config.round_dnd_dates) { var e; if (function(t) { var e = t.$ui.getView("timeline"); return !(!e || !e.isVisible()) }(this)) { var n = t.getScale(); e = r.getSecondsInUnit(n.unit) * n.step / 60 } return (!e || e >= 1440) && (e = this.config.time_step), e } return this.config.time_step } , t.getLabel = function(t, e) { for (var n = this._get_typed_lightbox_config(), i = 0; i < n.length; i++) if (n[i].map_to == t) for (var r = n[i].options, a = 0; a < r.length; a++) if (r[a].key == e) return r[a].label; return "" } , t.updateCollection = function(e, n) { n = n.slice(0); var i = t.serverList(e); if (!i) return !1; i.splice(0, i.length), i.push.apply(i, n || []), t.resetLightbox() } , t.getLightboxType = function() { return this.getTaskType(this._lightbox_type) } , t.getLightbox = function(e) { var n, i, r, a, o, s = ""; if (function() { var e = !0 === t.config.csp , n = !!window.Sfdc || !!window.$A || window.Aura || "$shadowResolver$"in document.body; t._lightbox_root = e || n ? t.$root : document.body }(), void 0 === e && (e = this.getLightboxType()), !this._lightbox || this.getLightboxType() != this.getTaskType(e)) { this._lightbox_type = this.getTaskType(e), n = document.createElement("div"), s = "gantt_cal_light", i = this._is_lightbox_timepicker(), (t.config.wide_form || i) && (s += " gantt_cal_light_wide"), i && (t.config.wide_form = !0, s += " gantt_cal_light_full"), n.className = s, n.style.visibility = "hidden", r = this._lightbox_template, r += p(this.config.buttons_left), r += p(this.config.buttons_right, !0), n.innerHTML = r, t._waiAria.lightboxAttr(n), t.config.drag_lightbox && (n.firstChild.onmousedown = t._ready_to_dnd, n.firstChild.onselectstart = function() { return !1 } , n.firstChild.style.cursor = "pointer", t._init_dnd_events()), this._lightbox && this.resetLightbox(), t._lightbox_root.insertBefore(n, t._lightbox_root.firstChild), this._lightbox = n, a = this._get_typed_lightbox_config(e), r = this._render_sections(a); var l = (o = n.querySelector("div.gantt_cal_larea")).style.overflow; o.style.overflow = "hidden", o.innerHTML = r, function(e) { var n, i, r, a, o, s; for (s = 0; s < e.length; s++) n = e[s], r = t._lightbox_root.querySelector("#" + n.id), n.id && r && (i = r.querySelector("label"), (a = r.nextSibling) && (o = a.querySelector("input, select, textarea")) && (o.id = o.id || "input_" + t.uid(), n.inputId = o.id, i.setAttribute("for", n.inputId))) }(a), this.resizeLightbox(), o.style.overflow = l, this._init_lightbox_events(this), n.style.display = "none", n.style.visibility = "visible" } return this._lightbox } , t._render_sections = function(t) { for (var e = "", n = 0; n < t.length; n++) { var i = this.form_blocks[t[n].type]; if (i) { t[n].id = "area_" + this.uid(); var r = t[n].hidden ? " style='display:none'" : "" , a = ""; t[n].button && (a = "
" + this.locale.labels["button_" + t[n].button] + "
"), this.config.wide_form && (e += "
"), e += "
" + i.render.call(this, t[n]), e += "
" } } return e } , t.resizeLightbox = function() { if (this._lightbox) { var t = this._lightbox.querySelector(".gantt_cal_larea"); t.style.height = "0px", t.style.height = t.scrollHeight + "px", this._lightbox.style.height = t.scrollHeight + this.config.lightbox_additional_height + "px", t.style.height = t.scrollHeight + "px" } } , t._center_lightbox = function(e) { if (e) { e.style.display = "block"; var n = window.pageYOffset || t._lightbox_root.scrollTop || document.documentElement.scrollTop , i = window.pageXOffset || t._lightbox_root.scrollLeft || document.documentElement.scrollLeft , r = window.innerHeight || document.documentElement.clientHeight; e.style.top = n ? Math.round(n + Math.max((r - e.offsetHeight) / 2, 0)) + "px" : Math.round(Math.max((r - e.offsetHeight) / 2, 0) + 9) + "px", document.documentElement.scrollWidth > t._lightbox_root.offsetWidth ? e.style.left = Math.round(i + (t._lightbox_root.offsetWidth - e.offsetWidth) / 2) + "px" : e.style.left = Math.round((t._lightbox_root.offsetWidth - e.offsetWidth) / 2) + "px" } } , t.showCover = function() { this._cover || (this._cover = document.createElement("DIV"), this._cover.className = "gantt_cal_cover", (t._lightbox_root || t.$root).appendChild(this._cover)) } , t.event(window, "deviceorientation", function() { t.getState().lightbox && t._center_lightbox(t.getLightbox()) }), t._init_lightbox_events = function() { t.lightbox_events = {}, t.lightbox_events.gantt_save_btn = function() { t._save_lightbox() } , t.lightbox_events.gantt_delete_btn = function() { t._lightbox_new_type = null, t.callEvent("onLightboxDelete", [t._lightbox_id]) && (t.isTaskExists(t._lightbox_id) ? t.$click.buttons.delete(t._lightbox_id) : t.hideLightbox()) } , t.lightbox_events.gantt_cancel_btn = function() { t._cancel_lightbox() } , t.lightbox_events.default = function(n, i) { if (i.getAttribute("data-dhx-button")) t.callEvent("onLightboxButton", [i.className, i, n]); else { var r, a, o = e.getClassName(i); if (-1 != o.indexOf("gantt_custom_button")) if (-1 != o.indexOf("gantt_custom_button_")) for (r = i.parentNode.getAttribute("data-index"), a = i; a && -1 == e.getClassName(a).indexOf("gantt_cal_lsection"); ) a = a.parentNode; else r = i.getAttribute("data-index"), a = i.parentNode, i = i.firstChild; var s = t._get_typed_lightbox_config(); r && (r *= 1, t.form_blocks[s[1 * r].type].button_click(r, i, a, a.nextSibling)) } } , this.event(t.getLightbox(), "click", function(n) { n = n || window.event; var i = e.getTargetNode(n) , r = e.getClassName(i); return r || (i = i.previousSibling, r = e.getClassName(i)), i && r && 0 === r.indexOf("gantt_btn_set") && (i = i.firstChild, r = e.getClassName(i)), !(!i || !r) && (t.defined(t.lightbox_events[i.className]) ? t.lightbox_events[i.className] : t.lightbox_events.default)(n, i) }), t.getLightbox().onkeydown = function(n) { var i = n || window.event , r = n.target || n.srcElement , a = e.getClassName(r).indexOf("gantt_btn_set") > -1; switch ((n || i).keyCode) { case t.constants.KEY_CODES.SPACE: if ((n || i).shiftKey) return; a && r.click && r.click(); break; case t.keys.edit_save: if ((n || i).shiftKey) return; a && r.click ? r.click() : t._save_lightbox(); break; case t.keys.edit_cancel: t._cancel_lightbox() } } } , t._cancel_lightbox = function() { var e = this.getLightboxValues(); this.callEvent("onLightboxCancel", [this._lightbox_id, e.$new]), t.isTaskExists(e.id) && e.$new && (this.silent(function() { t.$data.tasksStore.removeItem(e.id), t._update_flags(e.id, null) }), this.refreshData()), this.hideLightbox() } , t._save_lightbox = function() { var e = this.getLightboxValues(); this.callEvent("onLightboxSave", [this._lightbox_id, e, !!e.$new]) && (t.$data.tasksStore._skipTaskRecalculation = "lightbox", e.$new ? (delete e.$new, this.addTask(e, e.parent, this.getTaskIndex(e.id))) : this.isTaskExists(e.id) && (this.mixin(this.getTask(e.id), e, !0), this.refreshTask(e.id), this.updateTask(e.id)), t.$data.tasksStore._skipTaskRecalculation = !1, this.refreshData(), this.hideLightbox()) } , t._resolve_default_mapping = function(t) { var e = t.map_to; return !{ time: !0, time_optional: !0, duration: !0, duration_optional: !0 }[t.type] ? "constraint" === t.type && (t.map_to && "string" != typeof t.map_to || (e = { constraint_type: "constraint_type", constraint_date: "constraint_date" })) : "auto" == t.map_to ? e = { start_date: "start_date", end_date: "end_date", duration: "duration" } : "string" == typeof t.map_to && (e = { start_date: t.map_to }), e } , t.getLightboxValues = function() { var e = {}; t.isTaskExists(this._lightbox_id) && (e = this.mixin({}, this.getTask(this._lightbox_id))); for (var n = this._get_typed_lightbox_config(), r = 0; r < n.length; r++) { var a = t._lightbox_root.querySelector("#" + n[r].id); a = a ? a.nextSibling : a; var o = this.form_blocks[n[r].type]; if (o) { var s = o.get_value.call(this, a, e, n[r]) , l = t._resolve_default_mapping(n[r]); if ("string" == typeof l && "auto" != l) e[l] = s; else if ("object" == i(l)) for (var c in l) l[c] && (e[l[c]] = s[c]) } } return "task" == t._lightbox_new_type && (e.type = t.config.types.task, t._lightbox_new_type = null), e } , t.hideLightbox = function() { var t = this.getLightbox(); t && (t.style.display = "none"), this._waiAria.lightboxHiddenAttr(t), this._lightbox_id = null, this.hideCover(), this.callEvent("onAfterLightbox", []) } , t.hideCover = function() { this._cover && this._cover.parentNode.removeChild(this._cover), this._cover = null } , t.resetLightbox = function() { t._lightbox && !t._custom_lightbox && t._lightbox.parentNode.removeChild(t._lightbox), t._lightbox = null, t.hideCover() } , t._set_lightbox_values = function(e, n) { var i = e , r = n.getElementsByTagName("span") , a = []; t.templates.lightbox_header ? (a.push(""), a.push(t.templates.lightbox_header(i.start_date, i.end_date, i)), r[1].innerHTML = "", r[2].innerHTML = t.templates.lightbox_header(i.start_date, i.end_date, i)) : (a.push(this.templates.task_time(i.start_date, i.end_date, i)), a.push(String(this.templates.task_text(i.start_date, i.end_date, i) || "").substr(0, 70)), r[1].innerHTML = this.templates.task_time(i.start_date, i.end_date, i), r[2].innerHTML = String(this.templates.task_text(i.start_date, i.end_date, i) || "").substr(0, 70)), r[1].innerHTML = a[0], r[2].innerHTML = a[1], t._waiAria.lightboxHeader(n, a.join(" ")); for (var o = this._get_typed_lightbox_config(this.getLightboxType()), s = 0; s < o.length; s++) { var l = o[s]; if (this.form_blocks[l.type]) { var c = t._lightbox_root.querySelector("#" + l.id).nextSibling , u = this.form_blocks[l.type] , d = t._resolve_default_mapping(o[s]) , h = this.defined(i[d]) ? i[d] : l.default_value; u.set_value.call(t, c, h, i, l), l.focus && u.focus.call(t, c) } } t.isTaskExists(e.id) && (t._lightbox_id = e.id) } , t._fill_lightbox = function(t, e) { var n = this.getTask(t); this._set_lightbox_values(n, e) } , t.getLightboxSection = function(e) { for (var n = this._get_typed_lightbox_config(), i = 0; i < n.length && n[i].name != e; i++) ; var r = n[i]; if (!r) return null; this._lightbox || this.getLightbox(); var a = t._lightbox_root.querySelector("#" + r.id) , o = a.nextSibling , s = { section: r, header: a, node: o, getValue: function(e) { return t.form_blocks[r.type].get_value.call(t, o, e || {}, r) }, setValue: function(e, n) { return t.form_blocks[r.type].set_value.call(t, o, e, n || {}, r) } } , l = this._lightbox_methods["get_" + r.type + "_control"]; return l ? l(s) : s } , t._lightbox_methods.get_template_control = function(t) { return t.control = t.node, t } , t._lightbox_methods.get_select_control = function(t) { return t.control = t.node.getElementsByTagName("select")[0], t } , t._lightbox_methods.get_textarea_control = function(t) { return t.control = t.node.getElementsByTagName("textarea")[0], t } , t._lightbox_methods.get_time_control = function(t) { return t.control = t.node.getElementsByTagName("select"), t } , t._init_dnd_events = function() { var e = t._lightbox_root; this.event(e, "mousemove", t._move_while_dnd), this.event(e, "mouseup", t._finish_dnd) } , t._move_while_dnd = function(e) { if (t._dnd_start_lb) { document.gantt_unselectable || (t._lightbox_root.className += " gantt_unselectable", document.gantt_unselectable = !0); var n = t.getLightbox() , i = [e.pageX, e.pageY]; n.style.top = t._lb_start[1] + i[1] - t._dnd_start_lb[1] + "px", n.style.left = t._lb_start[0] + i[0] - t._dnd_start_lb[0] + "px" } } , t._ready_to_dnd = function(e) { var n = t.getLightbox(); t._lb_start = [parseInt(n.style.left, 10), parseInt(n.style.top, 10)], t._dnd_start_lb = [e.pageX, e.pageY] } , t._finish_dnd = function() { t._lb_start && (t._lb_start = t._dnd_start_lb = !1, t._lightbox_root.className = t._lightbox_root.className.replace(" gantt_unselectable", ""), document.gantt_unselectable = !1) } , t._focus = function(e, n) { if (e && e.focus) if (t.config.touch) ; else try { n && e.select && e.select(), e.focus() } catch (t) {} } , t.form_blocks = { getTimePicker: function(e, n) { var i, a, o, s = "", l = this.config, c = { first: 0, last: 1440, date: this.date.date_part(new Date(t._min_date.valueOf())), timeFormat: function(e) { var n, i, a; if (e.time_format) return e.time_format; a = ["%d", "%m", "%Y"], n = t.getScale(), i = n ? n.unit : t.config.duration_unit, r.getSecondsInUnit(i) < r.getSecondsInUnit("day") && a.push("%H:%i"); return a }(e) }; for (e._time_format_order = { size: 0 }, t.config.limit_time_select && (c.first = 60 * l.first_hour, c.last = 60 * l.last_hour + 1, c.date.setHours(l.first_hour)), i = 0; i < c.timeFormat.length; i++) i > 0 && (s += " "), (a = v(e, i, c)) && (o = t._waiAria.lightboxSelectAttrString(c.timeFormat[i]), s += ""); return s }, getTimePickerValue: function(e, n, i) { var r, a = n._time_format_order, o = t.defined(a[3]), s = 0, l = 0, c = i || 0; return o && (r = parseInt(e[a[3] + c].value, 10), s = Math.floor(r / 60), l = r % 60), new Date(e[a[2] + c].value,e[a[1] + c].value,e[a[0] + c].value,s,l) }, _fill_lightbox_select: function(e, n, i, r) { if (e[n + r[0]].value = i.getDate(), e[n + r[1]].value = i.getMonth(), e[n + r[2]].value = i.getFullYear(), t.defined(r[3])) { var a = 60 * i.getHours() + i.getMinutes(); a = Math.round(a / t._get_timepicker_step()) * t._get_timepicker_step(); var o = e[n + r[3]]; o.value = a, o.setAttribute("data-value", a) } }, template: new a, textarea: new o, select: new l, time: new s, duration: new d, parent: new h, radio: new u, checkbox: new c, resources: new f, constraint: new _, typeselect: new g }, t._is_lightbox_timepicker = function() { for (var t = this._get_typed_lightbox_config(), e = 0; e < t.length; e++) if ("time" == t[e].name && "time" == t[e].type) return !0; return !1 } , t._simple_confirm = function(e, n, i, r) { if (!e) return i(); var a = { text: e }; n && (a.title = n), r && (a.ok = r), i && (a.callback = function(t) { t && i() } ), t.confirm(a) } , t._get_typed_lightbox_config = function(e) { void 0 === e && (e = this.getLightboxType()); var n = function(t) { for (var e in this.config.types) if (this.config.types[e] == t) return e; return "task" } .call(this, e); return t.config.lightbox[n + "_sections"] ? t.config.lightbox[n + "_sections"] : t.config.lightbox.sections } , t._silent_redraw_lightbox = function(t) { var e = this.getLightboxType(); if (this.getState().lightbox) { var n = this.getState().lightbox , i = this.getLightboxValues() , r = this.copy(this.getTask(n)); this.resetLightbox(); var a = this.mixin(r, i, !0) , o = this.getLightbox(t || void 0); this._center_lightbox(this.getLightbox()), this._set_lightbox_values(a, o), this.showCover() } else this.resetLightbox(), this.getLightbox(t || void 0); this.callEvent("onLightboxChange", [e, this.getLightboxType()]) } } } , function(t, e) { t.exports = function(t) { function e(e) { var n = e.$config.scrollX ? t.$ui.getView(e.$config.scrollX) : null , i = e.$config.scrollY ? t.$ui.getView(e.$config.scrollY) : null , r = { x: null, y: null }; n && (n.getScrollState().visible && (r.x = n.$view.scrollLeft)); i && (i.getScrollState().visible && (r.y = i.$view.scrollTop)); return r } function n() { var e; return t.$ui.getView("timeline") && (e = t.$ui.getView("timeline")._tasks_dnd), e } t.config.touch_drag = 500, t.config.touch = !0, t.config.touch_feedback = !0, t.config.touch_feedback_duration = 1, t._prevent_touch_scroll = !1, t._touch_feedback = function() { t.config.touch_feedback && navigator.vibrate && navigator.vibrate(t.config.touch_feedback_duration) } , t.attachEvent("onGanttReady", t.bind(function() { if ("force" != this.config.touch && (this.config.touch = this.config.touch && (-1 != navigator.userAgent.indexOf("Mobile") || -1 != navigator.userAgent.indexOf("iPad") || -1 != navigator.userAgent.indexOf("Android") || -1 != navigator.userAgent.indexOf("Touch")) || "MacIntel" === navigator.platform && navigator.maxTouchPoints > 1), this.config.touch) { var t = !0; try { document.createEvent("TouchEvent") } catch (e) { t = !1 } t ? this._touch_events(["touchmove", "touchstart", "touchend"], function(t) { return t.touches && t.touches.length > 1 ? null : t.touches[0] ? { target: t.target, pageX: t.touches[0].pageX, pageY: t.touches[0].pageY, clientX: t.touches[0].clientX, clientY: t.touches[0].clientY } : t }, function() { return !1 }) : window.navigator.pointerEnabled ? this._touch_events(["pointermove", "pointerdown", "pointerup"], function(t) { return "mouse" == t.pointerType ? null : t }, function(t) { return !t || "mouse" == t.pointerType }) : window.navigator.msPointerEnabled && this._touch_events(["MSPointerMove", "MSPointerDown", "MSPointerUp"], function(t) { return t.pointerType == t.MSPOINTER_TYPE_MOUSE ? null : t }, function(t) { return !t || t.pointerType == t.MSPOINTER_TYPE_MOUSE }) } }, t)); var i = []; t._touch_events = function(r, a, o) { for (var s, l = 0, c = !1, u = !1, d = null, h = null, f = null, _ = [], g = null, p = 0; p < i.length; p++) t.eventRemove(i[p][0], i[p][1], i[p][2]); (i = []).push([t.$container, r[0], function(i) { var r = n(); if (!o(i) && c) { h && clearTimeout(h); var f = a(i); if (r && (r.drag.id || r.drag.start_drag)) return r.on_mouse_move(f), i.preventDefault && i.preventDefault(), i.cancelBubble = !0, !1; if (!t._prevent_touch_scroll) { if (f && d) { var _ = d.pageX - f.pageX , p = d.pageY - f.pageY; if (!u && (Math.abs(_) > 5 || Math.abs(p) > 5) && (u = !0, l = 0, s = g ? e(g) : t.getScrollState()), u) { var m, y = s.x + _, k = s.y + p; if (g ? (!function(e, n, i) { var r = e.$config.scrollX ? t.$ui.getView(e.$config.scrollX) : null , a = e.$config.scrollY ? t.$ui.getView(e.$config.scrollY) : null; r && r.scrollTo(n, null), a && a.scrollTo(null, i) }(g, y, k), m = e(g)) : (t.scrollTo(y, k), m = t.getScrollState()), s.x != m.x && p > 2 * _ || s.y != m.y && _ > 2 * p) return v(i) } } return v(i) } return !0 } } ]), i.push([this.$container, "contextmenu", function(t) { if (c) return v(t) } ]), i.push([this.$container, r[1], function(e) { if (document && document.body && document.body.classList.add("gantt_touch_active"), !o(e)) if (e.touches && e.touches.length > 1) c = !1; else { d = a(e), g = function(e) { for (var n = t.$layout.getCellsByType("viewCell"), i = 0; i < n.length; i++) { var r = n[i].$view.getBoundingClientRect(); if (e.clientX >= r.left && e.clientX <= r.right && e.clientY <= r.bottom && e.clientY >= r.top) return n[i] } }(d), t._locate_css(d, "gantt_hor_scroll") || t._locate_css(d, "gantt_ver_scroll") || (c = !0); var i = n(); h = setTimeout(function() { var e = t.locate(d); i && e && !t._locate_css(d, "gantt_link_control") && !t._locate_css(d, "gantt_grid_data") && (i.on_mouse_down(d), i.drag && i.drag.start_drag && (!function(e) { var n = t._getTaskLayers() , i = t.getTask(e); if (i && t.isTaskVisible(e)) { f = e; for (var r = 0; r < n.length; r++) if ((i = n[r].rendered[e]) && i.getAttribute(t.config.task_attribute) && i.getAttribute(t.config.task_attribute) == e) { var a = i.cloneNode(!0); _.push(i), n[r].rendered[e] = a, i.style.display = "none", a.className += " gantt_drag_move ", i.parentNode.appendChild(a) } } }(e), i._start_dnd(d), t._touch_drag = !0, t.refreshTask(e), t._touch_feedback())), h = null }, t.config.touch_drag) } } ]), i.push([this.$container, r[2], function(e) { if (document && document.body && document.body.classList.remove("gantt_touch_active"), !o(e)) { h && clearTimeout(h), t._touch_drag = !1, c = !1; var i = a(e) , r = n(); if (r && r.on_mouse_up(i), f && t.isTaskExists(f) && (t.refreshTask(f), _.length && (_.forEach(function(t) { t.parentNode && t.parentNode.removeChild(t) }), t._touch_feedback())), c = u = !1, _ = [], f = null, d && l) { var s = new Date; if (s - l < 500) t.$services.getService("mouseEvents").onDoubleClick(d), v(e); else l = s } else l = new Date } } ]); for (p = 0; p < i.length; p++) t.event(i[p][0], i[p][1], i[p][2]); function v(t) { return t && t.preventDefault && t.preventDefault(), t.cancelBubble = !0, !1 } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(11) , r = n(5) , a = ["ctrlKey", "altKey", "shiftKey", "metaKey"] , o = [[{ unit: "month", date: "%M", step: 1 }, { unit: "day", date: "%d", step: 1 }], [{ unit: "day", date: "%d %M", step: 1 }], [{ unit: "day", date: "%d %M", step: 1 }, { unit: "hour", date: "%H:00", step: 8 }], [{ unit: "day", date: "%d %M", step: 1 }, { unit: "hour", date: "%H:00", step: 1 }]] , s = function() { function t(t) { var e = this; this.zoomIn = function() { var t = e.getCurrentLevel() - 1; t < 0 || e.setLevel(t) } , this.zoomOut = function() { var t = e.getCurrentLevel() + 1; t > e._levels.length - 1 || e.setLevel(t) } , this.getCurrentLevel = function() { return e._activeLevelIndex } , this.getLevels = function() { return e._levels } , this.setLevel = function(t) { var n = e._getZoomIndexByName(t); -1 === n && e.$gantt.assert(-1 !== n, "Invalid zoom level for gantt.ext.zoom.setLevel. " + t + " is not an expected value."), e._setLevel(n, 0) } , this._getZoomIndexByName = function(t) { var n = -1; if ("string" == typeof t) { if (!isNaN(Number(t)) && e._levels[Number(t)]) n = Number(t); else for (var i = 0; i < e._levels.length; i++) if (e._levels[i].name === t) { n = i; break } } else n = t; return n } , this._getVisibleDate = function() { if (!e.$gantt.$task) return null; var t = e.$gantt.getScrollState().x , n = e.$gantt.$task.offsetWidth; e._visibleDate = e.$gantt.dateFromPos(t + n / 2) } , this._setLevel = function(t, n) { e._activeLevelIndex = t; var i = e.$gantt , r = i.copy(e._levels[e._activeLevelIndex]) , a = i.copy(r); if (delete a.name, i.mixin(i.config, a, !0), !!i.$root && !!i.$task) { if (n) { var o = e.$gantt.dateFromPos(n + e.$gantt.getScrollState().x); e.$gantt.render(); var s = e.$gantt.posFromDate(o); e.$gantt.scrollTo(s - n) } else { var l = e.$gantt.$task.offsetWidth; e._visibleDate || e._getVisibleDate(); var c = e._visibleDate; e.$gantt.render(); s = e.$gantt.posFromDate(c); e.$gantt.scrollTo(s - l / 2) } e.callEvent("onAfterZoom", [e._activeLevelIndex, r]) } } , this._attachWheelEvent = function(t) { var n, r = i.isFF ? "wheel" : "mousewheel"; (n = "function" == typeof t.element ? t.element() : t.element) && e._domEvents.attach(n, r, e.$gantt.bind(function(t) { if (this._useKey) { if (a.indexOf(this._useKey) < 0) return !1; if (!t[this._useKey]) return !1 } if ("function" == typeof this._handler) return this._handler.apply(this, [t]), !0 }, e), { passive: !1 }) } , this._defaultHandler = function(t) { var n = e.$gantt.$task.getBoundingClientRect().x , i = t.clientX - n , r = !1; (e.$gantt.env.isFF ? -40 * t.deltaY : t.wheelDelta) > 0 && (r = !0), t.preventDefault(), t.stopPropagation(), e._setScaleSettings(r, i) } , this._setScaleDates = function() { e._initialStartDate && e._initialEndDate && (e.$gantt.config.start_date = e._initialStartDate, e.$gantt.config.end_date = e._initialEndDate) } , this.$gantt = t, this._domEvents = this.$gantt._createDomEventScope() } return t.prototype.init = function(t) { var e = this; this.$gantt.env.isNode || (this._initialStartDate = t.startDate, this._initialEndDate = t.endDate, this._activeLevelIndex = t.activeLevelIndex ? t.activeLevelIndex : 0, this._levels = this._mapScales(t.levels || o), this._handler = t.handler || this._defaultHandler, this._minColumnWidth = t.minColumnWidth || 60, this._maxColumnWidth = t.maxColumnWidth || 240, this._widthStep = t.widthStep || 3 / 8 * t.minColumnWidth, this._useKey = t.useKey, this._initialized || (r(this), this.$gantt.attachEvent("onGanttScroll", function() { e._getVisibleDate() })), this._domEvents.detachAll(), "wheel" === t.trigger && (this.$gantt.$root ? this._attachWheelEvent(t) : this.$gantt.attachEvent("onGanttReady", function() { e._attachWheelEvent(t) })), this._initialized = !0, this.setLevel(this._activeLevelIndex)) } , t.prototype._mapScales = function(t) { return t.map(function(t) { return Array.isArray(t) ? { scales: t } : t }) } , t.prototype._setScaleSettings = function(t, e) { t ? this._stepUp(e) : this._stepDown(e) } , t.prototype._stepUp = function(t) { if (!(this._activeLevelIndex >= this._levels.length - 1)) { var e = this._activeLevelIndex; if (this._setScaleDates(), this._widthStep) { var n = this.$gantt.config.min_column_width + this._widthStep; n > this._maxColumnWidth && (n = this._minColumnWidth, e++), this.$gantt.config.min_column_width = n } else e++; this._setLevel(e, t) } } , t.prototype._stepDown = function(t) { if (!(this._activeLevelIndex < 1)) { var e = this._activeLevelIndex; if (this._setScaleDates(), this._widthStep) { var n = this.$gantt.config.min_column_width - this._widthStep; n < this._minColumnWidth && (n = this._maxColumnWidth, e--), this.$gantt.config.min_column_width = n } else e--; this._setLevel(e, t) } } , t }(); e.default = s } , function(t, e) { window.dhtmlx && (window.dhtmlx.attaches || (window.dhtmlx.attaches = {}), window.dhtmlx.attaches.attachGantt = function(t, e, n) { var i = document.createElement("DIV"); n = n || window.gantt, i.id = "gantt_" + n.uid(), i.style.width = "100%", i.style.height = "100%", i.cmp = "grid", document.body.appendChild(i), this.attachObject(i.id), this.dataType = "gantt", this.dataObj = n; var r = this.vs[this.av]; r.grid = n, n.init(i.id, t, e), i.firstChild.style.border = "none", r.gridId = i.id, r.gridObj = i; return this.vs[this._viewRestore()].grid } ), void 0 !== window.dhtmlXCellObject && (window.dhtmlXCellObject.prototype.attachGantt = function(t, e, n) { n = n || window.gantt; var i = document.createElement("DIV"); return i.id = "gantt_" + n.uid(), i.style.width = "100%", i.style.height = "100%", i.cmp = "grid", document.body.appendChild(i), this.attachObject(i.id), this.dataType = "gantt", this.dataObj = n, n.init(i.id, t, e), i.firstChild.style.border = "none", i = null, this.callEvent("_onContentAttach", []), this.dataObj } ), t.exports = null } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } window.jQuery && function(t) { var e = []; t.fn.dhx_gantt = function(i) { if ("string" != typeof (i = i || {})) { var r = []; return this.each(function() { if (this && this.getAttribute) if (this.gantt || window.gantt.$root == this) r.push("object" == n(this.gantt) ? this.gantt : window.gantt); else { var t = window.gantt.$container && window.Gantt ? window.Gantt.getGanttInstance() : window.gantt; for (var e in i) "data" != e && (t.config[e] = i[e]); t.init(this), i.data && t.parse(i.data), r.push(t) } }), 1 === r.length ? r[0] : r } if (e[i]) return e[i].apply(this, []); t.error("Method " + i + " does not exist on jQuery.dhx_gantt") } }(window.jQuery), t.exports = null } , function(t, e, n) { var i = n(1) , r = n(15); t.exports = function(t) { var e = 50 , n = 30 , a = 10 , o = 50 , s = null , l = !1 , c = null , u = { started: !1 } , d = {}; function h(e) { return e && i.isChildOf(e, t.$root) && e.offsetHeight } function f() { var e = !!document.querySelector(".gantt_drag_marker") , n = !!document.querySelector(".gantt_drag_marker.gantt_grid_resize_area") || !!document.querySelector(".gantt_drag_marker.gantt_row_grid_resize_area") , i = !!document.querySelector(".gantt_link_direction") , r = t.getState() , a = r.autoscroll; return l = e && !n && !i, !(!r.drag_mode && !e || n) || a } function _(e) { if (c && (clearTimeout(c), c = null), e) { var n = t.config.autoscroll_speed; n && n < 10 && (n = 10), c = setTimeout(function() { s = setInterval(v, n || o) }, t.config.autoscroll_delay || a) } } function g(t) { t ? (_(!0), u.started || (u.x = d.x, u.y = d.y, u.started = !0)) : (s && (clearInterval(s), s = null), _(!1), u.started = !1) } function p(e) { var n = f(); if (!s && !c || n || g(!1), !t.config.autoscroll || !n) return !1; d = { x: e.clientX, y: e.clientY }, "touchmove" == e.type && (d.x = e.targetTouches[0].clientX, d.y = e.targetTouches[0].clientY), !s && n && g(!0) } function v() { if (!f()) return g(!1), !1; var e = h(t.$task) ? t.$task : h(t.$grid) ? t.$grid : t.$root; if (e) { var r = !1; [".gantt_drag_marker.gantt_grid_resize_area", ".gantt_drag_marker .gantt_row.gantt_row_task", ".gantt_drag_marker.gantt_grid_dnd_marker"].forEach(function(t) { r = r || !!document.querySelector(t) }), r && (e = t.$grid); var a = i.getNodePosition(e) , o = d.x - a.x , s = d.y - a.y + window.scrollY , c = l ? 0 : m(o, a.width, u.x - a.x) , _ = m(s, a.height, u.y - a.y + window.scrollY) , p = t.getScrollState() , v = p.y , y = p.inner_height , k = p.height , b = p.x , x = p.inner_width , w = p.width; _ && !y ? _ = 0 : _ < 0 && !v ? _ = 0 : _ > 0 && v + y >= k + 2 && (_ = 0), c && !x ? c = 0 : c < 0 && !b ? c = 0 : c > 0 && b + x >= w && (c = 0); var S = t.config.autoscroll_step; S && S < 2 && (S = 2), c *= S || n, _ *= S || n, (c || _) && function(e, n) { var i = t.getScrollState() , r = null , a = null; e && (r = i.x + e, r = Math.min(i.width, r), r = Math.max(0, r)); n && (a = i.y + n, a = Math.min(i.height, a), a = Math.max(0, a)); t.scrollTo(r, a) }(c, _) } } function m(t, n, i) { return t - e < 0 && t < i ? -1 : t > n - e && t > i ? 1 : 0 } t.attachEvent("onGanttReady", function() { if (!r(t)) { var e = i.getRootNode(t.$root) || document.body; t.eventRemove(e, "mousemove", p), t.event(e, "mousemove", p), t.eventRemove(e, "touchmove", p), t.event(e, "touchmove", p), t.eventRemove(e, "pointermove", p), t.event(e, "pointermove", p) } }), t.attachEvent("onDestroy", function() { g(!1) }) } } , function(t, e, n) { t.exports = function(t) { t.ext || (t.ext = {}); for (var e = [n(84), n(83), n(82)], i = 0; i < e.length; i++) e[i] && e[i](t); var r = n(81).default; t.ext.zoom = new r(t) } } , function(t, e) { t.exports = function(t) { t.skins.contrast_white = { config: { grid_width: 360, row_height: 35, scale_height: 35, link_line_width: 2, link_arrow_size: 6, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 80 } } } , function(t, e) { t.exports = function(t) { t.skins.contrast_black = { config: { grid_width: 360, row_height: 35, scale_height: 35, link_line_width: 2, link_arrow_size: 6, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 80 } } } , function(t, e) { t.exports = function(t) { t.skins.material = { config: { grid_width: 411, row_height: 34, task_height_offset: 6, scale_height: 36, link_line_width: 2, link_arrow_size: 6, lightbox_additional_height: 80 }, _second_column_width: 110, _third_column_width: 75, _redefine_lightbox_buttons: { buttons_left: ["dhx_delete_btn"], buttons_right: ["dhx_save_btn", "dhx_cancel_btn"] } }, t.attachEvent("onAfterTaskDrag", function(e) { var n = t.getTaskNode(e); n && (n.className += " gantt_drag_animation", setTimeout(function() { var t = n.className.indexOf(" gantt_drag_animation"); t > -1 && (n.className = n.className.slice(0, t)) }, 200)) }) } } , function(t, e) { t.exports = function(t) { t.skins.broadway = { config: { grid_width: 360, row_height: 35, scale_height: 35, link_line_width: 1, link_arrow_size: 7, lightbox_additional_height: 86 }, _second_column_width: 90, _third_column_width: 80, _lightbox_template: "
 
", _config_buttons_left: {}, _config_buttons_right: { gantt_delete_btn: "icon_delete", gantt_save_btn: "icon_save" } } } } , function(t, e) { t.exports = function(t) { t.skins.terrace = { config: { grid_width: 360, row_height: 35, scale_height: 35, link_line_width: 2, link_arrow_size: 6, lightbox_additional_height: 75 }, _second_column_width: 90, _third_column_width: 70 } } } , function(t, e) { t.exports = function(t) { t.skins.meadow = { config: { grid_width: 350, row_height: 27, scale_height: 30, link_line_width: 2, link_arrow_size: 6, lightbox_additional_height: 72 }, _second_column_width: 95, _third_column_width: 80 } } } , function(t, e) { t.exports = function(t) { t.skins.skyblue = { config: { grid_width: 350, row_height: 27, scale_height: 27, link_line_width: 1, link_arrow_size: 8, lightbox_additional_height: 75 }, _second_column_width: 95, _third_column_width: 80 } } } , function(t, e) { function n(t, e) { var n = e.skin; if (!n || t) for (var i = document.getElementsByTagName("link"), r = 0; r < i.length; r++) { var a = i[r].href.match("dhtmlxgantt_([a-z_]+).css"); if (a && (e.skins[a[1]] || !n)) { n = a[1]; break } } e.skin = n || "terrace"; var o = e.skins[e.skin] || e.skins.terrace; !function(t, e, n) { for (var i in e) (void 0 === t[i] || n) && (t[i] = e[i]) }(e.config, o.config, t); var s = e.getGridColumns(); s[1] && !e.defined(s[1].width) && (s[1].width = o._second_column_width), s[2] && !e.defined(s[2].width) && (s[2].width = o._third_column_width); for (r = 0; r < s.length; r++) { var l = s[r]; "add" == l.name && (l.width || (l.width = 44), e.defined(l.min_width) && e.defined(l.max_width) || (l.min_width = l.min_width || l.width, l.max_width = l.max_width || l.width), l.min_width && (l.min_width = +l.min_width), l.max_width && (l.max_width = +l.max_width), l.width && (l.width = +l.width, l.width = l.min_width && l.min_width > l.width ? l.min_width : l.width, l.width = l.max_width && l.max_width < l.width ? l.max_width : l.width)) } o.config.task_height && (e.config.task_height = o.config.task_height || "full"), o.config.bar_height && (e.config.bar_height = o.config.bar_height || "full"), o._lightbox_template && (e._lightbox_template = o._lightbox_template), o._redefine_lightbox_buttons && (e.config.buttons_right = o._redefine_lightbox_buttons.buttons_right, e.config.buttons_left = o._redefine_lightbox_buttons.buttons_left), e.resetLightbox() } t.exports = function(t) { t.resetSkin || (t.resetSkin = function() { this.skin = "", n(!0, this) } , t.skins = {}, t.attachEvent("onGanttLayoutReady", function() { n(!1, this) })) } } , function(t, e) { t.exports = function() { function t(t) { return t.$ui.getView("timeline") } function e(t) { return t.$ui.getView("grid") } function n(n) { var i = t(n); if (i && !i.$config.hidden) return i; var r = e(n); return r && !r.$config.hidden ? r : null } function i(t) { var i = null , r = !1; return [".gantt_drag_marker.gantt_grid_resize_area", ".gantt_drag_marker .gantt_row.gantt_row_task", ".gantt_drag_marker.gantt_grid_dnd_marker"].forEach(function(t) { r = r || !!document.querySelector(t) }), (i = r ? e(t) : n(t)) ? a(t, i, "scrollY") : null } function r(t) { var e = n(t); return e && "grid" != e.id ? a(t, e, "scrollX") : null } function a(t, e, n) { var i = e.$config[n]; return t.$ui.getView(i) } var o = "DEFAULT_VALUE"; function s(t, e, n, i) { var r = t(this); return r && r.isVisible() ? r[e].apply(r, n) : i ? i() : o } return { getColumnIndex: function(t) { var n = s.call(this, e, "getColumnIndex", [t]); return n === o ? 0 : n }, dateFromPos: function(e) { var n = s.call(this, t, "dateFromPos", Array.prototype.slice.call(arguments)); return n === o ? this.getState().min_date : n }, posFromDate: function(e) { var n = s.call(this, t, "posFromDate", [e]); return n === o ? 0 : n }, getRowTop: function(n) { var i = this , r = s.call(i, t, "getRowTop", [n], function() { return s.call(i, e, "getRowTop", [n]) }); return r === o ? 0 : r }, getTaskTop: function(n) { var i = this , r = s.call(i, t, "getItemTop", [n], function() { return s.call(i, e, "getItemTop", [n]) }); return r === o ? 0 : r }, getTaskPosition: function(e, n, i) { var r = s.call(this, t, "getItemPosition", [e, n, i]); return r === o ? { left: 0, top: this.getTaskTop(e.id), height: this.getTaskBarHeight(e.id), width: 0 } : r }, getTaskBarHeight: function(n, i) { var r = this , a = s.call(r, t, "getBarHeight", [n, i], function() { return s.call(r, e, "getItemHeight", [n]) }); return a === o ? 0 : a }, getTaskHeight: function(n) { var i = this , r = s.call(i, t, "getItemHeight", [n], function() { return s.call(i, e, "getItemHeight", [n]) }); return r === o ? 0 : r }, columnIndexByDate: function(e) { var n = s.call(this, t, "columnIndexByDate", [e]); return n === o ? 0 : n }, roundTaskDates: function() { s.call(this, t, "roundTaskDates", []) }, getScale: function() { var e = s.call(this, t, "getScale", []); return e === o ? null : e }, getTaskNode: function(e) { var n = t(this); if (n && n.isVisible()) { var i = n._taskRenderer.rendered[e]; if (!i) { var r = n.$config.item_attribute; i = n.$task_bars.querySelector("[" + r + "='" + e + "']") } return i || null } return null }, getLinkNode: function(e) { var n = t(this); return n.isVisible() ? n._linkRenderer.rendered[e] : null }, scrollTo: function(t, e) { var n = i(this) , a = r(this) , o = { position: 0 } , s = { position: 0 }; n && (s = n.getScrollState()), a && (o = a.getScrollState()); var l = a && 1 * t == t , c = n && 1 * e == e; if (l && c) for (var u = n._getLinkedViews(), d = a._getLinkedViews(), h = [], f = 0; f < u.length; f++) for (var _ = 0; _ < d.length; _++) u[f].$config.id && d[_].$config.id && u[f].$config.id === d[_].$config.id && h.push(u[f].$config.id); l && (h && h.forEach(function(t) { this.$ui.getView(t).$config.$skipSmartRenderOnScroll = !0 } .bind(this)), a.scroll(t), h && h.forEach(function(t) { this.$ui.getView(t).$config.$skipSmartRenderOnScroll = !1 } .bind(this))), c && n.scroll(e); var g = { position: 0 } , p = { position: 0 }; n && (g = n.getScrollState()), a && (p = a.getScrollState()), this.callEvent("onGanttScroll", [o.position, s.position, p.position, g.position]) }, showDate: function(t) { var e = this.posFromDate(t) , n = Math.max(e - this.config.task_scroll_offset, 0); this.scrollTo(n) }, showTask: function(n) { var i = this.getTaskPosition(this.getTask(n)) , r = i.left; this.config.rtl && (r = i.left + i.width); var o, s = Math.max(r - this.config.task_scroll_offset, 0), l = this._scroll_state().y; o = l ? i.top - (l - this.getTaskBarHeight(n)) / 2 : i.top, this.scrollTo(s, o); var c = e(this) , u = t(this); c && u && c.$config.scrollY != u.$config.scrollY && a(this, c, "scrollY").scrollTo(null, o) }, _scroll_state: function() { var t = { x: !1, y: !1, x_pos: 0, y_pos: 0, scroll_size: this.config.scroll_size + 1, x_inner: 0, y_inner: 0 } , e = i(this) , n = r(this); if (n) { var a = n.getScrollState(); a.visible && (t.x = a.size, t.x_inner = a.scrollSize), t.x_pos = a.position || 0 } if (e) { var o = e.getScrollState(); o.visible && (t.y = o.size, t.y_inner = o.scrollSize), t.y_pos = o.position || 0 } return t }, getScrollState: function() { var t = this._scroll_state(); return { x: t.x_pos, y: t.y_pos, inner_width: t.x, inner_height: t.y, width: t.x_inner, height: t.y_inner } }, getLayoutView: function(t) { return this.$ui.getView(t) }, scrollLayoutCell: function(t, e, n) { var i = this.$ui.getView(t); if (!i) return !1; if (null !== e) { var r = this.$ui.getView(i.$config.scrollX); r && r.scrollTo(e, null) } if (null !== n) { var a = this.$ui.getView(i.$config.scrollY); a && a.scrollTo(null, n) } } } } } , function(t, e) { t.exports = function(t) { delete t.addTaskLayer, delete t.addLinkLayer } } , function(t, e, n) { var i = n(1) , r = function(t) { return { getVerticalScrollbar: function() { return t.$ui.getView("scrollVer") }, getHorizontalScrollbar: function() { return t.$ui.getView("scrollHor") }, _legacyGridResizerClass: function(t) { for (var e = t.getCellsByType("resizer"), n = 0; n < e.length; n++) { var i = e[n] , r = !1 , a = i.$parent.getPrevSibling(i.$id); if (a && a.$config && "grid" === a.$config.id) r = !0; else { var o = i.$parent.getNextSibling(i.$id); o && o.$config && "grid" === o.$config.id && (r = !0) } r && (i.$config.css = (i.$config.css ? i.$config.css + " " : "") + "gantt_grid_resize_wrap") } }, onCreated: function(e) { var n = !0; this._legacyGridResizerClass(e), e.attachEvent("onBeforeResize", function() { var r = t.$ui.getView("timeline"); r && (r.$config.hidden = r.$parent.$config.hidden = !t.config.show_chart); var a = t.$ui.getView("grid"); if (a) { var o = a._getColsTotalWidth() , s = !t.config.show_grid || !t.config.grid_width || 0 === o; if (n && !s && !1 !== o && (t.config.grid_width = o), a.$config.hidden = a.$parent.$config.hidden = s, !a.$config.hidden) { var l = a._getGridWidthLimits(); if (l[0] && t.config.grid_width < l[0] && (t.config.grid_width = l[0]), l[1] && t.config.grid_width > l[1] && (t.config.grid_width = l[1]), r && t.config.show_chart) { if (a.$config.width = t.config.grid_width - 1, !a.$config.scrollable && a.$config.scrollY && t.$root.offsetWidth) { var c = a.$gantt.$layout.$container.offsetWidth , u = t.$ui.getView(a.$config.scrollY).$config.width , d = c - (a.$config.width + u); d < 0 && (a.$config.width += d, t.config.grid_width += d) } if (n) a.$parent.$config.width = t.config.grid_width, a.$parent.$config.group && t.$layout._syncCellSizes(a.$parent.$config.group, { value: a.$parent.$config.width, isGravity: !1 }); else if (r && !i.isChildOf(r.$task, e.$view)) { if (!a.$config.original_grid_width) { var h = t.skins[t.skin]; h && h.config && h.config.grid_width ? a.$config.original_grid_width = h.config.grid_width : a.$config.original_grid_width = 0 } t.config.grid_width = a.$config.original_grid_width, a.$parent.$config.width = t.config.grid_width } else a.$parent._setContentSize(a.$config.width, null), t.$layout._syncCellSizes(a.$parent.$config.group, { value: t.config.grid_width, isGravity: !1 }) } else r && i.isChildOf(r.$task, e.$view) && (a.$config.original_grid_width = t.config.grid_width), n || (a.$parent.$config.width = 0) } n = !1 } }), this._initScrollStateEvents(e) }, _initScrollStateEvents: function(e) { t._getVerticalScrollbar = this.getVerticalScrollbar, t._getHorizontalScrollbar = this.getHorizontalScrollbar; var n = this.getVerticalScrollbar() , i = this.getHorizontalScrollbar(); n && n.attachEvent("onScroll", function(e, n, i) { var r = t.getScrollState(); t.callEvent("onGanttScroll", [r.x, e, r.x, n]) }), i && i.attachEvent("onScroll", function(e, n, i) { var r = t.getScrollState(); t.callEvent("onGanttScroll", [e, r.y, n, r.y]); var a = t.$ui.getView("grid"); a && a.$grid_data && !a.$config.scrollable && (a.$grid_data.style.left = a.$grid.scrollLeft + "px", a.$grid_data.scrollLeft = a.$grid.scrollLeft) }), e.attachEvent("onResize", function() { n && !t.$scroll_ver && (t.$scroll_ver = n.$scroll_ver), i && !t.$scroll_hor && (t.$scroll_hor = i.$scroll_hor) }) }, _findGridResizer: function(t, e) { for (var n, i = t.getCellsByType("resizer"), r = !0, a = 0; a < i.length; a++) { var o = i[a]; o._getSiblings(); var s = o._behind , l = o._front; if (s && s.$content === e || s.isChild && s.isChild(e)) { n = o, r = !0; break } if (l && l.$content === e || l.isChild && l.isChild(e)) { n = o, r = !1; break } } return { resizer: n, gridFirst: r } }, onInitialized: function(e) { var n = t.$ui.getView("grid") , i = this._findGridResizer(e, n); if (i.resizer) { var r, a = i.gridFirst, o = i.resizer; if ("x" !== o.$config.mode) return; o.attachEvent("onResizeStart", function(e, n) { var i = t.$ui.getView("grid") , o = i ? i.$parent : null; if (o) { var s = i._getGridWidthLimits(); i.$config.scrollable || (o.$config.minWidth = s[0]), o.$config.maxWidth = s[1] } return r = a ? e : n, t.callEvent("onGridResizeStart", [r]) }), o.attachEvent("onResize", function(e, n) { var i = a ? e : n; return t.callEvent("onGridResize", [r, i]) }), o.attachEvent("onResizeEnd", function(e, n, i, r) { var o = a ? e : n , s = a ? i : r , l = t.$ui.getView("grid") , c = l ? l.$parent : null; c && (c.$config.minWidth = void 0); var u = t.callEvent("onGridResizeEnd", [o, s]); return u && 0 !== s && (t.config.grid_width = s), u }) } }, onDestroyed: function(t) {} } }; t.exports = r } , function(t, e, n) { var i = n(1) , r = function(t, e) { var n, r, a, o, s, l = 10, c = 18; function u() { return { link_source_id: o, link_target_id: r, link_from_start: s, link_to_start: a, link_landing_area: n } } var d = e.$services , h = d.getService("state") , f = d.getService("dnd"); h.registerProvider("linksDnD", u); var _ = new f(t.$task_bars,{ sensitivity: 0, updates_per_second: 60, mousemoveContainer: e.$root, selector: ".gantt_link_point", preventDefault: !0 }); function g(n, i, r, a, o) { var s = function(n, i, r) { var a = i(n) , o = { x: a.left, y: a.top, width: a.width, height: a.height }; r.rtl ? (o.xEnd = o.x, o.x = o.xEnd + o.width) : o.xEnd = o.x + o.width; if (o.yEnd = o.y + o.height, e.getTaskType(n.type) == e.config.types.milestone) { var s = function(e) { var n = t.getBarHeight(e, !0); return Math.round(Math.sqrt(2 * n * n)) - 2 }(n.id); o.x += (r.rtl ? 1 : -1) * (s / 2), o.xEnd += (r.rtl ? -1 : 1) * (s / 2), o.width = a.xEnd - a.x } return o }(n, function(t) { return e.getTaskPosition(t) }, a) , l = { x: s.x, y: s.y }; i || (l.x = s.xEnd), l.y += e.getTaskHeight(n.id) / 2; var c = function(t) { return e.getTaskType(t.type) == e.config.types.milestone }(n) && o ? 2 : 0; return r = r || 0, a.rtl && (r *= -1), l.x += (i ? -1 : 1) * r - c, l } function p(t, n) { var i = _.getPosition(t) , r = function(t) { var e = 0 , n = 0; return t && (e = t.offsetWidth || 0, n = t.offsetHeight || 0), { width: e, height: n } }(n) , a = function() { var t = e.$root; return { right: t.offsetWidth, bottom: t.offsetHeight } }() , o = e.config.tooltip_offset_x || l , s = e.config.tooltip_offset_y || l , u = e.config.scroll_size || c , d = e.$container.getBoundingClientRect().y + window.scrollY , h = { y: i.y + s, x: i.x + o, bottom: i.y + r.height + s + u, right: i.x + r.width + o + u }; return h.bottom > a.bottom + d && (h.y = a.bottom + d - r.height - s), h.right > a.right && (h.x = a.right - r.width - o), h } function v(t) { var n = u() , i = ["gantt_link_tooltip"]; n.link_source_id && n.link_target_id && (e.isLinkAllowed(n.link_source_id, n.link_target_id, n.link_from_start, n.link_to_start) ? i.push("gantt_allowed_link") : i.push("gantt_invalid_link")); var r = e.templates.drag_link_class(n.link_source_id, n.link_from_start, n.link_target_id, n.link_to_start); r && i.push(r); var a = "
" + e.templates.drag_link(n.link_source_id, n.link_from_start, n.link_target_id, n.link_to_start) + "
"; t.innerHTML = a } function m() { o = s = r = null, a = !0 } function y(n, i, r, a) { var o = function() { _._direction && _._direction.parentNode || (_._direction = document.createElement("div"), t.$task_links.appendChild(_._direction)); return _._direction }() , s = u() , l = ["gantt_link_direction"]; e.templates.link_direction_class && l.push(e.templates.link_direction_class(s.link_source_id, s.link_from_start, s.link_target_id, s.link_to_start)); var c = Math.sqrt(Math.pow(r - n, 2) + Math.pow(a - i, 2)); if (c = Math.max(0, c - 3)) { o.className = l.join(" "); var d = (a - i) / (r - n) , h = Math.atan(d); 2 == k(n, r, i, a) ? h += Math.PI : 3 == k(n, r, i, a) && (h -= Math.PI); var f = Math.sin(h) , g = Math.cos(h) , p = Math.round(i) , v = Math.round(n) , m = ["-webkit-transform: rotate(" + h + "rad)", "-moz-transform: rotate(" + h + "rad)", "-ms-transform: rotate(" + h + "rad)", "-o-transform: rotate(" + h + "rad)", "transform: rotate(" + h + "rad)", "width:" + Math.round(c) + "px"]; if (-1 != window.navigator.userAgent.indexOf("MSIE 8.0")) { m.push('-ms-filter: "' + function(t, e) { return "progid:DXImageTransform.Microsoft.Matrix(M11 = " + e + ",M12 = -" + t + ",M21 = " + t + ",M22 = " + e + ",SizingMethod = 'auto expand')" }(f, g) + '"'); var y = Math.abs(Math.round(n - r)) , b = Math.abs(Math.round(a - i)); switch (k(n, r, i, a)) { case 1: p -= b; break; case 2: v -= y, p -= b; break; case 3: v -= y } } m.push("top:" + p + "px"), m.push("left:" + v + "px"), o.style.cssText = m.join(";") } } function k(t, e, n, i) { return e >= t ? i <= n ? 1 : 4 : i <= n ? 2 : 3 } _.attachEvent("onBeforeDragStart", e.bind(function(n, r) { var a = r.target || r.srcElement; if (m(), e.getState("tasksDnd").drag_id) return !1; if (i.locateClassName(a, "gantt_link_point")) { i.locateClassName(a, "task_start_date") && (s = !0); var l = e.locate(r); o = l; var c = e.getTask(l); if (e.isReadonly(c)) return m(), !1; return this._dir_start = g(c, !!s, 0, t.$getConfig(), !0), !0 } return !1 }, this)), _.attachEvent("onAfterDragStart", e.bind(function(t, n) { e.config.touch && e.refreshData(), v(_.config.marker) }, this)), _.attachEvent("onDragMove", e.bind(function(o, s) { var l = _.config , c = p(s, l.marker); !function(t, e) { t.style.left = e.x + "px", t.style.top = e.y + "px" }(l.marker, c); var u = !!i.locateClassName(s, "gantt_link_control") , d = r , h = n , f = a , m = e.locate(s) , k = !0 , b = i.getTargetNode(s); if (i.isChildOf(b, e.$root) || (u = !1, m = null), u && (k = !i.locateClassName(s, "task_end_date"), u = !!m), r = m, n = u, a = k, u) { var x = e.getTask(m) , w = t.$getConfig() , S = i.locateClassName(s, "gantt_link_control") , T = 0; S && (T = Math.floor(S.offsetWidth / 2)), this._dir_end = g(x, !!a, T, w) } else this._dir_end = i.getRelativeEventPosition(s, t.$task_data), e.env.isEdge && (this._dir_end.y += window.scrollY); var $ = !(h == u && d == m && f == k); return $ && (d && e.refreshTask(d, !1), m && e.refreshTask(m, !1)), $ && v(l.marker), y(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y), !0 }, this)), _.attachEvent("onDragEnd", e.bind(function() { var t = u(); if (t.link_source_id && t.link_target_id && t.link_source_id != t.link_target_id) { var n = e._get_link_type(t.link_from_start, t.link_to_start) , i = { source: t.link_source_id, target: t.link_target_id, type: n }; i.type && e.isLinkAllowed(i) && e.callEvent("onLinkCreated", [i]) && e.addLink(i) } m(), e.config.touch ? e.refreshData() : (t.link_source_id && e.refreshTask(t.link_source_id, !1), t.link_target_id && e.refreshTask(t.link_target_id, !1)), _._direction && (_._direction.parentNode && _._direction.parentNode.removeChild(_._direction), _._direction = null) }, this)), e.attachEvent("onGanttRender", e.bind(function() { _._direction && y(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y) }, this)) }; t.exports = { createLinkDND: function() { return { init: r } } } } , function(t, e, n) { var i = n(1) , r = n(0) , a = n(50) , o = n(2); t.exports = { createTaskDND: function() { var t; return { extend: function(e) { e.roundTaskDates = function(e) { t.round_task_dates(e) } }, init: function(e, n) { return t = function(t, e) { var n = e.$services; return { drag: null, dragMultiple: {}, _events: { before_start: {}, before_finish: {}, after_finish: {} }, _handlers: {}, init: function() { this._domEvents = e._createDomEventScope(), this.clear_drag_state(); var t = e.config.drag_mode; this.set_actions(), n.getService("state").registerProvider("tasksDnd", r.bind(function() { return { drag_id: this.drag ? this.drag.id : void 0, drag_mode: this.drag ? this.drag.mode : void 0, drag_from_start: this.drag ? this.drag.left : void 0 } }, this)); var i = { before_start: "onBeforeTaskDrag", before_finish: "onBeforeTaskChanged", after_finish: "onAfterTaskDrag" }; for (var a in this._events) for (var o in t) this._events[a][o] = i[a]; this._handlers[t.move] = this._move, this._handlers[t.resize] = this._resize, this._handlers[t.progress] = this._resize_progress }, set_actions: function() { var n = t.$task_data; this._domEvents.attach(n, "mousemove", e.bind(function(t) { this.on_mouse_move(t) }, this)), this._domEvents.attach(n, "mousedown", e.bind(function(t) { this.on_mouse_down(t) }, this)), this._domEvents.attach(document.body, "mouseup", e.bind(function(t) { this.on_mouse_up(t) }, this)) }, clear_drag_state: function() { this.drag = { id: null, mode: null, pos: null, start_x: null, start_y: null, obj: null, left: null }, this.dragMultiple = {} }, _resize: function(n, i, r) { var a = t.$getConfig() , o = this._drag_task_coords(n, r); r.left ? (n.start_date = e.dateFromPos(o.start + i), n.start_date || (n.start_date = new Date(e.getState().min_date))) : (n.end_date = e.dateFromPos(o.end + i), n.end_date || (n.end_date = new Date(e.getState().max_date))); var s = this._calculateMinDuration(a.min_duration, a.duration_unit); n.end_date - n.start_date < a.min_duration && (r.left ? n.start_date = e.calculateEndDate(n.end_date, -s, a.duration_unit, n) : n.end_date = e.calculateEndDate(n.start_date, s, a.duration_unit, n)), e._init_task_timing(n) }, _calculateMinDuration: function(t, e) { return Math.ceil(t / { minute: 6e4, hour: 36e5, day: 864e5, week: 6048e5, month: 24192e5, year: 31356e6 }[e]) }, _resize_progress: function(e, n, i) { var r = this._drag_task_coords(e, i) , a = t.$getConfig().rtl ? r.start - i.pos.x : i.pos.x - r.start , o = Math.max(0, a); e.progress = Math.min(1, o / Math.abs(r.end - r.start)) }, _find_max_shift: function(t, n) { var i; for (var r in t) { var a = t[r] , o = e.getTask(a.id) , s = this._drag_task_coords(o, a) , l = e.posFromDate(new Date(e.getState().min_date)) , c = e.posFromDate(new Date(e.getState().max_date)); if (s.end + n > c) { var u = c - s.end; (u < i || void 0 === i) && (i = u) } else if (s.start + n < l) { var d = l - s.start; (d > i || void 0 === i) && (i = d) } } return i }, _move: function(t, n, i, r) { var a = this._drag_task_coords(t, i) , o = null , s = null; r ? (o = new Date(+i.obj.start_date + r), s = new Date(+i.obj.end_date + r)) : (o = e.dateFromPos(a.start + n), s = e.dateFromPos(a.end + n)), o ? s ? (t.start_date = o, t.end_date = s) : (t.end_date = new Date(e.getState().max_date), t.start_date = e.dateFromPos(e.posFromDate(t.end_date) - (a.end - a.start))) : (t.start_date = new Date(e.getState().min_date), t.end_date = e.dateFromPos(e.posFromDate(t.start_date) + (a.end - a.start))) }, _drag_task_coords: function(t, n) { return { start: n.obj_s_x = n.obj_s_x || e.posFromDate(t.start_date), end: n.obj_e_x = n.obj_e_x || e.posFromDate(t.end_date) } }, _mouse_position_change: function(t, e) { var n = t.x - e.x , i = t.y - e.y; return Math.sqrt(n * n + i * i) }, _is_number: function(t) { return !isNaN(parseFloat(t)) && isFinite(t) }, on_mouse_move: function(t) { if (this.drag.start_drag) { var n = i.getRelativeEventPosition(t, e.$task_data) , r = this.drag.start_drag.start_x , o = this.drag.start_drag.start_y; (Date.now() - this.drag.timestamp > 50 || this._is_number(r) && this._is_number(o) && this._mouse_position_change({ x: r, y: o }, n) > 20) && this._start_dnd(t) } if (this.drag.mode) { if (!a(this, 40)) return; this._update_on_move(t) } }, _update_item_on_move: function(t, n, i, r, a, o) { var s = e.getTask(n) , l = e.mixin({}, s) , c = e.mixin({}, s); this._handlers[i].apply(this, [c, t, r, o]), e.mixin(s, c, !0), e.callEvent("onTaskDrag", [s.id, i, c, l, a]), e.mixin(s, c, !0), e.refreshTask(n) }, _update_on_move: function(n) { var a = this.drag , o = t.$getConfig(); if (a.mode) { var s = i.getRelativeEventPosition(n, t.$task_data); if (a.pos && a.pos.x == s.x) return; a.pos = s; var l = e.dateFromPos(s.x); if (!l || isNaN(l.getTime())) return; var c = s.x - a.start_x , u = e.getTask(a.id); if (this._handlers[a.mode]) { if (a.mode === o.drag_mode.move) { var d = {}; this._isMultiselect() && e.getSelectedTasks().indexOf(a.id) >= 0 && (d = this.dragMultiple); var h = !1; if (e.isSummaryTask(u) && e.config.drag_project) { var f = {}; f[a.id] = r.copy(a), h = !0, d = r.mixin(f, this.dragMultiple) } var _ = this._find_max_shift(d, c); for (var g in void 0 !== _ && (c = _), this._update_item_on_move(c, a.id, a.mode, a, n), d) { var p = d[g]; if (h && p.id != a.id && (e._bulk_dnd = !0), void 0 === _ && (h || Object.keys(d).length > 1)) var v = l - e.dateFromPos(a.start_x); this._update_item_on_move(c, p.id, p.mode, p, n, v) } e._bulk_dnd = !1 } else this._update_item_on_move(c, a.id, a.mode, a, n); e._update_parents(a.id) } } }, on_mouse_down: function(n, r) { if (2 != n.button || void 0 === n.button) { var a = t.$getConfig() , o = e.locate(n) , s = null; if (e.isTaskExists(o) && (s = e.getTask(o)), !e.isReadonly(s) && !this.drag.mode) { this.clear_drag_state(), r = r || n.target || n.srcElement; var l = i.getClassName(r) , c = this._get_drag_mode(l, r); if (!l || !c) return r.parentNode ? this.on_mouse_down(n, r.parentNode) : void 0; if (c) if (c.mode && c.mode != a.drag_mode.ignore && a["drag_" + c.mode]) { if (o = e.locate(r), s = e.copy(e.getTask(o) || {}), e.isReadonly(s)) return this.clear_drag_state(), !1; if (e.isSummaryTask(s) && !a.drag_project && c.mode != a.drag_mode.progress) return void this.clear_drag_state(); c.id = o; var u = i.getRelativeEventPosition(n, e.$task_data); c.start_x = u.x, c.start_y = u.y, c.obj = s, this.drag.start_drag = c, this.drag.timestamp = Date.now() } else this.clear_drag_state(); else if (e.checkEvent("onMouseDown") && e.callEvent("onMouseDown", [l.split(" ")[0]]) && r.parentNode) return this.on_mouse_down(n, r.parentNode) } } }, _fix_dnd_scale_time: function(n, i) { var r = t.$getConfig() , a = e.getScale().unit , o = e.getScale().step; function s(n) { if (e.config.correct_work_time) { var i = t.$getConfig(); e.isWorkTime(n.start_date, void 0, n) || (n.start_date = e.calculateEndDate({ start_date: n.start_date, duration: -1, unit: i.duration_unit, task: n })) } } r.round_dnd_dates || (a = "minute", o = r.time_step), i.mode == r.drag_mode.resize ? i.left ? (n.start_date = e.roundDate({ date: n.start_date, unit: a, step: o }), s(n)) : (n.end_date = e.roundDate({ date: n.end_date, unit: a, step: o }), function(n) { if (e.config.correct_work_time) { var i = t.$getConfig(); e.isWorkTime(new Date(n.end_date - 1), void 0, n) || (n.end_date = e.calculateEndDate({ start_date: n.end_date, duration: 1, unit: i.duration_unit, task: n })) } }(n)) : i.mode == r.drag_mode.move && (n.start_date = e.roundDate({ date: n.start_date, unit: a, step: o }), s(n), n.end_date = e.calculateEndDate(n)) }, _fix_working_times: function(n, i) { var r = t.$getConfig(); (i = i || { mode: r.drag_mode.move }).mode == r.drag_mode.resize ? i.left ? n.start_date = e.getClosestWorkTime({ date: n.start_date, dir: "future", task: n }) : n.end_date = e.getClosestWorkTime({ date: n.end_date, dir: "past", task: n }) : i.mode == r.drag_mode.move && e.correctTaskWorkTime(n) }, _finalize_mouse_up: function(t, n, i, r) { var a = e.getTask(t); if (n.work_time && n.correct_work_time && this._fix_working_times(a, i), this._fix_dnd_scale_time(a, i), this._fireEvent("before_finish", i.mode, [t, i.mode, e.copy(i.obj), r])) { var o = t; e._init_task_timing(a), this.clear_drag_state(), e.updateTask(a.id), this._fireEvent("after_finish", i.mode, [o, i.mode, r]) } else this.clear_drag_state(), t == i.id && (i.obj._dhx_changed = !1, e.mixin(a, i.obj, !0)), e.refreshTask(a.id) }, on_mouse_up: function(n) { var i = this.drag; if (i.mode && i.id) { var r = t.$getConfig() , a = e.getTask(i.id) , o = this.dragMultiple , s = !1 , l = 0; i.mode === r.drag_mode.move && (e.isSummaryTask(a) && r.drag_project || this._isMultiselect()) && (s = !0, l = Object.keys(o).length); var c = function() { if (s) for (var t in o) this._finalize_mouse_up(o[t].id, r, o[t], n); this._finalize_mouse_up(i.id, r, i, n) }; s && l > 10 ? e.batchUpdate(function() { c.call(this) } .bind(this)) : c.call(this) } this.clear_drag_state() }, _get_drag_mode: function(e, n) { var i = t.$getConfig().drag_mode , r = { mode: null, left: null }; switch ((e || "").split(" ")[0]) { case "gantt_task_line": case "gantt_task_content": r.mode = i.move; break; case "gantt_task_drag": r.mode = i.resize; var a = n.getAttribute("data-bind-property"); r.left = "start_date" == a; break; case "gantt_task_progress_drag": r.mode = i.progress; break; case "gantt_link_control": case "gantt_link_point": r.mode = i.ignore; break; default: r = null } return r }, _start_dnd: function(n) { var i = this.drag = this.drag.start_drag; delete i.start_drag; var r = t.$getConfig() , a = i.id; if (r["drag_" + i.mode] && e.callEvent("onBeforeDrag", [a, i.mode, n]) && this._fireEvent("before_start", i.mode, [a, i.mode, n])) { delete i.start_drag; var s = e.getTask(a); if (e.isReadonly(s)) return void this.clear_drag_state(); if (this._isMultiselect()) { var l = e.getSelectedTasks(); l.indexOf(i.id) >= 0 && o.forEach(l, e.bind(function(t) { var n = e.getTask(t); e.isSummaryTask(n) && e.config.drag_project && i.mode == r.drag_mode.move && this._addSubtasksToDragMultiple(n.id), this.dragMultiple[t] = e.mixin({ id: n.id, obj: e.copy(n) }, this.drag) }, this)) } e.isSummaryTask(s) && e.config.drag_project && i.mode == r.drag_mode.move && this._addSubtasksToDragMultiple(s.id), e.callEvent("onTaskDragStart", []) } else this.clear_drag_state() }, _fireEvent: function(t, n, i) { e.assert(this._events[t], "Invalid stage:{" + t + "}"); var r = this._events[t][n]; return e.assert(r, "Unknown after drop mode:{" + n + "}"), e.assert(i, "Invalid event arguments"), !e.checkEvent(r) || e.callEvent(r, i) }, round_task_dates: function(e) { var n = this.drag , i = t.$getConfig(); n || (n = { mode: i.drag_mode.move }), this._fix_dnd_scale_time(e, n) }, destructor: function() { this._domEvents.detachAll() }, _isMultiselect: function() { return e.config.drag_multiple && !!(e.getSelectedTasks && e.getSelectedTasks().length > 0) }, _addSubtasksToDragMultiple: function(t) { e.eachTask(function(t) { this.dragMultiple[t.id] = e.mixin({ id: t.id, obj: e.copy(t) }, this.drag) }, t, this) } } }(e, n), e._tasks_dnd = t, t.init(n) }, destructor: function() { t && (t.destructor(), t = null) } } } } } , function(t, e, n) { var i = n(0) , r = n(98) , a = n(97) , o = n(1) , s = function(t) { var e = t.$services; return { onCreated: function(e) { var o = e.$config; o.bind = i.defined(o.bind) ? o.bind : "task", o.bindLinks = i.defined(o.bindLinks) ? o.bindLinks : "link", e._linksDnD = a.createLinkDND(), e._tasksDnD = r.createTaskDND(), e._tasksDnD.extend(e), this._mouseDelegates = n(31)(t) }, onInitialized: function(e) { this._attachDomEvents(t), this._attachStateProvider(t, e), e._tasksDnD.init(e, t), e._linksDnD.init(e, t), "timeline" == e.$config.id && this.extendDom(e) }, onDestroyed: function(e) { this._clearDomEvents(t), this._clearStateProvider(t), e._tasksDnD && e._tasksDnD.destructor() }, extendDom: function(e) { t.$task = e.$task, t.$task_scale = e.$task_scale, t.$task_data = e.$task_data, t.$task_bg = e.$task_bg, t.$task_links = e.$task_links, t.$task_bars = e.$task_bars }, _clearDomEvents: function() { this._mouseDelegates.destructor(), this._mouseDelegates = null }, _attachDomEvents: function(t) { function e(e, n) { if (e && this.callEvent("onLinkDblClick", [e, n])) { var i = this.getLink(e); if (this.isReadonly(i)) return; var r = this.locale.labels.link + " " + this.templates.link_description(this.getLink(e)) + " " + this.locale.labels.confirm_link_deleting; window.setTimeout(function() { t._simple_confirm(r, "", function() { t.deleteLink(e) }) }, this.config.touch ? 300 : 1) } } this._mouseDelegates.delegate("click", "gantt_task_link", t.bind(function(t, e) { var n = this.locate(t, this.config.link_attribute); n && this.callEvent("onLinkClick", [n, t]) }, t), this.$task), this._mouseDelegates.delegate("click", "gantt_scale_cell", t.bind(function(e, n) { var i = o.getRelativeEventPosition(e, t.$task_data) , r = t.dateFromPos(i.x) , a = Math.floor(t.columnIndexByDate(r)) , s = t.getScale().trace_x[a]; t.callEvent("onScaleClick", [e, s]) }, t), this.$task), this._mouseDelegates.delegate("doubleclick", "gantt_task_link", t.bind(function(n, i, r) { i = this.locate(n, t.config.link_attribute), e.call(this, i, n) }, t), this.$task), this._mouseDelegates.delegate("doubleclick", "gantt_link_point", t.bind(function(t, n, i) { n = this.locate(t); var r = this.getTask(n) , a = null; return i.parentNode && o.getClassName(i.parentNode) && (a = o.getClassName(i.parentNode).indexOf("_left") > -1 ? r.$target[0] : r.$source[0]), a && e.call(this, a, t), !1 }, t), this.$task) }, _attachStateProvider: function(t, n) { var i = n; e.getService("state").registerProvider("tasksTimeline", function() { return { scale_unit: i._tasks ? i._tasks.unit : void 0, scale_step: i._tasks ? i._tasks.step : void 0 } }) }, _clearStateProvider: function() { e.getService("state").unregisterProvider("tasksTimeline") } } }; t.exports = s } , function(t, e, n) { var i = n(1); function r(t, e) { var n = i.getNodePosition(e.$grid_data); return t.x += n.x + e.$grid.scrollLeft, t.y += n.y - e.$grid_data.scrollTop, t } function a(t, e) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0 , r = i.getNodePosition(t.$root); return e > r.width && (e = r.width - n - 2), e } t.exports = { removeLineHighlight: function(t) { t.markerLine && t.markerLine.parentNode && t.markerLine.parentNode.removeChild(t.markerLine), t.markerLine = null }, highlightPosition: function(t, e, n) { var o = function(t, e) { var n = i.getNodePosition(e.$grid_data) , r = i.getRelativeEventPosition(t, e.$grid_data) , o = n.x + e.$grid.scrollLeft , s = r.y - 10 , l = e.getItemHeight(t.targetId); s < n.y && (s = n.y); var c = e.getTotalHeight(); return s > n.y + c - l && (s = n.y + c - l), n.x = o, n.y = s, n.width = a(e.$gantt, n.width, 9), n }(t, n); e.marker.style.left = o.x + 9 + "px", e.marker.style.width = o.width + "px", e.marker.style.overflow = "hidden"; var s = e.markerLine; s || ((s = document.createElement("div")).className = "gantt_drag_marker gantt_grid_dnd_marker", s.innerHTML = "
", s.style.pointerEvents = "none"), t.child ? function(t, e, n) { var i = t.targetParent , o = r({ x: 0, y: n.getItemTop(i) }, n) , s = n.$grid_data.getBoundingClientRect().bottom + window.scrollY , l = a(n.$gantt, n.$grid_data.offsetWidth); e.innerHTML = "
", e.style.width = l + "px", e.style.top = o.y + "px", e.style.left = o.x + "px", e.style.height = n.getItemHeight(i) + "px", o.y > s && (e.style.top = s + "px") }(t, s, n) : function(t, e, n) { var i = function(t, e) { var n = e.$config.rowStore , i = { x: 0, y: 0 } , o = e.$grid_data.querySelector(".gantt_tree_indent") , s = 15 , l = 0; if (o && (s = o.offsetWidth), t.targetId !== n.$getRootId()) { var c = e.getItemTop(t.targetId) , u = e.getItemHeight(t.targetId); if (l = n.exists(t.targetId) ? n.calculateItemLevel(n.getItem(t.targetId)) : 0, t.prevSibling) i.y = c; else if (t.nextSibling) { var d = 0; n.eachItem(function(t) { -1 !== n.getIndexById(t.id) && d++ }, t.targetId), i.y = c + u + d * u } else i.y = c + u, l += 1 } return i.x = 40 + l * s, i.width = a(e.$gantt, Math.max(e.$grid_data.offsetWidth - i.x, 0), i.x), r(i, e) }(t, n) , o = n.$grid_data.getBoundingClientRect().bottom + window.scrollY; e.innerHTML = "
", e.style.left = i.x + "px", e.style.height = "4px"; var s = i.y - 2; e.style.top = s + "px", e.style.width = i.width + "px", s > o && (e.style.top = o + "px") }(t, s, n), e.markerLine || (document.body.appendChild(s), e.markerLine = s) } } } , function(t, e, n) { var i = n(24); t.exports = function(t, e, n, r, a) { var o; if (e !== a.$getRootId()) o = n < .25 ? i.prevSiblingTarget(t, e, a) : !(n > .6) || a.hasChild(e) && a.getItem(e).$open ? i.firstChildTarget(t, e, a) : i.nextSiblingTarget(t, e, a); else { var s = a.$getRootId(); o = a.hasChild(s) && r >= 0 ? i.lastChildTarget(t, s, a) : i.firstChildTarget(t, s, a) } return o } } , function(t, e, n) { var i = n(24); function r(t, e, n, r, a) { for (var o = e; r.exists(o); ) { var s = r.calculateItemLevel(r.getItem(o)); if ((s === n || s === n - 1) && r.getBranchIndex(o) > -1) break; o = a ? r.getPrev(o) : r.getNext(o) } return r.exists(o) ? r.calculateItemLevel(r.getItem(o)) === n ? a ? i.nextSiblingTarget(t, o, r) : i.prevSiblingTarget(t, o, r) : i.firstChildTarget(t, o, r) : null } function a(t, e, n, i) { return r(t, e, n, i, !0) } function o(t, e, n, i) { return r(t, e, n, i, !1) } t.exports = function(t, e, n, r, s, l) { var c; if (e !== s.$getRootId()) { var u = s.getItem(e) , d = s.calculateItemLevel(u); if (d === l) { var h = s.getPrevSibling(e); n < .5 && !h ? c = i.prevSiblingTarget(t, e, s) : (n < .5 && (e = h), c = i.nextSiblingTarget(t, e, s)) } else if (d > l) s.eachParent(function(t) { s.calculateItemLevel(t) === l && (e = t.id) }, u), c = a(t, e, l, s); else { var f = a(t, e, l, s) , _ = o(t, e, l, s); c = n < .5 ? f : _ } } else { var g = s.$getRootId() , p = s.getChildren(g); c = i.createDropTargetObject(), c = p.length && r >= 0 ? a(t, function(t) { for (var e = t.getNext(); t.exists(e); ) { var n = t.getNext(e); if (!t.exists(n)) return e; e = n } return null }(s), l, s) : o(t, g, l, s) } return c } } , function(t, e, n) { var i = n(1) , r = n(24) , a = n(102) , o = n(101) , s = n(100) , l = n(16); t.exports = { init: function(t, e) { var n = t.$services.getService("dnd"); if (e.$config.bind && t.getDatastore(e.$config.bind)) { var c = new n(e.$grid_data,{ updates_per_second: 60 }); t.defined(e.$getConfig().dnd_sensitivity) && (c.config.sensitivity = e.$getConfig().dnd_sensitivity), c.attachEvent("onBeforeDragStart", t.bind(function(n, r) { var a = u(r); if (!a) return !1; if (t.hideQuickInfo && t._hideQuickInfo(), i.closest(r.target, ".gantt_grid_editor_placeholder")) return !1; var o = a.getAttribute(e.$config.item_attribute) , s = e.$config.rowStore.getItem(o); return !t.isReadonly(s) && !d(o) && (c.config.initial_open_state = s.$open, !!t.callEvent("onRowDragStart", [o, r.target || r.srcElement, r]) && void 0) }, t)), c.attachEvent("onAfterDragStart", t.bind(function(t, n) { var i = u(n); c.config.marker.innerHTML = i.outerHTML; var a = c.config.marker.firstChild; a && (c.config.marker.style.opacity = .4, a.style.position = "static", a.style.pointerEvents = "none"), c.config.id = i.getAttribute(e.$config.item_attribute); var o = e.$config.rowStore , s = o.getItem(c.config.id); c.config.level = o.calculateItemLevel(s), c.config.drop_target = r.createDropTargetObject({ targetParent: o.getParent(s.id), targetIndex: o.getBranchIndex(s.id), targetId: s.id, nextSibling: !0 }), s.$open = !1, s.$transparent = !0, this.refreshData() }, t)), c.attachEvent("onDragMove", t.bind(function(n, i) { var a = h(i); return a && !1 !== t.callEvent("onBeforeRowDragMove", [c.config.id, a.targetParent, a.targetIndex]) || (a = r.createDropTargetObject(c.config.drop_target)), s.highlightPosition(a, c.config, e), c.config.drop_target = a, t._waiAria.reorderMarkerAttr(c.config.marker), this.callEvent("onRowDragMove", [c.config.id, a.targetParent, a.targetIndex]), !0 }, t)), c.attachEvent("onDragEnd", t.bind(function() { var n = e.$config.rowStore , i = n.getItem(c.config.id); s.removeLineHighlight(c.config), i.$transparent = !1, i.$open = c.config.initial_open_state; var r = c.config.drop_target; !1 === this.callEvent("onBeforeRowDragEnd", [c.config.id, r.targetParent, r.targetIndex]) ? i.$drop_target = null : (n.move(c.config.id, r.targetIndex, r.targetParent), t.render(), this.callEvent("onRowDragEnd", [c.config.id, r.targetParent, r.targetIndex])), n.refresh(i.id) }, t)) } function u(t) { return i.locateAttribute(t, e.$config.item_attribute) } function d(n) { return l(n, t, t.getDatastore(e.$config.bind)) } function h(n) { var r, s = function(n) { var r = i.getRelativeEventPosition(n, e.$grid_data).y , a = e.$config.rowStore; document.doctype || (r += window.scrollY), r = r || 0; var o = e.$state.scrollTop || 0 , s = t.$grid_data.getBoundingClientRect().height + o + window.scrollY , l = o , u = e.getItemIndexByTopPosition(e.$state.scrollTop); if (a.exists(u) || (u = a.countVisible() - 1), u < 0) return a.$getRootId(); var h = a.getIdByIndex(u) , f = e.$state.scrollTop / e.getItemHeight(h) , _ = f - Math.floor(f); _ > .1 && _ < .9 && (s -= e.getItemHeight(h) * _, l += e.getItemHeight(h) * (1 - _)); var g = i.getNodePosition(e.$grid_data) , p = g.y + g.height , v = c.config.marker.offsetHeight; r + v + window.scrollY >= s && (c.config.marker.style.top = p - v + "px"), r >= s ? r = s : r <= l && (r = l, c.config.marker.style.top = g.y + "px"); var m = e.getItemIndexByTopPosition(r); if (m > a.countVisible() - 1 || m < 0) return a.$getRootId(); var y = a.getIdByIndex(m); return d(y) ? a.getPrevSibling(y) : a.getIdByIndex(m) }(n), l = null, u = e.$config.rowStore, h = !e.$getConfig().order_branch_free, f = i.getRelativeEventPosition(n, e.$grid_data).y; return document.doctype || (f += window.scrollY), s !== u.$getRootId() && (l = (f - e.getItemTop(s)) / e.getItemHeight(s)), h ? (r = a(c.config.id, s, l, f, u, c.config.level)) && r.targetParent && d(r.targetParent) && (s = u.getPrevSibling(r.targetParent), r = a(c.config.id, s, l, f, u, c.config.level)) : r = o(c.config.id, s, l, f, u), r } } } } , function(t, e, n) { var i = n(1) , r = n(16); t.exports = { init: function(t, e) { var n = t.$services.getService("dnd"); if (e.$config.bind && t.getDatastore(e.$config.bind)) { var a = new n(e.$grid_data,{ updates_per_second: 60 }); t.defined(e.$getConfig().dnd_sensitivity) && (a.config.sensitivity = e.$getConfig().dnd_sensitivity), a.attachEvent("onBeforeDragStart", t.bind(function(n, r) { var c = o(r); if (!c) return !1; if (t.hideQuickInfo && t._hideQuickInfo(), i.closest(r.target, ".gantt_grid_editor_placeholder")) return !1; var u = c.getAttribute(e.$config.item_attribute); if (l(u)) return !1; var d = s().getItem(u); return !t.isReadonly(d) && (a.config.initial_open_state = d.$open, !!t.callEvent("onRowDragStart", [u, r.target || r.srcElement, r]) && void 0) }, t)), a.attachEvent("onAfterDragStart", t.bind(function(t, n) { var i = o(n); a.config.marker.innerHTML = i.outerHTML; var r = a.config.marker.firstChild; r && (r.style.position = "static"), a.config.id = i.getAttribute(e.$config.item_attribute); var l = s() , c = l.getItem(a.config.id); a.config.index = l.getBranchIndex(a.config.id), a.config.parent = c.parent, c.$open = !1, c.$transparent = !0, this.refreshData() }, t)), a.lastTaskOfLevel = function(t) { for (var e = null, n = s().getItems(), i = 0, r = n.length; i < r; i++) n[i].$level == t && (e = n[i]); return e ? e.id : null } , a._getGridPos = t.bind(function(t) { var n = i.getNodePosition(e.$grid_data) , r = n.x + e.$grid.scrollLeft , o = t.pos.y - 10 , s = e.getItemHeight(a.config.id); o < n.y && (o = n.y); var l = e.getTotalHeight(); o > n.y + l - s && (o = n.y + l - s); var c = n.y + n.height; return o > c - s && (o = c - s), n.x = r, n.y = o, n }, t), a._getTargetY = t.bind(function(n) { var r = i.getNodePosition(e.$grid_data) , a = e.$state.scrollTop || 0 , o = t.$grid_data.getBoundingClientRect().height + a , s = n.pageY - r.y + a; return s > o ? s = o : s < a && (s = a), s }, t), a._getTaskByY = t.bind(function(t, n) { var i = s(); t = t || 0; var r = e.getItemIndexByTopPosition(t); return (r = n < r ? r - 1 : r) > i.countVisible() - 1 ? null : i.getIdByIndex(r) }, t), a.attachEvent("onDragMove", t.bind(function(n, r) { var o = t.$grid_data.getBoundingClientRect() , c = o.height + o.y + (e.$state.scrollTop || 0) + window.scrollY , u = a.config , d = a._getGridPos(r); t._waiAria.reorderMarkerAttr(u.marker); var h = e.$getConfig() , f = s(); d.y < c ? u.marker.style.top = d.y + "px" : u.marker.style.top = c + "px", u.marker.style.left = d.x + 10 + "px"; var _ = i.getNodePosition(t.$root); d.width > _.width && (u.marker.style.width = _.width - 10 - 2 + "px", u.marker.style.overflow = "hidden"); var g = f.getItem(a.config.id) , p = a._getTargetY(r) , v = a._getTaskByY(p, f.getIndexById(g.id)); function m(t, e) { return !f.isChildOf(y.id, e.id) && (t.$level == e.$level || h.order_branch_free) } if (f.exists(v) || (v = a.lastTaskOfLevel(h.order_branch_free ? g.$level : 0)) == a.config.id && (v = null), f.exists(v)) { var y = f.getItem(v) , k = e.getItemTop(y.id) , b = e.getItemHeight(y.id); if (k + b / 2 < p) { var x = f.getIndexById(y.id) , w = f.getNext(y.id) , S = f.getItem(w); if (l(w)) { var T = f.getPrev(S.id); S = f.getItem(T) } if (S) { if (S.id == g.id) return h.order_branch_free && f.isChildOf(g.id, y.id) && 1 == f.getChildren(y.id).length ? void f.move(g.id, f.getBranchIndex(y.id) + 1, f.getParent(y.id)) : void 0; y = S } else if (w = f.getIdByIndex(x), S = f.getItem(w), l(w) && (T = f.getPrev(S.id), S = f.getItem(T)), m(S, g) && S.id != g.id) return void f.move(g.id, -1, f.getParent(S.id)) } else if (h.order_branch_free && y.id != g.id && m(y, g) && !l(y.id)) { if (!f.hasChild(y.id)) return y.$open = !0, void f.move(g.id, -1, y.id); if (f.getIndexById(y.id) || b / 3 < p) return } x = f.getIndexById(y.id), T = f.getIdByIndex(x - 1); for (var $ = f.getItem(T), C = 1; (!$ || $.id == y.id) && x - C >= 0; ) T = f.getIdByIndex(x - C), $ = f.getItem(T), C++; if (g.id == y.id || l(y.id)) return; m(y, g) && g.id != y.id ? f.move(g.id, 0, 0, y.id) : y.$level != g.$level - 1 || f.getChildren(y.id).length ? $ && m($, g) && g.id != $.id && f.move(g.id, -1, f.getParent($.id)) : f.move(g.id, 0, y.id) } return !0 }, t)), a.attachEvent("onDragEnd", t.bind(function() { var e = s() , n = e.getItem(a.config.id); n.$transparent = !1, n.$open = a.config.initial_open_state, !1 === this.callEvent("onBeforeRowDragEnd", [a.config.id, a.config.parent, a.config.index]) ? (e.move(a.config.id, a.config.index, a.config.parent), n.$drop_target = null) : this.callEvent("onRowDragEnd", [a.config.id, n.$drop_target]), t.render(), this.refreshData() }, t)) } function o(t) { return i.locateAttribute(t, e.$config.item_attribute) } function s() { return t.getDatastore(e.$config.bind) } function l(e) { return r(e, t, s()) } } } } , function(t, e, n) { var i = n(0) , r = n(104) , a = n(103) , o = function(t) { return { onCreated: function(e) { e.$config = i.mixin(e.$config, { bind: "task" }), "grid" == e.$config.id && (this.extendGantt(e), t.ext.inlineEditors = t.ext._inlineEditors.createEditors(e), t.ext.inlineEditors.init()), this._mouseDelegates = n(31)(t) }, onInitialized: function(e) { var n = e.$getConfig(); n.order_branch && ("marker" == n.order_branch ? a.init(e.$gantt, e) : r.init(e.$gantt, e)), this.initEvents(e, t), "grid" == e.$config.id && this.extendDom(e) }, onDestroyed: function(e) { "grid" == e.$config.id && t.ext.inlineEditors.destructor(), this.clearEvents(e, t) }, initEvents: function(t, e) { this._mouseDelegates.delegate("click", "gantt_row", e.bind(function(n, i, r) { var a = t.$getConfig(); if (null !== i) { var o = this.getTask(i); a.scroll_on_click && !e._is_icon_open_click(n) && this.showDate(o.start_date), e.callEvent("onTaskRowClick", [i, r]) } }, e), t.$grid), this._mouseDelegates.delegate("click", "gantt_grid_head_cell", e.bind(function(n, i, r) { var a = r.getAttribute("data-column-id"); if (e.callEvent("onGridHeaderClick", [a, n])) { var o = t.$getConfig(); if ("add" != a) { if (o.sort && a) { for (var s, l = a, c = 0; c < o.columns.length; c++) if (o.columns[c].name == a) { s = o.columns[c]; break } if (s && void 0 !== s.sort && !0 !== s.sort && !(l = s.sort)) return; var u = this._sort && this._sort.direction && this._sort.name == a ? this._sort.direction : "desc"; u = "desc" == u ? "asc" : "desc", this._sort = { name: a, direction: u }, this.sort(l, "desc" == u) } } else e.$services.getService("mouseEvents").callHandler("click", "gantt_add", t.$grid, [n, o.root_id]) } }, e), t.$grid), this._mouseDelegates.delegate("click", "gantt_add", e.bind(function(n, i, r) { if (!t.$getConfig().readonly) return this.createTask({}, i || e.config.root_id), !1 }, e), t.$grid) }, clearEvents: function(t, e) { this._mouseDelegates.destructor(), this._mouseDelegates = null }, extendDom: function(e) { t.$grid = e.$grid, t.$grid_scale = e.$grid_scale, t.$grid_data = e.$grid_data }, extendGantt: function(e) { t.getGridColumns = t.bind(e.getGridColumns, e), e.attachEvent("onColumnResizeStart", function() { return t.callEvent("onColumnResizeStart", arguments) }), e.attachEvent("onColumnResize", function() { return t.callEvent("onColumnResize", arguments) }), e.attachEvent("onColumnResizeEnd", function() { return t.callEvent("onColumnResizeEnd", arguments) }), e.attachEvent("onColumnResizeComplete", function(e, n) { t.config.grid_width = n }), e.attachEvent("onBeforeRowResize", function() { return t.callEvent("onBeforeRowResize", arguments) }), e.attachEvent("onRowResize", function() { return t.callEvent("onRowResize", arguments) }), e.attachEvent("onBeforeRowResizeEnd", function() { return t.callEvent("onBeforeRowResizeEnd", arguments) }), e.attachEvent("onAfterRowResize", function() { return t.callEvent("onAfterRowResize", arguments) }) } } }; t.exports = o } , function(t, e, n) { var i = n(30) , r = n(6); t.exports = function(t) { return { render: function(e, n, i) { var r = n.$getConfig() , a = document.createElement("div"); return a.className = "gantt_task_grid_row_resize_wrap", a.style.top = n.getItemTop(e.id) + n.getItemHeight(e.id) + "px", a.innerHTML = "
", a.setAttribute(r.task_grid_row_resizer_attribute, e.id), t._waiAria.rowResizerAttr(a), a }, update: null, getRectangle: i, getVisibleRange: r } } } , function(t, e, n) { var i = n(27) , r = n(6) , a = n(26) , o = n(25) , s = n(37); function l(t, e, n, i) { var r = 100 * (1 - (1 * t || 0)) , a = i.posFromDate(e) , o = i.posFromDate(n) , s = document.createElement("div"); return s.className = "gantt_histogram_hor_bar", s.style.top = r + "%", s.style.left = a + "px", s.style.width = o - a + 1 + "px", s } function c(t, e, n) { if (t === e) return null; var i = 1 - Math.max(t, e) , r = Math.abs(t - e) , a = document.createElement("div"); return a.className = "gantt_histogram_vert_bar", a.style.top = 100 * i + "%", a.style.height = 100 * r + "%", a.style.left = n + "px", a } t.exports = function(t) { var e = s(t) , n = {} , u = {} , d = {}; function h(t, e) { var i = n[t]; i && i[e] && i[e].parentNode && i[e].parentNode.removeChild(i[e]) } function f(e, n, i, r, o, s, u) { var h = d[e.id]; h && h.parentNode && h.parentNode.removeChild(h); var f = function(e, n, i, r) { for (var o = n.getScale(), s = document.createElement("div"), u = a(o, r), d = u.start; d <= u.end; d++) { var h = o.trace_x[d] , f = o.trace_x[d + 1] || t.date.add(h, o.step, o.unit) , _ = o.trace_x[d].valueOf() , g = Math.min(e[_] / i, 1) || 0; if (g < 0) return null; var p = Math.min(e[f.valueOf()] / i, 1) || 0 , v = l(g, h, f, n); v && s.appendChild(v); var m = c(g, p, n.posFromDate(f)); m && s.appendChild(m) } return s }(i, o, s, u); return f && n && (f.setAttribute("data-resource-id", e.id), f.setAttribute(o.$config.item_attribute, e.id), f.style.position = "absolute", f.style.top = n.top + 1 + "px", f.style.height = o.getItemHeight(e.id) - 1 + "px", f.style.left = 0), f } function _(t, e, n, i, r, a, o) { var s = r.histogram_cell_class(a.start_date, a.end_date, t, a.tasks, a.assignments) , l = r.histogram_cell_label(a.start_date, a.end_date, t, a.tasks, a.assignments) , c = r.histogram_cell_allocated(a.start_date, a.end_date, t, a.tasks, a.assignments) , u = o.getItemHeight(t.id) - 1; if (s || l) { var d = document.createElement("div"); return d.className = ["gantt_histogram_cell", s].join(" "), d.setAttribute(o.$config.item_attribute, t.id), d.style.cssText = ["left:" + e.left + "px", "width:" + e.width + "px", "height:" + u + "px", "line-height:" + u + "px", "top:" + (e.top + 1) + "px"].join(";"), l && (l = "
" + l + "
"), c && (l = "
" + l), l && (d.innerHTML = l), d } return null } return { render: function(i, r, s, l) { var c = r.$getTemplates() , h = r.getScale() , g = e(i, s.resource_property, h, r) , p = [] , v = {} , m = i.capacity || r.$config.capacity || 24; n[i.id] = {}, u[i.id] = null, d[i.id] = null; for (var y = !!l, k = a(h, l), b = k.start; b <= k.end; b++) { var x = g[b]; if (x && (!y || o(b, h, l, t))) { var w = c.histogram_cell_capacity(x.start_date, x.end_date, i, x.tasks, x.assignments); v[x.start_date.valueOf()] = w || 0; var S = r.getItemPosition(i, x.start_date, x.end_date) , T = _(i, S, m, 0, c, x, r); T && (p.push(T), n[i.id][b] = T) } } var $ = null; if (p.length) { $ = document.createElement("div"); for (var C = 0; C < p.length; C++) $.appendChild(p[C]); var E = f(i, S, v, 0, r, m, l); E && ($.appendChild(E), d[i.id] = E), u[i.id] = $ } return $ }, update: function(i, r, s, l, c) { var u = s.$getTemplates() , g = s.getScale() , p = e(i, l.resource_property, g, s) , v = i.capacity || s.$config.capacity || 24 , m = {} , y = !!c , k = a(g, c) , b = {}; if (n && n[i.id]) for (var x in n[i.id]) b[x] = x; for (var w = k.start; w <= k.end; w++) { var S = p[w]; if (b[w] = !1, S) { var T = u.histogram_cell_capacity(S.start_date, S.end_date, i, S.tasks, S.assignments); m[S.start_date.valueOf()] = T || 0; var $ = s.getItemPosition(i, S.start_date, S.end_date); if (!y || o(w, g, c, t)) { var C = n[i.id]; if (C && C[w]) C && C[w] && !C[w].parentNode && r.appendChild(C[w]); else { var E = _(i, $, v, 0, u, S, s); E && (r.appendChild(E), n[i.id][w] = E) } } else h(i.id, w) } } for (var x in b) !1 !== b[x] && h(i.id, x); var A = f(i, $, m, 0, s, v, c); A && (r.appendChild(A), d[i.id] = A) }, getRectangle: i, getVisibleRange: r } } } , function(t, e, n) { var i = n(27) , r = n(6) , a = n(26) , o = n(25) , s = n(37); t.exports = function(t) { var e = s(t) , n = {}; function l(t, e, n, i, r) { var a = n.resource_cell_class(e.start_date, e.end_date, t, e.tasks, e.assignments) , o = n.resource_cell_value(e.start_date, e.end_date, t, e.tasks, e.assignments) , s = r.getItemHeight(t.id) - 1; if (a || o) { var l = r.getItemPosition(t, e.start_date, e.end_date) , c = document.createElement("div"); return c.setAttribute(r.$config.item_attribute, t.id), c.className = ["gantt_resource_marker", a].join(" "), c.style.cssText = ["left:" + l.left + "px", "width:" + l.width + "px", "height:" + s + "px", "line-height:" + s + "px", "top:" + l.top + "px"].join(";"), o && (c.innerHTML = o), c } return null } function c(t, e) { n[t] && n[t][e] && n[t][e].parentNode && n[t][e].parentNode.removeChild(n[t][e]) } return { render: function(i, r, s, c) { var u = r.$getTemplates() , d = r.getScale() , h = e(i, s.resource_property, r.getScale(), r) , f = !!c , _ = []; n[i.id] = {}; for (var g = a(d, c), p = g.start; p <= g.end; p++) { var v = h[p]; if (v && (!f || o(p, d, c, t))) { var m = l(i, v, u, 0, r); m && (_.push(m), n[i.id][p] = m) } } var y = null; if (_.length) { y = document.createElement("div"); for (var k = 0; k < _.length; k++) y.appendChild(_[k]) } return y }, update: function(i, r, s, u, d) { var h = s.$getTemplates() , f = s.getScale() , _ = e(i, u.resource_property, s.getScale(), s) , g = a(f, d) , p = {}; if (n && n[i.id]) for (var v in n[i.id]) p[v] = v; for (var m = g.start; m <= g.end; m++) { var y = _[m]; if (p[m] = !1, y) if (o(m, f, d, t)) if (n[i.id] && n[i.id][m]) n[i.id] && n[i.id][m] && !n[i.id][m].parentNode && r.appendChild(n[i.id][m]); else { var k = l(i, y, h, 0, s); k && (r.appendChild(k), n[i.id][m] = k) } else c(i.id, m) } for (var v in p) !1 !== p[v] && c(i.id, v) }, getRectangle: i, getVisibleRange: r } } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(2) , a = n(30) , o = n(6); t.exports = function(t) { return { render: function(e, n, i, a) { for (var o = n.getGridColumns(), s = n.$getTemplates(), l = n.$config.rowStore, c = [], u = 0; u < o.length; u++) { var d, h, f, _ = u == o.length - 1, g = o[u]; "add" == g.name ? (h = "
", f = "") : (h = g.template ? g.template(e) : e[g.name], r.isDate(h) && (h = s.date_grid(h, e, g.name)), null !== h && void 0 !== h || (h = ""), f = h, h = "
" + h + "
"); var p = "gantt_cell" + (_ ? " gantt_last_cell" : "") , v = []; if (g.tree) { p += " gantt_cell_tree"; for (var m = 0; m < e.$level; m++) v.push(s.grid_indent(e)); !l.hasChild(e.id) || t.isSplitTask(e) && !t.config.open_split_tasks ? (v.push(s.grid_blank(e)), v.push(s.grid_file(e))) : (v.push(s.grid_open(e)), v.push(s.grid_folder(e))) } var y = "width:" + (g.width - (_ ? 1 : 0)) + "px;"; if (this.defined(g.align)) { var k = { right: "flex-end", left: "flex-start", center: "center" }[g.align]; y += "text-align:" + g.align + ";justify-content:" + k + ";" } var b = t._waiAria.gridCellAttrString(g, f, e); v.push(h), d = "
" + v.join("") + "
", c.push(d) } switch (p = "", l.$config.name) { case "task": p = t.getGlobalTaskIndex(e.id) % 2 == 0 ? "" : " odd"; break; case "resource": p = l.visibleOrder.indexOf(e.id) % 2 == 0 ? "" : " odd" } if (p += e.$transparent ? " gantt_transparent" : "", p += e.$dataprocessor_class ? " " + e.$dataprocessor_class : "", s.grid_row_class) { var x = s.grid_row_class.call(t, e.start_date, e.end_date, e); x && (p += " " + x) } l.isSelected(e.id) && (p += " gantt_selected"); var w = document.createElement("div"); w.className = "gantt_row" + p + " gantt_row_" + t.getTaskType(e.type); var S = n.getItemHeight(e.id); return w.style.height = S + "px", w.style.lineHeight = S + "px", i.smart_rendering && (w.style.position = "absolute", w.style.left = "0px", w.style.top = n.getItemTop(e.id) + "px"), n.$config.item_attribute && (w.setAttribute(n.$config.item_attribute, e.id), w.setAttribute(n.$config.bind + "_id", e.id)), t._waiAria.taskRowAttr(e, w), w.innerHTML = c.join(""), w }, update: null, getRectangle: a, getVisibleRange: o, onrender: function(e, n, r) { for (var a = r.getGridColumns(), o = 0; o < a.length; o++) { var s = a[o]; if (s.onrender) { var l = n.querySelector("[data-column-name=" + s.name + "]"); if (l) { var c = s.onrender(e, l); if (c && "string" == typeof c) l.innerHTML = c; else if (c && "object" === i(c) && t.config.external_render) { var u = t.config.external_render; u.isElement(c) && u.renderElement(c, l) } } } } } } } } , function(t, e, n) { var i = n(39) , r = n(40); t.exports = function(t) { var e = { current_pos: null, dirs: { left: "left", right: "right", up: "up", down: "down" }, path: [], clear: function() { this.current_pos = null, this.path = [] }, point: function(e) { this.current_pos = t.copy(e) }, get_lines: function(t) { this.clear(), this.point(t[0]); for (var e = 1; e < t.length; e++) this.line_to(t[e]); return this.get_path() }, line_to: function(e) { var n = t.copy(e) , i = this.current_pos , r = this._get_line(i, n); this.path.push(r), this.current_pos = n }, get_path: function() { return this.path }, get_wrapper_sizes: function(t, e, n) { var i, r = e.$getConfig().link_wrapper_width, a = t.y - r / 2; switch (t.direction) { case this.dirs.left: i = { top: a, height: r, lineHeight: r, left: t.x - t.size - r / 2, width: t.size + r }; break; case this.dirs.right: i = { top: a, lineHeight: r, height: r, left: t.x - r / 2, width: t.size + r }; break; case this.dirs.up: i = { top: a - t.size, lineHeight: t.size + r, height: t.size + r, left: t.x - r / 2, width: r }; break; case this.dirs.down: i = { top: a, lineHeight: t.size + r, height: t.size + r, left: t.x - r / 2, width: r } } return i }, get_line_sizes: function(t, e) { var n, i = e.$getConfig(), r = i.link_line_width, a = i.link_wrapper_width, o = t.size + r; switch (t.direction) { case this.dirs.left: case this.dirs.right: n = { height: r, width: o, marginTop: (a - r) / 2, marginLeft: (a - r) / 2 }; break; case this.dirs.up: case this.dirs.down: n = { height: o, width: r, marginTop: (a - r) / 2, marginLeft: (a - r) / 2 } } return n }, render_line: function(t, e, n, i) { var r = this.get_wrapper_sizes(t, n, i) , a = document.createElement("div"); a.style.cssText = ["top:" + r.top + "px", "left:" + r.left + "px", "height:" + r.height + "px", "width:" + r.width + "px"].join(";"), a.className = "gantt_line_wrapper"; var o = this.get_line_sizes(t, n) , s = document.createElement("div"); return s.style.cssText = ["height:" + o.height + "px", "width:" + o.width + "px", "margin-top:" + o.marginTop + "px", "margin-left:" + o.marginLeft + "px"].join(";"), s.className = "gantt_link_line_" + t.direction, a.appendChild(s), a }, _get_line: function(t, e) { var n = this.get_direction(t, e) , i = { x: t.x, y: t.y, direction: this.get_direction(t, e) }; return n == this.dirs.left || n == this.dirs.right ? i.size = Math.abs(t.x - e.x) : i.size = Math.abs(t.y - e.y), i }, get_direction: function(t, e) { return e.x < t.x ? this.dirs.left : e.x > t.x ? this.dirs.right : e.y > t.y ? this.dirs.down : this.dirs.up } } , n = { path: [], clear: function() { this.path = [] }, current: function() { return this.path[this.path.length - 1] }, point: function(e) { return e ? (this.path.push(t.copy(e)), e) : this.current() }, point_to: function(n, i, r) { r = r ? { x: r.x, y: r.y } : t.copy(this.point()); var a = e.dirs; switch (n) { case a.left: r.x -= i; break; case a.right: r.x += i; break; case a.up: r.y -= i; break; case a.down: r.y += i } return this.point(r) }, get_points: function(n, i, r, a) { var o = this.get_endpoint(n, i, r, a) , s = t.config , l = o.e_y - o.y , c = o.e_x - o.x , u = e.dirs , d = i.getItemHeight(n.source); this.clear(), this.point({ x: o.x, y: o.y }); var h = 2 * s.link_arrow_size , f = this.get_line_type(n, i.$getConfig()) , _ = o.e_x > o.x; if (f.from_start && f.to_start) this.point_to(u.left, h), _ ? (this.point_to(u.down, l), this.point_to(u.right, c)) : (this.point_to(u.right, c), this.point_to(u.down, l)), this.point_to(u.right, h); else if (!f.from_start && f.to_start) if (_ = o.e_x > o.x + 2 * h, this.point_to(u.right, h), _) c -= h, this.point_to(u.down, l), this.point_to(u.right, c); else { c -= 2 * h; var g = l > 0 ? 1 : -1; this.point_to(u.down, g * (d / 2)), this.point_to(u.right, c), this.point_to(u.down, g * (Math.abs(l) - d / 2)), this.point_to(u.right, h) } else f.from_start || f.to_start ? f.from_start && !f.to_start && (_ = o.e_x > o.x - 2 * h, this.point_to(u.left, h), _ ? (c += 2 * h, g = l > 0 ? 1 : -1, this.point_to(u.down, g * (d / 2)), this.point_to(u.right, c), this.point_to(u.down, g * (Math.abs(l) - d / 2)), this.point_to(u.left, h)) : (c += h, this.point_to(u.down, l), this.point_to(u.right, c))) : (this.point_to(u.right, h), _ ? (this.point_to(u.right, c), this.point_to(u.down, l)) : (this.point_to(u.down, l), this.point_to(u.right, c)), this.point_to(u.left, h)); return this.path }, get_line_type: function(e, n) { var i = n.links , r = !1 , a = !1; return e.type == i.start_to_start ? r = a = !0 : e.type == i.finish_to_finish ? r = a = !1 : e.type == i.finish_to_start ? (r = !1, a = !0) : e.type == i.start_to_finish ? (r = !0, a = !1) : t.assert(!1, "Invalid link type"), n.rtl && (r = !r, a = !a), { from_start: r, to_start: a } }, get_endpoint: function(t, e, n, i) { var r = e.$getConfig() , o = this.get_line_type(t, r) , s = o.from_start , l = o.to_start , c = a(n, e, r) , u = a(i, e, r); return { x: s ? c.left : c.left + c.width, e_x: l ? u.left : u.left + u.width, y: c.top + c.rowHeight / 2 - 1, e_y: u.top + u.rowHeight / 2 - 1 } } }; function a(e, n, i) { var r = n.getItemPosition(e); if (t.getTaskType(e.type) == i.types.milestone) { var a = n.getBarHeight(e.id, !0) , o = Math.sqrt(2 * a * a); r.left -= o / 2, r.width = o } return r } return { render: function(i, r, a) { var o = t.getTask(i.source); if (!o.hide_bar) { var s = t.getTask(i.target); if (!s.hide_bar) { var l = n.get_endpoint(i, r, o, s) , c = l.e_y - l.y; if (!(l.e_x - l.x || c)) return null; var u = n.get_points(i, r, o, s) , d = e.get_lines(u, r) , h = document.createElement("div") , f = "gantt_task_link"; i.color && (f += " gantt_link_inline_color"); var _ = t.templates.link_class ? t.templates.link_class(i) : ""; _ && (f += " " + _), a.highlight_critical_path && t.isCriticalLink && t.isCriticalLink(i) && (f += " gantt_critical_link"), h.className = f, r.$config.link_attribute && (h.setAttribute(r.$config.link_attribute, i.id), h.setAttribute("link_id", i.id)); for (var g = 0; g < d.length; g++) { g == d.length - 1 && (d[g].size -= a.link_arrow_size); var p = e.render_line(d[g], d[g + 1], r, i.source); i.color && (p.firstChild.style.backgroundColor = i.color), h.appendChild(p) } var v = d[d.length - 1].direction , m = function(t, n, i, r) { var a = i.$getConfig() , o = document.createElement("div") , s = t.y , l = t.x , c = a.link_arrow_size , u = "gantt_link_arrow gantt_link_arrow_" + n; switch (n) { case e.dirs.right: s -= c / 2, l -= c; break; case e.dirs.left: s -= c / 2; break; case e.dirs.up: l -= c; break; case e.dirs.down: s += 2 * c, l -= c } return o.style.cssText = ["top:" + s + "px", "left:" + l + "px"].join(";"), o.className = u, o }(u[u.length - 1], v, r, i.source); return i.color && (m.style.borderColor = i.color), h.appendChild(m), t._waiAria.linkAttr(i, h), h } } }, update: null, isInViewPort: i, getVisibleRange: r() } } } , function(t, e) { t.exports = function(t, e) { var n = e.config.timeline_placeholder; if (t = t || [], n && 0 === t.filter(function(t) { return "timeline_placeholder_task" === t.id }).length) { var i = e.getState() , r = null , a = i.min_date , o = i.max_date; t.length && (r = t[t.length - 1].id); var s = { start_date: a, end_date: o, row_height: n.height || 0, id: "timeline_placeholder_task", unscheduled: !0, lastTaskId: r, calendar_id: n.calendar || "global", $source: [], $target: [] }; t.push(s) } } } , function(t, e, n) { var i = n(27) , r = n(20) , a = n(6) , o = n(26) , s = n(25) , l = n(111); t.exports = function(t) { var e = {} , n = {}; function c(t, n) { return !(!e[t.id][n] || !e[t.id][n].parentNode) } function u(t, n) { e[t] && e[t][n] && e[t][n].parentNode && e[t][n].parentNode.removeChild(e[t][n]) } function d(t) { var e, n = t.$getTemplates(); return void 0 !== n.task_cell_class ? (e = n.task_cell_class, (console.warn || console.log)("gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.")) : e = n.timeline_cell_class, e } function h(t) { return t.$getTemplates().timeline_cell_content } function f(i, r, a, o, l, c, u, d) { var h = i.width[r] , f = ""; if (s(r, i, o, t)) { var _ = c(a, i.trace_x[r]) , g = ""; if (u && (g = u(a, i.trace_x[r])), d.static_background) { var p = !(!_ && !g); if (!d.static_background_cells || !p) return null } if (e[a.id][r]) return n[a.id][r] = r, e[a.id][r]; var v = document.createElement("div"); return v.style.width = h + "px", f = "gantt_task_cell" + (r == l - 1 ? " gantt_last_cell" : ""), _ && (f += " " + _), v.className = f, g && (v.innerHTML = g), v.style.position = "absolute", v.style.left = i.left[r] + "px", e[a.id][r] = v, n[a.id][r] = r, v } return null } return { render: function(i, a, s, l) { var c = a.$getTemplates() , u = a.getScale() , _ = u.count; if (s.static_background && !s.static_background_cells) return null; var g, p = document.createElement("div"), v = d(a), m = h(a); if (g = l && s.smart_rendering && !r(t) ? o(u, l.x) : { start: 0, end: _ - 1 }, s.show_task_cells) { e[i.id] = {}, n[i.id] = {}; for (var y = g.start; y <= g.end; y++) { var k = f(u, y, i, l, _, v, m, s); k && p.appendChild(k) } } var b = a.$config.rowStore , x = b.getIndexById(i.id) % 2 != 0 , w = c.task_row_class(i.start_date, i.end_date, i) , S = "gantt_task_row" + (x ? " odd" : "") + (w ? " " + w : ""); if (b.isSelected(i.id) && (S += " gantt_selected"), p.className = S, s.smart_rendering ? (p.style.position = "absolute", p.style.top = a.getItemTop(i.id) + "px", p.style.width = "100%") : p.style.position = "relative", p.style.height = a.getItemHeight(i.id) + "px", "timeline_placeholder_task" == i.id) { var T = 0; i.lastTaskId && (T = a.getItemTop(i.lastTaskId) + a.getItemHeight(i.lastTaskId)); var $ = (i.row_height || a.$task_data.offsetHeight) - T; $ < 0 && ($ = 0), s.smart_rendering && (p.style.top = T + "px"), p.style.height = $ + "px" } return a.$config.item_attribute && (p.setAttribute(a.$config.item_attribute, i.id), p.setAttribute(a.$config.bind + "_id", i.id)), p }, update: function(t, i, r, a, s) { var l = r.getScale() , _ = l.count , g = d(r) , p = h(r); if (a.show_task_cells) { e[t.id] || (e[t.id] = {}), n[t.id] || (n[t.id] = {}); var v = o(l, s); for (var m in n[t.id]) { var y = n[t.id][m]; (Number(y) < v.start || Number(y) > v.end) && u(t.id, y) } n[t.id] = {}; for (var k = v.start; k <= v.end; k++) { var b = f(l, k, t, s, _, g, p, a); !b && c(t, k) ? u(t.id, k) : b && !b.parentNode && i.appendChild(b) } } }, getRectangle: i, getVisibleRange: a, prepareData: l } } } , function(t, e, n) { var i = n(28) , r = n(19) , a = n(6); t.exports = function(t) { var e = i(t) , n = {}; function o(t, e, n, i, a) { var o = !0; return i.smart_rendering && (o = r(t, e, n, i, a)), o } function s(n, i, r, a) { var o = t.copy(t.getTask(i.id)); if (o.$rendered_at = n.id, !1 !== t.callEvent("onBeforeRollupTaskDisplay", [o.id, o, n.id])) { var s = e(o, r); if (s) { var l = r.getBarHeight(n.id, i.type == t.config.types.milestone) , c = Math.floor((r.getItemHeight(n.id) - l) / 2); return s.style.top = a.top + c + "px", s.classList.add("gantt_rollup_child"), s.setAttribute("data-rollup-parent-id", n.id), s } } } function l(t, e) { return t + "_" + e } return { render: function(e, i, r, a) { if (!1 !== e.rollup && e.$rollup && e.$rollup.length) { var c = document.createElement("div") , u = t.getTaskPosition(e); return a.y = 0, a.y_end = t.$task_bg.scrollHeight, e.$rollup.forEach(function(d) { if (t.isTaskExists(d)) { var h = t.getTask(d); if (o(h, a, i, r, t)) { var f = s(e, h, i, u); f ? (n[l(h.id, e.id)] = f, c.appendChild(f)) : n[l(h.id, e.id)] = !1 } } }), c } return !1 }, update: function(e, i, r, a, c) { var u = document.createElement("div") , d = t.getTaskPosition(e); c.y = 0, c.y_end = t.$task_bg.scrollHeight, e.$rollup.forEach(function(h) { var f = t.getTask(h) , _ = l(f.id, e.id) , g = o(f, c, r, a, t); if (g !== !!n[_]) if (g) { var p = s(e, f, r, d); n[_] = p || !1 } else n[_] = !1; n[_] && u.appendChild(n[_]), i.innerHTML = "", i.appendChild(u) }) }, isInViewPort: r, getVisibleRange: a } } } , function(t, e, n) { var i = n(19); t.exports = function(t, e, n, r, a) { if (!a.isSplitTask(t)) return !1; var o = a.getSubtaskDates(t.id); return i({ id: t.id, start_date: o.start_date, end_date: o.end_date, parent: t.parent }, e, n, a) } } , function(t, e, n) { var i = n(28) , r = n(6) , a = n(114) , o = n(19); t.exports = function(t) { var e = i(t) , n = {}; function s(t, e, n, i, r) { var a = !t.hide_bar; return i.smart_rendering && a && (a = o(t, e, n, i, r)), a } function l(n, i, r, a) { if (!i.hide_bar) { var o = t.isSummaryTask(i); o && t.resetProjectDates(i); var s = t.copy(t.getTask(i.id)); if (s.$rendered_at = n.id, !1 !== t.callEvent("onBeforeSplitTaskDisplay", [s.id, s, n.id])) { var l = e(s, r); if (l) { var c = r.getBarHeight(n.id, i.type == t.config.types.milestone) , u = Math.floor((r.getItemHeight(n.id) - c) / 2); return l.style.top = a.top + u + "px", l.classList.add("gantt_split_child"), o && l.classList.add("gantt_split_subproject"), l } } } } function c(t, e) { return t + "_" + e } function u(e, n) { return t.isSplitTask(e) && (n.open_split_tasks && !e.$open || !n.open_split_tasks) && t.hasChild(e.id) } return { render: function(e, i, r, a) { if (u(e, r)) { var o = document.createElement("div") , d = t.getTaskPosition(e); return t.hasChild(e.id) && t.eachTask(function(u) { if (s(u, a, i, r, t)) { var h = l(e, u, i, d); h ? (n[c(u.id, e.id)] = h, o.appendChild(h)) : n[c(u.id, e.id)] = !1 } }, e.id), o } return !1 }, update: function(e, i, r, a, o) { if (u(e, a)) { var d = document.createElement("div") , h = t.getTaskPosition(e); t.eachTask(function(u) { var f = c(u.id, e.id) , _ = s(u, o, r, a, t); if (_ !== !!n[f]) if (_) { var g = l(e, u, r, h); n[f] = g || !1 } else n[f] = !1; n[f] && d.appendChild(n[f]), i.innerHTML = "", i.appendChild(d) }, e.id) } }, isInViewPort: a, getVisibleRange: r } } } , function(t, e, n) { var i = n(19) , r = n(6) , a = n(28); t.exports = function(t) { return { render: a(t), update: null, isInViewPort: i, getVisibleRange: r } } } , function(t, e) { t.exports = function(t) { return function(n, i, r) { "keepDates" == r ? function(e, n) { "duration" == n ? e.end_date = t.calculateEndDate(e) : "end_date" != n && "start_date" != n || (e.duration = t.calculateDuration(e)) }(n, i) : "keepDuration" == r ? function(n, i) { "end_date" == i ? n.start_date = e(n) : "start_date" != i && "duration" != i || (n.end_date = t.calculateEndDate(n)) }(n, i) : function(n, i) { t.config.schedule_from_end ? "end_date" == i || "duration" == i ? n.start_date = e(n) : "start_date" == i && (n.duration = t.calculateDuration(n)) : "start_date" == i || "duration" == i ? n.end_date = t.calculateEndDate(n) : "end_date" == i && (n.duration = t.calculateDuration(n)) }(n, i) } ; function e(e) { return t.calculateEndDate({ start_date: e.end_date, duration: -e.duration, task: e }) } } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0); function r() { return e.apply(this, arguments) || this } function a(e) { return e.formatter || t.ext.formatters.durationFormatter() } return n(3)(r, e), i.mixin(r.prototype, { show: function(t, e, n, i) { var r = "
"); i.innerHTML = r }, set_value: function(t, e, n, i) { this.get_input(i).value = a(n.editor).format(t) }, get_value: function(t, e, n) { return a(e.editor).parse(this.get_input(n).value || "") } }, !0), r } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0); function r() { return e.apply(this, arguments) || this } function a(e) { return e.formatter || t.ext.formatters.linkFormatter() } function o(t, e) { for (var n = (t || "").split(e.delimiter || ","), i = 0; i < n.length; i++) { var r = n[i].trim(); r ? n[i] = r : (n.splice(i, 1), i--) } return n.sort(), n } function s(t, e, n) { for (var i = t.$target, r = [], o = 0; o < i.length; o++) { var s = n.getLink(i[o]); r.push(a(e).format(s)) } return r.join((e.delimiter || ",") + " ") } function l(t) { return t.source + "_" + t.target + "_" + t.type + "_" + (t.lag || 0) } function c(e, n, i) { var r = function(e, n, i) { var r = []; return n.forEach(function(n) { var o = a(i).parse(n); o && (o.target = e, o.id = "predecessor_generated", t.isLinkAllowed(o) && (o.id = void 0, r.push(o))) }), r }(e.id, n, i) , o = {}; e.$target.forEach(function(e) { var n = t.getLink(e); o[l(n)] = n.id }); var s = []; r.forEach(function(t) { var e = l(t); o[e] ? delete o[e] : s.push(t) }); var c = []; for (var u in o) c.push(o[u]); return { add: s, remove: c } } return n(3)(r, e), i.mixin(r.prototype, { show: function(t, e, n, i) { var r = "
"); i.innerHTML = r }, hide: function() {}, set_value: function(e, n, i, r) { this.get_input(r).value = s(e, i.editor, t) }, get_value: function(t, e, n) { return o(this.get_input(n).value || "", e.editor) }, save: function(e, n, i) { var r = c(t.getTask(e), this.get_value(e, n, i), n.editor); (r.add.length || r.remove.length) && t.batchUpdate(function() { r.add.forEach(function(e) { t.addLink(e) }), r.remove.forEach(function(e) { t.deleteLink(e) }), t.autoSchedule && t.autoSchedule() }) }, is_changed: function(e, n, i, r) { var a = this.get_value(n, i, r) , l = o(s(e, i.editor, t), i.editor); return a.join() !== l.join() } }, !0), r } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0) , r = "%Y-%m-%d" , a = null , o = null; function s() { return e.apply(this, arguments) || this } return n(3)(s, e), i.mixin(s.prototype, { show: function(e, n, i, s) { a || (a = t.date.date_to_str(r)), o || (o = t.date.str_to_date(r)); var l = null , c = null; l = "function" == typeof i.min ? i.min(e, n) : i.min, c = "function" == typeof i.max ? i.max(e, n) : i.max; var u = l ? " min='" + a(l) + "' " : "" , d = c ? " max='" + a(c) + "' " : "" , h = "
"); s.innerHTML = h }, set_value: function(t, e, n, i) { t && t.getFullYear ? this.get_input(i).value = a(t) : this.get_input(i).value = t }, is_valid: function(t, e, n, i) { return !(!t || isNaN(t.getTime())) }, get_value: function(t, e, n) { var i; try { i = o(this.get_input(n).value || "") } catch (t) { i = null } return i } }, !0), s } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0); function r() { return e.apply(this, arguments) || this } return n(3)(r, e), i.mixin(r.prototype, { show: function(t, e, n, i) { for (var r = "
", i.innerHTML = r }, get_input: function(t) { return t.querySelector("select") } }, !0), r } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0); function r() { return e.apply(this, arguments) || this } return n(3)(r, e), i.mixin(r.prototype, { show: function(t, e, n, i) { var r = n.min || 0 , a = n.max || 100 , o = "
"); i.innerHTML = o }, get_value: function(t, e, n) { return this.get_input(n).value || "" }, is_valid: function(t, e, n, i) { return !isNaN(parseInt(t, 10)) } }, !0), r } } , function(t, e, n) { t.exports = function(t) { var e = n(10)(t) , i = n(0); function r() { return e.apply(this, arguments) || this } return n(3)(r, e), i.mixin(r.prototype, { show: function(t, e, n, i) { var r = "
"); i.innerHTML = r } }, !0), r } } , function(t, e) { t.exports = { init: function(t, e) { var n = t , i = e.$gantt , r = null , a = i.ext.keyboardNavigation; a.attachEvent("onBeforeFocus", function(e) { var i = t.locateCell(e); if (clearTimeout(r), i) { var a = i.columnName , o = i.id , s = n.getState(); if (n.isVisible() && s.id == o && s.columnName === a) return !1 } return !0 }), a.attachEvent("onFocus", function(e) { var i = t.locateCell(e) , a = t.getState(); return clearTimeout(r), !i || i.id == a.id && i.columnName == a.columnName || n.isVisible() && n.save(), !0 }), t.attachEvent("onHide", function() { clearTimeout(r) }), a.attachEvent("onBlur", function() { return r = setTimeout(function() { n.save() }), !0 }), i.attachEvent("onTaskDblClick", function(e, n) { var i = t.getState() , r = t.locateCell(n.target); return !r || !t.isVisible() || r.columnName != i.columnName }), i.attachEvent("onTaskClick", function(e, n) { if (i._is_icon_open_click(n)) return !0; var r = t.getState() , a = t.locateCell(n.target); return !a || !t.getEditorConfig(a.columnName) || (t.isVisible() && r.id == a.id && r.columnName == a.columnName || t.startEdit(a.id, a.columnName), !1) }), i.attachEvent("onEmptyClick", function() { return n.save(), !0 }), a.attachEvent("onKeyDown", function(e, r) { var o = t.locateCell(r.target) , s = !!o && t.getEditorConfig(o.columnName) , l = t.getState() , c = i.constants.KEY_CODES , u = r.keyCode , d = !1; switch (u) { case c.ENTER: t.isVisible() ? (t.save(), r.preventDefault(), d = !0) : s && !(r.ctrlKey || r.metaKey || r.shiftKey) && (n.startEdit(o.id, o.columnName), r.preventDefault(), d = !0); break; case c.ESC: t.isVisible() && (t.hide(), r.preventDefault(), d = !0); break; case c.UP: case c.DOWN: break; case c.LEFT: case c.RIGHT: (s && t.isVisible() || "date" === l.editorType) && (d = !0); break; case c.SPACE: t.isVisible() && (d = !0), s && !t.isVisible() && (n.startEdit(o.id, o.columnName), r.preventDefault(), d = !0); break; case c.DELETE: s && !t.isVisible() ? (n.startEdit(o.id, o.columnName), d = !0) : s && t.isVisible() && (d = !0); break; case c.TAB: if (t.isVisible()) { r.shiftKey ? t.editPrevCell(!0) : t.editNextCell(!0); var h = t.getState(); h.id && a.focus({ type: "taskCell", id: h.id, column: h.columnName }), r.preventDefault(), d = !0 } break; default: if (t.isVisible()) d = !0; else if (u >= 48 && u <= 57 || u > 95 && u < 112 || u >= 64 && u <= 91 || u > 185 && u < 193 || u > 218 && u < 223) { var f = e.modifiers , _ = f.alt || f.ctrl || f.meta || f.shift; f.alt || _ && a.getCommandHandler(e, "taskCell") || s && !t.isVisible() && (n.startEdit(o.id, o.columnName), d = !0) } } return !d }) }, onShow: function(t, e, n) {}, onHide: function(t, e, n) { n.$gantt.focus() }, destroy: function() {} } } , function(t, e) { t.exports = { init: function(t, e) { var n = e.$gantt; n.attachEvent("onTaskClick", function(e, i) { if (n._is_icon_open_click(i)) return !0; var r = t.getState() , a = t.locateCell(i.target); return !a || !t.getEditorConfig(a.columnName) || (t.isVisible() && r.id == a.id && r.columnName == a.columnName || t.startEdit(a.id, a.columnName), !1) }), n.attachEvent("onEmptyClick", function() { return t.isVisible() && t.isChanged() ? t.save() : t.hide(), !0 }), n.attachEvent("onTaskDblClick", function(e, n) { var i = t.getState() , r = t.locateCell(n.target); return !r || !t.isVisible() || r.columnName != i.columnName }) }, onShow: function(t, e, n) { var i = n.$gantt; i.ext && i.ext.keyboardNavigation && i.ext.keyboardNavigation.attachEvent("onKeyDown", function(e, n) { var r = i.constants.KEY_CODES , a = !1; switch (n.keyCode) { case r.SPACE: t.isVisible() && (a = !0) } return !a }); e.onkeydown = function(e) { e = e || window.event; var n = i.constants.KEY_CODES; if (!(e.defaultPrevented || e.shiftKey && e.keyCode != n.TAB)) { var r = !0; switch (e.keyCode) { case i.keys.edit_save: t.save(); break; case i.keys.edit_cancel: t.hide(); break; case n.UP: case n.DOWN: t.isVisible() && (t.hide(), r = !1); break; case n.TAB: e.shiftKey ? t.editPrevCell(!0) : t.editNextCell(!0); break; default: r = !1 } r && e.preventDefault() } } }, onHide: function() {}, destroy: function() {} } } , function(t, e, n) { var i = n(125) , r = n(124); t.exports = function(t) { var e = null; return { setMapping: function(t) { e = t }, getMapping: function() { return e || (t.config.keyboard_navigation_cells && t.ext.keyboardNavigation ? r : i) } } } } , function(t, e, n) { var i = n(126) , r = n(123) , a = n(122) , o = n(121) , s = n(120) , l = n(119) , c = n(118) , u = n(0) , d = n(1) , h = n(5) , f = n(117); function _(t) { t.config.editor_types = { text: new (r(t)), number: new (a(t)), select: new (o(t)), date: new (s(t)), predecessor: new (l(t)), duration: new (c(t)) } } t.exports = function(t) { var e = i(t) , n = {}; h(n); var r = { init: _, createEditors: function(i) { function r(e, n) { var r = i.$getConfig() , a = function(t, e) { for (var n = i.$getConfig(), r = i.getItemTop(t), a = i.getItemHeight(t), o = i.getGridColumns(), s = 0, l = 0, c = 0, u = 0; u < o.length; u++) { if (o[u].name == e) { c = o[u].width; break } n.rtl ? l += o[u].width : s += o[u].width } return n.rtl ? { top: r, right: l, height: a, width: c } : { top: r, left: s, height: a, width: c } }(e, n) , o = document.createElement("div"); o.className = "gantt_grid_editor_placeholder", o.setAttribute(i.$config.item_attribute, e), o.setAttribute(i.$config.bind + "_id", e), o.setAttribute("data-column-name", n); var s = function(t, e) { for (var n = t.getGridColumns(), i = 0; i < n.length; i++) if (n[i].name == e) return i; return 0 }(i, n); return o.setAttribute("data-column-index", s), t._waiAria.inlineEditorAttr(o), r.rtl ? o.style.cssText = ["top:" + a.top + "px", "right:" + a.right + "px", "width:" + a.width + "px", "height:" + a.height + "px"].join(";") : o.style.cssText = ["top:" + a.top + "px", "left:" + a.left + "px", "width:" + a.width + "px", "height:" + a.height + "px"].join(";"), o } var a = f(t) , o = [] , s = [] , l = null , c = { _itemId: null, _columnName: null, _editor: null, _editorType: null, _placeholder: null, locateCell: function(t) { if (!d.isChildOf(t, i.$grid)) return null; var e = d.locateAttribute(t, i.$config.item_attribute) , n = d.locateAttribute(t, "data-column-name"); if (e && n) { var r = n.getAttribute("data-column-name"); return { id: e.getAttribute(i.$config.item_attribute), columnName: r } } return null }, getEditorConfig: function(t) { return i.getColumn(t).editor }, init: function() { var n = e.getMapping(); n.init && n.init(this, i), l = i.$gantt.getDatastore(i.$config.bind); var r = this; o.push(l.attachEvent("onIdChange", function(t, e) { r._itemId == t && (r._itemId = e) })), o.push(l.attachEvent("onStoreUpdated", function() { i.$gantt.getState("batchUpdate").batch_update || r.isVisible() && !l.isVisible(r._itemId) && r.hide() })), s.push(t.attachEvent("onDataRender", function() { r._editor && r._placeholder && !d.isChildOf(r._placeholder, t.$root) && i.$grid_data.appendChild(r._placeholder) })), this.init = function() {} }, getState: function() { return { editor: this._editor, editorType: this._editorType, placeholder: this._placeholder, id: this._itemId, columnName: this._columnName } }, startEdit: function(e, n) { if (this.isVisible() && this.save(), l.exists(e)) { var i = { id: e, columnName: n }; t.isReadonly(l.getItem(e)) ? this.callEvent("onEditPrevent", [i]) : !1 !== this.callEvent("onBeforeEditStart", [i]) ? (this.show(i.id, i.columnName), this.setValue(), this.callEvent("onEditStart", [i])) : this.callEvent("onEditPrevent", [i]) } }, isVisible: function() { return !(!this._editor || !d.isChildOf(this._placeholder, t.$root)) }, show: function(t, n) { this.isVisible() && this.save(); var a = { id: t, columnName: n } , o = i.getColumn(a.columnName) , s = this.getEditorConfig(o.name); if (s) { var l = i.$getConfig().editor_types[s.type] , c = r(a.id, a.columnName); i.$grid_data.appendChild(c), l.show(a.id, o, s, c), this._editor = l, this._placeholder = c, this._itemId = a.id, this._columnName = a.columnName, this._editorType = s.type; var u = e.getMapping(); u.onShow && u.onShow(this, c, i) } }, setValue: function() { var t = this.getState() , e = t.id , n = t.columnName , r = i.getColumn(n) , a = l.getItem(e) , o = this.getEditorConfig(n); if (o) { var s = a[o.map_to]; "auto" == o.map_to && (s = l.getItem(e)), this._editor.set_value(s, e, r, this._placeholder), this.focus() } }, focus: function() { this._editor.focus(this._placeholder) }, getValue: function() { var t = i.getColumn(this._columnName); return this._editor.get_value(this._itemId, t, this._placeholder) }, _getItemValue: function() { var e = this.getEditorConfig(this._columnName); if (e) { var n = t.getTask(this._itemId)[e.map_to]; return "auto" == e.map_to && (n = l.getItem(this._itemId)), n } }, isChanged: function() { var t = i.getColumn(this._columnName) , e = this._getItemValue(); return this._editor.is_changed(e, this._itemId, t, this._placeholder) }, hide: function() { if (this._itemId) { var t = this._itemId , n = this._columnName , r = e.getMapping(); r.onHide && r.onHide(this, this._placeholder, i), this._itemId = null, this._columnName = null, this._editorType = null, this._placeholder && (this._editor && this._editor.hide && this._editor.hide(this._placeholder), this._editor = null, this._placeholder.parentNode && this._placeholder.parentNode.removeChild(this._placeholder), this._placeholder = null, this.callEvent("onEditEnd", [{ id: t, columnName: n }])) } }, save: function() { if (this.isVisible() && l.exists(this._itemId) && this.isChanged()) { var e = this._itemId , n = this._columnName; if (l.exists(e)) { var r = l.getItem(e) , o = this.getEditorConfig(n) , s = { id: e, columnName: n, newValue: this.getValue(), oldValue: this._getItemValue() }; if (!1 !== this.callEvent("onBeforeSave", [s]) && (!this._editor.is_valid || this._editor.is_valid(s.newValue, s.id, i.getColumn(n), this._placeholder))) { var c = o.map_to , u = s.newValue; "auto" != c ? (r[c] = u, a(r, c, t.config.inline_editors_date_processing), l.updateItem(e)) : this._editor.save(e, i.getColumn(n), this._placeholder), this.callEvent("onSave", [s]) } this.hide() } } else this.hide() }, _findEditableCell: function(t, e) { var n = t , r = i.getGridColumns()[n] , a = r ? r.name : null; if (a) { for (; a && !this.getEditorConfig(a); ) a = this._findEditableCell(t + e, e); return a } return null }, getNextCell: function(t) { return this._findEditableCell(i.getColumnIndex(this._columnName, !0) + t, t) }, getFirstCell: function() { return this._findEditableCell(0, 1) }, getLastCell: function() { return this._findEditableCell(i.getGridColumns().length - 1, -1) }, editNextCell: function(t) { var e = this.getNextCell(1); if (e) { var n = this.getNextCell(1); n && this.getEditorConfig(n) && this.startEdit(this._itemId, n) } else if (t && this.moveRow(1)) { var i = this.moveRow(1); (e = this.getFirstCell()) && this.getEditorConfig(e) && this.startEdit(i, e) } }, editPrevCell: function(t) { var e = this.getNextCell(-1); if (e) { var n = this.getNextCell(-1); n && this.getEditorConfig(n) && this.startEdit(this._itemId, n) } else if (t && this.moveRow(-1)) { var i = this.moveRow(-1); (e = this.getLastCell()) && this.getEditorConfig(e) && this.startEdit(i, e) } }, moveRow: function(e) { for (var n = e > 0 ? t.getNext : t.getPrev, i = (n = t.bind(n, t))(this._itemId); t.isTaskExists(i) && t.isReadonly(t.getTask(i)); ) i = n(i); return i }, editNextRow: function(e) { var n = this.getState().id; if (t.isTaskExists(n)) { var i = null; i = e ? this.moveRow(1) : t.getNext(n), t.isTaskExists(i) && this.startEdit(i, this._columnName) } }, editPrevRow: function(e) { var n = this.getState().id; if (t.isTaskExists(n)) { var i = null; i = e ? this.moveRow(-1) : t.getPrev(n), t.isTaskExists(i) && this.startEdit(i, this._columnName) } }, destructor: function() { o.forEach(function(t) { l.detachEvent(t) }), s.forEach(function(e) { t.detachEvent(e) }), o = [], s = [], l = null, this.hide(), this.detachAllEvents() } }; return u.mixin(c, e), u.mixin(c, n), c } }; return u.mixin(r, e), u.mixin(r, n), r } } , function(t, e) { t.exports = { create: function() { return { render: function() {}, destroy: function() {} } } } } , function(t, e, n) { var i = n(3) , r = n(1) , a = n(0) , o = n(11) , s = function(t) { "use strict"; var e = ["altKey", "shiftKey", "metaKey"]; function n(e, n, i, r) { var o = t.apply(this, arguments) || this; this.$config = a.mixin(n, { scroll: "x" }), o._scrollHorizontalHandler = a.bind(o._scrollHorizontalHandler, o), o._scrollVerticalHandler = a.bind(o._scrollVerticalHandler, o), o._outerScrollVerticalHandler = a.bind(o._outerScrollVerticalHandler, o), o._outerScrollHorizontalHandler = a.bind(o._outerScrollHorizontalHandler, o), o._mouseWheelHandler = a.bind(o._mouseWheelHandler, o), this.$config.hidden = !0; var s = r.config.scroll_size; return r.env.isIE && (s += 1), this._isHorizontal() ? (o.$config.height = s, o.$parent.$config.height = s) : (o.$config.width = s, o.$parent.$config.width = s), this.$config.scrollPosition = 0, o.$name = "scroller", o } return i(n, t), n.prototype.init = function(t) { t.innerHTML = this.$toHTML(), this.$view = t.firstChild, this.$view || this.init(), this._isVertical() ? this._initVertical() : this._initHorizontal(), this._initMouseWheel(), this._initLinkedViews() } , n.prototype.$toHTML = function() { return "
" } , n.prototype._getRootParent = function() { for (var t = this.$parent; t && t.$parent; ) t = t.$parent; if (t) return t } , n.prototype._eachView = function() { var t = []; return function t(e, n) { if (n.push(e), e.$cells) for (var i = 0; i < e.$cells.length; i++) t(e.$cells[i], n) }(this._getRootParent(), t), t } , n.prototype._getLinkedViews = function() { for (var t = this._eachView(), e = [], n = 0; n < t.length; n++) t[n].$config && (this._isVertical() && t[n].$config.scrollY == this.$id || this._isHorizontal() && t[n].$config.scrollX == this.$id) && e.push(t[n]); return e } , n.prototype._initHorizontal = function() { this.$scroll_hor = this.$view, this.$domEvents.attach(this.$view, "scroll", this._scrollHorizontalHandler) } , n.prototype._initLinkedViews = function() { for (var t = this._getLinkedViews(), e = this._isVertical() ? "gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical" : "gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal", n = 0; n < t.length; n++) r.addClassName(t[n].$view || t[n].getNode(), e) } , n.prototype._initVertical = function() { this.$scroll_ver = this.$view, this.$domEvents.attach(this.$view, "scroll", this._scrollVerticalHandler) } , n.prototype._updateLinkedViews = function() {} , n.prototype._initMouseWheel = function() { o.isFF ? this.$domEvents.attach(this._getRootParent().$view, "wheel", this._mouseWheelHandler, { passive: !1 }) : this.$domEvents.attach(this._getRootParent().$view, "mousewheel", this._mouseWheelHandler, { passive: !1 }) } , n.prototype.scrollHorizontally = function(t) { if (!this._scrolling) { this._scrolling = !0, this.$scroll_hor.scrollLeft = t, this.$config.codeScrollLeft = t, t = this.$scroll_hor.scrollLeft; for (var e = this._getLinkedViews(), n = 0; n < e.length; n++) e[n].scrollTo && e[n].scrollTo(t, void 0); var i = this.$config.scrollPosition; this.$config.scrollPosition = t, this.callEvent("onScroll", [i, t, this.$config.scroll]), this._scrolling = !1 } } , n.prototype.scrollVertically = function(t) { if (!this._scrolling) { this._scrolling = !0, this.$scroll_ver.scrollTop = t, t = this.$scroll_ver.scrollTop; for (var e = this._getLinkedViews(), n = 0; n < e.length; n++) e[n].scrollTo && e[n].scrollTo(void 0, t); var i = this.$config.scrollPosition; this.$config.scrollPosition = t, this.callEvent("onScroll", [i, t, this.$config.scroll]), this._scrolling = !1 } } , n.prototype._isVertical = function() { return "y" == this.$config.scroll } , n.prototype._isHorizontal = function() { return "x" == this.$config.scroll } , n.prototype._scrollHorizontalHandler = function(t) { if (!this._isVertical() && !this._scrolling) { if (new Date - (this._wheel_time || 0) < 100) return !0; var e = this.$scroll_hor.scrollLeft; this.scrollHorizontally(e), this._oldLeft = this.$scroll_hor.scrollLeft } } , n.prototype._outerScrollHorizontalHandler = function(t) { this._isVertical() } , n.prototype.show = function() { this.$parent.show() } , n.prototype.hide = function() { this.$parent.hide() } , n.prototype._getScrollSize = function() { for (var t, e = 0, n = 0, i = this._isHorizontal(), r = this._getLinkedViews(), a = i ? "scrollWidth" : "scrollHeight", o = i ? "contentX" : "contentY", s = i ? "x" : "y", l = this._getScrollOffset(), c = 0; c < r.length; c++) if ((t = r[c]) && t.$content && t.$content.getSize && !t.$config.hidden) { var u, d = t.$content.getSize(); if (u = d.hasOwnProperty(a) ? d[a] : d[o], l) d[o] > d[s] && d[o] > e && u > d[s] - l + 2 && (e = u + (i ? 0 : 2), n = d[s]); else { var h = Math.max(d[o] - u, 0); (u += h) > Math.max(d[s] - h, 0) && u > e && (e = u, n = d[s]) } } return { outerScroll: n, innerScroll: e } } , n.prototype.scroll = function(t) { this._isHorizontal() ? this.scrollHorizontally(t) : this.scrollVertically(t) } , n.prototype.getScrollState = function() { return { visible: this.isVisible(), direction: this.$config.scroll, size: this.$config.outerSize, scrollSize: this.$config.scrollSize || 0, position: this.$config.scrollPosition || 0 } } , n.prototype.setSize = function(e, n) { t.prototype.setSize.apply(this, arguments); var i = this._getScrollSize() , r = (this._isVertical() ? n : e) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0); i.innerScroll && r > i.outerScroll && (i.innerScroll += r - i.outerScroll), this.$config.scrollSize = i.innerScroll, this.$config.width = e, this.$config.height = n, this._setScrollSize(i.innerScroll) } , n.prototype.isVisible = function() { return !(!this.$parent || !this.$parent.$view.parentNode) } , n.prototype.shouldShow = function() { var t = this._getScrollSize(); return !(!t.innerScroll && this.$parent && this.$parent.$view.parentNode) && !(!t.innerScroll || this.$parent && this.$parent.$view.parentNode) } , n.prototype.shouldHide = function() { return !(this._getScrollSize().innerScroll || !this.$parent || !this.$parent.$view.parentNode) } , n.prototype.toggleVisibility = function() { this.shouldHide() ? this.hide() : this.shouldShow() && this.show() } , n.prototype._getScaleOffset = function(t) { var e = 0; return !t || "timeline" != t.$config.view && "grid" != t.$config.view || (e = t.$content.$getConfig().scale_height), e } , n.prototype._getScrollOffset = function() { var t = 0; if (this._isVertical()) { var e = this.$parent.$parent; t = Math.max(this._getScaleOffset(e.getPrevSibling(this.$parent.$id)), this._getScaleOffset(e.getNextSibling(this.$parent.$id))) } else for (var n = this._getLinkedViews(), i = 0; i < n.length; i++) { var r = n[i].$parent.$cells , a = r[r.length - 1]; if (a && "scrollbar" == a.$config.view && !1 === a.$config.hidden) { t = a.$config.width; break } } return t || 0 } , n.prototype._setScrollSize = function(t) { var e = this._isHorizontal() ? "width" : "height" , n = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver , i = this._getScrollOffset() , a = n.firstChild; i ? this._isVertical() ? (this.$config.outerSize = this.$config.height - i + 3, n.style.height = this.$config.outerSize + "px", n.style.top = i - 1 + "px", r.addClassName(n, this.$parent._borders.top), r.addClassName(n.parentNode, "gantt_task_vscroll")) : (this.$config.outerSize = this.$config.width - i + 1, n.style.width = this.$config.outerSize + "px") : (n.style.top = "auto", r.removeClassName(n, this.$parent._borders.top), r.removeClassName(n.parentNode, "gantt_task_vscroll"), this.$config.outerSize = this.$config.height), a.style[e] = t + "px" } , n.prototype._scrollVerticalHandler = function(t) { if (!this._scrollHorizontalHandler() && !this._scrolling) { var e = this.$scroll_ver.scrollTop; e != this._oldTop && (this.scrollVertically(e), this._oldTop = this.$scroll_ver.scrollTop) } } , n.prototype._outerScrollVerticalHandler = function(t) { this._scrollHorizontalHandler() } , n.prototype._checkWheelTarget = function(t) { for (var e = this._getLinkedViews().concat(this), n = 0; n < e.length; n++) { var i = e[n].$view; if (r.isChildOf(t, i)) return !0 } return !1 } , n.prototype._mouseWheelHandler = function(t) { var n = t.target || t.srcElement; if (this._checkWheelTarget(n)) { this._wheel_time = new Date; var i = {} , r = { x: 1, y: 1 } , a = this.$gantt.config.wheel_scroll_sensitivity; "number" == typeof a && a ? r = { x: a, y: a } : "[object Object]" == {}.toString.apply(a) && (r = { x: a.x, y: a.y }); var s = o.isFF , l = s ? t.deltaX : t.wheelDeltaX , c = s ? t.deltaY : t.wheelDelta , u = -20; s && (u = 0 !== t.deltaMode ? -40 : -10); var d = s ? l * u * r.x : 2 * l * r.x , h = s ? c * u * r.y : c * r.y , f = this.$gantt.config.horizontal_scroll_key; if (!1 !== f && e.indexOf(f) >= 0 && (!t[f] || t.deltaX || t.wheelDeltaX || (d = 2 * h, h = 0)), d && Math.abs(d) > Math.abs(h)) { if (this._isVertical()) return; if (i.x) return !0; if (!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return !0; var _ = d / -40 , g = this._oldLeft , p = g + 30 * _; if (this.scrollHorizontally(p), this.$scroll_hor.scrollLeft = p, g == this.$scroll_hor.scrollLeft) return !0; this._oldLeft = this.$scroll_hor.scrollLeft } else { if (this._isHorizontal()) return; if (i.y) return !0; if (!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return !0; _ = h / -40; void 0 === h && (_ = t.detail); var v = this._oldTop , m = this.$scroll_ver.scrollTop + 30 * _; if (this.scrollVertically(m), this.$scroll_ver.scrollTop = m, v == this.$scroll_ver.scrollTop) return !0; this._oldTop = this.$scroll_ver.scrollTop } return t.preventDefault && t.preventDefault(), t.cancelBubble = !0, !1 } } , n }(n(14)); t.exports = s } , function(t, e) { t.exports = null } , function(t, e, n) { var i = n(3) , r = n(0) , a = function(t) { "use strict"; function e(e, n, i) { var a = t.apply(this, arguments) || this; if (n.view) { n.id && (this.$id = r.uid()); var o = r.copy(n); if (delete o.config, delete o.templates, this.$content = this.$factory.createView(n.view, this, o, this), !this.$content) return !1 } return a.$name = "viewCell", a } return i(e, t), e.prototype.destructor = function() { this.clear(), t.prototype.destructor.call(this) } , e.prototype.clear = function() { if (this.$initialized = !1, this.$content) { var e = this.$content.unload || this.$content.destructor; e && e.call(this.$content) } t.prototype.clear.call(this) } , e.prototype.scrollTo = function(e, n) { this.$content && this.$content.scrollTo ? this.$content.scrollTo(e, n) : t.prototype.scrollTo.call(this, e, n) } , e.prototype._setContentSize = function(t, e) { var n = this._getBorderSizes(); if ("number" == typeof t) { var i = t + n.horizontal; this.$config.width = i } if ("number" == typeof e) { var r = e + n.vertical; this.$config.height = r } } , e.prototype.setSize = function(e, n) { if (t.prototype.setSize.call(this, e, n), !this.$preResize && this.$content && !this.$initialized) { this.$initialized = !0; var i = this.$view.childNodes[0] , r = this.$view.childNodes[1]; r || (r = i), this.$content.init(r) } } , e.prototype.setContentSize = function() { !this.$preResize && this.$content && this.$initialized && this.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY) } , e.prototype.getContentSize = function() { var e = t.prototype.getContentSize.call(this); if (this.$content && this.$initialized) { var n = this.$content.getSize(); e.width = void 0 === n.contentX ? n.width : n.contentX, e.height = void 0 === n.contentY ? n.height : n.contentY } var i = this._getBorderSizes(); return e.width += i.horizontal, e.height += i.vertical, e } , e }(n(14)); t.exports = a } , function(t, e, n) { var i = n(3) , r = n(38) , a = n(14) , o = function(t) { "use strict"; function e(e, n, i) { for (var r = t.apply(this, arguments) || this, a = 0; a < r.$cells.length; a++) r.$cells[a].$config.hidden = 0 !== a; return r.$cell = r.$cells[0], r.$name = "viewLayout", r } return i(e, t), e.prototype.cell = function(e) { var n = t.prototype.cell.call(this, e); return n.$view || this.$fill(null, this), n } , e.prototype.moveView = function(t) { var e = this.$view; this.$cell && (this.$cell.$config.hidden = !0, e.removeChild(this.$cell.$view)), this.$cell = t, e.appendChild(t.$view) } , e.prototype.setSize = function(t, e) { a.prototype.setSize.call(this, t, e) } , e.prototype.setContentSize = function() { var t = this.$lastSize; this.$cell.setSize(t.contentX, t.contentY) } , e.prototype.getSize = function() { var e = t.prototype.getSize.call(this); if (this.$cell) { var n = this.$cell.getSize(); if (this.$config.byMaxSize) for (var i = 0; i < this.$cells.length; i++) { var r = this.$cells[i].getSize(); for (var a in n) n[a] = Math.max(n[a], r[a]) } for (var o in e) e[o] = e[o] || n[o]; e.gravity = Math.max(e.gravity, n.gravity) } return e } , e }(r); t.exports = o } , function(t, e) { t.exports = function(t, e, n) { if (!t.start_date || !t.end_date) return null; var i = e.posFromDate(t.start_date) , r = e.posFromDate(t.end_date) , a = Math.min(i, r) - 200 , o = Math.max(i, r) + 200; return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: a, width: o - a } } } , function(t, e, n) { var i = n(133); t.exports = function(t, e, n, r) { if (!r.isTaskExists(t.source)) return null; if (!r.isTaskExists(t.target)) return null; var a = i(r.getTask(t.source), e, r) , o = i(r.getTask(t.target), e, r); if (!a || !o) return null; var s = Math.min(a.left, o.left) - 100 , l = Math.max(a.left + a.width, o.left + o.width) + 100 , c = Math.min(a.top, o.top) - 100 , u = Math.max(a.top + a.height, o.top + o.height) + 100; return { top: c, height: u - c, bottom: u, left: s, width: l - s, right: l } } } , function(t, e) { t.exports = function(t, e) { return !!e && (!(e.left > t.x_end || e.left + e.width < t.x) && !(e.top > t.y_end || e.top + e.height < t.y)) } } , function(t, e, n) { var i = n(135) , r = n(20) , a = n(30) , o = n(6); t.exports = function(t) { var e = {} , n = {}; function s(e) { var n = null; return "string" == typeof e.view ? n = t.$ui.getView(e.view) : e.view && (n = e.view), n } function l(l, c, u) { if (n[l]) return n[l]; c.renderer || t.assert(!1, "Invalid renderer call"); var d = null , h = null , f = null , _ = null , g = null; "function" == typeof c.renderer ? (d = c.renderer, f = a) : (d = c.renderer.render, h = c.renderer.update, _ = c.renderer.onrender, c.renderer.isInViewPort ? g = c.renderer.isInViewPort : f = c.renderer.getRectangle, f || null === f || (f = a)); var p = c.filter; return u && u.setAttribute(t.config.layer_attribute, !0), n[l] = { render_item: function(e, n, a, o, l) { if (n = n || u, !p || p(e)) { var h = o || s(c) , v = l || (h ? h.$getConfig() : null) , m = a; !m && v && v.smart_rendering && (m = h.getViewPort()); var y = null; !r(t) && (f || g) && m ? (g ? g(e, m, h, v, t) : i(m, f(e, h, v, t))) && (y = d.call(t, e, h, v, m)) : y = d.call(t, e, h, v, m), this.append(e, y, n); var k = 11 == n.nodeType; _ && !k && y && _.call(t, e, y, h) } else this.remove_item(e.id) }, clear: function(t) { this.rendered = e[l] = {}, c.append || this.clear_container(t) }, clear_container: function(t) { (t = t || u) && (t.innerHTML = "") }, get_visible_range: function(e) { var n, i, r = s(c), a = r ? r.$getConfig() : null; return a && a.smart_rendering && (n = r.getViewPort()), r && n && ("function" == typeof c.renderer ? i = o(t, r, a, e, n) : c.renderer && c.renderer.getVisibleRange && (i = c.renderer.getVisibleRange(t, r, a, e, n))), i || (i = { start: 0, end: e.count() }), i }, prepare_data: function(e) { if (c.renderer && c.renderer.prepareData) return c.renderer.prepareData(e, t, c) }, render_items: function(e, n) { n = n || u; var i = document.createDocumentFragment(); this.clear(n); var r = null , a = s(c) , o = a ? a.$getConfig() : null; o && o.smart_rendering && (r = a.getViewPort()); for (var l = 0, d = e.length; l < d; l++) this.render_item(e[l], i, r, a, o); n.appendChild(i, n); var h = {}; e.forEach(function(t) { h[t.id] = t }); var f = {}; if (_) { var g = {}; for (var l in this.rendered) f[l] || (g[l] = this.rendered[l], _.call(t, h[l], this.rendered[l], a)) } }, update_items: function(e, n) { var a = s(c) , o = a ? a.$getConfig() : null; if (a && a.$getConfig().smart_rendering && !r(t) && this.rendered && (f || g)) { n = n || u; var l = document.createDocumentFragment() , d = null; a && (d = a.getViewPort()); var p = {}; e.forEach(function(t) { p[t.id] = t }); var v = {} , m = {}; for (var y in this.rendered) m[y] = !0, v[y] = !0; for (var k = {}, b = (y = 0, e.length); y < b; y++) { var x = e[y] , w = this.rendered[x.id]; m[x.id] = !1, w && w.parentNode ? (g ? g(x, d, a, o, t) : i(d, f(x, a, o, t))) ? (h && h.call(t, x, w, a, o, d), this.restore(x, l)) : m[x.id] = !0 : (k[e[y].id] = !0, this.render_item(e[y], l, d, a, o)) } for (var y in m) m[y] && this.hide(y); if (l.childNodes.length && n.appendChild(l, n), _) { var S = {}; for (var y in this.rendered) v[y] && !k[y] || (S[y] = this.rendered[y], _.call(t, p[y], this.rendered[y], a)) } } }, append: function(t, e, n) { this.rendered && (e ? (this.rendered[t.id] && this.rendered[t.id].parentNode ? this.replace_item(t.id, e) : n.appendChild(e), this.rendered[t.id] = e) : this.rendered[t.id] && this.remove_item(t.id)) }, replace_item: function(t, e) { var n = this.rendered[t]; n && n.parentNode && n.parentNode.replaceChild(e, n), this.rendered[t] = e }, remove_item: function(t) { this.hide(t), delete this.rendered[t] }, hide: function(t) { var e = this.rendered[t]; e && e.parentNode && e.parentNode.removeChild(e) }, restore: function(t, e) { var n = this.rendered[t.id]; n ? n.parentNode || this.append(t, n, e || u) : this.render_item(t, e || u) }, change_id: function(t, e) { this.rendered[e] = this.rendered[t], delete this.rendered[t] }, rendered: e[l], node: u, destructor: function() { this.clear(), delete n[l], delete e[l] } }, n[l] } return { getRenderer: l, clearRenderers: function() { for (var t in n) l(t).destructor() } } } } , function(t, e, n) { var i = n(136) , r = n(0) , a = n(1) , o = n(20); function s(t) { return t instanceof Array || (t = Array.prototype.slice.call(arguments, 0)), function(e) { for (var n = !0, i = 0, r = t.length; i < r; i++) { var a = t[i]; a && (n = n && !1 !== a(e.id, e)) } return n } } t.exports = function(t) { var e = i(t); return { createGroup: function(n, i, l, c) { var u = { tempCollection: [], renderers: {}, container: n, filters: [], getLayers: function() { this._add(); var t = []; for (var e in this.renderers) t.push(this.renderers[e]); return t }, getLayer: function(t) { return this.renderers[t] }, _add: function(n) { n && (n.id = n.id || r.uid(), this.tempCollection.push(n)); for (var o = this.container(), s = this.tempCollection, l = 0; l < s.length; l++) if (n = s[l], this.container() || n && n.container && a.isChildOf(n.container, document.body)) { var u = n.container , d = n.id , h = n.topmost; if (!u.parentNode) if (h) o.appendChild(u); else { var f = i ? i() : o.firstChild; f && f.parentNode == o ? o.insertBefore(u, f) : o.appendChild(u) } this.renderers[d] = e.getRenderer(d, n, u), c && c(n, t), this.tempCollection.splice(l, 1), l-- } }, addLayer: function(e) { if (e) { "function" == typeof e && (e = { renderer: e }), void 0 === e.filter ? e.filter = s(l || []) : e.filter instanceof Array && (e.filter.push(l), e.filter = s(e.filter)), e.container || (e.container = document.createElement("div")); var n = this; e.requestUpdate = function() { t.config.smart_rendering && !o(t) && n.renderers[e.id] && n.onUpdateRequest(n.renderers[e.id]) } } return this._add(e), e ? e.id : void 0 }, onUpdateRequest: function(t) {}, eachLayer: function(t) { for (var e in this.renderers) t(this.renderers[e]) }, removeLayer: function(t) { this.renderers[t] && (this.renderers[t].destructor(), delete this.renderers[t]) }, clear: function() { for (var t in this.renderers) this.renderers[t].destructor(); this.renderers = {} } }; return t.attachEvent("onDestroy", function() { u.clear(), u = null }), u } } } } , function(t, e, n) { var i = n(137) , r = n(6) , a = n(40) , o = n(39); function s(t, e) { if (t.view) { var n = t.view; "string" == typeof n && (n = e.$ui.getView(n)), n && n.attachEvent && n.attachEvent("onScroll", function() { e.$services.getService("state").getState("batchUpdate").batch_update || n.$config.$skipSmartRenderOnScroll || t.requestUpdate && t.requestUpdate() }) } } t.exports = function(t) { var e = i(t); return { getDataRender: function(e) { return t.$services.getService("layer:" + e) || null }, createDataRender: function(n) { var i = n.name , r = n.defaultContainer , a = n.defaultContainerSibling , o = e.createGroup(r, a, function(t, e) { if (!o.filters) return !0; for (var n = 0; n < o.filters.length; n++) if (!1 === o.filters[n](t, e)) return !1 }, s); return t.$services.setService("layer:" + i, function() { return o }), t.attachEvent("onGanttReady", function() { o.addLayer() }), o }, init: function() { var e = this.createDataRender({ name: "task", defaultContainer: function() { return t.$task_data ? t.$task_data : t.$ui.getView("timeline") ? t.$ui.getView("timeline").$task_data : void 0 }, defaultContainerSibling: function() { return t.$task_links ? t.$task_links : t.$ui.getView("timeline") ? t.$ui.getView("timeline").$task_links : void 0 }, filter: function(t) {} }, t) , n = this.createDataRender({ name: "link", defaultContainer: function() { return t.$task_data ? t.$task_data : t.$ui.getView("timeline") ? t.$ui.getView("timeline").$task_data : void 0 } }, t); return { addTaskLayer: function(t) { var n = r; return "function" == typeof t ? t = { renderer: { render: t, getVisibleRange: n } } : t.renderer && !t.renderer.getVisibleRange && (t.renderer.getVisibleRange = n), t.view = "timeline", e.addLayer(t) }, _getTaskLayers: function() { return e.getLayers() }, removeTaskLayer: function(t) { e.removeLayer(t) }, _clearTaskLayers: function() { e.clear() }, addLinkLayer: function(t) { var e = a(); return "function" == typeof t ? t = { renderer: { render: t, getVisibleRange: e } } : t.renderer && !t.renderer.getVisibleRange && (t.renderer.getVisibleRange = e), t.view = "timeline", t && t.renderer && (t.renderer.getRectangle || t.renderer.isInViewPort || (t.renderer.isInViewPort = o)), n.addLayer(t) }, _getLinkLayers: function() { return n.getLayers() }, removeLinkLayer: function(t) { n.removeLayer(t) }, _clearLinkLayers: function() { n.clear() } } } } } } , function(t, e, n) { var i = function(t) { return function(e) { var n = { click: {}, doubleclick: {}, contextMenu: {} }; function i(t, e, i, r) { n[t][e] || (n[t][e] = []), n[t][e].push({ handler: i, root: r }) } function r(t) { t = t || window.event; var i = e.locate(t) , r = o(t, n.click) , a = !0; if (null !== i ? a = !e.checkEvent("onTaskClick") || e.callEvent("onTaskClick", [i, t]) : e.callEvent("onEmptyClick", [t]), a) { if (!s(r, t, i)) return; switch (t.target.nodeName) { case "SELECT": case "INPUT": return } i && e.getTask(i) && !e._multiselect && e.config.select_task && e.selectTask(i) } } function a(t) { var n = (t = t || window.event).target || t.srcElement , i = e.locate(n) , r = e.locate(n, e.config.link_attribute) , a = !e.checkEvent("onContextMenu") || e.callEvent("onContextMenu", [i, r, t]); return a || (t.preventDefault ? t.preventDefault() : t.returnValue = !1), a } function o(e, n) { for (var i = e.target || e.srcElement, r = []; i; ) { var a = t.getClassName(i); if (a) { a = a.split(" "); for (var o = 0; o < a.length; o++) if (a[o] && n[a[o]]) for (var s = n[a[o]], l = 0; l < s.length; l++) s[l].root && !t.isChildOf(i, s[l].root) || r.push(s[l].handler) } i = i.parentNode } return r } function s(t, n, i) { for (var r = !0, a = 0; a < t.length; a++) { var o = t[a].call(e, n, i, n.target || n.srcElement); r = r && !(void 0 !== o && !0 !== o) } return r } function l(t) { t = t || window.event; var i = e.locate(t) , r = o(t, n.doubleclick) , a = !e.checkEvent("onTaskDblClick") || null === i || e.callEvent("onTaskDblClick", [i, t]); if (a) { if (!s(r, t, i)) return; null !== i && e.getTask(i) && a && e.config.details_on_dblclick && !e.isReadonly(i) && e.showLightbox(i) } } function c(t) { if (e.checkEvent("onMouseMove")) { var n = e.locate(t); e._last_move_event = t, e.callEvent("onMouseMove", [n, t]) } } var u = e._createDomEventScope(); function d(t) { u.detachAll(), t && (u.attach(t, "click", r), u.attach(t, "dblclick", l), u.attach(t, "mousemove", c), u.attach(t, "contextmenu", a)) } return { reset: d, global: function(t, e, n) { i(t, e, n, null) }, delegate: i, detach: function(t, e, i, r) { if (n[t] && n[t][e]) { for (var a = n[t], o = a[e], s = 0; s < o.length; s++) o[s].root == r && (o.splice(s, 1), s--); o.length || delete a[e] } }, callHandler: function(t, e, i, r) { var a = n[t][e]; if (a) for (var o = 0; o < a.length; o++) (i || a[o].root) && a[o].root !== i || a[o].handler.apply(this, r) }, onDoubleClick: l, onMouseMove: c, onContextMenu: a, onClick: r, destructor: function() { d(), n = null, u = null } } } }(n(1)); t.exports = { init: i } } , function(t, e, n) { var i = n(0); function r(t, e) { var n = this.$config[t]; return n ? (n.$extendedConfig || (n.$extendedConfig = !0, Object.setPrototypeOf(n, e)), n) : e } t.exports = function(t, e) { i.mixin(t, function(t) { var e, n; return { $getConfig: function() { return e || (e = t ? t.$getConfig() : this.$gantt.config), this.$config.config ? r.call(this, "config", e) : e }, $getTemplates: function() { return n || (n = t ? t.$getTemplates() : this.$gantt.templates), this.$config.templates ? r.call(this, "templates", n) : n } } }(e)) } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(0) , a = n(140); t.exports = { createFactory: function(t) { var e = {}; var n = {}; function o(o, s, l, c) { var u = e[o]; if (!u || !u.create) return !1; "resizer" != o || l.mode || (c.$config.cols ? l.mode = "x" : l.mode = "y"), "viewcell" != o || "scrollbar" != l.view || l.scroll || (c.$config.cols ? l.scroll = "y" : l.scroll = "x"), (l = r.copy(l)).id || n[l.view] || (l.id = l.view), l.id && !l.css && (l.css = l.id + "_cell"); var d = new u.create(s,l,this,t); return u.configure && u.configure(d), a(d, c), d.$id || (d.$id = l.id || t.uid()), d.$parent || "object" != i(s) || (d.$parent = s), d.$config || (d.$config = l), n[d.$id] && (d.$id = t.uid()), n[d.$id] = d, d } return { initUI: function(t, e) { var n = "cell"; return t.view ? n = "viewcell" : t.resizer ? n = "resizer" : t.rows || t.cols ? n = "layout" : t.views && (n = "multiview"), o.call(this, n, null, t, e) }, reset: function() { n = {} }, registerView: function(t, n, i) { e[t] = { create: n, configure: i } }, createView: o, getView: function(t) { return n[t] } } } } } , function(t, e, n) { var i = n(141) , r = n(139) , a = n(138) , o = n(14) , s = n(38) , l = n(132) , c = n(131) , u = n(130) , d = n(129) , h = n(29) , f = n(32) , _ = n(32) , g = n(29) , p = n(29) , v = n(127) , m = n(116) , y = n(115) , k = n(113) , b = n(112) , x = n(110) , w = n(109) , S = n(108) , T = n(107) , $ = n(106) , C = n(105) , E = n(99) , A = n(96); t.exports = { init: function(t) { function e(e, n) { var i = n(t); i.onCreated && i.onCreated(e), e.attachEvent("onReady", function() { i.onInitialized && i.onInitialized(e) }), e.attachEvent("onDestroy", function() { i.onDestroyed && i.onDestroyed(e) }) } var n = i.createFactory(t); n.registerView("cell", o), n.registerView("resizer", u), n.registerView("scrollbar", d), n.registerView("layout", s, function(t) { "main" === (t.$config ? t.$config.id : null) && e(t, A) }), n.registerView("viewcell", c), n.registerView("multiview", l), n.registerView("timeline", h, function(t) { "timeline" !== (t.$config ? t.$config.id : null) && "task" != t.$config.bind || e(t, E) }), n.registerView("grid", f, function(t) { "grid" !== (t.$config ? t.$config.id : null) && "task" != t.$config.bind || e(t, C) }), n.registerView("resourceGrid", _), n.registerView("resourceTimeline", g), n.registerView("resourceHistogram", p); var D = a(t) , M = v(t); return t.ext.inlineEditors = M, t.ext._inlineEditors = M, M.init(t), { factory: n, mouseEvents: r.init(t), layersApi: D.init(), render: { gridLine: function() { return w(t) }, taskBg: function() { return b(t) }, taskBar: function() { return m(t) }, taskRollupBar: function() { return k(t) }, taskSplitBar: function() { return y(t) }, link: function() { return x(t) }, resourceRow: function() { return S(t) }, resourceHistogram: function() { return T(t) }, gridTaskRowResizer: function() { return $(t) } }, layersService: { getDataRender: function(e) { return D.getDataRender(e, t) }, createDataRender: function(e) { return D.createDataRender(e, t) } } } } } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(0) , a = n(1); t.exports = function(t) { var e = "data-dhxbox" , n = null; function o(t, e) { var i = t.callback; y.hide(t.box), n = t.box = null, i && i(e) } function s(t) { if (n) { var e = t.which || t.keyCode , i = !1; if (k.keyboard) { if (13 == e || 32 == e) { var r = t.target || t.srcElement; a.getClassName(r).indexOf("gantt_popup_button") > -1 && r.click ? r.click() : (o(n, !0), i = !0) } 27 == e && (o(n, !1), i = !0) } return i ? (t.preventDefault && t.preventDefault(), !(t.cancelBubble = !0)) : void 0 } } var l = a.getRootNode(t.$root) || document; function c(t) { c.cover || (c.cover = document.createElement("div"), c.cover.onkeydown = s, c.cover.className = "dhx_modal_cover", document.body.appendChild(c.cover)), c.cover.style.display = t ? "inline-block" : "none" } function u(e, n, i) { return "
" + e + "
" } function d(e) { k.area || (k.area = document.createElement("div"), k.area.className = "gantt_message_area", k.area.style[k.position] = "5px", document.body.appendChild(k.area)), k.hide(e.id); var n = document.createElement("div"); return n.innerHTML = "
" + e.text + "
", n.className = "gantt-info gantt-" + e.type, n.onclick = function() { k.hide(e.id), e = null } , t._waiAria.messageInfoAttr(n), "bottom" == k.position && k.area.firstChild ? k.area.insertBefore(n, k.area.firstChild) : k.area.appendChild(n), e.expire > 0 && (k.timers[e.id] = window.setTimeout(function() { k && k.hide(e.id) }, e.expire)), k.pull[e.id] = n, n = null, e.id } function h() { for (var t = [].slice.apply(arguments, [0]), e = 0; e < t.length; e++) if (t[e]) return t[e] } function f(l, d, f) { var _ = l.tagName ? l : function(s, l, c) { var d = document.createElement("div") , f = r.uid(); t._waiAria.messageModalAttr(d, f), d.className = " gantt_modal_box gantt-" + s.type, d.setAttribute(e, 1); var _ = ""; if (s.width && (d.style.width = s.width), s.height && (d.style.height = s.height), s.title && (_ += '
' + s.title + "
"), _ += '
' + (s.content ? "" : s.text) + '
', l && (_ += u(h(s.ok, t.locale.labels.message_ok, "OK"), "ok", !0)), c && (_ += u(h(s.cancel, t.locale.labels.message_cancel, "Cancel"), "cancel", !1)), s.buttons) for (var g = 0; g < s.buttons.length; g++) { var p = s.buttons[g]; "object" == i(p) ? _ += u(p.label, p.css || "gantt_" + p.label.toLowerCase() + "_button", p.value || g) : _ += u(p, p, g) } if (_ += "
", d.innerHTML = _, s.content) { var v = s.content; "string" == typeof v && (v = document.getElementById(v)), "none" == v.style.display && (v.style.display = ""), d.childNodes[s.title ? 1 : 0].appendChild(v) } return d.onclick = function(t) { var e = t.target || t.srcElement; if (e.className || (e = e.parentNode), a.closest(e, ".gantt_popup_button")) { var n = e.getAttribute("data-result"); o(s, n = "true" == n || "false" != n && n) } } , s.box = d, (l || c) && (n = s), d }(l, d, f); l.hidden || c(!0), document.body.appendChild(_); var g = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - _.offsetWidth) / 2)) , p = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - _.offsetHeight) / 2)); return "top" == l.position ? _.style.top = "-3px" : _.style.top = p + "px", _.style.left = g + "px", _.onkeydown = s, y.focus(_), l.hidden && y.hide(_), t.callEvent("onMessagePopup", [_]), _ } function _(t) { return f(t, !0, !1) } function g(t) { return f(t, !0, !0) } function p(t) { return f(t) } function v(t, e, n) { return "object" != i(t) && ("function" == typeof e && (n = e, e = ""), t = { text: t, type: e, callback: n }), t } function m(t, e, n, a) { return "object" != i(t) && (t = { text: t, type: e, expire: n, id: a }), t.id = t.id || r.uid(), t.expire = t.expire || k.expire, t } t.event(l, "keydown", s, !0); var y = function() { var t = v.apply(this, arguments); return t.type = t.type || "alert", p(t) }; y.hide = function(n) { for (; n && n.getAttribute && !n.getAttribute(e); ) n = n.parentNode; n && (n.parentNode.removeChild(n), c(!1), t.callEvent("onAfterMessagePopup", [n])) } , y.focus = function(t) { setTimeout(function() { var e = a.getFocusableNodes(t); e.length && e[0].focus && e[0].focus() }, 1) } ; var k = function(t, e, n, i) { switch ((t = m.apply(this, arguments)).type = t.type || "info", t.type.split("-")[0]) { case "alert": return _(t); case "confirm": return g(t); case "modalbox": return p(t); default: return d(t) } }; k.seed = (new Date).valueOf(), k.uid = r.uid, k.expire = 4e3, k.keyboard = !0, k.position = "top", k.pull = {}, k.timers = {}, k.hideAll = function() { for (var t in k.pull) k.hide(t) } , k.hide = function(t) { var e = k.pull[t]; e && e.parentNode && (window.setTimeout(function() { e.parentNode.removeChild(e), e = null }, 2e3), e.className += " hidden", k.timers[t] && window.clearTimeout(k.timers[t]), delete k.pull[t]) } ; var b = []; return t.attachEvent("onMessagePopup", function(t) { b.push(t) }), t.attachEvent("onAfterMessagePopup", function(t) { for (var e = 0; e < b.length; e++) b[e] === t && (b.splice(e, 1), e--) }), t.attachEvent("onDestroy", function() { c.cover && c.cover.parentNode && c.cover.parentNode.removeChild(c.cover); for (var t = 0; t < b.length; t++) b[t].parentNode && b[t].parentNode.removeChild(b[t]); b = null, k.area && k.area.parentNode && k.area.parentNode.removeChild(k.area), k = null }), { alert: function() { var t = v.apply(this, arguments); return t.type = t.type || "confirm", _(t) }, confirm: function() { var t = v.apply(this, arguments); return t.type = t.type || "alert", g(t) }, message: k, modalbox: y } } } , function(t, e, n) { t.exports = function(t) { var e = n(0) , i = n(11) , r = n(15); if (!i.isNode) { var a = n(1) , o = n(2); t.utils = { arrayFind: o.arrayFind, dom: a }; var s = n(51)(); t.event = s.attach, t.eventRemove = s.detach, t._eventRemoveAll = s.detachAll, t._createDomEventScope = s.extend, e.mixin(t, n(143)(t)); var l = n(142).init(t); t.$ui = l.factory, t.$ui.layers = l.render, t.$mouseEvents = l.mouseEvents, t.$services.setService("mouseEvents", function() { return t.$mouseEvents }), t.mixin(t, l.layersApi), n(95)(t), t.$services.setService("layers", function() { return l.layersService }); var c = n(94); t.mixin(t, c()), n(93)(t), n(92)(t), n(91)(t), n(90)(t), n(89)(t), n(88)(t), n(87)(t), n(86)(t), n(85)(t), n(80)(t), n(79)(t), n(69)(t), n(68)(t), t.locate = function(t) { var e = a.getTargetNode(t); if (a.closest(e, ".gantt_task_row")) return null; var n = arguments[1] || this.config.task_attribute , i = a.locateAttribute(e, n); return i ? i.getAttribute(n) : null } , t._locate_css = function(t, e, n) { return a.locateClassName(t, e, n) } , t._locateHTML = function(t, e) { return a.locateAttribute(t, e || this.config.task_attribute) } } t.attachEvent("onParse", function() { r(t) || t.attachEvent("onGanttRender", function() { if (t.config.initial_scroll) { var e = t.getTaskByIndex(0) , n = e ? e.id : t.config.root_id; t.isTaskExists(n) && t.$task && t.utils.dom.isChildOf(t.$task, t.$container) && t.showTask(n) } }, { once: !0 }) }), t.attachEvent("onBeforeGanttReady", function() { this.config.scroll_size || (this.config.scroll_size = a.getScrollSize() || 1), r(t) || (this._eventRemoveAll(), this.$mouseEvents.reset(), this.resetLightbox()) }), t.attachEvent("onGanttReady", function() { !r(t) && t.config.rtl && t.$layout.getCellsByType("viewCell").forEach(function(e) { var n = e.$config.scrollX; if (n) { var i = t.$ui.getView(n); i && i.scrollTo(i.$config.scrollSize, 0) } }) }), t.attachEvent("onGanttReady", function() { if (!r(t)) { var e = t.plugins() , n = { auto_scheduling: t.autoSchedule, click_drag: t.ext.clickDrag, critical_path: t.isCriticalTask, drag_timeline: t.ext.dragTimeline, export_api: t.exportToPDF, fullscreen: t.ext.fullscreen, grouping: t.groupBy, keyboard_navigation: t.ext.keyboardNavigation, marker: t.addMarker, multiselect: t.eachSelectedTask, overlay: t.ext.overlay, quick_info: t.templates.quick_info_content, tooltip: t.ext.tooltips, undo: t.undo }; for (var i in n) n[i] && !e[i] && console.warn("You connected the '".concat(i, "' extension via an obsolete file. \nTo fix it, you need to remove the obsolete file and connect the extension via the plugins method: https://docs.dhtmlx.com/gantt/api__gantt_plugins.html")) } }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], month_short: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], day_full: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], day_short: ["Нед", "Пон", "Вів", "Сер", "Чет", "Птн", "Суб"] }, labels: { new_task: "Нове завдання", icon_save: "Зберегти", icon_cancel: "Відміна", icon_details: "Деталі", icon_edit: "Редагувати", icon_delete: "Вилучити", confirm_closing: "", confirm_deleting: "Подія вилучиться назавжди. Ви впевнені?", section_description: "Опис", section_time: "Часовий проміжок", section_type: "Тип", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Відміна", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], month_short: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], day_full: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"], day_short: ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"] }, labels: { new_task: "Yeni görev", icon_save: "Kaydet", icon_cancel: "İptal", icon_details: "Detaylar", icon_edit: "Düzenle", icon_delete: "Sil", confirm_closing: "", confirm_deleting: "Görev silinecek, emin misiniz?", section_description: "Açıklama", section_time: "Zaman Aralığı", section_type: "Tip", column_wbs: "WBS", column_text: "Görev Adı", column_start_date: "Başlangıç", column_duration: "Süre", column_add: "", link: "Bağlantı", confirm_link_deleting: "silinecek", link_start: " (başlangıç)", link_end: " (bitiş)", type_task: "Görev", type_project: "Proje", type_milestone: "Kilometretaşı", minutes: "Dakika", hours: "Saat", days: "Gün", weeks: "Hafta", months: "Ay", years: "Yıl", message_ok: "OK", message_cancel: "Ýptal", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], day_short: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"] }, labels: { new_task: "Ny uppgift", icon_save: "Spara", icon_cancel: "Avbryt", icon_details: "Detajer", icon_edit: "Ändra", icon_delete: "Ta bort", confirm_closing: "", confirm_deleting: "Är du säker på att du vill ta bort händelsen permanent?", section_description: "Beskrivning", section_time: "Tid", section_type: "Typ", column_wbs: "WBS", column_text: "Uppgiftsnamn", column_start_date: "Starttid", column_duration: "Varaktighet", column_add: "", link: "Länk", confirm_link_deleting: "kommer tas bort", link_start: " (start)", link_end: " (slut)", type_task: "Uppgift", type_project: "Projekt", type_milestone: "Milstolpe", minutes: "Minuter", hours: "Timmar", days: "Dagar", weeks: "Veckor", months: "Månader", years: "År", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sept", "Okt", "Nov", "Dec"], day_full: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"], day_short: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"] }, labels: { new_task: "Nová úloha", icon_save: "Uložiť", icon_cancel: "Späť", icon_details: "Detail", icon_edit: "Edituj", icon_delete: "Zmazať", confirm_closing: "Vaše zmeny nebudú uložené. Skutočne?", confirm_deleting: "Udalosť bude natrvalo vymazaná. Skutočne?", section_description: "Poznámky", section_time: "Doba platnosti", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Späť", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"], day_short: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"] }, labels: { new_task: "Nova naloga", icon_save: "Shrani", icon_cancel: "Prekliči", icon_details: "Podrobnosti", icon_edit: "Uredi", icon_delete: "Izbriši", confirm_closing: "", confirm_deleting: "Dogodek bo izbrisan. Želite nadaljevati?", section_description: "Opis", section_time: "Časovni okvir", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Prekliči", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Январь", "Февраль", "Март", "Апрель", "Maй", "Июнь", "Июль", "Август", "Сентябрь", "Oктябрь", "Ноябрь", "Декабрь"], month_short: ["Янв", "Фев", "Maр", "Aпр", "Maй", "Июн", "Июл", "Aвг", "Сен", "Окт", "Ноя", "Дек"], day_full: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], day_short: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"] }, labels: { new_task: "Новое задание", icon_save: "Сохранить", icon_cancel: "Отменить", icon_details: "Детали", icon_edit: "Изменить", icon_delete: "Удалить", confirm_closing: "", confirm_deleting: "Событие будет удалено безвозвратно, продолжить?", section_description: "Описание", section_time: "Период времени", section_type: "Тип", column_wbs: "ИСР", column_text: "Задача", column_start_date: "Начало", column_duration: "Длительность", column_add: "", link: "Связь", confirm_link_deleting: "будет удалена", link_start: " (начало)", link_end: " (конец)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Минута", hours: "Час", days: "День", weeks: "Неделя", months: "Месяц", years: "Год", message_ok: "OK", message_cancel: "Отменить", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "начните вводить слово для фильтрации", resources_filter_label: "спрятать не установленные", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "November", "December"], month_short: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], day_full: ["Duminica", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata"], day_short: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sa"] }, labels: { new_task: "Sarcina noua", icon_save: "Salveaza", icon_cancel: "Anuleaza", icon_details: "Detalii", icon_edit: "Editeaza", icon_delete: "Sterge", confirm_closing: "Schimbarile nu vor fi salvate, esti sigur?", confirm_deleting: "Evenimentul va fi sters permanent, esti sigur?", section_description: "Descriere", section_time: "Interval", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Anuleaza", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], month_short: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], day_full: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], day_short: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"] }, labels: { new_task: "Nova tarefa", icon_save: "Salvar", icon_cancel: "Cancelar", icon_details: "Detalhes", icon_edit: "Editar", icon_delete: "Excluir", confirm_closing: "", confirm_deleting: "As tarefas serão excluidas permanentemente, confirme?", section_description: "Descrição", section_time: "Período", section_type: "Tipo", column_wbs: "EAP", column_text: "Nome tarefa", column_start_date: "Data início", column_duration: "Duração", column_add: "", link: "Link", confirm_link_deleting: "Será excluído!", link_start: " (início)", link_end: " (fim)", type_task: "Task", type_project: "Projeto", type_milestone: "Marco", minutes: "Minutos", hours: "Horas", days: "Dias", weeks: "Semanas", months: "Meses", years: "Anos", message_ok: "OK", message_cancel: "Cancelar", section_constraint: "Restrição", constraint_type: "Tipo Restrição", constraint_date: "Data restrição", asap: "Mais breve possível", alap: "Mais tarde possível", snet: "Não começar antes de", snlt: "Não começar depois de", fnet: "Não terminar antes de", fnlt: "Não terminar depois de", mso: "Precisa começar em", mfo: "Precisa terminar em", resources_filter_placeholder: "Tipo de filtros", resources_filter_label: "Ocultar vazios", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], month_short: ["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"], day_full: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], day_short: ["Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"] }, labels: { new_task: "Nowe zadanie", icon_save: "Zapisz", icon_cancel: "Anuluj", icon_details: "Szczegóły", icon_edit: "Edytuj", icon_delete: "Usuń", confirm_closing: "", confirm_deleting: "Zdarzenie zostanie usunięte na zawsze, kontynuować?", section_description: "Opis", section_time: "Okres czasu", section_type: "Typ", column_wbs: "WBS", column_text: "Nazwa zadania", column_start_date: "Początek", column_duration: "Czas trwania", column_add: "", link: "Link", confirm_link_deleting: "zostanie usunięty", link_start: " (początek)", link_end: " (koniec)", type_task: "Zadanie", type_project: "Projekt", type_milestone: "Milestone", minutes: "Minuty", hours: "Godziny", days: "Dni", weeks: "Tydzień", months: "Miesiące", years: "Lata", message_ok: "OK", message_cancel: "Anuluj", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_short: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"] }, labels: { new_task: "Ny oppgave", icon_save: "Lagre", icon_cancel: "Avbryt", icon_details: "Detaljer", icon_edit: "Endre", icon_delete: "Slett", confirm_closing: "Endringer blir ikke lagret, er du sikker?", confirm_deleting: "Oppføringen vil bli slettet, er du sikker?", section_description: "Beskrivelse", section_time: "Tidsperiode", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"], day_short: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"] }, labels: { new_task: "Nieuwe taak", icon_save: "Opslaan", icon_cancel: "Annuleren", icon_details: "Details", icon_edit: "Bewerken", icon_delete: "Verwijderen", confirm_closing: "", confirm_deleting: "Item zal permanent worden verwijderd, doorgaan?", section_description: "Beschrijving", section_time: "Tijd periode", section_type: "Type", column_wbs: "WBS", column_text: "Taak omschrijving", column_start_date: "Startdatum", column_duration: "Duur", column_add: "", link: "Koppeling", confirm_link_deleting: "zal worden verwijderd", link_start: " (start)", link_end: " (eind)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "minuten", hours: "uren", days: "dagen", weeks: "weken", months: "maanden", years: "jaren", message_ok: "OK", message_cancel: "Annuleren", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_short: ["Søn", "Mon", "Tir", "Ons", "Tor", "Fre", "Lør"] }, labels: { new_task: "Ny oppgave", icon_save: "Lagre", icon_cancel: "Avbryt", icon_details: "Detaljer", icon_edit: "Rediger", icon_delete: "Slett", confirm_closing: "", confirm_deleting: "Hendelsen vil bli slettet permanent. Er du sikker?", section_description: "Beskrivelse", section_time: "Tidsperiode", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Avbryt", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { return function(t) { var e = this; for (var n in this.addLocale = function(t, n) { e._locales[t] = n } , this.getLocale = function(t) { return e._locales[t] } , this._locales = {}, t) this._locales[n] = t[n] } }(); e.default = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], month_short: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], day_full: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], day_short: ["일", "월", "화", "수", "목", "금", "토"] }, labels: { new_task: "이름없는 작업", icon_save: "저장", icon_cancel: "취소", icon_details: "세부 사항", icon_edit: "수정", icon_delete: "삭제", confirm_closing: "", confirm_deleting: "작업을 삭제하시겠습니까?", section_description: "설명", section_time: "기간", section_type: "Type", column_wbs: "WBS", column_text: "작업명", column_start_date: "시작일", column_duration: "기간", column_add: "", link: "전제", confirm_link_deleting: "삭제 하시겠습니까?", link_start: " (start)", link_end: " (end)", type_task: "작업", type_project: "프로젝트", type_milestone: "마일스톤", minutes: "분", hours: "시간", days: "일", weeks: "주", months: "달", years: "년", message_ok: "OK", message_cancel: "취소", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], month_short: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], day_full: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], day_short: ["日", "月", "火", "水", "木", "金", "土"] }, labels: { new_task: "新しい仕事", icon_save: "保存", icon_cancel: "キャンセル", icon_details: "詳細", icon_edit: "編集", icon_delete: "削除", confirm_closing: "", confirm_deleting: "イベント完全に削除されます、宜しいですか?", section_description: "デスクリプション", section_time: "期間", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "キャンセル", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], month_short: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], day_full: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"], day_short: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"] }, labels: { new_task: "Nuovo compito", icon_save: "Salva", icon_cancel: "Chiudi", icon_details: "Dettagli", icon_edit: "Modifica", icon_delete: "Elimina", confirm_closing: "", confirm_deleting: "Sei sicuro di confermare l'eliminazione?", section_description: "Descrizione", section_time: "Periodo di tempo", section_type: "Tipo", column_wbs: "WBS", column_text: "Nome Attività", column_start_date: "Inizio", column_duration: "Durata", column_add: "", link: "Link", confirm_link_deleting: "sarà eliminato", link_start: " (inizio)", link_end: " (fine)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minuti", hours: "Ore", days: "Giorni", weeks: "Settimane", months: "Mesi", years: "Anni", message_ok: "OK", message_cancel: "Chiudi", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], day_full: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], day_short: ["Ming", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"] }, labels: { new_task: "Tugas baru", icon_save: "Simpan", icon_cancel: "Batal", icon_details: "Detail", icon_edit: "Edit", icon_delete: "Hapus", confirm_closing: "", confirm_deleting: "Acara akan dihapus", section_description: "Keterangan", section_time: "Periode", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Batal", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], month_short: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Vasárnap", "Hétfõ", "Kedd", "Szerda", "Csütörtök", "Péntek", "szombat"], day_short: ["Va", "Hé", "Ke", "Sze", "Csü", "Pé", "Szo"] }, labels: { new_task: "Új feladat", icon_save: "Mentés", icon_cancel: "Mégse", icon_details: "Részletek", icon_edit: "Szerkesztés", icon_delete: "Törlés", confirm_closing: "", confirm_deleting: "Az esemény törölve lesz, biztosan folytatja?", section_description: "Leírás", section_time: "Idõszak", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Mégse", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], month_short: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"], day_full: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"], day_short: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"] }, labels: { new_task: "Novi Zadatak", icon_save: "Spremi", icon_cancel: "Odustani", icon_details: "Detalji", icon_edit: "Izmjeni", icon_delete: "Obriši", confirm_closing: "", confirm_deleting: "Zadatak će biti trajno izbrisan, jeste li sigurni?", section_description: "Opis", section_time: "Vremenski Period", section_type: "Tip", column_wbs: "WBS", column_text: "Naziv Zadatka", column_start_date: "Početno Vrijeme", column_duration: "Trajanje", column_add: "", link: "Poveznica", confirm_link_deleting: "će biti izbrisan", link_start: " (početak)", link_end: " (kraj)", type_task: "Zadatak", type_project: "Projekt", type_milestone: "Milestone", minutes: "Minute", hours: "Sati", days: "Dani", weeks: "Tjedni", months: "Mjeseci", years: "Godine", message_ok: "OK", message_cancel: "Odustani", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], month_short: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], day_full: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"], day_short: ["א", "ב", "ג", "ד", "ה", "ו", "ש"] }, labels: { new_task: "משימה חדש", icon_save: "שמור", icon_cancel: "בטל", icon_details: "פרטים", icon_edit: "ערוך", icon_delete: "מחק", confirm_closing: "", confirm_deleting: "ארוע ימחק סופית.להמשיך?", section_description: "הסבר", section_time: "תקופה", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "בטל", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], month_short: ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aoû", "Sep", "Oct", "Nov", "Déc"], day_full: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], day_short: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"] }, labels: { new_task: "Nouvelle tâche", icon_save: "Enregistrer", icon_cancel: "Annuler", icon_details: "Détails", icon_edit: "Modifier", icon_delete: "Effacer", confirm_closing: "", confirm_deleting: "L'événement sera effacé sans appel, êtes-vous sûr ?", section_description: "Description", section_time: "Période", section_type: "Type", column_wbs: "OTP", column_text: "Nom de la tâche", column_start_date: "Date initiale", column_duration: "Durée", column_add: "", link: "Le lien", confirm_link_deleting: "sera supprimé", link_start: "(début)", link_end: "(fin)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Heures", days: "Jours", weeks: "Semaines", months: "Mois", years: "Années", message_ok: "OK", message_cancel: "Annuler", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"], month_short: ["Tam", "Hel", "Maa", "Huh", "Tou", "Kes", "Hei", "Elo", "Syy", "Lok", "Mar", "Jou"], day_full: ["Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"], day_short: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"] }, labels: { new_task: "Uusi tehtävä", icon_save: "Tallenna", icon_cancel: "Peru", icon_details: "Tiedot", icon_edit: "Muokkaa", icon_delete: "Poista", confirm_closing: "", confirm_deleting: "Haluatko varmasti poistaa tapahtuman?", section_description: "Kuvaus", section_time: "Aikajakso", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Peru", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"], month_short: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], day_full: ["يکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"], day_short: ["ی", "د", "س", "چ", "پ", "ج", "ش"] }, labels: { new_task: "وظیفه جدید", icon_save: "ذخیره", icon_cancel: "لغو", icon_details: "جزییات", icon_edit: "ویرایش", icon_delete: "حذف", confirm_closing: "تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟", confirm_deleting: "این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟", section_description: "توضیحات", section_time: "مدت زمان", section_type: "نوع", column_wbs: "WBS", column_text: "عنوان", column_start_date: "زمان شروع", column_duration: "مدت", column_add: "", link: "ارتباط", confirm_link_deleting: "حذف خواهد شد", link_start: " (آغاز)", link_end: " (پایان)", type_task: "وظیفه", type_project: "پروژه", type_milestone: "نگارش", minutes: "دقایق", hours: "ساعات", days: "روزها", weeks: "هفته", months: "ماه‌ها", years: "سال‌ها", message_ok: "تایید", message_cancel: "لغو", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], month_short: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], day_full: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"], day_short: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"] }, labels: { new_task: "Nueva tarea", icon_save: "Guardar", icon_cancel: "Cancelar", icon_details: "Detalles", icon_edit: "Editar", icon_delete: "Eliminar", confirm_closing: "", confirm_deleting: "El evento se borrará definitivamente, ¿continuar?", section_description: "Descripción", section_time: "Período", section_type: "Tipo", column_wbs: "EDT", column_text: "Tarea", column_start_date: "Inicio", column_duration: "Duración", column_add: "", link: "Enlace", confirm_link_deleting: "será borrada", link_start: " (inicio)", link_end: " (fin)", type_task: "Tarea", type_project: "Proyecto", type_milestone: "Hito", minutes: "Minutos", hours: "Horas", days: "Días", weeks: "Semanas", months: "Meses", years: "Años", message_ok: "OK", message_cancel: "Cancelar", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], day_full: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], day_short: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] }, labels: { new_task: "New task", icon_save: "Save", icon_cancel: "Cancel", icon_details: "Details", icon_edit: "Edit", icon_delete: "Delete", confirm_closing: "", confirm_deleting: "Task will be deleted permanently, are you sure?", section_description: "Description", section_time: "Time period", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Cancel", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάϊος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], month_short: ["ΙΑΝ", "ΦΕΒ", "ΜΑΡ", "ΑΠΡ", "ΜΑΙ", "ΙΟΥΝ", "ΙΟΥΛ", "ΑΥΓ", "ΣΕΠ", "ΟΚΤ", "ΝΟΕ", "ΔΕΚ"], day_full: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Κυριακή"], day_short: ["ΚΥ", "ΔΕ", "ΤΡ", "ΤΕ", "ΠΕ", "ΠΑ", "ΣΑ"] }, labels: { new_task: "Νέα εργασία", icon_save: "Αποθήκευση", icon_cancel: "Άκυρο", icon_details: "Λεπτομέρειες", icon_edit: "Επεξεργασία", icon_delete: "Διαγραφή", confirm_closing: "", confirm_deleting: "Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;", section_description: "Περιγραφή", section_time: "Χρονική περίοδος", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Άκυρο", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: [" Januar", " Februar", " März ", " April", " Mai", " Juni", " Juli", " August", " September ", " Oktober", " November ", " Dezember"], month_short: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], day_full: ["Sonntag", "Montag", "Dienstag", " Mittwoch", " Donnerstag", "Freitag", "Samstag"], day_short: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"] }, labels: { new_task: "Neue Aufgabe", icon_save: "Speichern", icon_cancel: "Abbrechen", icon_details: "Details", icon_edit: "Ändern", icon_delete: "Löschen", confirm_closing: "", confirm_deleting: "Der Eintrag wird gelöscht", section_description: "Beschreibung", section_time: "Zeitspanne", section_type: "Type", column_wbs: "PSP", column_text: "Task-Namen", column_start_date: "Startzeit", column_duration: "Dauer", column_add: "", link: "Link", confirm_link_deleting: "werden gelöscht", link_start: "(starten)", link_end: "(ende)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minuten", hours: "Stunden", days: "Tage", weeks: "Wochen", months: "Monate", years: "Jahre", message_ok: "OK", message_cancel: "Abbrechen", section_constraint: "Regel", constraint_type: "Regel", constraint_date: "Regel - Datum", asap: "So bald wie möglich", alap: "So spät wie möglich", snet: "Beginn nicht vor", snlt: "Beginn nicht später als", fnet: "Fertigstellung nicht vor", fnlt: "Fertigstellung nicht später als", mso: "Muss beginnen am", mfo: "Muss fertig sein am", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], day_short: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"] }, labels: { new_task: "Ny opgave", icon_save: "Gem", icon_cancel: "Fortryd", icon_details: "Detaljer", icon_edit: "Tilret", icon_delete: "Slet", confirm_closing: "Dine rettelser vil gå tabt.. Er dy sikker?", confirm_deleting: "Bigivenheden vil blive slettet permanent. Er du sikker?", section_description: "Beskrivelse", section_time: "Tidsperiode", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Fortryd", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], month_short: ["Led", "Ún", "Bře", "Dub", "Kvě", "Čer", "Čec", "Srp", "Září", "Říj", "List", "Pro"], day_full: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"], day_short: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"] }, labels: { new_task: "Nová práce", icon_save: "Uložit", icon_cancel: "Zpět", icon_details: "Detail", icon_edit: "Edituj", icon_delete: "Smazat", confirm_closing: "", confirm_deleting: "Událost bude trvale smazána, opravdu?", section_description: "Poznámky", section_time: "Doba platnosti", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Zpět", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], month_short: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], day_full: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], day_short: ["日", "一", "二", "三", "四", "五", "六"] }, labels: { new_task: "新任務", icon_save: "保存", icon_cancel: "关闭", icon_details: "详细", icon_edit: "编辑", icon_delete: "删除", confirm_closing: "请确认是否撤销修改!", confirm_deleting: "是否删除日程?", section_description: "描述", section_time: "时间范围", section_type: "类型", column_wbs: "工作分解结构", column_text: "任务名", column_start_date: "开始时间", column_duration: "持续时间", column_add: "", link: "关联", confirm_link_deleting: "将被删除", link_start: " (开始)", link_end: " (结束)", type_task: "任务", type_project: "项目", type_milestone: "里程碑", minutes: "分钟", hours: "小时", days: "天", weeks: "周", months: "月", years: "年", message_ok: "OK", message_cancel: "关闭", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], month_short: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], day_full: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"], day_short: ["Dg", "Dl", "Dm", "Dc", "Dj", "Dv", "Ds"] }, labels: { new_task: "Nova tasca", icon_save: "Guardar", icon_cancel: "Cancel·lar", icon_details: "Detalls", icon_edit: "Editar", icon_delete: "Esborrar", confirm_closing: "", confirm_deleting: "L'esdeveniment s'esborrarà definitivament, continuar ?", section_description: "Descripció", section_time: "Periode de temps", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "Cancel·lar", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["Студзень", "Люты", "Сакавік", "Красавік", "Maй", "Чэрвень", "Ліпень", "Жнівень", "Верасень", "Кастрычнік", "Лістапад", "Снежань"], month_short: ["Студз", "Лют", "Сак", "Крас", "Maй", "Чэр", "Ліп", "Жнів", "Вер", "Каст", "Ліст", "Снеж"], day_full: ["Нядзеля", "Панядзелак", "Аўторак", "Серада", "Чацвер", "Пятніца", "Субота"], day_short: ["Нд", "Пн", "Аўт", "Ср", "Чцв", "Пт", "Сб"] }, labels: { new_task: "Новае заданне", icon_save: "Захаваць", icon_cancel: "Адмяніць", icon_details: "Дэталі", icon_edit: "Змяніць", icon_delete: "Выдаліць", confirm_closing: "", confirm_deleting: "Падзея будзе выдалена незваротна, працягнуць?", section_description: "Апісанне", section_time: "Перыяд часу", section_type: "Тып", column_wbs: "ІСР", column_text: "Задача", column_start_date: "Пачатак", column_duration: "Працяг", column_add: "", link: "Сувязь", confirm_link_deleting: "будзе выдалена", link_start: "(пачатак)", link_end: "(канец)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Хвiлiна", hours: "Гадзiна", days: "Дзень", weeks: "Тыдзень", months: "Месяц", years: "Год", message_ok: "OK", message_cancel: "Адмяніць", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); e.default = { date: { month_full: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"], month_short: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], day_full: ["الأحد", "الأثنين", "ألثلاثاء", "الأربعاء", "ألحميس", "ألجمعة", "السبت"], day_short: ["احد", "اثنين", "ثلاثاء", "اربعاء", "خميس", "جمعة", "سبت"] }, labels: { new_task: "مهمة جديد", icon_save: "اخزن", icon_cancel: "الغاء", icon_details: "تفاصيل", icon_edit: "تحرير", icon_delete: "حذف", confirm_closing: "التغييرات سوف تضيع, هل انت متأكد؟", confirm_deleting: "الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟", section_description: "الوصف", section_time: "الفترة الزمنية", section_type: "Type", column_wbs: "WBS", column_text: "Task name", column_start_date: "Start time", column_duration: "Duration", column_add: "", link: "Link", confirm_link_deleting: "will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years", message_ok: "OK", message_cancel: "الغاء", section_constraint: "Constraint", constraint_type: "Constraint type", constraint_date: "Constraint date", asap: "As Soon As Possible", alap: "As Late As Possible", snet: "Start No Earlier Than", snlt: "Start No Later Than", fnet: "Finish No Earlier Than", fnlt: "Finish No Later Than", mso: "Must Start On", mfo: "Must Finish On", resources_filter_placeholder: "type to filter", resources_filter_label: "hide empty", empty_state_text_link: "Click here", empty_state_text_description: "to create your first task" } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(177) , r = n(176) , a = n(175) , o = n(174) , s = n(173) , l = n(172) , c = n(171) , u = n(170) , d = n(169) , h = n(168) , f = n(167) , _ = n(166) , g = n(165) , p = n(164) , v = n(163) , m = n(162) , y = n(161) , k = n(160) , b = n(159) , x = n(158) , w = n(157) , S = n(156) , T = n(155) , $ = n(154) , C = n(153) , E = n(152) , A = n(151) , D = n(150) , M = n(149) , I = n(148) , P = n(147) , N = n(146) , O = n(145); e.default = function() { return new w.default({ en: d.default, ar: i.default, be: r.default, ca: a.default, cn: o.default, cs: s.default, da: l.default, de: c.default, el: u.default, es: h.default, fa: f.default, fi: _.default, fr: g.default, he: p.default, hr: v.default, hu: m.default, id: y.default, it: k.default, jp: b.default, kr: x.default, nb: S.default, nl: T.default, no: $.default, pl: C.default, pt: E.default, ro: A.default, ru: D.default, si: M.default, sk: I.default, sv: P.default, tr: N.default, ua: O.default }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function() {} } , function(t, e) { t.exports = function(t) { t.destructor = function() { for (var t in this.clearAll(), this.callEvent("onDestroy", []), this.$root && delete this.$root.gantt, this._eventRemoveAll && this._eventRemoveAll(), this.$layout && this.$layout.destructor(), this.resetLightbox && this.resetLightbox(), this._dp && this._dp.destructor && this._dp.destructor(), this.$services.destructor(), this.detachAllEvents(), this) 0 === t.indexOf("$") && delete this[t]; this.$destroyed = !0 } } } , function(t, e) { t.exports = function(t) { return function(e, n) { e || t.config.show_errors && !1 !== t.callEvent("onError", [n]) && (t.message ? t.message({ type: "error", text: n, expire: -1 }) : console.log(n)) } } } , function(t, e) { function n(t, e) { var n, i = t.config.container_resize_timeout || 20; if ("timeout" == t.config.container_resize_method) s(); else try { t.event(e, "resize", function() { t.$scrollbarRepaint ? t.$scrollbarRepaint = null : r() }) } catch (t) { s() } function r() { clearTimeout(n), n = setTimeout(function() { t.$destroyed || t.render() }, i) } var a = t.$root.offsetHeight , o = t.$root.offsetWidth; function s() { t.$root.offsetHeight == a && t.$root.offsetWidth == o || r(), a = t.$root.offsetHeight, o = t.$root.offsetWidth, setTimeout(s, i) } } t.exports = function(t) { "static" == window.getComputedStyle(t.$root).getPropertyValue("position") && (t.$root.style.position = "relative"); var e = document.createElement("iframe"); e.className = "gantt_container_resize_watcher", e.tabIndex = -1, t.config.wai_aria_attributes && (e.setAttribute("role", "none"), e.setAttribute("aria-hidden", !0)), (!!window.Sfdc || !!window.$A || window.Aura) && (t.config.container_resize_method = "timeout"), t.$root.appendChild(e), e.contentWindow ? n(t, e.contentWindow) : (t.$root.removeChild(e), n(t, window)) } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(1) , a = n(2) , o = n(15) , s = n(182); t.exports = function(t) { var e = n(46); t.assert = n(181)(t); var l = "Invalid value of the first argument of `gantt.init`. Supported values: HTMLElement, String (element id).This error means that either invalid object is passed into `gantt.init` or that the element with the specified ID doesn't exist on the page when `gantt.init` is called."; function c(e) { if (!e || "string" == typeof e && document.getElementById(e)) return !0; if (function(t) { try { t.cloneNode(!1) } catch (t) { return !1 } return !0 }(e)) return !0; throw t.assert(!1, l), new Error(l) } t.init = function(e, n, i) { t.env.isNode ? e = null : c(e), n && i && (this.config.start_date = this._min_date = new Date(n), this.config.end_date = this._max_date = new Date(i)), this.date.init(), this.init = function(e) { t.env.isNode ? e = null : c(e), this.$container && this.$container.parentNode && (this.$container.parentNode.removeChild(this.$container), this.$container = null), this.$layout && this.$layout.clear(), this._reinit(e) } , this._reinit(e) } , t._quickRefresh = function(t) { for (var e = this._getDatastores.call(this), n = 0; n < e.length; n++) e[n]._quick_refresh = !0; t(); for (n = 0; n < e.length; n++) e[n]._quick_refresh = !1 } ; var u = function() { this._clearTaskLayers && this._clearTaskLayers(), this._clearLinkLayers && this._clearLinkLayers(), this.$layout && (this.$layout.destructor(), this.$layout = null, this.$ui.reset()) } .bind(t) , d = function() { o(t) || (this.$root.innerHTML = "", this.$root.gantt = this, e(this), this.config.layout.id = "main", this.$layout = this.$ui.createView("layout", this.$root, this.config.layout), this.$layout.attachEvent("onBeforeResize", function() { for (var e = t.$services.getService("datastores"), n = 0; n < e.length; n++) t.getDatastore(e[n]).filter(), t.$data.tasksStore._skipTaskRecalculation ? "lightbox" != t.$data.tasksStore._skipTaskRecalculation && (t.$data.tasksStore._skipTaskRecalculation = !1) : t.getDatastore(e[n]).callEvent("onBeforeRefreshAll", []) }), this.$layout.attachEvent("onResize", function() { t._quickRefresh(function() { t.refreshData() }) }), this.callEvent("onGanttLayoutReady", []), this.$layout.render(), this.$container = this.$layout.$container.firstChild, s(this)) } .bind(t); t.resetLayout = function() { u(), d(), this.render() } , t._reinit = function(t) { this.callEvent("onBeforeGanttReady", []), this._update_flags(), this.$services.getService("templateLoader").initTemplates(this), u(), this.$root = null, t && (this.$root = r.toNode(t), d(), this.$mouseEvents.reset(this.$root)), this.callEvent("onTemplatesReady", []), this.callEvent("onGanttReady", []), this.render() } , t.$click = { buttons: { edit: function(e) { t.isReadonly(t.getTask(e)) || t.showLightbox(e) }, delete: function(e) { var n = t.getTask(e); if (!t.isReadonly(n)) { var i = t.locale.labels.confirm_deleting , r = t.locale.labels.confirm_deleting_title; t._simple_confirm(i, r, function() { t.isTaskExists(e) ? (n.$new ? (t.$data.tasksStore._skipTaskRecalculation = "lightbox", t.silent(function() { t.deleteTask(e, !0) }), t.$data.tasksStore._skipTaskRecalculation = !1, t.refreshData()) : (t.$data.tasksStore._skipTaskRecalculation = !0, t.deleteTask(e)), t.hideLightbox()) : t.hideLightbox() }) } } } }, t.render = function() { var n; if (this.callEvent("onBeforeGanttRender", []), !o(t)) { !this.config.sort && this._sort && (this._sort = void 0), this.$root && (this.config.rtl ? (this.$root.classList.add("gantt_rtl"), this.$root.firstChild.classList.add("gantt_rtl")) : (this.$root.classList.remove("gantt_rtl"), this.$root.firstChild.classList.remove("gantt_rtl"))); var i = this.getScrollState() , r = i ? i.x : 0; if (this._getHorizontalScrollbar()) r = this._getHorizontalScrollbar().$config.codeScrollLeft || r || 0; n = null, r && (n = t.dateFromPos(r + this.config.task_scroll_offset)) } if (e(this), o(t)) t.refreshData(); else { this.$layout.$config.autosize = this.config.autosize; var a = this.config.preserve_scroll; if (this.config.preserve_scroll = !1, this.$layout.resize(), this.config.preserve_scroll = a, this.config.preserve_scroll && i) { if (r || i.y) { var s = t.getScrollState(); if (+n != +t.dateFromPos(s.x) || s.y != i.y) { r = null; var l = null; if (n) r = Math.max(t.posFromDate(n) - t.config.task_scroll_offset, 0); i.y && (l = i.y), t.scrollTo(r, l) } } var c = t.$ui.getView("grid"); if (c) { var u = c.$config.scrollY , d = t.$ui.getView(u); if (d) t.utils.dom.isChildOf(d.$view, t.$container) || c.scrollTo(void 0, 0) } } } this.callEvent("onGanttRender", []) } , t.setSizes = t.render, t.getTaskRowNode = function(t) { for (var e = this.$grid_data.childNodes, n = this.config.task_attribute, i = 0; i < e.length; i++) { if (e[i].getAttribute) if (e[i].getAttribute(n) == t) return e[i] } return null } , t.changeLightboxType = function(e) { if (this.getLightboxType() == e) return !0; t._silent_redraw_lightbox(e) } , t._get_link_type = function(e, n) { var i = null; return e && n ? i = t.config.links.start_to_start : !e && n ? i = t.config.links.finish_to_start : e || n ? e && !n && (i = t.config.links.start_to_finish) : i = t.config.links.finish_to_finish, i } , t.isLinkAllowed = function(t, e, n, r) { var a = null; if (!(a = "object" == i(t) ? t : { source: t, target: e, type: this._get_link_type(n, r) })) return !1; if (!(a.source && a.target && a.type)) return !1; if (a.source == a.target) return !1; var o = !0; return this.checkEvent("onLinkValidation") && (o = this.callEvent("onLinkValidation", [a])), o } , t._correct_dst_change = function(e, n, i, r) { var o = a.getSecondsInUnit(r) * i; if (o > 3600 && o < 86400) { var s = e.getTimezoneOffset() - n; s && (e = t.date.add(e, s, "minute")) } return e } , t.isSplitTask = function(e) { return t.assert(e && e instanceof Object, "Invalid argument task=" + e + " of gantt.isSplitTask. Task object was expected"), this.$data.tasksStore._isSplitItem(e) } , t._is_icon_open_click = function(t) { if (!t) return !1; var e = t.target || t.srcElement; if (!e || !e.className) return !1; var n = r.getClassName(e); return -1 !== n.indexOf("gantt_tree_icon") && (-1 !== n.indexOf("gantt_close") || -1 !== n.indexOf("gantt_open")) } } } , function(t, e) { t.exports = function(t) { function e() { return t._cached_functions.update_if_changed(t), t._cached_functions.active || t._cached_functions.activate(), !0 } t._cached_functions = { cache: {}, mode: !1, critical_path_mode: !1, wrap_methods: function(t, e) { if (e._prefetch_originals) for (var n in e._prefetch_originals) e[n] = e._prefetch_originals[n]; e._prefetch_originals = {}; for (n = 0; n < t.length; n++) this.prefetch(t[n], e) }, prefetch: function(t, e) { var n = e[t]; if (n) { var i = this; e._prefetch_originals[t] = n, e[t] = function() { for (var e = new Array(arguments.length), r = 0, a = arguments.length; r < a; r++) e[r] = arguments[r]; if (i.active) { var o = i.get_arguments_hash(Array.prototype.slice.call(e)); i.cache[t] || (i.cache[t] = {}); var s = i.cache[t]; if (i.has_cached_value(s, o)) return i.get_cached_value(s, o); var l = n.apply(this, e); return i.cache_value(s, o, l), l } return n.apply(this, e) } } return n }, cache_value: function(t, e, n) { this.is_date(n) && (n = new Date(n)), t[e] = n }, has_cached_value: function(t, e) { return t.hasOwnProperty(e) }, get_cached_value: function(t, e) { var n = t[e]; return this.is_date(n) && (n = new Date(n)), n }, is_date: function(t) { return t && t.getUTCDate }, get_arguments_hash: function(t) { for (var e = [], n = 0; n < t.length; n++) e.push(this.stringify_argument(t[n])); return "(" + e.join(";") + ")" }, stringify_argument: function(t) { return (t.id ? t.id : this.is_date(t) ? t.valueOf() : t) + "" }, activate: function() { this.clear(), this.active = !0 }, deactivate: function() { this.clear(), this.active = !1 }, clear: function() { this.cache = {} }, setup: function(t) { var e = [] , n = ["_isProjectEnd", "_getProjectEnd", "_getSlack"]; "auto" == this.mode ? t.config.highlight_critical_path && (e = n) : !0 === this.mode && (e = n), this.wrap_methods(e, t) }, update_if_changed: function(t) { (this.critical_path_mode != t.config.highlight_critical_path || this.mode !== t.config.optimize_render) && (this.critical_path_mode = t.config.highlight_critical_path, this.mode = t.config.optimize_render, this.setup(t)) } }, t.attachEvent("onBeforeGanttRender", e), t.attachEvent("onBeforeDataRender", e), t.attachEvent("onBeforeSmartRender", function() { e() }), t.attachEvent("onBeforeParse", e), t.attachEvent("onDataRender", function() { t._cached_functions.deactivate() }); var n = null; t.attachEvent("onSmartRender", function() { n && clearTimeout(n), n = setTimeout(function() { t._cached_functions.deactivate() }, 1e3) }), t.attachEvent("onBeforeGanttReady", function() { return t._cached_functions.update_if_changed(t), !0 }) } } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = function(t) { t.getTaskType = function(e) { var i = e; for (var r in e && "object" == n(e) && (i = e.type), this.config.types) if (this.config.types[r] == i) return i; return t.config.types.task } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function() {} } , function(t, e, n) { var i = n(2); t.exports = function(t) { t.isUnscheduledTask = function(e) { return t.assert(e && e instanceof Object, "Invalid argument task=" + e + " of gantt.isUnscheduledTask. Task object was expected"), !!e.unscheduled || !e.start_date } , t._isAllowedUnscheduledTask = function(e) { return !(!e.unscheduled || !t.config.show_unscheduled) } , t._isTaskInTimelineLimits = function(t) { var e = t.start_date ? t.start_date.valueOf() : null , n = t.end_date ? t.end_date.valueOf() : null; return !!(e && n && e <= this._max_date.valueOf() && n >= this._min_date.valueOf()) } , t.isTaskVisible = function(t) { if (!this.isTaskExists(t)) return !1; var e = this.getTask(t); return !(!this._isAllowedUnscheduledTask(e) && !this._isTaskInTimelineLimits(e)) && !!(this.getGlobalTaskIndex(t) >= 0) } , t._getProjectEnd = function() { if (t.config.project_end) return t.config.project_end; var e = t.getTaskByTime(); return (e = e.sort(function(t, e) { return +t.end_date > +e.end_date ? 1 : -1 })).length ? e[e.length - 1].end_date : null } , t._getProjectStart = function() { if (t.config.project_start) return t.config.project_start; if (t.config.start_date) return t.config.start_date; if (t.getState().min_date) return t.getState().min_date; var e = t.getTaskByTime(); return (e = e.sort(function(t, e) { return +t.start_date > +e.start_date ? 1 : -1 })).length ? e[0].start_date : null } ; var e = function(e, n) { var i = !!(n && n != t.config.root_id && t.isTaskExists(n)) && t.getTask(n) , r = null; if (i) r = t.config.schedule_from_end ? t.calculateEndDate({ start_date: i.end_date, duration: -t.config.duration_step, task: e }) : i.start_date; else if (t.config.schedule_from_end) r = t.calculateEndDate({ start_date: t._getProjectEnd(), duration: -t.config.duration_step, task: e }); else { var a = t.getTaskByIndex(0); r = a ? a.start_date ? a.start_date : a.end_date ? t.calculateEndDate({ start_date: a.end_date, duration: -t.config.duration_step, task: e }) : null : t.config.start_date || t.getState().min_date } return t.assert(r, "Invalid dates"), new Date(r) }; t._set_default_task_timing = function(n) { n.start_date = n.start_date || e(n, t.getParent(n)), n.duration = n.duration || t.config.duration_step, n.end_date = n.end_date || t.calculateEndDate(n) } , t.createTask = function(n, i, r) { (n = n || {}, t.defined(n.id) || (n.id = t.uid()), n.start_date || (n.start_date = e(n, i)), void 0 === n.text && (n.text = t.locale.labels.new_task), void 0 === n.duration && (n.duration = 1), this.isTaskExists(i)) && (this.setParent(n, i, !0), this.getTask(i).$open = !0); if (!this.callEvent("onTaskCreated", [n])) return null; if (this.config.details_on_create) { if (t.isTaskExists(n.id)) t.getTask(n.id).$index != n.$index && (n.start_date && "string" == typeof n.start_date && (n.start_date = this.date.parseDate(n.start_date, "parse_date")), n.end_date && "string" == typeof n.end_date && (n.end_date = this.date.parseDate(n.end_date, "parse_date")), this.$data.tasksStore.updateItem(n.id, n)); else n.$new = !0, this.silent(function() { t.$data.tasksStore.addItem(n, r) }); this.selectTask(n.id), this.refreshData(), this.showLightbox(n.id) } else this.addTask(n, i, r) && (this.showTask(n.id), this.selectTask(n.id)); return n.id } , t._update_flags = function(e, n) { var i = t.$data.tasksStore; void 0 === e ? (this._lightbox_id = null, i.silent(function() { i.unselect() }), this.getSelectedTasks && this._multiselect.reset(), this._tasks_dnd && this._tasks_dnd.drag && (this._tasks_dnd.drag.id = null)) : (this._lightbox_id == e && (this._lightbox_id = n), i.getSelectedId() == e && i.silent(function() { i.unselect(e), i.select(n) }), this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == e && (this._tasks_dnd.drag.id = n)) } ; var n = function(e, n) { var i = t.getTaskType(e.type) , r = { type: i, $no_start: !1, $no_end: !1 }; return n || i != e.$rendered_type ? (i == t.config.types.project ? r.$no_end = r.$no_start = !0 : i != t.config.types.milestone && (r.$no_end = !(e.end_date || e.duration), r.$no_start = !e.start_date, t._isAllowedUnscheduledTask(e) && (r.$no_end = r.$no_start = !1)), r) : (r.$no_start = e.$no_start, r.$no_end = e.$no_end, r) }; function r(e) { e.$effective_calendar = t.getTaskCalendar(e).id, e.start_date = t.getClosestWorkTime({ dir: "future", date: e.start_date, unit: t.config.duration_unit, task: e }), e.end_date = t.calculateEndDate(e) } function a(e) { var n = null , i = null , r = void 0 !== e ? e : t.config.root_id , a = []; return t.eachTask(function(e) { t.getTaskType(e.type) == t.config.types.project || t.isUnscheduledTask(e) || (e.rollup && a.push(e.id), e.start_date && !e.$no_start && (!n || n > e.start_date.valueOf()) && (n = e.start_date.valueOf()), e.end_date && !e.$no_end && (!i || i < e.end_date.valueOf()) && (i = e.end_date.valueOf())) }, r), { start_date: n ? new Date(n) : null, end_date: i ? new Date(i) : null, rollup: a } } t._init_task_timing = function(t) { var e = n(t, !0) , i = t.$rendered_type != e.type , a = e.type; i && (t.$no_start = e.$no_start, t.$no_end = e.$no_end, t.$rendered_type = e.type), i && a != this.config.types.milestone && a == this.config.types.project && (this._set_default_task_timing(t), t.$calculate_duration = !1), a == this.config.types.milestone && (t.end_date = t.start_date), t.start_date && t.end_date && !1 !== t.$calculate_duration && (t.duration = this.calculateDuration(t)), t.$calculate_duration || (t.$calculate_duration = !0), t.end_date || (t.end_date = t.start_date), t.duration = t.duration || 0, 0 === this.config.min_duration && 0 === t.duration && (t.$no_end = !1); var o = this.getTaskCalendar(t); t.$effective_calendar && t.$effective_calendar !== o.id && (r(t), this.config.inherit_calendar && this.isSummaryTask(t) && this.eachTask(function(t) { r(t) }, t.id)), t.$effective_calendar = o.id } , t.isSummaryTask = function(e) { t.assert(e && e instanceof Object, "Invalid argument task=" + e + " of gantt.isSummaryTask. Task object was expected"); var i = n(e); return !(!i.$no_end && !i.$no_start) } , t.resetProjectDates = function(t) { var i = n(t); if (i.$no_end || i.$no_start) { var r = a(t.id); (function(t, n, i, r) { n.$no_start && (t.start_date = i ? new Date(i) : e(t, this.getParent(t))); n.$no_end && (t.end_date = r ? new Date(r) : this.calculateEndDate({ start_date: t.start_date, duration: this.config.duration_step, task: t })); (n.$no_start || n.$no_end) && this._init_task_timing(t) } ).call(this, t, i, r.start_date, r.end_date), t.$rollup = r.rollup } } , t.getSubtaskDuration = function(e) { var n = 0 , i = void 0 !== e ? e : t.config.root_id; return this.eachTask(function(e) { this.getTaskType(e.type) == t.config.types.project || this.isUnscheduledTask(e) || (n += e.duration) }, i), n } , t.getSubtaskDates = function(t) { var e = a(t); return { start_date: e.start_date, end_date: e.end_date } } , t._update_parents = function(e, i, r) { if (e) { var a = this.getTask(e); a.rollup && (r = !0); var o = this.getParent(a) , s = n(a) , l = !0; if (r || a.start_date && a.end_date && (s.$no_start || s.$no_end)) { var c = a.start_date.valueOf() , u = a.end_date.valueOf(); t.resetProjectDates(a), r || c != a.start_date.valueOf() || u != a.end_date.valueOf() || (l = !1), l && !i && this.refreshTask(a.id, !0) } l && o && this.isTaskExists(o) && this._update_parents(o, i, r) } } , t.roundDate = function(e) { var n = t.getScale(); i.isDate(e) && (e = { date: e, unit: n ? n.unit : t.config.duration_unit, step: n ? n.step : t.config.duration_step }); var r, a, o, s = e.date, l = e.step, c = e.unit; if (!n) return s; if (c == n.unit && l == n.step && +s >= +n.min_date && +s <= +n.max_date) o = Math.floor(t.columnIndexByDate(s)), n.trace_x[o] || (o -= 1, n.rtl && (o = 0)), a = new Date(n.trace_x[o]), r = t.date.add(a, l, c); else { for (o = Math.floor(t.columnIndexByDate(s)), r = t.date[c + "_start"](new Date(n.min_date)), n.trace_x[o] && (r = t.date[c + "_start"](n.trace_x[o])); +r < +s; ) { var u = (r = t.date[c + "_start"](t.date.add(r, l, c))).getTimezoneOffset(); r = t._correct_dst_change(r, u, r, c), t.date[c + "_start"] && (r = t.date[c + "_start"](r)) } a = t.date.add(r, -1 * l, c) } return e.dir && "future" == e.dir ? r : e.dir && "past" == e.dir ? a : Math.abs(s - a) < Math.abs(r - s) ? a : r } , t.correctTaskWorkTime = function(e) { t.config.work_time && t.config.correct_work_time && (this.isWorkTime(e.start_date, void 0, e) ? this.isWorkTime(new Date(+e.end_date - 1), void 0, e) || (e.end_date = this.calculateEndDate(e)) : (e.start_date = this.getClosestWorkTime({ date: e.start_date, dir: "future", task: e }), e.end_date = this.calculateEndDate(e))) } , t.attachEvent("onBeforeTaskUpdate", function(e, n) { return t._init_task_timing(n), !0 }), t.attachEvent("onBeforeTaskAdd", function(e, n) { return t._init_task_timing(n), !0 }), t.attachEvent("onAfterTaskMove", function(e, n, i) { return t._init_task_timing(t.getTask(e)), !0 }) } } , function(t, e, n) { var i = n(0); t.exports = { create: function(t, e) { return { getWorkHours: function(t) { return e.getWorkHours(t) }, setWorkTime: function(t) { return e.setWorkTime(t) }, unsetWorkTime: function(t) { e.unsetWorkTime(t) }, isWorkTime: function(t, n, i) { return e.isWorkTime(t, n, i) }, getClosestWorkTime: function(t) { return e.getClosestWorkTime(t) }, calculateDuration: function(t, n, i) { return e.calculateDuration(t, n, i) }, _hasDuration: function(t, n, i) { return e.hasDuration(t, n, i) }, calculateEndDate: function(t, n, i, r) { return e.calculateEndDate(t, n, i, r) }, mergeCalendars: i.bind(t.mergeCalendars, t), createCalendar: i.bind(t.createCalendar, t), addCalendar: i.bind(t.addCalendar, t), getCalendar: i.bind(t.getCalendar, t), getCalendars: i.bind(t.getCalendars, t), getResourceCalendar: i.bind(t.getResourceCalendar, t), getTaskCalendar: i.bind(t.getTaskCalendar, t), deleteCalendar: i.bind(t.deleteCalendar, t) } } } } , function(t, e) { function n(t, e) { this.argumentsHelper = e, this.$gantt = t } n.prototype = { getWorkHours: function() { return [0, 24] }, setWorkTime: function() { return !0 }, unsetWorkTime: function() { return !0 }, isWorkTime: function() { return !0 }, getClosestWorkTime: function(t) { return this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments).date }, calculateDuration: function() { var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments) , e = t.start_date , n = t.end_date , i = t.unit , r = t.step; return this._calculateDuration(e, n, i, r) }, _calculateDuration: function(t, e, n, i) { var r = this.$gantt.date , a = { week: 6048e5, day: 864e5, hour: 36e5, minute: 6e4 } , o = 0; if (a[n]) o = Math.round((e - t) / (i * a[n])); else { for (var s = new Date(t), l = new Date(e); s.valueOf() < l.valueOf(); ) o += 1, s = r.add(s, i, n); s.valueOf() != e.valueOf() && (o += (l - s) / (r.add(s, i, n) - s)) } return Math.round(o) }, hasDuration: function() { var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments) , e = t.start_date , n = t.end_date; return !!t.unit && (e = new Date(e), n = new Date(n), e.valueOf() < n.valueOf()) }, hasWorkTime: function() { return !0 }, equals: function(t) { return t instanceof n }, calculateEndDate: function() { var t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments) , e = t.start_date , n = t.duration , i = t.unit , r = t.step; return this.$gantt.date.add(e, r * n, i) } }, t.exports = n } , function(t, e, n) { var i = n(42) , r = n(189); function a(t) { this.$gantt = t.$gantt, this.argumentsHelper = i(this.$gantt), this.calendarManager = t, this.$disabledCalendar = new r(this.$gantt,this.argumentsHelper) } a.prototype = { _getCalendar: function(t) { var e; if (this.$gantt.config.work_time) { var n = this.calendarManager; t.task ? e = n.getTaskCalendar(t.task) : t.id ? e = n.getTaskCalendar(t) : t.calendar && (e = t.calendar), e || (e = n.getTaskCalendar()) } else e = this.$disabledCalendar; return e }, getWorkHours: function(t) { return t = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments), this._getCalendar(t).getWorkHours(t.date) }, setWorkTime: function(t, e) { return t = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments), e || (e = this.calendarManager.getCalendar()), e.setWorkTime(t) }, unsetWorkTime: function(t, e) { return t = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments), e || (e = this.calendarManager.getCalendar()), e.unsetWorkTime(t) }, isWorkTime: function(t, e, n, i) { var r = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments); return this._getCalendar(r).isWorkTime(r) }, getClosestWorkTime: function(t) { return t = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments), this._getCalendar(t).getClosestWorkTime(t) }, calculateDuration: function() { var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments); return this._getCalendar(t).calculateDuration(t) }, hasDuration: function() { var t = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments); return this._getCalendar(t).hasDuration(t) }, calculateEndDate: function(t) { t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments); return this._getCalendar(t).calculateEndDate(t) } }, t.exports = a } , function(t, e) { t.exports = function() { var t = {}; return { getCalendarIdFromMultipleResources: function(e, n) { var i = function(t) { return t.map(function(t) { return t && t.resource_id ? t.resource_id : t }).sort().join("-") }(e); if (e.length) { if (1 === e.length) return n.getResourceCalendar(i).id; if (t[i]) return t[i].id; var r = function(t, e) { return e.mergeCalendars(t.map(function(t) { var n = t && t.resource_id ? t.resource_id : t; return e.getResourceCalendar(n) })) }(e, n); return t[i] = r, n.addCalendar(r) } return null } } } } , function(t, e) { function n(t) { "@babel/helpers - typeof"; return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = { isLegacyResourceCalendarFormat: function(t) { if (!t) return !1; for (var e in t) if (t[e] && "object" === n(t[e])) return !0; return !1 }, getResourceProperty: function(t) { var e = t.resource_calendars , n = t.resource_property; if (this.isLegacyResourceCalendarFormat(e)) for (var i in t) { n = i; break } return n }, getCalendarIdFromLegacyConfig: function(t, e) { if (e) for (var n in e) { var i = e[n]; if (t[n]) { var r = i[t[n]]; if (r) return r } } return null } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t() { this.clear() } return t.prototype._getCacheObject = function(t, e, n) { var i = this._cache; i[e] || (i[e] = []); var r = i[e]; r || (r = i[e] = {}); var a = r[n]; a || (a = r[n] = {}); var o = t.getFullYear() , s = a[o]; return s || (s = a[o] = { durations: {}, endDates: {} }), s } , t.prototype._endDateCacheKey = function(t, e) { return String(t) + "-" + String(e) } , t.prototype._durationCacheKey = function(t, e) { return String(t) + "-" + String(e) } , t.prototype.getEndDate = function(t, e, n, i, r) { var a, o = this._getCacheObject(t, n, i), s = t.valueOf(), l = this._endDateCacheKey(s, e); if (void 0 === o.endDates[l]) { var c = r() , u = c.valueOf(); o.endDates[l] = u, o.durations[this._durationCacheKey(s, u)] = e, a = c } else a = new Date(o.endDates[l]); return a } , t.prototype.getDuration = function(t, e, n, i, r) { var a, o = this._getCacheObject(t, n, i), s = t.valueOf(), l = e.valueOf(), c = this._durationCacheKey(s, l); if (void 0 === o.durations[c]) { var u = r(); o.durations[c] = u.valueOf(), a = u } else a = o.durations[c]; return a } , t.prototype.clear = function() { this._cache = {} } , t }(); e.DateDurationCache = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { return function(t) { var e = this; this.getMinutesPerWeek = function(t) { var n = t.valueOf(); if (e._weekCache.has(n)) return e._weekCache.get(n); for (var i = e._calendar, r = e._calendar.$gantt, a = 0, o = r.date.week_start(new Date(t)), s = 0; s < 7; s++) a += 60 * i.getHoursPerDay(o), o = r.date.add(o, 1, "day"); return e._weekCache.set(n, a), a } , this.getMinutesPerMonth = function(t) { var n = t.valueOf(); if (e._monthCache.has(n)) return e._monthCache.get(n); for (var i = e._calendar, r = e._calendar.$gantt, a = 0, o = r.date.week_start(new Date(t)), s = r.date.add(o, 1, "month").valueOf(); o.valueOf() < s; ) a += 60 * i.getHoursPerDay(o), o = r.date.add(o, 1, "day"); return e._monthCache.set(n, a), a } , this.clear = function() { e._weekCache = new Map, e._monthCache = new Map } , this.clear(), this._calendar = t } }(); e.LargerUnitsCache = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t() { this.clear() } return t.prototype.getItem = function(t, e, n) { var i = this._cache; if (i && i[t]) { var r = i[t]; if (void 0 === r) return -1; var a = r[n.getFullYear()]; if (a && void 0 !== a[e]) return a[e] } return -1 } , t.prototype.setItem = function(t, e, n, i) { if (t && e) { var r = this._cache; if (r) { r[t] || (r[t] = []); var a = r[t] , o = i.getFullYear() , s = a[o]; s || (s = a[o] = {}), s[e] = n } } } , t.prototype.clear = function() { this._cache = {} } , t }(); e.WorkUnitsObjectCache = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t() { this.clear() } return t.prototype.getItem = function(t, e, n) { if (this._cache.has(t)) { var i = this._cache.get(t)[n.getFullYear()]; if (i && i.has(e)) return i.get(e) } return -1 } , t.prototype.setItem = function(t, e, n, i) { if (t && e) { var r, a = this._cache, o = i.getFullYear(); a.has(t) ? r = a.get(t) : (r = [], a.set(t, r)); var s = r[o]; s || (s = r[o] = new Map), s.set(e, n) } } , t.prototype.clear = function() { this._cache = new Map } , t }(); e.WorkUnitsMapCache = i } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(41).createCacheObject , a = n(41).LargerUnitsCache , o = n(0) , s = n(193).DateDurationCache; function l(t, e) { this.argumentsHelper = e, this.$gantt = t, this._workingUnitsCache = r(), this._largeUnitsCache = new a(this), this._dateDurationCache = new s, this._worktime = null, this._cached_timestamps = {}, this._cached_timestamps_count = 0 } l.prototype = { units: ["year", "month", "week", "day", "hour", "minute"], _clearCaches: function() { this._workingUnitsCache.clear(), this._largeUnitsCache.clear(), this._dateDurationCache.clear() }, _getUnitOrder: function(t) { for (var e = 0, n = this.units.length; e < n; e++) if (this.units[e] == t) return e }, _resetTimestampCache: function() { this._cached_timestamps = {}, this._cached_timestamps_count = 0 }, _timestamp: function(t) { this._cached_timestamps_count > 1e6 && this._resetTimestampCache(); var e = null; if (t.day || 0 === t.day) e = t.day; else if (t.date) { var n = String(t.date.valueOf()); this._cached_timestamps[n] ? e = this._cached_timestamps[n] : (e = Date.UTC(t.date.getFullYear(), t.date.getMonth(), t.date.getDate()), this._cached_timestamps[n] = e, this._cached_timestamps_count++) } return e }, _checkIfWorkingUnit: function(t, e) { if (!this["_is_work_" + e]) { var n = this.$gantt.date["".concat(e, "_start")](new Date(t)) , i = this.$gantt.date.add(n, 1, e); return this.hasDuration(n, i) } return this["_is_work_" + e](t) }, _is_work_day: function(t) { var e = this._getWorkHours(t); return !!Array.isArray(e) && e.length > 0 }, _is_work_hour: function(t) { for (var e = this._getWorkHours(t), n = t.getHours(), i = 0; i < e.length; i++) if (n >= e[i].startHour && n < e[i].endHour) return !0; return !1 }, _getTimeOfDayStamp: function(t, e) { var n = t.getHours(); return t.getHours() || t.getMinutes() || !e || (n = 24), 60 * n * 60 + 60 * t.getMinutes() }, _is_work_minute: function(t) { for (var e = this._getWorkHours(t), n = this._getTimeOfDayStamp(t), i = 0; i < e.length; i++) if (n >= e[i].start && n < e[i].end) return !0; return !1 }, _nextDate: function(t, e, n) { return this.$gantt.date.add(t, n, e) }, _getWorkUnitsBetweenGeneric: function(t, e, n, i) { var r = this.$gantt.date , a = new Date(t) , o = new Date(e); i = i || 1; var s, l, c = 0, u = null, d = !1; (s = r[n + "_start"](new Date(a))).valueOf() != a.valueOf() && (d = !0); var h = !1; (l = r[n + "_start"](new Date(e))).valueOf() != e.valueOf() && (h = !0); for (var f = !1; a.valueOf() < o.valueOf(); ) { if (f = (u = this._nextDate(a, n, i)).valueOf() > o.valueOf(), this._isWorkTime(a, n)) (d || h && f) && (s = r[n + "_start"](new Date(a)), l = r.add(s, i, n)), d ? (d = !1, u = this._nextDate(s, n, i), c += (l.valueOf() - a.valueOf()) / (l.valueOf() - s.valueOf())) : h && f ? (h = !1, c += (o.valueOf() - a.valueOf()) / (l.valueOf() - s.valueOf())) : c++; else { var _ = this._getUnitOrder(n) , g = this.units[_ - 1]; g && !this._isWorkTime(a, g) && (u = this._getClosestWorkTimeFuture(a, g)) } a = u } return c }, _getMinutesPerHour: function(t) { var e = this._getTimeOfDayStamp(t) , n = this._getTimeOfDayStamp(this._nextDate(t, "hour", 1)); 0 === n && (n = 86400); for (var i = this._getWorkHours(t), r = 0; r < i.length; r++) { var a = i[r]; if (e >= a.start && n <= a.end) return 60; if (e < a.end && n > a.start) return (Math.min(n, a.end) - Math.max(e, a.start)) / 60 } return 0 }, _getMinutesPerDay: function(t) { var e = 0; return this._getWorkHours(t).forEach(function(t) { e += t.durationMinutes }), e }, getHoursPerDay: function(t) { var e = 0; return this._getWorkHours(t).forEach(function(t) { e += t.durationHours }), e }, _getWorkUnitsForRange: function(t, e, n, i) { var r, a = 0, s = new Date(t), l = new Date(e); for (r = "minute" == n ? o.bind(this._getMinutesPerDay, this) : o.bind(this.getHoursPerDay, this); s.valueOf() < l.valueOf(); ) if (l - s > 27648e5 && 0 === s.getDate()) { var c = this._largeUnitsCache.getMinutesPerMonth(s); "hour" == n && (c /= 60), a += c, s = this.$gantt.date.add(s, 1, "month") } else { if (l - s > 13824e5) { var u = this.$gantt.date.week_start(new Date(s)); if (s.valueOf() === u.valueOf()) { c = this._largeUnitsCache.getMinutesPerWeek(s); "hour" == n && (c /= 60), a += c, s = this.$gantt.date.add(s, 7, "day"); continue } } a += r(s), s = this._nextDate(s, "day", 1) } return a / i }, _getMinutesBetweenSingleDay: function(t, e) { for (var n = this._getIntervalTimestamp(t, e), i = this._getWorkHours(t), r = 0, a = 0; a < i.length; a++) { var o = i[a]; if (n.end >= o.start && n.start <= o.end) { var s = Math.max(o.start, n.start) , l = Math.min(o.end, n.end); r += (l - s) / 60, n.start = l } } return Math.floor(r) }, _getMinutesBetween: function(t, e, n, i) { var r = new Date(t) , a = new Date(e); i = i || 1; var o = new Date(r) , s = this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)), 1, "day"); if (a.valueOf() <= s.valueOf()) return this._getMinutesBetweenSingleDay(t, e); var l = this.$gantt.date.day_start(new Date(a)) , c = a , u = this._getMinutesBetweenSingleDay(o, s) , d = this._getMinutesBetweenSingleDay(l, c); return u + this._getWorkUnitsForRange(s, l, n, i) + d }, _getHoursBetween: function(t, e, n, i) { var r = new Date(t) , a = new Date(e); i = i || 1; var o = new Date(r) , s = this.$gantt.date.add(this.$gantt.date.day_start(new Date(r)), 1, "day"); if (a.valueOf() <= s.valueOf()) return Math.round(this._getMinutesBetweenSingleDay(t, e) / 60); var l = this.$gantt.date.day_start(new Date(a)) , c = a , u = this._getMinutesBetweenSingleDay(o, s, n, i) / 60 , d = this._getMinutesBetweenSingleDay(l, c, n, i) / 60 , h = u + this._getWorkUnitsForRange(s, l, n, i) + d; return Math.round(h) }, getConfig: function() { return this._worktime }, _setConfig: function(t) { this._worktime = t, this._parseSettings(), this._clearCaches() }, _parseSettings: function() { var t = this.getConfig(); for (var e in t.parsed = { dates: {}, hours: null, haveCustomWeeks: !1, customWeeks: {}, customWeeksRangeStart: null, customWeeksRangeEnd: null, customWeeksBoundaries: [] }, t.parsed.hours = this._parseHours(t.hours), t.dates) t.parsed.dates[e] = this._parseHours(t.dates[e]); if (t.customWeeks) { var n = null , i = null; for (var e in t.customWeeks) { var r = t.customWeeks[e]; if (r.from && r.to) { var a = r.from , o = r.to; (!n || n > a.valueOf()) && (n = a.valueOf()), (!i || i < o.valueOf()) && (i = o.valueOf()), t.parsed.customWeeksBoundaries.push({ from: a.valueOf(), fromReadable: new Date(a), to: o.valueOf(), toReadable: new Date(o), name: e }), t.parsed.haveCustomWeeks = !0; var s = t.parsed.customWeeks[e] = { from: r.from, to: r.to, hours: this._parseHours(r.hours), dates: {} }; for (var l in r.dates) s.dates[l] = this._parseHours(r.dates[l]) } } t.parsed.customWeeksRangeStart = n, t.parsed.customWeeksRangeEnd = i } }, _tryChangeCalendarSettings: function(t) { var e = JSON.stringify(this.getConfig()); return t(), !!this.hasWorkTime() || (this._setConfig(JSON.parse(e)), this._clearCaches(), !1) }, _arraysEqual: function(t, e) { if (t === e) return !0; if (!t || !e) return !1; if (t.length != e.length) return !1; for (var n = 0; n < t.length; ++n) if (t[n] !== e[n]) return !1; return !0 }, _compareSettings: function(t, e) { if (!this._arraysEqual(t.hours, e.hours)) return !1; var n = Object.keys(t.dates) , i = Object.keys(e.dates); if (n.sort(), i.sort(), !this._arraysEqual(n, i)) return !1; for (var r = 0; r < n.length; r++) { var a = n[r] , o = t.dates[a] , s = t.dates[a]; if (o !== s && !(Array.isArray(o) && Array.isArray(s) && this._arraysEqual(o, s))) return !1 } return !0 }, equals: function(t) { if (!(t instanceof l)) return !1; var e = this.getConfig() , n = t.getConfig(); if (!this._compareSettings(e, n)) return !1; if (e.parsed.haveCustomWeeks && n.parsed.haveCustomWeeks) { if (e.parsed.customWeeksBoundaries.length != n.parsed.customWeeksBoundaries.length) return !1; for (var i in e.parsed.customWeeks) { var r = e.parsed.customWeeks[i] , a = n.parsed.customWeeks[i]; if (!a) return !1; if (!this._compareSettings(r, a)) return !1 } } else if (e.parse.haveCustomWeeks !== n.parsed.haveCustomWeeks) return !1; return !0 }, getWorkHours: function() { var t = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments); return this._getWorkHours(t.date, !1) }, _getWorkHours: function(t, e) { var n = this.getConfig(); if (!1 !== e && (n = n.parsed), !t) return n.hours; var i = this._timestamp({ date: t }); if (n.haveCustomWeeks && n.customWeeksRangeStart <= i && n.customWeeksRangeEnd > i) for (var r = 0; r < n.customWeeksBoundaries.length; r++) if (n.customWeeksBoundaries[r].from <= i && n.customWeeksBoundaries[r].to > i) { n = n.customWeeks[n.customWeeksBoundaries[r].name]; break } var a = !0; return void 0 !== n.dates[i] ? a = n.dates[i] : void 0 !== n.dates[t.getDay()] && (a = n.dates[t.getDay()]), !0 === a ? n.hours : a || [] }, _getIntervalTimestamp: function(t, e) { var n = { start: 0, end: 0 }; n.start = 60 * t.getHours() * 60 + 60 * t.getMinutes() + t.getSeconds(); var i = e.getHours(); return !i && !e.getMinutes() && !e.getSeconds() && t.valueOf() < e.valueOf() && (i = 24), n.end = 60 * i * 60 + 60 * e.getMinutes() + e.getSeconds(), n }, _parseHours: function(t) { if (Array.isArray(t)) { var e = []; t.forEach(function(t) { "number" == typeof t ? e.push(60 * t * 60) : "string" == typeof t && t.split("-").map(function(t) { return t.trim() }).forEach(function(t) { var n = t.split(":").map(function(t) { return t.trim() }) , i = parseInt(60 * n[0] * 60); n[1] && (i += parseInt(60 * n[1])), n[2] && (i += parseInt(n[2])), e.push(i) }) }); for (var n = [], i = 0; i < e.length; i += 2) { var r = e[i] , a = e[i + 1] , o = a - r; n.push({ start: r, end: a, startHour: Math.floor(r / 3600), startMinute: Math.floor(r / 60), endHour: Math.ceil(a / 3600), endMinute: Math.ceil(a / 60), durationSeconds: o, durationMinutes: o / 60, durationHours: o / 3600 }) } return n } return t }, setWorkTime: function(t) { return this._tryChangeCalendarSettings(o.bind(function() { var e = void 0 === t.hours || t.hours , n = this._timestamp(t) , r = this.getConfig(); if (null !== n ? r.dates[n] = e : t.customWeeks || (r.hours = e), t.customWeeks) if (r.customWeeks || (r.customWeeks = {}), "string" == typeof t.customWeeks) null !== n ? r.customWeeks[t.customWeeks].dates[n] = e : t.customWeeks || (r.customWeeks[t.customWeeks].hours = e); else if ("object" === i(t.customWeeks) && "function Object() { [native code] }" === Function.prototype.toString.call(t.customWeeks.constructor)) for (var a in t.customWeeks) r.customWeeks[a] = t.customWeeks[a]; this._parseSettings(), this._clearCaches() }, this)) }, unsetWorkTime: function(t) { return this._tryChangeCalendarSettings(o.bind(function() { if (t) { var e = this._timestamp(t); null !== e && delete this.getConfig().dates[e] } else this.reset_calendar(); this._parseSettings(), this._clearCaches() }, this)) }, _isWorkTime: function(t, e) { var n = -1 , i = null; return i = String(t.valueOf()), -1 == (n = this._workingUnitsCache.getItem(e, i, t)) && (n = this._checkIfWorkingUnit(t, e), this._workingUnitsCache.setItem(e, i, n, t)), n }, isWorkTime: function() { var t = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments); return this._isWorkTime(t.date, t.unit) }, calculateDuration: function() { var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments); if (!t.unit) return !1; var e = this; return this._dateDurationCache.getDuration(t.start_date, t.end_date, t.unit, t.step, function() { return e._calculateDuration(t.start_date, t.end_date, t.unit, t.step) }) }, _calculateDuration: function(t, e, n, i) { var r = 0 , a = 1; if (t.valueOf() > e.valueOf()) { var o = e; e = t, t = o, a = -1 } return r = "hour" == n && 1 == i ? this._getHoursBetween(t, e, n, i) : "minute" == n && 1 == i ? this._getMinutesBetween(t, e, n, i) : this._getWorkUnitsBetweenGeneric(t, e, n, i), a * Math.round(r) }, hasDuration: function() { var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments) , e = t.start_date , n = t.end_date , i = t.unit , r = t.step; if (!i) return !1; var a = new Date(e) , o = new Date(n); for (r = r || 1; a.valueOf() < o.valueOf(); ) { if (this._isWorkTime(a, i)) return !0; a = this._nextDate(a, i, r) } return !1 }, calculateEndDate: function() { var t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments) , e = t.start_date , n = t.duration , i = t.unit , r = t.step; if (!i) return !1; var a = t.duration >= 0 ? 1 : -1; n = Math.abs(1 * n); var o = this; return this._dateDurationCache.getEndDate(e, n, i, r * a, function() { return o._calculateEndDate(e, n, i, r * a) }) }, _calculateEndDate: function(t, e, n, i) { return !!n && (1 == i && "minute" == n ? this._calculateMinuteEndDate(t, e, i) : -1 == i && "minute" == n ? this._subtractMinuteDate(t, e, i) : 1 == i && "hour" == n ? this._calculateHourEndDate(t, e, i) : this._addInterval(t, e, n, i, null).end) }, _addInterval: function(t, e, n, i, r) { for (var a = 0, o = t, s = !1; a < e && (!r || !r(o)); ) { var l = this._nextDate(o, n, i); "day" == n && (s = s || !o.getHours() && l.getHours()) && (l.setHours(0), l.getHours() || (s = !1)); var c = new Date(l.valueOf() + 1); i > 0 && (c = new Date(l.valueOf() - 1)), this._isWorkTime(c, n) && !s && a++, o = l } return { end: o, start: t, added: a } }, _addHoursUntilDayEnd: function(t, e) { for (var n = this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)), 1, "day"), i = 0, r = e, a = this._getIntervalTimestamp(t, n), o = this._getWorkHours(t), s = 0; s < o.length && i < e; s++) { var l = o[s]; if (a.end >= l.start && a.start <= l.end) { var c = Math.max(l.start, a.start) , u = Math.min(l.end, a.end) , d = (u - c) / 3600; d > r && (d = r, u = c + 60 * r * 60); var h = Math.round((u - c) / 3600); i += h, r -= h, a.start = u } } var f = n; return i === e && (f = new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,a.start)), { added: i, end: f } }, _calculateHourEndDate: function(t, e, n) { var i = new Date(t) , r = 0; n = n || 1, e = Math.abs(1 * e); var a = this._addHoursUntilDayEnd(i, e); if (r = a.added, i = a.end, c = e - r) { for (var o = i; r < e; ) { var s = this._nextDate(o, "day", n); s.setHours(0), s.setMinutes(0), s.setSeconds(0); var l = 0; if (r + (l = n > 0 ? this.getHoursPerDay(new Date(s.valueOf() - 1)) : this.getHoursPerDay(new Date(s.valueOf() + 1))) >= e) break; r += l, o = s } i = o } if (r < e) { var c = e - r; i = (a = this._addHoursUntilDayEnd(i, c)).end } return i }, _addMinutesUntilHourEnd: function(t, e) { if (0 === t.getMinutes()) return { added: 0, end: new Date(t) }; for (var n = this.$gantt.date.add(this.$gantt.date.hour_start(new Date(t)), 1, "hour"), i = 0, r = e, a = this._getIntervalTimestamp(t, n), o = this._getWorkHours(t), s = 0; s < o.length && i < e; s++) { var l = o[s]; if (a.end >= l.start && a.start <= l.end) { var c = Math.max(l.start, a.start) , u = Math.min(l.end, a.end) , d = (u - c) / 60; d > r && (d = r, u = c + 60 * r); var h = Math.round((u - c) / 60); r -= h, i += h, a.start = u } } var f = n; return i === e && (f = new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,a.start)), { added: i, end: f } }, _subtractMinutesUntilHourStart: function(t, e) { for (var n = this.$gantt.date.hour_start(new Date(t)), i = 0, r = e, a = 60 * n.getHours() * 60 + 60 * n.getMinutes() + n.getSeconds(), o = 60 * t.getHours() * 60 + 60 * t.getMinutes() + t.getSeconds(), s = this._getWorkHours(t), l = s.length - 1; l >= 0 && i < e; l--) { var c = s[l]; if (o > c.start && a <= c.end) { var u = Math.min(o, c.end) , d = Math.max(a, c.start) , h = (u - d) / 60; h > r && (h = r, d = u - 60 * r); var f = Math.abs(Math.round((u - d) / 60)); r -= f, i += f, o = d } } var _ = n; return i === e && (_ = new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,o)), { added: i, end: _ } }, _subtractMinuteDate: function(t, e, n) { var i = new Date(t) , r = 0; n = n || -1, e = Math.abs(1 * e), e = Math.round(e); var a = this._isMinutePrecision(i) , o = this._subtractMinutesUntilHourStart(i, e); r += o.added, i = o.end; for (var s = 0, l = [], c = 0; r < e; ) { var u = this.$gantt.date.day_start(new Date(i)) , d = !1; i.valueOf() === u.valueOf() && (u = this.$gantt.date.add(u, -1, "day"), d = !0); var h = new Date(u.getFullYear(),u.getMonth(),u.getDate(),23,59,59,999).valueOf(); h !== s && (l = this._getWorkHours(u), c = this._getMinutesPerDay(u), s = h); var f = e - r , _ = this._getTimeOfDayStamp(i, d); if (l.length && c) if (l[l.length - 1].end <= _ && f > c) r += c, i = this.$gantt.date.add(i, -1, "day"); else { for (var g = !1, p = null, v = null, m = l.length - 1; m >= 0; m--) if (l[m].start < _ - 1 && l[m].end >= _ - 1) { g = !0, p = l[m], v = l[m - 1]; break } if (g) if (_ === p.end && f >= p.durationMinutes) r += p.durationMinutes, i = this.$gantt.date.add(i, -p.durationMinutes, "minute"); else if (!a && f <= _ / 60 - p.startMinute) r += f, i = this.$gantt.date.add(i, -f, "minute"); else if (a) f <= _ / 60 - p.startMinute ? (r += f, i = this.$gantt.date.add(i, -f, "minute")) : (r += _ / 60 - p.startMinute, i = v ? new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,v.end) : this.$gantt.date.day_start(i)); else { var y = this._getMinutesPerHour(i); y <= f ? (r += y, i = this._nextDate(i, "hour", n)) : (r += (o = this._subtractMinutesUntilHourStart(i, f)).added, i = o.end) } else if (0 === i.getHours() && 0 === i.getMinutes() && 0 === i.getSeconds()) { if ((k = this._getClosestWorkTimePast(i, "hour")).valueOf() === i.valueOf()) { var k = this.$gantt.date.add(i, -1, "day") , b = this._getWorkHours(k); if (b.length) { var x = b[b.length - 1]; k.setSeconds(x.durationSeconds) } } i = k } else i = this._getClosestWorkTimePast(new Date(i - 1), "hour") } else i = this.$gantt.date.add(i, -1, "day") } if (r < e) { var w = e - r; r += (o = this._subtractMinutesUntilHourStart(i, w)).added, i = o.end } return i }, _calculateMinuteEndDate: function(t, e, n) { var i = new Date(t) , r = 0; n = n || 1, e = Math.abs(1 * e), e = Math.round(e); var a = this._addMinutesUntilHourEnd(i, e); r += a.added, i = a.end; for (var o = 0, s = [], l = 0, c = this._isMinutePrecision(i); r < e; ) { var u = this.$gantt.date.day_start(new Date(i)).valueOf(); u !== o && (s = this._getWorkHours(i), l = this._getMinutesPerDay(i), o = u); var d = e - r , h = this._getTimeOfDayStamp(i); if (s.length && l) if (s[0].start >= h && d >= l) { if (r += l, d == l) { i = new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,s[s.length - 1].end); break } i = this.$gantt.date.add(i, 1, "day"), i = this.$gantt.date.day_start(i) } else { for (var f = !1, _ = null, g = 0; g < s.length; g++) if (s[g].start <= h && s[g].end > h) { f = !0, _ = s[g]; break } if (f) if (h === _.start && d >= _.durationMinutes) r += _.durationMinutes, i = this.$gantt.date.add(i, _.durationMinutes, "minute"); else if (d <= _.endMinute - h / 60) r += d, i = this.$gantt.date.add(i, d, "minute"); else { var p = this._getMinutesPerHour(i); p <= d ? (r += p, i = c ? this.$gantt.date.add(i, p, "minute") : this._nextDate(i, "hour", n)) : (r += (a = this._addMinutesUntilHourEnd(i, d)).added, i = a.end) } else i = this._getClosestWorkTimeFuture(i, "hour") } else i = this.$gantt.date.add(this.$gantt.date.day_start(i), 1, "day") } if (r < e) { var v = e - r; r += (a = this._addMinutesUntilHourEnd(i, v)).added, i = a.end } return i }, getClosestWorkTime: function() { var t = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments); return this._getClosestWorkTime(t.date, t.unit, t.dir) }, _getClosestWorkTime: function(t, e, n) { var i = new Date(t); if (this._isWorkTime(i, e)) return i; if (i = this.$gantt.date[e + "_start"](i), "any" != n && n) i = "past" == n ? this._getClosestWorkTimePast(i, e) : this._getClosestWorkTimeFuture(i, e); else { var r = this._getClosestWorkTimeFuture(i, e) , a = this._getClosestWorkTimePast(i, e); i = Math.abs(r - t) <= Math.abs(t - a) ? r : a } return i }, _getClosestWorkTimeFuture: function(t, e) { return this._getClosestWorkTimeGeneric(t, e, 1) }, _getClosestWorkTimePast: function(t, e) { var n = this._getClosestWorkTimeGeneric(t, e, -1); return this.$gantt.date.add(n, 1, e) }, _findClosestTimeInDay: function(t, e, n) { var i = new Date(t) , r = null , a = !1; this._getWorkHours(i).length || (i = this._getClosestWorkTime(i, "day", e < 0 ? "past" : "future"), e < 0 && (i = new Date(i.valueOf() - 1), a = !0), n = this._getWorkHours(i)); var o = this._getTimeOfDayStamp(i); if (a && (o = this._getTimeOfDayStamp(new Date(i.valueOf() + 1), a)), e > 0) { for (var s = 0; s < n.length; s++) if (n[s].start >= o) { r = new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[s].start); break } } else for (s = n.length - 1; s >= 0; s--) { if (n[s].end <= o) { r = new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,n[s].end); break } if (n[s].end > o && n[s].start <= o) { r = new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,o); break } } return r }, _getClosestWorkMinute: function(t, e, n) { var i = new Date(t) , r = this._getWorkHours(i) , a = this._findClosestTimeInDay(i, n, r); return a || (i = this.calculateEndDate(i, n, "day"), n > 0 ? i = this.$gantt.date.day_start(i) : (i = this.$gantt.date.day_start(i), i = this.$gantt.date.add(i, 1, "day"), i = new Date(i.valueOf() - 1)), r = this._getWorkHours(i), a = this._findClosestTimeInDay(i, n, r)), n < 0 && (a = this.$gantt.date.add(a, -1, e)), a }, _getClosestWorkTimeGeneric: function(t, e, n) { if ("hour" === e || "minute" === e) return this._getClosestWorkMinute(t, e, n); for (var i = this._getUnitOrder(e), r = this.units[i - 1], a = t, o = 0; !this._isWorkTime(a, e) && (!r || this._isWorkTime(a, r) || (a = n > 0 ? this._getClosestWorkTimeFuture(a, r) : this._getClosestWorkTimePast(a, r), !this._isWorkTime(a, e))); ) { if (++o > 3e3) return this.$gantt.assert(!1, "Invalid working time check"), !1; var s = a.getTimezoneOffset(); a = this.$gantt.date.add(a, n, e), a = this.$gantt._correct_dst_change(a, s, n, e), this.$gantt.date[e + "_start"] && (a = this.$gantt.date[e + "_start"](a)) } return a }, hasWorkTime: function() { var t = this.getConfig() , e = t.dates , n = []; for (var i in t.dates) Number(i) > 6 && n.push(Number(i)); var r = this._checkWorkHours(t.hours) , a = !1; return [0, 1, 2, 3, 4, 5, 6].forEach(function(t) { if (!a) { var n = e[t]; !0 === n ? a = r : Array.isArray(n) && (a = this._checkWorkHours(n)) } } .bind(this)), a }, _checkWorkHours: function(t) { if (0 === t.length) return !1; for (var e = !1, n = 0; n < t.length; n += 2) t[n] !== t[n + 1] && (e = !0); return e }, _isMinutePrecision: function(t) { var e = !1; return this._getWorkHours(t).forEach(function(t) { (t.startMinute % 60 || t.endMinute % 60) && (e = !0) }), e } }, t.exports = l } , function(t, e, n) { var i = n(0); function r() {} r.prototype = { _getIntervals: function(t) { for (var e = [], n = 0; n < t.length; n += 2) e.push({ start: t[n], end: t[n + 1] }); return e }, _toHoursArray: function(t) { var e = []; function n(t) { var e = Math.floor(t / 3600) , n = t - 60 * e * 60; return e + ":" + function(t) { var e = String(t); return e.length < 2 && (e = "0" + e), e }(Math.floor(n / 60)) } for (var i = 0; i < t.length; i++) e.push(n(t[i].start) + "-" + n(t[i].end)); return e }, _intersectHourRanges: function(t, e) { var n = [] , i = t.length > e.length ? t : e , r = t === i ? e : t; i = i.slice(), r = r.slice(); n = []; for (var a = 0; a < i.length; a++) for (var o = i[a], s = 0; s < r.length; s++) { var l = r[s]; l.start < o.end && l.end > o.start && (n.push({ start: Math.max(o.start, l.start), end: Math.min(o.end, l.end) }), o.end > l.end && (r.splice(s, 1), s--, a--)) } return n }, _mergeAdjacentIntervals: function(t) { var e = t.slice(); e.sort(function(t, e) { return t.start - e.start }); for (var n = e[0], i = 1; i < e.length; i++) { var r = e[i]; r.start <= n.end ? (r.end > n.end && (n.end = r.end), e.splice(i, 1), i--) : n = r } return e }, _mergeHoursConfig: function(t, e) { return this._mergeAdjacentIntervals(this._intersectHourRanges(t, e)) }, merge: function(t, e) { var n = i.copy(t.getConfig().parsed) , r = i.copy(e.getConfig().parsed) , a = { hours: this._toHoursArray(this._mergeHoursConfig(n.hours, r.hours)), dates: {}, customWeeks: {} }; for (var o in n.dates) { var s = n.dates[o] , l = r.dates[o]; if (s && l) if (Array.isArray(s) || Array.isArray(l)) { var c = Array.isArray(s) ? s : n.hours , u = Array.isArray(l) ? l : r.hours; a.dates[o] = this._toHoursArray(this._mergeHoursConfig(c, u)) } else a.dates[o] = !0; else a.dates[o] = !1 } if (n.customWeeks) for (var o in n.customWeeks) a.customWeeks[o] = n.customWeeks[o]; if (r.customWeeks) for (var o in r.customWeeks) a.customWeeks[o] = r.customWeeks[o]; return a } }, t.exports = r } , function(t, e, n) { var i = n(0) , r = n(42) , a = n(198) , o = n(197) , s = n(192) , l = n(191)(); function c(t) { this.$gantt = t, this._calendars = {}, this._legacyConfig = void 0, this.$gantt.attachEvent("onGanttReady", function() { this.$gantt.config.resource_calendars && (this._isLegacyConfig = s.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars)) } .bind(this)), this.$gantt.attachEvent("onBeforeGanttReady", function() { this.createDefaultCalendars() } .bind(this)), this.$gantt.attachEvent("onBeforeGanttRender", function() { this.createDefaultCalendars() } .bind(this)) } c.prototype = { _calendars: {}, _convertWorkTimeSettings: function(t) { var e = t.days; if (e && !t.dates) { t.dates = t.dates || {}; for (var n = 0; n < e.length; n++) t.dates[n] = e[n], e[n]instanceof Array || (t.dates[n] = !!e[n]) } return delete t.days, t }, mergeCalendars: function() { var t = [] , e = arguments; if (Array.isArray(e[0])) t = e[0].slice(); else for (var n = 0; n < arguments.length; n++) t.push(arguments[n]); var i, r = new a; return t.forEach(function(t) { i = i ? this._createCalendarFromConfig(r.merge(i, t)) : t } .bind(this)), this.createCalendar(i) }, _createCalendarFromConfig: function(t) { var e = new o(this.$gantt,r(this.$gantt)); e.id = String(i.uid()); var n = this._convertWorkTimeSettings(t); if (n.customWeeks) for (var a in n.customWeeks) n.customWeeks[a] = this._convertWorkTimeSettings(n.customWeeks[a]); return e._setConfig(n), e }, createCalendar: function(t) { var e; t || (t = {}), e = t.getConfig ? i.copy(t.getConfig()) : t.worktime ? i.copy(t.worktime) : i.copy(t); var n = i.copy(this.defaults.fulltime.worktime); return i.mixin(e, n), this._createCalendarFromConfig(e) }, getCalendar: function(t) { t = t || "global"; var e = this._calendars[t]; return e || (this.createDefaultCalendars(), e = this._calendars[t]), e }, getCalendars: function() { var t = []; for (var e in this._calendars) t.push(this.getCalendar(e)); return t }, _getOwnCalendar: function(t) { var e = this.$gantt.config; if (t[e.calendar_property]) return this.getCalendar(t[e.calendar_property]); if (e.resource_calendars) { var n; if (n = !1 === this._legacyConfig ? e.resource_property : s.getResourceProperty(e), Array.isArray(t[n])) e.dynamic_resource_calendars && (i = l.getCalendarIdFromMultipleResources(t[n], this)); else if (void 0 === this._legacyConfig && (this._legacyConfig = s.isLegacyResourceCalendarFormat(e.resource_calendars)), this._legacyConfig) var i = s.getCalendarIdFromLegacyConfig(t, e.resource_calendars); else if (n && t[n] && e.resource_calendars[t[n]]) var r = this.getResourceCalendar(t[n]); if (i && (r = this.getCalendar(i)), r) return r } return null }, getResourceCalendar: function(t) { if (null === t || void 0 === t) return this.getCalendar(); var e = null; e = "number" == typeof t || "string" == typeof t ? t : t.id || t.key; var n = this.$gantt.config , i = n.resource_calendars , r = null; if (i) { if (void 0 === this._legacyConfig && (this._legacyConfig = s.isLegacyResourceCalendarFormat(n.resource_calendars)), this._legacyConfig) { for (var a in i) if (i[a][e]) { r = i[a][e]; break } } else r = i[e]; if (r) return this.getCalendar(r) } return this.getCalendar() }, getTaskCalendar: function(t) { var e, n = this.$gantt; if (null === t || void 0 === t) return this.getCalendar(); if (!(e = "number" != typeof t && "string" != typeof t || !n.isTaskExists(t) ? t : n.getTask(t))) return this.getCalendar(); var i = this._getOwnCalendar(e) , r = !!n.getState().group_mode; if (!i && n.config.inherit_calendar && n.isTaskExists(e.parent)) { for (var a = e; n.isTaskExists(a.parent) && (a = n.getTask(a.parent), !n.isSummaryTask(a) || !(i = this._getOwnCalendar(a))); ) ; r && !i && t.$effective_calendar && (i = this.getCalendar(t.$effective_calendar)) } return i || this.getCalendar() }, addCalendar: function(t) { if (!this.isCalendar(t)) { var e = t.id; (t = this.createCalendar(t)).id = e } if (t._tryChangeCalendarSettings(function() {})) { var n = this.$gantt.config; return t.id = t.id || i.uid(), this._calendars[t.id] = t, n.worktimes || (n.worktimes = {}), n.worktimes[t.id] = t.getConfig(), t.id } return this.$gantt.callEvent("onCalendarError", [{ message: "Invalid calendar settings, no worktime available" }, t]), null }, deleteCalendar: function(t) { var e = this.$gantt.config; return !!t && (!!this._calendars[t] && (delete this._calendars[t], e.worktimes && e.worktimes[t] && delete e.worktimes[t], !0)) }, restoreConfigCalendars: function(t) { for (var e in t) if (!this._calendars[e]) { var n = t[e] , i = this.createCalendar(n); i.id = e, this.addCalendar(i) } }, defaults: { global: { id: "global", worktime: { hours: [8, 12, 13, 17], days: [0, 1, 1, 1, 1, 1, 0] } }, fulltime: { id: "fulltime", worktime: { hours: [0, 24], days: [1, 1, 1, 1, 1, 1, 1] } } }, createDefaultCalendars: function() { var t = this.$gantt.config; this.restoreConfigCalendars(this.defaults), this.restoreConfigCalendars(t.worktimes) }, isCalendar: function(t) { return [t.isWorkTime, t.setWorkTime, t.getWorkHours, t.unsetWorkTime, t.getClosestWorkTime, t.calculateDuration, t.hasDuration, t.calculateEndDate].every(function(t) { return t instanceof Function }) } }, t.exports = c } , function(t, e, n) { var i = n(199) , r = n(190) , a = n(188) , o = n(0); t.exports = function(t) { var e = new i(t) , n = new r(e) , s = a.create(e, n); o.mixin(t, s) } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(2); t.exports = function(t) { function e(e) { throw t.assert(!1, "Can't parse data: incorrect value of gantt.parse or gantt.load method. Actual argument value: " + JSON.stringify(e)), new Error("Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: " + JSON.stringify(e)) } t.load = function(e, n, i) { this._load_url = e, this.assert(arguments.length, "Invalid load arguments"); var r = "json" , a = null; return arguments.length >= 3 ? (r = n, a = i) : "string" == typeof arguments[1] ? r = arguments[1] : "function" == typeof arguments[1] && (a = arguments[1]), this._load_type = r, this.callEvent("onLoadStart", [e, r]), this.ajax.get(e, t.bind(function(t) { this.on_load(t, r), this.callEvent("onLoadEnd", [e, r]), "function" == typeof a && a.call(this) }, this)) } , t.parse = function(t, e) { this.on_load({ xmlDoc: { responseText: t } }, e) } , t.serialize = function(t) { return this[t = t || "json"].serialize() } , t.on_load = function(e, n) { if (e.xmlDoc && 404 === e.xmlDoc.status) this.assert(!1, "Failed to load the data from " + e.xmlDoc.responseURL + ", server returns 404"); else if (!t.$destroyed) { this.callEvent("onBeforeParse", []), n || (n = "json"), this.assert(this[n], "Invalid data type:'" + n + "'"); var i = e.xmlDoc.responseText , r = this[n].parse(i, e); this._process_loading(r) } } , t._process_loading = function(e) { e.collections && this._load_collections(e.collections), e.resources && this.$data.resourcesStore && this.$data.resourcesStore.parse(e.resources); var n = e.data || e.tasks; e.assignments && function(e, n) { var i = {}; n.forEach(function(t) { i[t.task_id] || (i[t.task_id] = []), i[t.task_id].push(t) }), e.forEach(function(e) { e[t.config.resource_property] = i[e.id] || [] }) }(n, e.assignments), this.$data.tasksStore.parse(n); var i = e.links || (e.collections ? e.collections.links : []); this.$data.linksStore.parse(i), this.callEvent("onParse", []), this.render() } , t._load_collections = function(t) { var e = !1; for (var n in t) if (t.hasOwnProperty(n)) { e = !0; var i = t[n]; this.serverList[n] = this.serverList[n] || []; var r = this.serverList[n]; if (!r) continue; r.splice(0, r.length); for (var a = 0; a < i.length; a++) { var o = i[a] , s = this.copy(o); for (var l in s.key = s.value, o) if (o.hasOwnProperty(l)) { if ("value" == l || "label" == l) continue; s[l] = o[l] } r.push(s) } } e && this.callEvent("onOptionsLoad", []) } , t.attachEvent("onBeforeTaskDisplay", function(t, e) { return !e.$ignore }), t.json = { parse: function(n) { if (n || e(n), "string" == typeof n) if (void 0 != ("undefined" == typeof JSON ? "undefined" : i(JSON))) try { n = JSON.parse(n) } catch (t) { e(n) } else t.assert(!1, "JSON is not supported"); return n.data || n.tasks || e(n), n.dhx_security && (t.security_key = n.dhx_security), n }, serializeTask: function(t) { return this._copyObject(t) }, serializeLink: function(t) { return this._copyLink(t) }, _copyLink: function(t) { var e = {}; for (var n in t) e[n] = t[n]; return e }, _copyObject: function(e) { var n = {}; for (var i in e) "$" != i.charAt(0) && (n[i] = e[i], r.isDate(n[i]) && (n[i] = t.defined(t.templates.xml_format) ? t.templates.xml_format(n[i]) : t.templates.format_date(n[i]))); return n }, serialize: function() { var e = [] , n = []; t.eachTask(function(n) { t.resetProjectDates(n), e.push(this.serializeTask(n)) }, t.config.root_id, this); for (var i = t.getLinks(), r = 0; r < i.length; r++) n.push(this.serializeLink(i[r])); return { data: e, links: n } } }, t.xml = { _xmlNodeToJSON: function(t, e) { for (var n = {}, i = 0; i < t.attributes.length; i++) n[t.attributes[i].name] = t.attributes[i].value; if (!e) { for (i = 0; i < t.childNodes.length; i++) { var r = t.childNodes[i]; 1 == r.nodeType && (n[r.tagName] = r.firstChild ? r.firstChild.nodeValue : "") } n.text || (n.text = t.firstChild ? t.firstChild.nodeValue : "") } return n }, _getCollections: function(e) { for (var n = {}, i = t.ajax.xpath("//coll_options", e), r = 0; r < i.length; r++) for (var a = n[i[r].getAttribute("for")] = [], o = t.ajax.xpath(".//item", i[r]), s = 0; s < o.length; s++) { for (var l = o[s].attributes, c = { key: o[s].getAttribute("value"), label: o[s].getAttribute("label") }, u = 0; u < l.length; u++) { var d = l[u]; "value" != d.nodeName && "label" != d.nodeName && (c[d.nodeName] = d.nodeValue) } a.push(c) } return n }, _getXML: function(e, n, i) { i = i || "data", n.getXMLTopNode || (n = t.ajax.parse(n)); var r = t.ajax.xmltop(i, n.xmlDoc); r && r.tagName == i || function(e) { throw t.assert(!1, "Can't parse data: incorrect value of gantt.parse or gantt.load method. Actual argument value: " + JSON.stringify(e)), new Error("Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: " + JSON.stringify(e)) }(e); var a = r.getAttribute("dhx_security"); return a && (t.security_key = a), r }, parse: function(e, n) { n = this._getXML(e, n); for (var i = {}, r = i.data = [], a = t.ajax.xpath("//task", n), o = 0; o < a.length; o++) r[o] = this._xmlNodeToJSON(a[o]); return i.collections = this._getCollections(n), i }, _copyLink: function(t) { return "" }, _copyObject: function(t) { return "" }, serialize: function() { for (var e = [], n = [], i = t.json.serialize(), r = 0, a = i.data.length; r < a; r++) e.push(this._copyObject(i.data[r])); for (r = 0, a = i.links.length; r < a; r++) n.push(this._copyLink(i.links[r])); return "" + e.join("") + "" + n.join("") + "" } }, t.oldxml = { parse: function(e, n) { n = t.xml._getXML(e, n, "projects"); for (var i = { collections: { links: [] } }, r = i.data = [], a = t.ajax.xpath("//task", n), o = 0; o < a.length; o++) { r[o] = t.xml._xmlNodeToJSON(a[o]); var s = a[o].parentNode; "project" == s.tagName ? r[o].parent = "project-" + s.getAttribute("id") : r[o].parent = s.parentNode.getAttribute("id") } a = t.ajax.xpath("//project", n); for (o = 0; o < a.length; o++) { (l = t.xml._xmlNodeToJSON(a[o], !0)).id = "project-" + l.id, r.push(l) } for (o = 0; o < r.length; o++) { var l; (l = r[o]).start_date = l.startdate || l.est, l.end_date = l.enddate, l.text = l.name, l.duration = l.duration / 8, l.open = 1, l.duration || l.end_date || (l.duration = 1), l.predecessortasks && i.collections.links.push({ target: l.id, source: l.predecessortasks, type: t.config.links.finish_to_start }) } return i }, serialize: function() { t.message("Serialization to 'old XML' is not implemented") } }, t.serverList = function(t, e) { return e ? this.serverList[t] = e.slice(0) : this.serverList[t] || (this.serverList[t] = []), this.serverList[t] } } } , function(t, e) { t.exports = function(t) { t.isReadonly = function(e) { return "number" != typeof e && "string" != typeof e || !t.isTaskExists(e) || (e = t.getTask(e)), (!e || !e[this.config.editable_property]) && (e && e[this.config.readonly_property] || this.config.readonly) } } } , function(t, e) { t.exports = function(t) { t.getGridColumn = function(e) { for (var n = t.config.columns, i = 0; i < n.length; i++) if (n[i].name == e) return n[i]; return null } , t.getGridColumns = function() { return t.config.columns.slice() } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t(t) { this._scrollOrder = 0; var e = t.gantt , n = t.grid , i = t.dnd , r = t.getCurrentX; this.$gantt = e, this.$grid = n, this._dnd = i, this.getCurrentX = r, this._scrollView = this.$gantt.$ui.getView(this.$grid.$config.scrollX), this.attachEvents() } return t.prototype.attachEvents = function() { var t = this; this.isScrollable() && (this._dnd.attachEvent("onDragMove", function(e, n) { var i = t.$grid.$grid.getBoundingClientRect() , r = i.right , a = i.left , o = t.getCurrentX(n.clientX); return o >= r - 20 && (t.autoscrollRight(), t.autoscrollStart()), o <= a + 20 && (t.autoscrollLeft(), t.autoscrollStart()), o < r - 20 && o > a + 20 && t.autoscrollStop(), !0 }), this._dnd.attachEvent("onDragEnd", function() { t.autoscrollStop() })) } , t.prototype.autoscrollStart = function() { var t = this; if (0 !== this._scrollOrder) { var e = 10 * this._scrollOrder , n = this._scrollView.getScrollState(); this._scrollView.scrollTo(n.position + e), setTimeout(function() { t.autoscrollStart() }, 50) } } , t.prototype.autoscrollRight = function() { this._scrollOrder = 1 } , t.prototype.autoscrollLeft = function() { this._scrollOrder = -1 } , t.prototype.autoscrollStop = function() { this._scrollOrder = 0 } , t.prototype.getCorrection = function() { return this.isScrollable() ? this._scrollView.getScrollState().position : 0 } , t.prototype.isScrollable = function() { return !!this.$grid.$config.scrollable } , t }(); e.default = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(1) , r = n(204) , a = function() { function t(t, e) { var n = this; this._targetMarker = null, this.calculateCurrentPosition = function(t) { var e = n.$grid.$grid.getBoundingClientRect() , i = e.right , r = e.left , a = t; return a > i && (a = i), a < r && (a = r), a } , this.$gantt = t, this.$grid = e } return t.prototype.init = function() { var t = this.$gantt.$services.getService("dnd"); this._dnd = new t(this.$grid.$grid_scale,{ updates_per_second: 60 }), this._scrollableGrid = new r.default({ gantt: this.$gantt, grid: this.$grid, dnd: this._dnd, getCurrentX: this.calculateCurrentPosition }), this.attachEvents() } , t.prototype.attachEvents = function() { var t = this; this._dnd.attachEvent("onBeforeDragStart", function(e, n) { if (t._draggedCell = t.$gantt.utils.dom.closest(n.target, ".gantt_grid_head_cell"), t._draggedCell) { var i, r, a = t.$grid.$getConfig().columns, o = t._draggedCell.getAttribute("data-column-id"); return a.map(function(t, e) { t.name === o && (i = t, r = e) }), !1 === t.$grid.callEvent("onBeforeColumnDragStart", [{ draggedColumn: i, draggedIndex: r }]) ? !1 : !(!t._draggedCell || !i) && (t._gridConfig = t.$grid.$getConfig(), t._originAutoscroll = t.$gantt.config.autoscroll, t.$gantt.config.autoscroll = !1, !0) } }), this._dnd.attachEvent("onAfterDragStart", function(e, n) { t._draggedCell && (t._dnd.config.column = t._draggedCell.getAttribute("data-column-id"), t._dnd.config.marker.innerHTML = t._draggedCell.outerHTML, t._dnd.config.marker.classList.add("gantt_column_drag_marker"), t._dnd.config.marker.style.height = t._gridConfig.scale_height + "px", t._dnd.config.marker.style.lineHeight = t._gridConfig.scale_height + "px", t._draggedCell.classList.add("gantt_grid_head_cell_dragged")) }), this._dnd.attachEvent("onDragMove", function(e, n) { if (t._draggedCell) { t._dragX = n.clientX; var i = t.calculateCurrentPosition(n.clientX) , r = t.findColumnsIndexes() , a = r.targetIndex , o = r.draggedIndex , s = t.$grid.$getConfig().columns , l = s[o] , c = s[a]; return !1 === t.$grid.callEvent("onColumnDragMove", [{ draggedColumn: l, targetColumn: c, draggedIndex: o, targetIndex: a }]) ? (t.cleanTargetMarker(), !1) : (t.setMarkerPosition(i), t.drawTargetMarker(r), !0) } }), this._dnd.attachEvent("onDragEnd", function() { t._draggedCell && (t.$gantt.config.autoscroll = t._originAutoscroll, t._draggedCell.classList.remove("gantt_grid_head_cell_dragged"), t.cleanTargetMarker(), t.reorderColumns()) }) } , t.prototype.reorderColumns = function() { var t = this.findColumnsIndexes() , e = t.targetIndex , n = t.draggedIndex , i = this.$grid.$getConfig().columns , r = i[n] , a = i[e]; !1 !== this.$grid.callEvent("onBeforeColumnReorder", [{ draggedColumn: r, targetColumn: a, draggedIndex: n, targetIndex: e }]) && e !== n && (i.splice(n, 1), i.splice(e, 0, r), this.$gantt.render(), this.$grid.callEvent("onAfterColumnReorder", [{ draggedColumn: r, targetColumn: a, draggedIndex: n, targetIndex: e }])) } , t.prototype.findColumnsIndexes = function() { var t, e, n, i, r, a = this._dnd.config.column, o = this.$grid.$getConfig().columns, s = { startX: 0, endX: 0 }, l = 0, c = o.length - 1, u = function(t, e) { return t <= e }, d = function(t) { return ++t }; this.$gantt.config.rtl && (l = o.length - 1, c = 0, u = function(t, e) { return t >= e } , d = function(t) { return --t } ); for (var h = this._dragX - this.$grid.$grid.getBoundingClientRect().left + this._scrollableGrid.getCorrection(), f = l; u(f, c) && (void 0 === t || void 0 === e); f = d(f)) o[f].hide || (s.startX = s.endX, s.endX += o[f].width, h >= s.startX && (h <= s.endX || !u(d(f), c)) && (t = f, n = s.startX, i = s.endX, r = (h - s.startX) / (s.endX - s.startX)), a === o[f].name && (e = f)); return { targetIndex: t, draggedIndex: e, xBefore: n, xAfter: i, columnRelativePos: r } } , t.prototype.setMarkerPosition = function(t, e) { void 0 === e && (e = 10); var n = this._dnd.config.marker , i = this._dnd._obj.getBoundingClientRect(); n.style.top = i.y + e + "px", n.style.left = t + "px" } , t.prototype.drawTargetMarker = function(t) { var e, n = t.targetIndex, r = t.draggedIndex, a = t.xBefore, o = t.xAfter, s = t.columnRelativePos; this._targetMarker || (this._targetMarker = document.createElement("div"), i.addClassName(this._targetMarker, "gantt_grid_target_marker"), this._targetMarker.style.display = "none", this._targetMarker.style.height = this._gridConfig.scale_height + "px"), this._targetMarker.parentNode || this.$grid.$grid_scale.appendChild(this._targetMarker), e = n > r ? o : n < r ? a : s > .5 ? o : a, this._targetMarker.style.left = e + "px", this._targetMarker.style.display = "block" } , t.prototype.cleanTargetMarker = function() { this._targetMarker && this._targetMarker.parentNode && this.$grid.$grid_scale.removeChild(this._targetMarker), this._targetMarker = null } , t }(); e.ColumnsGridDnd = a } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(205); e.default = i.ColumnsGridDnd } , function(t, e, n) { var i = n(1); t.exports = function(t, e) { var n = { row_before_start: t.bind(function(t, n, r) { var a = e.$getConfig() , o = e.$config.rowStore; if (!i.locateAttribute(r, a.task_grid_row_resizer_attribute)) return !1; var s = this.locate(r, a.task_grid_row_resizer_attribute) , l = o.getItem(s); return !1 !== e.callEvent("onBeforeRowResize", [l]) && void 0 }, t), row_after_start: t.bind(function(t, n, i) { var r = e.$getConfig() , a = this.locate(i, r.task_grid_row_resizer_attribute); t.config.marker.innerHTML = "", t.config.marker.className += " gantt_row_grid_resize_area", t.config.marker.style.width = e.$grid.offsetWidth + "px", t.config.drag_id = a }, t), row_drag_move: t.bind(function(t, n, r) { var a = e.$config.rowStore , o = e.$getConfig() , s = t.config , l = s.drag_id , c = e.getItemHeight(l) , u = e.getItemTop(l) , d = i.getNodePosition(e.$grid_data) , h = parseInt(s.marker.style.top, 10) , f = u + d.y , _ = 0 , g = o.min_task_grid_row_height; return (_ = h - f) < g && (_ = g), s.marker.style.left = d.x + "px", s.marker.style.top = f - 1 + "px", s.marker.style.height = Math.abs(_) + 1 + "px", s.marker_height = _, e.callEvent("onRowResize", [l, a.getItem(l), _ + c]), !0 }, t), row_drag_end: t.bind(function(n, i, r) { var a = e.$config.rowStore , o = n.config , s = o.drag_id , l = a.getItem(s) , c = e.getItemHeight(s) , u = o.marker_height; !1 !== e.callEvent("onBeforeRowResizeEnd", [s, l, u]) && l.row_height != u && (l.row_height = u, t.updateTask(s), e.callEvent("onAfterRowResize", [s, l, c, u]), this.render()) }, t) }; return { init: function() { var i = t.$services.getService("dnd") , r = e.$getConfig() , a = new i(e.$grid_data,{ updates_per_second: 60 }); t.defined(r.dnd_sensitivity) && (a.config.sensitivity = r.dnd_sensitivity), a.attachEvent("onBeforeDragStart", function(t, e) { return n.row_before_start(a, t, e) }), a.attachEvent("onAfterDragStart", function(t, e) { return n.row_after_start(a, t, e) }), a.attachEvent("onDragMove", function(t, e) { return n.row_drag_move(a, t, e) }), a.attachEvent("onDragEnd", function(t, e) { return n.row_drag_end(a, t, e) }) } } } } , function(t, e) { t.exports = function(t) { var e = -1 , n = -1; return { resetCache: function() { e = -1, n = -1 }, _getRowHeight: function() { return -1 === e && (e = t.$getConfig().row_height), e }, _refreshState: function() { this.resetCache(), n = !0; var e = t.$config.rowStore; if (e) for (var i = this._getRowHeight(), r = 0; r < e.fullOrder.length; r++) { var a = e.getItem(e.fullOrder[r]); if (a && a.row_height && a.row_height !== i) { n = !1; break } } }, canUseSimpleCalculation: function() { return -1 === n && this._refreshState(), n }, getRowTop: function(e) { return t.$config.rowStore ? e * this._getRowHeight() : 0 }, getItemHeight: function(t) { return this._getRowHeight() }, getTotalHeight: function() { return t.$config.rowStore ? t.$config.rowStore.countVisible() * this._getRowHeight() : 0 }, getItemIndexByTopPosition: function(e) { return t.$config.rowStore ? Math.floor(e / this._getRowHeight()) : 0 } } } } , function(t, e) { t.exports = function(t, e) { return { init: function() {}, doOnRender: function() {} } } } , function(t, e, n) { var i = n(32); t.exports = function(t) { n(203)(t), i.prototype.getGridColumns = function() { for (var t = this.$getConfig().columns, e = [], n = 0; n < t.length; n++) t[n].hide || e.push(t[n]); return e } } } , function(t, e, n) { t.exports = function(t) { var e = n(47) , i = {}; t.attachEvent("onClearAll", function() { i = {} }); var r = e.prototype.hasChild; t.$data.tasksStore.hasChild = function(e) { return t.config.branch_loading ? !!r.call(this, e) || !!this.exists(e) && this.getItem(e)[t.config.branch_loading_property] : r.call(this, e) } , t.attachEvent("onTaskOpened", function(e) { if (t.config.branch_loading && t._load_url && function(e) { return !(!t.config.branch_loading || !t._load_url || i[e] || t.getChildren(e).length || !t.hasChild(e)) }(e)) { var n = t._load_url , r = (n = n.replace(/(\?|&)?parent_id=.+&?/, "")).indexOf("?") >= 0 ? "&" : "?" , a = t.getScrollState().y || 0 , o = { taskId: e, url: n + r + "parent_id=" + encodeURIComponent(e) }; if (!1 === t.callEvent("onBeforeBranchLoading", [o])) return; t.load(o.url, this._load_type, function() { a && t.scrollTo(null, a), t.callEvent("onAfterBranchLoading", [o]) }), i[e] = !0 } }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function(t) { t.ext = t.ext || {}, t.config.show_empty_state = !1, t.ext.emptyStateElement = t.ext.emptyStateElement || { isEnabled: function() { return !0 === t.config.show_empty_state }, isGanttEmpty: function() { return !t.getTaskByTime().length }, renderContent: function(e) { var n = "
\n \n
" + t.locale.labels.empty_state_text_description + "
\n
"; e.innerHTML = n }, clickEvents: [], attachAddTaskEvent: function() { var e = t.attachEvent("onEmptyClick", function(e) { t.utils.dom.closest(e.target, "[data-empty-state-create-task]") && t.createTask({ id: t.uid(), text: "New Task" }) }); this.clickEvents.push(e) }, detachAddTaskEvents: function() { this.clickEvents.forEach(function(e) { t.detachEvent(e) }), this.clickEvents = [] }, getContainer: function() { if (t.$container) { var e = t.utils.dom; if (t.$container.contains(t.$grid_data)) return e.closest(t.$grid_data, ".gantt_layout_content"); if (t.$container.contains(t.$task_data)) return e.closest(t.$task_data, ".gantt_layout_content") } return null }, getNode: function() { var t = this.getContainer(); return t ? t.querySelector(".gantt_empty_state_wrapper") : null }, show: function() { var e = this.getContainer(); if (!e && this.isGanttEmpty()) return null; var n = document.createElement("div"); n.className = "gantt_empty_state_wrapper", n.style.marginTop = t.config.scale_height - e.offsetHeight + "px"; var i = t.$container.querySelectorAll(".gantt_empty_state_wrapper"); Array.prototype.forEach.call(i, function(t) { t.parentNode.removeChild(t) }), this.detachAddTaskEvents(), this.attachAddTaskEvent(), e.appendChild(n), this.renderContent(n) }, hide: function() { var t = this.getNode(); if (!t) return !1; t.parentNode.removeChild(t) }, init: function() {} }, t.attachEvent("onDataRender", function() { var e = t.ext.emptyStateElement; e.isEnabled() && e.isGanttEmpty() ? e.show() : e.hide() }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t(t) { var e = this; this.format = function(t) { return e._getWBSCode(t.source) } , this.canParse = function(t) { return e._linkReg.test(t) } , this.parse = function(t) { if (!e.canParse(t)) return null; var n = e._linkReg.exec(t)[0].trim(); return { id: void 0, source: e._findSource(n) || null, target: null, type: e._gantt.config.links.finish_to_start, lag: 0 } } , this._getWBSCode = function(t) { var n = e._gantt.getTask(t); return e._gantt.getWBSCode(n) } , this._findSource = function(t) { var n = new RegExp("^[0-9.]+","i"); if (n.exec(t)) { var i = n.exec(t)[0] , r = e._gantt.getTaskByWBSCode(i); if (r) return r.id } return null } , this._linkReg = /^[0-9\.]+/, this._gantt = t } return t.create = function(e, n) { return void 0 === e && (e = null), new t(n) } , t }(); e.default = i } , function(t, e, n) { var i = n(44).default , r = n(213).default; t.exports = function(t) { t.ext.formatters = { durationFormatter: function(e) { return e || (e = {}), e.store || (e.store = t.config.duration_unit), e.enter || (e.enter = t.config.duration_unit), i.create(e, t) }, linkFormatter: function(e) { return r.create(e, t) } } } } , function(t, e) { t.exports = function(t) { function e(e) { return function() { return !t.config.auto_types || t.getTaskType(t.config.types.project) != t.config.types.project || e.apply(this, arguments) } } function n(e, n) { var i = t.getTask(e) , r = a(i); !1 !== r && t.getTaskType(i) !== r && (n.$needsUpdate = !0, n[i.id] = { task: i, type: r }) } function i(e) { if (!t.getState().group_mode) { var i = function(e, i) { return n(e, i = i || {}), t.eachParent(function(t) { n(t.id, i) }, e), i }(e); i.$needsUpdate && t.batchUpdate(function() { !function(e) { for (var n in e) if (e[n] && e[n].task) { var i = e[n].task; i.type = e[n].type, t.updateTask(i.id) } }(i) }) } } var r; function a(e) { var n = t.config.types , i = t.hasChild(e.id) , r = t.getTaskType(e.type); return i && r === n.task ? n.project : !i && r === n.project && n.task } var o, s, l = !0; function c(e) { e != t.config.root_id && t.isTaskExists(e) && i(e) } t.attachEvent("onParse", e(function() { l = !1, t.getState().group_mode || (t.batchUpdate(function() { t.eachTask(function(e) { var n = a(e); !1 !== n && function(e, n) { t.getState().group_mode || (e.type = n, t.updateTask(e.id)) }(e, n) }) }), l = !0) })), t.attachEvent("onAfterTaskAdd", e(function(t) { l && i(t) })), t.attachEvent("onAfterTaskUpdate", e(function(t) { l && i(t) })), t.attachEvent("onBeforeTaskDelete", e(function(e, n) { return r = t.getParent(e), !0 })), t.attachEvent("onAfterTaskDelete", e(function(t, e) { c(r) })), t.attachEvent("onRowDragStart", e(function(e, n, i) { return o = t.getParent(e), !0 })), t.attachEvent("onRowDragEnd", e(function(t, e) { c(o), i(t) })), t.attachEvent("onBeforeTaskMove", e(function(e, n, i) { return s = t.getParent(e), !0 })), t.attachEvent("onAfterTaskMove", e(function(t, e, n) { document.querySelector(".gantt_drag_marker") || (c(s), i(t)) })) } } , function(t, e) { t.exports = function(t) { function e(e) { return function() { return !t.config.placeholder_task || e.apply(this, arguments) } } function n() { var e = t.getTaskBy("type", t.config.types.placeholder); if (!e.length || !t.isTaskExists(e[0].id)) { var n = { unscheduled: !0, type: t.config.types.placeholder, duration: 0, text: t.locale.labels.new_task }; if (!1 === t.callEvent("onTaskCreated", [n])) return; t.addTask(n) } } function i(e) { var n = t.getTask(e); n.type == t.config.types.placeholder && (n.start_date && n.end_date && n.unscheduled && (n.unscheduled = !1), t.batchUpdate(function() { var e = t.copy(n); t.silent(function() { t.deleteTask(n.id) }), delete e["!nativeeditor_status"], e.type = t.config.types.task, e.id = t.uid(), t.addTask(e) })) } t.config.types.placeholder = "placeholder", t.attachEvent("onDataProcessorReady", e(function(n) { n && !n._silencedPlaceholder && (n._silencedPlaceholder = !0, n.attachEvent("onBeforeUpdate", e(function(e, i, r) { return r.type != t.config.types.placeholder || (n.setUpdated(e, !1), !1) }))) })); var r = !1; function a(e) { if (t.config.types.placeholder && t.isTaskExists(e) && t.getTask(e).type == t.config.types.placeholder) return !0; return !1 } function o(t) { return !(!a(t.source) && !a(t.target)) } t.attachEvent("onGanttReady", function() { r || (r = !0, t.attachEvent("onAfterTaskUpdate", e(i)), t.attachEvent("onAfterTaskAdd", e(function(e, i) { i.type != t.config.types.placeholder && (t.getTaskBy("type", t.config.types.placeholder).forEach(function(e) { t.silent(function() { t.isTaskExists(e.id) && t.deleteTask(e.id) }) }), n()) })), t.attachEvent("onParse", e(n))) }), t.attachEvent("onLinkValidation", function(t) { return !o(t) }), t.attachEvent("onBeforeLinkAdd", function(t, e) { return !o(e) }), t.attachEvent("onBeforeUndoStack", function(e) { for (var n = 0; n < e.commands.length; n++) { var i = e.commands[n]; "task" === i.entity && i.value.type === t.config.types.placeholder && (e.commands.splice(n, 1), n--) } return !0 }) } } , function(t, e) { t.exports = function(t) { var e = "$resourceAssignments"; t.config.resource_assignment_store = "resourceAssignments", t.config.process_resource_assignments = !0; var n = { auto: "auto", singleValue: "singleValue", valueArray: "valueArray", resourceValueArray: "resourceValueArray", assignmentsArray: "assignmentsArray" } , i = n.auto , r = { fixedDates: "fixedDates", fixedDuration: "fixedDuration", default: "default" }; function a(e, n) { e.start_date ? e.start_date = t.date.parseDate(e.start_date, "parse_date") : e.start_date = null, e.end_date ? e.end_date = t.date.parseDate(e.end_date, "parse_date") : e.end_date = null; var i = Number(e.delay) , a = !1; if (isNaN(i) ? (e.delay = 0, a = !0) : e.delay = i, t.defined(e.value) || (e.value = null), !e.task_id || !e.resource_id) return !1; if (e.mode = e.mode || r.default, e.mode === r.fixedDuration && (isNaN(Number(e.duration)) && (n = n || t.getTask(e.task_id), e.duration = t.calculateDuration({ start_date: e.start_date, end_date: e.end_date, id: n })), a && (n = n || t.getTask(e.task_id), e.delay = t.calculateDuration({ start_date: n.start_date, end_date: e.start_date, id: n }))), e.mode !== r.fixedDates && (n || t.isTaskExists(e.task_id))) { var o = s(e, n = n || t.getTask(e.task_id)); e.start_date = o.start_date, e.end_date = o.end_date, e.duration = o.duration } } var o = t.createDatastore({ name: t.config.resource_assignment_store, initItem: function(e) { return e.id || (e.id = t.uid()), a(e), e } }); function s(e, n) { if (e.mode === r.fixedDates) return { start_date: e.start_date, end_date: e.end_date, duration: e.duration }; var i, a, o = e.delay ? t.calculateEndDate({ start_date: n.start_date, duration: e.delay, task: n }) : new Date(n.start_date); return e.mode === r.fixedDuration ? (i = t.calculateEndDate({ start_date: o, duration: e.duration, task: n }), a = e.duration) : (i = new Date(n.end_date), a = n.duration - e.delay), { start_date: o, end_date: i, duration: a } } function l(e) { var o = t.config.resource_property , s = e[o] , l = [] , c = i === n.auto; if (t.defined(s) && s) { Array.isArray(s) || (s = [s], c && (i = n.singleValue, c = !1)); var u = {}; s.forEach(function(o) { o.resource_id || (o = { resource_id: o }, c && (i = n.valueArray, c = !1)), c && (o.id && o.resource_id ? (i = n.assignmentsArray, c = !1) : (i = n.resourceValueArray, c = !1)); var s, d = r.default; o.mode || (o.start_date && o.end_date || o.start_date && o.duration) && (d = r.fixedDuration), s = o.id || !o.$id || u[o.$id] ? o.id && !u[o.id] ? o.id : t.uid() : o.$id, u[s] = !0; var h = { id: s, start_date: o.start_date, duration: o.duration, end_date: o.end_date, delay: o.delay, task_id: e.id, resource_id: o.resource_id, value: o.value, mode: o.mode || d }; h.start_date && h.start_date.getMonth && h.end_date && h.end_date.getMonth && "number" == typeof h.duration || a(h, e), l.push(h) }) } return l } function c(e) { if (t.isTaskExists(e)) { var n = t.getTask(e); u(n, t.getTaskAssignments(n.id)) } } function u(r, a) { a.sort(function(t, e) { return t.start_date && e.start_date && t.start_date.valueOf() != e.start_date.valueOf() ? t.start_date - e.start_date : 0 }), i == n.assignmentsArray ? r[t.config.resource_property] = a : i == n.resourceValueArray && (r[t.config.resource_property] = a.map(function(t) { return { $id: t.id, start_date: t.start_date, duration: t.duration, end_date: t.end_date, delay: t.delay, resource_id: t.resource_id, value: t.value, mode: t.mode } })), r[e] = a } function d(e) { var n = l(e) , i = []; return n.forEach(function(e) { e.id = e.id || t.uid(), i.push(e) }), n } function h(t, e) { var a = function(t, e) { var r = { inBoth: [], inTaskNotInStore: [], inStoreNotInTask: [] }; if (i == n.singleValue) { var a = t[0] , o = a ? a.resource_id : null , s = !1; e.forEach(function(t) { t.resource_id != o ? r.inStoreNotInTask.push(t) : t.resource_id == o && (r.inBoth.push({ store: t, task: a }), s = !0) }), !s && a && r.inTaskNotInStore.push(a) } else if (i == n.valueArray) { var l = {} , c = {} , u = {}; t.forEach(function(t) { l[t.resource_id] = t }), e.forEach(function(t) { c[t.resource_id] = t }), t.concat(e).forEach(function(t) { if (!u[t.resource_id]) { u[t.resource_id] = !0; var e = l[t.resource_id] , n = c[t.resource_id]; e && n ? r.inBoth.push({ store: n, task: e }) : e && !n ? r.inTaskNotInStore.push(e) : !e && n && r.inStoreNotInTask.push(n) } }) } else i != n.assignmentsArray && i != n.resourceValueArray || (l = {}, c = {}, u = {}, t.forEach(function(t) { l[t.id || t.$id] = t }), e.forEach(function(t) { c[t.id] = t }), t.concat(e).forEach(function(t) { var e = t.id || t.$id; if (!u[e]) { u[e] = !0; var n = l[e] , i = c[e]; n && i ? r.inBoth.push({ store: i, task: n }) : n && !i ? r.inTaskNotInStore.push(n) : !n && i && r.inStoreNotInTask.push(i) } })); return r }(l(t), e); a.inStoreNotInTask.forEach(function(t) { o.removeItem(t.id) }), a.inTaskNotInStore.forEach(function(t) { o.addItem(t) }), a.inBoth.forEach(function(e) { if (function(t, e) { var n = { id: !0 }; for (var i in t) if (!n[i] && String(t[i]) !== String(e[i])) return !0; return !1 }(e.task, e.store)) !function(t, e) { var n = { id: !0 }; for (var i in t) n[i] || (e[i] = t[i]) }(e.task, e.store), o.updateItem(e.store.id); else if (e.task.start_date && e.task.end_date && e.task.mode !== r.fixedDates) { var n = s(e.store, t); e.store.start_date.valueOf() == n.start_date.valueOf() && e.store.end_date.valueOf() == n.end_date.valueOf() || (e.store.start_date = n.start_date, e.store.end_date = n.end_date, e.store.duration = n.duration, o.updateItem(e.store.id)) } }), c(t.id) } function f(t) { var n = t[e] || o.find(function(e) { return e.task_id == t.id }); h(t, n) } t.$data.assignmentsStore = o, t.attachEvent("onGanttReady", function() { if (t.config.process_resource_assignments) { t.attachEvent("onParse", function() { t.silent(function() { o.clearAll(); var e = []; t.eachTask(function(n) { if (n.type !== t.config.types.project) { var i = d(n); u(n, i), i.forEach(function(t) { e.push(t) }) } }), o.parse(e) }) }); var e = !1 , n = !1 , i = {} , r = !1; t.attachEvent("onBeforeBatchUpdate", function() { e = !0 }), t.attachEvent("onAfterBatchUpdate", function() { if (n) { var r = {}; for (var a in i) r[a] = t.getTaskAssignments(i[a].id); for (var a in i) h(i[a], r[a]) } n = !1, e = !1, i = {} }), t.attachEvent("onTaskCreated", function(t) { var e = d(t); return o.parse(e), u(t, e), !0 }), t.attachEvent("onAfterTaskUpdate", function(t, r) { e ? (n = !0, i[t] = r) : f(r) }), t.attachEvent("onAfterTaskAdd", function(t, r) { e ? (n = !0, i[t] = r) : f(r) }), t.attachEvent("onRowDragEnd", function(e) { f(t.getTask(e)) }), t.$data.tasksStore.attachEvent("onAfterDeleteConfirmed", function(e, n) { var i = [e]; t.eachTask(function(t) { i.push(t.id) }, e), function(t) { var e = {}; t.forEach(function(t) { e[t] = !0 }), o.find(function(t) { return e[t.task_id] }).forEach(function(t) { o.removeItem(t.id) }) }(i) }), t.$data.tasksStore.attachEvent("onClearAll", function() { return a = null, s = null, l = null, o.clearAll(), !0 }), t.attachEvent("onTaskIdChange", function(t, e) { o.find(function(e) { return e.task_id == t }).forEach(function(t) { t.task_id = e, o.updateItem(t.id) }), c(e) }), t.attachEvent("onBeforeUndo", function(t) { return r = !0, !0 }), t.attachEvent("onAfterUndo", function(t) { r = !0 }); var a = null , s = null , l = null; o.attachEvent("onStoreUpdated", function() { return !(!e || r) || (a = null, s = null, l = null, !0) }), t.getResourceAssignments = function(e, n) { var i = t.defined(n) && null !== n; return null === a && (a = {}, s = {}, o.eachItem(function(t) { a[t.resource_id] || (a[t.resource_id] = []), a[t.resource_id].push(t); var e = t.resource_id + "-" + t.task_id; s[e] || (s[e] = []), s[e].push(t) })), i ? (s[e + "-" + n] || []).slice() : (a[e] || []).slice() } , t.getTaskAssignments = function(t) { if (null === l) { var e = []; l = {}, o.eachItem(function(n) { l[n.task_id] || (l[n.task_id] = []), l[n.task_id].push(n), n.task_id == t && e.push(n) }) } return (l[t] || []).slice() } , t.getTaskResources = function(e) { var n = t.getDatastore("resource") , i = {}; t.getTaskAssignments(e).forEach(function(t) { i[t.resource_id] || (i[t.resource_id] = t.resource_id) }); var r = []; for (var a in i) { var o = n.getItem(i[a]); o && r.push(o) } return r } , t.updateTaskAssignments = c } }, { once: !0 }) } } , function(t, e, n) { var i = n(2); function r(t) { var e = {} , n = !1; t.$data.tasksStore.attachEvent("onStoreUpdated", function() { e = {}, n = !1 }), t.attachEvent("onBeforeGanttRender", function() { e = {} }); var r = String(Math.random()); function a(t) { return null === t ? r + String(t) : String(t) } function o(t, e, n) { return Array.isArray(t) ? t.map(function(t) { return a(t) }).join("_") + "_".concat(e, "_").concat(n) : a(t) + "_".concat(e, "_").concat(n) } function s(r, s, l) { var c, u = o(s, r, JSON.stringify(l)), d = {}; return i.forEach(s, function(t) { d[a(t)] = !0 }), e[u] ? c = e[u] : (c = e[u] = [], t.eachTask(function(s) { if (l) { if (!l[t.getTaskType(s)]) return } else if (s.type == t.config.types.project) return; var u; r in s && (u = i.isArray(s[r]) ? s[r] : [s[r]], i.forEach(u, function(t) { var i = t && t.resource_id ? t.resource_id : t; if (d[a(i)]) c.push(s); else if (!n) { var l = o(t, r); e[l] || (e[l] = []), e[l].push(s) } })) }), n = !0), c } function l(e, n, i) { var r = t.config.resource_property , a = []; if (t.getDatastore("task").exists(n)) { var o = t.getTask(n); a = o[r] || [] } Array.isArray(a) || (a = [a]); for (var s = 0; s < a.length; s++) a[s].resource_id == e && i.push({ task_id: o.id, resource_id: a[s].resource_id, value: a[s].value }) } return { getTaskBy: function(e, n, r) { return "function" == typeof e ? function(e) { var n = []; return t.eachTask(function(t) { e(t) && n.push(t) }), n }(e) : i.isArray(n) ? s(e, n, r) : s(e, [n], r) }, getResourceAssignments: function(e, n) { var i = [] , r = t.config.resource_property; return void 0 !== n ? l(e, n, i) : t.getTaskBy(r, e).forEach(function(t) { l(e, t.id, i) }), i } } } t.exports = function(t) { var e = r(t); t.ext.resources = function(t) { var e = { renderEditableLabel: function(e, n, i, r, a) { var o = t.config.readonly ? "" : "contenteditable"; if (e < i.end_date && n > i.start_date) { for (var s = 0; s < a.length; s++) { var l = a[s]; return "
" + l.value + "
" } return "
-
" } return "" }, renderSummaryLabel: function(t, e, n, i, r) { var a = r.reduce(function(t, e) { return t + Number(e.value) }, 0); return a % 1 && (a = Math.round(10 * a) / 10), a ? "
" + a + "
" : "" }, editableResourceCellTemplate: function(t, n, i, r, a) { return "task" === i.$role ? e.renderEditableLabel(t, n, i, r, a) : e.renderSummaryLabel(t, n, i, r, a) }, editableResourceCellClass: function(t, e, n, i, r) { var a = []; a.push("resource_marker"), "task" === n.$role ? a.push("task_cell") : a.push("resource_cell"); var o = r.reduce(function(t, e) { return t + Number(e.value) }, 0) , s = Number(n.capacity); return isNaN(s) && (s = 8), o <= s ? a.push("workday_ok") : a.push("workday_over"), a.join(" ") }, getSummaryResourceAssignments: function(e) { var n, i = t.getDatastore(t.config.resource_store), r = i.getItem(e); return "task" === r.$role ? n = t.getResourceAssignments(r.$resource_id, r.$task_id) : (n = t.getResourceAssignments(e), i.eachItem && i.eachItem(function(e) { "task" !== e.$role && (n = n.concat(t.getResourceAssignments(e.id))) }, e)), n }, initEditableDiagram: function() { t.config.resource_render_empty_cells = !0, function() { var e = null; function n() { return e && cancelAnimationFrame(e), e = requestAnimationFrame(function() { Array.prototype.slice.call(t.$container.querySelectorAll(".resourceTimeline_cell [data-assignment-cell]")).forEach(function(t) { t.contentEditable = !0 }) }), !0 } t.attachEvent("onGanttReady", function() { t.getDatastore(t.config.resource_assignment_store).attachEvent("onStoreUpdated", n), t.getDatastore(t.config.resource_store).attachEvent("onStoreUpdated", n) }, { once: !0 }), t.attachEvent("onGanttLayoutReady", function() { t.$layout.getCellsByType("viewCell").forEach(function(t) { t.$config && "resourceTimeline" === t.$config.view && t.$content && t.$content.attachEvent("onScroll", n) }) }) }(), t.attachEvent("onGanttReady", function() { var e = !1; t.event(t.$container, "keypress", function(t) { var e = t.target.closest(".resourceTimeline_cell [data-assignment-cell]"); e && (13 !== t.keyCode && 27 !== t.keyCode || e.blur()) }), t.event(t.$container, "focusout", function(n) { if (!e) { e = !0, setTimeout(function() { e = !1 }, 300); var i = n.target.closest(".resourceTimeline_cell [data-assignment-cell]"); if (i) { var r = (i.innerText || "").trim(); "-" == r && (r = "0"); var a = Number(r) , o = i.getAttribute("data-row-id") , s = i.getAttribute("data-assignment-id") , l = i.getAttribute("data-task") , c = i.getAttribute("data-resource-id") , u = t.templates.parse_date(i.getAttribute("data-start-date")) , d = t.templates.parse_date(i.getAttribute("data-end-date")) , h = t.getDatastore(t.config.resource_assignment_store); if (isNaN(a)) t.getDatastore(t.config.resource_store).refresh(o); else { var f = t.getTask(l); if (t.plugins().undo && t.ext.undo.saveState(l, "task"), s) { if (a === (g = h.getItem(s)).value) return; if (g.start_date.valueOf() === u.valueOf() && g.end_date.valueOf() === d.valueOf()) g.value = a, a ? h.updateItem(g.id) : h.removeItem(g.id); else { if (g.end_date.valueOf() > d.valueOf()) { var _ = t.copy(g); _.id = t.uid(), _.start_date = d, _.duration = t.calculateDuration({ start_date: _.start_date, end_date: _.end_date, task: f }), _.delay = t.calculateDuration({ start_date: f.start_date, end_date: _.start_date, task: f }), _.mode = g.mode || "default", 0 !== _.duration && h.addItem(_) } g.start_date.valueOf() < u.valueOf() ? (g.end_date = u, g.duration = t.calculateDuration({ start_date: g.start_date, end_date: g.end_date, task: f }), g.mode = "fixedDuration", 0 === g.duration ? h.removeItem(g.id) : h.updateItem(g.id)) : h.removeItem(g.id), a && h.addItem({ task_id: g.task_id, resource_id: g.resource_id, value: a, start_date: u, end_date: d, duration: t.calculateDuration({ start_date: u, end_date: d, task: f }), delay: t.calculateDuration({ start_date: f.start_date, end_date: u, task: f }), mode: "fixedDuration" }) } t.updateTaskAssignments(f.id), t.updateTask(f.id) } else if (a) { var g = { task_id: l, resource_id: c, value: a, start_date: u, end_date: d, duration: t.calculateDuration({ start_date: u, end_date: d, task: f }), delay: t.calculateDuration({ start_date: f.start_date, end_date: u, task: f }), mode: "fixedDuration" }; h.addItem(g), t.updateTaskAssignments(f.id), t.updateTask(f.id) } } } } }) }, { once: !0 }) } }; return e }(t), t.config.resources = { dataprocessor_assignments: !1, dataprocessor_resources: !1, editable_resource_diagram: !1, resource_store: { type: "treeDataStore", fetchTasks: !1, initItem: function(e) { return e.parent = e.parent || t.config.root_id, e[t.config.resource_property] = e.parent, e.open = !0, e } }, lightbox_resources: function(e) { var n = [] , i = t.getDatastore(t.config.resource_store); return e.forEach(function(e) { if (!i.hasChild(e.id)) { var r = t.copy(e); r.key = e.id, r.label = e.text, n.push(r) } }), n } }, t.attachEvent("onBeforeGanttReady", function() { if (!t.getDatastore(t.config.resource_store)) { var e = t.config.resources ? t.config.resources.resource_store : void 0 , n = e ? e.fetchTasks : void 0; t.config.resources && t.config.resources.editable_resource_diagram && (n = !0); var i = function(e) { return e.parent = e.parent || t.config.root_id, e[t.config.resource_property] = e.parent, e.open = !0, e }; e && e.initItem && (i = e.initItem); var r = e && e.type ? e.type : "treeDatastore"; t.$resourcesStore = t.createDatastore({ name: t.config.resource_store, type: r, fetchTasks: void 0 !== n && n, initItem: i }), t.$data.resourcesStore = t.$resourcesStore, t.$resourcesStore.attachEvent("onParse", function() { var e = function(e) { var n = []; return e.forEach(function(e) { if (!t.$resourcesStore.hasChild(e.id)) { var i = t.copy(e); i.key = e.id, i.label = e.text, n.push(i) } }), n }; t.config.resources && t.config.resources.lightbox_resources && (e = t.config.resources.lightbox_resources); var n = e(t.$resourcesStore.getItems()); t.updateCollection("resourceOptions", n) }) } }), t.getTaskBy = e.getTaskBy, t.getResourceAssignments = e.getResourceAssignments, t.config.resource_property = "owner_id", t.config.resource_store = "resource", t.config.resource_render_empty_cells = !1, t.templates.histogram_cell_class = function(t, e, n, i, r) {} , t.templates.histogram_cell_label = function(t, e, n, i, r) { return i.length + "/3" } , t.templates.histogram_cell_allocated = function(t, e, n, i, r) { return i.length / 3 } , t.templates.histogram_cell_capacity = function(t, e, n, i, r) { return 0 } ; var n = function(t, e, n, i, r) { return i.length <= 1 ? "gantt_resource_marker_ok" : "gantt_resource_marker_overtime" } , i = function(t, e, n, i, r) { return 8 * i.length }; t.templates.resource_cell_value = i, t.templates.resource_cell_class = n, t.attachEvent("onBeforeGanttReady", function() { t.config.resources && t.config.resources.editable_resource_diagram && (t.config.resource_render_empty_cells = !0, t.templates.resource_cell_value === i && (t.templates.resource_cell_value = t.ext.resources.editableResourceCellTemplate), t.templates.resource_cell_class === n && (t.templates.resource_cell_class = t.ext.resources.editableResourceCellClass), t.ext.resources.initEditableDiagram(t)) }) } } , function(t, e) { t.exports = function(t) { var e = function(t) { return { _needRecalc: !0, reset: function() { this._needRecalc = !0 }, _isRecalcNeeded: function() { return !this._isGroupSort() && this._needRecalc }, _isGroupSort: function() { return !!t.getState().group_mode }, _getWBSCode: function(t) { return t ? (this._isRecalcNeeded() && this._calcWBS(), t.$virtual ? "" : this._isGroupSort() ? t.$wbs || "" : (t.$wbs || (this.reset(), this._calcWBS()), t.$wbs)) : "" }, _setWBSCode: function(t, e) { t.$wbs = e }, getWBSCode: function(t) { return this._getWBSCode(t) }, getByWBSCode: function(e) { for (var n = e.split("."), i = t.config.root_id, r = 0; r < n.length; r++) { var a = t.getChildren(i) , o = 1 * n[r] - 1; if (!t.isTaskExists(a[o])) return null; i = a[o] } return t.isTaskExists(i) ? t.getTask(i) : null }, _calcWBS: function() { if (this._isRecalcNeeded()) { var e = !0; t.eachTask(function(n) { if (e) return e = !1, void this._setWBSCode(n, "1"); var i = t.getPrevSibling(n.id); if (null !== i) { var r = t.getTask(i).$wbs; r && ((r = r.split("."))[r.length - 1]++, this._setWBSCode(n, r.join("."))) } else { var a = t.getParent(n.id); this._setWBSCode(n, t.getTask(a).$wbs + ".1") } }, t.config.root_id, this), this._needRecalc = !1 } } } }(t); function n() { return e.reset(), !0 } t.getWBSCode = function(t) { return e.getWBSCode(t) } , t.getTaskByWBSCode = function(t) { return e.getByWBSCode(t) } , t.attachEvent("onAfterTaskMove", n), t.attachEvent("onBeforeParse", n), t.attachEvent("onAfterTaskDelete", n), t.attachEvent("onAfterTaskAdd", n), t.attachEvent("onAfterSort", n) } } , function(t, e, n) { var i = n(21); function r(t) { var e = {} , n = !1; function r(t, n) { n = "function" == typeof n ? n : function() {} , e[t] || (e[t] = this[t], this[t] = n) } function a(t) { e[t] && (this[t] = e[t], e[t] = null) } function o() { for (var t in e) a.call(this, t) } function s(t) { try { t() } catch (t) { i.console.error(t) } } return t.$services.getService("state").registerProvider("batchUpdate", function() { return { batch_update: n } }, !1), function(t, e) { if (n) s(t); else { var i, a = this._dp && "off" != this._dp.updateMode; a && (i = this._dp.updateMode, this._dp.setUpdateMode("off")); var l = {} , c = { render: !0, refreshData: !0, refreshTask: !0, refreshLink: !0, resetProjectDates: function(t) { l[t.id] = t } }; for (var u in function(t) { for (var e in t) r.call(this, e, t[e]) } .call(this, c), n = !0, this.callEvent("onBeforeBatchUpdate", []), s(t), this.callEvent("onAfterBatchUpdate", []), o.call(this), l) this.resetProjectDates(l[u]); n = !1, e || this.render(), a && (this._dp.setUpdateMode(i), this._dp.setGanttMode("task"), this._dp.sendData(), this._dp.setGanttMode("link"), this._dp.sendData()) } } } t.exports = function(t) { t.batchUpdate = r(t) } } , function(t, e, n) { t.exports = function(t) { t.ext || (t.ext = {}); for (var e = [n(220), n(219), n(218), n(217), n(216), n(215), n(214), n(212).default], i = 0; i < e.length; i++) e[i] && e[i](t) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(0) , r = function() { function t() { var t = this; this.clear = function() { t._storage = {} } , this.storeItem = function(e) { t._storage[e.id] = i.copy(e) } , this.getStoredItem = function(e) { return t._storage[e] || null } , this._storage = {} } return t.create = function() { return new t } , t }(); e.default = r } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function(t, e) { t.getUserData = function(t, e, n) { return this.userdata || (this.userdata = {}), this.userdata[n] = this.userdata[n] || {}, this.userdata[n][t] && this.userdata[n][t][e] ? this.userdata[n][t][e] : "" } , t.setUserData = function(t, e, n, i) { this.userdata || (this.userdata = {}), this.userdata[i] = this.userdata[i] || {}, this.userdata[i][t] = this.userdata[i][t] || {}, this.userdata[i][t][e] = n } , t._change_id = function(t, e) { switch (this._dp._ganttMode) { case "task": this.changeTaskId(t, e); break; case "link": this.changeLinkId(t, e); break; case "assignment": this.$data.assignmentsStore.changeId(t, e); break; case "resource": this.$data.resourcesStore.changeId(t, e); break; default: throw new Error("Invalid mode of the dataProcessor after database id is received: " + this._dp._ganttMode + ", new id: " + e) } } , t._row_style = function(e, n) { "task" === this._dp._ganttMode && t.isTaskExists(e) && (t.getTask(e).$dataprocessor_class = n, t.refreshTask(e)) } , t._delete_task = function(t, e) {} , t._sendTaskOrder = function(t, e) { e.$drop_target && (this._dp.setGanttMode("task"), this.getTask(t).target = e.$drop_target, this._dp.setUpdated(t, !0, "order"), delete this.getTask(t).$drop_target) } , t.setDp = function() { this._dp = e } , t.setDp() } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(2) , r = function() { function t(t, e) { this.$gantt = t, this.$dp = e, this._dataProcessorHandlers = [] } return t.prototype.attach = function() { var t = this , e = this.$dp , i = this.$gantt , r = n(45) , a = {} , o = function(n) { return t.clientSideDelete(n, e, i) }; this._dataProcessorHandlers.push(i.attachEvent("onAfterTaskAdd", function(t, n) { i.isTaskExists(t) && (e.setGanttMode("tasks"), e.setUpdated(t, !0, "inserted")) })), this._dataProcessorHandlers.push(i.attachEvent("onAfterTaskUpdate", function(t, n) { i.isTaskExists(t) && (e.setGanttMode("tasks"), e.setUpdated(t, !0), i._sendTaskOrder && i._sendTaskOrder(t, n)) })), this._dataProcessorHandlers.push(i.attachEvent("onBeforeTaskDelete", function(t, n) { return i.config.cascade_delete && (a[t] = { tasks: r.getSubtreeTasks(i, t), links: r.getSubtreeLinks(i, t) }), !e.deleteAfterConfirmation || (e.setGanttMode("tasks"), e.setUpdated(t, !0, "deleted"), !1) })), this._dataProcessorHandlers.push(i.attachEvent("onAfterTaskDelete", function(t, n) { e.setGanttMode("tasks"); var r = !o(t) , s = i.config.cascade_delete && a[t]; if (r || s) { if (s) { var l = e.updateMode; e.setUpdateMode("off"); var c = a[t]; for (var u in c.tasks) o(u) || (e.storeItem(c.tasks[u]), e.setUpdated(u, !0, "deleted")); for (var u in e.setGanttMode("links"), c.links) o(u) || (e.storeItem(c.links[u]), e.setUpdated(u, !0, "deleted")); a[t] = null, "off" !== l && e.sendAllData(), e.setGanttMode("tasks"), e.setUpdateMode(l) } r && (e.storeItem(n), e.deleteAfterConfirmation || e.setUpdated(t, !0, "deleted")), "off" === e.updateMode || e._tSend || e.sendAllData() } })), this._dataProcessorHandlers.push(i.attachEvent("onAfterLinkUpdate", function(t, n) { i.isLinkExists(t) && (e.setGanttMode("links"), e.setUpdated(t, !0)) })), this._dataProcessorHandlers.push(i.attachEvent("onAfterLinkAdd", function(t, n) { i.isLinkExists(t) && (e.setGanttMode("links"), e.setUpdated(t, !0, "inserted")) })), this._dataProcessorHandlers.push(i.attachEvent("onAfterLinkDelete", function(t, n) { e.setGanttMode("links"), !o(t) && (e.storeItem(n), e.setUpdated(t, !0, "deleted")) })), this._dataProcessorHandlers.push(i.attachEvent("onRowDragEnd", function(t, e) { i._sendTaskOrder(t, i.getTask(t)) })); var s = null , l = null; this._dataProcessorHandlers.push(i.attachEvent("onTaskIdChange", function(t, n) { if (e._waitMode) { var r = i.getChildren(n); if (r.length) { s = s || {}; for (var a = 0; a < r.length; a++) { var o = this.getTask(r[a]); s[o.id] = o } } var c = function(t) { var e = []; return t.$source && (e = e.concat(t.$source)), t.$target && (e = e.concat(t.$target)), e }(this.getTask(n)); if (c.length) { l = l || {}; for (a = 0; a < c.length; a++) { var u = this.getLink(c[a]); l[u.id] = u } } } })), e.attachEvent("onAfterUpdateFinish", function() { (s || l) && (i.batchUpdate(function() { for (var t in s) i.updateTask(s[t].id); for (var t in l) i.updateLink(l[t].id); s = null, l = null }), s ? i._dp.setGanttMode("tasks") : i._dp.setGanttMode("links")) }), e.attachEvent("onBeforeDataSending", function() { if ("CUSTOM" === this._tMode) return !0; var t = this._serverProcessor; if ("REST-JSON" === this._tMode || "REST" === this._tMode) { var e = this._ganttMode; t = t.substring(0, t.indexOf("?") > -1 ? t.indexOf("?") : t.length), this.serverProcessor = t + ("/" === t.slice(-1) ? "" : "/") + e } else { var n = this._ganttMode + "s"; this.serverProcessor = t + i.ajax.urlSeparator(t) + "gantt_mode=" + n } return !0 }), e.attachEvent("insertCallback", function(t, e, n, r) { var a = t.data || i.xml._xmlNodeToJSON(t.firstChild) , o = { add: i.addTask, isExist: i.isTaskExists }; "links" === r && (o.add = i.addLink, o.isExist = i.isLinkExists), o.isExist.call(i, e) || (a.id = e, o.add.call(i, a)) }), e.attachEvent("updateCallback", function(t, e) { var n = t.data || i.xml._xmlNodeToJSON(t.firstChild); if (i.isTaskExists(e)) { var r = i.getTask(e); for (var a in n) { var o = n[a]; switch (a) { case "id": continue; case "start_date": case "end_date": o = i.defined(i.templates.xml_date) ? i.templates.xml_date(o) : i.templates.parse_date(o); break; case "duration": r.end_date = i.calculateEndDate({ start_date: r.start_date, duration: o, task: r }) } r[a] = o } i.updateTask(e), i.refreshData() } }), e.attachEvent("deleteCallback", function(t, e, n, r) { var a = { delete: i.deleteTask, isExist: i.isTaskExists }; "links" === r ? (a.delete = i.deleteLink, a.isExist = i.isLinkExists) : "assignment" === r && (a.delete = function(t) { i.$data.assignmentsStore.remove(t) } , a.isExist = function(t) { return i.$data.assignmentsStore.exists(t) } ), a.isExist.call(i, e) && a.delete.call(i, e) }), this.handleResourceCRUD(e, i), this.handleResourceAssignmentCRUD(e, i) } , t.prototype.clientSideDelete = function(t, e, n) { var i = e.updatedRows.slice() , r = !1; "true_deleted" === n.getUserData(t, "!nativeeditor_status", e._ganttMode) && (r = !0, e.setUpdated(t, !1)); for (var a = 0; a < i.length && !e._in_progress[t]; a++) i[a] === t && ("inserted" === n.getUserData(t, "!nativeeditor_status", e._ganttMode) && (r = !0), e.setUpdated(t, !1)); return r } , t.prototype.handleResourceAssignmentCRUD = function(t, e) { var n = this; if (e.config.resources && !0 === e.config.resources.dataprocessor_assignments) { var i = e.getDatastore(e.config.resource_assignment_store) , r = {} , a = {}; e.attachEvent("onBeforeTaskAdd", function(t, e) { return r[t] = !0, !0 }), e.attachEvent("onTaskIdChange", function(t, e) { delete r[t] }), i.attachEvent("onAfterAdd", function(t, e) { r[e.task_id] ? function(t) { a[t.id] = t, r[t.task_id] = !0 }(e) : o(e) }), i.attachEvent("onAfterUpdate", function(e, n) { i.exists(e) && (a[e] ? o(n) : (t.setGanttMode("assignment"), t.setUpdated(e, !0))) }), i.attachEvent("onAfterDelete", function(i, r) { t.setGanttMode("assignment"), !n.clientSideDelete(i, t, e) && (t.storeItem(r), t.setUpdated(i, !0, "deleted")) }) } function o(e) { var n = e.id; i.exists(n) && (t.setGanttMode("assignment"), t.setUpdated(n, !0, "inserted")), delete a[n] } } , t.prototype.handleResourceCRUD = function(t, e) { var n = this; if (e.config.resources && !0 === e.config.resources.dataprocessor_resources) { var i = e.getDatastore(e.config.resource_store); i.attachEvent("onAfterAdd", function(e, n) { !function(e) { var n = e.id; i.exists(n) && (t.setGanttMode("resource"), t.setUpdated(n, !0, "inserted")) }(n) }), i.attachEvent("onAfterUpdate", function(e, n) { i.exists(e) && (t.setGanttMode("resource"), t.setUpdated(e, !0)) }), i.attachEvent("onAfterDelete", function(i, r) { t.setGanttMode("resource"), !n.clientSideDelete(i, t, e) && (t.storeItem(r), t.setUpdated(i, !0, "deleted")) }) } } , t.prototype.detach = function() { var t = this; i.forEach(this._dataProcessorHandlers, function(e) { t.$gantt.detachEvent(e) }), this._dataProcessorHandlers = [] } , t }(); e.default = r } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(5) , r = n(2) , a = n(0) , o = n(224) , s = n(223) , l = n(222); e.createDataProcessor = function(t) { var e, n; t instanceof Function ? e = t : t.hasOwnProperty("router") ? e = t.router : (t.hasOwnProperty("assignment") || t.hasOwnProperty("link") || t.hasOwnProperty("task")) && (e = t), n = e ? "CUSTOM" : t.mode || "REST-JSON"; var i = new c(t.url); return i.init(this), i.setTransactionMode({ mode: n, router: e }, t.batchUpdate), t.deleteAfterConfirmation && (i.deleteAfterConfirmation = t.deleteAfterConfirmation), i } ; var c = function() { function t(t) { this.serverProcessor = t, this.action_param = "!nativeeditor_status", this.updatedRows = [], this.autoUpdate = !0, this.updateMode = "cell", this._headers = null, this._payload = null, this._postDelim = "_", this._routerParametersFormat = "parameters", this._waitMode = 0, this._in_progress = {}, this._storage = l.default.create(), this._invalid = {}, this.messages = [], this.styles = { updated: "font-weight:bold;", inserted: "font-weight:bold;", deleted: "text-decoration : line-through;", invalid: "background-color:FFE0E0;", invalid_cell: "border-bottom:2px solid red;", error: "color:red;", clear: "font-weight:normal;text-decoration:none;" }, this.enableUTFencoding(!0), i(this) } return t.prototype.setTransactionMode = function(t, e) { "object" == typeof t ? (this._tMode = t.mode || this._tMode, a.defined(t.headers) && (this._headers = t.headers), a.defined(t.payload) && (this._payload = t.payload), this._tSend = !!e) : (this._tMode = t, this._tSend = e), "REST" === this._tMode && (this._tSend = !1), "JSON" === this._tMode || "REST-JSON" === this._tMode ? (this._tSend = !1, this._serializeAsJson = !0, this._headers = this._headers || {}, this._headers["Content-Type"] = "application/json") : this._headers && !this._headers["Content-Type"] && (this._headers["Content-Type"] = "application/x-www-form-urlencoded"), "CUSTOM" === this._tMode && (this._tSend = !1, this._router = t.router) } , t.prototype.escape = function(t) { return this._utf ? encodeURIComponent(t) : escape(t) } , t.prototype.enableUTFencoding = function(t) { this._utf = !!t } , t.prototype.getSyncState = function() { return !this.updatedRows.length } , t.prototype.setUpdateMode = function(t, e) { this.autoUpdate = "cell" === t, this.updateMode = t, this.dnd = e } , t.prototype.ignore = function(t, e) { this._silent_mode = !0, t.call(e || window), this._silent_mode = !1 } , t.prototype.setUpdated = function(t, e, n) { if (!this._silent_mode) { var i = this.findRow(t); n = n || "updated"; var r = this.$gantt.getUserData(t, this.action_param, this._ganttMode); r && "updated" === n && (n = r), e ? (this.set_invalid(t, !1), this.updatedRows[i] = t, this.$gantt.setUserData(t, this.action_param, n, this._ganttMode), this._in_progress[t] && (this._in_progress[t] = "wait")) : this.is_invalid(t) || (this.updatedRows.splice(i, 1), this.$gantt.setUserData(t, this.action_param, "", this._ganttMode)), this.markRow(t, e, n), e && this.autoUpdate && this.sendData(t) } } , t.prototype.markRow = function(t, e, n) { var i = "" , r = this.is_invalid(t); if (r && (i = this.styles[r], e = !0), this.callEvent("onRowMark", [t, e, n, r]) && (i = this.styles[e ? n : "clear"] + " " + i, this.$gantt[this._methods[0]](t, i), r && r.details)) { i += this.styles[r + "_cell"]; for (var a = 0; a < r.details.length; a++) r.details[a] && this.$gantt[this._methods[1]](t, a, i) } } , t.prototype.getActionByState = function(t) { return "inserted" === t ? "create" : "updated" === t ? "update" : "deleted" === t ? "delete" : "update" } , t.prototype.getState = function(t) { return this.$gantt.getUserData(t, this.action_param, this._ganttMode) } , t.prototype.is_invalid = function(t) { return this._invalid[t] } , t.prototype.set_invalid = function(t, e, n) { n && (e = { value: e, details: n, toString: function() { return this.value.toString() } }), this._invalid[t] = e } , t.prototype.checkBeforeUpdate = function(t) { return !0 } , t.prototype.sendData = function(t) { var e = this; if (this.$gantt.editStop && this.$gantt.editStop(), void 0 === t || this._tSend) { var n = []; if (this.modes) { ["task", "link", "assignment"].forEach(function(t) { e.modes[t] && e.modes[t].updatedRows.length && n.push(t) }) } if (n.length) { for (var i = 0; i < n.length; i++) this.setGanttMode(n[i]), this.sendAllData(); return } return this.sendAllData() } return !this._in_progress[t] && (this.messages = [], !(!this.checkBeforeUpdate(t) && this.callEvent("onValidationError", [t, this.messages])) && void this._beforeSendData(this._getRowData(t), t)) } , t.prototype.serialize = function(t, e) { if (this._serializeAsJson) return this._serializeAsJSON(t); if ("string" == typeof t) return t; if (void 0 !== e) return this.serialize_one(t, ""); var n = [] , i = []; for (var r in t) t.hasOwnProperty(r) && (n.push(this.serialize_one(t[r], r + this._postDelim)), i.push(r)); return n.push("ids=" + this.escape(i.join(","))), this.$gantt.security_key && n.push("dhx_security=" + this.$gantt.security_key), n.join("&") } , t.prototype.serialize_one = function(t, e) { if ("string" == typeof t) return t; var n = [] , i = ""; for (var r in t) if (t.hasOwnProperty(r)) { if (("id" === r || r == this.action_param) && "REST" === this._tMode) continue; i = "string" == typeof t[r] || "number" == typeof t[r] ? t[r] : JSON.stringify(t[r]), n.push(this.escape((e || "") + r) + "=" + this.escape(i)) } return n.join("&") } , t.prototype.sendAllData = function() { if (this.updatedRows.length) { this.messages = []; var t = !0; if (this._forEachUpdatedRow(function(e) { t = t && this.checkBeforeUpdate(e) }), !t && !this.callEvent("onValidationError", ["", this.messages])) return !1; this._tSend ? this._sendData(this._getAllData()) : this._forEachUpdatedRow(function(t) { if (!this._in_progress[t]) { if (this.is_invalid(t)) return; this._beforeSendData(this._getRowData(t), t) } }) } } , t.prototype.findRow = function(t) { var e = 0; for (e = 0; e < this.updatedRows.length && t != this.updatedRows[e]; e++) ; return e } , t.prototype.defineAction = function(t, e) { this._uActions || (this._uActions = {}), this._uActions[t] = e } , t.prototype.afterUpdateCallback = function(t, e, n, i, r) { var a = this; if (this.$gantt) { this.setGanttMode(r); var o = t , s = "error" !== n && "invalid" !== n; if (s || this.set_invalid(t, n), this._uActions && this._uActions[n] && !this._uActions[n](i)) return delete this._in_progress[o]; "wait" !== this._in_progress[o] && this.setUpdated(t, !1); var l = t; switch (n) { case "inserted": case "insert": e != t && (this.setUpdated(t, !1), this.$gantt[this._methods[2]](t, e), t = e); break; case "delete": case "deleted": if (this.deleteAfterConfirmation && "task" === this._ganttMode) { if ("task" === this._ganttMode && this.$gantt.isTaskExists(t)) { this.$gantt.setUserData(t, this.action_param, "true_deleted", this._ganttMode); var c = this.$gantt.getTask(t); this.$gantt.silent(function() { a.$gantt.deleteTask(t) }), this.$gantt.callEvent("onAfterTaskDelete", [t, c]), this.$gantt.render(), delete this._in_progress[o] } return this.callEvent("onAfterUpdate", [t, n, e, i]) } return this.$gantt.setUserData(t, this.action_param, "true_deleted", this._ganttMode), this.$gantt[this._methods[3]](t), delete this._in_progress[o], this.callEvent("onAfterUpdate", [t, n, e, i]) } "wait" !== this._in_progress[o] ? (s && this.$gantt.setUserData(t, this.action_param, "", this._ganttMode), delete this._in_progress[o]) : (delete this._in_progress[o], this.setUpdated(e, !0, this.$gantt.getUserData(t, this.action_param, this._ganttMode))), this.callEvent("onAfterUpdate", [l, n, e, i]) } } , t.prototype.afterUpdate = function(t, e, n) { var i, r = this; i = 3 === arguments.length ? arguments[1] : arguments[4]; var a = this.getGanttMode() , o = i.filePath || i.url; a = "REST" !== this._tMode && "REST-JSON" !== this._tMode ? -1 !== o.indexOf("gantt_mode=links") ? "link" : -1 !== o.indexOf("gantt_mode=assignments") ? "assignment" : "task" : o.indexOf("/link") >= 0 ? "link" : o.indexOf("/assignment") >= 0 ? "assignment" : "task", this.setGanttMode(a); var s, l = this.$gantt.ajax; try { s = JSON.parse(e.xmlDoc.responseText) } catch (t) { e.xmlDoc.responseText.length || (s = {}) } var c = function(e) { var n = s.action || r.getState(e) || "updated" , i = s.sid || e[0] , o = s.tid || e[0]; t.afterUpdateCallback(i, o, n, s, a) }; if (s) return Array.isArray(n) && n.length > 1 ? n.forEach(function(t) { return c(t) }) : c(n), t.finalizeUpdate(), void this.setGanttMode(a); var u = l.xmltop("data", e.xmlDoc); if (!u) return this.cleanUpdate(n); var d = l.xpath("//data/action", u); if (!d.length) return this.cleanUpdate(n); for (var h = 0; h < d.length; h++) { var f = d[h] , _ = f.getAttribute("type") , g = f.getAttribute("sid") , p = f.getAttribute("tid"); t.afterUpdateCallback(g, p, _, f, a) } t.finalizeUpdate() } , t.prototype.cleanUpdate = function(t) { if (t) for (var e = 0; e < t.length; e++) delete this._in_progress[t[e]] } , t.prototype.finalizeUpdate = function() { this._waitMode && this._waitMode--, this.callEvent("onAfterUpdateFinish", []), this.updatedRows.length || this.callEvent("onFullSync", []) } , t.prototype.init = function(t) { if (!this._initialized) { this.$gantt = t, this.$gantt._dp_init && this.$gantt._dp_init(this), this._setDefaultTransactionMode(), this.styles = { updated: "gantt_updated", order: "gantt_updated", inserted: "gantt_inserted", deleted: "gantt_deleted", delete_confirmation: "gantt_deleted", invalid: "gantt_invalid", error: "gantt_error", clear: "" }, this._methods = ["_row_style", "setCellTextStyle", "_change_id", "_delete_task"], s.default(this.$gantt, this); var e = new o.default(this.$gantt,this); e.attach(), this.attachEvent("onDestroy", function() { delete this.setGanttMode, delete this._getRowData, delete this.$gantt._dp, delete this.$gantt._change_id, delete this.$gantt._row_style, delete this.$gantt._delete_task, delete this.$gantt._sendTaskOrder, delete this.$gantt, e.detach() }), this.$gantt.callEvent("onDataProcessorReady", [this]), this._initialized = !0 } } , t.prototype.setOnAfterUpdate = function(t) { this.attachEvent("onAfterUpdate", t) } , t.prototype.setOnBeforeUpdateHandler = function(t) { this.attachEvent("onBeforeDataSending", t) } , t.prototype.setAutoUpdate = function(t, e) { var n = this; t = t || 2e3, this._user = e || (new Date).valueOf(), this._needUpdate = !1, this._updateBusy = !1, this.attachEvent("onAfterUpdate", this.afterAutoUpdate), this.attachEvent("onFullSync", this.fullSync), setInterval(function() { n.loadUpdate() }, t) } , t.prototype.afterAutoUpdate = function(t, e, n, i) { return "collision" !== e || (this._needUpdate = !0, !1) } , t.prototype.fullSync = function() { return this._needUpdate && (this._needUpdate = !1, this.loadUpdate()), !0 } , t.prototype.getUpdates = function(t, e) { var n = this.$gantt.ajax; if (this._updateBusy) return !1; this._updateBusy = !0, n.get(t, e) } , t.prototype.loadUpdate = function() { var t = this , e = this.$gantt.ajax , n = this.$gantt.getUserData(0, "version", this._ganttMode) , i = this.serverProcessor + e.urlSeparator(this.serverProcessor) + ["dhx_user=" + this._user, "dhx_version=" + n].join("&"); i = i.replace("editing=true&", ""), this.getUpdates(i, function(n) { var i = e.xpath("//userdata", n); t.$gantt.setUserData(0, "version", t._getXmlNodeValue(i[0]), t._ganttMode); var r = e.xpath("//update", n); if (r.length) { t._silent_mode = !0; for (var a = 0; a < r.length; a++) { var o = r[a].getAttribute("status") , s = r[a].getAttribute("id") , l = r[a].getAttribute("parent"); switch (o) { case "inserted": t.callEvent("insertCallback", [r[a], s, l]); break; case "updated": t.callEvent("updateCallback", [r[a], s, l]); break; case "deleted": t.callEvent("deleteCallback", [r[a], s, l]) } } t._silent_mode = !1 } t._updateBusy = !1 }) } , t.prototype.destructor = function() { this.callEvent("onDestroy", []), this.detachAllEvents(), this.updatedRows = [], this._in_progress = {}, this._invalid = {}, this._storage.clear(), this._storage = null, this._headers = null, this._payload = null, delete this._initialized } , t.prototype.setGanttMode = function(t) { "tasks" === t ? t = "task" : "links" === t && (t = "link"); var e = this.modes || {} , n = this.getGanttMode(); n && (e[n] = { _in_progress: this._in_progress, _invalid: this._invalid, _storage: this._storage, updatedRows: this.updatedRows }); var i = e[t]; i || (i = e[t] = { _in_progress: {}, _invalid: {}, _storage: l.default.create(), updatedRows: [] }), this._in_progress = i._in_progress, this._invalid = i._invalid, this._storage = i._storage, this.updatedRows = i.updatedRows, this.modes = e, this._ganttMode = t } , t.prototype.getGanttMode = function() { return this._ganttMode } , t.prototype.storeItem = function(t) { this._storage.storeItem(t) } , t.prototype.url = function(t) { this.serverProcessor = this._serverProcessor = t } , t.prototype._beforeSendData = function(t, e) { if (!this.callEvent("onBeforeUpdate", [e, this.getState(e), t])) return !1; this._sendData(t, e) } , t.prototype._serializeAsJSON = function(t) { if ("string" == typeof t) return t; var e = a.copy(t); return "REST-JSON" === this._tMode && (delete e.id, delete e[this.action_param]), JSON.stringify(e) } , t.prototype._applyPayload = function(t) { var e = this.$gantt.ajax; if (this._payload) for (var n in this._payload) t = t + e.urlSeparator(t) + this.escape(n) + "=" + this.escape(this._payload[n]); return t } , t.prototype._cleanupArgumentsBeforeSend = function(t) { var e; if (void 0 === t[this.action_param]) for (var n in e = {}, t) e[n] = this._cleanupArgumentsBeforeSend(t[n]); else e = this._cleanupItemBeforeSend(t); return e } , t.prototype._cleanupItemBeforeSend = function(t) { var e = null; return t && ("deleted" === t[this.action_param] ? ((e = {}).id = t.id, e[this.action_param] = t[this.action_param]) : e = t), e } , t.prototype._sendData = function(t, e) { var n = this; if (t) { if (!this.callEvent("onBeforeDataSending", e ? [e, this.getState(e), t] : [null, null, t])) return !1; e && (this._in_progress[e] = (new Date).valueOf()); var i = this.$gantt.ajax; if ("CUSTOM" !== this._tMode) { var r; r = { callback: function(i) { var r = []; if (e) r.push(e); else if (t) for (var a in t) r.push(a); return n.afterUpdate(n, i, r) }, headers: this._headers }; var a, o = "dhx_version=" + this.$gantt.getUserData(0, "version", this._ganttMode), s = this.serverProcessor + (this._user ? i.urlSeparator(this.serverProcessor) + ["dhx_user=" + this._user, o].join("&") : ""), l = this._applyPayload(s); switch (this._tMode) { case "GET": a = this._cleanupArgumentsBeforeSend(t), r.url = l + i.urlSeparator(l) + this.serialize(a, e), r.method = "GET"; break; case "POST": a = this._cleanupArgumentsBeforeSend(t), r.url = l, r.method = "POST", r.data = this.serialize(a, e); break; case "JSON": a = {}; var c = this._cleanupItemBeforeSend(t); for (var u in c) u !== this.action_param && "id" !== u && "gr_id" !== u && (a[u] = c[u]); r.url = l, r.method = "POST", r.data = JSON.stringify({ id: e, action: t[this.action_param], data: a }); break; case "REST": case "REST-JSON": switch (l = s.replace(/(&|\?)editing=true/, ""), a = "", this.getState(e)) { case "inserted": r.method = "POST", r.data = this.serialize(t, e); break; case "deleted": r.method = "DELETE", l = l + ("/" === l.slice(-1) ? "" : "/") + e; break; default: r.method = "PUT", r.data = this.serialize(t, e), l = l + ("/" === l.slice(-1) ? "" : "/") + e } r.url = this._applyPayload(l) } return this._waitMode++, i.query(r) } var d = this.getState(e) , h = this.getActionByState(d) , f = this.getGanttMode() , _ = function(t) { var i = d || "updated" , r = e , a = e; t && (i = t.action || d, r = t.sid || r, a = t.id || t.tid || a), n.afterUpdateCallback(r, a, i, t, f) } , g = void 0; if (this._router instanceof Function) if ("object" === this._routerParametersFormat) { var p = { entity: f, action: h, data: t, id: e }; g = this._router(p) } else g = this._router(f, h, t, e); else if (this._router[f]instanceof Function) g = this._router[f](h, t, e); else { var v = "Incorrect configuration of gantt.createDataProcessor" , m = "\nYou need to either add missing properties to the dataProcessor router object or to use a router function.\nSee https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details."; if (!this._router[f]) throw new Error(v + ": router for the **" + f + "** entity is not defined. " + m); switch (d) { case "inserted": if (!this._router[f].create) throw new Error(v + ": **create** action for the **" + f + "** entity is not defined. " + m); g = this._router[f].create(t); break; case "deleted": if (!this._router[f].delete) throw new Error(v + ": **delete** action for the **" + f + "** entity is not defined. " + m); g = this._router[f].delete(e); break; default: if (!this._router[f].update) throw new Error(v + ': **update**" action for the **' + f + "** entity is not defined. " + m); g = this._router[f].update(t, e) } } if (g) { if (!g.then && void 0 === g.id && void 0 === g.tid && void 0 === g.action) throw new Error("Incorrect router return value. A Promise or a response object is expected"); g.then ? g.then(_).catch(function(t) { t && t.action ? _(t) : _({ action: "error", value: t }) }) : _(g) } else _(null) } } , t.prototype._forEachUpdatedRow = function(t) { for (var e = this.updatedRows.slice(), n = 0; n < e.length; n++) { var i = e[n]; this.$gantt.getUserData(i, this.action_param, this._ganttMode) && t.call(this, i) } } , t.prototype._setDefaultTransactionMode = function() { this.serverProcessor && (this.setTransactionMode("POST", !0), this.serverProcessor += (-1 !== this.serverProcessor.indexOf("?") ? "&" : "?") + "editing=true", this._serverProcessor = this.serverProcessor) } , t.prototype._getXmlNodeValue = function(t) { return t.firstChild ? t.firstChild.nodeValue : "" } , t.prototype._getAllData = function() { var t = {} , e = !1; return this._forEachUpdatedRow(function(n) { if (!this._in_progress[n] && !this.is_invalid(n)) { var i = this._getRowData(n); this.callEvent("onBeforeUpdate", [n, this.getState(n), i]) && (t[n] = i, e = !0, this._in_progress[n] = (new Date).valueOf()) } }), e ? t : null } , t.prototype._prepareDate = function(t) { return this.$gantt.defined(this.$gantt.templates.xml_format) ? this.$gantt.templates.xml_format(t) : this.$gantt.templates.format_date(t) } , t.prototype._prepareArray = function(t, e) { var n = this; return e.push(t), t.map(function(t) { return r.isDate(t) ? n._prepareDate(t) : Array.isArray(t) && !r.arrayIncludes(e, t) ? n._prepareArray(t, e) : t && "object" == typeof t && !r.arrayIncludes(e, t) ? n._prepareObject(t, e) : t }) } , t.prototype._prepareObject = function(t, e) { var n = {}; for (var i in e.push(t), t) if ("$" !== i.substr(0, 1)) { var a = t[i]; r.isDate(a) ? n[i] = this._prepareDate(a) : null === a ? n[i] = "" : Array.isArray(a) && !r.arrayIncludes(e, a) ? n[i] = this._prepareArray(a, e) : a && "object" == typeof a && !r.arrayIncludes(e, a) ? n[i] = this._prepareObject(a, e) : n[i] = a } return n } , t.prototype._prepareDataItem = function(t) { var e = this._prepareObject(t, []); return e[this.action_param] = this.$gantt.getUserData(t.id, this.action_param, this._ganttMode), e } , t.prototype.getStoredItem = function(t) { return this._storage.getStoredItem(t) } , t.prototype._getRowData = function(t) { var e, n = this.$gantt; return "task" === this.getGanttMode() ? n.isTaskExists(t) && (e = this.$gantt.getTask(t)) : "assignment" === this.getGanttMode() ? this.$gantt.$data.assignmentsStore.exists(t) && (e = this.$gantt.$data.assignmentsStore.getItem(t)) : n.isLinkExists(t) && (e = this.$gantt.getLink(t)), e || (e = this.getStoredItem(t)), e || (e = { id: t }), this._prepareDataItem(e) } , t }(); e.DataProcessor = c } , function(t, e, n) { var i = n(225); t.exports = { DEPRECATED_api: function(t) { return new i.DataProcessor(t) }, createDataProcessor: i.createDataProcessor, getDataProcessorModes: i.getAvailableModes } } , function(t, e, n) { var i = n(15); t.exports = { bindDataStore: function(t, e) { var n = e.getDatastore(t) , r = function(t, e) { var i = e.getLayers() , r = n.getItem(t); if (r && n.isVisible(t)) for (var a = 0; a < i.length; a++) i[a].render_item(r) } , a = function(t) { for (var e = t.getLayers(), i = 0; i < e.length; i++) e[i].clear(); for (var r = null, a = {}, o = 0; o < e.length; o++) { var s = e[o] , l = void 0; if (s.get_visible_range) { var c = s.get_visible_range(n); if (void 0 !== c.start && void 0 !== c.end) { var u = c.start + " - " + c.end; a[u] ? l = a[u] : (l = n.getIndexRange(c.start, c.end), a[u] = l) } else { if (void 0 === c.ids) throw new Error("Invalid range returned from 'getVisibleRange' of the layer"); l = c.ids.map(function(t) { return n.getItem(t) }) } } else r || (r = n.getVisibleItems()), l = r; s.prepare_data && s.prepare_data(l), e[o].render_items(l) } } , o = function(t) { if (t.update_items) { var e; if (t.get_visible_range) { var i = t.get_visible_range(n); if (void 0 !== i.start && void 0 !== i.end) e = n.getIndexRange(i.start, i.end); else { if (void 0 === i.ids) throw new Error("Invalid range returned from 'getVisibleRange' of the layer"); e = i.ids.map(function(t) { return n.getItem(t) }) } } else e = n.getVisibleItems(); t.prepare_data && t.prepare_data(e, t), t.update_items(e) } }; function s(t) { return !!t.$services.getService("state").getState("batchUpdate").batch_update } n.attachEvent("onStoreUpdated", function(n, r, a) { if (i(e)) return !0; var s = e.$services.getService("layers").getDataRender(t); s && (s.onUpdateRequest = function(t) { o(t) } ) }), n.attachEvent("onStoreUpdated", function(t, i, r) { s(e) || (t && "move" != r && "delete" != r ? (n.callEvent("onBeforeRefreshItem", [i.id]), n.callEvent("onAfterRefreshItem", [i.id])) : (n.callEvent("onBeforeRefreshAll", []), n.callEvent("onAfterRefreshAll", []))) }), n.attachEvent("onAfterRefreshAll", function() { if (i(e)) return !0; var n = e.$services.getService("layers").getDataRender(t); n && !s(e) && a(n) }), n.attachEvent("onAfterRefreshItem", function(n) { if (i(e)) return !0; var a = e.$services.getService("layers").getDataRender(t); a && r(n, a) }), n.attachEvent("onItemOpen", function() { if (i(e)) return !0; e.render() }), n.attachEvent("onItemClose", function() { if (i(e)) return !0; e.render() }), n.attachEvent("onIdChange", function(a, o) { if (i(e)) return !0; if (n.callEvent("onBeforeIdChange", [a, o]), !s(e) && !n.isSilent()) { var l = e.$services.getService("layers").getDataRender(t); l ? (function(t, e, n, i) { for (var r = 0; r < t.length; r++) t[r].change_id(e, n) }(l.getLayers(), a, o, n.getItem(o)), r(o, l)) : e.render() } }) } } } , function(t, e) { t.exports = function(t) { var e = null , n = t._removeItemInner; function i(t) { e = null, this.callEvent("onAfterUnselect", [t]) } return t._removeItemInner = function(t) { return e == t && i.call(this, t), e && this.eachItem && this.eachItem(function(t) { t.id == e && i.call(this, t.id) }, t), n.apply(this, arguments) } , t.attachEvent("onIdChange", function(e, n) { t.getSelectedId() == e && t.silent(function() { t.unselect(e), t.select(n) }) }), { select: function(t) { if (t) { if (e == t) return e; if (!this._skip_refresh && !this.callEvent("onBeforeSelect", [t])) return !1; this.unselect(), e = t, this._skip_refresh || (this.refresh(t), this.callEvent("onAfterSelect", [t])) } return e }, getSelectedId: function() { return e }, isSelected: function(t) { return t == e }, unselect: function(t) { (t = t || e) && (e = null, this._skip_refresh || (this.refresh(t), i.call(this, t))) } } } } , function(t, e, n) { var i = n(0); t.exports = function() { return { getLinkCount: function() { return this.$data.linksStore.count() }, getLink: function(t) { return this.$data.linksStore.getItem(t) }, getLinks: function() { return this.$data.linksStore.getItems() }, isLinkExists: function(t) { return this.$data.linksStore.exists(t) }, addLink: function(t) { var e = this.$data.linksStore.addItem(t); return this.$data.linksStore.isSilent() && this.$data.linksStore.fullOrder.push(e), e }, updateLink: function(t, e) { i.defined(e) || (e = this.getLink(t)), this.$data.linksStore.updateItem(t, e) }, deleteLink: function(t) { return this.$data.linksStore.removeItem(t) }, changeLinkId: function(t, e) { return this.$data.linksStore.changeId(t, e) } } } } , function(t, e, n) { var i = n(0) , r = n(2).replaceValidZeroId; t.exports = function() { return { getTask: function(t) { t = r(t, this.config.root_id), this.assert(t, "Invalid argument for gantt.getTask"); var e = this.$data.tasksStore.getItem(t); return this.assert(e, "Task not found id=" + t), e }, getTaskByTime: function(t, e) { var n = this.$data.tasksStore.getItems() , i = []; if (t || e) { t = +t || -1 / 0, e = +e || 1 / 0; for (var r = 0; r < n.length; r++) { var a = n[r]; +a.start_date < e && +a.end_date > t && i.push(a) } } else i = n; return i }, isTaskExists: function(t) { return !(!this.$data || !this.$data.tasksStore) && this.$data.tasksStore.exists(t) }, updateTask: function(t, e) { i.defined(e) || (e = this.getTask(t)), this.$data.tasksStore.updateItem(t, e), this.isTaskExists(t) && this.refreshTask(t) }, addTask: function(t, e, n) { return i.defined(t.id) || (t.id = i.uid()), this.isTaskExists(t.id) && this.getTask(t.id).$index != t.$index ? (t.start_date && "string" == typeof t.start_date && (t.start_date = this.date.parseDate(t.start_date, "parse_date")), t.end_date && "string" == typeof t.end_date && (t.end_date = this.date.parseDate(t.end_date, "parse_date")), this.$data.tasksStore.updateItem(t.id, t)) : (i.defined(e) || (e = this.getParent(t) || 0), this.isTaskExists(e) || (e = this.config.root_id), this.setParent(t, e), this.$data.tasksStore.addItem(t, n, e)) }, deleteTask: function(t) { return t = r(t, this.config.root_id), this.$data.tasksStore.removeItem(t) }, getTaskCount: function() { return this.$data.tasksStore.count() }, getVisibleTaskCount: function() { return this.$data.tasksStore.countVisible() }, getTaskIndex: function(t) { return this.$data.tasksStore.getBranchIndex(t) }, getGlobalTaskIndex: function(t) { return t = r(t, this.config.root_id), this.assert(t, "Invalid argument"), this.$data.tasksStore.getIndexById(t) }, eachTask: function(t, e, n) { return this.$data.tasksStore.eachItem(i.bind(t, n || this), e) }, eachParent: function(t, e, n) { return this.$data.tasksStore.eachParent(i.bind(t, n || this), e) }, changeTaskId: function(t, e) { this.$data.tasksStore.changeId(t, e); var n = this.$data.tasksStore.getItem(e) , i = []; n.$source && (i = i.concat(n.$source)), n.$target && (i = i.concat(n.$target)); for (var r = 0; r < i.length; r++) { var a = this.getLink(i[r]); a.source == t && (a.source = e), a.target == t && (a.target = e) } }, calculateTaskLevel: function(t) { return this.$data.tasksStore.calculateItemLevel(t) }, getNext: function(t) { return this.$data.tasksStore.getNext(t) }, getPrev: function(t) { return this.$data.tasksStore.getPrev(t) }, getParent: function(t) { return this.$data.tasksStore.getParent(t) }, setParent: function(t, e, n) { return this.$data.tasksStore.setParent(t, e, n) }, getSiblings: function(t) { return this.$data.tasksStore.getSiblings(t).slice() }, getNextSibling: function(t) { return this.$data.tasksStore.getNextSibling(t) }, getPrevSibling: function(t) { return this.$data.tasksStore.getPrevSibling(t) }, getTaskByIndex: function(t) { var e = this.$data.tasksStore.getIdByIndex(t); return this.isTaskExists(e) ? this.getTask(e) : null }, getChildren: function(t) { return this.hasChild(t) ? this.$data.tasksStore.getChildren(t).slice() : [] }, hasChild: function(t) { return this.$data.tasksStore.hasChild(t) }, open: function(t) { this.$data.tasksStore.open(t) }, close: function(t) { this.$data.tasksStore.close(t) }, moveTask: function(t, e, n) { return n = r(n, this.config.root_id), this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments) }, sort: function(t, e, n, i) { var r = !i; this.$data.tasksStore.sort(t, e, n), this.callEvent("onAfterSort", [t, e, n]), r && this.render() } } } } , function(t, e, n) { var i = n(0) , r = n(230) , a = n(229) , o = n(49) , s = n(47) , l = n(228) , c = n(227) , u = n(15) , d = n(2).replaceValidZeroId; function h() { for (var t = this.$services.getService("datastores"), e = [], n = 0; n < t.length; n++) { var i = this.getDatastore(t[n]); i.$destroyed || e.push(i) } return e } o.default && (o = o.default); var f = function() { return { createDatastore: function(t) { var e = "treedatastore" == (t.type || "").toLowerCase() ? s : o; if (t) { var n = this; t.openInitially = function() { return n.config.open_tree_initially } , t.copyOnParse = function() { return n.config.deepcopy_on_parse } } var i = new e(t); if (this.mixin(i, l(i)), t.name) { var r = "datastore:" + t.name; i.attachEvent("onDestroy", function() { this.$services.dropService(r); for (var e = this.$services.getService("datastores"), n = 0; n < e.length; n++) if (e[n] === t.name) { e.splice(n, 1); break } } .bind(this)), this.$services.dropService(r), this.$services.setService(r, function() { return i }); var a = this.$services.getService("datastores"); a ? a.indexOf(t.name) < 0 && a.push(t.name) : (a = [], this.$services.setService("datastores", function() { return a }), a.push(t.name)), c.bindDataStore(t.name, this) } return i }, getDatastore: function(t) { return this.$services.getService("datastore:" + t) }, _getDatastores: h, refreshData: function() { var t; u(this) || (t = this.getScrollState()), this.callEvent("onBeforeDataRender", []); for (var e = h.call(this), n = 0; n < e.length; n++) e[n].refresh(); this.config.preserve_scroll && !u(this) && (t.x || t.y) && this.scrollTo(t.x, t.y), this.callEvent("onDataRender", []) }, isChildOf: function(t, e) { return this.$data.tasksStore.isChildOf(t, e) }, refreshTask: function(t, e) { var n = this.getTask(t) , i = this; function r() { if (void 0 === e || e) { for (var t = 0; t < n.$source.length; t++) i.refreshLink(n.$source[t]); for (t = 0; t < n.$target.length; t++) i.refreshLink(n.$target[t]) } } if (n && this.isTaskVisible(t)) this.$data.tasksStore.refresh(t, !!this.getState("tasksDnd").drag_id || !1 === e), r(); else if (this.isTaskExists(t) && this.isTaskExists(this.getParent(t)) && !this._bulk_dnd) { this.refreshTask(this.getParent(t)); var a = !1; this.eachParent(function(t) { (a || this.isSplitTask(t)) && (a = !0) }, t), a && r() } }, refreshLink: function(t) { this.$data.linksStore.refresh(t, !!this.getState("tasksDnd").drag_id) }, silent: function(t) { var e = this; e.$data.tasksStore.silent(function() { e.$data.linksStore.silent(function() { t() }) }) }, clearAll: function() { for (var t = h.call(this), e = 0; e < t.length; e++) t[e].silent(function() { t[e].clearAll() }); for (e = 0; e < t.length; e++) t[e].clearAll(); this._update_flags(), this.userdata = {}, this.callEvent("onClear", []), this.render() }, _clear_data: function() { this.$data.tasksStore.clearAll(), this.$data.linksStore.clearAll(), this._update_flags(), this.userdata = {} }, selectTask: function(t) { var e = this.$data.tasksStore; if (!this.config.select_task) return !1; if (t = d(t, this.config.root_id)) { var n = this.getSelectedId(); e._skipResourceRepaint = !0, e.select(t), e._skipResourceRepaint = !1, n && e.pull[n].$split_subtask && n != t && this.refreshTask(n), e.pull[t].$split_subtask && n != t && this.refreshTask(t) } return e.getSelectedId() }, unselectTask: function(t) { var e = this.$data.tasksStore; e.unselect(t), t && e.pull[t].$split_subtask && this.refreshTask(t) }, isSelectedTask: function(t) { return this.$data.tasksStore.isSelected(t) }, getSelectedId: function() { return this.$data.tasksStore.getSelectedId() } } }; t.exports = { create: function() { var t = i.mixin({}, f()); return i.mixin(t, r()), i.mixin(t, a()), t } } } , function(t, e, n) { var i = n(0) , r = n(231) , a = n(46) , o = n(16); t.exports = function(t) { var e = r.create(); i.mixin(t, e); var s = t.createDatastore({ name: "task", type: "treeDatastore", rootId: function() { return t.config.root_id }, initItem: i.bind(function(e) { this.defined(e.id) || (e.id = this.uid()), e.start_date && (e.start_date = t.date.parseDate(e.start_date, "parse_date")), e.end_date && (e.end_date = t.date.parseDate(e.end_date, "parse_date")); var n = null; (e.duration || 0 === e.duration) && (e.duration = n = 1 * e.duration), n && (e.start_date && !e.end_date ? e.end_date = this.calculateEndDate(e) : !e.start_date && e.end_date && (e.start_date = this.calculateEndDate({ start_date: e.end_date, duration: -e.duration, task: e }))), e.progress = Number(e.progress) || 0, this._isAllowedUnscheduledTask(e) && this._set_default_task_timing(e), this._init_task_timing(e), e.start_date && e.end_date && this.correctTaskWorkTime(e), e.$source = [], e.$target = []; var r = this.$data.tasksStore.getItem(e.id); return r && !i.defined(e.open) && (e.$open = r.$open), void 0 === e.parent && (e.parent = this.config.root_id), e }, t), getConfig: function() { return t.config } }) , l = t.createDatastore({ name: "link", initItem: i.bind(function(t) { return this.defined(t.id) || (t.id = this.uid()), t }, t) }); function c(e) { var n = t.isTaskVisible(e); if (!n && t.isTaskExists(e)) { var i = t.getParent(e); t.isTaskExists(i) && t.isTaskVisible(i) && (i = t.getTask(i), t.isSplitTask(i) && (n = !0)) } return n } function u(e) { if (t.isTaskExists(e.source)) { var n = t.getTask(e.source); n.$source = n.$source || [], n.$source.push(e.id) } if (t.isTaskExists(e.target)) { var i = t.getTask(e.target); i.$target = i.$target || [], i.$target.push(e.id) } } function d(e) { if (t.isTaskExists(e.source)) for (var n = t.getTask(e.source), i = 0; i < n.$source.length; i++) if (n.$source[i] == e.id) { n.$source.splice(i, 1); break } if (t.isTaskExists(e.target)) { var r = t.getTask(e.target); for (i = 0; i < r.$target.length; i++) if (r.$target[i] == e.id) { r.$target.splice(i, 1); break } } } function h() { for (var e = null, n = t.$data.tasksStore.getItems(), i = 0, r = n.length; i < r; i++) (e = n[i]).$source = [], e.$target = []; var a = t.$data.linksStore.getItems(); for (i = 0, r = a.length; i < r; i++) u(a[i]) } function f(t) { var e = t.source , n = t.target; for (var i in t.events) !function(t, i) { e.attachEvent(t, function() { return n.callEvent(i, Array.prototype.slice.call(arguments)) }, i) }(i, t.events[i]) } t.attachEvent("onDestroy", function() { s.destructor(), l.destructor() }), t.attachEvent("onLinkValidation", function(e) { if (t.isLinkExists(e.id) || "predecessor_generated" === e.id) return !0; for (var n = t.getTask(e.source).$source, i = 0; i < n.length; i++) { var r = t.getLink(n[i]) , a = e.source == r.source , o = e.target == r.target , s = e.type == r.type; if (a && o && s) return !1 } return !0 }), s.attachEvent("onBeforeRefreshAll", function() { if (!s._skipTaskRecalculation) for (var e = s.getVisibleItems(), n = 0; n < e.length; n++) { var i = e[n]; i.$index = n, i.$local_index = t.getTaskIndex(i.id), t.resetProjectDates(i) } }), s.attachEvent("onFilterItem", function(e, n) { if (t.config.show_tasks_outside_timescale) return !0; var i = null , r = null; if (t.config.start_date && t.config.end_date) { if (t._isAllowedUnscheduledTask(n)) return !0; if (i = t.config.start_date.valueOf(), r = t.config.end_date.valueOf(), +n.start_date > r || +n.end_date < +i) return !1 } return !0 }), s.attachEvent("onIdChange", function(e, n) { t._update_flags(e, n); var i = t.getTask(n); s.isSilent() || (i.$split_subtask || i.rollup) && t.eachParent(function(e) { t.refreshTask(e.id) }, n) }), s.attachEvent("onAfterUpdate", function(e) { if (t._update_parents(e), t.getState("batchUpdate").batch_update) return !0; var n = s.getItem(e); n.$source || (n.$source = []); for (var i = 0; i < n.$source.length; i++) l.refresh(n.$source[i]); for (n.$target || (n.$target = []), i = 0; i < n.$target.length; i++) l.refresh(n.$target[i]) }), s.attachEvent("onBeforeItemMove", function(e, n, i) { return !o(e, t, s) || (console.log("The placeholder task cannot be moved to another position."), !1) }), s.attachEvent("onAfterItemMove", function(e, n, i) { var r = t.getTask(e); null !== this.getNextSibling(e) ? r.$drop_target = this.getNextSibling(e) : null !== this.getPrevSibling(e) ? r.$drop_target = "next:" + this.getPrevSibling(e) : r.$drop_target = "next:null" }), s.attachEvent("onStoreUpdated", function(e, n, i) { if ("delete" == i && t._update_flags(e, null), !t.$services.getService("state").getState("batchUpdate").batch_update) { if (t.config.fit_tasks && "paint" !== i) { var r = t.getState(); a(t); var o = t.getState(); if (+r.min_date != +o.min_date || +r.max_date != +o.max_date) return t.render(), t.callEvent("onScaleAdjusted", []), !0 } "add" == i || "move" == i || "delete" == i ? t.$layout && ("task" != this.$config.name || "add" != i && "delete" != i || "lightbox" != this._skipTaskRecalculation && (this._skipTaskRecalculation = !0), t.$layout.resize()) : e || l.refresh() } }), l.attachEvent("onAfterAdd", function(t, e) { u(e) }), l.attachEvent("onAfterUpdate", function(t, e) { h() }), l.attachEvent("onAfterDelete", function(t, e) { d(e) }), l.attachEvent("onBeforeIdChange", function(e, n) { d(t.mixin({ id: e }, t.$data.linksStore.getItem(n))), u(t.$data.linksStore.getItem(n)) }), l.attachEvent("onFilterItem", function(e, n) { if (!t.config.show_links) return !1; var i = c(n.source) , r = c(n.target); return !(!i || !r || t._isAllowedUnscheduledTask(t.getTask(n.source)) || t._isAllowedUnscheduledTask(t.getTask(n.target))) && t.callEvent("onBeforeLinkDisplay", [e, n]) }), function() { var e = n(45) , i = {}; t.attachEvent("onBeforeTaskDelete", function(n, r) { return i[n] = e.getSubtreeLinks(t, n), !0 }), t.attachEvent("onAfterTaskDelete", function(e, n) { i[e] && t.$data.linksStore.silent(function() { for (var n in i[e]) t.isLinkExists(n) && t.$data.linksStore.removeItem(n), d(i[e][n]); i[e] = null }) }) }(), t.attachEvent("onAfterLinkDelete", function(e, n) { t.refreshTask(n.source), t.refreshTask(n.target) }), t.attachEvent("onParse", h), f({ source: l, target: t, events: { onItemLoading: "onLinkLoading", onBeforeAdd: "onBeforeLinkAdd", onAfterAdd: "onAfterLinkAdd", onBeforeUpdate: "onBeforeLinkUpdate", onAfterUpdate: "onAfterLinkUpdate", onBeforeDelete: "onBeforeLinkDelete", onAfterDelete: "onAfterLinkDelete", onIdChange: "onLinkIdChange" } }), f({ source: s, target: t, events: { onItemLoading: "onTaskLoading", onBeforeAdd: "onBeforeTaskAdd", onAfterAdd: "onAfterTaskAdd", onBeforeUpdate: "onBeforeTaskUpdate", onAfterUpdate: "onAfterTaskUpdate", onBeforeDelete: "onBeforeTaskDelete", onAfterDelete: "onAfterTaskDelete", onIdChange: "onTaskIdChange", onBeforeItemMove: "onBeforeTaskMove", onAfterItemMove: "onAfterTaskMove", onFilterItem: "onBeforeTaskDisplay", onItemOpen: "onTaskOpened", onItemClose: "onTaskClosed", onBeforeSelect: "onBeforeTaskSelected", onAfterSelect: "onTaskSelected", onAfterUnselect: "onTaskUnselected" } }), t.$data = { tasksStore: s, linksStore: l } } } , function(t, e, n) { (function(n, i, r) { var a, o, s; function l(t) { "@babel/helpers - typeof"; return (l = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } /* @preserve * The MIT License (MIT) * * Copyright (c) 2013-2018 Petka Antonov * * 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. * */ !function(n) { "object" == l(e) && void 0 !== t ? t.exports = n() : (o = [], void 0 === (s = "function" == typeof (a = n) ? a.apply(e, o) : a) || (t.exports = s)) }(function() { var t, e, a; return function t(e, n, i) { function r(o, s) { if (!n[o]) { if (!e[o]) { var l = "function" == typeof _dereq_ && _dereq_; if (!s && l) return l(o, !0); if (a) return a(o, !0); var c = new Error("Cannot find module '" + o + "'"); throw c.code = "MODULE_NOT_FOUND", c } var u = n[o] = { exports: {} }; e[o][0].call(u.exports, function(t) { var n = e[o][1][t]; return r(n || t) }, u, u.exports, t, e, n, i) } return n[o].exports } for (var a = "function" == typeof _dereq_ && _dereq_, o = 0; o < i.length; o++) r(i[o]); return r }({ 1: [function(t, e, n) { "use strict"; e.exports = function(t) { var e = t._SomePromiseArray; function n(t) { var n = new e(t) , i = n.promise(); return n.setHowMany(1), n.setUnwrap(), n.init(), i } t.any = function(t) { return n(t) } , t.prototype.any = function() { return n(this) } } } , {}], 2: [function(t, e, i) { "use strict"; var r; try { throw new Error } catch (t) { r = t } var a = t("./schedule") , o = t("./queue") , s = t("./util"); function l() { this._customScheduler = !1, this._isTickUsed = !1, this._lateQueue = new o(16), this._normalQueue = new o(16), this._haveDrainedQueues = !1, this._trampolineEnabled = !0; var t = this; this.drainQueues = function() { t._drainQueues() } , this._schedule = a } function c(t, e, n) { this._lateQueue.push(t, e, n), this._queueTick() } function u(t, e, n) { this._normalQueue.push(t, e, n), this._queueTick() } function d(t) { this._normalQueue._pushOne(t), this._queueTick() } function h(t) { for (; t.length() > 0; ) f(t) } function f(t) { var e = t.shift(); if ("function" != typeof e) e._settlePromises(); else { var n = t.shift() , i = t.shift(); e.call(n, i) } } l.prototype.setScheduler = function(t) { var e = this._schedule; return this._schedule = t, this._customScheduler = !0, e } , l.prototype.hasCustomScheduler = function() { return this._customScheduler } , l.prototype.enableTrampoline = function() { this._trampolineEnabled = !0 } , l.prototype.disableTrampolineIfNecessary = function() { s.hasDevTools && (this._trampolineEnabled = !1) } , l.prototype.haveItemsQueued = function() { return this._isTickUsed || this._haveDrainedQueues } , l.prototype.fatalError = function(t, e) { e ? (n.stderr.write("Fatal " + (t instanceof Error ? t.stack : t) + "\n"), n.exit(2)) : this.throwLater(t) } , l.prototype.throwLater = function(t, e) { if (1 === arguments.length && (e = t, t = function() { throw e } ), "undefined" != typeof setTimeout) setTimeout(function() { t(e) }, 0); else try { this._schedule(function() { t(e) }) } catch (t) { throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n") } } , s.hasDevTools ? (l.prototype.invokeLater = function(t, e, n) { this._trampolineEnabled ? c.call(this, t, e, n) : this._schedule(function() { setTimeout(function() { t.call(e, n) }, 100) }) } , l.prototype.invoke = function(t, e, n) { this._trampolineEnabled ? u.call(this, t, e, n) : this._schedule(function() { t.call(e, n) }) } , l.prototype.settlePromises = function(t) { this._trampolineEnabled ? d.call(this, t) : this._schedule(function() { t._settlePromises() }) } ) : (l.prototype.invokeLater = c, l.prototype.invoke = u, l.prototype.settlePromises = d), l.prototype._drainQueues = function() { h(this._normalQueue), this._reset(), this._haveDrainedQueues = !0, h(this._lateQueue) } , l.prototype._queueTick = function() { this._isTickUsed || (this._isTickUsed = !0, this._schedule(this.drainQueues)) } , l.prototype._reset = function() { this._isTickUsed = !1 } , e.exports = l, e.exports.firstLineError = r } , { "./queue": 26, "./schedule": 29, "./util": 36 }], 3: [function(t, e, n) { "use strict"; e.exports = function(t, e, n, i) { var r = !1 , a = function(t, e) { this._reject(e) } , o = function(t, e) { e.promiseRejectionQueued = !0, e.bindingPromise._then(a, a, null, this, t) } , s = function(t, e) { 0 == (50397184 & this._bitField) && this._resolveCallback(e.target) } , l = function(t, e) { e.promiseRejectionQueued || this._reject(t) }; t.prototype.bind = function(a) { r || (r = !0, t.prototype._propagateFrom = i.propagateFromFunction(), t.prototype._boundValue = i.boundValueFunction()); var c = n(a) , u = new t(e); u._propagateFrom(this, 1); var d = this._target(); if (u._setBoundTo(c), c instanceof t) { var h = { promiseRejectionQueued: !1, promise: u, target: d, bindingPromise: c }; d._then(e, o, void 0, u, h), c._then(s, l, void 0, u, h), u._setOnCancel(c) } else u._resolveCallback(d); return u } , t.prototype._setBoundTo = function(t) { void 0 !== t ? (this._bitField = 2097152 | this._bitField, this._boundTo = t) : this._bitField = -2097153 & this._bitField } , t.prototype._isBound = function() { return 2097152 == (2097152 & this._bitField) } , t.bind = function(e, n) { return t.resolve(n).bind(e) } } } , {}], 4: [function(t, e, n) { "use strict"; var i; "undefined" != typeof Promise && (i = Promise); var r = t("./promise")(); r.noConflict = function() { try { Promise === r && (Promise = i) } catch (t) {} return r } , e.exports = r } , { "./promise": 22 }], 5: [function(t, e, n) { "use strict"; var i = Object.create; if (i) { var r = i(null) , a = i(null); r[" size"] = a[" size"] = 0 } e.exports = function(e) { var n = t("./util") , i = n.canEvaluate; n.isIdentifier; function r(t) { return function(t, i) { var r; if (null != t && (r = t[i]), "function" != typeof r) { var a = "Object " + n.classString(t) + " has no method '" + n.toString(i) + "'"; throw new e.TypeError(a) } return r }(t, this.pop()).apply(t, this) } function a(t) { return t[this] } function o(t) { var e = +this; return e < 0 && (e = Math.max(0, e + t.length)), t[e] } e.prototype.call = function(t) { var e = [].slice.call(arguments, 1); return e.push(t), this._then(r, void 0, void 0, e, void 0) } , e.prototype.get = function(t) { var e; if ("number" == typeof t) e = o; else if (i) { var n = (void 0)(t); e = null !== n ? n : a } else e = a; return this._then(e, void 0, void 0, t, void 0) } } } , { "./util": 36 }], 6: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r) { var a = t("./util") , o = a.tryCatch , s = a.errorObj , l = e._async; e.prototype.break = e.prototype.cancel = function() { if (!r.cancellation()) return this._warn("cancellation is disabled"); for (var t = this, e = t; t._isCancellable(); ) { if (!t._cancelBy(e)) { e._isFollowing() ? e._followee().cancel() : e._cancelBranched(); break } var n = t._cancellationParent; if (null == n || !n._isCancellable()) { t._isFollowing() ? t._followee().cancel() : t._cancelBranched(); break } t._isFollowing() && t._followee().cancel(), t._setWillBeCancelled(), e = t, t = n } } , e.prototype._branchHasCancelled = function() { this._branchesRemainingToCancel-- } , e.prototype._enoughBranchesHaveCancelled = function() { return void 0 === this._branchesRemainingToCancel || this._branchesRemainingToCancel <= 0 } , e.prototype._cancelBy = function(t) { return t === this ? (this._branchesRemainingToCancel = 0, this._invokeOnCancel(), !0) : (this._branchHasCancelled(), !!this._enoughBranchesHaveCancelled() && (this._invokeOnCancel(), !0)) } , e.prototype._cancelBranched = function() { this._enoughBranchesHaveCancelled() && this._cancel() } , e.prototype._cancel = function() { this._isCancellable() && (this._setCancelled(), l.invoke(this._cancelPromises, this, void 0)) } , e.prototype._cancelPromises = function() { this._length() > 0 && this._settlePromises() } , e.prototype._unsetOnCancel = function() { this._onCancelField = void 0 } , e.prototype._isCancellable = function() { return this.isPending() && !this._isCancelled() } , e.prototype.isCancellable = function() { return this.isPending() && !this.isCancelled() } , e.prototype._doInvokeOnCancel = function(t, e) { if (a.isArray(t)) for (var n = 0; n < t.length; ++n) this._doInvokeOnCancel(t[n], e); else if (void 0 !== t) if ("function" == typeof t) { if (!e) { var i = o(t).call(this._boundValue()); i === s && (this._attachExtraTrace(i.e), l.throwLater(i.e)) } } else t._resultCancelled(this) } , e.prototype._invokeOnCancel = function() { var t = this._onCancel(); this._unsetOnCancel(), l.invoke(this._doInvokeOnCancel, this, t) } , e.prototype._invokeInternalOnCancel = function() { this._isCancellable() && (this._doInvokeOnCancel(this._onCancel(), !0), this._unsetOnCancel()) } , e.prototype._resultCancelled = function() { this.cancel() } } } , { "./util": 36 }], 7: [function(t, e, n) { "use strict"; e.exports = function(e) { var n = t("./util") , i = t("./es5").keys , r = n.tryCatch , a = n.errorObj; return function(t, o, s) { return function(l) { var c = s._boundValue(); t: for (var u = 0; u < t.length; ++u) { var d = t[u]; if (d === Error || null != d && d.prototype instanceof Error) { if (l instanceof d) return r(o).call(c, l) } else if ("function" == typeof d) { var h = r(d).call(c, l); if (h === a) return h; if (h) return r(o).call(c, l) } else if (n.isObject(l)) { for (var f = i(d), _ = 0; _ < f.length; ++_) { var g = f[_]; if (d[g] != l[g]) continue t } return r(o).call(c, l) } } return e } } } } , { "./es5": 13, "./util": 36 }], 8: [function(t, e, n) { "use strict"; e.exports = function(t) { var e = !1 , n = []; function i() { this._trace = new i.CapturedTrace(r()) } function r() { var t = n.length - 1; if (t >= 0) return n[t] } return t.prototype._promiseCreated = function() {} , t.prototype._pushContext = function() {} , t.prototype._popContext = function() { return null } , t._peekContext = t.prototype._peekContext = function() {} , i.prototype._pushContext = function() { void 0 !== this._trace && (this._trace._promiseCreated = null, n.push(this._trace)) } , i.prototype._popContext = function() { if (void 0 !== this._trace) { var t = n.pop() , e = t._promiseCreated; return t._promiseCreated = null, e } return null } , i.CapturedTrace = null, i.create = function() { if (e) return new i } , i.deactivateLongStackTraces = function() {} , i.activateLongStackTraces = function() { var n = t.prototype._pushContext , a = t.prototype._popContext , o = t._peekContext , s = t.prototype._peekContext , l = t.prototype._promiseCreated; i.deactivateLongStackTraces = function() { t.prototype._pushContext = n, t.prototype._popContext = a, t._peekContext = o, t.prototype._peekContext = s, t.prototype._promiseCreated = l, e = !1 } , e = !0, t.prototype._pushContext = i.prototype._pushContext, t.prototype._popContext = i.prototype._popContext, t._peekContext = t.prototype._peekContext = r, t.prototype._promiseCreated = function() { var t = this._peekContext(); t && null == t._promiseCreated && (t._promiseCreated = this) } } , i } } , {}], 9: [function(t, e, i) { "use strict"; e.exports = function(e, i) { var r, a, o, s = e._getDomain, c = e._async, u = t("./errors").Warning, d = t("./util"), h = t("./es5"), f = d.canAttachTrace, _ = /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/, g = /\((?:timers\.js):\d+:\d+\)/, p = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/, v = null, m = null, y = !1, k = !(0 == d.env("BLUEBIRD_DEBUG")), b = !(0 == d.env("BLUEBIRD_WARNINGS") || !k && !d.env("BLUEBIRD_WARNINGS")), x = !(0 == d.env("BLUEBIRD_LONG_STACK_TRACES") || !k && !d.env("BLUEBIRD_LONG_STACK_TRACES")), w = 0 != d.env("BLUEBIRD_W_FORGOTTEN_RETURN") && (b || !!d.env("BLUEBIRD_W_FORGOTTEN_RETURN")); e.prototype.suppressUnhandledRejections = function() { var t = this._target(); t._bitField = -1048577 & t._bitField | 524288 } , e.prototype._ensurePossibleRejectionHandled = function() { if (0 == (524288 & this._bitField)) { this._setRejectionIsUnhandled(); var t = this; setTimeout(function() { t._notifyUnhandledRejection() }, 1) } } , e.prototype._notifyUnhandledRejectionIsHandled = function() { q("rejectionHandled", r, void 0, this) } , e.prototype._setReturnedNonUndefined = function() { this._bitField = 268435456 | this._bitField } , e.prototype._returnedNonUndefined = function() { return 0 != (268435456 & this._bitField) } , e.prototype._notifyUnhandledRejection = function() { if (this._isRejectionUnhandled()) { var t = this._settledValue(); this._setUnhandledRejectionIsNotified(), q("unhandledRejection", a, t, this) } } , e.prototype._setUnhandledRejectionIsNotified = function() { this._bitField = 262144 | this._bitField } , e.prototype._unsetUnhandledRejectionIsNotified = function() { this._bitField = -262145 & this._bitField } , e.prototype._isUnhandledRejectionNotified = function() { return (262144 & this._bitField) > 0 } , e.prototype._setRejectionIsUnhandled = function() { this._bitField = 1048576 | this._bitField } , e.prototype._unsetRejectionIsUnhandled = function() { this._bitField = -1048577 & this._bitField, this._isUnhandledRejectionNotified() && (this._unsetUnhandledRejectionIsNotified(), this._notifyUnhandledRejectionIsHandled()) } , e.prototype._isRejectionUnhandled = function() { return (1048576 & this._bitField) > 0 } , e.prototype._warn = function(t, e, n) { return z(t, e, n || this) } , e.onPossiblyUnhandledRejection = function(t) { var e = s(); a = "function" == typeof t ? null === e ? t : d.domainBind(e, t) : void 0 } , e.onUnhandledRejectionHandled = function(t) { var e = s(); r = "function" == typeof t ? null === e ? t : d.domainBind(e, t) : void 0 } ; var S = function() {}; e.longStackTraces = function() { if (c.haveItemsQueued() && !tt.longStackTraces) throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n"); if (!tt.longStackTraces && Y()) { var t = e.prototype._captureStackTrace , n = e.prototype._attachExtraTrace , r = e.prototype._dereferenceTrace; tt.longStackTraces = !0, S = function() { if (c.haveItemsQueued() && !tt.longStackTraces) throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n"); e.prototype._captureStackTrace = t, e.prototype._attachExtraTrace = n, e.prototype._dereferenceTrace = r, i.deactivateLongStackTraces(), c.enableTrampoline(), tt.longStackTraces = !1 } , e.prototype._captureStackTrace = H, e.prototype._attachExtraTrace = F, e.prototype._dereferenceTrace = B, i.activateLongStackTraces(), c.disableTrampolineIfNecessary() } } , e.hasLongStackTraces = function() { return tt.longStackTraces && Y() } ; var T = function() { try { if ("function" == typeof CustomEvent) { var t = new CustomEvent("CustomEvent"); return d.global.dispatchEvent(t), function(t, e) { var n = { detail: e, cancelable: !0 }; h.defineProperty(n, "promise", { value: e.promise }), h.defineProperty(n, "reason", { value: e.reason }); var i = new CustomEvent(t.toLowerCase(),n); return !d.global.dispatchEvent(i) } } if ("function" == typeof Event) { t = new Event("CustomEvent"); return d.global.dispatchEvent(t), function(t, e) { var n = new Event(t.toLowerCase(),{ cancelable: !0 }); return n.detail = e, h.defineProperty(n, "promise", { value: e.promise }), h.defineProperty(n, "reason", { value: e.reason }), !d.global.dispatchEvent(n) } } return (t = document.createEvent("CustomEvent")).initCustomEvent("testingtheevent", !1, !0, {}), d.global.dispatchEvent(t), function(t, e) { var n = document.createEvent("CustomEvent"); return n.initCustomEvent(t.toLowerCase(), !1, !0, e), !d.global.dispatchEvent(n) } } catch (t) {} return function() { return !1 } }() , $ = d.isNode ? function() { return n.emit.apply(n, arguments) } : d.global ? function(t) { var e = "on" + t.toLowerCase() , n = d.global[e]; return !!n && (n.apply(d.global, [].slice.call(arguments, 1)), !0) } : function() { return !1 } ; function C(t, e) { return { promise: e } } var E = { promiseCreated: C, promiseFulfilled: C, promiseRejected: C, promiseResolved: C, promiseCancelled: C, promiseChained: function(t, e, n) { return { promise: e, child: n } }, warning: function(t, e) { return { warning: e } }, unhandledRejection: function(t, e, n) { return { reason: e, promise: n } }, rejectionHandled: C } , A = function(t) { var e = !1; try { e = $.apply(null, arguments) } catch (t) { c.throwLater(t), e = !0 } var n = !1; try { n = T(t, E[t].apply(null, arguments)) } catch (t) { c.throwLater(t), n = !0 } return n || e }; function D() { return !1 } function M(t, e, n) { var i = this; try { t(e, n, function(t) { if ("function" != typeof t) throw new TypeError("onCancel must be a function, got: " + d.toString(t)); i._attachCancellationCallback(t) }) } catch (t) { return t } } function I(t) { if (!this._isCancellable()) return this; var e = this._onCancel(); void 0 !== e ? d.isArray(e) ? e.push(t) : this._setOnCancel([e, t]) : this._setOnCancel(t) } function P() { return this._onCancelField } function N(t) { this._onCancelField = t } function O() { this._cancellationParent = void 0, this._onCancelField = void 0 } function L(t, e) { if (0 != (1 & e)) { this._cancellationParent = t; var n = t._branchesRemainingToCancel; void 0 === n && (n = 0), t._branchesRemainingToCancel = n + 1 } 0 != (2 & e) && t._isBound() && this._setBoundTo(t._boundTo) } e.config = function(t) { if ("longStackTraces"in (t = Object(t)) && (t.longStackTraces ? e.longStackTraces() : !t.longStackTraces && e.hasLongStackTraces() && S()), "warnings"in t) { var n = t.warnings; tt.warnings = !!n, w = tt.warnings, d.isObject(n) && "wForgottenReturn"in n && (w = !!n.wForgottenReturn) } if ("cancellation"in t && t.cancellation && !tt.cancellation) { if (c.haveItemsQueued()) throw new Error("cannot enable cancellation after promises are in use"); e.prototype._clearCancellationData = O, e.prototype._propagateFrom = L, e.prototype._onCancel = P, e.prototype._setOnCancel = N, e.prototype._attachCancellationCallback = I, e.prototype._execute = M, R = L, tt.cancellation = !0 } return "monitoring"in t && (t.monitoring && !tt.monitoring ? (tt.monitoring = !0, e.prototype._fireEvent = A) : !t.monitoring && tt.monitoring && (tt.monitoring = !1, e.prototype._fireEvent = D)), e } , e.prototype._fireEvent = D, e.prototype._execute = function(t, e, n) { try { t(e, n) } catch (t) { return t } } , e.prototype._onCancel = function() {} , e.prototype._setOnCancel = function(t) {} , e.prototype._attachCancellationCallback = function(t) {} , e.prototype._captureStackTrace = function() {} , e.prototype._attachExtraTrace = function() {} , e.prototype._dereferenceTrace = function() {} , e.prototype._clearCancellationData = function() {} , e.prototype._propagateFrom = function(t, e) {} ; var R = function(t, e) { 0 != (2 & e) && t._isBound() && this._setBoundTo(t._boundTo) }; function j() { var t = this._boundTo; return void 0 !== t && t instanceof e ? t.isFulfilled() ? t.value() : void 0 : t } function H() { this._trace = new Q(this._peekContext()) } function F(t, e) { if (f(t)) { var n = this._trace; if (void 0 !== n && e && (n = n._parent), void 0 !== n) n.attachExtraTrace(t); else if (!t.__stackCleaned__) { var i = W(t); d.notEnumerableProp(t, "stack", i.message + "\n" + i.stack.join("\n")), d.notEnumerableProp(t, "__stackCleaned__", !0) } } } function B() { this._trace = void 0 } function z(t, n, i) { if (tt.warnings) { var r, a = new u(t); if (n) i._attachExtraTrace(a); else if (tt.longStackTraces && (r = e._peekContext())) r.attachExtraTrace(a); else { var o = W(a); a.stack = o.message + "\n" + o.stack.join("\n") } A("warning", a) || V(a, "", !0) } } function U(t) { for (var e = [], n = 0; n < t.length; ++n) { var i = t[n] , r = " (No stack trace)" === i || v.test(i) , a = r && J(i); r && !a && (y && " " !== i.charAt(0) && (i = " " + i), e.push(i)) } return e } function W(t) { var e = t.stack , n = t.toString(); return e = "string" == typeof e && e.length > 0 ? function(t) { for (var e = t.stack.replace(/\s+$/g, "").split("\n"), n = 0; n < e.length; ++n) { var i = e[n]; if (" (No stack trace)" === i || v.test(i)) break } return n > 0 && "SyntaxError" != t.name && (e = e.slice(n)), e }(t) : [" (No stack trace)"], { message: n, stack: "SyntaxError" == t.name ? e : U(e) } } function V(t, e, n) { if ("undefined" != typeof console) { var i; if (d.isObject(t)) { var r = t.stack; i = e + m(r, t) } else i = e + String(t); "function" == typeof o ? o(i, n) : "function" != typeof console.log && "object" !== l(console.log) || console.log(i) } } function q(t, e, n, i) { var r = !1; try { "function" == typeof e && (r = !0, "rejectionHandled" === t ? e(i) : e(n, i)) } catch (t) { c.throwLater(t) } "unhandledRejection" === t ? A(t, n, i) || r || V(n, "Unhandled rejection ") : A(t, i) } function G(t) { var e; if ("function" == typeof t) e = "[function " + (t.name || "anonymous") + "]"; else { e = t && "function" == typeof t.toString ? t.toString() : d.toString(t); if (/\[object [a-zA-Z0-9$_]+\]/.test(e)) try { e = JSON.stringify(t) } catch (t) {} 0 === e.length && (e = "(empty array)") } return "(<" + function(t) { if (t.length < 41) return t; return t.substr(0, 38) + "..." }(e) + ">, no stack trace)" } function Y() { return "function" == typeof Z } var J = function() { return !1 } , X = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; function K(t) { var e = t.match(X); if (e) return { fileName: e[1], line: parseInt(e[2], 10) } } function Q(t) { this._parent = t, this._promisesCreated = 0; var e = this._length = 1 + (void 0 === t ? 0 : t._length); Z(this, Q), e > 32 && this.uncycle() } d.inherits(Q, Error), i.CapturedTrace = Q, Q.prototype.uncycle = function() { var t = this._length; if (!(t < 2)) { for (var e = [], n = {}, i = 0, r = this; void 0 !== r; ++i) e.push(r), r = r._parent; for (i = (t = this._length = i) - 1; i >= 0; --i) { var a = e[i].stack; void 0 === n[a] && (n[a] = i) } for (i = 0; i < t; ++i) { var o = n[e[i].stack]; if (void 0 !== o && o !== i) { o > 0 && (e[o - 1]._parent = void 0, e[o - 1]._length = 1), e[i]._parent = void 0, e[i]._length = 1; var s = i > 0 ? e[i - 1] : this; o < t - 1 ? (s._parent = e[o + 1], s._parent.uncycle(), s._length = s._parent._length + 1) : (s._parent = void 0, s._length = 1); for (var l = s._length + 1, c = i - 2; c >= 0; --c) e[c]._length = l, l++; return } } } } , Q.prototype.attachExtraTrace = function(t) { if (!t.__stackCleaned__) { this.uncycle(); for (var e = W(t), n = e.message, i = [e.stack], r = this; void 0 !== r; ) i.push(U(r.stack.split("\n"))), r = r._parent; !function(t) { for (var e = t[0], n = 1; n < t.length; ++n) { for (var i = t[n], r = e.length - 1, a = e[r], o = -1, s = i.length - 1; s >= 0; --s) if (i[s] === a) { o = s; break } for (s = o; s >= 0; --s) { var l = i[s]; if (e[r] !== l) break; e.pop(), r-- } e = i } }(i), function(t) { for (var e = 0; e < t.length; ++e) (0 === t[e].length || e + 1 < t.length && t[e][0] === t[e + 1][0]) && (t.splice(e, 1), e--) }(i), d.notEnumerableProp(t, "stack", function(t, e) { for (var n = 0; n < e.length - 1; ++n) e[n].push("From previous event:"), e[n] = e[n].join("\n"); return n < e.length && (e[n] = e[n].join("\n")), t + "\n" + e.join("\n") }(n, i)), d.notEnumerableProp(t, "__stackCleaned__", !0) } } ; var Z = function() { var t = /^\s*at\s*/ , e = function(t, e) { return "string" == typeof t ? t : void 0 !== e.name && void 0 !== e.message ? e.toString() : G(e) }; if ("number" == typeof Error.stackTraceLimit && "function" == typeof Error.captureStackTrace) { Error.stackTraceLimit += 6, v = t, m = e; var n = Error.captureStackTrace; return J = function(t) { return _.test(t) } , function(t, e) { Error.stackTraceLimit += 6, n(t, e), Error.stackTraceLimit -= 6 } } var i, r = new Error; if ("string" == typeof r.stack && r.stack.split("\n")[0].indexOf("stackDetection@") >= 0) return v = /@/, m = e, y = !0, function(t) { t.stack = (new Error).stack } ; try { throw new Error } catch (t) { i = "stack"in t } return "stack"in r || !i || "number" != typeof Error.stackTraceLimit ? (m = function(t, e) { return "string" == typeof t ? t : "object" !== l(e) && "function" != typeof e || void 0 === e.name || void 0 === e.message ? G(e) : e.toString() } , null) : (v = t, m = e, function(t) { Error.stackTraceLimit += 6; try { throw new Error } catch (e) { t.stack = e.stack } Error.stackTraceLimit -= 6 } ) }(); "undefined" != typeof console && void 0 !== console.warn && (o = function(t) { console.warn(t) } , d.isNode && n.stderr.isTTY ? o = function(t, e) { var n = e ? "" : ""; console.warn(n + t + "\n") } : d.isNode || "string" != typeof (new Error).stack || (o = function(t, e) { console.warn("%c" + t, e ? "color: darkorange" : "color: red") } )); var tt = { warnings: b, longStackTraces: !1, cancellation: !1, monitoring: !1 }; return x && e.longStackTraces(), { longStackTraces: function() { return tt.longStackTraces }, warnings: function() { return tt.warnings }, cancellation: function() { return tt.cancellation }, monitoring: function() { return tt.monitoring }, propagateFromFunction: function() { return R }, boundValueFunction: function() { return j }, checkForgottenReturns: function(t, e, n, i, r) { if (void 0 === t && null !== e && w) { if (void 0 !== r && r._returnedNonUndefined()) return; if (0 == (65535 & i._bitField)) return; n && (n += " "); var a = "" , o = ""; if (e._trace) { for (var s = e._trace.stack.split("\n"), l = U(s), c = l.length - 1; c >= 0; --c) { var u = l[c]; if (!g.test(u)) { var d = u.match(p); d && (a = "at " + d[1] + ":" + d[2] + ":" + d[3] + " "); break } } if (l.length > 0) { var h = l[0]; for (c = 0; c < s.length; ++c) if (s[c] === h) { c > 0 && (o = "\n" + s[c - 1]); break } } } var f = "a promise was created in a " + n + "handler " + a + "but was not returned from it, see http://goo.gl/rRqMUw" + o; i._warn(f, !0, e) } }, setBounds: function(t, e) { if (Y()) { for (var n, i, r = t.stack.split("\n"), a = e.stack.split("\n"), o = -1, s = -1, l = 0; l < r.length; ++l) if (c = K(r[l])) { n = c.fileName, o = c.line; break } for (l = 0; l < a.length; ++l) { var c; if (c = K(a[l])) { i = c.fileName, s = c.line; break } } o < 0 || s < 0 || !n || !i || n !== i || o >= s || (J = function(t) { if (_.test(t)) return !0; var e = K(t); return !!(e && e.fileName === n && o <= e.line && e.line <= s) } ) } }, warn: z, deprecated: function(t, e) { var n = t + " is deprecated and will be removed in a future version."; return e && (n += " Use " + e + " instead."), z(n) }, CapturedTrace: Q, fireDomEvent: T, fireGlobalEvent: $ } } } , { "./errors": 12, "./es5": 13, "./util": 36 }], 10: [function(t, e, n) { "use strict"; e.exports = function(t) { function e() { return this.value } function n() { throw this.reason } t.prototype.return = t.prototype.thenReturn = function(n) { return n instanceof t && n.suppressUnhandledRejections(), this._then(e, void 0, void 0, { value: n }, void 0) } , t.prototype.throw = t.prototype.thenThrow = function(t) { return this._then(n, void 0, void 0, { reason: t }, void 0) } , t.prototype.catchThrow = function(t) { if (arguments.length <= 1) return this._then(void 0, n, void 0, { reason: t }, void 0); var e = arguments[1]; return this.caught(t, function() { throw e }) } , t.prototype.catchReturn = function(n) { if (arguments.length <= 1) return n instanceof t && n.suppressUnhandledRejections(), this._then(void 0, e, void 0, { value: n }, void 0); var i = arguments[1]; i instanceof t && i.suppressUnhandledRejections(); return this.caught(n, function() { return i }) } } } , {}], 11: [function(t, e, n) { "use strict"; e.exports = function(t, e) { var n = t.reduce , i = t.all; function r() { return i(this) } t.prototype.each = function(t) { return n(this, t, e, 0)._then(r, void 0, void 0, this, void 0) } , t.prototype.mapSeries = function(t) { return n(this, t, e, e) } , t.each = function(t, i) { return n(t, i, e, 0)._then(r, void 0, void 0, t, void 0) } , t.mapSeries = function(t, i) { return n(t, i, e, e) } } } , {}], 12: [function(t, e, n) { "use strict"; var i, r, a = t("./es5"), o = a.freeze, s = t("./util"), l = s.inherits, c = s.notEnumerableProp; function u(t, e) { function n(i) { if (!(this instanceof n)) return new n(i); c(this, "message", "string" == typeof i ? i : e), c(this, "name", t), Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : Error.call(this) } return l(n, Error), n } var d = u("Warning", "warning") , h = u("CancellationError", "cancellation error") , f = u("TimeoutError", "timeout error") , _ = u("AggregateError", "aggregate error"); try { i = TypeError, r = RangeError } catch (t) { i = u("TypeError", "type error"), r = u("RangeError", "range error") } for (var g = "join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "), p = 0; p < g.length; ++p) "function" == typeof Array.prototype[g[p]] && (_.prototype[g[p]] = Array.prototype[g[p]]); a.defineProperty(_.prototype, "length", { value: 0, configurable: !1, writable: !0, enumerable: !0 }), _.prototype.isOperational = !0; var v = 0; function m(t) { if (!(this instanceof m)) return new m(t); c(this, "name", "OperationalError"), c(this, "message", t), this.cause = t, this.isOperational = !0, t instanceof Error ? (c(this, "message", t.message), c(this, "stack", t.stack)) : Error.captureStackTrace && Error.captureStackTrace(this, this.constructor) } _.prototype.toString = function() { var t = Array(4 * v + 1).join(" ") , e = "\n" + t + "AggregateError of:\n"; v++, t = Array(4 * v + 1).join(" "); for (var n = 0; n < this.length; ++n) { for (var i = this[n] === this ? "[Circular AggregateError]" : this[n] + "", r = i.split("\n"), a = 0; a < r.length; ++a) r[a] = t + r[a]; e += (i = r.join("\n")) + "\n" } return v--, e } , l(m, Error); var y = Error.__BluebirdErrorTypes__; y || (y = o({ CancellationError: h, TimeoutError: f, OperationalError: m, RejectionError: m, AggregateError: _ }), a.defineProperty(Error, "__BluebirdErrorTypes__", { value: y, writable: !1, enumerable: !1, configurable: !1 })), e.exports = { Error: Error, TypeError: i, RangeError: r, CancellationError: y.CancellationError, OperationalError: y.OperationalError, TimeoutError: y.TimeoutError, AggregateError: y.AggregateError, Warning: d } } , { "./es5": 13, "./util": 36 }], 13: [function(t, e, n) { var i = function() { "use strict"; return void 0 === this }(); if (i) e.exports = { freeze: Object.freeze, defineProperty: Object.defineProperty, getDescriptor: Object.getOwnPropertyDescriptor, keys: Object.keys, names: Object.getOwnPropertyNames, getPrototypeOf: Object.getPrototypeOf, isArray: Array.isArray, isES5: i, propertyIsWritable: function(t, e) { var n = Object.getOwnPropertyDescriptor(t, e); return !(n && !n.writable && !n.set) } }; else { var r = {}.hasOwnProperty , a = {}.toString , o = {}.constructor.prototype , s = function(t) { var e = []; for (var n in t) r.call(t, n) && e.push(n); return e }; e.exports = { isArray: function(t) { try { return "[object Array]" === a.call(t) } catch (t) { return !1 } }, keys: s, names: s, defineProperty: function(t, e, n) { return t[e] = n.value, t }, getDescriptor: function(t, e) { return { value: t[e] } }, freeze: function(t) { return t }, getPrototypeOf: function(t) { try { return Object(t).constructor.prototype } catch (t) { return o } }, isES5: i, propertyIsWritable: function() { return !0 } } } } , {}], 14: [function(t, e, n) { "use strict"; e.exports = function(t, e) { var n = t.map; t.prototype.filter = function(t, i) { return n(this, t, i, e) } , t.filter = function(t, i, r) { return n(t, i, r, e) } } } , {}], 15: [function(t, e, n) { "use strict"; e.exports = function(e, n, i) { var r = t("./util") , a = e.CancellationError , o = r.errorObj , s = t("./catch_filter")(i); function l(t, e, n) { this.promise = t, this.type = e, this.handler = n, this.called = !1, this.cancelPromise = null } function c(t) { this.finallyHandler = t } function u(t, e) { return null != t.cancelPromise && (arguments.length > 1 ? t.cancelPromise._reject(e) : t.cancelPromise._cancel(), t.cancelPromise = null, !0) } function d() { return f.call(this, this.promise._target()._settledValue()) } function h(t) { if (!u(this, t)) return o.e = t, o } function f(t) { var r = this.promise , s = this.handler; if (!this.called) { this.called = !0; var l = this.isFinallyHandler() ? s.call(r._boundValue()) : s.call(r._boundValue(), t); if (l === i) return l; if (void 0 !== l) { r._setReturnedNonUndefined(); var f = n(l, r); if (f instanceof e) { if (null != this.cancelPromise) { if (f._isCancelled()) { var _ = new a("late cancellation observer"); return r._attachExtraTrace(_), o.e = _, o } f.isPending() && f._attachCancellationCallback(new c(this)) } return f._then(d, h, void 0, this, void 0) } } } return r.isRejected() ? (u(this), o.e = t, o) : (u(this), t) } return l.prototype.isFinallyHandler = function() { return 0 === this.type } , c.prototype._resultCancelled = function() { u(this.finallyHandler) } , e.prototype._passThrough = function(t, e, n, i) { return "function" != typeof t ? this.then() : this._then(n, i, void 0, new l(this,e,t), void 0) } , e.prototype.lastly = e.prototype.finally = function(t) { return this._passThrough(t, 0, f, f) } , e.prototype.tap = function(t) { return this._passThrough(t, 1, f) } , e.prototype.tapCatch = function(t) { var n = arguments.length; if (1 === n) return this._passThrough(t, 1, void 0, f); var i, a = new Array(n - 1), o = 0; for (i = 0; i < n - 1; ++i) { var l = arguments[i]; if (!r.isObject(l)) return e.reject(new TypeError("tapCatch statement predicate: expecting an object but got " + r.classString(l))); a[o++] = l } a.length = o; var c = arguments[i]; return this._passThrough(s(a, c, this), 1, void 0, f) } , l } } , { "./catch_filter": 7, "./util": 36 }], 16: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a, o) { var s = t("./errors").TypeError , l = t("./util") , c = l.errorObj , u = l.tryCatch , d = []; function h(t, n, r, a) { if (o.cancellation()) { var s = new e(i) , l = this._finallyPromise = new e(i); this._promise = s.lastly(function() { return l }), s._captureStackTrace(), s._setOnCancel(this) } else { (this._promise = new e(i))._captureStackTrace() } this._stack = a, this._generatorFunction = t, this._receiver = n, this._generator = void 0, this._yieldHandlers = "function" == typeof r ? [r].concat(d) : d, this._yieldedPromise = null, this._cancellationPhase = !1 } l.inherits(h, a), h.prototype._isResolved = function() { return null === this._promise } , h.prototype._cleanup = function() { this._promise = this._generator = null, o.cancellation() && null !== this._finallyPromise && (this._finallyPromise._fulfill(), this._finallyPromise = null) } , h.prototype._promiseCancelled = function() { if (!this._isResolved()) { var t; if (void 0 !== this._generator.return) this._promise._pushContext(), t = u(this._generator.return).call(this._generator, void 0), this._promise._popContext(); else { var n = new e.CancellationError("generator .return() sentinel"); e.coroutine.returnSentinel = n, this._promise._attachExtraTrace(n), this._promise._pushContext(), t = u(this._generator.throw).call(this._generator, n), this._promise._popContext() } this._cancellationPhase = !0, this._yieldedPromise = null, this._continue(t) } } , h.prototype._promiseFulfilled = function(t) { this._yieldedPromise = null, this._promise._pushContext(); var e = u(this._generator.next).call(this._generator, t); this._promise._popContext(), this._continue(e) } , h.prototype._promiseRejected = function(t) { this._yieldedPromise = null, this._promise._attachExtraTrace(t), this._promise._pushContext(); var e = u(this._generator.throw).call(this._generator, t); this._promise._popContext(), this._continue(e) } , h.prototype._resultCancelled = function() { if (this._yieldedPromise instanceof e) { var t = this._yieldedPromise; this._yieldedPromise = null, t.cancel() } } , h.prototype.promise = function() { return this._promise } , h.prototype._run = function() { this._generator = this._generatorFunction.call(this._receiver), this._receiver = this._generatorFunction = void 0, this._promiseFulfilled(void 0) } , h.prototype._continue = function(t) { var n = this._promise; if (t === c) return this._cleanup(), this._cancellationPhase ? n.cancel() : n._rejectCallback(t.e, !1); var i = t.value; if (!0 === t.done) return this._cleanup(), this._cancellationPhase ? n.cancel() : n._resolveCallback(i); var a = r(i, this._promise); if (a instanceof e || null !== (a = function(t, n, i) { for (var a = 0; a < n.length; ++a) { i._pushContext(); var o = u(n[a])(t); if (i._popContext(), o === c) { i._pushContext(); var s = e.reject(c.e); return i._popContext(), s } var l = r(o, i); if (l instanceof e) return l } return null }(a, this._yieldHandlers, this._promise))) { var o = (a = a._target())._bitField; 0 == (50397184 & o) ? (this._yieldedPromise = a, a._proxy(this, null)) : 0 != (33554432 & o) ? e._async.invoke(this._promiseFulfilled, this, a._value()) : 0 != (16777216 & o) ? e._async.invoke(this._promiseRejected, this, a._reason()) : this._promiseCancelled() } else this._promiseRejected(new s("A value %s was yielded that could not be treated as a promise\n\n See http://goo.gl/MqrFmX\n\n".replace("%s", String(i)) + "From coroutine:\n" + this._stack.split("\n").slice(1, -7).join("\n"))) } , e.coroutine = function(t, e) { if ("function" != typeof t) throw new s("generatorFunction must be a function\n\n See http://goo.gl/MqrFmX\n"); var n = Object(e).yieldHandler , i = h , r = (new Error).stack; return function() { var e = t.apply(this, arguments) , a = new i(void 0,void 0,n,r) , o = a.promise(); return a._generator = e, a._promiseFulfilled(void 0), o } } , e.coroutine.addYieldHandler = function(t) { if ("function" != typeof t) throw new s("expecting a function but got " + l.classString(t)); d.push(t) } , e.spawn = function(t) { if (o.deprecated("Promise.spawn()", "Promise.coroutine()"), "function" != typeof t) return n("generatorFunction must be a function\n\n See http://goo.gl/MqrFmX\n"); var i = new h(t,this) , r = i.promise(); return i._run(e.spawn), r } } } , { "./errors": 12, "./util": 36 }], 17: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a, o) { var s = t("./util"); s.canEvaluate, s.tryCatch, s.errorObj; e.join = function() { var t, e = arguments.length - 1; e > 0 && "function" == typeof arguments[e] && (t = arguments[e]); var i = [].slice.call(arguments); t && i.pop(); var r = new n(i).promise(); return void 0 !== t ? r.spread(t) : r } } } , { "./util": 36 }], 18: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a, o) { var s = e._getDomain , c = t("./util") , u = c.tryCatch , d = c.errorObj , h = e._async; function f(t, e, n, i) { this.constructor$(t), this._promise._captureStackTrace(); var r = s(); this._callback = null === r ? e : c.domainBind(r, e), this._preservedValues = i === a ? new Array(this.length()) : null, this._limit = n, this._inFlight = 0, this._queue = [], h.invoke(this._asyncInit, this, void 0) } function _(t, n, r, a) { if ("function" != typeof n) return i("expecting a function but got " + c.classString(n)); var o = 0; if (void 0 !== r) { if ("object" !== l(r) || null === r) return e.reject(new TypeError("options argument must be an object but it is " + c.classString(r))); if ("number" != typeof r.concurrency) return e.reject(new TypeError("'concurrency' must be a number but it is " + c.classString(r.concurrency))); o = r.concurrency } return new f(t,n,o = "number" == typeof o && isFinite(o) && o >= 1 ? o : 0,a).promise() } c.inherits(f, n), f.prototype._asyncInit = function() { this._init$(void 0, -2) } , f.prototype._init = function() {} , f.prototype._promiseFulfilled = function(t, n) { var i = this._values , a = this.length() , s = this._preservedValues , l = this._limit; if (n < 0) { if (i[n = -1 * n - 1] = t, l >= 1 && (this._inFlight--, this._drainQueue(), this._isResolved())) return !0 } else { if (l >= 1 && this._inFlight >= l) return i[n] = t, this._queue.push(n), !1; null !== s && (s[n] = t); var c = this._promise , h = this._callback , f = c._boundValue(); c._pushContext(); var _ = u(h).call(f, t, n, a) , g = c._popContext(); if (o.checkForgottenReturns(_, g, null !== s ? "Promise.filter" : "Promise.map", c), _ === d) return this._reject(_.e), !0; var p = r(_, this._promise); if (p instanceof e) { var v = (p = p._target())._bitField; if (0 == (50397184 & v)) return l >= 1 && this._inFlight++, i[n] = p, p._proxy(this, -1 * (n + 1)), !1; if (0 == (33554432 & v)) return 0 != (16777216 & v) ? (this._reject(p._reason()), !0) : (this._cancel(), !0); _ = p._value() } i[n] = _ } return ++this._totalResolved >= a && (null !== s ? this._filter(i, s) : this._resolve(i), !0) } , f.prototype._drainQueue = function() { for (var t = this._queue, e = this._limit, n = this._values; t.length > 0 && this._inFlight < e; ) { if (this._isResolved()) return; var i = t.pop(); this._promiseFulfilled(n[i], i) } } , f.prototype._filter = function(t, e) { for (var n = e.length, i = new Array(n), r = 0, a = 0; a < n; ++a) t[a] && (i[r++] = e[a]); i.length = r, this._resolve(i) } , f.prototype.preservedValues = function() { return this._preservedValues } , e.prototype.map = function(t, e) { return _(this, t, e, null) } , e.map = function(t, e, n, i) { return _(t, e, n, i) } } } , { "./util": 36 }], 19: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a) { var o = t("./util") , s = o.tryCatch; e.method = function(t) { if ("function" != typeof t) throw new e.TypeError("expecting a function but got " + o.classString(t)); return function() { var i = new e(n); i._captureStackTrace(), i._pushContext(); var r = s(t).apply(this, arguments) , o = i._popContext(); return a.checkForgottenReturns(r, o, "Promise.method", i), i._resolveFromSyncValue(r), i } } , e.attempt = e.try = function(t) { if ("function" != typeof t) return r("expecting a function but got " + o.classString(t)); var i, l = new e(n); if (l._captureStackTrace(), l._pushContext(), arguments.length > 1) { a.deprecated("calling Promise.try with more than 1 argument"); var c = arguments[1] , u = arguments[2]; i = o.isArray(c) ? s(t).apply(u, c) : s(t).call(u, c) } else i = s(t)(); var d = l._popContext(); return a.checkForgottenReturns(i, d, "Promise.try", l), l._resolveFromSyncValue(i), l } , e.prototype._resolveFromSyncValue = function(t) { t === o.errorObj ? this._rejectCallback(t.e, !1) : this._resolveCallback(t, !0) } } } , { "./util": 36 }], 20: [function(t, e, n) { "use strict"; var i = t("./util") , r = i.maybeWrapAsError , a = t("./errors").OperationalError , o = t("./es5"); var s = /^(?:name|message|stack|cause)$/; function l(t) { var e; if (function(t) { return t instanceof Error && o.getPrototypeOf(t) === Error.prototype }(t)) { (e = new a(t)).name = t.name, e.message = t.message, e.stack = t.stack; for (var n = o.keys(t), r = 0; r < n.length; ++r) { var l = n[r]; s.test(l) || (e[l] = t[l]) } return e } return i.markAsOriginatingFromRejection(t), t } e.exports = function(t, e) { return function(n, i) { if (null !== t) { if (n) { var a = l(r(n)); t._attachExtraTrace(a), t._reject(a) } else if (e) { var o = [].slice.call(arguments, 1); t._fulfill(o) } else t._fulfill(i); t = null } } } } , { "./errors": 12, "./es5": 13, "./util": 36 }], 21: [function(t, e, n) { "use strict"; e.exports = function(e) { var n = t("./util") , i = e._async , r = n.tryCatch , a = n.errorObj; function o(t, e) { if (!n.isArray(t)) return s.call(this, t, e); var o = r(e).apply(this._boundValue(), [null].concat(t)); o === a && i.throwLater(o.e) } function s(t, e) { var n = this._boundValue() , o = void 0 === t ? r(e).call(n, null) : r(e).call(n, null, t); o === a && i.throwLater(o.e) } function l(t, e) { if (!t) { var n = new Error(t + ""); n.cause = t, t = n } var o = r(e).call(this._boundValue(), t); o === a && i.throwLater(o.e) } e.prototype.asCallback = e.prototype.nodeify = function(t, e) { if ("function" == typeof t) { var n = s; void 0 !== e && Object(e).spread && (n = o), this._then(n, l, void 0, this, t) } return this } } } , { "./util": 36 }], 22: [function(t, e, i) { "use strict"; e.exports = function() { var i = function() { return new _("circular promise resolution chain\n\n See http://goo.gl/MqrFmX\n") } , r = function() { return new A.PromiseInspection(this._target()) } , a = function(t) { return A.reject(new _(t)) }; function o() {} var s, l = {}, c = t("./util"); s = c.isNode ? function() { var t = n.domain; return void 0 === t && (t = null), t } : function() { return null } , c.notEnumerableProp(A, "_getDomain", s); var u = t("./es5") , d = t("./async") , h = new d; u.defineProperty(A, "_async", { value: h }); var f = t("./errors") , _ = A.TypeError = f.TypeError; A.RangeError = f.RangeError; var g = A.CancellationError = f.CancellationError; A.TimeoutError = f.TimeoutError, A.OperationalError = f.OperationalError, A.RejectionError = f.OperationalError, A.AggregateError = f.AggregateError; var p = function() {} , v = {} , m = {} , y = t("./thenables")(A, p) , k = t("./promise_array")(A, p, y, a, o) , b = t("./context")(A) , x = b.create , w = t("./debuggability")(A, b) , S = (w.CapturedTrace, t("./finally")(A, y, m)) , T = t("./catch_filter")(m) , $ = t("./nodeback") , C = c.errorObj , E = c.tryCatch; function A(t) { t !== p && function(t, e) { if (null == t || t.constructor !== A) throw new _("the promise constructor cannot be invoked directly\n\n See http://goo.gl/MqrFmX\n"); if ("function" != typeof e) throw new _("expecting a function but got " + c.classString(e)) }(this, t), this._bitField = 0, this._fulfillmentHandler0 = void 0, this._rejectionHandler0 = void 0, this._promise0 = void 0, this._receiver0 = void 0, this._resolveFromExecutor(t), this._promiseCreated(), this._fireEvent("promiseCreated", this) } function D(t) { this.promise._resolveCallback(t) } function M(t) { this.promise._rejectCallback(t, !1) } function I(t) { var e = new A(p); e._fulfillmentHandler0 = t, e._rejectionHandler0 = t, e._promise0 = t, e._receiver0 = t } return A.prototype.toString = function() { return "[object Promise]" } , A.prototype.caught = A.prototype.catch = function(t) { var e = arguments.length; if (e > 1) { var n, i = new Array(e - 1), r = 0; for (n = 0; n < e - 1; ++n) { var o = arguments[n]; if (!c.isObject(o)) return a("Catch statement predicate: expecting an object but got " + c.classString(o)); i[r++] = o } return i.length = r, t = arguments[n], this.then(void 0, T(i, t, this)) } return this.then(void 0, t) } , A.prototype.reflect = function() { return this._then(r, r, void 0, this, void 0) } , A.prototype.then = function(t, e) { if (w.warnings() && arguments.length > 0 && "function" != typeof t && "function" != typeof e) { var n = ".then() only accepts functions but was passed: " + c.classString(t); arguments.length > 1 && (n += ", " + c.classString(e)), this._warn(n) } return this._then(t, e, void 0, void 0, void 0) } , A.prototype.done = function(t, e) { this._then(t, e, void 0, void 0, void 0)._setIsFinal() } , A.prototype.spread = function(t) { return "function" != typeof t ? a("expecting a function but got " + c.classString(t)) : this.all()._then(t, void 0, void 0, v, void 0) } , A.prototype.toJSON = function() { var t = { isFulfilled: !1, isRejected: !1, fulfillmentValue: void 0, rejectionReason: void 0 }; return this.isFulfilled() ? (t.fulfillmentValue = this.value(), t.isFulfilled = !0) : this.isRejected() && (t.rejectionReason = this.reason(), t.isRejected = !0), t } , A.prototype.all = function() { return arguments.length > 0 && this._warn(".all() was passed arguments but it does not take any"), new k(this).promise() } , A.prototype.error = function(t) { return this.caught(c.originatesFromRejection, t) } , A.getNewLibraryCopy = e.exports, A.is = function(t) { return t instanceof A } , A.fromNode = A.fromCallback = function(t) { var e = new A(p); e._captureStackTrace(); var n = arguments.length > 1 && !!Object(arguments[1]).multiArgs , i = E(t)($(e, n)); return i === C && e._rejectCallback(i.e, !0), e._isFateSealed() || e._setAsyncGuaranteed(), e } , A.all = function(t) { return new k(t).promise() } , A.cast = function(t) { var e = y(t); return e instanceof A || ((e = new A(p))._captureStackTrace(), e._setFulfilled(), e._rejectionHandler0 = t), e } , A.resolve = A.fulfilled = A.cast, A.reject = A.rejected = function(t) { var e = new A(p); return e._captureStackTrace(), e._rejectCallback(t, !0), e } , A.setScheduler = function(t) { if ("function" != typeof t) throw new _("expecting a function but got " + c.classString(t)); return h.setScheduler(t) } , A.prototype._then = function(t, e, n, i, r) { var a = void 0 !== r , o = a ? r : new A(p) , l = this._target() , u = l._bitField; a || (o._propagateFrom(this, 3), o._captureStackTrace(), void 0 === i && 0 != (2097152 & this._bitField) && (i = 0 != (50397184 & u) ? this._boundValue() : l === this ? void 0 : this._boundTo), this._fireEvent("promiseChained", this, o)); var d = s(); if (0 != (50397184 & u)) { var f, _, v = l._settlePromiseCtx; 0 != (33554432 & u) ? (_ = l._rejectionHandler0, f = t) : 0 != (16777216 & u) ? (_ = l._fulfillmentHandler0, f = e, l._unsetRejectionIsUnhandled()) : (v = l._settlePromiseLateCancellationObserver, _ = new g("late cancellation observer"), l._attachExtraTrace(_), f = e), h.invoke(v, l, { handler: null === d ? f : "function" == typeof f && c.domainBind(d, f), promise: o, receiver: i, value: _ }) } else l._addCallbacks(t, e, o, i, d); return o } , A.prototype._length = function() { return 65535 & this._bitField } , A.prototype._isFateSealed = function() { return 0 != (117506048 & this._bitField) } , A.prototype._isFollowing = function() { return 67108864 == (67108864 & this._bitField) } , A.prototype._setLength = function(t) { this._bitField = -65536 & this._bitField | 65535 & t } , A.prototype._setFulfilled = function() { this._bitField = 33554432 | this._bitField, this._fireEvent("promiseFulfilled", this) } , A.prototype._setRejected = function() { this._bitField = 16777216 | this._bitField, this._fireEvent("promiseRejected", this) } , A.prototype._setFollowing = function() { this._bitField = 67108864 | this._bitField, this._fireEvent("promiseResolved", this) } , A.prototype._setIsFinal = function() { this._bitField = 4194304 | this._bitField } , A.prototype._isFinal = function() { return (4194304 & this._bitField) > 0 } , A.prototype._unsetCancelled = function() { this._bitField = -65537 & this._bitField } , A.prototype._setCancelled = function() { this._bitField = 65536 | this._bitField, this._fireEvent("promiseCancelled", this) } , A.prototype._setWillBeCancelled = function() { this._bitField = 8388608 | this._bitField } , A.prototype._setAsyncGuaranteed = function() { h.hasCustomScheduler() || (this._bitField = 134217728 | this._bitField) } , A.prototype._receiverAt = function(t) { var e = 0 === t ? this._receiver0 : this[4 * t - 4 + 3]; if (e !== l) return void 0 === e && this._isBound() ? this._boundValue() : e } , A.prototype._promiseAt = function(t) { return this[4 * t - 4 + 2] } , A.prototype._fulfillmentHandlerAt = function(t) { return this[4 * t - 4 + 0] } , A.prototype._rejectionHandlerAt = function(t) { return this[4 * t - 4 + 1] } , A.prototype._boundValue = function() {} , A.prototype._migrateCallback0 = function(t) { t._bitField; var e = t._fulfillmentHandler0 , n = t._rejectionHandler0 , i = t._promise0 , r = t._receiverAt(0); void 0 === r && (r = l), this._addCallbacks(e, n, i, r, null) } , A.prototype._migrateCallbackAt = function(t, e) { var n = t._fulfillmentHandlerAt(e) , i = t._rejectionHandlerAt(e) , r = t._promiseAt(e) , a = t._receiverAt(e); void 0 === a && (a = l), this._addCallbacks(n, i, r, a, null) } , A.prototype._addCallbacks = function(t, e, n, i, r) { var a = this._length(); if (a >= 65531 && (a = 0, this._setLength(0)), 0 === a) this._promise0 = n, this._receiver0 = i, "function" == typeof t && (this._fulfillmentHandler0 = null === r ? t : c.domainBind(r, t)), "function" == typeof e && (this._rejectionHandler0 = null === r ? e : c.domainBind(r, e)); else { var o = 4 * a - 4; this[o + 2] = n, this[o + 3] = i, "function" == typeof t && (this[o + 0] = null === r ? t : c.domainBind(r, t)), "function" == typeof e && (this[o + 1] = null === r ? e : c.domainBind(r, e)) } return this._setLength(a + 1), a } , A.prototype._proxy = function(t, e) { this._addCallbacks(void 0, void 0, e, t, null) } , A.prototype._resolveCallback = function(t, e) { if (0 == (117506048 & this._bitField)) { if (t === this) return this._rejectCallback(i(), !1); var n = y(t, this); if (!(n instanceof A)) return this._fulfill(t); e && this._propagateFrom(n, 2); var r = n._target(); if (r !== this) { var a = r._bitField; if (0 == (50397184 & a)) { var o = this._length(); o > 0 && r._migrateCallback0(this); for (var s = 1; s < o; ++s) r._migrateCallbackAt(this, s); this._setFollowing(), this._setLength(0), this._setFollowee(r) } else if (0 != (33554432 & a)) this._fulfill(r._value()); else if (0 != (16777216 & a)) this._reject(r._reason()); else { var l = new g("late cancellation observer"); r._attachExtraTrace(l), this._reject(l) } } else this._reject(i()) } } , A.prototype._rejectCallback = function(t, e, n) { var i = c.ensureErrorObject(t) , r = i === t; if (!r && !n && w.warnings()) { var a = "a promise was rejected with a non-error: " + c.classString(t); this._warn(a, !0) } this._attachExtraTrace(i, !!e && r), this._reject(t) } , A.prototype._resolveFromExecutor = function(t) { if (t !== p) { var e = this; this._captureStackTrace(), this._pushContext(); var n = !0 , i = this._execute(t, function(t) { e._resolveCallback(t) }, function(t) { e._rejectCallback(t, n) }); n = !1, this._popContext(), void 0 !== i && e._rejectCallback(i, !0) } } , A.prototype._settlePromiseFromHandler = function(t, e, n, i) { var r = i._bitField; if (0 == (65536 & r)) { var a; i._pushContext(), e === v ? n && "number" == typeof n.length ? a = E(t).apply(this._boundValue(), n) : (a = C).e = new _("cannot .spread() a non-array: " + c.classString(n)) : a = E(t).call(e, n); var o = i._popContext(); 0 == (65536 & (r = i._bitField)) && (a === m ? i._reject(n) : a === C ? i._rejectCallback(a.e, !1) : (w.checkForgottenReturns(a, o, "", i, this), i._resolveCallback(a))) } } , A.prototype._target = function() { for (var t = this; t._isFollowing(); ) t = t._followee(); return t } , A.prototype._followee = function() { return this._rejectionHandler0 } , A.prototype._setFollowee = function(t) { this._rejectionHandler0 = t } , A.prototype._settlePromise = function(t, e, n, i) { var a = t instanceof A , s = this._bitField , l = 0 != (134217728 & s); 0 != (65536 & s) ? (a && t._invokeInternalOnCancel(), n instanceof S && n.isFinallyHandler() ? (n.cancelPromise = t, E(e).call(n, i) === C && t._reject(C.e)) : e === r ? t._fulfill(r.call(n)) : n instanceof o ? n._promiseCancelled(t) : a || t instanceof k ? t._cancel() : n.cancel()) : "function" == typeof e ? a ? (l && t._setAsyncGuaranteed(), this._settlePromiseFromHandler(e, n, i, t)) : e.call(n, i, t) : n instanceof o ? n._isResolved() || (0 != (33554432 & s) ? n._promiseFulfilled(i, t) : n._promiseRejected(i, t)) : a && (l && t._setAsyncGuaranteed(), 0 != (33554432 & s) ? t._fulfill(i) : t._reject(i)) } , A.prototype._settlePromiseLateCancellationObserver = function(t) { var e = t.handler , n = t.promise , i = t.receiver , r = t.value; "function" == typeof e ? n instanceof A ? this._settlePromiseFromHandler(e, i, r, n) : e.call(i, r, n) : n instanceof A && n._reject(r) } , A.prototype._settlePromiseCtx = function(t) { this._settlePromise(t.promise, t.handler, t.receiver, t.value) } , A.prototype._settlePromise0 = function(t, e, n) { var i = this._promise0 , r = this._receiverAt(0); this._promise0 = void 0, this._receiver0 = void 0, this._settlePromise(i, t, r, e) } , A.prototype._clearCallbackDataAtIndex = function(t) { var e = 4 * t - 4; this[e + 2] = this[e + 3] = this[e + 0] = this[e + 1] = void 0 } , A.prototype._fulfill = function(t) { var e = this._bitField; if (!((117506048 & e) >>> 16)) { if (t === this) { var n = i(); return this._attachExtraTrace(n), this._reject(n) } this._setFulfilled(), this._rejectionHandler0 = t, (65535 & e) > 0 && (0 != (134217728 & e) ? this._settlePromises() : h.settlePromises(this), this._dereferenceTrace()) } } , A.prototype._reject = function(t) { var e = this._bitField; if (!((117506048 & e) >>> 16)) { if (this._setRejected(), this._fulfillmentHandler0 = t, this._isFinal()) return h.fatalError(t, c.isNode); (65535 & e) > 0 ? h.settlePromises(this) : this._ensurePossibleRejectionHandled() } } , A.prototype._fulfillPromises = function(t, e) { for (var n = 1; n < t; n++) { var i = this._fulfillmentHandlerAt(n) , r = this._promiseAt(n) , a = this._receiverAt(n); this._clearCallbackDataAtIndex(n), this._settlePromise(r, i, a, e) } } , A.prototype._rejectPromises = function(t, e) { for (var n = 1; n < t; n++) { var i = this._rejectionHandlerAt(n) , r = this._promiseAt(n) , a = this._receiverAt(n); this._clearCallbackDataAtIndex(n), this._settlePromise(r, i, a, e) } } , A.prototype._settlePromises = function() { var t = this._bitField , e = 65535 & t; if (e > 0) { if (0 != (16842752 & t)) { var n = this._fulfillmentHandler0; this._settlePromise0(this._rejectionHandler0, n, t), this._rejectPromises(e, n) } else { var i = this._rejectionHandler0; this._settlePromise0(this._fulfillmentHandler0, i, t), this._fulfillPromises(e, i) } this._setLength(0) } this._clearCancellationData() } , A.prototype._settledValue = function() { var t = this._bitField; return 0 != (33554432 & t) ? this._rejectionHandler0 : 0 != (16777216 & t) ? this._fulfillmentHandler0 : void 0 } , A.defer = A.pending = function() { return w.deprecated("Promise.defer", "new Promise"), { promise: new A(p), resolve: D, reject: M } } , c.notEnumerableProp(A, "_makeSelfResolutionError", i), t("./method")(A, p, y, a, w), t("./bind")(A, p, y, w), t("./cancel")(A, k, a, w), t("./direct_resolve")(A), t("./synchronous_inspection")(A), t("./join")(A, k, y, p, h, s), A.Promise = A, A.version = "3.5.4", t("./map.js")(A, k, a, y, p, w), t("./call_get.js")(A), t("./using.js")(A, a, y, x, p, w), t("./timers.js")(A, p, w), t("./generators.js")(A, a, p, y, o, w), t("./nodeify.js")(A), t("./promisify.js")(A, p), t("./props.js")(A, k, y, a), t("./race.js")(A, p, y, a), t("./reduce.js")(A, k, a, y, p, w), t("./settle.js")(A, k, w), t("./some.js")(A, k, a), t("./filter.js")(A, p), t("./each.js")(A, p), t("./any.js")(A), c.toFastProperties(A), c.toFastProperties(A.prototype), I({ a: 1 }), I({ b: 2 }), I({ c: 3 }), I(1), I(function() {}), I(void 0), I(!1), I(new A(p)), w.setBounds(d.firstLineError, c.lastLineError), A } } , { "./any.js": 1, "./async": 2, "./bind": 3, "./call_get.js": 5, "./cancel": 6, "./catch_filter": 7, "./context": 8, "./debuggability": 9, "./direct_resolve": 10, "./each.js": 11, "./errors": 12, "./es5": 13, "./filter.js": 14, "./finally": 15, "./generators.js": 16, "./join": 17, "./map.js": 18, "./method": 19, "./nodeback": 20, "./nodeify.js": 21, "./promise_array": 23, "./promisify.js": 24, "./props.js": 25, "./race.js": 27, "./reduce.js": 28, "./settle.js": 30, "./some.js": 31, "./synchronous_inspection": 32, "./thenables": 33, "./timers.js": 34, "./using.js": 35, "./util": 36 }], 23: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a) { var o = t("./util"); o.isArray; function s(t) { var i = this._promise = new e(n); t instanceof e && i._propagateFrom(t, 3), i._setOnCancel(this), this._values = t, this._length = 0, this._totalResolved = 0, this._init(void 0, -2) } return o.inherits(s, a), s.prototype.length = function() { return this._length } , s.prototype.promise = function() { return this._promise } , s.prototype._init = function t(n, a) { var s = i(this._values, this._promise); if (s instanceof e) { var l = (s = s._target())._bitField; if (this._values = s, 0 == (50397184 & l)) return this._promise._setAsyncGuaranteed(), s._then(t, this._reject, void 0, this, a); if (0 == (33554432 & l)) return 0 != (16777216 & l) ? this._reject(s._reason()) : this._cancel(); s = s._value() } if (null !== (s = o.asArray(s))) 0 !== s.length ? this._iterate(s) : -5 === a ? this._resolveEmptyArray() : this._resolve(function(t) { switch (t) { case -2: return []; case -3: return {}; case -6: return new Map } }(a)); else { var c = r("expecting an array or an iterable object but got " + o.classString(s)).reason(); this._promise._rejectCallback(c, !1) } } , s.prototype._iterate = function(t) { var n = this.getActualLength(t.length); this._length = n, this._values = this.shouldCopyValues() ? new Array(n) : this._values; for (var r = this._promise, a = !1, o = null, s = 0; s < n; ++s) { var l = i(t[s], r); o = l instanceof e ? (l = l._target())._bitField : null, a ? null !== o && l.suppressUnhandledRejections() : null !== o ? 0 == (50397184 & o) ? (l._proxy(this, s), this._values[s] = l) : a = 0 != (33554432 & o) ? this._promiseFulfilled(l._value(), s) : 0 != (16777216 & o) ? this._promiseRejected(l._reason(), s) : this._promiseCancelled(s) : a = this._promiseFulfilled(l, s) } a || r._setAsyncGuaranteed() } , s.prototype._isResolved = function() { return null === this._values } , s.prototype._resolve = function(t) { this._values = null, this._promise._fulfill(t) } , s.prototype._cancel = function() { !this._isResolved() && this._promise._isCancellable() && (this._values = null, this._promise._cancel()) } , s.prototype._reject = function(t) { this._values = null, this._promise._rejectCallback(t, !1) } , s.prototype._promiseFulfilled = function(t, e) { return this._values[e] = t, ++this._totalResolved >= this._length && (this._resolve(this._values), !0) } , s.prototype._promiseCancelled = function() { return this._cancel(), !0 } , s.prototype._promiseRejected = function(t) { return this._totalResolved++, this._reject(t), !0 } , s.prototype._resultCancelled = function() { if (!this._isResolved()) { var t = this._values; if (this._cancel(), t instanceof e) t.cancel(); else for (var n = 0; n < t.length; ++n) t[n]instanceof e && t[n].cancel() } } , s.prototype.shouldCopyValues = function() { return !0 } , s.prototype.getActualLength = function(t) { return t } , s } } , { "./util": 36 }], 24: [function(t, e, n) { "use strict"; e.exports = function(e, n) { var i = {} , r = t("./util") , a = t("./nodeback") , o = r.withAppended , s = r.maybeWrapAsError , c = r.canEvaluate , u = t("./errors").TypeError , d = { __isPromisified__: !0 } , h = new RegExp("^(?:" + ["arity", "length", "name", "arguments", "caller", "callee", "prototype", "__isPromisified__"].join("|") + ")$") , f = function(t) { return r.isIdentifier(t) && "_" !== t.charAt(0) && "constructor" !== t }; function _(t) { return !h.test(t) } function g(t) { try { return !0 === t.__isPromisified__ } catch (t) { return !1 } } function p(t, e, n) { var i = r.getDataPropertyOrDefault(t, e + n, d); return !!i && g(i) } function v(t, e, n, i) { for (var a = r.inheritedDataKeys(t), o = [], s = 0; s < a.length; ++s) { var l = a[s] , c = t[l] , d = i === f || f(l, c, t); "function" != typeof c || g(c) || p(t, l, e) || !i(l, c, t, d) || o.push(l, c) } return function(t, e, n) { for (var i = 0; i < t.length; i += 2) { var r = t[i]; if (n.test(r)) for (var a = r.replace(n, ""), o = 0; o < t.length; o += 2) if (t[o] === a) throw new u("Cannot promisify an API that has normal methods with '%s'-suffix\n\n See http://goo.gl/MqrFmX\n".replace("%s", e)) } }(o, e, n), o } var m = function(t) { return t.replace(/([$])/, "\\$") }; var y = c ? void 0 : function(t, l, c, u, d, h) { var f = function() { return this }() , _ = t; function g() { var r = l; l === i && (r = this); var c = new e(n); c._captureStackTrace(); var u = "string" == typeof _ && this !== f ? this[_] : t , d = a(c, h); try { u.apply(r, o(arguments, d)) } catch (t) { c._rejectCallback(s(t), !0, !0) } return c._isFateSealed() || c._setAsyncGuaranteed(), c } return "string" == typeof _ && (t = u), r.notEnumerableProp(g, "__isPromisified__", !0), g } ; function k(t, e, n, a, o) { for (var s = new RegExp(m(e) + "$"), l = v(t, e, s, n), c = 0, u = l.length; c < u; c += 2) { var d = l[c] , h = l[c + 1] , f = d + e; if (a === y) t[f] = y(d, i, d, h, e, o); else { var _ = a(h, function() { return y(d, i, d, h, e, o) }); r.notEnumerableProp(_, "__isPromisified__", !0), t[f] = _ } } return r.toFastProperties(t), t } e.promisify = function(t, e) { if ("function" != typeof t) throw new u("expecting a function but got " + r.classString(t)); if (g(t)) return t; var n = function(t, e, n) { return y(t, e, void 0, t, null, n) }(t, void 0 === (e = Object(e)).context ? i : e.context, !!e.multiArgs); return r.copyDescriptors(t, n, _), n } , e.promisifyAll = function(t, e) { if ("function" != typeof t && "object" !== l(t)) throw new u("the target of promisifyAll must be an object or a function\n\n See http://goo.gl/MqrFmX\n"); var n = !!(e = Object(e)).multiArgs , i = e.suffix; "string" != typeof i && (i = "Async"); var a = e.filter; "function" != typeof a && (a = f); var o = e.promisifier; if ("function" != typeof o && (o = y), !r.isIdentifier(i)) throw new RangeError("suffix must be a valid identifier\n\n See http://goo.gl/MqrFmX\n"); for (var s = r.inheritedDataKeys(t), c = 0; c < s.length; ++c) { var d = t[s[c]]; "constructor" !== s[c] && r.isClass(d) && (k(d.prototype, i, a, o, n), k(d, i, a, o, n)) } return k(t, i, a, o, n) } } } , { "./errors": 12, "./nodeback": 20, "./util": 36 }], 25: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r) { var a, o = t("./util"), s = o.isObject, l = t("./es5"); "function" == typeof Map && (a = Map); var c = function() { var t = 0 , e = 0; function n(n, i) { this[t] = n, this[t + e] = i, t++ } return function(i) { e = i.size, t = 0; var r = new Array(2 * i.size); return i.forEach(n, r), r } }(); function u(t) { var e, n = !1; if (void 0 !== a && t instanceof a) e = c(t), n = !0; else { var i = l.keys(t) , r = i.length; e = new Array(2 * r); for (var o = 0; o < r; ++o) { var s = i[o]; e[o] = t[s], e[o + r] = s } } this.constructor$(e), this._isMap = n, this._init$(void 0, n ? -6 : -3) } function d(t) { var n, a = i(t); return s(a) ? (n = a instanceof e ? a._then(e.props, void 0, void 0, void 0, void 0) : new u(a).promise(), a instanceof e && n._propagateFrom(a, 2), n) : r("cannot await properties of a non-object\n\n See http://goo.gl/MqrFmX\n") } o.inherits(u, n), u.prototype._init = function() {} , u.prototype._promiseFulfilled = function(t, e) { if (this._values[e] = t, ++this._totalResolved >= this._length) { var n; if (this._isMap) n = function(t) { for (var e = new a, n = t.length / 2 | 0, i = 0; i < n; ++i) { var r = t[n + i] , o = t[i]; e.set(r, o) } return e }(this._values); else { n = {}; for (var i = this.length(), r = 0, o = this.length(); r < o; ++r) n[this._values[r + i]] = this._values[r] } return this._resolve(n), !0 } return !1 } , u.prototype.shouldCopyValues = function() { return !1 } , u.prototype.getActualLength = function(t) { return t >> 1 } , e.prototype.props = function() { return d(this) } , e.props = function(t) { return d(t) } } } , { "./es5": 13, "./util": 36 }], 26: [function(t, e, n) { "use strict"; function i(t) { this._capacity = t, this._length = 0, this._front = 0 } i.prototype._willBeOverCapacity = function(t) { return this._capacity < t } , i.prototype._pushOne = function(t) { var e = this.length(); this._checkCapacity(e + 1), this[this._front + e & this._capacity - 1] = t, this._length = e + 1 } , i.prototype.push = function(t, e, n) { var i = this.length() + 3; if (this._willBeOverCapacity(i)) return this._pushOne(t), this._pushOne(e), void this._pushOne(n); var r = this._front + i - 3; this._checkCapacity(i); var a = this._capacity - 1; this[r + 0 & a] = t, this[r + 1 & a] = e, this[r + 2 & a] = n, this._length = i } , i.prototype.shift = function() { var t = this._front , e = this[t]; return this[t] = void 0, this._front = t + 1 & this._capacity - 1, this._length--, e } , i.prototype.length = function() { return this._length } , i.prototype._checkCapacity = function(t) { this._capacity < t && this._resizeTo(this._capacity << 1) } , i.prototype._resizeTo = function(t) { var e = this._capacity; this._capacity = t, function(t, e, n, i, r) { for (var a = 0; a < r; ++a) n[a + i] = t[a + e], t[a + e] = void 0 }(this, 0, this, e, this._front + this._length & e - 1) } , e.exports = i } , {}], 27: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r) { var a = t("./util") , o = function(t) { return t.then(function(e) { return s(e, t) }) }; function s(t, s) { var l = i(t); if (l instanceof e) return o(l); if (null === (t = a.asArray(t))) return r("expecting an array or an iterable object but got " + a.classString(t)); var c = new e(n); void 0 !== s && c._propagateFrom(s, 3); for (var u = c._fulfill, d = c._reject, h = 0, f = t.length; h < f; ++h) { var _ = t[h]; (void 0 !== _ || h in t) && e.cast(_)._then(u, d, void 0, c, null) } return c } e.race = function(t) { return s(t, void 0) } , e.prototype.race = function() { return s(this, void 0) } } } , { "./util": 36 }], 28: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a, o) { var s = e._getDomain , l = t("./util") , c = l.tryCatch; function u(t, n, i, r) { this.constructor$(t); var o = s(); this._fn = null === o ? n : l.domainBind(o, n), void 0 !== i && (i = e.resolve(i))._attachCancellationCallback(this), this._initialValue = i, this._currentCancellable = null, this._eachValues = r === a ? Array(this._length) : 0 === r ? null : void 0, this._promise._captureStackTrace(), this._init$(void 0, -5) } function d(t, e) { this.isFulfilled() ? e._resolve(t) : e._reject(t) } function h(t, e, n, r) { return "function" != typeof e ? i("expecting a function but got " + l.classString(e)) : new u(t,e,n,r).promise() } function f(t) { this.accum = t, this.array._gotAccum(t); var n = r(this.value, this.array._promise); return n instanceof e ? (this.array._currentCancellable = n, n._then(_, void 0, void 0, this, void 0)) : _.call(this, n) } function _(t) { var n, i = this.array, r = i._promise, a = c(i._fn); r._pushContext(), (n = void 0 !== i._eachValues ? a.call(r._boundValue(), t, this.index, this.length) : a.call(r._boundValue(), this.accum, t, this.index, this.length))instanceof e && (i._currentCancellable = n); var s = r._popContext(); return o.checkForgottenReturns(n, s, void 0 !== i._eachValues ? "Promise.each" : "Promise.reduce", r), n } l.inherits(u, n), u.prototype._gotAccum = function(t) { void 0 !== this._eachValues && null !== this._eachValues && t !== a && this._eachValues.push(t) } , u.prototype._eachComplete = function(t) { return null !== this._eachValues && this._eachValues.push(t), this._eachValues } , u.prototype._init = function() {} , u.prototype._resolveEmptyArray = function() { this._resolve(void 0 !== this._eachValues ? this._eachValues : this._initialValue) } , u.prototype.shouldCopyValues = function() { return !1 } , u.prototype._resolve = function(t) { this._promise._resolveCallback(t), this._values = null } , u.prototype._resultCancelled = function(t) { if (t === this._initialValue) return this._cancel(); this._isResolved() || (this._resultCancelled$(), this._currentCancellable instanceof e && this._currentCancellable.cancel(), this._initialValue instanceof e && this._initialValue.cancel()) } , u.prototype._iterate = function(t) { var n, i; this._values = t; var r = t.length; if (void 0 !== this._initialValue ? (n = this._initialValue, i = 0) : (n = e.resolve(t[0]), i = 1), this._currentCancellable = n, !n.isRejected()) for (; i < r; ++i) { var a = { accum: null, value: t[i], index: i, length: r, array: this }; n = n._then(f, void 0, void 0, a, void 0) } void 0 !== this._eachValues && (n = n._then(this._eachComplete, void 0, void 0, this, void 0)), n._then(d, d, void 0, n, this) } , e.prototype.reduce = function(t, e) { return h(this, t, e, null) } , e.reduce = function(t, e, n, i) { return h(t, e, n, i) } } } , { "./util": 36 }], 29: [function(t, e, a) { "use strict"; var o, s = t("./util"), l = s.getNativePromise(); if (s.isNode && "undefined" == typeof MutationObserver) { var c = i.setImmediate , u = n.nextTick; o = s.isRecentNode ? function(t) { c.call(i, t) } : function(t) { u.call(n, t) } } else if ("function" == typeof l && "function" == typeof l.resolve) { var d = l.resolve(); o = function(t) { d.then(t) } } else o = "undefined" == typeof MutationObserver || "undefined" != typeof window && window.navigator && (window.navigator.standalone || window.cordova) ? void 0 !== r ? function(t) { r(t) } : "undefined" != typeof setTimeout ? function(t) { setTimeout(t, 0) } : function() { throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n") } : function() { var t = document.createElement("div") , e = { attributes: !0 } , n = !1 , i = document.createElement("div"); new MutationObserver(function() { t.classList.toggle("foo"), n = !1 } ).observe(i, e); return function(r) { var a = new MutationObserver(function() { a.disconnect(), r() } ); a.observe(t, e), n || (n = !0, i.classList.toggle("foo")) } }(); e.exports = o } , { "./util": 36 }], 30: [function(t, e, n) { "use strict"; e.exports = function(e, n, i) { var r = e.PromiseInspection; function a(t) { this.constructor$(t) } t("./util").inherits(a, n), a.prototype._promiseResolved = function(t, e) { return this._values[t] = e, ++this._totalResolved >= this._length && (this._resolve(this._values), !0) } , a.prototype._promiseFulfilled = function(t, e) { var n = new r; return n._bitField = 33554432, n._settledValueField = t, this._promiseResolved(e, n) } , a.prototype._promiseRejected = function(t, e) { var n = new r; return n._bitField = 16777216, n._settledValueField = t, this._promiseResolved(e, n) } , e.settle = function(t) { return i.deprecated(".settle()", ".reflect()"), new a(t).promise() } , e.prototype.settle = function() { return e.settle(this) } } } , { "./util": 36 }], 31: [function(t, e, n) { "use strict"; e.exports = function(e, n, i) { var r = t("./util") , a = t("./errors").RangeError , o = t("./errors").AggregateError , s = r.isArray , l = {}; function c(t) { this.constructor$(t), this._howMany = 0, this._unwrap = !1, this._initialized = !1 } function u(t, e) { if ((0 | e) !== e || e < 0) return i("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n"); var n = new c(t) , r = n.promise(); return n.setHowMany(e), n.init(), r } r.inherits(c, n), c.prototype._init = function() { if (this._initialized) if (0 !== this._howMany) { this._init$(void 0, -5); var t = s(this._values); !this._isResolved() && t && this._howMany > this._canPossiblyFulfill() && this._reject(this._getRangeError(this.length())) } else this._resolve([]) } , c.prototype.init = function() { this._initialized = !0, this._init() } , c.prototype.setUnwrap = function() { this._unwrap = !0 } , c.prototype.howMany = function() { return this._howMany } , c.prototype.setHowMany = function(t) { this._howMany = t } , c.prototype._promiseFulfilled = function(t) { return this._addFulfilled(t), this._fulfilled() === this.howMany() && (this._values.length = this.howMany(), 1 === this.howMany() && this._unwrap ? this._resolve(this._values[0]) : this._resolve(this._values), !0) } , c.prototype._promiseRejected = function(t) { return this._addRejected(t), this._checkOutcome() } , c.prototype._promiseCancelled = function() { return this._values instanceof e || null == this._values ? this._cancel() : (this._addRejected(l), this._checkOutcome()) } , c.prototype._checkOutcome = function() { if (this.howMany() > this._canPossiblyFulfill()) { for (var t = new o, e = this.length(); e < this._values.length; ++e) this._values[e] !== l && t.push(this._values[e]); return t.length > 0 ? this._reject(t) : this._cancel(), !0 } return !1 } , c.prototype._fulfilled = function() { return this._totalResolved } , c.prototype._rejected = function() { return this._values.length - this.length() } , c.prototype._addRejected = function(t) { this._values.push(t) } , c.prototype._addFulfilled = function(t) { this._values[this._totalResolved++] = t } , c.prototype._canPossiblyFulfill = function() { return this.length() - this._rejected() } , c.prototype._getRangeError = function(t) { var e = "Input array must contain at least " + this._howMany + " items but contains only " + t + " items"; return new a(e) } , c.prototype._resolveEmptyArray = function() { this._reject(this._getRangeError(0)) } , e.some = function(t, e) { return u(t, e) } , e.prototype.some = function(t) { return u(this, t) } , e._SomePromiseArray = c } } , { "./errors": 12, "./util": 36 }], 32: [function(t, e, n) { "use strict"; e.exports = function(t) { function e(t) { void 0 !== t ? (t = t._target(), this._bitField = t._bitField, this._settledValueField = t._isFateSealed() ? t._settledValue() : void 0) : (this._bitField = 0, this._settledValueField = void 0) } e.prototype._settledValue = function() { return this._settledValueField } ; var n = e.prototype.value = function() { if (!this.isFulfilled()) throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n"); return this._settledValue() } , i = e.prototype.error = e.prototype.reason = function() { if (!this.isRejected()) throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n"); return this._settledValue() } , r = e.prototype.isFulfilled = function() { return 0 != (33554432 & this._bitField) } , a = e.prototype.isRejected = function() { return 0 != (16777216 & this._bitField) } , o = e.prototype.isPending = function() { return 0 == (50397184 & this._bitField) } , s = e.prototype.isResolved = function() { return 0 != (50331648 & this._bitField) } ; e.prototype.isCancelled = function() { return 0 != (8454144 & this._bitField) } , t.prototype.__isCancelled = function() { return 65536 == (65536 & this._bitField) } , t.prototype._isCancelled = function() { return this._target().__isCancelled() } , t.prototype.isCancelled = function() { return 0 != (8454144 & this._target()._bitField) } , t.prototype.isPending = function() { return o.call(this._target()) } , t.prototype.isRejected = function() { return a.call(this._target()) } , t.prototype.isFulfilled = function() { return r.call(this._target()) } , t.prototype.isResolved = function() { return s.call(this._target()) } , t.prototype.value = function() { return n.call(this._target()) } , t.prototype.reason = function() { var t = this._target(); return t._unsetRejectionIsUnhandled(), i.call(t) } , t.prototype._value = function() { return this._settledValue() } , t.prototype._reason = function() { return this._unsetRejectionIsUnhandled(), this._settledValue() } , t.PromiseInspection = e } } , {}], 33: [function(t, e, n) { "use strict"; e.exports = function(e, n) { var i = t("./util") , r = i.errorObj , a = i.isObject; var o = {}.hasOwnProperty; return function(t, s) { if (a(t)) { if (t instanceof e) return t; var l = function(t) { try { return function(t) { return t.then }(t) } catch (t) { return r.e = t, r } }(t); if (l === r) { s && s._pushContext(); var c = e.reject(l.e); return s && s._popContext(), c } if ("function" == typeof l) return function(t) { try { return o.call(t, "_promise0") } catch (t) { return !1 } }(t) ? (c = new e(n), t._then(c._fulfill, c._reject, void 0, c, null), c) : function(t, a, o) { var s = new e(n) , l = s; o && o._pushContext(), s._captureStackTrace(), o && o._popContext(); var c = !0 , u = i.tryCatch(a).call(t, function(t) { s && (s._resolveCallback(t), s = null) }, function(t) { s && (s._rejectCallback(t, c, !0), s = null) }); return c = !1, s && u === r && (s._rejectCallback(u.e, !0, !0), s = null), l }(t, l, s) } return t } } } , { "./util": 36 }], 34: [function(t, e, n) { "use strict"; e.exports = function(e, n, i) { var r = t("./util") , a = e.TimeoutError; function o(t) { this.handle = t } o.prototype._resultCancelled = function() { clearTimeout(this.handle) } ; var s = function(t) { return l(+this).thenReturn(t) } , l = e.delay = function(t, r) { var a, l; return void 0 !== r ? (a = e.resolve(r)._then(s, null, null, t, void 0), i.cancellation() && r instanceof e && a._setOnCancel(r)) : (a = new e(n), l = setTimeout(function() { a._fulfill() }, +t), i.cancellation() && a._setOnCancel(new o(l)), a._captureStackTrace()), a._setAsyncGuaranteed(), a } ; e.prototype.delay = function(t) { return l(t, this) } ; function c(t) { return clearTimeout(this.handle), t } function u(t) { throw clearTimeout(this.handle), t } e.prototype.timeout = function(t, e) { var n, s; t = +t; var l = new o(setTimeout(function() { n.isPending() && function(t, e, n) { var i; i = "string" != typeof e ? e instanceof Error ? e : new a("operation timed out") : new a(e), r.markAsOriginatingFromRejection(i), t._attachExtraTrace(i), t._reject(i), null != n && n.cancel() }(n, e, s) }, t)); return i.cancellation() ? (s = this.then(), (n = s._then(c, u, void 0, l, void 0))._setOnCancel(l)) : n = this._then(c, u, void 0, l, void 0), n } } } , { "./util": 36 }], 35: [function(t, e, n) { "use strict"; e.exports = function(e, n, i, r, a, o) { var s = t("./util") , l = t("./errors").TypeError , c = t("./util").inherits , u = s.errorObj , d = s.tryCatch , h = {}; function f(t) { setTimeout(function() { throw t }, 0) } function _(t, n) { var r = 0 , o = t.length , s = new e(a); return function a() { if (r >= o) return s._fulfill(); var l = function(t) { var e = i(t); return e !== t && "function" == typeof t._isDisposable && "function" == typeof t._getDisposer && t._isDisposable() && e._setDisposable(t._getDisposer()), e }(t[r++]); if (l instanceof e && l._isDisposable()) { try { l = i(l._getDisposer().tryDispose(n), t.promise) } catch (t) { return f(t) } if (l instanceof e) return l._then(a, f, null, null, null) } a() }(), s } function g(t, e, n) { this._data = t, this._promise = e, this._context = n } function p(t, e, n) { this.constructor$(t, e, n) } function v(t) { return g.isDisposer(t) ? (this.resources[this.index]._setDisposable(t), t.promise()) : t } function m(t) { this.length = t, this.promise = null, this[t - 1] = null } g.prototype.data = function() { return this._data } , g.prototype.promise = function() { return this._promise } , g.prototype.resource = function() { return this.promise().isFulfilled() ? this.promise().value() : h } , g.prototype.tryDispose = function(t) { var e = this.resource() , n = this._context; void 0 !== n && n._pushContext(); var i = e !== h ? this.doDispose(e, t) : null; return void 0 !== n && n._popContext(), this._promise._unsetDisposable(), this._data = null, i } , g.isDisposer = function(t) { return null != t && "function" == typeof t.resource && "function" == typeof t.tryDispose } , c(p, g), p.prototype.doDispose = function(t, e) { return this.data().call(t, t, e) } , m.prototype._resultCancelled = function() { for (var t = this.length, n = 0; n < t; ++n) { var i = this[n]; i instanceof e && i.cancel() } } , e.using = function() { var t = arguments.length; if (t < 2) return n("you must pass at least 2 arguments to Promise.using"); var r, a = arguments[t - 1]; if ("function" != typeof a) return n("expecting a function but got " + s.classString(a)); var l = !0; 2 === t && Array.isArray(arguments[0]) ? (t = (r = arguments[0]).length, l = !1) : (r = arguments, t--); for (var c = new m(t), h = 0; h < t; ++h) { var f = r[h]; if (g.isDisposer(f)) { var p = f; (f = f.promise())._setDisposable(p) } else { var y = i(f); y instanceof e && (f = y._then(v, null, null, { resources: c, index: h }, void 0)) } c[h] = f } var k = new Array(c.length); for (h = 0; h < k.length; ++h) k[h] = e.resolve(c[h]).reflect(); var b = e.all(k).then(function(t) { for (var e = 0; e < t.length; ++e) { var n = t[e]; if (n.isRejected()) return u.e = n.error(), u; if (!n.isFulfilled()) return void b.cancel(); t[e] = n.value() } x._pushContext(), a = d(a); var i = l ? a.apply(void 0, t) : a(t) , r = x._popContext(); return o.checkForgottenReturns(i, r, "Promise.using", x), i }) , x = b.lastly(function() { var t = new e.PromiseInspection(b); return _(c, t) }); return c.promise = x, x._setOnCancel(c), x } , e.prototype._setDisposable = function(t) { this._bitField = 131072 | this._bitField, this._disposer = t } , e.prototype._isDisposable = function() { return (131072 & this._bitField) > 0 } , e.prototype._getDisposer = function() { return this._disposer } , e.prototype._unsetDisposable = function() { this._bitField = -131073 & this._bitField, this._disposer = void 0 } , e.prototype.disposer = function(t) { if ("function" == typeof t) return new p(t,this,r()); throw new l } } } , { "./errors": 12, "./util": 36 }], 36: [function(t, e, r) { "use strict"; var a = t("./es5"), o = "undefined" == typeof navigator, s = { e: {} }, c, u = "undefined" != typeof self ? self : "undefined" != typeof window ? window : void 0 !== i ? i : void 0 !== this ? this : null; function d() { try { var t = c; return c = null, t.apply(this, arguments) } catch (t) { return s.e = t, s } } function h(t) { return c = t, d } var f = function(t, e) { var n = {}.hasOwnProperty; function i() { for (var i in this.constructor = t, this.constructor$ = e, e.prototype) n.call(e.prototype, i) && "$" !== i.charAt(i.length - 1) && (this[i + "$"] = e.prototype[i]) } return i.prototype = e.prototype, t.prototype = new i, t.prototype }; function _(t) { return null == t || !0 === t || !1 === t || "string" == typeof t || "number" == typeof t } function g(t) { return "function" == typeof t || "object" === l(t) && null !== t } function p(t) { return _(t) ? new Error(E(t)) : t } function v(t, e) { var n, i = t.length, r = new Array(i + 1); for (n = 0; n < i; ++n) r[n] = t[n]; return r[n] = e, r } function m(t, e, n) { if (!a.isES5) return {}.hasOwnProperty.call(t, e) ? t[e] : void 0; var i = Object.getOwnPropertyDescriptor(t, e); return null != i ? null == i.get && null == i.set ? i.value : n : void 0 } function y(t, e, n) { if (_(t)) return t; var i = { value: n, configurable: !0, enumerable: !1, writable: !0 }; return a.defineProperty(t, e, i), t } function k(t) { throw t } var b = function() { var t = [Array.prototype, Object.prototype, Function.prototype] , e = function(e) { for (var n = 0; n < t.length; ++n) if (t[n] === e) return !0; return !1 }; if (a.isES5) { var n = Object.getOwnPropertyNames; return function(t) { for (var i = [], r = Object.create(null); null != t && !e(t); ) { var o; try { o = n(t) } catch (t) { return i } for (var s = 0; s < o.length; ++s) { var l = o[s]; if (!r[l]) { r[l] = !0; var c = Object.getOwnPropertyDescriptor(t, l); null != c && null == c.get && null == c.set && i.push(l) } } t = a.getPrototypeOf(t) } return i } } var i = {}.hasOwnProperty; return function(n) { if (e(n)) return []; var r = []; t: for (var a in n) if (i.call(n, a)) r.push(a); else { for (var o = 0; o < t.length; ++o) if (i.call(t[o], a)) continue t; r.push(a) } return r } }() , x = /this\s*\.\s*\S+\s*=/; function w(t) { try { if ("function" == typeof t) { var e = a.names(t.prototype) , n = a.isES5 && e.length > 1 , i = e.length > 0 && !(1 === e.length && "constructor" === e[0]) , r = x.test(t + "") && a.names(t).length > 0; if (n || i || r) return !0 } return !1 } catch (t) { return !1 } } function S(t) { function e() {} e.prototype = t; var n = new e; function i() { return l(n.foo) } return i(), i(), t } var T = /^[a-z$_][a-z$_0-9]*$/i; function $(t) { return T.test(t) } function C(t, e, n) { for (var i = new Array(t), r = 0; r < t; ++r) i[r] = e + r + n; return i } function E(t) { try { return t + "" } catch (t) { return "[no string representation]" } } function A(t) { return t instanceof Error || null !== t && "object" === l(t) && "string" == typeof t.message && "string" == typeof t.name } function D(t) { try { y(t, "isOperational", !0) } catch (t) {} } function M(t) { return null != t && (t instanceof Error.__BluebirdErrorTypes__.OperationalError || !0 === t.isOperational) } function I(t) { return A(t) && a.propertyIsWritable(t, "stack") } var P = "stack"in new Error ? function(t) { return I(t) ? t : new Error(E(t)) } : function(t) { if (I(t)) return t; try { throw new Error(E(t)) } catch (t) { return t } } ; function N(t) { return {}.toString.call(t) } function O(t, e, n) { for (var i = a.names(t), r = 0; r < i.length; ++r) { var o = i[r]; if (n(o)) try { a.defineProperty(e, o, a.getDescriptor(t, o)) } catch (t) {} } } var L = function(t) { return a.isArray(t) ? t : null }; if ("undefined" != typeof Symbol && Symbol.iterator) { var R = "function" == typeof Array.from ? function(t) { return Array.from(t) } : function(t) { for (var e, n = [], i = t[Symbol.iterator](); !(e = i.next()).done; ) n.push(e.value); return n } ; L = function(t) { return a.isArray(t) ? t : null != t && "function" == typeof t[Symbol.iterator] ? R(t) : null } } var j = void 0 !== n && "[object process]" === N(n).toLowerCase() , H = void 0 !== n && void 0 !== n.env; function F(t) { return H ? n.env[t] : void 0 } function B() { if ("function" == typeof Promise) try { var t = new Promise(function() {} ); if ("[object Promise]" === {}.toString.call(t)) return Promise } catch (t) {} } function z(t, e) { return t.bind(e) } var U = { isClass: w, isIdentifier: $, inheritedDataKeys: b, getDataPropertyOrDefault: m, thrower: k, isArray: a.isArray, asArray: L, notEnumerableProp: y, isPrimitive: _, isObject: g, isError: A, canEvaluate: o, errorObj: s, tryCatch: h, inherits: f, withAppended: v, maybeWrapAsError: p, toFastProperties: S, filledRange: C, toString: E, canAttachTrace: I, ensureErrorObject: P, originatesFromRejection: M, markAsOriginatingFromRejection: D, classString: N, copyDescriptors: O, hasDevTools: "undefined" != typeof chrome && chrome && "function" == typeof chrome.loadTimes, isNode: j, hasEnvVariables: H, env: F, global: u, getNativePromise: B, domainBind: z }; U.isRecentNode = U.isNode && function() { var t; return n.versions && n.versions.node ? t = n.versions.node.split(".").map(Number) : n.version && (t = n.version.split(".").map(Number)), 0 === t[0] && t[1] > 10 || t[0] > 0 }(), U.isNode && U.toFastProperties(n); try { throw new Error } catch (t) { U.lastLineError = t } e.exports = U } , { "./es5": 13 }] }, {}, [4])(4) }), "undefined" != typeof window && null !== window ? window.P = window.Promise : "undefined" != typeof self && null !== self && (self.P = self.Promise) } ).call(this, n(9), n(4), n(57).setImmediate) } , function(t, e, n) { t.exports = n(233) } , function(t, e, n) { var i = n(0); t.exports = function() { var t = {}; return { getState: function(e) { if (t[e]) return t[e].method(); var n = {}; for (var r in t) t[r].internal || i.mixin(n, t[r].method(), !0); return n }, registerProvider: function(e, n, i) { t[e] = { method: n, internal: i } }, unregisterProvider: function(e) { delete t[e] } } } } , function(t, e) { t.exports = function(t) { var e = {}; function n(n, i, r) { r = r || n; var a = t.config , o = t.templates; t.config[n] && e[r] != a[n] && (i && o[r] || (o[r] = t.date.date_to_str(a[n]), e[r] = a[n])) } return { initTemplates: function() { var e = t.locale.labels; e.gantt_save_btn = e.icon_save, e.gantt_cancel_btn = e.icon_cancel, e.gantt_delete_btn = e.icon_delete; var i = t.date , r = i.date_to_str , a = t.config , o = r(a.xml_date || a.date_format, a.server_utc) , s = i.str_to_date(a.xml_date || a.date_format, a.server_utc); n("date_scale", !0, void 0, t.config, t.templates), n("date_grid", !0, "grid_date_format", t.config, t.templates), n("task_date", !0, void 0, t.config, t.templates), t.mixin(t.templates, { xml_format: void 0, format_date: o, xml_date: void 0, parse_date: s, progress_text: function(t, e, n) { return "" }, grid_header_class: function(t, e) { return "" }, task_text: function(t, e, n) { return n.text }, task_class: function(t, e, n) { return "" }, task_end_date: function(e) { return t.templates.task_date(e) }, grid_row_class: function(t, e, n) { return "" }, task_row_class: function(t, e, n) { return "" }, timeline_cell_class: function(t, e) { return "" }, timeline_cell_content: function(t, e) { return "" }, scale_cell_class: function(t) { return "" }, scale_row_class: function(t) { return "" }, grid_indent: function(t) { return "
" }, grid_folder: function(t) { return "
" }, grid_file: function(t) { return "
" }, grid_open: function(t) { return "
" }, grid_blank: function(t) { return "
" }, date_grid: function(e, n, i) { return n && t.isUnscheduledTask(n) && t.config.show_unscheduled ? t.templates.task_unscheduled_time(n) : t.templates.grid_date_format(e, i) }, task_time: function(e, n, i) { return t.isUnscheduledTask(i) && t.config.show_unscheduled ? t.templates.task_unscheduled_time(i) : t.templates.task_date(e) + " - " + t.templates.task_end_date(n) }, task_unscheduled_time: function(t) { return "" }, time_picker: r(a.time_picker), link_class: function(t) { return "" }, link_description: function(e) { var n = t.getTask(e.source) , i = t.getTask(e.target); return "" + n.text + "" + i.text + "" }, drag_link: function(e, n, i, r) { e = t.getTask(e); var a = t.locale.labels , o = "" + e.text + " " + (n ? a.link_start : a.link_end) + "
"; return i && (o += " " + (i = t.getTask(i)).text + " " + (r ? a.link_start : a.link_end) + "
"), o }, drag_link_class: function(e, n, i, r) { var a = ""; return e && i && (a = " " + (t.isLinkAllowed(e, i, n, r) ? "gantt_link_allow" : "gantt_link_deny")), "gantt_link_tooltip" + a }, tooltip_date_format: i.date_to_str("%Y-%m-%d"), tooltip_text: function(e, n, i) { return "Task: " + i.text + "
Start date: " + t.templates.tooltip_date_format(e) + "
End date: " + t.templates.tooltip_date_format(n) } }) }, initTemplate: n } } } , function(t, e, n) { var i = n(5) , r = n(0) , a = n(50) , o = n(21) , s = n(1); t.exports = function(t) { function e(t) { return { target: t.target || t.srcElement, pageX: t.pageX, pageY: t.pageY, clientX: t.clientX, clientY: t.clientY, metaKey: t.metaKey, shiftKey: t.shiftKey, ctrlKey: t.ctrlKey, altKey: t.altKey } } function n(n, a) { this._obj = n, this._settings = a || {}, i(this); var o = this.getInputMethods(); this._drag_start_timer = null, t.attachEvent("onGanttScroll", r.bind(function(t, e) { this.clearDragTimer() }, this)); for (var l = { passive: !1 }, c = 0; c < o.length; c++) r.bind(function(i) { t.event(n, i.down, r.bind(function(o) { i.accessor(o) && (a.preventDefault && a.selector && s.closest(o.target, a.selector) && o.preventDefault(), t.config.touch && o.timeStamp && o.timeStamp - 0 < 300 || (this._settings.original_target = e(o), t.config.touch ? (this.clearDragTimer(), this._drag_start_timer = setTimeout(r.bind(function() { t.getState().lightbox || this.dragStart(n, o, i) }, this), t.config.touch_drag)) : this.dragStart(n, o, i))) }, this), l); var o = document.body; t.event(o, i.up, r.bind(function(t) { i.accessor(t) && this.clearDragTimer() }, this), l) }, this)(o[c]) } return n.prototype = { traceDragEvents: function(e, n) { var i = r.bind(function(t) { return this.dragMove(e, t, n.accessor) }, this); r.bind(function(t) { return this.dragScroll(e, t) }, this); var o = r.bind(function(t) { if (!this.config.started || !r.defined(this.config.updates_per_second) || a(this, this.config.updates_per_second)) { var e = i(t); if (e) try { t && t.preventDefault && t.cancelable && t.preventDefault() } catch (t) {} return e } }, this) , l = s.getRootNode(t.$root) , c = this.config.mousemoveContainer || s.getRootNode(t.$root) , u = { passive: !1 } , d = r.bind(function(i) { return t.eventRemove(c, n.move, o), t.eventRemove(l, n.up, d, u), this.dragEnd(e) }, this); t.event(c, n.move, o, u), t.event(l, n.up, d, u) }, checkPositionChange: function(t) { var e = t.x - this.config.pos.x , n = t.y - this.config.pos.y; return Math.sqrt(Math.pow(Math.abs(e), 2) + Math.pow(Math.abs(n), 2)) > this.config.sensitivity }, initDnDMarker: function() { var t = this.config.marker = document.createElement("div"); t.className = "gantt_drag_marker", t.innerHTML = "", document.body.appendChild(t) }, backupEventTarget: function(n, i) { if (t.config.touch) { var r = i(n) , a = r.target || r.srcElement , o = a.cloneNode(!0); this.config.original_target = e(r), this.config.original_target.target = o, this.config.backup_element = a, a.parentNode.appendChild(o), a.style.display = "none", (this.config.mousemoveContainer || document.body).appendChild(a) } }, getInputMethods: function() { var e = []; if (e.push({ move: "mousemove", down: "mousedown", up: "mouseup", accessor: function(t) { return t } }), t.config.touch) { var n = !0; try { document.createEvent("TouchEvent") } catch (t) { n = !1 } n ? e.push({ move: "touchmove", down: "touchstart", up: "touchend", accessor: function(t) { return t.touches && t.touches.length > 1 ? null : t.touches[0] ? { target: document.elementFromPoint(t.touches[0].clientX, t.touches[0].clientY), pageX: t.touches[0].pageX, pageY: t.touches[0].pageY, clientX: t.touches[0].clientX, clientY: t.touches[0].clientY } : t } }) : o.navigator.pointerEnabled ? e.push({ move: "pointermove", down: "pointerdown", up: "pointerup", accessor: function(t) { return "mouse" == t.pointerType ? null : t } }) : o.navigator.msPointerEnabled && e.push({ move: "MSPointerMove", down: "MSPointerDown", up: "MSPointerUp", accessor: function(t) { return t.pointerType == t.MSPOINTER_TYPE_MOUSE ? null : t } }) } return e }, clearDragTimer: function() { this._drag_start_timer && (clearTimeout(this._drag_start_timer), this._drag_start_timer = null) }, dragStart: function(e, n, i) { this.config && this.config.started || (this.config = { obj: e, marker: null, started: !1, pos: this.getPosition(n), sensitivity: 4 }, this._settings && r.mixin(this.config, this._settings, !0), this.traceDragEvents(e, i), t._prevent_touch_scroll = !0, document.body.className += " gantt_noselect", t.config.touch && this.dragMove(e, n, i.accessor)) }, dragMove: function(e, n, i) { var r = i(n); if (!r) return !1; if (!this.config.marker && !this.config.started) { var a = this.getPosition(r); if (t.config.touch || this.checkPositionChange(a)) { if (this.config.started = !0, this.config.ignore = !1, !1 === this.callEvent("onBeforeDragStart", [e, this.config.original_target])) return this.config.ignore = !0, !1; this.backupEventTarget(n, i), this.initDnDMarker(), t._touch_feedback(), this.callEvent("onAfterDragStart", [e, this.config.original_target]) } else this.config.ignore = !0 } if (!this.config.ignore) { if (n.targetTouches && !r.target) return; return r.pos = this.getPosition(r), this.config.marker.style.left = r.pos.x + "px", this.config.marker.style.top = r.pos.y + "px", this.callEvent("onDragMove", [e, r]), !0 } return !1 }, dragEnd: function(e) { var n = this.config.backup_element; n && n.parentNode && n.parentNode.removeChild(n), t._prevent_touch_scroll = !1, this.config.marker && (this.config.marker.parentNode.removeChild(this.config.marker), this.config.marker = null, this.callEvent("onDragEnd", [])), this.config.started = !1, document.body.className = document.body.className.replace(" gantt_noselect", "") }, getPosition: function(t) { var e = 0 , n = 0; return t.pageX || t.pageY ? (e = t.pageX, n = t.pageY) : (t.clientX || t.clientY) && (e = t.clientX + document.body.scrollLeft + document.documentElement.scrollLeft, n = t.clientY + document.body.scrollTop + document.documentElement.scrollTop), { x: e, y: n } } }, n } } , function(t, e, n) { "use strict"; function i(t, e) { for (var n = 0; n < e.length; n++) { var i = e[n]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value"in i && (i.writable = !0), Object.defineProperty(t, i.key, i) } } n.r(e), n.d(e, "Client", function() { return r }); var r = function() { function t(e) { !function(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") }(this, t); var n = e.url , i = e.token; this._url = n, this._token = i, this._mode = 1, this._seed = 1, this._queue = [], this.data = {}, this.api = {}, this._events = {} } return function(t, e, n) { e && i(t.prototype, e), n && i(t, n) }(t, [{ key: "headers", value: function() { return { Accept: "application/json", "Content-Type": "application/json", "Remote-Token": this._token } } }, { key: "fetch", value: function(t) { function e(e, n) { return t.apply(this, arguments) } return e.toString = function() { return t.toString() } , e }(function(t, e) { var n = { credentials: "include", headers: this.headers() }; return e && (n.method = "POST", n.body = e), fetch(t, n).then(function(t) { return t.json() }) }) }, { key: "load", value: function(t) { var e = this; return t && (this._url = t), this.fetch(this._url).then(function(t) { return e.parse(t) }) } }, { key: "parse", value: function(t) { var e = t.key , n = t.websocket; for (var i in e && (this._token = t.key), t.data) this.data[i] = t.data[i]; for (var r in t.api) { var a = this.api[r] = {} , o = t.api[r]; for (var s in o) a[s] = this._wrapper(r + "." + s) } return n && this.connect(), this } }, { key: "connect", value: function() { var t = this , e = this._socket; e && (this._socket = null, e.onclose = function() {} , e.close()), this._mode = 2, this._socket = function(e, n, i, r) { var a = n; "/" === a[0] && (a = document.location.protocol + "//" + document.location.host + n); var o = -1 != (a = a.replace(/^http(s|):/, "ws$1:")).indexOf("?") ? "&" : "?"; a = "".concat(a).concat(o, "token=").concat(i, "&ws=1"); var s = new WebSocket(a); return s.onclose = function() { return setTimeout(function() { return e.connect() }, 2e3) } , s.onmessage = function(n) { var i = JSON.parse(n.data); switch (i.action) { case "result": e.result(i.body, []); break; case "event": e.fire(i.body.name, i.body.value); break; case "start": t._mode = 3, t._send(), t._resubscribe(); break; default: e.onError(i.data) } } , s }(this, this._url, this._token) } }, { key: "_wrapper", value: function(t) { return function() { var e = this , n = [].slice.call(arguments) , i = null , r = new Promise(function(r, a) { i = { data: { id: e._uid(), name: t, args: n }, status: 1, resolve: r, reject: a }, e._queue.push(i) } ); return this.onCall(i, r), 3 === this._mode ? this._send(i) : setTimeout(function() { return e._send() }, 1), r } .bind(this) } }, { key: "_uid", value: function() { return (this._seed++).toString() } }, { key: "_send", value: function(t) { var e = this; if (2 != this._mode) { var n = t ? [t] : this._queue.filter(function(t) { return 1 === t.status }); if (n.length) { var i = n.map(function(t) { return t.status = 2, t.data }); 3 !== this._mode ? this.fetch(this._url, JSON.stringify(i)).catch(function(t) { return e.onError(t) }).then(function(t) { return e.result(t, i) }) : this._socket.send(JSON.stringify({ action: "call", body: i })) } } else setTimeout(function() { return e._send() }, 100) } }, { key: "result", value: function(t, e) { var n = {}; if (t) for (var i = 0; i < t.length; i++) n[t[i].id] = t[i]; else for (var r = 0; r < e.length; r++) n[e[r].id] = { id: e[r].id, error: "Network Error", data: null }; for (var a = this._queue.length - 1; a >= 0; a--) { var o = this._queue[a] , s = n[o.data.id]; s && (this.onResponse(o, s), s.error ? o.reject(s.error) : o.resolve(s.data), this._queue.splice(a, 1)) } } }, { key: "on", value: function(t, e) { var n = this._uid() , i = this._events[t] , r = !!i; return r || (i = this._events[t] = []), i.push({ id: n, handler: e }), r || 3 != this._mode || this._socket.send(JSON.stringify({ action: "subscribe", name: t })), { name: t, id: n } } }, { key: "_resubscribe", value: function() { if (3 == this._mode) for (var t in this._events) this._socket.send(JSON.stringify({ action: "subscribe", name: t })) } }, { key: "detach", value: function(t) { if (t) { var e = t.id , n = t.name , i = this._events[n]; if (i) { var r = i.filter(function(t) { return t.id != e }); r.length ? this._events[n] = r : (delete this._events[n], 3 == this._mode && this._socket.send(JSON.stringify({ action: "unsubscribe", name: n }))) } } else { if (3 == this._mode) for (var a in this._events) this._socket.send(JSON.stringify({ action: "unsubscribe", key: a })); this._events = {} } } }, { key: "fire", value: function(t, e) { var n = this._events[t]; if (n) for (var i = 0; i < n.length; i++) n[i].handler(e) } }, { key: "onError", value: function(t) { return null } }, { key: "onCall", value: function(t, e) {} }, { key: "onResponse", value: function(t, e) {} }]), t }() } , function(t, e, n) { var i = n(238); t.exports = { remoteEvents: function(t, e) { var n = this , r = new i.Client({ url: t, token: e }); r.fetch = function(t, e) { var n = { headers: this.headers() }; return e && (n.method = "POST", n.body = e), fetch(t, n).then(function(t) { return t.json() }) } , this._ready = r.load().then(function(t) { return n._remote = t }), this.ready = function() { return this._ready } , this.on = function(t, e) { this.ready().then(function(n) { if ("string" == typeof t) n.on(t, e); else for (var i in t) n.on(i, t[i]) }) } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = { date_to_str: function(t, e, n) { return function(i) { return t.replace(/%[a-zA-Z]/g, function(t) { switch (t) { case "%d": return e ? n.date.to_fixed(i.getUTCDate()) : n.date.to_fixed(i.getDate()); case "%m": return e ? n.date.to_fixed(i.getUTCMonth() + 1) : n.date.to_fixed(i.getMonth() + 1); case "%j": return e ? i.getUTCDate() : i.getDate(); case "%n": return e ? i.getUTCMonth() + 1 : i.getMonth() + 1; case "%y": return e ? n.date.to_fixed(i.getUTCFullYear() % 100) : n.date.to_fixed(i.getFullYear() % 100); case "%Y": return e ? i.getUTCFullYear() : i.getFullYear(); case "%D": return e ? n.locale.date.day_short[i.getUTCDay()] : n.locale.date.day_short[i.getDay()]; case "%l": return e ? n.locale.date.day_full[i.getUTCDay()] : n.locale.date.day_full[i.getDay()]; case "%M": return e ? n.locale.date.month_short[i.getUTCMonth()] : n.locale.date.month_short[i.getMonth()]; case "%F": return e ? n.locale.date.month_full[i.getUTCMonth()] : n.locale.date.month_full[i.getMonth()]; case "%h": return e ? n.date.to_fixed((i.getUTCHours() + 11) % 12 + 1) : n.date.to_fixed((i.getHours() + 11) % 12 + 1); case "%g": return e ? (i.getUTCHours() + 11) % 12 + 1 : (i.getHours() + 11) % 12 + 1; case "%G": return e ? i.getUTCHours() : i.getHours(); case "%H": return e ? n.date.to_fixed(i.getUTCHours()) : n.date.to_fixed(i.getHours()); case "%i": return e ? n.date.to_fixed(i.getUTCMinutes()) : n.date.to_fixed(i.getMinutes()); case "%a": return e ? i.getUTCHours() > 11 ? "pm" : "am" : i.getHours() > 11 ? "pm" : "am"; case "%A": return e ? i.getUTCHours() > 11 ? "PM" : "AM" : i.getHours() > 11 ? "PM" : "AM"; case "%s": return e ? n.date.to_fixed(i.getUTCSeconds()) : n.date.to_fixed(i.getSeconds()); case "%W": return e ? n.date.to_fixed(n.date.getUTCISOWeek(i)) : n.date.to_fixed(n.date.getISOWeek(i)); default: return t } }) } }, str_to_date: function(t, e, n) { return function(i) { for (var r = [0, 0, 1, 0, 0, 0], a = i.match(/[a-zA-Z]+|[0-9]+/g), o = t.match(/%[a-zA-Z]/g), s = 0; s < o.length; s++) switch (o[s]) { case "%j": case "%d": r[2] = a[s] || 1; break; case "%n": case "%m": r[1] = (a[s] || 1) - 1; break; case "%y": r[0] = 1 * a[s] + (a[s] > 50 ? 1900 : 2e3); break; case "%g": case "%G": case "%h": case "%H": r[3] = a[s] || 0; break; case "%i": r[4] = a[s] || 0; break; case "%Y": r[0] = a[s] || 0; break; case "%a": case "%A": r[3] = r[3] % 12 + ("am" === (a[s] || "").toLowerCase() ? 0 : 12); break; case "%s": r[5] = a[s] || 0; break; case "%M": r[1] = n.locale.date.month_short_hash[a[s]] || 0; break; case "%F": r[1] = n.locale.date.month_full_hash[a[s]] || 0 } return e ? new Date(Date.UTC(r[0], r[1], r[2], r[3], r[4], r[5])) : new Date(r[0],r[1],r[2],r[3],r[4],r[5]) } } }; e.default = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = { date_to_str: function(t, e, n) { t = t.replace(/%[a-zA-Z]/g, function(t) { switch (t) { case "%d": return '"+to_fixed(date.get' + (e ? "UTC" : "") + 'Date())+"'; case "%m": return '"+to_fixed((date.get' + (e ? "UTC" : "") + 'Month()+1))+"'; case "%j": return '"+date.get' + (e ? "UTC" : "") + 'Date()+"'; case "%n": return '"+(date.get' + (e ? "UTC" : "") + 'Month()+1)+"'; case "%y": return '"+to_fixed(date.get' + (e ? "UTC" : "") + 'FullYear()%100)+"'; case "%Y": return '"+date.get' + (e ? "UTC" : "") + 'FullYear()+"'; case "%D": return '"+locale.date.day_short[date.get' + (e ? "UTC" : "") + 'Day()]+"'; case "%l": return '"+locale.date.day_full[date.get' + (e ? "UTC" : "") + 'Day()]+"'; case "%M": return '"+locale.date.month_short[date.get' + (e ? "UTC" : "") + 'Month()]+"'; case "%F": return '"+locale.date.month_full[date.get' + (e ? "UTC" : "") + 'Month()]+"'; case "%h": return '"+to_fixed((date.get' + (e ? "UTC" : "") + 'Hours()+11)%12+1)+"'; case "%g": return '"+((date.get' + (e ? "UTC" : "") + 'Hours()+11)%12+1)+"'; case "%G": return '"+date.get' + (e ? "UTC" : "") + 'Hours()+"'; case "%H": return '"+to_fixed(date.get' + (e ? "UTC" : "") + 'Hours())+"'; case "%i": return '"+to_fixed(date.get' + (e ? "UTC" : "") + 'Minutes())+"'; case "%a": return '"+(date.get' + (e ? "UTC" : "") + 'Hours()>11?"pm":"am")+"'; case "%A": return '"+(date.get' + (e ? "UTC" : "") + 'Hours()>11?"PM":"AM")+"'; case "%s": return '"+to_fixed(date.get' + (e ? "UTC" : "") + 'Seconds())+"'; case "%W": return '"+to_fixed(getISOWeek(date))+"'; case "%w": return '"+to_fixed(getWeek(date))+"'; default: return t } }); var i = new Function("date","to_fixed","locale","getISOWeek","getWeek",'return "' + t + '";'); return function(t) { return i(t, n.date.to_fixed, n.locale, n.date.getISOWeek, n.date.getWeek) } }, str_to_date: function(t, e, n) { for (var i = "var temp=date.match(/[a-zA-Z]+|[0-9]+/g);", r = t.match(/%[a-zA-Z]/g), a = 0; a < r.length; a++) switch (r[a]) { case "%j": case "%d": i += "set[2]=temp[" + a + "]||1;"; break; case "%n": case "%m": i += "set[1]=(temp[" + a + "]||1)-1;"; break; case "%y": i += "set[0]=temp[" + a + "]*1+(temp[" + a + "]>50?1900:2000);"; break; case "%g": case "%G": case "%h": case "%H": i += "set[3]=temp[" + a + "]||0;"; break; case "%i": i += "set[4]=temp[" + a + "]||0;"; break; case "%Y": i += "set[0]=temp[" + a + "]||0;"; break; case "%a": case "%A": i += "set[3]=set[3]%12+((temp[" + a + "]||'').toLowerCase()=='am'?0:12);"; break; case "%s": i += "set[5]=temp[" + a + "]||0;"; break; case "%M": i += "set[1]=locale.date.month_short_hash[temp[" + a + "]]||0;"; break; case "%F": i += "set[1]=locale.date.month_full_hash[temp[" + a + "]]||0;" } var o = "set[0],set[1],set[2],set[3],set[4],set[5]"; e && (o = " Date.UTC(" + o + ")"); var s = new Function("date","locale","var set=[0,0,1,0,0,0]; " + i + " return new Date(" + o + ");"); return function(t) { return s(t, n.locale) } } }; e.default = i } , function(t, e, n) { var i = n(241).default , r = n(240).default; t.exports = function(t) { var e = null; function n() { var n = !1; return "auto" === t.config.csp ? (null === e && function() { try { new Function("canUseCsp = false;") } catch (t) { e = !0 } }(), n = e) : n = t.config.csp, n } return { init: function() { for (var e = t.locale, n = e.date.month_short, i = e.date.month_short_hash = {}, r = 0; r < n.length; r++) i[n[r]] = r; for (n = e.date.month_full, i = e.date.month_full_hash = {}, r = 0; r < n.length; r++) i[n[r]] = r }, date_part: function(t) { var e = new Date(t); return t.setHours(0), this.hour_start(t), t.getHours() && (t.getDate() < e.getDate() || t.getMonth() < e.getMonth() || t.getFullYear() < e.getFullYear()) && t.setTime(t.getTime() + 36e5 * (24 - t.getHours())), t }, time_part: function(t) { return (t.valueOf() / 1e3 - 60 * t.getTimezoneOffset()) % 86400 }, week_start: function(e) { var n = e.getDay(); return t.config.start_on_monday && (0 === n ? n = 6 : n--), this.date_part(this.add(e, -1 * n, "day")) }, month_start: function(t) { return t.setDate(1), this.date_part(t) }, quarter_start: function(t) { this.month_start(t); var e, n = t.getMonth(); return e = n >= 9 ? 9 : n >= 6 ? 6 : n >= 3 ? 3 : 0, t.setMonth(e), t }, year_start: function(t) { return t.setMonth(0), this.month_start(t) }, day_start: function(t) { return this.date_part(t) }, hour_start: function(t) { return t.getMinutes() && t.setMinutes(0), this.minute_start(t), t }, minute_start: function(t) { return t.getSeconds() && t.setSeconds(0), t.getMilliseconds() && t.setMilliseconds(0), t }, _add_days: function(t, e, n) { t.setDate(t.getDate() + e); var i = e >= 0 , r = !n.getHours() && t.getHours() , a = t.getDate() <= n.getDate() || t.getMonth() < n.getMonth() || t.getFullYear() < n.getFullYear(); return i && r && a && t.setTime(t.getTime() + 36e5 * (24 - t.getHours())), e > 1 && r && t.setHours(0), t }, add: function(t, e, n) { var i = new Date(t.valueOf()); switch (n) { case "day": i = this._add_days(i, e, t); break; case "week": i = this._add_days(i, 7 * e, t); break; case "month": i.setMonth(i.getMonth() + e); break; case "year": i.setYear(i.getFullYear() + e); break; case "hour": i.setTime(i.getTime() + 60 * e * 60 * 1e3); break; case "minute": i.setTime(i.getTime() + 60 * e * 1e3); break; default: return this["add_" + n](t, e, n) } return i }, add_quarter: function(t, e) { return this.add(t, 3 * e, "month") }, to_fixed: function(t) { return t < 10 ? "0" + t : t }, copy: function(t) { return new Date(t.valueOf()) }, date_to_str: function(e, a) { var o = i; return n() && (o = r), o.date_to_str(e, a, t) }, str_to_date: function(e, a) { var o = i; return n() && (o = r), o.str_to_date(e, a, t) }, getISOWeek: function(e) { return t.date._getWeekNumber(e, !0) }, _getWeekNumber: function(t, e) { if (!t) return !1; var n = t.getDay(); e && 0 === n && (n = 7); var i = new Date(t.valueOf()); i.setDate(t.getDate() + (4 - n)); var r = i.getFullYear() , a = Math.round((i.getTime() - new Date(r,0,1).getTime()) / 864e5); return 1 + Math.floor(a / 7) }, getWeek: function(e) { return t.date._getWeekNumber(e, t.config.start_on_monday) }, getUTCISOWeek: function(e) { return t.date.getISOWeek(e) }, convert_to_utc: function(t) { return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds()) }, parseDate: function(e, n) { return e && !e.getFullYear && ("function" != typeof n && (n = "string" == typeof n ? "parse_date" === n || "xml_date" === n ? t.defined(t.templates.xml_date) ? t.templates.xml_date : t.templates.parse_date : t.defined(t.templates[n]) ? t.templates[n] : t.date.str_to_date(n) : t.defined(t.templates.xml_date) ? t.templates.xml_date : t.templates.parse_date), e = e ? n(e) : null), e } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function(t) { if ("string" == typeof t || "number" == typeof t) return t; var e = ""; for (var n in t) { var i = ""; t.hasOwnProperty(n) && (i = n + "=" + (i = "string" == typeof t[n] ? encodeURIComponent(t[n]) : "number" == typeof t[n] ? t[n] : encodeURIComponent(JSON.stringify(t[n]))), e.length && (i = "&" + i), e += i) } return e } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = n(11) , a = n(21) , o = n(243).default; function s(t, e) { var n = { method: t }; if (0 === e.length) throw new Error("Arguments list of query is wrong."); if (1 === e.length) return "string" == typeof e[0] ? (n.url = e[0], n.async = !0) : (n.url = e[0].url, n.async = e[0].async || !0, n.callback = e[0].callback, n.headers = e[0].headers), e[0].data ? "string" != typeof e[0].data ? n.data = o(e[0].data) : n.data = e[0].data : n.data = "", n; switch (n.url = e[0], t) { case "GET": case "DELETE": n.callback = e[1], n.headers = e[2]; break; case "POST": case "PUT": e[1] ? "string" != typeof e[1] ? n.data = o(e[1]) : n.data = e[1] : n.data = "", n.callback = e[2], n.headers = e[3] } return n } t.exports = function(t) { return { cache: !0, method: "get", parse: function(t) { return "string" != typeof t ? t : (t = t.replace(/^[\s]+/, ""), "undefined" == typeof DOMParser || r.isIE ? void 0 !== a.ActiveXObject && ((e = new a.ActiveXObject("Microsoft.XMLDOM")).async = "false", e.loadXML(t)) : e = (new DOMParser).parseFromString(t, "text/xml"), e); var e }, xmltop: function(e, n, i) { if (void 0 === n.status || n.status < 400) { var r = n.responseXML ? n.responseXML || n : this.parse(n.responseText || n); if (r && null !== r.documentElement && !r.getElementsByTagName("parsererror").length) return r.getElementsByTagName(e)[0] } return -1 !== i && t.callEvent("onLoadXMLError", ["Incorrect XML", arguments[1], i]), document.createElement("DIV") }, xpath: function(t, e) { if (e.nodeName || (e = e.responseXML || e), r.isIE) return e.selectNodes(t) || []; for (var n, i = [], a = (e.ownerDocument || e).evaluate(t, e, null, XPathResult.ANY_TYPE, null); n = a.iterateNext(); ) i.push(n); return i }, query: function(t) { return this._call(t.method || "GET", t.url, t.data || "", t.async || !0, t.callback, t.headers) }, get: function(t, e, n) { var i = s("GET", arguments); return this.query(i) }, getSync: function(t, e) { var n = s("GET", arguments); return n.async = !1, this.query(n) }, put: function(t, e, n, i) { var r = s("PUT", arguments); return this.query(r) }, del: function(t, e, n) { var i = s("DELETE", arguments); return this.query(i) }, post: function(t, e, n, i) { 1 == arguments.length ? e = "" : 2 == arguments.length && "function" == typeof e && (e, e = ""); var r = s("POST", arguments); return this.query(r) }, postSync: function(t, e, n) { e = null === e ? "" : String(e); var i = s("POST", arguments); return i.async = !1, this.query(i) }, _call: function(e, n, r, o, s, l) { return new t.Promise(function(c, u) { var d = void 0 !== ("undefined" == typeof XMLHttpRequest ? "undefined" : i(XMLHttpRequest)) ? new XMLHttpRequest : new a.ActiveXObject("Microsoft.XMLHTTP") , h = null !== navigator.userAgent.match(/AppleWebKit/) && null !== navigator.userAgent.match(/Qt/) && null !== navigator.userAgent.match(/Safari/); o && (d.onreadystatechange = function() { if (4 == d.readyState || h && 3 == d.readyState) { if ((200 != d.status || "" === d.responseText) && !t.callEvent("onAjaxError", [d])) return; setTimeout(function() { "function" == typeof s && s.apply(a, [{ xmlDoc: d, filePath: n }]), c(d), "function" == typeof s && (s = null, d = null) }, 0) } } ); var f = !this || !this.cache; if ("GET" == e && f && (n += (n.indexOf("?") >= 0 ? "&" : "?") + "dhxr" + (new Date).getTime() + "=1"), d.open(e, n, o), l) for (var _ in l) d.setRequestHeader(_, l[_]); else "POST" == e.toUpperCase() || "PUT" == e || "DELETE" == e ? d.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") : "GET" == e && (r = null); if (d.setRequestHeader("X-Requested-With", "XMLHttpRequest"), d.send(r), !o) return { xmlDoc: d, filePath: n } } ) }, urlSeparator: function(t) { return -1 != t.indexOf("?") ? "&" : "?" } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), t.exports = function() { return { layout: { css: "gantt_container", rows: [{ cols: [{ view: "grid", scrollX: "scrollHor", scrollY: "scrollVer" }, { resizer: !0, width: 1 }, { view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer" }, { view: "scrollbar", id: "scrollVer" }] }, { view: "scrollbar", id: "scrollHor", height: 20 }] }, links: { finish_to_start: "0", start_to_start: "1", finish_to_finish: "2", start_to_finish: "3" }, types: { task: "task", project: "project", milestone: "milestone" }, auto_types: !1, duration_unit: "day", work_time: !1, correct_work_time: !1, skip_off_time: !1, cascade_delete: !0, autosize: !1, autosize_min_width: 0, autoscroll: !0, autoscroll_speed: 30, deepcopy_on_parse: !1, show_links: !0, show_task_cells: !0, static_background: !1, static_background_cells: !0, branch_loading: !1, branch_loading_property: "$has_child", show_loading: !1, show_chart: !0, show_grid: !0, min_duration: 36e5, date_format: "%d-%m-%Y %H:%i", xml_date: void 0, start_on_monday: !0, server_utc: !1, show_progress: !0, fit_tasks: !1, select_task: !0, scroll_on_click: !0, smart_rendering: !0, preserve_scroll: !0, readonly: !1, container_resize_timeout: 20, date_grid: "%Y-%m-%d", drag_links: !0, drag_progress: !0, drag_resize: !0, drag_project: !1, drag_move: !0, drag_mode: { resize: "resize", progress: "progress", move: "move", ignore: "ignore" }, round_dnd_dates: !0, link_wrapper_width: 20, root_id: 0, autofit: !1, columns: [{ name: "text", tree: !0, width: "*", resize: !0 }, { name: "start_date", align: "center", resize: !0 }, { name: "duration", align: "center" }, { name: "add", width: 44 }], scale_offset_minimal: !0, inherit_scale_class: !1, scales: [{ unit: "day", step: 1, date: "%d %M" }], time_step: 60, duration_step: 1, task_date: "%d %F %Y", time_picker: "%H:%i", task_attribute: "data-task-id", link_attribute: "data-link-id", layer_attribute: "data-layer", buttons_left: ["gantt_save_btn", "gantt_cancel_btn"], _migrate_buttons: { dhx_save_btn: "gantt_save_btn", dhx_cancel_btn: "gantt_cancel_btn", dhx_delete_btn: "gantt_delete_btn" }, buttons_right: ["gantt_delete_btn"], lightbox: { sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "time", type: "duration", map_to: "auto" }], project_sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "type", type: "typeselect", map_to: "type" }, { name: "time", type: "duration", readonly: !0, map_to: "auto" }], milestone_sections: [{ name: "description", height: 70, map_to: "text", type: "textarea", focus: !0 }, { name: "type", type: "typeselect", map_to: "type" }, { name: "time", type: "duration", single_date: !0, map_to: "auto" }] }, drag_lightbox: !0, sort: !1, details_on_create: !0, details_on_dblclick: !0, initial_scroll: !0, task_scroll_offset: 100, order_branch: !1, order_branch_free: !1, task_height: void 0, bar_height: "full", min_column_width: 70, min_grid_column_width: 70, grid_resizer_column_attribute: "data-column-index", keep_grid_width: !1, grid_resize: !1, grid_elastic_columns: !1, show_tasks_outside_timescale: !1, show_unscheduled: !0, resize_rows: !1, task_grid_row_resizer_attribute: "data-row-index", min_task_grid_row_height: 30, readonly_property: "readonly", editable_property: "editable", calendar_property: "calendar_id", resource_calendars: {}, dynamic_resource_calendars: !1, inherit_calendar: !1, type_renderers: {}, open_tree_initially: !1, optimize_render: !0, prevent_default_scroll: !1, show_errors: !0, wai_aria_attributes: !0, smart_scales: !0, rtl: !1, placeholder_task: !1, horizontal_scroll_key: "shiftKey", drag_timeline: { useKey: void 0, ignore: ".gantt_task_line, .gantt_task_link" }, drag_multiple: !0, csp: "auto" } } } , function(t, e) { t.exports = function() { var t = {}; return { services: {}, setService: function(e, n) { t[e] = n }, getService: function(e) { return t[e] ? t[e]() : null }, dropService: function(e) { t[e] && delete t[e] }, destructor: function() { for (var e in t) if (t[e]) { var n = t[e]; n && n.destructor && n.destructor() } t = null } } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { return function(t) { var e = this; for (var n in this.addExtension = function(t, n) { e._extensions[t] = n } , this.getExtension = function(t) { return e._extensions[t] } , this._extensions = {}, t) this._extensions[n] = t[n] } }(); e.default = i } , function(t, e) { t.exports = { KEY_CODES: { UP: 38, DOWN: 40, LEFT: 37, RIGHT: 39, SPACE: 32, ENTER: 13, DELETE: 46, ESC: 27, TAB: 9 } } } , function(t, e, n) { function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = function(t) { var e = new function() { this.constants = n(248), this.version = "8.0.6", this.license = "gpl", this.templates = {}, this.ext = {}, this.keys = { edit_save: this.constants.KEY_CODES.ENTER, edit_cancel: this.constants.KEY_CODES.ESC } } , r = new (0, n(247).default)(t) , a = {}; e.plugins = function(t) { for (var n in t) if (t[n] && !a[n]) { var i = r.getExtension(n); i && (i(e), a[n] = !0) } return a } , e.$services = n(246)(), e.config = n(245)(), e.ajax = n(244)(e), e.date = n(242)(e), e.RemoteEvents = n(239).remoteEvents; var o = n(237)(e); e.$services.setService("dnd", function() { return o }); var s = n(236)(e); e.$services.setService("templateLoader", function() { return s }), n(5)(e); var l = new (n(235)); l.registerProvider("global", function() { var t = { min_date: e._min_date, max_date: e._max_date, selected_task: null }; return e.$data && e.$data.tasksStore && (t.selected_task = e.$data.tasksStore.getSelectedId()), t }), e.getState = l.getState, e.$services.setService("state", function() { return l }); var c = n(0); c.mixin(e, c), e.Promise = n(234), e.env = n(11), n(232)(e); var u = n(226); e.dataProcessor = u.DEPRECATED_api, e.createDataProcessor = u.createDataProcessor, n(221)(e), n(211)(e), n(210)(e), n(202)(e), n(201)(e), n(200)(e), n(187)(e), n(186).default(e), n(185)(e), n(184)(e), n(183)(e), n(180)(e), n(179).default(e); var d = n(178).default(); return e.i18n = { addLocale: d.addLocale, setLocale: function(t) { if ("string" == typeof t) { var n = d.getLocale(t); n || (n = d.getLocale("en")), e.locale = n } else if (t) if (e.locale) for (var r in t) t[r] && "object" === i(t[r]) ? (e.locale[r] || (e.locale[r] = {}), e.mixin(e.locale[r], t[r], !0)) : e.locale[r] = t[r]; else e.locale = t }, getLocale: d.getLocale }, e.i18n.setLocale("en"), e } } , function(t, e, n) { n(35); var i = n(249); t.exports = function(t) { var e = i(t); return e.env.isNode || n(144)(e), e } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = 100 , r = function() { function t(t) { var e = this; this.maxSteps = i, this.undoEnabled = !0, this.redoEnabled = !0, this.action = { create: function(t) { return { commands: t ? t.slice() : [] } }, invert: function(t) { for (var n, i = e._gantt.copy(t), r = e.command, a = 0; a < t.commands.length; a++) { var o = i.commands[a] = r.invert(i.commands[a]); o.type !== r.type.update && o.type !== r.type.move || (n = [o.oldValue, o.value], o.value = n[0], o.oldValue = n[1]) } return i } }, this.command = { entity: null, type: null, create: function(t, n, i, r) { var a = e._gantt; return { entity: r, type: i, value: a.copy(t), oldValue: a.copy(n || t) } }, invert: function(t) { var n = e._gantt.copy(t); return n.type = e.command.inverseCommands(t.type), n }, inverseCommands: function(t) { var n = e._gantt , i = e.command.type; switch (t) { case i.update: return i.update; case i.remove: return i.add; case i.add: return i.remove; case i.move: return i.move; default: return n.assert(!1, "Invalid command " + t), null } } }, this._undoStack = [], this._redoStack = [], this._gantt = t } return t.prototype.getUndoStack = function() { return this._undoStack } , t.prototype.setUndoStack = function(t) { this._undoStack = t } , t.prototype.getRedoStack = function() { return this._redoStack } , t.prototype.setRedoStack = function(t) { this._redoStack = t } , t.prototype.clearUndoStack = function() { this._undoStack = [] } , t.prototype.clearRedoStack = function() { this._redoStack = [] } , t.prototype.updateConfigs = function() { var t = this._gantt; this.maxSteps = t.config.undo_steps || i, this.command.entity = t.config.undo_types, this.command.type = t.config.undo_actions, this.undoEnabled = !!t.config.undo, this.redoEnabled = !!t.config.redo } , t.prototype.undo = function() { var t = this._gantt; if (this.updateConfigs(), this.undoEnabled) { var e = this._pop(this._undoStack); if (e && this._reorderCommands(e), !1 !== t.callEvent("onBeforeUndo", [e]) && e) return this._applyAction(this.action.invert(e)), this._push(this._redoStack, t.copy(e)), void t.callEvent("onAfterUndo", [e]); t.callEvent("onAfterUndo", [null]) } } , t.prototype.redo = function() { var t = this._gantt; if (this.updateConfigs(), this.redoEnabled) { var e = this._pop(this._redoStack); if (e && this._reorderCommands(e), !1 !== t.callEvent("onBeforeRedo", [e]) && e) return this._applyAction(e), this._push(this._undoStack, t.copy(e)), void t.callEvent("onAfterRedo", [e]); t.callEvent("onAfterRedo", [null]) } } , t.prototype.logAction = function(t) { this._push(this._undoStack, t), this._redoStack = [] } , t.prototype._push = function(t, e) { var n = this._gantt; if (e.commands.length) { var i = t === this._undoStack ? "onBeforeUndoStack" : "onBeforeRedoStack"; if (!1 !== n.callEvent(i, [e]) && e.commands.length) { for (t.push(e); t.length > this.maxSteps; ) t.shift(); return e } } } , t.prototype._pop = function(t) { return t.pop() } , t.prototype._reorderCommands = function(t) { var e = { any: 0, link: 1, task: 2 } , n = { move: 1, any: 0 }; t.commands.sort(function(t, i) { if ("task" === t.entity && "task" === i.entity) return t.type !== i.type ? (n[i.type] || 0) - (n[t.type] || 0) : "move" === t.type && t.oldValue && i.oldValue && i.oldValue.parent === t.oldValue.parent ? t.oldValue.$index - i.oldValue.$index : 0; var r = e[t.entity] || e.any; return (e[i.entity] || e.any) - r }) } , t.prototype._applyAction = function(t) { var e = null , n = this.command.entity , i = this.command.type , r = this._gantt , a = {}; a[n.task] = { add: "addTask", get: "getTask", update: "updateTask", remove: "deleteTask", move: "moveTask", isExists: "isTaskExists" }, a[n.link] = { add: "addLink", get: "getLink", update: "updateLink", remove: "deleteLink", isExists: "isLinkExists" }, r.batchUpdate(function() { for (var n = 0; n < t.commands.length; n++) { e = t.commands[n]; var o = a[e.entity][e.type] , s = a[e.entity].get , l = a[e.entity].isExists; if (e.type === i.add) r[o](e.oldValue, e.oldValue.parent, e.oldValue.$local_index); else if (e.type === i.remove) r[l](e.value.id) && r[o](e.value.id); else if (e.type === i.update) { var c = r[s](e.value.id); for (var u in e.value) u.startsWith("$") || u.startsWith("_") || (c[u] = e.value[u]); r[o](e.value.id) } else e.type === i.move && (r[o](e.value.id, e.value.$local_index, e.value.parent), r.callEvent("onRowDragEnd", [e.value.id])) } }) } , t }(); e.Undo = r } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = { onBeforeUndo: "onAfterUndo", onBeforeRedo: "onAfterRedo" } , r = ["onTaskDragStart", "onAfterTaskUpdate", "onAfterTaskDelete", "onBeforeBatchUpdate"] , a = function() { function t(t, e) { this._batchAction = null, this._batchMode = !1, this._ignore = !1, this._ignoreMoveEvents = !1, this._initialTasks = {}, this._initialLinks = {}, this._nestedTasks = {}, this._nestedLinks = {}, this._undo = t, this._gantt = e, this._attachEvents() } return t.prototype.store = function(t, e, n) { return void 0 === n && (n = !1), e === this._gantt.config.undo_types.task ? this._storeTask(t, n) : e === this._gantt.config.undo_types.link && this._storeLink(t, n) } , t.prototype.isMoveEventsIgnored = function() { return this._ignoreMoveEvents } , t.prototype.toggleIgnoreMoveEvents = function(t) { this._ignoreMoveEvents = t || !1 } , t.prototype.startIgnore = function() { this._ignore = !0 } , t.prototype.stopIgnore = function() { this._ignore = !1 } , t.prototype.startBatchAction = function() { var t = this; this._timeout || (this._timeout = setTimeout(function() { t.stopBatchAction(), t._timeout = null }, 10)), this._ignore || this._batchMode || (this._batchMode = !0, this._batchAction = this._undo.action.create()) } , t.prototype.stopBatchAction = function() { if (!this._ignore) { var t = this._undo; this._batchAction && t.logAction(this._batchAction), this._batchMode = !1, this._batchAction = null } } , t.prototype.onTaskAdded = function(t) { this._ignore || this._storeTaskCommand(t, this._undo.command.type.add) } , t.prototype.onTaskUpdated = function(t) { this._ignore || this._storeTaskCommand(t, this._undo.command.type.update) } , t.prototype.onTaskMoved = function(t) { if (!this._ignore) { t.$local_index = this._gantt.getTaskIndex(t.id); var e = this.getInitialTask(t.id); if (t.$local_index === e.$local_index && this._gantt.getParent(t) === this._gantt.getParent(e)) return; this._storeEntityCommand(t, this.getInitialTask(t.id), this._undo.command.type.move, this._undo.command.entity.task) } } , t.prototype.onTaskDeleted = function(t) { if (!this._ignore) { if (this._storeTaskCommand(t, this._undo.command.type.remove), this._nestedTasks[t.id]) for (var e = this._nestedTasks[t.id], n = 0; n < e.length; n++) this._storeTaskCommand(e[n], this._undo.command.type.remove); if (this._nestedLinks[t.id]) { var i = this._nestedLinks[t.id]; for (n = 0; n < i.length; n++) this._storeLinkCommand(i[n], this._undo.command.type.remove) } } } , t.prototype.onLinkAdded = function(t) { this._ignore || this._storeLinkCommand(t, this._undo.command.type.add) } , t.prototype.onLinkUpdated = function(t) { this._ignore || this._storeLinkCommand(t, this._undo.command.type.update) } , t.prototype.onLinkDeleted = function(t) { this._ignore || this._storeLinkCommand(t, this._undo.command.type.remove) } , t.prototype.setNestedTasks = function(t, e) { for (var n = this._gantt, i = null, r = [], a = this._getLinks(n.getTask(t)), o = 0; o < e.length; o++) i = this.setInitialTask(e[o]), a = a.concat(this._getLinks(i)), r.push(i); var s = {}; for (o = 0; o < a.length; o++) s[a[o]] = !0; var l = []; for (var o in s) l.push(this.setInitialLink(o)); this._nestedTasks[t] = r, this._nestedLinks[t] = l } , t.prototype.setInitialTask = function(t, e) { var n = this._gantt; if (e || !this._initialTasks[t] || !this._batchMode) { var i = n.copy(n.getTask(t)); i.$index = n.getGlobalTaskIndex(t), i.$local_index = n.getTaskIndex(t), this.setInitialTaskObject(t, i) } return this._initialTasks[t] } , t.prototype.getInitialTask = function(t) { return this._initialTasks[t] } , t.prototype.clearInitialTasks = function() { this._initialTasks = {} } , t.prototype.setInitialTaskObject = function(t, e) { this._initialTasks[t] = e } , t.prototype.setInitialLink = function(t, e) { return this._initialLinks[t] && this._batchMode || (this._initialLinks[t] = this._gantt.copy(this._gantt.getLink(t))), this._initialLinks[t] } , t.prototype.getInitialLink = function(t) { return this._initialLinks[t] } , t.prototype.clearInitialLinks = function() { this._initialLinks = {} } , t.prototype._attachEvents = function() { var t = this , e = null , n = this._gantt , a = function() { e || (e = setTimeout(function() { e = null }), t.clearInitialTasks(), n.eachTask(function(e) { t.setInitialTask(e.id) }), t.clearInitialLinks(), n.getLinks().forEach(function(e) { t.setInitialLink(e.id) })) } , o = function(t) { return n.copy(n.getTask(t)) }; for (var s in i) n.attachEvent(s, function() { return t.startIgnore(), !0 }), n.attachEvent(i[s], function() { return t.stopIgnore(), !0 }); for (s = 0; s < r.length; s++) n.attachEvent(r[s], function() { return t.startBatchAction(), !0 }); n.attachEvent("onParse", function() { t._undo.clearUndoStack(), t._undo.clearRedoStack(), a() }), n.attachEvent("onAfterTaskAdd", function(e, n) { t.setInitialTask(e, !0), t.onTaskAdded(n) }), n.attachEvent("onAfterTaskUpdate", function(e, n) { t.onTaskUpdated(n) }), n.attachEvent("onAfterTaskDelete", function(e, n) { t.onTaskDeleted(n) }), n.attachEvent("onAfterLinkAdd", function(e, n) { t.setInitialLink(e, !0), t.onLinkAdded(n) }), n.attachEvent("onAfterLinkUpdate", function(e, n) { t.onLinkUpdated(n) }), n.attachEvent("onAfterLinkDelete", function(e, n) { t.onLinkDeleted(n) }), n.attachEvent("onRowDragEnd", function(e, n) { return t.onTaskMoved(o(e)), t.toggleIgnoreMoveEvents(), !0 }), n.attachEvent("onBeforeTaskDelete", function(e) { t.store(e, n.config.undo_types.task); var i = []; return a(), n.eachTask(function(t) { i.push(t.id) }, e), t.setNestedTasks(e, i), !0 }); var l = n.getDatastore("task"); l.attachEvent("onBeforeItemMove", function(e, n, i) { return t.isMoveEventsIgnored() || a(), !0 }), l.attachEvent("onAfterItemMove", function(e, n, i) { return t.isMoveEventsIgnored() || t.onTaskMoved(o(e)), !0 }), n.attachEvent("onRowDragStart", function(e, n, i) { return t.toggleIgnoreMoveEvents(!0), a(), !0 }), n.attachEvent("onBeforeTaskDrag", function(e) { return t.store(e, n.config.undo_types.task) }), n.attachEvent("onLightbox", function(e) { return t.store(e, n.config.undo_types.task) }), n.attachEvent("onBeforeTaskAutoSchedule", function(e) { return t.store(e.id, n.config.undo_types.task), !0 }), n.ext.inlineEditors && n.ext.inlineEditors.attachEvent("onEditStart", function(e) { t.store(e.id, n.config.undo_types.task) }) } , t.prototype._storeCommand = function(t) { var e = this._undo; if (e.updateConfigs(), e.undoEnabled) if (this._batchMode) this._batchAction.commands.push(t); else { var n = e.action.create([t]); e.logAction(n) } } , t.prototype._storeEntityCommand = function(t, e, n, i) { var r = this._undo.command.create(t, e, n, i); this._storeCommand(r) } , t.prototype._storeTaskCommand = function(t, e) { this._gantt.isTaskExists(t.id) && (t.$local_index = this._gantt.getTaskIndex(t.id)), this._storeEntityCommand(t, this.getInitialTask(t.id), e, this._undo.command.entity.task) } , t.prototype._storeLinkCommand = function(t, e) { this._storeEntityCommand(t, this.getInitialLink(t.id), e, this._undo.command.entity.link) } , t.prototype._getLinks = function(t) { return t.$source.concat(t.$target) } , t.prototype._storeTask = function(t, e) { var n = this; void 0 === e && (e = !1); var i = this._gantt; return this.setInitialTask(t, e), i.eachTask(function(t) { n.setInitialTask(t.id) }, t), !0 } , t.prototype._storeLink = function(t, e) { return void 0 === e && (e = !1), this.setInitialLink(t, e), !0 } , t }(); e.Monitor = a } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(252) , r = n(251); e.default = function(t) { var e = new r.Undo(t) , n = new i.Monitor(e,t); function a(t, e, n) { t && (t.id === e && (t.id = n), t.parent === e && (t.parent = n)) } function o(t, e, n) { a(t.value, e, n), a(t.oldValue, e, n) } function s(t, e, n) { t && (t.source === e && (t.source = n), t.target === e && (t.target = n)) } function l(t, e, n) { s(t.value, e, n), s(t.oldValue, e, n) } function c(t, n, i) { for (var r = e, a = 0; a < t.length; a++) for (var s = t[a], c = 0; c < s.commands.length; c++) s.commands[c].entity === r.command.entity.task ? o(s.commands[c], n, i) : s.commands[c].entity === r.command.entity.link && l(s.commands[c], n, i) } function u(t, n, i) { for (var r = e, a = 0; a < t.length; a++) for (var o = t[a], s = 0; s < o.commands.length; s++) { var l = o.commands[s]; l.entity === r.command.entity.link && (l.value && l.value.id === n && (l.value.id = i), l.oldValue && l.oldValue.id === n && (l.oldValue.id = i)) } } t.config.undo = !0, t.config.redo = !0, t.config.undo_types = { link: "link", task: "task" }, t.config.undo_actions = { update: "update", remove: "remove", add: "add", move: "move" }, t.ext || (t.ext = {}), t.ext.undo = { undo: function() { return e.undo() }, redo: function() { return e.redo() }, getUndoStack: function() { return e.getUndoStack() }, setUndoStack: function(t) { return e.setUndoStack(t) }, getRedoStack: function() { return e.getRedoStack() }, setRedoStack: function(t) { return e.setRedoStack(t) }, clearUndoStack: function() { return e.clearUndoStack() }, clearRedoStack: function() { return e.clearRedoStack() }, saveState: function(t, e) { return n.store(t, e, !0) }, getInitialState: function(e, i) { return i === t.config.undo_types.link ? n.getInitialLink(e) : n.getInitialTask(e) } }, t.undo = t.ext.undo.undo, t.redo = t.ext.undo.redo, t.getUndoStack = t.ext.undo.getUndoStack, t.getRedoStack = t.ext.undo.getRedoStack, t.clearUndoStack = t.ext.undo.clearUndoStack, t.clearRedoStack = t.ext.undo.clearRedoStack, t.attachEvent("onTaskIdChange", function(t, n) { var i = e; c(i.getUndoStack(), t, n), c(i.getRedoStack(), t, n) }), t.attachEvent("onLinkIdChange", function(t, n) { var i = e; u(i.getUndoStack(), t, n), u(i.getRedoStack(), t, n) }), t.attachEvent("onGanttReady", function() { e.updateConfigs() }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(1) , r = function() { function t(t) { this._gantt = t } return t.prototype.getNode = function() { var t = this._gantt; return this._tooltipNode || (this._tooltipNode = document.createElement("div"), this._tooltipNode.className = "gantt_tooltip", t._waiAria.tooltipAttr(this._tooltipNode)), this._tooltipNode } , t.prototype.setViewport = function(t) { return this._root = t, this } , t.prototype.show = function(t, e) { var n = this._gantt , r = document.body , a = this.getNode(); if (i.isChildOf(a, r) || (this.hide(), r.appendChild(a)), this._isLikeMouseEvent(t)) { var o = this._calculateTooltipPosition(t); e = o.top, t = o.left } return a.style.top = e + "px", a.style.left = t + "px", n._waiAria.tooltipVisibleAttr(a), this } , t.prototype.hide = function() { var t = this._gantt , e = this.getNode(); return e && e.parentNode && e.parentNode.removeChild(e), t._waiAria.tooltipHiddenAttr(e), this } , t.prototype.setContent = function(t) { return this.getNode().innerHTML = t, this } , t.prototype._isLikeMouseEvent = function(t) { return !(!t || "object" != typeof t) && ("clientX"in t && "clientY"in t) } , t.prototype._getViewPort = function() { return this._root || document.body } , t.prototype._calculateTooltipPosition = function(t) { var e = this._gantt , n = this._getViewPortSize() , r = this.getNode() , a = { top: 0, left: 0, width: r.offsetWidth, height: r.offsetHeight, bottom: 0, right: 0 } , o = e.config.tooltip_offset_x , s = e.config.tooltip_offset_y , l = document.body , c = i.getRelativeEventPosition(t, l) , u = i.getNodePosition(l); c.y += u.y, a.top = c.y, a.left = c.x, a.top += s, a.left += o, a.bottom = a.top + a.height, a.right = a.left + a.width; var d = window.scrollY + l.scrollTop; return a.top < n.top - d ? (a.top = n.top, a.bottom = a.top + a.height) : a.bottom > n.bottom && (a.bottom = n.bottom, a.top = a.bottom - a.height), a.left < n.left ? (a.left = n.left, a.right = n.left + a.width) : a.right > n.right && (a.right = n.right, a.left = a.right - a.width), c.x >= a.left && c.x <= a.right && (a.left = c.x - a.width - o, a.right = a.left + a.width), c.y >= a.top && c.y <= a.bottom && (a.top = c.y - a.height - s, a.bottom = a.top + a.height), a } , t.prototype._getViewPortSize = function() { var t, e = this._gantt, n = this._getViewPort(), r = n, a = window.scrollY + document.body.scrollTop, o = window.scrollX + document.body.scrollLeft; return n === e.$task_data ? (r = e.$task, a = 0, o = 0, t = i.getNodePosition(e.$task)) : t = i.getNodePosition(r), { left: t.x + o, top: t.y + a, width: t.width, height: t.height, bottom: t.y + t.height + a, right: t.x + t.width + o } } , t }(); e.Tooltip = r } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(51) , r = n(1) , a = n(2) , o = n(254) , s = function() { function t(t) { this._listeners = {}, this.tooltip = new o.Tooltip(t), this._gantt = t, this._domEvents = i(), this._initDelayedFunctions() } return t.prototype.destructor = function() { this.tooltip.hide(), this._domEvents.detachAll() } , t.prototype.hideTooltip = function() { this.delayHide() } , t.prototype.attach = function(t) { var e = this , n = document.body , i = this._gantt; t.global || (n = i.$root); var a = null , o = function(n) { var i = r.getTargetNode(n) , o = r.closest(i, t.selector); if (!r.isChildOf(i, e.tooltip.getNode())) { var s = function() { a = o, t.onmouseenter(n, o) }; a ? o && o === a ? t.onmousemove(n, o) : (t.onmouseleave(n, a), a = null, o && o !== a && s()) : o && s() } }; this.detach(t.selector), this._domEvents.attach(n, "mousemove", o), this._listeners[t.selector] = { node: n, handler: o } } , t.prototype.detach = function(t) { var e = this._listeners[t]; e && this._domEvents.detach(e.node, "mousemove", e.handler) } , t.prototype.tooltipFor = function(t) { var e = this , n = function(t) { var e = t; return document.createEventObject && !document.createEvent && (e = document.createEventObject(t)), e }; this._initDelayedFunctions(), this.attach({ selector: t.selector, global: t.global, onmouseenter: function(i, r) { var a = t.html(i, r); a && e.delayShow(n(i), a) }, onmousemove: function(i, r) { var a = t.html(i, r); a ? e.delayShow(n(i), a) : (e.delayShow.$cancelTimeout(), e.delayHide()) }, onmouseleave: function() { e.delayShow.$cancelTimeout(), e.delayHide() } }) } , t.prototype._initDelayedFunctions = function() { var t = this , e = this._gantt; this.delayShow && this.delayShow.$cancelTimeout(), this.delayHide && this.delayHide.$cancelTimeout(), this.tooltip.hide(), this.delayShow = a.delay(function(n, i) { !1 === e.callEvent("onBeforeTooltip", [n]) ? t.tooltip.hide() : (t.tooltip.setContent(i), t.tooltip.show(n)) }, e.config.tooltip_timeout || 1), this.delayHide = a.delay(function() { t.delayShow.$cancelTimeout(), t.tooltip.hide() }, e.config.tooltip_hide_timeout || 1) } , t }(); e.TooltipManager = s } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(255); e.default = function(t) { t.config.tooltip_timeout = 30, t.config.tooltip_offset_y = 20, t.config.tooltip_offset_x = 10, t.config.tooltip_hide_timeout = 30; var e = new i.TooltipManager(t); t.ext.tooltips = e, t.attachEvent("onGanttReady", function() { e.tooltipFor({ selector: "[" + t.config.task_attribute + "]:not(.gantt_task_row)", html: function(e) { if (!t.config.touch || t.config.touch_tooltip) { var n = t.locate(e); if (t.isTaskExists(n)) { var i = t.getTask(n); return t.templates.tooltip_text(i.start_date, i.end_date, i) } return null } }, global: !1 }) }), t.attachEvent("onDestroy", function() { e.destructor() }), t.attachEvent("onLightbox", function() { e.hideTooltip() }), t.attachEvent("onBeforeTooltip", function() { if (t.getState().link_source_id) return !1 }), t.attachEvent("onGanttScroll", function() { e.hideTooltip() }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t(t) { var e = this; this.show = function(t, n) { void 0 === n ? e._showForTask(t) : e._showAtCoordinates(t, n) } , this.hide = function(t) { var n = e._gantt , i = e._quickInfoBox; e._quickInfoBoxId = 0; var r = e._quickInfoTask; if (e._quickInfoTask = null, i && i.parentNode) { if (n.config.quick_info_detached) return n.callEvent("onAfterQuickInfo", [r]), i.parentNode.removeChild(i); i.className += " gantt_qi_hidden", "auto" === i.style.right ? i.style.left = "-350px" : i.style.right = "-350px", t && (i.style.left = i.style.right = "", i.parentNode.removeChild(i)), n.callEvent("onAfterQuickInfo", [r]) } } , this.getNode = function() { return e._quickInfoBox ? e._quickInfoBox : null } , this.setContainer = function(t) { t && (e._container = "string" == typeof t ? document.getElementById(t) : t) } , this.setContent = function(t) { var n = e._gantt , i = { taskId: null, header: { title: "", date: "" }, content: "", buttons: n.config.quickinfo_buttons }; t || (t = i), t.taskId || (t.taskId = i.taskId), t.header || (t.header = i.header), t.header.title || (t.header.title = i.header.title), t.header.date || (t.header.date = i.header.date), t.content || (t.content = i.content), t.buttons || (t.buttons = i.buttons); var r = e.getNode(); r || (r = e._createQuickInfoElement()), t.taskId && (e._quickInfoBoxId = t.taskId); var a = r.querySelector(".gantt_cal_qi_title") , o = a.querySelector(".gantt_cal_qi_tcontent") , s = a.querySelector(".gantt_cal_qi_tdate") , l = r.querySelector(".gantt_cal_qi_content") , c = r.querySelector(".gantt_cal_qi_controls"); n._waiAria.quickInfoHeader(r, [t.header.title, t.header.date].join(" ")), o.innerHTML = t.header.title, s.innerHTML = t.header.date, t.header.title || t.header.date ? a.style.display = "" : a.style.display = "none", l.innerHTML = t.content; var u = t.buttons; u.length ? c.style.display = "" : c.style.display = "none"; for (var d = "", h = 0; h < u.length; h++) { var f = n._waiAria.quickInfoButtonAttrString(n.locale.labels[u[h]]); d += '
" + n.locale.labels[u[h]] + "
" } c.innerHTML = d, n.eventRemove(r, "click", e._qiButtonClickHandler), n.eventRemove(r, "keypress", e._qiKeyPressHandler), n.event(r, "click", e._qiButtonClickHandler), n.event(r, "keypress", e._qiKeyPressHandler) } , this._qiButtonClickHandler = function(t) { t = t || event, e._qi_button_click(t.target || t.srcElement) } , this._qiKeyPressHandler = function(t) { var n = (t = t || event).which || event.keyCode; 13 !== n && 32 !== n || setTimeout(function() { e._qi_button_click(t.target || t.srcElement) }, 1) } , this._gantt = t } return t.prototype._showAtCoordinates = function(t, e) { this.hide(!0), this._quickInfoBoxId = 0, this._quickInfoTask = null, this._quickInfoBox || (this._createQuickInfoElement(), this.setContent()), this._appendAtCoordinates(t, e), this._gantt.callEvent("onQuickInfo", [null]) } , t.prototype._showForTask = function(t) { var e = this._gantt; if ((t !== this._quickInfoBoxId || !e.utils.dom.isChildOf(this._quickInfoBox, document.body)) && e.config.show_quick_info) { this.hide(!0); var n = this._getContainer() , i = this._get_event_counter_part(t, 6, n.xViewport, n.yViewport); i && (this._quickInfoBox = this._init_quick_info(t), this._quickInfoTask = t, this._quickInfoBox.className = this._prepare_quick_info_classname(t), this._fill_quick_data(t), this._show_quick_info(i, 6), e.callEvent("onQuickInfo", [t])) } } , t.prototype._get_event_counter_part = function(t, e, n, i) { var r = this._gantt , a = r.getTaskNode(t); if (!a && !(a = r.getTaskRowNode(t))) return null; var o = 0 , s = e + a.offsetTop + a.offsetHeight , l = a; if (r.utils.dom.isChildOf(l, n)) for (; l && l !== n; ) o += l.offsetLeft, l = l.offsetParent; var c = r.getScrollState(); return l ? { left: o, top: s, dx: o + a.offsetWidth / 2 - c.x > n.offsetWidth / 2 ? 1 : 0, dy: s + a.offsetHeight / 2 - c.y > i.offsetHeight / 2 ? 1 : 0, width: a.offsetWidth, height: a.offsetHeight } : null } , t.prototype._createQuickInfoElement = function() { var t = this , e = this._gantt , n = document.createElement("div"); n.className += "gantt_cal_quick_info", e._waiAria.quickInfoAttr(n); var i = '
'; if (i += '
', i += "
", n.innerHTML = i, e.config.quick_info_detached) { var r = this._getContainer(); e.event(r.parent, "scroll", function() { t.hide() }) } return this._quickInfoBox = n, n } , t.prototype._init_quick_info = function(t) { var e = this._gantt , n = e.getTask(t); return "boolean" == typeof this._quickInfoReadonly && e.isReadonly(n) !== this._quickInfoReadonly && (this.hide(!0), this._quickInfoBox = null), this._quickInfoReadonly = e.isReadonly(n), this._quickInfoBox || (this._quickInfoBox = this._createQuickInfoElement()), this._quickInfoBox } , t.prototype._prepare_quick_info_classname = function(t) { var e = this._gantt , n = e.getTask(t) , i = "gantt_cal_quick_info" , r = e.templates.quick_info_class(n.start_date, n.end_date, n); return r && (i += " " + r), i } , t.prototype._fill_quick_data = function(t) { var e = this._gantt , n = e.getTask(t); this._quickInfoBoxId = t; var i = []; if (this._quickInfoReadonly) for (var r = e.config.quickinfo_buttons, a = { icon_delete: !0, icon_edit: !0 }, o = 0; o < r.length; o++) this._quickInfoReadonly && a[r[o]] || i.push(r[o]); else i = e.config.quickinfo_buttons; this.setContent({ header: { title: e.templates.quick_info_title(n.start_date, n.end_date, n), date: e.templates.quick_info_date(n.start_date, n.end_date, n) }, content: e.templates.quick_info_content(n.start_date, n.end_date, n), buttons: i }) } , t.prototype._appendAtCoordinates = function(t, e) { var n = this._quickInfoBox , i = this._getContainer(); n.parentNode && "#document-fragment" !== n.parentNode.nodeName.toLowerCase() || i.parent.appendChild(n), n.style.left = t + "px", n.style.top = e + "px" } , t.prototype._show_quick_info = function(t, e) { var n = this._gantt , i = this._quickInfoBox; if (n.config.quick_info_detached) { var r = this._getContainer(); i.parentNode && "#document-fragment" !== i.parentNode.nodeName.toLowerCase() || r.parent.appendChild(i); var a = i.offsetWidth , o = i.offsetHeight , s = n.getScrollState() , l = r.xViewport , c = r.yViewport , u = l.offsetWidth + s.x - a , d = t.top - s.y + o , h = t.top; d > c.offsetHeight / 2 && (h = t.top - (o + t.height + 2 * e)) < s.y && d <= c.offsetHeight && (h = t.top), h < s.y && (h = s.y); var f = Math.min(Math.max(s.x, t.left - t.dx * (a - t.width)), u) , _ = h; this._appendAtCoordinates(f, _) } else i.style.top = "20px", 1 === t.dx ? (i.style.right = "auto", i.style.left = "-300px", setTimeout(function() { i.style.left = "10px" }, 1)) : (i.style.left = "auto", i.style.right = "-300px", setTimeout(function() { i.style.right = "10px" }, 1)), i.className += " gantt_qi_" + (1 === t.dx ? "left" : "right"), n.$root.appendChild(i) } , t.prototype._qi_button_click = function(t) { var e = this._gantt , n = this._quickInfoBox; if (t && t !== n) { var i = t.className; if (-1 !== i.indexOf("_icon")) { var r = this._quickInfoBoxId; e.$click.buttons[i.split(" ")[1].replace("icon_", "")](r) } else this._qi_button_click(t.parentNode) } } , t.prototype._getContainer = function() { var t = this._gantt , e = this._container ? this._container : t.$task_data; return e && e.offsetHeight && e.offsetWidth ? { parent: e, xViewport: t.$task, yViewport: t.$task_data } : (e = this._container ? this._container : t.$grid_data) && e.offsetHeight && e.offsetWidth ? { parent: e, xViewport: t.$grid, yViewport: t.$grid_data } : { parent: this._container ? this._container : t.$layout, xViewport: t.$layout, yViewport: t.$layout } } , t }(); e.QuickInfo = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(257); e.default = function(t) { t.ext || (t.ext = {}), t.ext.quickInfo = new i.QuickInfo(t), t.config.quickinfo_buttons = ["icon_delete", "icon_edit"], t.config.quick_info_detached = !0, t.config.show_quick_info = !0, t.templates.quick_info_title = function(t, e, n) { return n.text.substr(0, 50) } , t.templates.quick_info_content = function(t, e, n) { return n.details || n.text } , t.templates.quick_info_date = function(e, n, i) { return t.templates.task_time(e, n, i) } , t.templates.quick_info_class = function(t, e, n) { return "" } , t.attachEvent("onTaskClick", function(e, n) { return t.utils.dom.closest(n.target, ".gantt_add") || setTimeout(function() { t.ext.quickInfo.show(e) }, 0), !0 }); for (var e = ["onViewChange", "onLightbox", "onBeforeTaskDelete", "onBeforeDrag"], n = function() { return t.ext.quickInfo.hide(), !0 }, r = 0; r < e.length; r++) t.attachEvent(e[r], n); function a() { return t.ext.quickInfo.hide(), t.ext.quickInfo._quickInfoBox = null, !0 } t.attachEvent("onEmptyClick", function(e) { var i = !0 , r = document.querySelector(".gantt_cal_quick_info"); r && t.utils.dom.isChildOf(e.target, r) && (i = !1), i && n() }), t.attachEvent("onGanttReady", a), t.attachEvent("onDestroy", a), t.event(window, "keydown", function(e) { 27 === e.keyCode && t.ext.quickInfo.hide() }) } } , function(t, e, n) { var i = n(2).replaceValidZeroId; t.exports = function(t) { t.config.multiselect = !0, t.config.multiselect_one_level = !1, t._multiselect = { _selected: {}, _one_level: !1, _active: !0, _first_selected_when_shift: null, getDefaultSelected: function() { var t = this.getSelected(); return t.length ? t[t.length - 1] : null }, setFirstSelected: function(t) { this._first_selected_when_shift = t }, getFirstSelected: function() { return this._first_selected_when_shift }, isActive: function() { return this.updateState(), this._active }, updateState: function() { this._one_level = t.config.multiselect_one_level; var e = this._active; this._active = t.config.select_task, this._active != e && this.reset() }, reset: function() { this._selected = {} }, setLastSelected: function(e) { t.$data.tasksStore.silent(function() { var n = t.$data.tasksStore; e ? n.select(e + "") : n.unselect(null) }) }, getLastSelected: function() { var e = t.$data.tasksStore.getSelectedId(); return e && t.isTaskExists(e) ? e : null }, select: function(e, n) { return !!(e && t.callEvent("onBeforeTaskMultiSelect", [e, !0, n]) && t.callEvent("onBeforeTaskSelected", [e])) && (this._selected[e] = !0, this.setLastSelected(e), this.afterSelect(e), t.callEvent("onTaskMultiSelect", [e, !0, n]), t.callEvent("onTaskSelected", [e]), !0) }, toggle: function(t, e) { this._selected[t] ? this.unselect(t, e) : this.select(t, e) }, unselect: function(e, n) { e && t.callEvent("onBeforeTaskMultiSelect", [e, !1, n]) && (this._selected[e] = !1, this.getLastSelected() == e && this.setLastSelected(this.getDefaultSelected()), this.afterSelect(e), t.callEvent("onTaskMultiSelect", [e, !1, n]), t.callEvent("onTaskUnselected", [e])) }, isSelected: function(e) { return !(!t.isTaskExists(e) || !this._selected[e]) }, getSelected: function() { var e = []; for (var n in this._selected) this._selected[n] && t.isTaskExists(n) ? e.push(n) : this._selected[n] = !1; return e.sort(function(e, n) { return t.getGlobalTaskIndex(e) > t.getGlobalTaskIndex(n) ? 1 : -1 }), e }, forSelected: function(t) { for (var e = this.getSelected(), n = 0; n < e.length; n++) t(e[n]) }, isSameLevel: function(e) { if (!this._one_level) return !0; var n = this.getLastSelected(); return !n || (!t.isTaskExists(n) || !t.isTaskExists(e) || !(t.calculateTaskLevel(t.getTask(n)) != t.calculateTaskLevel(t.getTask(e)))) }, afterSelect: function(e) { t.isTaskExists(e) && t._quickRefresh(function() { t.refreshTask(e) }) }, doSelection: function(e) { if (!this.isActive()) return !1; if (t._is_icon_open_click(e)) return !1; var n = t.locate(e); if (!n) return !1; if (!t.callEvent("onBeforeMultiSelect", [e])) return !1; var i = this.getSelected() , r = this.getFirstSelected() , a = !1 , o = this.getLastSelected() , s = t.config.multiselect , l = function() { var r = t.ext.inlineEditors , a = r.getState() , o = r.locateCell(e.target); t.config.inline_editors_multiselect_open && o && r.getEditorConfig(o.columnName) && (r.isVisible() && a.id == o.id && a.columnName == o.columnName || r.startEdit(o.id, o.columnName)), this.setFirstSelected(n), this.isSelected(n) || this.select(n, e), i = this.getSelected(); for (var s = 0; s < i.length; s++) i[s] !== n && this.unselect(i[s], e) } .bind(this) , c = function() { if (o) { if (n) { for (var i = t.getGlobalTaskIndex(this.getFirstSelected()), s = t.getGlobalTaskIndex(n), l = t.getGlobalTaskIndex(o), c = o; t.getGlobalTaskIndex(c) !== i; ) this.unselect(c, e), c = i > l ? t.getNext(c) : t.getPrev(c); for (c = n; t.getGlobalTaskIndex(c) !== i; ) this.select(c, e) && !a && (a = !0, r = c), c = i > s ? t.getNext(c) : t.getPrev(c) } } else o = n } .bind(this); return s && (e.ctrlKey || e.metaKey) ? (this.isSelected(n) || this.setFirstSelected(n), n && this.toggle(n, e)) : s && e.shiftKey ? (t.isTaskExists(this.getFirstSelected()) && null !== this.getFirstSelected() || this.setFirstSelected(n), i.length ? c() : l()) : l(), this.isSelected(n) ? this.setLastSelected(n) : r ? n == o && this.setLastSelected(e.shiftKey ? r : this.getDefaultSelected()) : this.setLastSelected(null), this.getSelected().length || this.setLastSelected(null), this.getLastSelected() && this.isSelected(this.getFirstSelected()) || this.setFirstSelected(this.getLastSelected()), !0 } }, function() { var e = t.selectTask; t.selectTask = function(n) { if (!(n = i(n, this.config.root_id))) return !1; var r = t._multiselect , a = n; return r.isActive() ? (r.select(n, null) && r.setLastSelected(n), r.setFirstSelected(r.getLastSelected())) : a = e.call(this, n), a } ; var n = t.unselectTask; t.unselectTask = function(e) { var i = t._multiselect , r = i.isActive(); (e = e || i.getLastSelected()) && r && (i.unselect(e, null), e == i.getLastSelected() && i.setLastSelected(null), t.refreshTask(e), i.setFirstSelected(i.getLastSelected())); var a = e; return r || (a = n.call(this, e)), a } , t.toggleTaskSelection = function(e) { var n = t._multiselect; e && n.isActive() && (n.toggle(e), n.setFirstSelected(n.getLastSelected())) } , t.getSelectedTasks = function() { var e = t._multiselect; return e.isActive(), e.getSelected() } , t.eachSelectedTask = function(t) { return this._multiselect.forSelected(t) } , t.isSelectedTask = function(t) { return this._multiselect.isSelected(t) } , t.getLastSelectedTask = function() { return this._multiselect.getLastSelected() } , t.attachEvent("onGanttReady", function() { var e = t.$data.tasksStore.isSelected; t.$data.tasksStore.isSelected = function(n) { return t._multiselect.isActive() ? t._multiselect.isSelected(n) : e.call(this, n) } }) }(), t.attachEvent("onTaskIdChange", function(e, n) { var i = t._multiselect; if (!i.isActive()) return !0; t.isSelectedTask(e) && (i.unselect(e, null), i.select(n, null)) }), t.attachEvent("onAfterTaskDelete", function(e, n) { var i = t._multiselect; if (!i.isActive()) return !0; i._selected[e] && (i.unselect(e, null), i._selected[e] = !1, i.setLastSelected(i.getDefaultSelected())), i.forSelected(function(e) { t.isTaskExists(e) || i.unselect(e, null) }) }), t.attachEvent("onBeforeTaskMultiSelect", function(e, n, i) { var r = t._multiselect; return !(n && r.isActive() && r._one_level) || r.isSameLevel(e) }), t.attachEvent("onTaskClick", function(e, n) { return t._multiselect.doSelection(n) && t.callEvent("onMultiSelect", [n]), !0 }) } } , function(t, e) { t.exports = function(t) { function e(e) { if (!t.config.show_markers) return !1; if (!e.start_date) return !1; var n = t.getState(); if (!(+e.start_date > +n.max_date || (!e.end_date || +e.end_date < +n.min_date) && +e.start_date < +n.min_date)) { var i = document.createElement("div"); i.setAttribute("data-marker-id", e.id); var r = "gantt_marker"; t.templates.marker_class && (r += " " + t.templates.marker_class(e)), e.css && (r += " " + e.css), e.title && (i.title = e.title), i.className = r; var a = t.posFromDate(e.start_date); i.style.left = a + "px"; var o = Math.max(t.getRowTop(t.getVisibleTaskCount()), 0) + "px"; if (t.config.timeline_placeholder && (o = t.$container.scrollHeight + "px"), i.style.height = o, e.end_date) { var s = t.posFromDate(e.end_date); i.style.width = Math.max(s - a, 0) + "px" } return e.text && (i.innerHTML = "
" + e.text + "
"), i } } function n() { if (t.$task_data) { var e = document.createElement("div"); e.className = "gantt_marker_area", t.$task_data.appendChild(e), t.$marker_area = e } } t._markers || (t._markers = t.createDatastore({ name: "marker", initItem: function(e) { return e.id = e.id || t.uid(), e } })), t.config.show_markers = !0, t.attachEvent("onBeforeGanttRender", function() { t.$marker_area || n() }), t.attachEvent("onDataRender", function() { t.$marker_area || (n(), t.renderMarkers()) }), t.attachEvent("onGanttLayoutReady", function() { t.attachEvent("onBeforeGanttRender", function() { n(), t.$services.getService("layers").createDataRender({ name: "marker", defaultContainer: function() { return t.$marker_area } }).addLayer(e) }, { once: !0 }) }), t.getMarker = function(t) { return this._markers ? this._markers.getItem(t) : null } , t.addMarker = function(t) { return this._markers.addItem(t) } , t.deleteMarker = function(t) { return !!this._markers.exists(t) && (this._markers.removeItem(t), !0) } , t.updateMarker = function(t) { this._markers.refresh(t) } , t._getMarkers = function() { return this._markers.getItems() } , t.renderMarkers = function() { this._markers.refresh() } } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.dispatcher = { isActive: !1, activeNode: null, globalNode: new t.$keyboardNavigation.GanttNode, enable: function() { this.isActive = !0, this.setActiveNode(this.getActiveNode()) }, disable: function() { this.isActive = !1 }, isEnabled: function() { return !!this.isActive }, getDefaultNode: function() { var e; return (e = t.config.keyboard_navigation_cells ? new t.$keyboardNavigation.TaskCell : new t.$keyboardNavigation.TaskRow).isValid() || (e = e.fallback()), e }, setDefaultNode: function() { this.setActiveNode(this.getDefaultNode()) }, getActiveNode: function() { var t = this.activeNode; return t && !t.isValid() && (t = t.fallback()), t }, fromDomElement: function(e) { for (var n = [t.$keyboardNavigation.TaskRow, t.$keyboardNavigation.TaskCell, t.$keyboardNavigation.HeaderCell], i = 0; i < n.length; i++) if (n[i].prototype.fromDomElement) { var r = n[i].prototype.fromDomElement(e); if (r) return r } return null }, focusGlobalNode: function() { this.blurNode(this.globalNode), this.focusNode(this.globalNode) }, setActiveNode: function(t) { var e = !0; this.activeNode && this.activeNode.compareTo(t) && (e = !1), this.isEnabled() && (e && this.blurNode(this.activeNode), this.activeNode = t, this.focusNode(this.activeNode, !e)) }, focusNode: function(t, e) { t && t.focus && t.focus(e) }, blurNode: function(t) { t && t.blur && t.blur() }, keyDownHandler: function(e) { if (!t.$keyboardNavigation.isModal() && this.isEnabled() && !e.defaultPrevented) { var n = this.globalNode , i = t.$keyboardNavigation.shortcuts.getCommandFromEvent(e) , r = this.getActiveNode(); !1 !== t.$keyboardNavigation.facade.callEvent("onKeyDown", [i, e]) && (r ? r.findHandler(i) ? r.doAction(i, e) : n.findHandler(i) && n.doAction(i, e) : this.setDefaultNode()) } }, _timeout: null, awaitsFocus: function() { return null !== this._timeout }, delay: function(e, n) { clearTimeout(this._timeout), this._timeout = setTimeout(t.bind(function() { this._timeout = null, e() }, this), n || 1) }, clearDelay: function() { clearTimeout(this._timeout) } } } } , function(t, e) { t.exports = function(t) { !function() { var e = []; function n() { return !!e.length } function i(e) { setTimeout(function() { n() || t.$destroyed || t.focus() }, 1) } function r(n) { t.eventRemove(n, "keydown", o), t.event(n, "keydown", o), e.push(n) } function a() { var n = e.pop(); n && t.eventRemove(n, "keydown", o), i() } function o(n) { var i = n.currentTarget; (function(t) { return t == e[e.length - 1] } )(i) && t.$keyboardNavigation.trapFocus(i, n) } function s() { r(t.getLightbox()) } t.attachEvent("onLightbox", s), t.attachEvent("onAfterLightbox", a), t.attachEvent("onLightboxChange", function() { a(), s() }), t.attachEvent("onAfterQuickInfo", function() { i() }), t.attachEvent("onMessagePopup", function(e) { l = t.utils.dom.getActiveElement(), r(e) }), t.attachEvent("onAfterMessagePopup", function() { a(), setTimeout(function() { l && (l.focus(), l = null) }, 1) }); var l = null; t.$keyboardNavigation.isModal = n }() } } , function(t, e, n) { t.exports = function(t) { var e = n(1) , i = n(2).replaceValidZeroId; t.$keyboardNavigation.TaskCell = function(e, n) { if (!(e = i(e, t.config.root_id))) { var r = t.getChildren(t.config.root_id); r[0] && (e = r[0]) } this.taskId = e, this.columnIndex = n || 0, t.isTaskExists(this.taskId) && (this.index = t.getTaskIndex(this.taskId), this.globalIndex = t.getGlobalTaskIndex(this.taskId)) } , t.$keyboardNavigation.TaskCell.prototype = t._compose(t.$keyboardNavigation.TaskRow, { _handlers: null, isValid: function() { return t.$keyboardNavigation.TaskRow.prototype.isValid.call(this) && !!t.getGridColumns()[this.columnIndex] }, fallback: function() { var e = t.$keyboardNavigation.TaskRow.prototype.fallback.call(this) , n = e; if (e instanceof t.$keyboardNavigation.TaskRow) { for (var i = t.getGridColumns(), r = this.columnIndex; r >= 0 && !i[r]; ) r--; i[r] && (n = new t.$keyboardNavigation.TaskCell(e.taskId,r)) } return n }, fromDomElement: function(n) { if (!t.config.keyboard_navigation_cells) return null; var i = t.locate(n); if (t.isTaskExists(i)) { var r = 0 , a = e.locateAttribute(n, "data-column-index"); return a && (r = 1 * a.getAttribute("data-column-index")), new t.$keyboardNavigation.TaskCell(i,r) } return null }, getNode: function() { if (t.isTaskExists(this.taskId) && t.isTaskVisible(this.taskId)) { if (t.config.show_grid) { var e = t.$grid.querySelector(".gantt_row[" + t.config.task_attribute + "='" + this.taskId + "']"); return e ? e.querySelector("[data-column-index='" + this.columnIndex + "']") : null } return t.getTaskNode(this.taskId) } }, keys: { up: function() { var e = null , n = t.getPrev(this.taskId); e = t.isTaskExists(n) ? new t.$keyboardNavigation.TaskCell(n,this.columnIndex) : new t.$keyboardNavigation.HeaderCell(this.columnIndex), this.moveTo(e) }, down: function() { var e = t.getNext(this.taskId); t.isTaskExists(e) && this.moveTo(new t.$keyboardNavigation.TaskCell(e,this.columnIndex)) }, left: function() { this.columnIndex > 0 && this.moveTo(new t.$keyboardNavigation.TaskCell(this.taskId,this.columnIndex - 1)) }, right: function() { var e = t.getGridColumns(); this.columnIndex < e.length - 1 && this.moveTo(new t.$keyboardNavigation.TaskCell(this.taskId,this.columnIndex + 1)) }, end: function() { var e = t.getGridColumns(); this.moveTo(new t.$keyboardNavigation.TaskCell(this.taskId,e.length - 1)) }, home: function() { this.moveTo(new t.$keyboardNavigation.TaskCell(this.taskId,0)) }, pagedown: function() { t.getVisibleTaskCount() && this.moveTo(new t.$keyboardNavigation.TaskCell(t.getTaskByIndex(t.getVisibleTaskCount() - 1).id,this.columnIndex)) }, pageup: function() { t.getVisibleTaskCount() && this.moveTo(new t.$keyboardNavigation.TaskCell(t.getTaskByIndex(0).id,this.columnIndex)) } } }), t.$keyboardNavigation.TaskCell.prototype.bindAll(t.$keyboardNavigation.TaskRow.prototype.keys), t.$keyboardNavigation.TaskCell.prototype.bindAll(t.$keyboardNavigation.TaskCell.prototype.keys) } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.TaskRow = function(e) { if (!e) { var n = t.getChildren(t.config.root_id); n[0] && (e = n[0]) } this.taskId = e, t.isTaskExists(this.taskId) && (this.index = t.getTaskIndex(this.taskId), this.globalIndex = t.getGlobalTaskIndex(this.taskId)) } , t.$keyboardNavigation.TaskRow.prototype = t._compose(t.$keyboardNavigation.KeyNavNode, { _handlers: null, isValid: function() { return t.isTaskExists(this.taskId) && t.getTaskIndex(this.taskId) > -1 }, fallback: function() { if (!t.getVisibleTaskCount()) { var e = new t.$keyboardNavigation.HeaderCell; return e.isValid() ? e : null } var n = -1; if (t.getTaskByIndex(this.globalIndex - 1)) n = this.globalIndex - 1; else if (t.getTaskByIndex(this.globalIndex + 1)) n = this.globalIndex + 1; else for (var i = this.globalIndex; i >= 0; ) { if (t.getTaskByIndex(i)) { n = i; break } i-- } if (n > -1) return new t.$keyboardNavigation.TaskRow(t.getTaskByIndex(n).id) }, fromDomElement: function(e) { if (t.config.keyboard_navigation_cells) return null; var n = t.locate(e); return t.isTaskExists(n) ? new t.$keyboardNavigation.TaskRow(n) : null }, getNode: function() { if (t.isTaskExists(this.taskId) && t.isTaskVisible(this.taskId)) return t.config.show_grid ? t.$grid.querySelector(".gantt_row[" + t.config.task_attribute + "='" + this.taskId + "']") : t.getTaskNode(this.taskId) }, focus: function(e) { if (!e) { var n, i, r = t.getTaskPosition(t.getTask(this.taskId)), a = t.getTaskHeight(this.taskId), o = t.getScrollState(); n = t.$task ? t.$task.offsetWidth : o.inner_width, i = t.$grid_data || t.$task_data ? (t.$grid_data || t.$task_data).offsetHeight : o.inner_height, r.top < o.y || r.top + a > o.y + i ? t.scrollTo(null, r.top - 5 * a) : t.config.scroll_on_click && t.config.show_chart && (r.left > o.x + n ? t.scrollTo(r.left - t.config.task_scroll_offset) : r.left + r.width < o.x && t.scrollTo(r.left + r.width - t.config.task_scroll_offset)) } t.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this, [e]), function() { var e = t.$ui.getView("grid") , n = parseInt(e.$grid.scrollLeft) , i = parseInt(e.$grid_data.scrollTop) , r = e.$config.scrollX; if (r && e.$config.scrollable) { var a = t.$ui.getView(r); a && a.scrollTo(n, i) } var o = e.$config.scrollY; if (o) { var s = t.$ui.getView(o); s && s.scrollTo(n, i) } }() }, keys: { pagedown: function() { t.getVisibleTaskCount() && this.moveTo(new t.$keyboardNavigation.TaskRow(t.getTaskByIndex(t.getVisibleTaskCount() - 1).id)) }, pageup: function() { t.getVisibleTaskCount() && this.moveTo(new t.$keyboardNavigation.TaskRow(t.getTaskByIndex(0).id)) }, up: function() { var e = null , n = t.getPrev(this.taskId); e = t.isTaskExists(n) ? new t.$keyboardNavigation.TaskRow(n) : new t.$keyboardNavigation.HeaderCell, this.moveTo(e) }, down: function() { var e = t.getNext(this.taskId); t.isTaskExists(e) && this.moveTo(new t.$keyboardNavigation.TaskRow(e)) }, "shift+down": function() { t.hasChild(this.taskId) && !t.getTask(this.taskId).$open && t.open(this.taskId) }, "shift+up": function() { t.hasChild(this.taskId) && t.getTask(this.taskId).$open && t.close(this.taskId) }, "shift+right": function() { if (!t.isReadonly(this)) { var e = t.getPrevSibling(this.taskId); if (t.isTaskExists(e) && !t.isChildOf(this.taskId, e)) t.getTask(e).$open = !0, !1 !== t.moveTask(this.taskId, -1, e) && t.updateTask(this.taskId) } }, "shift+left": function() { if (!t.isReadonly(this)) { var e = t.getParent(this.taskId); if (t.isTaskExists(e)) !1 !== t.moveTask(this.taskId, t.getTaskIndex(e) + 1, t.getParent(e)) && t.updateTask(this.taskId) } }, space: function(e) { t.isSelectedTask(this.taskId) ? t.unselectTask(this.taskId) : t.selectTask(this.taskId) }, "ctrl+left": function(e) { t.close(this.taskId) }, "ctrl+right": function(e) { t.open(this.taskId) }, delete: function(e) { t.isReadonly(this) || t.$click.buttons.delete(this.taskId) }, enter: function() { t.isReadonly(this) || t.showLightbox(this.taskId) }, "ctrl+enter": function() { t.isReadonly(this) || t.createTask({}, this.taskId) } } }), t.$keyboardNavigation.TaskRow.prototype.bindAll(t.$keyboardNavigation.TaskRow.prototype.keys) } } , function(t, e, n) { t.exports = function(t) { var e = n(1); t.$keyboardNavigation.HeaderCell = function(t) { this.index = t || 0 } , t.$keyboardNavigation.HeaderCell.prototype = t._compose(t.$keyboardNavigation.KeyNavNode, { _handlers: null, isValid: function() { return !(!t.config.show_grid && t.getVisibleTaskCount()) && (!!t.getGridColumns()[this.index] || !t.getVisibleTaskCount()) }, fallback: function() { if (!t.config.show_grid) return t.getVisibleTaskCount() ? new t.$keyboardNavigation.TaskRow : null; for (var e = t.getGridColumns(), n = this.index; n >= 0 && !e[n]; ) n--; return e[n] ? new t.$keyboardNavigation.HeaderCell(n) : null }, fromDomElement: function(n) { var i = e.locateClassName(n, "gantt_grid_head_cell"); if (i) { for (var r = 0; i && i.previousSibling; ) i = i.previousSibling, r += 1; return new t.$keyboardNavigation.HeaderCell(r) } return null }, getNode: function() { return t.$grid_scale.childNodes[this.index] }, keys: { left: function() { this.index > 0 && this.moveTo(new t.$keyboardNavigation.HeaderCell(this.index - 1)) }, right: function() { var e = t.getGridColumns(); this.index < e.length - 1 && this.moveTo(new t.$keyboardNavigation.HeaderCell(this.index + 1)) }, down: function() { var e, n = t.getChildren(t.config.root_id); t.isTaskExists(n[0]) && (e = n[0]), e && (t.config.keyboard_navigation_cells ? this.moveTo(new t.$keyboardNavigation.TaskCell(e,this.index)) : this.moveTo(new t.$keyboardNavigation.TaskRow(e))) }, end: function() { var e = t.getGridColumns(); this.moveTo(new t.$keyboardNavigation.HeaderCell(e.length - 1)) }, home: function() { this.moveTo(new t.$keyboardNavigation.HeaderCell(0)) }, "enter, space": function() { e.getActiveElement().click() }, "ctrl+enter": function() { t.isReadonly(this) || t.createTask({}, this.taskId) } } }), t.$keyboardNavigation.HeaderCell.prototype.bindAll(t.$keyboardNavigation.HeaderCell.prototype.keys) } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.KeyNavNode = function() {} , t.$keyboardNavigation.KeyNavNode.prototype = t._compose(t.$keyboardNavigation.EventHandler, { isValid: function() { return !0 }, fallback: function() { return null }, moveTo: function(e) { t.$keyboardNavigation.dispatcher.setActiveNode(e) }, compareTo: function(t) { if (!t) return !1; for (var e in this) { if (!!this[e] != !!t[e]) return !1; var n = !(!this[e] || !this[e].toString) , i = !(!t[e] || !t[e].toString); if (i != n) return !1; if (i && n) { if (t[e].toString() != this[e].toString()) return !1 } else if (t[e] != this[e]) return !1 } return !0 }, getNode: function() {}, focus: function() { var e = this.getNode(); if (e) { var n = t.$keyboardNavigation.facade; !1 !== n.callEvent("onBeforeFocus", [e]) && e && (e.setAttribute("tabindex", "-1"), e.$eventAttached || (e.$eventAttached = !0, t.event(e, "focus", function(t) { return t.preventDefault(), !1 }, !1)), t.utils.dom.isChildOf(document.activeElement, e) && (e = document.activeElement), e.focus && e.focus(), n.callEvent("onFocus", [this.getNode()])) } }, blur: function() { var e = this.getNode(); e && (t.$keyboardNavigation.facade.callEvent("onBlur", [e]), e.setAttribute("tabindex", "-1")) } }) } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.GanttNode = function() {} , t.$keyboardNavigation.GanttNode.prototype = t._compose(t.$keyboardNavigation.EventHandler, { focus: function() { t.focus() }, blur: function() {}, isEnabled: function() { return t.$container.hasAttribute("tabindex") }, scrollHorizontal: function(e) { var n = t.dateFromPos(t.getScrollState().x) , i = t.getScale() , r = e < 0 ? -i.step : i.step; n = t.date.add(n, r, i.unit), t.scrollTo(t.posFromDate(n)) }, scrollVertical: function(e) { var n = t.getScrollState().y , i = t.config.row_height; t.scrollTo(null, n + (e < 0 ? -1 : 1) * i) }, keys: { "alt+left": function(t) { this.scrollHorizontal(-1) }, "alt+right": function(t) { this.scrollHorizontal(1) }, "alt+up": function(t) { this.scrollVertical(-1) }, "alt+down": function(t) { this.scrollVertical(1) }, "ctrl+z": function() { t.undo && t.undo() }, "ctrl+r": function() { t.redo && t.redo() } } }), t.$keyboardNavigation.GanttNode.prototype.bindAll(t.$keyboardNavigation.GanttNode.prototype.keys) } } , function(t, e, n) { t.exports = function(t) { !function() { var e = n(1); t.$keyboardNavigation.getFocusableNodes = e.getFocusableNodes, t.$keyboardNavigation.trapFocus = function(n, i) { if (9 != i.keyCode) return !1; for (var r = t.$keyboardNavigation.getFocusableNodes(n), a = e.getActiveElement(), o = -1, s = 0; s < r.length; s++) if (r[s] == a) { o = s; break } if (i.shiftKey) { if (o <= 0) { var l = r[r.length - 1]; if (l) return l.focus(), i.preventDefault(), !0 } } else if (o >= r.length - 1) { var c = r[0]; if (c) return c.focus(), i.preventDefault(), !0 } return !1 } }() } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.EventHandler = { _handlers: null, findHandler: function(e) { this._handlers || (this._handlers = {}); var n = t.$keyboardNavigation.shortcuts.getHash(e); return this._handlers[n] }, doAction: function(e, n) { var i = this.findHandler(e); if (i) { if (!1 === t.$keyboardNavigation.facade.callEvent("onBeforeAction", [e, n])) return; i.call(this, n), n.preventDefault ? n.preventDefault() : n.returnValue = !1 } }, bind: function(e, n) { this._handlers || (this._handlers = {}); for (var i = t.$keyboardNavigation.shortcuts, r = i.parse(e), a = 0; a < r.length; a++) this._handlers[i.getHash(r[a])] = n }, unbind: function(e) { for (var n = t.$keyboardNavigation.shortcuts, i = n.parse(e), r = 0; r < i.length; r++) this._handlers[n.getHash(i[r])] && delete this._handlers[n.getHash(i[r])] }, bindAll: function(t) { for (var e in t) this.bind(e, t[e]) }, initKeys: function() { this._handlers || (this._handlers = {}), this.keys && this.bindAll(this.keys) } } } } , function(t, e) { t.exports = function(t) { t.$keyboardNavigation.shortcuts = { createCommand: function() { return { modifiers: { shift: !1, alt: !1, ctrl: !1, meta: !1 }, keyCode: null } }, parse: function(t) { for (var e = [], n = this.getExpressions(this.trim(t)), i = 0; i < n.length; i++) { for (var r = this.getWords(n[i]), a = this.createCommand(), o = 0; o < r.length; o++) this.commandKeys[r[o]] ? a.modifiers[r[o]] = !0 : this.specialKeys[r[o]] ? a.keyCode = this.specialKeys[r[o]] : a.keyCode = r[o].charCodeAt(0); e.push(a) } return e }, getCommandFromEvent: function(t) { var e = this.createCommand(); e.modifiers.shift = !!t.shiftKey, e.modifiers.alt = !!t.altKey, e.modifiers.ctrl = !!t.ctrlKey, e.modifiers.meta = !!t.metaKey, e.keyCode = t.which || t.keyCode, e.keyCode >= 96 && e.keyCode <= 105 && (e.keyCode -= 48); var n = String.fromCharCode(e.keyCode); return n && (e.keyCode = n.toLowerCase().charCodeAt(0)), e }, getHashFromEvent: function(t) { return this.getHash(this.getCommandFromEvent(t)) }, getHash: function(t) { var e = []; for (var n in t.modifiers) t.modifiers[n] && e.push(n); return e.push(t.keyCode), e.join(this.junctionChar) }, getExpressions: function(t) { return t.split(this.junctionChar) }, getWords: function(t) { return t.split(this.combinationChar) }, trim: function(t) { return t.replace(/\s/g, "") }, junctionChar: ",", combinationChar: "+", commandKeys: { shift: 16, alt: 18, ctrl: 17, meta: !0 }, specialKeys: { backspace: 8, tab: 9, enter: 13, esc: 27, space: 32, up: 38, down: 40, left: 37, right: 39, home: 36, end: 35, pageup: 33, pagedown: 34, delete: 46, insert: 45, plus: 107, f1: 112, f2: 113, f3: 114, f4: 115, f5: 116, f6: 117, f7: 118, f8: 119, f9: 120, f10: 121, f11: 122, f12: 123 } } } } , function(t, e, n) { t.exports = function(t) { var e = n(5); !function(t) { t.config.keyboard_navigation = !0, t.config.keyboard_navigation_cells = !1, t.$keyboardNavigation = {}, t._compose = function() { for (var t = Array.prototype.slice.call(arguments, 0), e = {}, n = 0; n < t.length; n++) { var i = t[n]; for (var r in "function" == typeof i && (i = new i), i) e[r] = i[r] } return e } , n(270)(t), n(269)(t), n(268)(t), n(267)(t), n(266)(t), n(265)(t), n(264)(t), n(263)(t), n(262)(t), n(261)(t); var i = n(1); !function() { var n = t.$keyboardNavigation.dispatcher; n.isTaskFocused = function(e) { var i = n.activeNode; return (i instanceof t.$keyboardNavigation.TaskRow || i instanceof t.$keyboardNavigation.TaskCell) && i.taskId == e } ; var r = function(e) { if (t.config.keyboard_navigation && (t.config.keyboard_navigation_cells || !s(e)) && !l(e) && !function(t) { return !!i.closest(t.target, ".gantt_cal_light") }(e)) return n.keyDownHandler(e) } , a = function(e) { if (n.$preventDefault) return e.preventDefault(), t.$container.blur(), !1; n.awaitsFocus() || n.focusGlobalNode() } , o = function() { if (n.isEnabled()) { var e = !i.isChildOf(document.activeElement, t.$container) && "body" != document.activeElement.localName , r = n.getActiveNode(); if (r && !e) { var a, o, s = r.getNode(); s && s.parentNode && (a = s.parentNode.scrollTop, o = s.parentNode.scrollLeft), r.focus(!0), s && s.parentNode && (s.parentNode.scrollTop = a, s.parentNode.scrollLeft = o) } } }; function s(t) { return !!i.closest(t.target, ".gantt_grid_editor_placeholder") } function l(t) { return !!i.closest(t.target, ".no_keyboard_navigation") } function c(e) { if (!t.config.keyboard_navigation) return !0; if (!t.config.keyboard_navigation_cells && s(e)) return !0; if (!l(e)) { var r, a = n.fromDomElement(e); a && (n.activeNode instanceof t.$keyboardNavigation.TaskCell && i.isChildOf(e.target, t.$task) && (a = new t.$keyboardNavigation.TaskCell(a.taskId,n.activeNode.columnIndex)), r = a), r ? n.isEnabled() ? n.delay(function() { n.setActiveNode(r) }) : n.activeNode = r : (n.$preventDefault = !0, setTimeout(function() { n.$preventDefault = !1 }, 300)) } } t.attachEvent("onDataRender", function() { t.config.keyboard_navigation && o() }), t.attachEvent("onGanttRender", function() { t.eventRemove(t.$root, "keydown", r), t.eventRemove(t.$container, "focus", a), t.eventRemove(t.$container, "mousedown", c), t.config.keyboard_navigation ? (t.event(t.$root, "keydown", r), t.event(t.$container, "focus", a), t.event(t.$container, "mousedown", c), t.$container.setAttribute("tabindex", "0")) : t.$container.removeAttribute("tabindex") }); var u = t.attachEvent("onGanttReady", function() { if (t.detachEvent(u), t.$data.tasksStore.attachEvent("onStoreUpdated", function(e) { if (t.config.keyboard_navigation && n.isEnabled()) { var i = n.getActiveNode(); i && i.taskId == e && o() } }), t._smart_render) { var e = t._smart_render._redrawTasks; t._smart_render._redrawTasks = function(i, r) { if (t.config.keyboard_navigation && n.isEnabled()) { var a = n.getActiveNode(); if (a && void 0 !== a.taskId) { for (var o = !1, s = 0; s < r.length; s++) if (r[s].id == a.taskId && r[s].start_date) { o = !0; break } o || r.push(t.getTask(a.taskId)) } } return e.apply(this, arguments) } } }) , d = null , h = !1; t.attachEvent("onTaskCreated", function(t) { return d = t.id, !0 }), t.attachEvent("onAfterTaskAdd", function(e, i) { if (!t.config.keyboard_navigation) return !0; if (n.isEnabled()) { if (e == d && (h = !0, setTimeout(function() { h = !1, d = null })), h && i.type == t.config.types.placeholder) return; var r = 0 , a = n.activeNode; a instanceof t.$keyboardNavigation.TaskCell && (r = a.columnIndex); var o = t.config.keyboard_navigation_cells ? t.$keyboardNavigation.TaskCell : t.$keyboardNavigation.TaskRow; i.type == t.config.types.placeholder && !1 === t.config.placeholder_task.focusOnCreate || n.setActiveNode(new o(e,r)) } }), t.attachEvent("onTaskIdChange", function(e, i) { if (!t.config.keyboard_navigation) return !0; var r = n.activeNode; return n.isTaskFocused(e) && (r.taskId = i), !0 }); var f = setInterval(function() { t.config.keyboard_navigation && (n.isEnabled() || n.enable()) }, 500); function _(e) { var n = { gantt: t.$keyboardNavigation.GanttNode, headerCell: t.$keyboardNavigation.HeaderCell, taskRow: t.$keyboardNavigation.TaskRow, taskCell: t.$keyboardNavigation.TaskCell }; return n[e] || n.gantt } function g(e) { for (var n = t.getGridColumns(), i = 0; i < n.length; i++) if (n[i].name == e) return i; return 0 } t.attachEvent("onDestroy", function() { clearInterval(f) }); var p = {}; e(p), t.mixin(p, { addShortcut: function(t, e, n) { var i = _(n); i && i.prototype.bind(t, e) }, getShortcutHandler: function(e, n) { var i = t.$keyboardNavigation.shortcuts.parse(e); if (i.length) return p.getCommandHandler(i[0], n) }, getCommandHandler: function(t, e) { var n = _(e); if (n && t) return n.prototype.findHandler(t) }, removeShortcut: function(t, e) { var n = _(e); n && n.prototype.unbind(t) }, focus: function(t) { var e, i = t ? t.type : null, r = _(i); switch (i) { case "taskCell": e = new r(t.id,g(t.column)); break; case "taskRow": e = new r(t.id); break; case "headerCell": e = new r(g(t.column)) } n.delay(function() { e ? n.setActiveNode(e) : (n.enable(), n.getActiveNode() ? n.awaitsFocus() || n.enable() : n.setDefaultNode()) }) }, getActiveNode: function() { if (n.isEnabled()) { var e = n.getActiveNode() , i = function(e) { return e instanceof t.$keyboardNavigation.GanttNode ? "gantt" : e instanceof t.$keyboardNavigation.HeaderCell ? "headerCell" : e instanceof t.$keyboardNavigation.TaskRow ? "taskRow" : e instanceof t.$keyboardNavigation.TaskCell ? "taskCell" : null }(e) , r = t.getGridColumns(); switch (i) { case "taskCell": return { type: "taskCell", id: e.taskId, column: r[e.columnIndex].name }; case "taskRow": return { type: "taskRow", id: e.taskId }; case "headerCell": return { type: "headerCell", column: r[e.index].name } } } return null } }), t.$keyboardNavigation.facade = p, t.ext.keyboardNavigation = p, t.focus = function() { p.focus() } , t.addShortcut = p.addShortcut, t.getShortcutHandler = p.getShortcutHandler, t.removeShortcut = p.removeShortcut }() }(t) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function(t) { function e() { var t = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; return !(!t || t !== document.body) } function n() { try { return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled } catch (t) { console.error("Fullscreen is not available:", t) } } t.$services.getService("state").registerProvider("fullscreen", function() { return n() ? { fullscreen: e() } : void 0 }); var i = { overflow: null, padding: null, paddingTop: null, paddingRight: null, paddingBottom: null, paddingLeft: null } , r = { width: null, height: null, top: null, left: null, position: null, zIndex: null, modified: !1 } , a = null; function o(t, e) { e.width = t.width, e.height = t.height, e.top = t.top, e.left = t.left, e.position = t.position, e.zIndex = t.zIndex } var s = !1; function l() { var n; t.$container && (e() ? s && (n = "onExpand", function() { var e = t.ext.fullscreen.getFullscreenElement() , n = document.body; o(e.style, r), i = { overflow: n.style.overflow, padding: n.style.padding ? n.style.padding : null, paddingTop: n.style.paddingTop ? n.style.paddingTop : null, paddingRight: n.style.paddingRight ? n.style.paddingRight : null, paddingBottom: n.style.paddingBottom ? n.style.paddingBottom : null, paddingLeft: n.style.paddingLeft ? n.style.paddingLeft : null }, n.style.padding && (n.style.padding = "0"), n.style.paddingTop && (n.style.paddingTop = "0"), n.style.paddingRight && (n.style.paddingRight = "0"), n.style.paddingBottom && (n.style.paddingBottom = "0"), n.style.paddingLeft && (n.style.paddingLeft = "0"), n.style.overflow = "hidden", e.style.width = "100vw", e.style.height = "100vh", e.style.top = "0px", e.style.left = "0px", e.style.position = "absolute", e.style.zIndex = 1, r.modified = !0, a = function(t) { for (var e = t.parentNode, n = []; e && e.style; ) n.push({ element: e, originalPositioning: e.style.position }), e.style.position = "static", e = e.parentNode; return n }(e) }()) : s && (s = !1, n = "onCollapse", function() { var e = t.ext.fullscreen.getFullscreenElement() , n = document.body; r.modified && (i.padding && (n.style.padding = i.padding), i.paddingTop && (n.style.paddingTop = i.paddingTop), i.paddingRight && (n.style.paddingRight = i.paddingRight), i.paddingBottom && (n.style.paddingBottom = i.paddingBottom), i.paddingLeft && (n.style.paddingLeft = i.paddingLeft), n.style.overflow = i.overflow, i = { overflow: null, padding: null, paddingTop: null, paddingRight: null, paddingBottom: null, paddingLeft: null }, o(r, e.style), r.modified = !1), function(t) { t.forEach(function(t) { t.element.style.position = t.originalPositioning }) }(a), a = null }()), setTimeout(function() { t.render() }), setTimeout(function() { t.callEvent(n, [t.ext.fullscreen.getFullscreenElement()]) })) } function c() { return !t.$container || !t.ext.fullscreen.getFullscreenElement() || !n() && ((console.warning || console.log)("The `fullscreen` feature not being allowed, or full-screen mode not being supported"), !0) } t.ext.fullscreen = { expand: function() { if (!c() && !e() && t.callEvent("onBeforeExpand", [this.getFullscreenElement()])) { s = !0; var n = document.body , i = n.webkitRequestFullscreen ? [Element.ALLOW_KEYBOARD_INPUT] : [] , r = n.msRequestFullscreen || n.mozRequestFullScreen || n.webkitRequestFullscreen || n.requestFullscreen; r && r.apply(n, i) } }, collapse: function() { if (!c() && e() && t.callEvent("onBeforeCollapse", [this.getFullscreenElement()])) { var n = document.msExitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.exitFullscreen; n && n.apply(document) } }, toggle: function() { c() || (e() ? this.collapse() : this.expand()) }, getFullscreenElement: function() { return t.$root } }, t.expand = function() { t.ext.fullscreen.expand() } , t.collapse = function() { t.ext.fullscreen.collapse() } , t.attachEvent("onGanttReady", function() { t.event(document, "webkitfullscreenchange", l), t.event(document, "mozfullscreenchange", l), t.event(document, "MSFullscreenChange", l), t.event(document, "fullscreenChange", l), t.event(document, "fullscreenchange", l) }) } } , function(t, e, n) { "use strict"; function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } var r = function(t) { switch (i(t)) { case "string": return t; case "boolean": return t ? "true" : "false"; case "number": return isFinite(t) ? t : ""; default: return "" } }; t.exports = function(t, e, n, l) { return e = e || "&", n = n || "=", null === t && (t = void 0), "object" === i(t) ? o(s(t), function(i) { var s = encodeURIComponent(r(i)) + n; return a(t[i]) ? o(t[i], function(t) { return s + encodeURIComponent(r(t)) }).join(e) : s + encodeURIComponent(r(t[i])) }).join(e) : l ? encodeURIComponent(r(l)) + n + encodeURIComponent(r(t)) : "" } ; var a = Array.isArray || function(t) { return "[object Array]" === Object.prototype.toString.call(t) } ; function o(t, e) { if (t.map) return t.map(e); for (var n = [], i = 0; i < t.length; i++) n.push(e(t[i], i)); return n } var s = Object.keys || function(t) { var e = []; for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && e.push(n); return e } } , function(t, e, n) { "use strict"; function i(t, e) { return Object.prototype.hasOwnProperty.call(t, e) } t.exports = function(t, e, n, a) { e = e || "&", n = n || "="; var o = {}; if ("string" != typeof t || 0 === t.length) return o; var s = /\+/g; t = t.split(e); var l = 1e3; a && "number" == typeof a.maxKeys && (l = a.maxKeys); var c = t.length; l > 0 && c > l && (c = l); for (var u = 0; u < c; ++u) { var d, h, f, _, g = t[u].replace(s, "%20"), p = g.indexOf(n); p >= 0 ? (d = g.substr(0, p), h = g.substr(p + 1)) : (d = g, h = ""), f = decodeURIComponent(d), _ = decodeURIComponent(h), i(o, f) ? r(o[f]) ? o[f].push(_) : o[f] = [o[f], _] : o[f] = _ } return o } ; var r = Array.isArray || function(t) { return "[object Array]" === Object.prototype.toString.call(t) } } , function(t, e, n) { "use strict"; e.decode = e.parse = n(274), e.encode = e.stringify = n(273) } , function(t, e, n) { "use strict"; function i(t) { "@babel/helpers - typeof"; return (i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } t.exports = { isString: function(t) { return "string" == typeof t }, isObject: function(t) { return "object" === i(t) && null !== t }, isNull: function(t) { return null === t }, isNullOrUndefined: function(t) { return null == t } } } , function(t, e) { t.exports = function(t) { return t.webpackPolyfill || (t.deprecate = function() {} , t.paths = [], t.children || (t.children = []), Object.defineProperty(t, "loaded", { enumerable: !0, get: function() { return t.l } }), Object.defineProperty(t, "id", { enumerable: !0, get: function() { return t.i } }), t.webpackPolyfill = 1), t } } , function(t, e, n) { (function(t, i) { var r; function a(t) { "@babel/helpers - typeof"; return (a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { return typeof t } : function(t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t } )(t) } /*! https://mths.be/punycode v1.4.1 by @mathias */ !function(o) { var s = "object" == a(e) && e && !e.nodeType && e , l = "object" == a(t) && t && !t.nodeType && t , c = "object" == (void 0 === i ? "undefined" : a(i)) && i; c.global !== c && c.window !== c && c.self !== c || (o = c); var u, d, h = 2147483647, f = 36, _ = 1, g = 26, p = 38, v = 700, m = 72, y = 128, k = "-", b = /^xn--/, x = /[^\x20-\x7E]/, w = /[\x2E\u3002\uFF0E\uFF61]/g, S = { overflow: "Overflow: input needs wider integers to process", "not-basic": "Illegal input >= 0x80 (not a basic code point)", "invalid-input": "Invalid input" }, T = f - _, $ = Math.floor, C = String.fromCharCode; function E(t) { throw new RangeError(S[t]) } function A(t, e) { for (var n = t.length, i = []; n--; ) i[n] = e(t[n]); return i } function D(t, e) { var n = t.split("@") , i = ""; return n.length > 1 && (i = n[0] + "@", t = n[1]), i + A((t = t.replace(w, ".")).split("."), e).join(".") } function M(t) { for (var e, n, i = [], r = 0, a = t.length; r < a; ) (e = t.charCodeAt(r++)) >= 55296 && e <= 56319 && r < a ? 56320 == (64512 & (n = t.charCodeAt(r++))) ? i.push(((1023 & e) << 10) + (1023 & n) + 65536) : (i.push(e), r--) : i.push(e); return i } function I(t) { return A(t, function(t) { var e = ""; return t > 65535 && (e += C((t -= 65536) >>> 10 & 1023 | 55296), t = 56320 | 1023 & t), e += C(t) }).join("") } function P(t) { return t - 48 < 10 ? t - 22 : t - 65 < 26 ? t - 65 : t - 97 < 26 ? t - 97 : f } function N(t, e) { return t + 22 + 75 * (t < 26) - ((0 != e) << 5) } function O(t, e, n) { var i = 0; for (t = n ? $(t / v) : t >> 1, t += $(t / e); t > T * g >> 1; i += f) t = $(t / T); return $(i + (T + 1) * t / (t + p)) } function L(t) { var e, n, i, r, a, o, s, l, c, u, d = [], p = t.length, v = 0, b = y, x = m; for ((n = t.lastIndexOf(k)) < 0 && (n = 0), i = 0; i < n; ++i) t.charCodeAt(i) >= 128 && E("not-basic"), d.push(t.charCodeAt(i)); for (r = n > 0 ? n + 1 : 0; r < p; ) { for (a = v, o = 1, s = f; r >= p && E("invalid-input"), ((l = P(t.charCodeAt(r++))) >= f || l > $((h - v) / o)) && E("overflow"), v += l * o, !(l < (c = s <= x ? _ : s >= x + g ? g : s - x)); s += f) o > $(h / (u = f - c)) && E("overflow"), o *= u; x = O(v - a, e = d.length + 1, 0 == a), $(v / e) > h - b && E("overflow"), b += $(v / e), v %= e, d.splice(v++, 0, b) } return I(d) } function R(t) { var e, n, i, r, a, o, s, l, c, u, d, p, v, b, x, w = []; for (p = (t = M(t)).length, e = y, n = 0, a = m, o = 0; o < p; ++o) (d = t[o]) < 128 && w.push(C(d)); for (i = r = w.length, r && w.push(k); i < p; ) { for (s = h, o = 0; o < p; ++o) (d = t[o]) >= e && d < s && (s = d); for (s - e > $((h - n) / (v = i + 1)) && E("overflow"), n += (s - e) * v, e = s, o = 0; o < p; ++o) if ((d = t[o]) < e && ++n > h && E("overflow"), d == e) { for (l = n, c = f; !(l < (u = c <= a ? _ : c >= a + g ? g : c - a)); c += f) x = l - u, b = f - u, w.push(C(N(u + x % b, 0))), l = $(x / b); w.push(C(N(l, 0))), a = O(n, v, i == r), n = 0, ++i } ++n, ++e } return w.join("") } if (u = { version: "1.4.1", ucs2: { decode: M, encode: I }, decode: L, encode: R, toASCII: function(t) { return D(t, function(t) { return x.test(t) ? "xn--" + R(t) : t }) }, toUnicode: function(t) { return D(t, function(t) { return b.test(t) ? L(t.slice(4).toLowerCase()) : t }) } }, "object" == a(n(53)) && n(53)) void 0 === (r = function() { return u } .call(e, n, e, t)) || (t.exports = r); else if (s && l) if (t.exports == s) l.exports = u; else for (d in u) u.hasOwnProperty(d) && (s[d] = u[d]); else o.punycode = u }(this) } ).call(this, n(277)(t), n(4)) } , function(t, e) { t.exports = { 100: "Continue", 101: "Switching Protocols", 102: "Processing", 200: "OK", 201: "Created", 202: "Accepted", 203: "Non-Authoritative Information", 204: "No Content", 205: "Reset Content", 206: "Partial Content", 207: "Multi-Status", 208: "Already Reported", 226: "IM Used", 300: "Multiple Choices", 301: "Moved Permanently", 302: "Found", 303: "See Other", 304: "Not Modified", 305: "Use Proxy", 307: "Temporary Redirect", 308: "Permanent Redirect", 400: "Bad Request", 401: "Unauthorized", 402: "Payment Required", 403: "Forbidden", 404: "Not Found", 405: "Method Not Allowed", 406: "Not Acceptable", 407: "Proxy Authentication Required", 408: "Request Timeout", 409: "Conflict", 410: "Gone", 411: "Length Required", 412: "Precondition Failed", 413: "Payload Too Large", 414: "URI Too Long", 415: "Unsupported Media Type", 416: "Range Not Satisfiable", 417: "Expectation Failed", 418: "I'm a teapot", 421: "Misdirected Request", 422: "Unprocessable Entity", 423: "Locked", 424: "Failed Dependency", 425: "Unordered Collection", 426: "Upgrade Required", 428: "Precondition Required", 429: "Too Many Requests", 431: "Request Header Fields Too Large", 451: "Unavailable For Legal Reasons", 500: "Internal Server Error", 501: "Not Implemented", 502: "Bad Gateway", 503: "Service Unavailable", 504: "Gateway Timeout", 505: "HTTP Version Not Supported", 506: "Variant Also Negotiates", 507: "Insufficient Storage", 508: "Loop Detected", 509: "Bandwidth Limit Exceeded", 510: "Not Extended", 511: "Network Authentication Required" } } , function(t, e) { t.exports = function() { for (var t = {}, e = 0; e < arguments.length; e++) { var i = arguments[e]; for (var r in i) n.call(i, r) && (t[r] = i[r]) } return t } ; var n = Object.prototype.hasOwnProperty } , function(t, e, n) { var i = n(13).Buffer; t.exports = function(t) { if (t instanceof Uint8Array) { if (0 === t.byteOffset && t.byteLength === t.buffer.byteLength) return t.buffer; if ("function" == typeof t.buffer.slice) return t.buffer.slice(t.byteOffset, t.byteOffset + t.byteLength) } if (i.isBuffer(t)) { for (var e = new Uint8Array(t.length), n = t.length, r = 0; r < n; r++) e[r] = t[r]; return e.buffer } throw new Error("Argument must be a Buffer") } } , function(t, e, n) { "use strict"; t.exports = a; var i = n(55) , r = n(17); function a(t) { if (!(this instanceof a)) return new a(t); i.call(this, t) } r.inherits = n(8), r.inherits(a, i), a.prototype._transform = function(t, e, n) { n(null, t) } } , function(t, e, n) { (function(e) { function n(t) { try { if (!e.localStorage) return !1 } catch (t) { return !1 } var n = e.localStorage[t]; return null != n && "true" === String(n).toLowerCase() } t.exports = function(t, e) { if (n("noDeprecation")) return t; var i = !1; return function() { if (!i) { if (n("throwDeprecation")) throw new Error(e); n("traceDeprecation") ? console.trace(e) : console.warn(e), i = !0 } return t.apply(this, arguments) } } } ).call(this, n(4)) } , function(t, e, n) { (function(t, e) { !function(t, n) { "use strict"; if (!t.setImmediate) { var i, r = 1, a = {}, o = !1, s = t.document, l = Object.getPrototypeOf && Object.getPrototypeOf(t); l = l && l.setTimeout ? l : t, "[object process]" === {}.toString.call(t.process) ? i = function(t) { e.nextTick(function() { u(t) }) } : function() { if (t.postMessage && !t.importScripts) { var e = !0 , n = t.onmessage; return t.onmessage = function() { e = !1 } , t.postMessage("", "*"), t.onmessage = n, e } }() ? function() { var e = "setImmediate$" + Math.random() + "$" , n = function(n) { n.source === t && "string" == typeof n.data && 0 === n.data.indexOf(e) && u(+n.data.slice(e.length)) }; t.addEventListener ? t.addEventListener("message", n, !1) : t.attachEvent("onmessage", n), i = function(n) { t.postMessage(e + n, "*") } }() : t.MessageChannel ? function() { var t = new MessageChannel; t.port1.onmessage = function(t) { u(t.data) } , i = function(e) { t.port2.postMessage(e) } }() : s && "onreadystatechange"in s.createElement("script") ? function() { var t = s.documentElement; i = function(e) { var n = s.createElement("script"); n.onreadystatechange = function() { u(e), n.onreadystatechange = null, t.removeChild(n), n = null } , t.appendChild(n) } }() : i = function(t) { setTimeout(u, 0, t) } , l.setImmediate = function(t) { "function" != typeof t && (t = new Function("" + t)); for (var e = new Array(arguments.length - 1), n = 0; n < e.length; n++) e[n] = arguments[n + 1]; var o = { callback: t, args: e }; return a[r] = o, i(r), r++ } , l.clearImmediate = c } function c(t) { delete a[t] } function u(t) { if (o) setTimeout(u, 0, t); else { var e = a[t]; if (e) { o = !0; try { !function(t) { var e = t.callback , i = t.args; switch (i.length) { case 0: e(); break; case 1: e(i[0]); break; case 2: e(i[0], i[1]); break; case 3: e(i[0], i[1], i[2]); break; default: e.apply(n, i) } }(e) } finally { c(t), o = !1 } } } } }("undefined" == typeof self ? void 0 === t ? this : t : self) } ).call(this, n(4), n(9)) } , function(t, e) {} , function(t, e, n) { "use strict"; var i = n(22).Buffer , r = n(285); function a(t, e, n) { t.copy(e, n) } t.exports = function() { function t() { !function(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") }(this, t), this.head = null, this.tail = null, this.length = 0 } return t.prototype.push = function(t) { var e = { data: t, next: null }; this.length > 0 ? this.tail.next = e : this.head = e, this.tail = e, ++this.length } , t.prototype.unshift = function(t) { var e = { data: t, next: this.head }; 0 === this.length && (this.tail = e), this.head = e, ++this.length } , t.prototype.shift = function() { if (0 !== this.length) { var t = this.head.data; return 1 === this.length ? this.head = this.tail = null : this.head = this.head.next, --this.length, t } } , t.prototype.clear = function() { this.head = this.tail = null, this.length = 0 } , t.prototype.join = function(t) { if (0 === this.length) return ""; for (var e = this.head, n = "" + e.data; e = e.next; ) n += t + e.data; return n } , t.prototype.concat = function(t) { if (0 === this.length) return i.alloc(0); if (1 === this.length) return this.head.data; for (var e = i.allocUnsafe(t >>> 0), n = this.head, r = 0; n; ) a(n.data, e, r), r += n.data.length, n = n.next; return e } , t }(), r && r.inspect && r.inspect.custom && (t.exports.prototype[r.inspect.custom] = function() { var t = r.inspect({ length: this.length }); return this.constructor.name + " " + t } ) } , function(t, e) {} , function(t, e, n) { (function(e, i, r) { var a = n(65) , o = n(8) , s = n(64) , l = n(63) , c = n(281) , u = s.IncomingMessage , d = s.readyStates; var h = t.exports = function(t) { var n, i = this; l.Writable.call(i), i._opts = t, i._body = [], i._headers = {}, t.auth && i.setHeader("Authorization", "Basic " + new e(t.auth).toString("base64")), Object.keys(t.headers).forEach(function(e) { i.setHeader(e, t.headers[e]) }); var r = !0; if ("disable-fetch" === t.mode || "requestTimeout"in t && !a.abortController) r = !1, n = !0; else if ("prefer-streaming" === t.mode) n = !1; else if ("allow-wrong-content-type" === t.mode) n = !a.overrideMimeType; else { if (t.mode && "default" !== t.mode && "prefer-fast" !== t.mode) throw new Error("Invalid value for opts.mode"); n = !0 } i._mode = function(t, e) { return a.fetch && e ? "fetch" : a.mozchunkedarraybuffer ? "moz-chunked-arraybuffer" : a.msstream ? "ms-stream" : a.arraybuffer && t ? "arraybuffer" : a.vbArray && t ? "text:vbarray" : "text" }(n, r), i._fetchTimer = null, i.on("finish", function() { i._onFinish() }) } ; o(h, l.Writable), h.prototype.setHeader = function(t, e) { var n = t.toLowerCase(); -1 === f.indexOf(n) && (this._headers[n] = { name: t, value: e }) } , h.prototype.getHeader = function(t) { var e = this._headers[t.toLowerCase()]; return e ? e.value : null } , h.prototype.removeHeader = function(t) { delete this._headers[t.toLowerCase()] } , h.prototype._onFinish = function() { var t = this; if (!t._destroyed) { var n = t._opts , o = t._headers , s = null; "GET" !== n.method && "HEAD" !== n.method && (s = a.arraybuffer ? c(e.concat(t._body)) : a.blobConstructor ? new i.Blob(t._body.map(function(t) { return c(t) }),{ type: (o["content-type"] || {}).value || "" }) : e.concat(t._body).toString()); var l = []; if (Object.keys(o).forEach(function(t) { var e = o[t].name , n = o[t].value; Array.isArray(n) ? n.forEach(function(t) { l.push([e, t]) }) : l.push([e, n]) }), "fetch" === t._mode) { var u = null; if (a.abortController) { var h = new AbortController; u = h.signal, t._fetchAbortController = h, "requestTimeout"in n && 0 !== n.requestTimeout && (t._fetchTimer = i.setTimeout(function() { t.emit("requestTimeout"), t._fetchAbortController && t._fetchAbortController.abort() }, n.requestTimeout)) } i.fetch(t._opts.url, { method: t._opts.method, headers: l, body: s || void 0, mode: "cors", credentials: n.withCredentials ? "include" : "same-origin", signal: u }).then(function(e) { t._fetchResponse = e, t._connect() }, function(e) { i.clearTimeout(t._fetchTimer), t._destroyed || t.emit("error", e) }) } else { var f = t._xhr = new i.XMLHttpRequest; try { f.open(t._opts.method, t._opts.url, !0) } catch (e) { return void r.nextTick(function() { t.emit("error", e) }) } "responseType"in f && (f.responseType = t._mode.split(":")[0]), "withCredentials"in f && (f.withCredentials = !!n.withCredentials), "text" === t._mode && "overrideMimeType"in f && f.overrideMimeType("text/plain; charset=x-user-defined"), "requestTimeout"in n && (f.timeout = n.requestTimeout, f.ontimeout = function() { t.emit("requestTimeout") } ), l.forEach(function(t) { f.setRequestHeader(t[0], t[1]) }), t._response = null, f.onreadystatechange = function() { switch (f.readyState) { case d.LOADING: case d.DONE: t._onXHRProgress() } } , "moz-chunked-arraybuffer" === t._mode && (f.onprogress = function() { t._onXHRProgress() } ), f.onerror = function() { t._destroyed || t.emit("error", new Error("XHR error")) } ; try { f.send(s) } catch (e) { return void r.nextTick(function() { t.emit("error", e) }) } } } } , h.prototype._onXHRProgress = function() { (function(t) { try { var e = t.status; return null !== e && 0 !== e } catch (t) { return !1 } } )(this._xhr) && !this._destroyed && (this._response || this._connect(), this._response._onXHRProgress()) } , h.prototype._connect = function() { var t = this; t._destroyed || (t._response = new u(t._xhr,t._fetchResponse,t._mode,t._fetchTimer), t._response.on("error", function(e) { t.emit("error", e) }), t.emit("response", t._response)) } , h.prototype._write = function(t, e, n) { this._body.push(t), n() } , h.prototype.abort = h.prototype.destroy = function() { this._destroyed = !0, i.clearTimeout(this._fetchTimer), this._response && (this._response._destroyed = !0), this._xhr ? this._xhr.abort() : this._fetchAbortController && this._fetchAbortController.abort() } , h.prototype.end = function(t, e, n) { "function" == typeof t && (n = t, t = void 0), l.Writable.prototype.end.call(this, t, e, n) } , h.prototype.flushHeaders = function() {} , h.prototype.setTimeout = function() {} , h.prototype.setNoDelay = function() {} , h.prototype.setSocketKeepAlive = function() {} ; var f = ["accept-charset", "accept-encoding", "access-control-request-headers", "access-control-request-method", "connection", "content-length", "cookie", "cookie2", "date", "dnt", "expect", "host", "keep-alive", "origin", "referer", "te", "trailer", "transfer-encoding", "upgrade", "via"] } ).call(this, n(13).Buffer, n(4), n(9)) } , function(t, e, n) { var i = n(66) , r = n(54) , a = t.exports; for (var o in i) i.hasOwnProperty(o) && (a[o] = i[o]); function s(t) { if ("string" == typeof t && (t = r.parse(t)), t.protocol || (t.protocol = "https:"), "https:" !== t.protocol) throw new Error('Protocol "' + t.protocol + '" not supported. Expected "https:"'); return t } a.request = function(t, e) { return t = s(t), i.request.call(this, t, e) } , a.get = function(t, e) { return t = s(t), i.get.call(this, t, e) } } , function(t, e) { e.read = function(t, e, n, i, r) { var a, o, s = 8 * r - i - 1, l = (1 << s) - 1, c = l >> 1, u = -7, d = n ? r - 1 : 0, h = n ? -1 : 1, f = t[e + d]; for (d += h, a = f & (1 << -u) - 1, f >>= -u, u += s; u > 0; a = 256 * a + t[e + d], d += h, u -= 8) ; for (o = a & (1 << -u) - 1, a >>= -u, u += i; u > 0; o = 256 * o + t[e + d], d += h, u -= 8) ; if (0 === a) a = 1 - c; else { if (a === l) return o ? NaN : 1 / 0 * (f ? -1 : 1); o += Math.pow(2, i), a -= c } return (f ? -1 : 1) * o * Math.pow(2, a - i) } , e.write = function(t, e, n, i, r, a) { var o, s, l, c = 8 * a - r - 1, u = (1 << c) - 1, d = u >> 1, h = 23 === r ? Math.pow(2, -24) - Math.pow(2, -77) : 0, f = i ? 0 : a - 1, _ = i ? 1 : -1, g = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0; for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (s = isNaN(e) ? 1 : 0, o = u) : (o = Math.floor(Math.log(e) / Math.LN2), e * (l = Math.pow(2, -o)) < 1 && (o--, l *= 2), (e += o + d >= 1 ? h / l : h * Math.pow(2, 1 - d)) * l >= 2 && (o++, l /= 2), o + d >= u ? (s = 0, o = u) : o + d >= 1 ? (s = (e * l - 1) * Math.pow(2, r), o += d) : (s = e * Math.pow(2, d - 1) * Math.pow(2, r), o = 0)); r >= 8; t[n + f] = 255 & s, f += _, s /= 256, r -= 8) ; for (o = o << r | s, c += r; c > 0; t[n + f] = 255 & o, f += _, o /= 256, c -= 8) ; t[n + f - _] |= 128 * g } } , function(t, e, n) { "use strict"; e.byteLength = function(t) { var e = c(t) , n = e[0] , i = e[1]; return 3 * (n + i) / 4 - i } , e.toByteArray = function(t) { for (var e, n = c(t), i = n[0], o = n[1], s = new a(function(t, e, n) { return 3 * (e + n) / 4 - n }(0, i, o)), l = 0, u = o > 0 ? i - 4 : i, d = 0; d < u; d += 4) e = r[t.charCodeAt(d)] << 18 | r[t.charCodeAt(d + 1)] << 12 | r[t.charCodeAt(d + 2)] << 6 | r[t.charCodeAt(d + 3)], s[l++] = e >> 16 & 255, s[l++] = e >> 8 & 255, s[l++] = 255 & e; 2 === o && (e = r[t.charCodeAt(d)] << 2 | r[t.charCodeAt(d + 1)] >> 4, s[l++] = 255 & e); 1 === o && (e = r[t.charCodeAt(d)] << 10 | r[t.charCodeAt(d + 1)] << 4 | r[t.charCodeAt(d + 2)] >> 2, s[l++] = e >> 8 & 255, s[l++] = 255 & e); return s } , e.fromByteArray = function(t) { for (var e, n = t.length, r = n % 3, a = [], o = 0, s = n - r; o < s; o += 16383) a.push(d(t, o, o + 16383 > s ? s : o + 16383)); 1 === r ? (e = t[n - 1], a.push(i[e >> 2] + i[e << 4 & 63] + "==")) : 2 === r && (e = (t[n - 2] << 8) + t[n - 1], a.push(i[e >> 10] + i[e >> 4 & 63] + i[e << 2 & 63] + "=")); return a.join("") } ; for (var i = [], r = [], a = "undefined" != typeof Uint8Array ? Uint8Array : Array, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", s = 0, l = o.length; s < l; ++s) i[s] = o[s], r[o.charCodeAt(s)] = s; function c(t) { var e = t.length; if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); var n = t.indexOf("="); return -1 === n && (n = e), [n, n === e ? 0 : 4 - n % 4] } function u(t) { return i[t >> 18 & 63] + i[t >> 12 & 63] + i[t >> 6 & 63] + i[63 & t] } function d(t, e, n) { for (var i, r = [], a = e; a < n; a += 3) i = (t[a] << 16 & 16711680) + (t[a + 1] << 8 & 65280) + (255 & t[a + 2]), r.push(u(i)); return r.join("") } r["-".charCodeAt(0)] = 62, r["_".charCodeAt(0)] = 63 } , function(t, e, n) { "use strict"; (function(t) { Object.defineProperty(e, "__esModule", { value: !0 }), e.default = function(e) { e.ext = e.ext || {}, e.ext.export_api = e.ext.export_api || { _apiUrl: "https://export.dhtmlx.com/gantt", getNodeJSTransport: function(t) { var e, i, r = t.split("://")[0]; switch (r) { case "https": e = n(289), i = 443; break; case "http": e = n(66), i = 80; break; default: throw new Error("Unsupported protocol: " + r + ", url: " + t) } return { module: e, defaultPort: i } }, _prepareConfigPDF: function(t, n) { if (t && t.raw) { var i = null; t.start && t.end && (i = { start_date: e.config.start_date, end_date: e.config.end_date }, e.config.start_date = e.date.str_to_date(e.config.date_format)(t.start), e.config.end_date = e.date.str_to_date(e.config.date_format)(t.end)), t = e.mixin(t, { name: "gantt." + n, data: e.ext.export_api._serializeHtml() }), i && (e.config.start_date = i.start_date, e.config.end_date = i.end_date) } else t = e.mixin(t || {}, { name: "gantt." + n, data: e.ext.export_api._serializeAll(), config: e.config }), e.ext.export_api._fixColumns(t.config.columns); t.version = e.version, e.ext.export_api._sendToExport(t, n) }, exportToPDF: function(t) { e.ext.export_api._prepareConfigPDF(t, "pdf") }, exportToPNG: function(t) { e.ext.export_api._prepareConfigPDF(t, "png") }, exportToICal: function(t) { t = e.mixin(t || {}, { name: "gantt.ical", data: e.ext.export_api._serializePlain().data, version: e.version }), e.ext.export_api._sendToExport(t, "ical") }, exportToExcel: function(t) { var n, i, r, a; t = t || {}; var o = e.config.smart_rendering; if ("base-colors" === t.visual && (e.config.smart_rendering = !1), t.start || t.end) { r = e.getState(), i = [e.config.start_date, e.config.end_date], a = e.getScrollState(); var s = e.date.str_to_date(e.config.date_format); n = e.eachTask, t.start && (e.config.start_date = s(t.start)), t.end && (e.config.end_date = s(t.end)), e.render(), e.config.smart_rendering = o, e.eachTask = e.ext.export_api._eachTaskTimed(e.config.start_date, e.config.end_date) } else "base-colors" === t.visual && (e.render(), e.config.smart_rendering = o); e._no_progress_colors = "base-colors" === t.visual; var l = null; e.env.isNode || (l = e.ext.export_api._serializeTable(t).data), (t = e.mixin(t, { name: "gantt.xlsx", title: "Tasks", data: l, columns: e.ext.export_api._serializeColumns({ rawDates: !0 }), version: e.version })).visual && (t.scales = e.ext.export_api._serializeScales(t)), e.ext.export_api._sendToExport(t, "excel"), (t.start || t.end) && (e.config.start_date = r.min_date, e.config.end_date = r.max_date, e.eachTask = n, e.render(), e.scrollTo(a.x, a.y), e.config.start_date = i[0], e.config.end_date = i[1]) }, exportToJSON: function(t) { t = e.mixin(t || {}, { name: "gantt.json", data: e.ext.export_api._serializeAll(), config: e.config, columns: e.ext.export_api._serializeColumns(), worktime: e.ext.export_api._getWorktimeSettings(), version: e.version }), e.ext.export_api._sendToExport(t, "json") }, importFromExcel: function(t) { try { var n = t.data; if (n instanceof FormData) ; else if (n instanceof File) { var i = new FormData; i.append("file", n), t.data = i } } catch (t) {} e.env.isNode ? e.ext.export_api._nodejsImportExcel(t) : e.ext.export_api._sendImportAjaxExcel(t) }, importFromMSProject: function(t) { var n = t.data; try { if (n instanceof FormData) ; else if (n instanceof File) { var i = new FormData; i.append("file", n), t.data = i } } catch (t) {} e.env.isNode ? e.ext.export_api._nodejsImportMSP(t) : e.ext.export_api._sendImportAjaxMSP(t) }, importFromPrimaveraP6: function(t) { return t.type = "primaveraP6-parse", e.importFromMSProject(t) }, exportToMSProject: function(t) { (t = t || {}).skip_circular_links = void 0 === t.skip_circular_links || !!t.skip_circular_links; var n = e.templates.xml_format , i = e.templates.format_date , r = e.config.xml_date , a = e.config.date_format; e.config.xml_date = "%d-%m-%Y %H:%i:%s", e.config.date_format = "%d-%m-%Y %H:%i:%s", e.templates.xml_format = e.date.date_to_str("%d-%m-%Y %H:%i:%s"), e.templates.format_date = e.date.date_to_str("%d-%m-%Y %H:%i:%s"); var o = e.ext.export_api._serializeAll(); e.ext.export_api._customProjectProperties(o, t), e.ext.export_api._customTaskProperties(o, t), t.skip_circular_links && e.ext.export_api._clearRecLinks(o), t = e.ext.export_api._exportConfig(o, t), e.ext.export_api._sendToExport(t, t.type || "msproject"), e.config.xml_date = r, e.config.date_format = a, e.templates.xml_format = n, e.templates.format_date = i, e.config.$custom_data = null, e.config.custom = null }, exportToPrimaveraP6: function(t) { return (t = t || {}).type = "primaveraP6", e.exportToMSProject(t) }, _nodejsImportExcel: function(t) { var i = n(52) , r = t.server || e.ext.export_api._apiUrl , a = e.ext.export_api.getNodeJSTransport(r) , o = r.split("://")[1] , s = o.split("/")[0].split(":") , l = o.split("/") , c = { hostname: s[0], port: s[1] || a.defaultPort, path: "/" + l.slice(1).join("/"), method: "POST", headers: { "X-Requested-With": "XMLHttpRequest" } } , u = new i; u.append("file", t.data), u.append("type", "excel-parse"), u.append("data", JSON.stringify({ sheet: t.sheet || 0 })), c.headers["Content-Type"] = u.getHeaders()["content-type"]; var d = a.module.request(c, function(e) { var n = ""; e.on("data", function(t) { n += t }), e.on("end", function(e) { t.callback(n.toString()) }) }); d.on("error", function(t) { console.error(t) }), u.pipe(d) }, _nodejsImportMSP: function(t) { var i = n(52) , r = t.server || e.ext.export_api._apiUrl , a = e.ext.export_api.getNodeJSTransport(r) , o = r.split("://")[1] , s = o.split("/")[0].split(":") , l = o.split("/") , c = { hostname: s[0], port: s[1] || a.defaultPort, path: "/" + l.slice(1).join("/"), method: "POST", headers: { "X-Requested-With": "XMLHttpRequest" } } , u = { durationUnit: t.durationUnit || void 0, projectProperties: t.projectProperties || void 0, taskProperties: t.taskProperties || void 0 } , d = new i; d.append("file", t.data), d.append("type", t.type || "msproject-parse"), d.append("data", JSON.stringify(u), c), c.headers["Content-Type"] = d.getHeaders()["content-type"]; var h = a.module.request(c, function(e) { var n = ""; e.on("data", function(t) { n += t }), e.on("end", function(e) { t.callback(n.toString()) }) }); h.on("error", function(t) { console.error(t) }), d.pipe(h) }, _fixColumns: function(t) { for (var n = 0; n < t.length; n++) t[n].label = t[n].label || e.locale.labels["column_" + t[n].name], "string" == typeof t[n].width && (t[n].width = 1 * t[n].width) }, _xdr: function(t, n, i) { e.env.isNode ? e.ext.export_api._nodejsPostRequest(t, n, i) : e.ajax.post(t, n, i) }, _nodejsPostRequest: function(n, i, r) { var a = e.ext.export_api.getNodeJSTransport(n) , o = n.split("://")[1] , s = o.split("/")[0].split(":") , l = o.split("/") , c = { hostname: s[0], port: s[1] || a.defaultPort, path: "/" + l.slice(1).join("/"), method: "POST", headers: { "Content-Type": "application/json", "Content-Length": JSON.stringify(i).length } } , u = a.module.request(c, function(e) { var n = []; e.on("data", function(t) { n.push(t) }), e.on("end", function(e) { r(t.concat(n)) }) }); u.on("error", function(t) { console.error(t) }), u.write(JSON.stringify(i)), u.end() }, _markColumns: function(t) { var e = t.config.columns; if (e) for (var n = 0; n < e.length; n++) e[n].template && (e[n].$template = !0) }, _sendImportAjaxExcel: function(t) { var n = t.server || e.ext.export_api._apiUrl , i = t.store || 0 , r = t.data , a = t.callback; r.append("type", "excel-parse"), r.append("data", JSON.stringify({ sheet: t.sheet || 0 })), i && r.append("store", i); var o = new XMLHttpRequest; o.onreadystatechange = function(t) { 4 === o.readyState && 0 === o.status && a && a(null) } , o.onload = function() { var t = null; if (!(o.status > 400)) try { t = JSON.parse(o.responseText) } catch (t) {} a && a(t) } , o.open("POST", n, !0), o.setRequestHeader("X-Requested-With", "XMLHttpRequest"), o.send(r) }, _ajaxToExport: function(t, n, i) { delete t.callback; var r = t.server || e.ext.export_api._apiUrl , a = "type=" + n + "&store=1&data=" + encodeURIComponent(JSON.stringify(t)); e.ext.export_api._xdr(r, a, function(t) { var e = t.xmlDoc || t , n = null; if (!(e.status > 400)) try { n = JSON.parse(e.responseText) } catch (t) {} i(n) }) }, _serializableGanttConfig: function(t) { var n = e.mixin({}, t); return n.columns && (n.columns = n.columns.map(function(t) { var n = e.mixin({}, t); return delete n.editor, n })), delete n.editor_types, n }, _sendToExport: function(t, n) { var i = e.date.date_to_str(e.config.date_format || e.config.xml_date); if (t.config && (t.config = e.copy(e.ext.export_api._serializableGanttConfig(t.config)), e.ext.export_api._markColumns(t, n), t.config.start_date && t.config.end_date && (t.config.start_date instanceof Date && (t.config.start_date = i(t.config.start_date)), t.config.end_date instanceof Date && (t.config.end_date = i(t.config.end_date)))), e.env.isNode) { var r = t.server || e.ext.export_api._apiUrl , a = { type: n, store: 0, data: JSON.stringify(t) } , o = t.callback || function(t) { console.log(t) } ; return e.ext.export_api._xdr(r, a, o) } if (t.callback) return e.ext.export_api._ajaxToExport(t, n, t.callback); var s = e.ext.export_api._createHiddenForm(); s.firstChild.action = t.server || e.ext.export_api._apiUrl, s.firstChild.childNodes[0].value = JSON.stringify(t), s.firstChild.childNodes[1].value = n, s.firstChild.submit() }, _createHiddenForm: function() { if (!e.ext.export_api._hidden_export_form) { var t = e.ext.export_api._hidden_export_form = document.createElement("div"); t.style.display = "none", t.innerHTML = "
", document.body.appendChild(t) } return e.ext.export_api._hidden_export_form }, _copyObjectBase: function(t) { var n = { start_date: void 0, end_date: void 0 }; for (var i in t) "$" !== i.charAt(0) && (n[i] = t[i]); var r = e.templates.xml_format || e.templates.format_date; return n.start_date = r(n.start_date), n.end_date && (n.end_date = r(n.end_date)), n }, _color_box: null, _color_hash: {}, _getStyles: function(t) { if (e.ext.export_api._color_box || (e.ext.export_api._color_box = document.createElement("DIV"), e.ext.export_api._color_box.style.cssText = "position:absolute; display:none;", document.body.appendChild(e.ext.export_api._color_box)), e.ext.export_api._color_hash[t]) return e.ext.export_api._color_hash[t]; e.ext.export_api._color_box.className = t; var n = e.ext.export_api._getColor(e.ext.export_api._color_box, "color") , i = e.ext.export_api._getColor(e.ext.export_api._color_box, "backgroundColor"); return e.ext.export_api._color_hash[t] = n + ";" + i }, _getMinutesWorktimeSettings: function(t) { var e = []; return t.forEach(function(t) { e.push(t.startMinute), e.push(t.endMinute) }), e }, _getWorktimeSettings: function() { var t, n = { hours: [0, 24], minutes: null, dates: { 0: !0, 1: !0, 2: !0, 3: !0, 4: !0, 5: !0, 6: !0 } }; if (e.config.work_time) { var i = e._working_time_helper; if (i && i.get_calendar) t = i.get_calendar(); else if (i) t = { hours: i.hours, minutes: null, dates: i.dates }; else if (e.config.worktimes && e.config.worktimes.global) { var r = e.config.worktimes.global; if (r.parsed) { var a = e.ext.export_api._getMinutesWorktimeSettings(r.parsed.hours); for (var o in t = { hours: null, minutes: a, dates: {} }, r.parsed.dates) Array.isArray(r.parsed.dates[o]) ? t.dates[o] = e.ext.export_api._getMinutesWorktimeSettings(r.parsed.dates[o]) : t.dates[o] = r.parsed.dates[o] } else t = { hours: r.hours, minutes: null, dates: r.dates } } else t = n } else t = n; return t }, _eachTaskTimed: function(t, n) { return function(i, r, a) { r = r || e.config.root_id, a = a || e; var o = e.getChildren(r); if (o) for (var s = 0; s < o.length; s++) { var l = e._pull[o[s]]; (!t || l.end_date > t) && (!n || l.start_date < n) && i.call(a, l), e.hasChild(l.id) && e.eachTask(i, l.id, a) } } }, _originalCopyObject: e.json._copyObject, _copyObjectPlain: function(t) { var n = e.templates.task_text(t.start_date, t.end_date, t) , i = e.ext.export_api._copyObjectBase(t); return i.text = n || i.text, i }, _getColor: function(t, e) { var n = t.currentStyle ? t.currentStyle[e] : getComputedStyle(t, null)[e] , i = n.replace(/\s/g, "").match(/^rgba?\((\d+),(\d+),(\d+)/i); return (i && 4 === i.length ? ("0" + parseInt(i[1], 10).toString(16)).slice(-2) + ("0" + parseInt(i[2], 10).toString(16)).slice(-2) + ("0" + parseInt(i[3], 10).toString(16)).slice(-2) : n).replace("#", "") }, _copyObjectTable: function(t) { var n = e.date.date_to_str("%Y-%m-%dT%H:%i:%s.000Z") , i = e.ext.export_api._copyObjectColumns(t, e.ext.export_api._copyObjectPlain(t)); i.start_date && (i.start_date = n(t.start_date)), i.end_date && (i.end_date = n(t.end_date)); var r = e._day_index_by_date ? e._day_index_by_date : e.columnIndexByDate; i.$start = r.call(e, t.start_date), i.$end = r.call(e, t.end_date); var a = 0 , o = e.getScale().width; if (o.indexOf(0) > -1) { for (var s = 0; s < i.$start; s++) o[s] || a++; for (i.$start -= a; s < i.$end; s++) o[s] || a++; i.$end -= a } i.$level = t.$level, i.$type = t.$rendered_type; var l = e.templates; return i.$text = l.task_text(t.start, t.end_date, t), i.$left = l.leftside_text ? l.leftside_text(t.start, t.end_date, t) : "", i.$right = l.rightside_text ? l.rightside_text(t.start, t.end_date, t) : "", i }, _copyObjectColors: function(t) { var n = e.ext.export_api._copyObjectTable(t) , i = e.getTaskNode(t.id); if (i && i.firstChild) { var r = e.ext.export_api._getColor(e._no_progress_colors ? i : i.firstChild, "backgroundColor"); "363636" === r && (r = e.ext.export_api._getColor(i, "backgroundColor")), n.$color = r } else t.color && (n.$color = t.color); return n }, _copyObjectColumns: function(t, n) { for (var i = 0; i < e.config.columns.length; i++) { var r = e.config.columns[i].template; if (r) { var a = r(t); a instanceof Date && (a = e.templates.date_grid(a, t)), n["_" + i] = a } } return n }, _copyObjectAll: function(t) { for (var n = e.ext.export_api._copyObjectBase(t), i = ["leftside_text", "rightside_text", "task_text", "progress_text", "task_class"], r = 0; r < i.length; r++) { var a = e.templates[i[r]]; a && (n["$" + r] = a(t.start_date, t.end_date, t)) } return e.ext.export_api._copyObjectColumns(t, n), n.open = t.$open, n }, _serializeHtml: function() { var t = e.config.smart_scales , n = e.config.smart_rendering; (t || n) && (e.config.smart_rendering = !1, e.config.smart_scales = !1, e.render()); var i = e.$container.parentNode.innerHTML; return (t || n) && (e.config.smart_scales = t, e.config.smart_rendering = n, e.render()), i }, _serializeAll: function() { e.json._copyObject = e.ext.export_api._copyObjectAll; var t = e.ext.export_api._exportSerialize(); return e.json._copyObject = e.ext.export_api._originalCopyObject, t }, _serializePlain: function() { var t = e.templates.xml_format , n = e.templates.format_date; e.templates.xml_format = e.date.date_to_str("%Y%m%dT%H%i%s", !0), e.templates.format_date = e.date.date_to_str("%Y%m%dT%H%i%s", !0), e.json._copyObject = e.ext.export_api._copyObjectPlain; var i = e.ext.export_api._exportSerialize(); return e.templates.xml_format = t, e.templates.format_date = n, e.json._copyObject = e.ext.export_api._originalCopyObject, delete i.links, i }, _getRaw: function() { if (e._scale_helpers) { var t = e._get_scales() , n = e.config.min_column_width , i = e._get_resize_options().x ? Math.max(e.config.autosize_min_width, 0) : e.config.$task.offsetWidth , r = e.config.config.scale_height - 1; return e._scale_helpers.prepareConfigs(t, n, i, r) } var a = e.$ui.getView("timeline"); if (a) { var o = a.$config.width; "x" !== e.config.autosize && "xy" !== e.config.autosize || (o = Math.max(e.config.autosize_min_width, 0)); var s = e.getState() , l = (t = a._getScales(), n = e.config.min_column_width, r = e.config.scale_height - 1, e.config.rtl); return a.$scaleHelper.prepareConfigs(t, n, o, r, s.min_date, s.max_date, l) } }, _serializeTable: function(t) { e.json._copyObject = t.visual ? e.ext.export_api._copyObjectColors : e.ext.export_api._copyObjectTable; var n = e.ext.export_api._exportSerialize(); if (e.json._copyObject = e.ext.export_api._originalCopyObject, delete n.links, t.cellColors) { var i = e.templates.timeline_cell_class || e.templates.task_cell_class; if (i) { for (var r = e.ext.export_api._getRaw(), a = r[0].trace_x, o = 1; o < r.length; o++) r[o].trace_x.length > a.length && (a = r[o].trace_x); for (o = 0; o < n.data.length; o++) { n.data[o].styles = []; for (var s = e.getTask(n.data[o].id), l = 0; l < a.length; l++) { var c = i(s, a[l]); c && n.data[o].styles.push({ index: l, styles: e.ext.export_api._getStyles(c) }) } } } } return n }, _serializeScales: function(t) { for (var n = [], i = e.ext.export_api._getRaw(), r = 1 / 0, a = 0, o = 0; o < i.length; o++) r = Math.min(r, i[o].col_width); for (o = 0; o < i.length; o++) { var s = 0 , l = 0 , c = []; n.push(c); var u = i[o]; a = Math.max(a, u.trace_x.length); for (var d = u.format || u.template || (u.date ? e.date.date_to_str(u.date) : e.config.date_scale), h = 0; h < u.trace_x.length; h++) { var f = u.trace_x[h]; l = s + Math.round(u.width[h] / r); var _ = { text: d(f), start: s, end: l, styles: "" }; if (t.cellColors) { var g = u.css || e.templates.scaleCell_class; if (g) { var p = g(f); p && (_.styles = e.ext.export_api._getStyles(p)) } } c.push(_), s = l } } return { width: a, height: n.length, data: n } }, _serializeColumns: function(t) { e.exportMode = !0; for (var n = [], i = e.config.columns, r = 0, a = 0; a < i.length; a++) "add" !== i[a].name && "buttons" !== i[a].name && (n[r] = { id: i[a].template ? "_" + a : i[a].name, header: i[a].label || e.locale.labels["column_" + i[a].name], width: i[a].width ? Math.floor(i[a].width / 4) : "" }, "duration" === i[a].name && (n[r].type = "number"), "start_date" !== i[a].name && "end_date" !== i[a].name || (n[r].type = "date", t && t.rawDates && (n[r].id = i[a].name)), r++); return e.exportMode = !1, n }, _exportSerialize: function() { e.exportMode = !0; var t = e.templates.xml_format , n = e.templates.format_date; e.templates.xml_format = e.templates.format_date = e.date.date_to_str(e.config.date_format || e.config.xml_date); var i = e.serialize(); return e.templates.xml_format = t, e.templates.format_date = n, e.exportMode = !1, i }, _setLevel: function(t) { for (var e = 0; e < t.length; e++) { 0 == t[e].parent && (t[e]._lvl = 1); for (var n = e + 1; n < t.length; n++) t[e].id == t[n].parent && (t[n]._lvl = t[e]._lvl + 1) } }, _clearLevel: function(t) { for (var e = 0; e < t.length; e++) delete t[e]._lvl }, _clearRecLinks: function(t) { e.ext.export_api._setLevel(t.data); for (var n = {}, i = 0; i < t.data.length; i++) n[t.data[i].id] = t.data[i]; var r = {}; for (i = 0; i < t.links.length; i++) { var a = t.links[i]; e.isTaskExists(a.source) && e.isTaskExists(a.target) && n[a.source] && n[a.target] && (r[a.id] = a) } for (var o in r) e.ext.export_api._makeLinksSameLevel(r[o], n); var s = {}; for (var o in n) e.ext.export_api._clearCircDependencies(n[o], r, n, {}, s, null); for (Object.keys(r) && e.ext.export_api._clearLinksSameLevel(r, n), i = 0; i < t.links.length; i++) r[t.links[i].id] || (t.links.splice(i, 1), i--); e.ext.export_api._clearLevel(t.data) }, _clearCircDependencies: function(t, n, i, r, a, o) { var s = t.$_source; if (s) { r[t.id] && e.ext.export_api._onCircDependencyFind(o, n, r, a), r[t.id] = !0; for (var l = {}, c = 0; c < s.length; c++) if (!a[s[c]]) { var u = n[s[c]] , d = i[u._target]; l[d.id] && e.ext.export_api._onCircDependencyFind(u, n, r, a), l[d.id] = !0, e.ext.export_api._clearCircDependencies(d, n, i, r, a, u) } r[t.id] = !1 } }, _onCircDependencyFind: function(t, n, i, r) { t && (e.callEvent("onExportCircularDependency", [t.id, t]) && delete n[t.id], delete i[t._source], delete i[t._target], r[t.id] = !0) }, _makeLinksSameLevel: function(t, e) { var n, i, r = { target: e[t.target], source: e[t.source] }; if (r.target._lvl != r.source._lvl) { r.target._lvl < r.source._lvl ? (n = "source", i = r.target._lvl) : (n = "target", i = r.source._lvl); do { var a = e[r[n].parent]; if (!a) break; r[n] = a } while (r[n]._lvl < i); for (var o = e[r.source.parent], s = e[r.target.parent]; o && s && o.id != s.id; ) r.source = o, r.target = s, o = e[r.source.parent], s = e[r.target.parent] } t._target = r.target.id, t._source = r.source.id, r.target.$_target || (r.target.$_target = []), r.target.$_target.push(t.id), r.source.$_source || (r.source.$_source = []), r.source.$_source.push(t.id) }, _clearLinksSameLevel: function(t, e) { for (var n in t) delete t[n]._target, delete t[n]._source; for (var i in e) delete e[i].$_source, delete e[i].$_target }, _customProjectProperties: function(t, n) { if (n && n.project) { for (var i in n.project) e.config.$custom_data || (e.config.$custom_data = {}), e.config.$custom_data[i] = "function" == typeof n.project[i] ? n.project[i](e.config) : n.project[i]; delete n.project } }, _customTaskProperties: function(t, n) { n && n.tasks && (t.data.forEach(function(t) { for (var i in n.tasks) t.$custom_data || (t.$custom_data = {}), t.$custom_data[i] = "function" == typeof n.tasks[i] ? n.tasks[i](t, e.config) : n.tasks[i] }), delete n.tasks) }, _exportConfig: function(t, n) { var i = n.name || "gantt.xml"; delete n.name, e.config.custom = n; var r = e.ext.export_api._getWorktimeSettings() , a = e.getSubtaskDates(); if (a.start_date && a.end_date) { var o = e.templates.format_date || e.templates.xml_format; e.config.start_end = { start_date: o(a.start_date), end_date: o(a.end_date) } } var s = void 0 !== n.auto_scheduling && !!n.auto_scheduling , l = { callback: n.callback || null, config: e.config, data: t, manual: s, name: i, worktime: r }; for (var c in n) l[c] = n[c]; return l }, _sendImportAjaxMSP: function(t) { var n = t.server || e.ext.export_api._apiUrl , i = t.store || 0 , r = t.data , a = t.callback , o = { durationUnit: t.durationUnit || void 0, projectProperties: t.projectProperties || void 0, taskProperties: t.taskProperties || void 0 }; r.append("type", t.type || "msproject-parse"), r.append("data", JSON.stringify(o)), i && r.append("store", i); var s = new XMLHttpRequest; s.onreadystatechange = function(t) { 4 === s.readyState && 0 === s.status && a && a(null) } , s.onload = function() { var t = null; if (!(s.status > 400)) try { t = JSON.parse(s.responseText) } catch (t) {} a && a(t) } , s.open("POST", n, !0), s.setRequestHeader("X-Requested-With", "XMLHttpRequest"), s.send(r) } }, e.exportToPDF = e.ext.export_api.exportToPDF, e.exportToPNG = e.ext.export_api.exportToPNG, e.exportToICal = e.ext.export_api.exportToICal, e.exportToExcel = e.ext.export_api.exportToExcel, e.exportToJSON = e.ext.export_api.exportToJSON, e.importFromExcel = e.ext.export_api.importFromExcel, e.importFromMSProject = e.ext.export_api.importFromMSProject, e.exportToMSProject = e.ext.export_api.exportToMSProject, e.importFromPrimaveraP6 = e.ext.export_api.importFromPrimaveraP6, e.exportToPrimaveraP6 = e.ext.export_api.exportToPrimaveraP6 } } ).call(this, n(13).Buffer) } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = function() { function t(t) { var e = this; this._mouseDown = !1, this._calculateDirectionVector = function() { if (e._trace.length >= 10) { for (var t = e._trace.slice(e._trace.length - 10), n = [], i = 1; i < t.length; i++) n.push({ x: t[i].x - t[i - 1].x, y: t[i].y - t[i - 1].y }); var r = { x: 0, y: 0 }; return n.forEach(function(t) { r.x += t.x, r.y += t.y }), { magnitude: Math.sqrt(r.x * r.x + r.y * r.y), angleDegrees: 180 * Math.atan2(Math.abs(r.y), Math.abs(r.x)) / Math.PI } } return null } , this._applyDndReadyStyles = function() { e._timeline.$task.classList.add("gantt_timeline_move_available") } , this._clearDndReadyStyles = function() { e._timeline.$task.classList.remove("gantt_timeline_move_available") } , this._getScrollPosition = function(t) { var n = e._gantt; return { x: n.$ui.getView(t.$config.scrollX).getScrollState().position, y: n.$ui.getView(t.$config.scrollY).getScrollState().position } } , this._countNewScrollPosition = function(t) { var n = e._calculateDirectionVector() , i = e._startPoint.x - t.x , r = e._startPoint.y - t.y; return n && (n.angleDegrees < 15 ? r = 0 : n.angleDegrees > 75 && (i = 0)), { x: e._scrollState.x + i, y: e._scrollState.y + r } } , this._setScrollPosition = function(t, n) { var i = e._gantt; requestAnimationFrame(function() { i.scrollLayoutCell(t.$id, n.x, n.y) }) } , this._stopDrag = function(t) { var n = e._gantt; if (e._trace = [], n.$root.classList.remove("gantt_noselect"), void 0 !== e._originalReadonly && (n.config.readonly = e._originalReadonly), void 0 !== e._originAutoscroll && (n.config.autoscroll = e._originAutoscroll), n.config.drag_timeline) { var i = n.config.drag_timeline.useKey; if (i && !0 !== t[i]) return } e._mouseDown = !1 } , this._startDrag = function(t) { var n = e._gantt; e._originAutoscroll = n.config.autoscroll, n.config.autoscroll = !1, n.$root.classList.add("gantt_noselect"), e._originalReadonly = n.config.readonly, n.config.readonly = !0, e._trace = [], e._mouseDown = !0; var i = e._getScrollPosition(e._timeline) , r = i.x , a = i.y; e._scrollState = { x: r, y: a }, e._startPoint = { x: t.clientX, y: t.clientY }, e._trace.push(e._startPoint) } , this._gantt = t, this._domEvents = t._createDomEventScope(), this._trace = [] } return t.create = function(e) { return new t(e) } , t.prototype.destructor = function() { this._domEvents.detachAll() } , t.prototype.attach = function(t) { var e = this; this._timeline = t; var n = this._gantt; this._domEvents.attach(t.$task, "mousedown", function(t) { if (n.config.drag_timeline) { var i = n.config.drag_timeline , r = i.useKey , a = i.ignore; if (!1 !== i.enabled) { var o = ".gantt_task_line, .gantt_task_link"; void 0 !== a && (o = a instanceof Array ? a.join(", ") : a), o && n.utils.dom.closest(t.target, o) || r && !0 !== t[r] || e._startDrag(t) } } }), this._domEvents.attach(document, "keydown", function(t) { if (n.config.drag_timeline) { var i = n.config.drag_timeline.useKey; i && !0 === t[i] && e._applyDndReadyStyles() } }), this._domEvents.attach(document, "keyup", function(t) { if (n.config.drag_timeline) { var i = n.config.drag_timeline.useKey; i && !1 === t[i] && (e._clearDndReadyStyles(), e._stopDrag(t)) } }), this._domEvents.attach(document, "mouseup", function(t) { e._stopDrag(t) }), this._domEvents.attach(n.$root, "mouseup", function(t) { e._stopDrag(t) }), this._domEvents.attach(document, "mouseleave", function(t) { e._stopDrag(t) }), this._domEvents.attach(n.$root, "mouseleave", function(t) { e._stopDrag(t) }), this._domEvents.attach(n.$root, "mousemove", function(i) { if (n.config.drag_timeline) { var r = n.config.drag_timeline.useKey; if (!r || !0 === i[r]) { var a = e._gantt.ext.clickDrag , o = (e._gantt.config.click_drag || {}).useKey; if ((!a || !o || r || !i[o]) && !0 === e._mouseDown) { e._trace.push({ x: i.clientX, y: i.clientY }); var s = e._countNewScrollPosition({ x: i.clientX, y: i.clientY }); e._setScrollPosition(t, s), e._scrollState = s, e._startPoint = { x: i.clientX, y: i.clientY } } } } }) } , t }(); e.EventsManager = i } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(293); e.default = function(t) { t.ext || (t.ext = {}), t.ext.dragTimeline = { create: function() { return i.EventsManager.create(t) } }, t.config.drag_timeline = { enabled: !0 } } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(5) , r = n(2) , a = function() { function t(t, e, n) { var a = this; this._el = document.createElement("div"), this.defaultRender = function(t, e) { a._el || (a._el = document.createElement("div")); var n = a._el , i = Math.min(t.relative.top, e.relative.top) , r = Math.max(t.relative.top, e.relative.top) , o = Math.min(t.relative.left, e.relative.left) , s = Math.max(t.relative.left, e.relative.left); if (a._singleRow) { var l = a._getTaskPositionByTop(a._startPoint.relative.top); n.style.height = l.height + "px", n.style.top = l.top + "px" } else n.style.height = Math.abs(r - i) + "px", n.style.top = i + "px"; return n.style.width = Math.abs(s - o) + "px", n.style.left = o + "px", n } , this._gantt = e, this._view = n, this._viewPort = t.viewPort, this._el.classList.add(t.className), "function" == typeof t.callback && (this._callback = t.callback), this.render = function() { var e; (e = t.render ? t.render(a._startPoint, a._endPoint) : a.defaultRender(a._startPoint, a._endPoint)) !== a._el && (a._el && a._el.parentNode && a._el.parentNode.removeChild(a._el), a._el = e), "" !== t.className && a._el.classList.add(t.className), a.draw() } , r.isEventable(this._viewPort) || i(this._viewPort), this._singleRow = t.singleRow, this._useRequestAnimationFrame = t.useRequestAnimationFrame } return t.prototype.draw = function() { var t = this; if (this._useRequestAnimationFrame) return requestAnimationFrame(function() { t._viewPort.appendChild(t.getElement()) }); this._viewPort.appendChild(this.getElement()) } , t.prototype.clear = function() { var t = this; if (this._useRequestAnimationFrame) return requestAnimationFrame(function() { t._el.parentNode && t._viewPort.removeChild(t._el) }); this._el.parentNode && this._viewPort.removeChild(this._el) } , t.prototype.getElement = function() { return this._el } , t.prototype.getViewPort = function() { return this._viewPort } , t.prototype.setStart = function(t) { var e = this._gantt; this._startPoint = t, this._startDate = e.dateFromPos(this._startPoint.relative.left), this._viewPort.callEvent("onBeforeDrag", [this._startPoint]) } , t.prototype.setEnd = function(t) { var e = this._gantt; if (this._endPoint = t, this._singleRow) { var n = this._getTaskPositionByTop(this._startPoint.relative.top); this._endPoint.relative.top = n.top } this._endDate = e.dateFromPos(this._endPoint.relative.left), this._startPoint.relative.left > this._endPoint.relative.left && (this._positionPoint = { relative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top }, absolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top } }), this._startPoint.relative.top > this._endPoint.relative.top && (this._positionPoint = { relative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top }, absolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top } }), this._viewPort.callEvent("onDrag", [this._startPoint, this._endPoint]) } , t.prototype.setPosition = function(t) { this._positionPoint = t } , t.prototype.dragEnd = function(t) { var e, n = this._gantt; t.relative.left < 0 && (t.relative.left = 0), this._viewPort.callEvent("onBeforeDragEnd", [this._startPoint, t]), this.setEnd(t), this._endDate = this._endDate || n.getState().max_date, this._startDate.valueOf() > this._endDate.valueOf() && (e = [this._endDate, this._startDate], this._startDate = e[0], this._endDate = e[1]), this.clear(); var i = n.getTaskByTime(this._startDate, this._endDate) , r = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top); this._viewPort.callEvent("onDragEnd", [this._startPoint, this._endPoint]), this._callback && this._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, i, r) } , t.prototype.getInBounds = function() { return this._singleRow } , t.prototype._getTasksByTop = function(t, e) { var n = this._gantt , i = t , r = e; t > e && (i = e, r = t); for (var a = this._getTaskPositionByTop(i).index, o = this._getTaskPositionByTop(r).index, s = [], l = a; l <= o; l++) { n.getTaskByIndex(l) && s.push(n.getTaskByIndex(l)) } return s } , t.prototype._getTaskPositionByTop = function(t) { var e = this._gantt , n = this._view , i = n.getItemIndexByTopPosition(t) , r = e.getTaskByIndex(i); if (r) { var a = n.getItemHeight(r.id); return { top: n.getItemTop(r.id) || 0, height: a || 0, index: i } } var o = n.getTotalHeight(); return { top: t > o ? o : 0, height: e.config.row_height, index: t > o ? e.getTaskCount() : 0 } } , t }(); e.SelectedRegion = a } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(1) , r = function() { function t(t) { this._mouseDown = !1, this._gantt = t, this._domEvents = t._createDomEventScope() } return t.prototype.attach = function(t, e, n) { var r = this , a = this._gantt , o = t.getViewPort(); this._originPosition = window.getComputedStyle(o).display, this._restoreOriginPosition = function() { o.style.position = r._originPosition } , "static" === this._originPosition && (o.style.position = "relative"); var s = a.$services.getService("state"); s.registerProvider("clickDrag", function() { return { autoscroll: !1 } }); var l = null; this._domEvents.attach(o, "mousedown", function(i) { l = null; var o = ".gantt_task_line, .gantt_task_link"; void 0 !== n && (o = n instanceof Array ? n.join(", ") : n), o && a.utils.dom.closest(i.target, o) || (s.registerProvider("clickDrag", function() { return { autoscroll: r._mouseDown } }), e && !0 !== i[e] || (l = r._getCoordinates(i, t))) }); var c = i.getRootNode(a.$root) || document.body; this._domEvents.attach(c, "mouseup", function(n) { if (l = null, (!e || !0 === n[e]) && !0 === r._mouseDown) { r._mouseDown = !1; var i = r._getCoordinates(n, t); t.dragEnd(i) } }), this._domEvents.attach(o, "mousemove", function(n) { if (!e || !0 === n[e]) { var i = r._gantt.ext.clickDrag , o = (r._gantt.config.drag_timeline || {}).useKey; if (!i || !o || e || !n[o]) { var s = null; if (!r._mouseDown && l) return s = r._getCoordinates(n, t), void (Math.abs(l.relative.left - s.relative.left) > 5 && l && (r._mouseDown = !0, t.setStart(a.copy(l)), t.setPosition(a.copy(l)), t.setEnd(a.copy(l)), l = null)); !0 === r._mouseDown && (s = r._getCoordinates(n, t), t.setEnd(s), t.render()) } } }) } , t.prototype.detach = function() { var t = this._gantt; this._domEvents.detachAll(), this._restoreOriginPosition && this._restoreOriginPosition(), t.$services.getService("state").unregisterProvider("clickDrag") } , t.prototype.destructor = function() { this.detach() } , t.prototype._getCoordinates = function(t, e) { var n = e.getViewPort() , i = n.getBoundingClientRect() , r = t.clientX , a = t.clientY; return { absolute: { left: r, top: a }, relative: { left: r - i.left + n.scrollLeft, top: a - i.top + n.scrollTop } } } , t }(); e.EventsManager = r } , function(t, e, n) { "use strict"; var i = this && this.__assign || function() { return (i = Object.assign || function(t) { for (var e, n = 1, i = arguments.length; n < i; n++) for (var r in e = arguments[n]) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]); return t } ).apply(this, arguments) } ; Object.defineProperty(e, "__esModule", { value: !0 }); var r = n(296) , a = n(295); e.default = function(t) { t.ext || (t.ext = {}); var e = { className: "gantt_click_drag_rect", useRequestAnimationFrame: !0, callback: void 0, singleRow: !1 } , n = new r.EventsManager(t); t.ext.clickDrag = n, t.attachEvent("onGanttReady", function() { var n = i({ viewPort: t.$task_data }, e); if (t.config.click_drag) { var r = t.config.click_drag; n.render = r.render || e.render, n.className = r.className || e.className, n.callback = r.callback || e.callback, n.viewPort = r.viewPort || t.$task_data, n.useRequestAnimationFrame = void 0 === r.useRequestAnimationFrame ? e.useRequestAnimationFrame : r.useRequestAnimationFrame, n.singleRow = void 0 === r.singleRow ? e.singleRow : r.singleRow; var o = t.$ui.getView("timeline") , s = new a.SelectedRegion(n,t,o); t.ext.clickDrag.attach(s, r.useKey, r.ignore) } }), t.attachEvent("onDestroy", function() { n.destructor() }) } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(297) , r = n(294) , a = n(292) , o = n(272) , s = n(271) , l = n(260) , c = n(259) , u = n(258) , d = n(256) , h = n(253); e.default = { click_drag: i.default, drag_timeline: r.default, fullscreen: o.default, keyboard_navigation: s, quick_info: u.default, tooltip: d.default, undo: h.default, marker: l, multiselect: c, export_api: a.default } } , function(t, e, n) { "use strict"; Object.defineProperty(e, "__esModule", { value: !0 }); var i = n(298) , r = n(250) , a = n(21).gantt = r(i.default); e.gantt = a, e.default = a } ]) }); //# sourceMappingURL=dhtmlxgantt.js.map