"]
+ },
+ Ge = v(fe),
+ Ke = Ge.appendChild(fe.createElement("div"));
+ Ze.optgroup = Ze.option, Ze.tbody = Ze.tfoot = Ze.colgroup = Ze.caption = Ze.thead, Ze.th = Ze.td, ie.extend({
+ clone: function(e, t, n) {
+ var r, i, a, o, s, l = ie.contains(e.ownerDocument, e);
+ if (ne.html5Clone || ie.isXMLDoc(e) || !Re.test("<" + e.nodeName + ">") ? a = e.cloneNode(!0) : (Ke.innerHTML = e.outerHTML, Ke.removeChild(a = Ke.firstChild)), !(ne.noCloneEvent && ne.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ie.isXMLDoc(e)))
+ for (r = g(a), s = g(e), o = 0; null != (i = s[o]); ++o) r[o] && E(i, r[o]);
+ if (t)
+ if (n)
+ for (s = s || g(e), r = r || g(a), o = 0; null != (i = s[o]); o++) _(i, r[o]);
+ else _(e, a);
+ return r = g(a, "script"), r.length > 0 && w(r, !l && g(e, "script")), r = s = i = null, a
+ },
+ buildFragment: function(e, t, n, r) {
+ for (var i, a, o, s, l, u, c, d = e.length, h = v(t), p = [], f = 0; d > f; f++)
+ if (a = e[f], a || 0 === a)
+ if ("object" === ie.type(a)) ie.merge(p, a.nodeType ? [a] : a);
+ else if (Xe.test(a)) {
+ for (s = s || h.appendChild(t.createElement("div")), l = (qe.exec(a) || ["", ""])[1].toLowerCase(), c = Ze[l] || Ze._default, s.innerHTML = c[1] + a.replace(Fe, "<$1>$2>") + c[2], i = c[0]; i--;) s = s.lastChild;
+ if (!ne.leadingWhitespace && je.test(a) && p.push(t.createTextNode(je.exec(a)[0])), !ne.tbody)
+ for (a = "table" !== l || Ve.test(a) ? "
" !== c[1] || Ve.test(a) ? 0 : s : s.firstChild, i = a && a.childNodes.length; i--;) ie.nodeName(u = a.childNodes[i], "tbody") && !u.childNodes.length && a.removeChild(u);
+ for (ie.merge(p, s.childNodes), s.textContent = ""; s.firstChild;) s.removeChild(s.firstChild);
+ s = h.lastChild
+ } else p.push(t.createTextNode(a));
+ for (s && h.removeChild(s), ne.appendChecked || ie.grep(g(p, "input"), y), f = 0; a = p[f++];)
+ if ((!r || -1 === ie.inArray(a, r)) && (o = ie.contains(a.ownerDocument, a), s = g(h.appendChild(a), "script"), o && w(s), n))
+ for (i = 0; a = s[i++];) $e.test(a.type || "") && n.push(a);
+ return s = null, h
+ },
+ cleanData: function(e, t) {
+ for (var n, r, i, a, o = 0, s = ie.expando, l = ie.cache, u = ne.deleteExpando, c = ie.event.special; null != (n = e[o]); o++)
+ if ((t || ie.acceptData(n)) && (i = n[s], a = i && l[i])) {
+ if (a.events)
+ for (r in a.events) c[r] ? ie.event.remove(n, r) : ie.removeEvent(n, r, a.handle);
+ l[i] && (delete l[i], u ? delete n[s] : typeof n.removeAttribute !== Ee ? n.removeAttribute(s) : n[s] = null, U.push(i))
+ }
+ }
+ }), ie.fn.extend({
+ text: function(e) {
+ return Ne(this, function(e) {
+ return void 0 === e ? ie.text(this) : this.empty().append((this[0] && this[0].ownerDocument || fe).createTextNode(e))
+ }, null, e, arguments.length)
+ },
+ append: function() {
+ return this.domManip(arguments, function(e) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var t = m(this, e);
+ t.appendChild(e)
+ }
+ })
+ },
+ prepend: function() {
+ return this.domManip(arguments, function(e) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var t = m(this, e);
+ t.insertBefore(e, t.firstChild)
+ }
+ })
+ },
+ before: function() {
+ return this.domManip(arguments, function(e) {
+ this.parentNode && this.parentNode.insertBefore(e, this)
+ })
+ },
+ after: function() {
+ return this.domManip(arguments, function(e) {
+ this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
+ })
+ },
+ remove: function(e, t) {
+ for (var n, r = e ? ie.filter(e, this) : this, i = 0; null != (n = r[i]); i++) t || 1 !== n.nodeType || ie.cleanData(g(n)), n.parentNode && (t && ie.contains(n.ownerDocument, n) && w(g(n, "script")), n.parentNode.removeChild(n));
+ return this
+ },
+ empty: function() {
+ for (var e, t = 0; null != (e = this[t]); t++) {
+ for (1 === e.nodeType && ie.cleanData(g(e, !1)); e.firstChild;) e.removeChild(e.firstChild);
+ e.options && ie.nodeName(e, "select") && (e.options.length = 0)
+ }
+ return this
+ },
+ clone: function(e, t) {
+ return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function() {
+ return ie.clone(this, e, t)
+ })
+ },
+ html: function(e) {
+ return Ne(this, function(e) {
+ var t = this[0] || {},
+ n = 0,
+ r = this.length;
+ if (void 0 === e) return 1 === t.nodeType ? t.innerHTML.replace(ze, "") : void 0;
+ if ("string" == typeof e && !He.test(e) && (ne.htmlSerialize || !Re.test(e)) && (ne.leadingWhitespace || !je.test(e)) && !Ze[(qe.exec(e) || ["", ""])[1].toLowerCase()]) {
+ e = e.replace(Fe, "<$1>$2>");
+ try {
+ for (; r > n; n++) t = this[n] || {}, 1 === t.nodeType && (ie.cleanData(g(t, !1)), t.innerHTML = e);
+ t = 0
+ } catch (i) {}
+ }
+ t && this.empty().append(e)
+ }, null, e, arguments.length)
+ },
+ replaceWith: function() {
+ var e = arguments[0];
+ return this.domManip(arguments, function(t) {
+ e = this.parentNode, ie.cleanData(g(this)), e && e.replaceChild(t, this)
+ }), e && (e.length || e.nodeType) ? this : this.remove()
+ },
+ detach: function(e) {
+ return this.remove(e, !0)
+ },
+ domManip: function(e, t) {
+ e = G.apply([], e);
+ var n, r, i, a, o, s, l = 0,
+ u = this.length,
+ c = this,
+ d = u - 1,
+ h = e[0],
+ p = ie.isFunction(h);
+ if (p || u > 1 && "string" == typeof h && !ne.checkClone && Ye.test(h)) return this.each(function(n) {
+ var r = c.eq(n);
+ p && (e[0] = h.call(this, n, r.html())), r.domManip(e, t)
+ });
+ if (u && (s = ie.buildFragment(e, this[0].ownerDocument, !1, this), n = s.firstChild, 1 === s.childNodes.length && (s = n), n)) {
+ for (a = ie.map(g(s, "script"), x), i = a.length; u > l; l++) r = s, l !== d && (r = ie.clone(r, !0, !0), i && ie.merge(a, g(r, "script"))), t.call(this[l], r, l);
+ if (i)
+ for (o = a[a.length - 1].ownerDocument, ie.map(a, b), l = 0; i > l; l++) r = a[l], $e.test(r.type || "") && !ie._data(r, "globalEval") && ie.contains(o, r) && (r.src ? ie._evalUrl && ie._evalUrl(r.src) : ie.globalEval((r.text || r.textContent || r.innerHTML || "").replace(Ue, "")));
+ s = n = null
+ }
+ return this
+ }
+ }), ie.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function(e, t) {
+ ie.fn[e] = function(e) {
+ for (var n, r = 0, i = [], a = ie(e), o = a.length - 1; o >= r; r++) n = r === o ? this : this.clone(!0), ie(a[r])[t](n), K.apply(i, n.get());
+ return this.pushStack(i)
+ }
+ });
+ var Je, Qe = {};
+ ! function() {
+ var e;
+ ne.shrinkWrapBlocks = function() {
+ if (null != e) return e;
+ e = !1;
+ var t, n, r;
+ return n = fe.getElementsByTagName("body")[0], n && n.style ? (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== Ee && (t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", t.appendChild(fe.createElement("div")).style.width = "5px", e = 3 !== t.offsetWidth), n.removeChild(r), e) : void 0
+ }
+ }();
+ var et, tt, nt = /^margin/,
+ rt = new RegExp("^(" + Ce + ")(?!px)[a-z%]+$", "i"),
+ it = /^(top|right|bottom|left)$/;
+ e.getComputedStyle ? (et = function(t) {
+ return t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null) : e.getComputedStyle(t, null)
+ }, tt = function(e, t, n) {
+ var r, i, a, o, s = e.style;
+ return n = n || et(e), o = n ? n.getPropertyValue(t) || n[t] : void 0, n && ("" !== o || ie.contains(e.ownerDocument, e) || (o = ie.style(e, t)), rt.test(o) && nt.test(t) && (r = s.width, i = s.minWidth,
+ a = s.maxWidth, s.minWidth = s.maxWidth = s.width = o, o = n.width, s.width = r, s.minWidth = i, s.maxWidth = a)), void 0 === o ? o : o + ""
+ }) : fe.documentElement.currentStyle && (et = function(e) {
+ return e.currentStyle
+ }, tt = function(e, t, n) {
+ var r, i, a, o, s = e.style;
+ return n = n || et(e), o = n ? n[t] : void 0, null == o && s && s[t] && (o = s[t]), rt.test(o) && !it.test(t) && (r = s.left, i = e.runtimeStyle, a = i && i.left, a && (i.left = e.currentStyle.left), s.left = "fontSize" === t ? "1em" : o, o = s.pixelLeft + "px", s.left = r, a && (i.left = a)), void 0 === o ? o : o + "" || "auto"
+ }),
+ function() {
+ function t() {
+ var t, n, r, i;
+ n = fe.getElementsByTagName("body")[0], n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), t.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", a = o = !1, l = !0, e.getComputedStyle && (a = "1%" !== (e.getComputedStyle(t, null) || {}).top, o = "4px" === (e.getComputedStyle(t, null) || {
+ width: "4px"
+ }).width, i = t.appendChild(fe.createElement("div")), i.style.cssText = t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", i.style.marginRight = i.style.width = "0", t.style.width = "1px", l = !parseFloat((e.getComputedStyle(i, null) || {}).marginRight), t.removeChild(i)), t.innerHTML = "
t
", i = t.getElementsByTagName("td"), i[0].style.cssText = "margin:0;border:0;padding:0;display:none", s = 0 === i[0].offsetHeight, s && (i[0].style.display = "", i[1].style.display = "none", s = 0 === i[0].offsetHeight), n.removeChild(r))
+ }
+ var n, r, i, a, o, s, l;
+ n = fe.createElement("div"), n.innerHTML = "
a", i = n.getElementsByTagName("a")[0], r = i && i.style, r && (r.cssText = "float:left;opacity:.5", ne.opacity = "0.5" === r.opacity, ne.cssFloat = !!r.cssFloat, n.style.backgroundClip = "content-box", n.cloneNode(!0).style.backgroundClip = "", ne.clearCloneStyle = "content-box" === n.style.backgroundClip, ne.boxSizing = "" === r.boxSizing || "" === r.MozBoxSizing || "" === r.WebkitBoxSizing, ie.extend(ne, {
+ reliableHiddenOffsets: function() {
+ return null == s && t(), s
+ },
+ boxSizingReliable: function() {
+ return null == o && t(), o
+ },
+ pixelPosition: function() {
+ return null == a && t(), a
+ },
+ reliableMarginRight: function() {
+ return null == l && t(), l
+ }
+ }))
+ }(), ie.swap = function(e, t, n, r) {
+ var i, a, o = {};
+ for (a in t) o[a] = e.style[a], e.style[a] = t[a];
+ i = n.apply(e, r || []);
+ for (a in t) e.style[a] = o[a];
+ return i
+ };
+ var at = /alpha\([^)]*\)/i,
+ ot = /opacity\s*=\s*([^)]*)/,
+ st = /^(none|table(?!-c[ea]).+)/,
+ lt = new RegExp("^(" + Ce + ")(.*)$", "i"),
+ ut = new RegExp("^([+-])=(" + Ce + ")", "i"),
+ ct = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ },
+ dt = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+ ht = ["Webkit", "O", "Moz", "ms"];
+ ie.extend({
+ cssHooks: {
+ opacity: {
+ get: function(e, t) {
+ if (t) {
+ var n = tt(e, "opacity");
+ return "" === n ? "1" : n
+ }
+ }
+ }
+ },
+ cssNumber: {
+ columnCount: !0,
+ fillOpacity: !0,
+ flexGrow: !0,
+ flexShrink: !0,
+ fontWeight: !0,
+ lineHeight: !0,
+ opacity: !0,
+ order: !0,
+ orphans: !0,
+ widows: !0,
+ zIndex: !0,
+ zoom: !0
+ },
+ cssProps: {
+ "float": ne.cssFloat ? "cssFloat" : "styleFloat"
+ },
+ style: function(e, t, n, r) {
+ if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
+ var i, a, o, s = ie.camelCase(t),
+ l = e.style;
+ if (t = ie.cssProps[s] || (ie.cssProps[s] = k(l, s)), o = ie.cssHooks[t] || ie.cssHooks[s], void 0 === n) return o && "get" in o && void 0 !== (i = o.get(e, !1, r)) ? i : l[t];
+ if (a = typeof n, "string" === a && (i = ut.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(ie.css(e, t)), a = "number"), null != n && n === n && ("number" !== a || ie.cssNumber[s] || (n += "px"), ne.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), !(o && "set" in o && void 0 === (n = o.set(e, n, r))))) try {
+ l[t] = n
+ } catch (u) {}
+ }
+ },
+ css: function(e, t, n, r) {
+ var i, a, o, s = ie.camelCase(t);
+ return t = ie.cssProps[s] || (ie.cssProps[s] = k(e.style, s)), o = ie.cssHooks[t] || ie.cssHooks[s], o && "get" in o && (a = o.get(e, !0, n)), void 0 === a && (a = tt(e, t, r)), "normal" === a && t in dt && (a = dt[t]), "" === n || n ? (i = parseFloat(a), n === !0 || ie.isNumeric(i) ? i || 0 : a) : a
+ }
+ }), ie.each(["height", "width"], function(e, t) {
+ ie.cssHooks[t] = {
+ get: function(e, n, r) {
+ return n ? st.test(ie.css(e, "display")) && 0 === e.offsetWidth ? ie.swap(e, ct, function() {
+ return M(e, t, r)
+ }) : M(e, t, r) : void 0
+ },
+ set: function(e, n, r) {
+ var i = r && et(e);
+ return N(e, n, r ? P(e, t, r, ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, i), i) : 0)
+ }
+ }
+ }), ne.opacity || (ie.cssHooks.opacity = {
+ get: function(e, t) {
+ return ot.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
+ },
+ set: function(e, t) {
+ var n = e.style,
+ r = e.currentStyle,
+ i = ie.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
+ a = r && r.filter || n.filter || "";
+ n.zoom = 1, (t >= 1 || "" === t) && "" === ie.trim(a.replace(at, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = at.test(a) ? a.replace(at, i) : a + " " + i)
+ }
+ }), ie.cssHooks.marginRight = C(ne.reliableMarginRight, function(e, t) {
+ return t ? ie.swap(e, {
+ display: "inline-block"
+ }, tt, [e, "marginRight"]) : void 0
+ }), ie.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function(e, t) {
+ ie.cssHooks[e + t] = {
+ expand: function(n) {
+ for (var r = 0, i = {}, a = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++) i[e + ke[r] + t] = a[r] || a[r - 2] || a[0];
+ return i
+ }
+ }, nt.test(e) || (ie.cssHooks[e + t].set = N)
+ }), ie.fn.extend({
+ css: function(e, t) {
+ return Ne(this, function(e, t, n) {
+ var r, i, a = {},
+ o = 0;
+ if (ie.isArray(t)) {
+ for (r = et(e), i = t.length; i > o; o++) a[t[o]] = ie.css(e, t[o], !1, r);
+ return a
+ }
+ return void 0 !== n ? ie.style(e, t, n) : ie.css(e, t)
+ }, e, t, arguments.length > 1)
+ },
+ show: function() {
+ return D(this, !0)
+ },
+ hide: function() {
+ return D(this)
+ },
+ toggle: function(e) {
+ return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
+ De(this) ? ie(this).show() : ie(this).hide()
+ })
+ }
+ }), ie.Tween = B, B.prototype = {
+ constructor: B,
+ init: function(e, t, n, r, i, a) {
+ this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = a || (ie.cssNumber[n] ? "" : "px")
+ },
+ cur: function() {
+ var e = B.propHooks[this.prop];
+ return e && e.get ? e.get(this) : B.propHooks._default.get(this)
+ },
+ run: function(e) {
+ var t, n = B.propHooks[this.prop];
+ return this.options.duration ? this.pos = t = ie.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : B.propHooks._default.set(this), this
+ }
+ }, B.prototype.init.prototype = B.prototype, B.propHooks = {
+ _default: {
+ get: function(e) {
+ var t;
+ return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = ie.css(e.elem, e.prop, ""), t && "auto" !== t ? t : 0) : e.elem[e.prop]
+ },
+ set: function(e) {
+ ie.fx.step[e.prop] ? ie.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[ie.cssProps[e.prop]] || ie.cssHooks[e.prop]) ? ie.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
+ }
+ }
+ }, B.propHooks.scrollTop = B.propHooks.scrollLeft = {
+ set: function(e) {
+ e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
+ }
+ }, ie.easing = {
+ linear: function(e) {
+ return e
+ },
+ swing: function(e) {
+ return .5 - Math.cos(e * Math.PI) / 2
+ }
+ }, ie.fx = B.prototype.init, ie.fx.step = {};
+ var pt, ft, vt = /^(?:toggle|show|hide)$/,
+ gt = new RegExp("^(?:([+-])=|)(" + Ce + ")([a-z%]*)$", "i"),
+ yt = /queueHooks$/,
+ mt = [I],
+ xt = {
+ "*": [function(e, t) {
+ var n = this.createTween(e, t),
+ r = n.cur(),
+ i = gt.exec(t),
+ a = i && i[3] || (ie.cssNumber[e] ? "" : "px"),
+ o = (ie.cssNumber[e] || "px" !== a && +r) && gt.exec(ie.css(n.elem, e)),
+ s = 1,
+ l = 20;
+ if (o && o[3] !== a) {
+ a = a || o[3], i = i || [], o = +r || 1;
+ do s = s || ".5", o /= s, ie.style(n.elem, e, o + a); while (s !== (s = n.cur() / r) && 1 !== s && --l)
+ }
+ return i && (o = n.start = +o || +r || 0, n.unit = a, n.end = i[1] ? o + (i[1] + 1) * i[2] : +i[2]), n
+ }]
+ };
+ ie.Animation = ie.extend(R, {
+ tweener: function(e, t) {
+ ie.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
+ for (var n, r = 0, i = e.length; i > r; r++) n = e[r], xt[n] = xt[n] || [], xt[n].unshift(t)
+ },
+ prefilter: function(e, t) {
+ t ? mt.unshift(e) : mt.push(e)
+ }
+ }), ie.speed = function(e, t, n) {
+ var r = e && "object" == typeof e ? ie.extend({}, e) : {
+ complete: n || !n && t || ie.isFunction(e) && e,
+ duration: e,
+ easing: n && t || t && !ie.isFunction(t) && t
+ };
+ return r.duration = ie.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in ie.fx.speeds ? ie.fx.speeds[r.duration] : ie.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() {
+ ie.isFunction(r.old) && r.old.call(this), r.queue && ie.dequeue(this, r.queue)
+ }, r
+ }, ie.fn.extend({
+ fadeTo: function(e, t, n, r) {
+ return this.filter(De).css("opacity", 0).show().end().animate({
+ opacity: t
+ }, e, n, r)
+ },
+ animate: function(e, t, n, r) {
+ var i = ie.isEmptyObject(e),
+ a = ie.speed(t, n, r),
+ o = function() {
+ var t = R(this, ie.extend({}, e), a);
+ (i || ie._data(this, "finish")) && t.stop(!0)
+ };
+ return o.finish = o, i || a.queue === !1 ? this.each(o) : this.queue(a.queue, o)
+ },
+ stop: function(e, t, n) {
+ var r = function(e) {
+ var t = e.stop;
+ delete e.stop, t(n)
+ };
+ return "string" != typeof e && (n = t, t = e, e = void 0), t && e !== !1 && this.queue(e || "fx", []), this.each(function() {
+ var t = !0,
+ i = null != e && e + "queueHooks",
+ a = ie.timers,
+ o = ie._data(this);
+ if (i) o[i] && o[i].stop && r(o[i]);
+ else
+ for (i in o) o[i] && o[i].stop && yt.test(i) && r(o[i]);
+ for (i = a.length; i--;) a[i].elem !== this || null != e && a[i].queue !== e || (a[i].anim.stop(n), t = !1, a.splice(i, 1));
+ (t || !n) && ie.dequeue(this, e)
+ })
+ },
+ finish: function(e) {
+ return e !== !1 && (e = e || "fx"), this.each(function() {
+ var t, n = ie._data(this),
+ r = n[e + "queue"],
+ i = n[e + "queueHooks"],
+ a = ie.timers,
+ o = r ? r.length : 0;
+ for (n.finish = !0, ie.queue(this, e, []), i && i.stop && i.stop.call(this, !0), t = a.length; t--;) a[t].elem === this && a[t].queue === e && (a[t].anim.stop(!0), a.splice(t, 1));
+ for (t = 0; o > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
+ delete n.finish
+ })
+ }
+ }), ie.each(["toggle", "show", "hide"], function(e, t) {
+ var n = ie.fn[t];
+ ie.fn[t] = function(e, r, i) {
+ return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(O(t, !0), e, r, i)
+ }
+ }), ie.each({
+ slideDown: O("show"),
+ slideUp: O("hide"),
+ slideToggle: O("toggle"),
+ fadeIn: {
+ opacity: "show"
+ },
+ fadeOut: {
+ opacity: "hide"
+ },
+ fadeToggle: {
+ opacity: "toggle"
+ }
+ }, function(e, t) {
+ ie.fn[e] = function(e, n, r) {
+ return this.animate(t, e, n, r)
+ }
+ }), ie.timers = [], ie.fx.tick = function() {
+ var e, t = ie.timers,
+ n = 0;
+ for (pt = ie.now(); n < t.length; n++) e = t[n], e() || t[n] !== e || t.splice(n--, 1);
+ t.length || ie.fx.stop(), pt = void 0
+ }, ie.fx.timer = function(e) {
+ ie.timers.push(e), e() ? ie.fx.start() : ie.timers.pop()
+ }, ie.fx.interval = 13, ie.fx.start = function() {
+ ft || (ft = setInterval(ie.fx.tick, ie.fx.interval))
+ }, ie.fx.stop = function() {
+ clearInterval(ft), ft = null
+ }, ie.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ _default: 400
+ }, ie.fn.delay = function(e, t) {
+ return e = ie.fx ? ie.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) {
+ var r = setTimeout(t, e);
+ n.stop = function() {
+ clearTimeout(r)
+ }
+ })
+ },
+ function() {
+ var e, t, n, r, i;
+ t = fe.createElement("div"), t.setAttribute("className", "t"), t.innerHTML = "
a", r = t.getElementsByTagName("a")[0], n = fe.createElement("select"), i = n.appendChild(fe.createElement("option")), e = t.getElementsByTagName("input")[0], r.style.cssText = "top:1px", ne.getSetAttribute = "t" !== t.className, ne.style = /top/.test(r.getAttribute("style")), ne.hrefNormalized = "/a" === r.getAttribute("href"), ne.checkOn = !!e.value, ne.optSelected = i.selected, ne.enctype = !!fe.createElement("form").enctype, n.disabled = !0, ne.optDisabled = !i.disabled, e = fe.createElement("input"), e.setAttribute("value", ""), ne.input = "" === e.getAttribute("value"), e.value = "t", e.setAttribute("type", "radio"), ne.radioValue = "t" === e.value
+ }();
+ var bt = /\r/g;
+ ie.fn.extend({
+ val: function(e) {
+ var t, n, r, i = this[0]; {
+ if (arguments.length) return r = ie.isFunction(e), this.each(function(n) {
+ var i;
+ 1 === this.nodeType && (i = r ? e.call(this, n, ie(this).val()) : e, null == i ? i = "" : "number" == typeof i ? i += "" : ie.isArray(i) && (i = ie.map(i, function(e) {
+ return null == e ? "" : e + ""
+ })), t = ie.valHooks[this.type] || ie.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i))
+ });
+ if (i) return t = ie.valHooks[i.type] || ie.valHooks[i.nodeName.toLowerCase()], t && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : (n = i.value, "string" == typeof n ? n.replace(bt, "") : null == n ? "" : n)
+ }
+ }
+ }), ie.extend({
+ valHooks: {
+ option: {
+ get: function(e) {
+ var t = ie.find.attr(e, "value");
+ return null != t ? t : ie.trim(ie.text(e))
+ }
+ },
+ select: {
+ get: function(e) {
+ for (var t, n, r = e.options, i = e.selectedIndex, a = "select-one" === e.type || 0 > i, o = a ? null : [], s = a ? i + 1 : r.length, l = 0 > i ? s : a ? i : 0; s > l; l++)
+ if (n = r[l], (n.selected || l === i) && (ne.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !ie.nodeName(n.parentNode, "optgroup"))) {
+ if (t = ie(n).val(), a) return t;
+ o.push(t)
+ }
+ return o
+ },
+ set: function(e, t) {
+ for (var n, r, i = e.options, a = ie.makeArray(t), o = i.length; o--;)
+ if (r = i[o], ie.inArray(ie.valHooks.option.get(r), a) >= 0) try {
+ r.selected = n = !0
+ } catch (s) {
+ r.scrollHeight
+ } else r.selected = !1;
+ return n || (e.selectedIndex = -1), i
+ }
+ }
+ }
+ }), ie.each(["radio", "checkbox"], function() {
+ ie.valHooks[this] = {
+ set: function(e, t) {
+ return ie.isArray(t) ? e.checked = ie.inArray(ie(e).val(), t) >= 0 : void 0
+ }
+ }, ne.checkOn || (ie.valHooks[this].get = function(e) {
+ return null === e.getAttribute("value") ? "on" : e.value
+ })
+ });
+ var wt, _t, Et = ie.expr.attrHandle,
+ Tt = /^(?:checked|selected)$/i,
+ St = ne.getSetAttribute,
+ Ct = ne.input;
+ ie.fn.extend({
+ attr: function(e, t) {
+ return Ne(this, ie.attr, e, t, arguments.length > 1)
+ },
+ removeAttr: function(e) {
+ return this.each(function() {
+ ie.removeAttr(this, e)
+ })
+ }
+ }), ie.extend({
+ attr: function(e, t, n) {
+ var r, i, a = e.nodeType;
+ if (e && 3 !== a && 8 !== a && 2 !== a) return typeof e.getAttribute === Ee ? ie.prop(e, t, n) : (1 === a && ie.isXMLDoc(e) || (t = t.toLowerCase(), r = ie.attrHooks[t] || (ie.expr.match.bool.test(t) ? _t : wt)), void 0 === n ? r && "get" in r && null !== (i = r.get(e, t)) ? i : (i = ie.find.attr(e, t), null == i ? void 0 : i) : null !== n ? r && "set" in r && void 0 !== (i = r.set(e, n, t)) ? i : (e.setAttribute(t, n + ""), n) : void ie.removeAttr(e, t))
+ },
+ removeAttr: function(e, t) {
+ var n, r, i = 0,
+ a = t && t.match(xe);
+ if (a && 1 === e.nodeType)
+ for (; n = a[i++];) r = ie.propFix[n] || n, ie.expr.match.bool.test(n) ? Ct && St || !Tt.test(n) ? e[r] = !1 : e[ie.camelCase("default-" + n)] = e[r] = !1 : ie.attr(e, n, ""), e.removeAttribute(St ? n : r)
+ },
+ attrHooks: {
+ type: {
+ set: function(e, t) {
+ if (!ne.radioValue && "radio" === t && ie.nodeName(e, "input")) {
+ var n = e.value;
+ return e.setAttribute("type", t), n && (e.value = n), t
+ }
+ }
+ }
+ }
+ }), _t = {
+ set: function(e, t, n) {
+ return t === !1 ? ie.removeAttr(e, n) : Ct && St || !Tt.test(n) ? e.setAttribute(!St && ie.propFix[n] || n, n) : e[ie.camelCase("default-" + n)] = e[n] = !0, n
+ }
+ }, ie.each(ie.expr.match.bool.source.match(/\w+/g), function(e, t) {
+ var n = Et[t] || ie.find.attr;
+ Et[t] = Ct && St || !Tt.test(t) ? function(e, t, r) {
+ var i, a;
+ return r || (a = Et[t], Et[t] = i, i = null != n(e, t, r) ? t.toLowerCase() : null, Et[t] = a), i
+ } : function(e, t, n) {
+ return n ? void 0 : e[ie.camelCase("default-" + t)] ? t.toLowerCase() : null
+ }
+ }), Ct && St || (ie.attrHooks.value = {
+ set: function(e, t, n) {
+ return ie.nodeName(e, "input") ? void(e.defaultValue = t) : wt && wt.set(e, t, n)
+ }
+ }), St || (wt = {
+ set: function(e, t, n) {
+ var r = e.getAttributeNode(n);
+ return r || e.setAttributeNode(r = e.ownerDocument.createAttribute(n)), r.value = t += "", "value" === n || t === e.getAttribute(n) ? t : void 0
+ }
+ }, Et.id = Et.name = Et.coords = function(e, t, n) {
+ var r;
+ return n ? void 0 : (r = e.getAttributeNode(t)) && "" !== r.value ? r.value : null
+ }, ie.valHooks.button = {
+ get: function(e, t) {
+ var n = e.getAttributeNode(t);
+ return n && n.specified ? n.value : void 0
+ },
+ set: wt.set
+ }, ie.attrHooks.contenteditable = {
+ set: function(e, t, n) {
+ wt.set(e, "" === t ? !1 : t, n)
+ }
+ }, ie.each(["width", "height"], function(e, t) {
+ ie.attrHooks[t] = {
+ set: function(e, n) {
+ return "" === n ? (e.setAttribute(t, "auto"), n) : void 0
+ }
+ }
+ })), ne.style || (ie.attrHooks.style = {
+ get: function(e) {
+ return e.style.cssText || void 0
+ },
+ set: function(e, t) {
+ return e.style.cssText = t + ""
+ }
+ });
+ var kt = /^(?:input|select|textarea|button|object)$/i,
+ Dt = /^(?:a|area)$/i;
+ ie.fn.extend({
+ prop: function(e, t) {
+ return Ne(this, ie.prop, e, t, arguments.length > 1)
+ },
+ removeProp: function(e) {
+ return e = ie.propFix[e] || e, this.each(function() {
+ try {
+ this[e] = void 0, delete this[e]
+ } catch (t) {}
+ })
+ }
+ }), ie.extend({
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+ prop: function(e, t, n) {
+ var r, i, a, o = e.nodeType;
+ if (e && 3 !== o && 8 !== o && 2 !== o) return a = 1 !== o || !ie.isXMLDoc(e), a && (t = ie.propFix[t] || t, i = ie.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t]
+ },
+ propHooks: {
+ tabIndex: {
+ get: function(e) {
+ var t = ie.find.attr(e, "tabindex");
+ return t ? parseInt(t, 10) : kt.test(e.nodeName) || Dt.test(e.nodeName) && e.href ? 0 : -1
+ }
+ }
+ }
+ }), ne.hrefNormalized || ie.each(["href", "src"], function(e, t) {
+ ie.propHooks[t] = {
+ get: function(e) {
+ return e.getAttribute(t, 4)
+ }
+ }
+ }), ne.optSelected || (ie.propHooks.selected = {
+ get: function(e) {
+ var t = e.parentNode;
+ return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
+ }
+ }), ie.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
+ ie.propFix[this.toLowerCase()] = this
+ }), ne.enctype || (ie.propFix.enctype = "encoding");
+ var Nt = /[\t\r\n\f]/g;
+ ie.fn.extend({
+ addClass: function(e) {
+ var t, n, r, i, a, o, s = 0,
+ l = this.length,
+ u = "string" == typeof e && e;
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).addClass(e.call(this, t, this.className))
+ });
+ if (u)
+ for (t = (e || "").match(xe) || []; l > s; s++)
+ if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : " ")) {
+ for (a = 0; i = t[a++];) r.indexOf(" " + i + " ") < 0 && (r += i + " ");
+ o = ie.trim(r), n.className !== o && (n.className = o)
+ }
+ return this
+ },
+ removeClass: function(e) {
+ var t, n, r, i, a, o, s = 0,
+ l = this.length,
+ u = 0 === arguments.length || "string" == typeof e && e;
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).removeClass(e.call(this, t, this.className))
+ });
+ if (u)
+ for (t = (e || "").match(xe) || []; l > s; s++)
+ if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : "")) {
+ for (a = 0; i = t[a++];)
+ for (; r.indexOf(" " + i + " ") >= 0;) r = r.replace(" " + i + " ", " ");
+ o = e ? ie.trim(r) : "", n.className !== o && (n.className = o)
+ }
+ return this
+ },
+ toggleClass: function(e, t) {
+ var n = typeof e;
+ return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : ie.isFunction(e) ? this.each(function(n) {
+ ie(this).toggleClass(e.call(this, n, this.className, t), t)
+ }) : this.each(function() {
+ if ("string" === n)
+ for (var t, r = 0, i = ie(this), a = e.match(xe) || []; t = a[r++];) i.hasClass(t) ? i.removeClass(t) : i.addClass(t);
+ else(n === Ee || "boolean" === n) && (this.className && ie._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : ie._data(this, "__className__") || "")
+ })
+ },
+ hasClass: function(e) {
+ for (var t = " " + e + " ", n = 0, r = this.length; r > n; n++)
+ if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(Nt, " ").indexOf(t) >= 0) return !0;
+ return !1
+ }
+ }), ie.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
+ ie.fn[t] = function(e, n) {
+ return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
+ }
+ }), ie.fn.extend({
+ hover: function(e, t) {
+ return this.mouseenter(e).mouseleave(t || e)
+ },
+ bind: function(e, t, n) {
+ return this.on(e, null, t, n)
+ },
+ unbind: function(e, t) {
+ return this.off(e, null, t)
+ },
+ delegate: function(e, t, n, r) {
+ return this.on(t, e, n, r)
+ },
+ undelegate: function(e, t, n) {
+ return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
+ }
+ });
+ var Pt = ie.now(),
+ Mt = /\?/,
+ Bt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+ ie.parseJSON = function(t) {
+ if (e.JSON && e.JSON.parse) return e.JSON.parse(t + "");
+ var n, r = null,
+ i = ie.trim(t + "");
+ return i && !ie.trim(i.replace(Bt, function(e, t, i, a) {
+ return n && t && (r = 0), 0 === r ? e : (n = i || t, r += !a - !i, "")
+ })) ? Function("return " + i)() : ie.error("Invalid JSON: " + t)
+ }, ie.parseXML = function(t) {
+ var n, r;
+ if (!t || "string" != typeof t) return null;
+ try {
+ e.DOMParser ? (r = new DOMParser, n = r.parseFromString(t, "text/xml")) : (n = new ActiveXObject("Microsoft.XMLDOM"), n.async = "false", n.loadXML(t))
+ } catch (i) {
+ n = void 0
+ }
+ return n && n.documentElement && !n.getElementsByTagName("parsererror").length || ie.error("Invalid XML: " + t), n
+ };
+ var Lt, Ot, At = /#.*$/,
+ It = /([?&])_=[^&]*/,
+ zt = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
+ Rt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ jt = /^(?:GET|HEAD)$/,
+ Ft = /^\/\//,
+ qt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+ Vt = {},
+ Xt = {},
+ Ht = "*/".concat("*");
+ try {
+ Ot = location.href
+ } catch (Yt) {
+ Ot = fe.createElement("a"), Ot.href = "", Ot = Ot.href
+ }
+ Lt = qt.exec(Ot.toLowerCase()) || [], ie.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: Ot,
+ type: "GET",
+ isLocal: Rt.test(Lt[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": Ht,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+ converters: {
+ "* text": String,
+ "text html": !0,
+ "text json": ie.parseJSON,
+ "text xml": ie.parseXML
+ },
+ flatOptions: {
+ url: !0,
+ context: !0
+ }
+ },
+ ajaxSetup: function(e, t) {
+ return t ? q(q(e, ie.ajaxSettings), t) : q(ie.ajaxSettings, e)
+ },
+ ajaxPrefilter: j(Vt),
+ ajaxTransport: j(Xt),
+ ajax: function(e, t) {
+ function n(e, t, n, r) {
+ var i, c, y, m, b, _ = t;
+ 2 !== x && (x = 2, s && clearTimeout(s), u = void 0, o = r || "", w.readyState = e > 0 ? 4 : 0, i = e >= 200 && 300 > e || 304 === e, n && (m = V(d, w, n)), m = X(d, m, w, i), i ? (d.ifModified && (b = w.getResponseHeader("Last-Modified"), b && (ie.lastModified[a] = b), b = w.getResponseHeader("etag"), b && (ie.etag[a] = b)), 204 === e || "HEAD" === d.type ? _ = "nocontent" : 304 === e ? _ = "notmodified" : (_ = m.state, c = m.data, y = m.error, i = !y)) : (y = _, (e || !_) && (_ = "error", 0 > e && (e = 0))), w.status = e, w.statusText = (t || _) + "", i ? f.resolveWith(h, [c, _, w]) : f.rejectWith(h, [w, _, y]), w.statusCode(g), g = void 0, l && p.trigger(i ? "ajaxSuccess" : "ajaxError", [w, d, i ? c : y]), v.fireWith(h, [w, _]), l && (p.trigger("ajaxComplete", [w, d]), --ie.active || ie.event.trigger("ajaxStop")))
+ }
+ "object" == typeof e && (t = e, e = void 0), t = t || {};
+ var r, i, a, o, s, l, u, c, d = ie.ajaxSetup({}, t),
+ h = d.context || d,
+ p = d.context && (h.nodeType || h.jquery) ? ie(h) : ie.event,
+ f = ie.Deferred(),
+ v = ie.Callbacks("once memory"),
+ g = d.statusCode || {},
+ y = {},
+ m = {},
+ x = 0,
+ b = "canceled",
+ w = {
+ readyState: 0,
+ getResponseHeader: function(e) {
+ var t;
+ if (2 === x) {
+ if (!c)
+ for (c = {}; t = zt.exec(o);) c[t[1].toLowerCase()] = t[2];
+ t = c[e.toLowerCase()]
+ }
+ return null == t ? null : t
+ },
+ getAllResponseHeaders: function() {
+ return 2 === x ? o : null
+ },
+ setRequestHeader: function(e, t) {
+ var n = e.toLowerCase();
+ return x || (e = m[n] = m[n] || e, y[e] = t), this
+ },
+ overrideMimeType: function(e) {
+ return x || (d.mimeType = e), this
+ },
+ statusCode: function(e) {
+ var t;
+ if (e)
+ if (2 > x)
+ for (t in e) g[t] = [g[t], e[t]];
+ else w.always(e[w.status]);
+ return this
+ },
+ abort: function(e) {
+ var t = e || b;
+ return u && u.abort(t), n(0, t), this
+ }
+ };
+ if (f.promise(w).complete = v.add, w.success = w.done, w.error = w.fail, d.url = ((e || d.url || Ot) + "").replace(At, "").replace(Ft, Lt[1] + "//"), d.type = t.method || t.type || d.method || d.type, d.dataTypes = ie.trim(d.dataType || "*").toLowerCase().match(xe) || [""], null == d.crossDomain && (r = qt.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] === Lt[1] && r[2] === Lt[2] && (r[3] || ("http:" === r[1] ? "80" : "443")) === (Lt[3] || ("http:" === Lt[1] ? "80" : "443")))), d.data && d.processData && "string" != typeof d.data && (d.data = ie.param(d.data, d.traditional)), F(Vt, d, t, w), 2 === x) return w;
+ l = ie.event && d.global, l && 0 === ie.active++ && ie.event.trigger("ajaxStart"), d.type = d.type.toUpperCase(), d.hasContent = !jt.test(d.type), a = d.url, d.hasContent || (d.data && (a = d.url += (Mt.test(a) ? "&" : "?") + d.data, delete d.data), d.cache === !1 && (d.url = It.test(a) ? a.replace(It, "$1_=" + Pt++) : a + (Mt.test(a) ? "&" : "?") + "_=" + Pt++)), d.ifModified && (ie.lastModified[a] && w.setRequestHeader("If-Modified-Since", ie.lastModified[a]), ie.etag[a] && w.setRequestHeader("If-None-Match", ie.etag[a])), (d.data && d.hasContent && d.contentType !== !1 || t.contentType) && w.setRequestHeader("Content-Type", d.contentType), w.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + ("*" !== d.dataTypes[0] ? ", " + Ht + "; q=0.01" : "") : d.accepts["*"]);
+ for (i in d.headers) w.setRequestHeader(i, d.headers[i]);
+ if (d.beforeSend && (d.beforeSend.call(h, w, d) === !1 || 2 === x)) return w.abort();
+ b = "abort";
+ for (i in {
+ success: 1,
+ error: 1,
+ complete: 1
+ }) w[i](d[i]);
+ if (u = F(Xt, d, t, w)) {
+ w.readyState = 1, l && p.trigger("ajaxSend", [w, d]), d.async && d.timeout > 0 && (s = setTimeout(function() {
+ w.abort("timeout")
+ }, d.timeout));
+ try {
+ x = 1, u.send(y, n)
+ } catch (_) {
+ if (!(2 > x)) throw _;
+ n(-1, _)
+ }
+ } else n(-1, "No Transport");
+ return w
+ },
+ getJSON: function(e, t, n) {
+ return ie.get(e, t, n, "json")
+ },
+ getScript: function(e, t) {
+ return ie.get(e, void 0, t, "script")
+ }
+ }), ie.each(["get", "post"], function(e, t) {
+ ie[t] = function(e, n, r, i) {
+ return ie.isFunction(n) && (i = i || r, r = n, n = void 0), ie.ajax({
+ url: e,
+ type: t,
+ dataType: i,
+ data: n,
+ success: r
+ })
+ }
+ }), ie._evalUrl = function(e) {
+ return ie.ajax({
+ url: e,
+ type: "GET",
+ dataType: "script",
+ async: !1,
+ global: !1,
+ "throws": !0
+ })
+ }, ie.fn.extend({
+ wrapAll: function(e) {
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).wrapAll(e.call(this, t))
+ });
+ if (this[0]) {
+ var t = ie(e, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
+ for (var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild;
+ return e
+ }).append(this)
+ }
+ return this
+ },
+ wrapInner: function(e) {
+ return ie.isFunction(e) ? this.each(function(t) {
+ ie(this).wrapInner(e.call(this, t))
+ }) : this.each(function() {
+ var t = ie(this),
+ n = t.contents();
+ n.length ? n.wrapAll(e) : t.append(e)
+ })
+ },
+ wrap: function(e) {
+ var t = ie.isFunction(e);
+ return this.each(function(n) {
+ ie(this).wrapAll(t ? e.call(this, n) : e)
+ })
+ },
+ unwrap: function() {
+ return this.parent().each(function() {
+ ie.nodeName(this, "body") || ie(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), ie.expr.filters.hidden = function(e) {
+ return e.offsetWidth <= 0 && e.offsetHeight <= 0 || !ne.reliableHiddenOffsets() && "none" === (e.style && e.style.display || ie.css(e, "display"))
+ }, ie.expr.filters.visible = function(e) {
+ return !ie.expr.filters.hidden(e)
+ };
+ var $t = /%20/g,
+ Wt = /\[\]$/,
+ Ut = /\r?\n/g,
+ Zt = /^(?:submit|button|image|reset|file)$/i,
+ Gt = /^(?:input|select|textarea|keygen)/i;
+ ie.param = function(e, t) {
+ var n, r = [],
+ i = function(e, t) {
+ t = ie.isFunction(t) ? t() : null == t ? "" : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
+ };
+ if (void 0 === t && (t = ie.ajaxSettings && ie.ajaxSettings.traditional), ie.isArray(e) || e.jquery && !ie.isPlainObject(e)) ie.each(e, function() {
+ i(this.name, this.value)
+ });
+ else
+ for (n in e) H(n, e[n], t, i);
+ return r.join("&").replace($t, "+")
+ }, ie.fn.extend({
+ serialize: function() {
+ return ie.param(this.serializeArray())
+ },
+ serializeArray: function() {
+ return this.map(function() {
+ var e = ie.prop(this, "elements");
+ return e ? ie.makeArray(e) : this
+ }).filter(function() {
+ var e = this.type;
+ return this.name && !ie(this).is(":disabled") && Gt.test(this.nodeName) && !Zt.test(e) && (this.checked || !Pe.test(e))
+ }).map(function(e, t) {
+ var n = ie(this).val();
+ return null == n ? null : ie.isArray(n) ? ie.map(n, function(e) {
+ return {
+ name: t.name,
+ value: e.replace(Ut, "\r\n")
+ }
+ }) : {
+ name: t.name,
+ value: n.replace(Ut, "\r\n")
+ }
+ }).get()
+ }
+ }), ie.ajaxSettings.xhr = void 0 !== e.ActiveXObject ? function() {
+ return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Y() || $()
+ } : Y;
+ var Kt = 0,
+ Jt = {},
+ Qt = ie.ajaxSettings.xhr();
+ e.attachEvent && e.attachEvent("onunload", function() {
+ for (var e in Jt) Jt[e](void 0, !0)
+ }), ne.cors = !!Qt && "withCredentials" in Qt, Qt = ne.ajax = !!Qt, Qt && ie.ajaxTransport(function(e) {
+ if (!e.crossDomain || ne.cors) {
+ var t;
+ return {
+ send: function(n, r) {
+ var i, a = e.xhr(),
+ o = ++Kt;
+ if (a.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields)
+ for (i in e.xhrFields) a[i] = e.xhrFields[i];
+ e.mimeType && a.overrideMimeType && a.overrideMimeType(e.mimeType), e.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest");
+ for (i in n) void 0 !== n[i] && a.setRequestHeader(i, n[i] + "");
+ a.send(e.hasContent && e.data || null), t = function(n, i) {
+ var s, l, u;
+ if (t && (i || 4 === a.readyState))
+ if (delete Jt[o], t = void 0, a.onreadystatechange = ie.noop, i) 4 !== a.readyState && a.abort();
+ else {
+ u = {}, s = a.status, "string" == typeof a.responseText && (u.text = a.responseText);
+ try {
+ l = a.statusText
+ } catch (c) {
+ l = ""
+ }
+ s || !e.isLocal || e.crossDomain ? 1223 === s && (s = 204) : s = u.text ? 200 : 404
+ }
+ u && r(s, l, u, a.getAllResponseHeaders())
+ }, e.async ? 4 === a.readyState ? setTimeout(t) : a.onreadystatechange = Jt[o] = t : t()
+ },
+ abort: function() {
+ t && t(void 0, !0)
+ }
+ }
+ }
+ }), ie.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function(e) {
+ return ie.globalEval(e), e
+ }
+ }
+ }), ie.ajaxPrefilter("script", function(e) {
+ void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
+ }), ie.ajaxTransport("script", function(e) {
+ if (e.crossDomain) {
+ var t, n = fe.head || ie("head")[0] || fe.documentElement;
+ return {
+ send: function(r, i) {
+ t = fe.createElement("script"), t.async = !0, e.scriptCharset && (t.charset = e.scriptCharset), t.src = e.url, t.onload = t.onreadystatechange = function(e, n) {
+ (n || !t.readyState || /loaded|complete/.test(t.readyState)) && (t.onload = t.onreadystatechange = null, t.parentNode && t.parentNode.removeChild(t), t = null, n || i(200, "success"))
+ }, n.insertBefore(t, n.firstChild)
+ },
+ abort: function() {
+ t && t.onload(void 0, !0)
+ }
+ }
+ }
+ });
+ var en = [],
+ tn = /(=)\?(?=&|$)|\?\?/;
+ ie.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var e = en.pop() || ie.expando + "_" + Pt++;
+ return this[e] = !0, e
+ }
+ }), ie.ajaxPrefilter("json jsonp", function(t, n, r) {
+ var i, a, o, s = t.jsonp !== !1 && (tn.test(t.url) ? "url" : "string" == typeof t.data && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && tn.test(t.data) && "data");
+ return s || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = ie.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, s ? t[s] = t[s].replace(tn, "$1" + i) : t.jsonp !== !1 && (t.url += (Mt.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), t.converters["script json"] = function() {
+ return o || ie.error(i + " was not called"), o[0]
+ }, t.dataTypes[0] = "json", a = e[i], e[i] = function() {
+ o = arguments
+ }, r.always(function() {
+ e[i] = a, t[i] && (t.jsonpCallback = n.jsonpCallback, en.push(i)), o && ie.isFunction(a) && a(o[0]), o = a = void 0
+ }), "script") : void 0
+ }), ie.parseHTML = function(e, t, n) {
+ if (!e || "string" != typeof e) return null;
+ "boolean" == typeof t && (n = t, t = !1), t = t || fe;
+ var r = de.exec(e),
+ i = !n && [];
+ return r ? [t.createElement(r[1])] : (r = ie.buildFragment([e], t, i), i && i.length && ie(i).remove(), ie.merge([], r.childNodes))
+ };
+ var nn = ie.fn.load;
+ ie.fn.load = function(e, t, n) {
+ if ("string" != typeof e && nn) return nn.apply(this, arguments);
+ var r, i, a, o = this,
+ s = e.indexOf(" ");
+ return s >= 0 && (r = ie.trim(e.slice(s, e.length)), e = e.slice(0, s)), ie.isFunction(t) ? (n = t, t = void 0) : t && "object" == typeof t && (a = "POST"), o.length > 0 && ie.ajax({
+ url: e,
+ type: a,
+ dataType: "html",
+ data: t
+ }).done(function(e) {
+ i = arguments, o.html(r ? ie("
").append(ie.parseHTML(e)).find(r) : e)
+ }).complete(n && function(e, t) {
+ o.each(n, i || [e.responseText, t, e])
+ }), this
+ }, ie.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
+ ie.fn[t] = function(e) {
+ return this.on(t, e)
+ }
+ }), ie.expr.filters.animated = function(e) {
+ return ie.grep(ie.timers, function(t) {
+ return e === t.elem
+ }).length
+ };
+ var rn = e.document.documentElement;
+ ie.offset = {
+ setOffset: function(e, t, n) {
+ var r, i, a, o, s, l, u, c = ie.css(e, "position"),
+ d = ie(e),
+ h = {};
+ "static" === c && (e.style.position = "relative"), s = d.offset(), a = ie.css(e, "top"), l = ie.css(e, "left"), u = ("absolute" === c || "fixed" === c) && ie.inArray("auto", [a, l]) > -1, u ? (r = d.position(), o = r.top, i = r.left) : (o = parseFloat(a) || 0, i = parseFloat(l) || 0), ie.isFunction(t) && (t = t.call(e, n, s)), null != t.top && (h.top = t.top - s.top + o), null != t.left && (h.left = t.left - s.left + i), "using" in t ? t.using.call(e, h) : d.css(h)
+ }
+ }, ie.fn.extend({
+ offset: function(e) {
+ if (arguments.length) return void 0 === e ? this : this.each(function(t) {
+ ie.offset.setOffset(this, e, t)
+ });
+ var t, n, r = {
+ top: 0,
+ left: 0
+ },
+ i = this[0],
+ a = i && i.ownerDocument;
+ if (a) return t = a.documentElement, ie.contains(t, i) ? (typeof i.getBoundingClientRect !== Ee && (r = i.getBoundingClientRect()), n = W(a), {
+ top: r.top + (n.pageYOffset || t.scrollTop) - (t.clientTop || 0),
+ left: r.left + (n.pageXOffset || t.scrollLeft) - (t.clientLeft || 0)
+ }) : r
+ },
+ position: function() {
+ if (this[0]) {
+ var e, t, n = {
+ top: 0,
+ left: 0
+ },
+ r = this[0];
+ return "fixed" === ie.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), ie.nodeName(e[0], "html") || (n = e.offset()), n.top += ie.css(e[0], "borderTopWidth", !0), n.left += ie.css(e[0], "borderLeftWidth", !0)), {
+ top: t.top - n.top - ie.css(r, "marginTop", !0),
+ left: t.left - n.left - ie.css(r, "marginLeft", !0)
+ }
+ }
+ },
+ offsetParent: function() {
+ return this.map(function() {
+ for (var e = this.offsetParent || rn; e && !ie.nodeName(e, "html") && "static" === ie.css(e, "position");) e = e.offsetParent;
+ return e || rn
+ })
+ }
+ }), ie.each({
+ scrollLeft: "pageXOffset",
+ scrollTop: "pageYOffset"
+ }, function(e, t) {
+ var n = /Y/.test(t);
+ ie.fn[e] = function(r) {
+ return Ne(this, function(e, r, i) {
+ var a = W(e);
+ return void 0 === i ? a ? t in a ? a[t] : a.document.documentElement[r] : e[r] : void(a ? a.scrollTo(n ? ie(a).scrollLeft() : i, n ? i : ie(a).scrollTop()) : e[r] = i)
+ }, e, r, arguments.length, null)
+ }
+ }), ie.each(["top", "left"], function(e, t) {
+ ie.cssHooks[t] = C(ne.pixelPosition, function(e, n) {
+ return n ? (n = tt(e, t), rt.test(n) ? ie(e).position()[t] + "px" : n) : void 0
+ })
+ }), ie.each({
+ Height: "height",
+ Width: "width"
+ }, function(e, t) {
+ ie.each({
+ padding: "inner" + e,
+ content: t,
+ "": "outer" + e
+ }, function(n, r) {
+ ie.fn[r] = function(r, i) {
+ var a = arguments.length && (n || "boolean" != typeof r),
+ o = n || (r === !0 || i === !0 ? "margin" : "border");
+ return Ne(this, function(t, n, r) {
+ var i;
+ return ie.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? ie.css(t, n, o) : ie.style(t, n, r, o)
+ }, t, a ? r : void 0, a, null)
+ }
+ })
+ }), ie.fn.size = function() {
+ return this.length
+ }, ie.fn.andSelf = ie.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
+ return ie
+ });
+ var an = e.jQuery,
+ on = e.$;
+ return ie.noConflict = function(t) {
+ return e.$ === ie && (e.$ = on), t && e.jQuery === ie && (e.jQuery = an), ie
+ }, typeof t === Ee && (e.jQuery = e.$ = ie), ie
+});
+var cytoscape;
+! function(e) {
+ "use strict";
+ var t = cytoscape = function() {
+ return cytoscape.init.apply(cytoscape, arguments)
+ };
+ t.version = "2.4.6", t.init = function(e) {
+ return void 0 === e && (e = {}), t.is.plainObject(e) ? new t.Core(e) : t.is.string(e) ? t.extension.apply(t.extension, arguments) : void 0
+ }, t.fn = {}, "undefined" != typeof module && module.exports && (module.exports = cytoscape), "undefined" != typeof define && define.amd && define("cytoscape", function() {
+ return cytoscape
+ }), e && (e.cytoscape = cytoscape)
+}("undefined" == typeof window ? null : window), this.cytoscape = cytoscape,
+ function(e) {
+ "use strict";
+ var t = 0,
+ n = 1,
+ r = 2,
+ i = function(e) {
+ return this instanceof i ? (this.id = "Thenable/1.0.7", this.state = t, this.fulfillValue = void 0, this.rejectReason = void 0, this.onFulfilled = [], this.onRejected = [], this.proxy = {
+ then: this.then.bind(this)
+ }, void("function" == typeof e && e.call(this, this.fulfill.bind(this), this.reject.bind(this)))) : new i(e)
+ };
+ i.prototype = {
+ fulfill: function(e) {
+ return a(this, n, "fulfillValue", e)
+ },
+ reject: function(e) {
+ return a(this, r, "rejectReason", e)
+ },
+ then: function(e, t) {
+ var n = this,
+ r = new i;
+ return n.onFulfilled.push(l(e, r, "fulfill")), n.onRejected.push(l(t, r, "reject")), o(n), r.proxy
+ }
+ };
+ var a = function(e, n, r, i) {
+ return e.state === t && (e.state = n, e[r] = i, o(e)), e
+ },
+ o = function(e) {
+ e.state === n ? s(e, "onFulfilled", e.fulfillValue) : e.state === r && s(e, "onRejected", e.rejectReason)
+ },
+ s = function(e, t, n) {
+ if (0 !== e[t].length) {
+ var r = e[t];
+ e[t] = [];
+ var i = function() {
+ for (var e = 0; e < r.length; e++) r[e](n)
+ };
+ "object" == typeof process && "function" == typeof process.nextTick ? process.nextTick(i) : "function" == typeof setImmediate ? setImmediate(i) : setTimeout(i, 0)
+ }
+ },
+ l = function(e, t, n) {
+ return function(r) {
+ if ("function" != typeof e) t[n].call(t, r);
+ else {
+ var i;
+ try {
+ i = e(r)
+ } catch (a) {
+ return void t.reject(a)
+ }
+ u(t, i)
+ }
+ }
+ },
+ u = function(e, t) {
+ if (e === t || e.proxy === t) return void e.reject(new TypeError("cannot resolve promise with itself"));
+ var n;
+ if ("object" == typeof t && null !== t || "function" == typeof t) try {
+ n = t.then
+ } catch (r) {
+ return void e.reject(r)
+ }
+ if ("function" != typeof n) e.fulfill(t);
+ else {
+ var i = !1;
+ try {
+ n.call(t, function(n) {
+ i || (i = !0, n === t ? e.reject(new TypeError("circular thenable chain")) : u(e, n))
+ }, function(t) {
+ i || (i = !0, e.reject(t))
+ })
+ } catch (r) {
+ i || e.reject(r)
+ }
+ }
+ };
+ e.Promise = "undefined" == typeof Promise ? i : Promise, e.Promise.all = e.Promise.all || function(t) {
+ return new e.Promise(function(e, n) {
+ for (var r = new Array(t.length), i = 0, a = function(n, a) {
+ r[n] = a, i++, i === t.length && e(r)
+ }, o = 0; o < t.length; o++) ! function(e) {
+ var r = t[e],
+ i = null != r.then;
+ if (i) r.then(function(t) {
+ a(e, t)
+ }, function(e) {
+ n(e)
+ });
+ else {
+ var o = r;
+ a(e, o)
+ }
+ }(o)
+ })
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ var n = "string",
+ r = typeof {},
+ i = "function";
+ e.is = {
+ defined: function(e) {
+ return null != e
+ },
+ string: function(e) {
+ return null != e && typeof e == n
+ },
+ fn: function(e) {
+ return null != e && typeof e === i
+ },
+ array: function(e) {
+ return Array.isArray ? Array.isArray(e) : null != e && e instanceof Array
+ },
+ plainObject: function(t) {
+ return null != t && typeof t === r && !e.is.array(t) && t.constructor === Object
+ },
+ object: function(e) {
+ return null != e && typeof e === r
+ },
+ number: function(e) {
+ return null != e && "number" == typeof e && !isNaN(e)
+ },
+ integer: function(t) {
+ return e.is.number(t) && Math.floor(t) === t
+ },
+ color: function(e) {
+ return null != e && "string" == typeof e && "" !== $.Color(e).toString()
+ },
+ bool: function(e) {
+ return null != e && typeof e == typeof !0
+ },
+ elementOrCollection: function(t) {
+ return e.is.element(t) || e.is.collection(t)
+ },
+ element: function(t) {
+ return t instanceof e.Element && t._private.single
+ },
+ collection: function(t) {
+ return t instanceof e.Collection && !t._private.single
+ },
+ core: function(t) {
+ return t instanceof e.Core
+ },
+ style: function(t) {
+ return t instanceof e.Style
+ },
+ stylesheet: function(t) {
+ return t instanceof e.Stylesheet
+ },
+ event: function(t) {
+ return t instanceof e.Event
+ },
+ thread: function(t) {
+ return t instanceof e.Thread
+ },
+ fabric: function(t) {
+ return t instanceof e.Fabric
+ },
+ emptyString: function(t) {
+ return t ? e.is.string(t) && ("" === t || t.match(/^\s+$/)) ? !0 : !1 : !0
+ },
+ nonemptyString: function(t) {
+ return t && e.is.string(t) && "" !== t && !t.match(/^\s+$/) ? !0 : !1
+ },
+ domElement: function(e) {
+ return "undefined" == typeof HTMLElement ? !1 : e instanceof HTMLElement
+ },
+ boundingBox: function(t) {
+ return e.is.plainObject(t) && e.is.number(t.x1) && e.is.number(t.x2) && e.is.number(t.y1) && e.is.number(t.y2)
+ },
+ promise: function(t) {
+ return e.is.object(t) && e.is.fn(t.then)
+ },
+ touch: function() {
+ return t && ("ontouchstart" in t || t.DocumentTouch && document instanceof DocumentTouch)
+ },
+ gecko: function() {
+ return "undefined" != typeof InstallTrigger || "MozAppearance" in document.documentElement.style
+ },
+ webkit: function() {
+ return "undefined" != typeof webkitURL || "WebkitAppearance" in document.documentElement.style
+ },
+ chromium: function() {
+ return "undefined" != typeof chrome
+ },
+ khtml: function() {
+ return navigator.vendor.match(/kde/i)
+ },
+ khtmlEtc: function() {
+ return e.is.khtml() || e.is.webkit() || e.is.chromium()
+ },
+ trident: function() {
+ return "undefined" != typeof ActiveXObject || !1
+ },
+ windows: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Win/i)
+ },
+ mac: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Mac/i)
+ },
+ linux: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Linux/i)
+ },
+ unix: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/X11/i)
+ }
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.util = {
+ extend: function() {
+ var t, n, r, i, a, o, s = arguments[0] || {},
+ l = 1,
+ u = arguments.length,
+ c = !1;
+ for ("boolean" == typeof s && (c = s, s = arguments[1] || {}, l = 2), "object" == typeof s || e.is.fn(s) || (s = {}), u === l && (s = this, --l); u > l; l++)
+ if (null != (t = arguments[l]))
+ for (n in t) r = s[n], i = t[n], s !== i && (c && i && (e.is.plainObject(i) || (a = e.is.array(i))) ? (a ? (a = !1, o = r && e.is.array(r) ? r : []) : o = r && e.is.plainObject(r) ? r : {}, s[n] = e.util.extend(c, o, i)) : void 0 !== i && (s[n] = i));
+ return s
+ },
+ require: function(n, r, i) {
+ var a;
+ i = e.util.extend({
+ msgIfNotFound: !0
+ }, i);
+ var o = !1,
+ s = function(e) {
+ o = !0, r(e)
+ },
+ l = function(e) {
+ t && (a = t[n]), void 0 !== a && s(a), e && e()
+ },
+ u = function() {
+ o || c(d)
+ },
+ c = function(e) {
+ if ("undefined" != typeof module && module.exports && require) try {
+ a = require(n)
+ } catch (t) {}
+ void 0 !== a && s(a), e && e()
+ },
+ d = function() {
+ o || h(p)
+ },
+ h = function(e) {
+ "undefined" != typeof define && define.amd && require && require([n], function(t) {
+ a = t, void 0 !== a && s(a), e && e()
+ }, function(t) {
+ e && e()
+ })
+ },
+ p = function() {
+ !o && i.msgIfNotFound && e.util.error("Cytoscape.js tried to pull in dependency `" + n + "` but no module (i.e. CommonJS, AMD, or window) was found")
+ };
+ l(u)
+ },
+ requires: function(t, n) {
+ for (var r = [], i = [], a = function() {
+ for (var e = 0; e < t.length; e++)
+ if (!i[e]) return;
+ n.apply(n, r)
+ }, o = 0; o < t.length; o++) ! function() {
+ var n = t[o],
+ s = o;
+ e.util.require(n, function(e) {
+ r[s] = e, i[s] = !0, a()
+ })
+ }()
+ },
+ throttle: function(t, n, r) {
+ var i = !0,
+ a = !0;
+ return r === !1 ? i = !1 : e.is.plainObject(r) && (i = "leading" in r ? r.leading : i, a = "trailing" in r ? r.trailing : a), r = r || {}, r.leading = i, r.maxWait = n, r.trailing = a, e.util.debounce(t, n, r)
+ },
+ now: function() {
+ return +new Date
+ },
+ debounce: function(t, n, r) {
+ var i, a, o, s, l, u, c, d = 0,
+ h = !1,
+ p = !0;
+ if (e.is.fn(t)) {
+ if (n = Math.max(0, n) || 0, r === !0) {
+ var f = !0;
+ p = !1
+ } else e.is.plainObject(r) && (f = r.leading, h = "maxWait" in r && (Math.max(n, r.maxWait) || 0), p = "trailing" in r ? r.trailing : p);
+ var v = function() {
+ var r = n - (e.util.now() - s);
+ if (0 >= r) {
+ a && clearTimeout(a);
+ var h = c;
+ a = u = c = void 0, h && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null))
+ } else u = setTimeout(v, r)
+ },
+ g = function() {
+ u && clearTimeout(u), a = u = c = void 0, (p || h !== n) && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null))
+ };
+ return function() {
+ if (i = arguments, s = e.util.now(), l = this, c = p && (u || !f), h === !1) var r = f && !u;
+ else {
+ a || f || (d = s);
+ var y = h - (s - d),
+ m = 0 >= y;
+ m ? (a && (a = clearTimeout(a)), d = s, o = t.apply(l, i)) : a || (a = setTimeout(g, y))
+ }
+ return m && u ? u = clearTimeout(u) : u || n === h || (u = setTimeout(v, n)), r && (m = !0, o = t.apply(l, i)), !m || u || a || (i = l = null), o
+ }
+ }
+ },
+ error: function(e) {
+ if (!console) throw e;
+ if (console.error) console.error.apply(console, arguments);
+ else {
+ if (!console.log) throw e;
+ console.log.apply(console, arguments)
+ }
+ },
+ clone: function(e) {
+ var t = {};
+ for (var n in e) t[n] = e[n];
+ return t
+ },
+ copy: function(t) {
+ return null == t ? t : e.is.array(t) ? t.slice() : e.is.plainObject(t) ? e.util.clone(t) : t
+ },
+ makeBoundingBox: function(e) {
+ if (null != e.x1 && null != e.y1) {
+ if (null != e.x2 && null != e.y2 && e.x2 >= e.x1 && e.y2 >= e.y1) return {
+ x1: e.x1,
+ y1: e.y1,
+ x2: e.x2,
+ y2: e.y2,
+ w: e.x2 - e.x1,
+ h: e.y2 - e.y1
+ };
+ if (null != e.w && null != e.h && e.w >= 0 && e.h >= 0) return {
+ x1: e.x1,
+ y1: e.y1,
+ x2: e.x1 + e.w,
+ y2: e.y1 + e.h,
+ w: e.w,
+ h: e.h
+ }
+ }
+ },
+ mapEmpty: function(e) {
+ var t = !0;
+ if (null != e)
+ for (var n in e) {
+ t = !1;
+ break
+ }
+ return t
+ },
+ pushMap: function(t) {
+ var n = e.util.getMap(t);
+ null == n ? e.util.setMap($.extend({}, t, {
+ value: [t.value]
+ })) : n.push(t.value)
+ },
+ setMap: function(t) {
+ for (var n, r = t.map, i = t.keys, a = i.length, o = 0; a > o; o++) {
+ var n = i[o];
+ e.is.plainObject(n) && e.util.error("Tried to set map with object key"), o < i.length - 1 ? (null == r[n] && (r[n] = {}), r = r[n]) : r[n] = t.value
+ }
+ },
+ getMap: function(t) {
+ for (var n = t.map, r = t.keys, i = r.length, a = 0; i > a; a++) {
+ var o = r[a];
+ if (e.is.plainObject(o) && e.util.error("Tried to get map with object key"), n = n[o], null == n) return n
+ }
+ return n
+ },
+ deleteMap: function(t) {
+ for (var n = t.map, r = t.keys, i = r.length, a = t.keepChildren, o = 0; i > o; o++) {
+ var s = r[o];
+ e.is.plainObject(s) && e.util.error("Tried to delete map with object key");
+ var l = o === t.keys.length - 1;
+ if (l)
+ if (a)
+ for (var u in n) a[u] || (n[u] = void 0);
+ else n[s] = void 0;
+ else n = n[s]
+ }
+ },
+ capitalize: function(t) {
+ return e.is.emptyString(t) ? t : t.charAt(0).toUpperCase() + t.substring(1)
+ },
+ trim: function(e) {
+ var t, n;
+ for (t = 0; t < e.length && " " === e[t]; t++);
+ for (n = e.length - 1; n > t && " " === e[n]; n--);
+ return e.substring(t, n + 1)
+ },
+ hex2tuple: function(e) {
+ if ((4 === e.length || 7 === e.length) && "#" === e[0]) {
+ var t, n, r, i = 4 === e.length,
+ a = 16;
+ return i ? (t = parseInt(e[1] + e[1], a), n = parseInt(e[2] + e[2], a), r = parseInt(e[3] + e[3], a)) : (t = parseInt(e[1] + e[2], a), n = parseInt(e[3] + e[4], a), r = parseInt(e[5] + e[6], a)), [t, n, r]
+ }
+ },
+ hsl2tuple: function(t) {
+ function n(e, t, n) {
+ return 0 > n && (n += 1), n > 1 && (n -= 1), 1 / 6 > n ? e + 6 * (t - e) * n : .5 > n ? t : 2 / 3 > n ? e + (t - e) * (2 / 3 - n) * 6 : e
+ }
+ var r, i, a, o, s, l, u, c, d = new RegExp("^" + e.util.regex.hsla + "$").exec(t);
+ if (d) {
+ if (i = parseInt(d[1]), 0 > i ? i = (360 - -1 * i % 360) % 360 : i > 360 && (i %= 360), i /= 360, a = parseFloat(d[2]), 0 > a || a > 100) return;
+ if (a /= 100, o = parseFloat(d[3]), 0 > o || o > 100) return;
+ if (o /= 100, s = d[4], void 0 !== s && (s = parseFloat(s), 0 > s || s > 1)) return;
+ if (0 === a) l = u = c = Math.round(255 * o);
+ else {
+ var h = .5 > o ? o * (1 + a) : o + a - o * a,
+ p = 2 * o - h;
+ l = Math.round(255 * n(p, h, i + 1 / 3)), u = Math.round(255 * n(p, h, i)), c = Math.round(255 * n(p, h, i - 1 / 3))
+ }
+ r = [l, u, c, s]
+ }
+ return r
+ },
+ rgb2tuple: function(t) {
+ var n, r = new RegExp("^" + e.util.regex.rgba + "$").exec(t);
+ if (r) {
+ n = [];
+ for (var i = [], a = 1; 3 >= a; a++) {
+ var o = r[a];
+ if ("%" === o[o.length - 1] && (i[a] = !0), o = parseFloat(o), i[a] && (o = o / 100 * 255), 0 > o || o > 255) return;
+ n.push(Math.floor(o))
+ }
+ var s = i[1] || i[2] || i[3],
+ l = i[1] && i[2] && i[3];
+ if (s && !l) return;
+ var u = r[4];
+ if (void 0 !== u) {
+ if (u = parseFloat(u), 0 > u || u > 1) return;
+ n.push(u)
+ }
+ }
+ return n
+ },
+ colorname2tuple: function(t) {
+ return e.util.colors[t.toLowerCase()]
+ },
+ color2tuple: function(t) {
+ return (e.is.array(t) ? t : null) || e.util.colorname2tuple(t) || e.util.hex2tuple(t) || e.util.rgb2tuple(t) || e.util.hsl2tuple(t)
+ },
+ tuple2hex: function(e) {
+ function t(e) {
+ var t = e.toString(16);
+ return 1 === t.length && (t = "0" + t), t
+ }
+ var n = e[0],
+ r = e[1],
+ i = e[2];
+ return "#" + t(n) + t(r) + t(i)
+ },
+ colors: {
+ transparent: [0, 0, 0, 0],
+ aliceblue: [240, 248, 255],
+ antiquewhite: [250, 235, 215],
+ aqua: [0, 255, 255],
+ aquamarine: [127, 255, 212],
+ azure: [240, 255, 255],
+ beige: [245, 245, 220],
+ bisque: [255, 228, 196],
+ black: [0, 0, 0],
+ blanchedalmond: [255, 235, 205],
+ blue: [0, 0, 255],
+ blueviolet: [138, 43, 226],
+ brown: [165, 42, 42],
+ burlywood: [222, 184, 135],
+ cadetblue: [95, 158, 160],
+ chartreuse: [127, 255, 0],
+ chocolate: [210, 105, 30],
+ coral: [255, 127, 80],
+ cornflowerblue: [100, 149, 237],
+ cornsilk: [255, 248, 220],
+ crimson: [220, 20, 60],
+ cyan: [0, 255, 255],
+ darkblue: [0, 0, 139],
+ darkcyan: [0, 139, 139],
+ darkgoldenrod: [184, 134, 11],
+ darkgray: [169, 169, 169],
+ darkgreen: [0, 100, 0],
+ darkgrey: [169, 169, 169],
+ darkkhaki: [189, 183, 107],
+ darkmagenta: [139, 0, 139],
+ darkolivegreen: [85, 107, 47],
+ darkorange: [255, 140, 0],
+ darkorchid: [153, 50, 204],
+ darkred: [139, 0, 0],
+ darksalmon: [233, 150, 122],
+ darkseagreen: [143, 188, 143],
+ darkslateblue: [72, 61, 139],
+ darkslategray: [47, 79, 79],
+ darkslategrey: [47, 79, 79],
+ darkturquoise: [0, 206, 209],
+ darkviolet: [148, 0, 211],
+ deeppink: [255, 20, 147],
+ deepskyblue: [0, 191, 255],
+ dimgray: [105, 105, 105],
+ dimgrey: [105, 105, 105],
+ dodgerblue: [30, 144, 255],
+ firebrick: [178, 34, 34],
+ floralwhite: [255, 250, 240],
+ forestgreen: [34, 139, 34],
+ fuchsia: [255, 0, 255],
+ gainsboro: [220, 220, 220],
+ ghostwhite: [248, 248, 255],
+ gold: [255, 215, 0],
+ goldenrod: [218, 165, 32],
+ gray: [128, 128, 128],
+ grey: [128, 128, 128],
+ green: [0, 128, 0],
+ greenyellow: [173, 255, 47],
+ honeydew: [240, 255, 240],
+ hotpink: [255, 105, 180],
+ indianred: [205, 92, 92],
+ indigo: [75, 0, 130],
+ ivory: [255, 255, 240],
+ khaki: [240, 230, 140],
+ lavender: [230, 230, 250],
+ lavenderblush: [255, 240, 245],
+ lawngreen: [124, 252, 0],
+ lemonchiffon: [255, 250, 205],
+ lightblue: [173, 216, 230],
+ lightcoral: [240, 128, 128],
+ lightcyan: [224, 255, 255],
+ lightgoldenrodyellow: [250, 250, 210],
+ lightgray: [211, 211, 211],
+ lightgreen: [144, 238, 144],
+ lightgrey: [211, 211, 211],
+ lightpink: [255, 182, 193],
+ lightsalmon: [255, 160, 122],
+ lightseagreen: [32, 178, 170],
+ lightskyblue: [135, 206, 250],
+ lightslategray: [119, 136, 153],
+ lightslategrey: [119, 136, 153],
+ lightsteelblue: [176, 196, 222],
+ lightyellow: [255, 255, 224],
+ lime: [0, 255, 0],
+ limegreen: [50, 205, 50],
+ linen: [250, 240, 230],
+ magenta: [255, 0, 255],
+ maroon: [128, 0, 0],
+ mediumaquamarine: [102, 205, 170],
+ mediumblue: [0, 0, 205],
+ mediumorchid: [186, 85, 211],
+ mediumpurple: [147, 112, 219],
+ mediumseagreen: [60, 179, 113],
+ mediumslateblue: [123, 104, 238],
+ mediumspringgreen: [0, 250, 154],
+ mediumturquoise: [72, 209, 204],
+ mediumvioletred: [199, 21, 133],
+ midnightblue: [25, 25, 112],
+ mintcream: [245, 255, 250],
+ mistyrose: [255, 228, 225],
+ moccasin: [255, 228, 181],
+ navajowhite: [255, 222, 173],
+ navy: [0, 0, 128],
+ oldlace: [253, 245, 230],
+ olive: [128, 128, 0],
+ olivedrab: [107, 142, 35],
+ orange: [255, 165, 0],
+ orangered: [255, 69, 0],
+ orchid: [218, 112, 214],
+ palegoldenrod: [238, 232, 170],
+ palegreen: [152, 251, 152],
+ paleturquoise: [175, 238, 238],
+ palevioletred: [219, 112, 147],
+ papayawhip: [255, 239, 213],
+ peachpuff: [255, 218, 185],
+ peru: [205, 133, 63],
+ pink: [255, 192, 203],
+ plum: [221, 160, 221],
+ powderblue: [176, 224, 230],
+ purple: [128, 0, 128],
+ red: [255, 0, 0],
+ rosybrown: [188, 143, 143],
+ royalblue: [65, 105, 225],
+ saddlebrown: [139, 69, 19],
+ salmon: [250, 128, 114],
+ sandybrown: [244, 164, 96],
+ seagreen: [46, 139, 87],
+ seashell: [255, 245, 238],
+ sienna: [160, 82, 45],
+ silver: [192, 192, 192],
+ skyblue: [135, 206, 235],
+ slateblue: [106, 90, 205],
+ slategray: [112, 128, 144],
+ slategrey: [112, 128, 144],
+ snow: [255, 250, 250],
+ springgreen: [0, 255, 127],
+ steelblue: [70, 130, 180],
+ tan: [210, 180, 140],
+ teal: [0, 128, 128],
+ thistle: [216, 191, 216],
+ tomato: [255, 99, 71],
+ turquoise: [64, 224, 208],
+ violet: [238, 130, 238],
+ wheat: [245, 222, 179],
+ white: [255, 255, 255],
+ whitesmoke: [245, 245, 245],
+ yellow: [255, 255, 0],
+ yellowgreen: [154, 205, 50]
+ },
+ memoize: function(e, t) {
+ var n = this,
+ r = {};
+ return t || (t = function() {
+ if (1 === arguments.length) return arguments[0];
+ for (var e = [], t = 0; t < arguments.length; t++) e.push(arguments[t]);
+ return e.join("$")
+ }),
+ function() {
+ var i, a = arguments,
+ o = t.apply(n, a);
+ return (i = r[o]) || (i = r[o] = e.apply(n, a)), i
+ }
+ }
+ }, e.util.camel2dash = e.util.memoize(function(e) {
+ for (var t = [], n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = r.toLowerCase(),
+ a = r !== i;
+ a ? (t.push("-"), t.push(i)) : t.push(r)
+ }
+ var o = t.length === e.length;
+ return o ? e : t.join("")
+ }), e.util.dash2camel = e.util.memoize(function(e) {
+ for (var t = [], n = !1, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = "-" === i;
+ a ? n = !0 : (n ? t.push(i.toUpperCase()) : t.push(i), n = !1)
+ }
+ return t.join("")
+ }), e.util.regex = {}, e.util.regex.number = "(?:[-]?\\d*\\.\\d+|[-]?\\d+|[-]?\\d*\\.\\d+[eE]\\d+)", e.util.regex.rgba = "rgb[a]?\\((" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.rgbaNoBackRefs = "rgb[a]?\\((?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hsla = "hsl[a]?\\((" + e.util.regex.number + ")\\s*,\\s*(" + e.util.regex.number + "[%])\\s*,\\s*(" + e.util.regex.number + "[%])(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.hslaNoBackRefs = "hsl[a]?\\((?:" + e.util.regex.number + ")\\s*,\\s*(?:" + e.util.regex.number + "[%])\\s*,\\s*(?:" + e.util.regex.number + "[%])(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hex3 = "\\#[0-9a-fA-F]{3}", e.util.regex.hex6 = "\\#[0-9a-fA-F]{6}";
+ var n = t ? t.requestAnimationFrame || t.mozRequestAnimationFrame || t.webkitRequestAnimationFrame || t.msRequestAnimationFrame : null;
+ n = n || function(e) {
+ e && setTimeout(e, 1e3 / 60)
+ }, e.util.requestAnimationFrame = function(e) {
+ n(e)
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.math = {}, e.math.signum = function(e) {
+ return e > 0 ? 1 : 0 > e ? -1 : 0
+ }, e.math.distance = function(e, t) {
+ var n = t.x - e.x,
+ r = t.y - e.y;
+ return Math.sqrt(n * n + r * r)
+ }, e.math.qbezierAt = function(e, t, n, r) {
+ return (1 - r) * (1 - r) * e + 2 * (1 - r) * r * t + r * r * n
+ }, e.math.qbezierPtAt = function(t, n, r, i) {
+ return {
+ x: e.math.qbezierAt(t.x, n.x, r.x, i),
+ y: e.math.qbezierAt(t.y, n.y, r.y, i)
+ }
+ }, e.math.boundingBoxesIntersect = function(e, t) {
+ return e.x1 > t.x2 ? !1 : t.x1 > e.x2 ? !1 : e.x2 < t.x1 ? !1 : t.x2 < e.x1 ? !1 : e.y2 < t.y1 ? !1 : t.y2 < e.y1 ? !1 : e.y1 > t.y2 ? !1 : t.y1 > e.y2 ? !1 : !0
+ }, e.math.inBoundingBox = function(e, t, n) {
+ return e.x1 <= t && t <= e.x2 && e.y1 <= n && n <= e.y2
+ }, e.math.pointInBoundingBox = function(e, t) {
+ return this.inBoundingBox(e, t.x, t.y)
+ }, e.math.roundRectangleIntersectLine = function(e, t, n, r, i, a, o) {
+ var s, l = this.getRoundRectangleRadius(i, a),
+ u = i / 2,
+ c = a / 2,
+ d = n - u + l - o,
+ h = r - c - o,
+ p = n + u - l + o,
+ f = h;
+ if (s = this.finiteLinesIntersect(e, t, n, r, d, h, p, f, !1), s.length > 0) return s;
+ var v = n + u + o,
+ g = r - c + l - o,
+ y = v,
+ m = r + c - l + o;
+ if (s = this.finiteLinesIntersect(e, t, n, r, v, g, y, m, !1), s.length > 0) return s;
+ var x = n - u + l - o,
+ b = r + c + o,
+ w = n + u - l + o,
+ _ = b;
+ if (s = this.finiteLinesIntersect(e, t, n, r, x, b, w, _, !1), s.length > 0) return s;
+ var E = n - u - o,
+ T = r - c + l - o,
+ S = E,
+ C = r + c - l + o;
+ if (s = this.finiteLinesIntersect(e, t, n, r, E, T, S, C, !1), s.length > 0) return s;
+ var k, D = n - u + l,
+ N = r - c + l;
+ if (k = this.intersectLineCircle(e, t, n, r, D, N, l + o), k.length > 0 && k[0] <= D && k[1] <= N) return [k[0], k[1]];
+ var P = n + u - l,
+ M = r - c + l;
+ if (k = this.intersectLineCircle(e, t, n, r, P, M, l + o), k.length > 0 && k[0] >= P && k[1] <= M) return [k[0], k[1]];
+ var B = n + u - l,
+ L = r + c - l;
+ if (k = this.intersectLineCircle(e, t, n, r, B, L, l + o), k.length > 0 && k[0] >= B && k[1] >= L) return [k[0], k[1]];
+ var O = n - u + l,
+ A = r + c - l;
+ return k = this.intersectLineCircle(e, t, n, r, O, A, l + o), k.length > 0 && k[0] <= O && k[1] >= A ? [k[0], k[1]] : []
+ }, e.math.roundRectangleIntersectBox = function(e, t, n, r, i, a, o, s, l) {
+ var u = this.getRoundRectangleRadius(i, a),
+ c = o - i / 2 - l,
+ d = s - a / 2 + u - l,
+ h = o + i / 2 + l,
+ p = s + a / 2 - u + l,
+ f = o - i / 2 + u - l,
+ v = s - a / 2 - l,
+ g = o + i / 2 - u + l,
+ y = s + a / 2 + l,
+ m = Math.min(e, n),
+ x = Math.max(e, n),
+ b = Math.min(t, r),
+ w = Math.max(t, r);
+ return c > x ? !1 : m > h ? !1 : v > w ? !1 : b > y ? !1 : c >= m && x >= c && d >= b && w >= d ? !0 : h >= m && x >= h && d >= b && w >= d ? !0 : h >= m && x >= h && p >= b && w >= p ? !0 : c >= m && x >= c && p >= b && w >= p ? !0 : m >= c && h >= m && b >= d && p >= b ? !0 : x >= c && h >= x && b >= d && p >= b ? !0 : x >= c && h >= x && w >= d && p >= w ? !0 : m >= c && h >= m && w >= d && p >= w ? !0 : f >= m && x >= f && v >= b && w >= v ? !0 : g >= m && x >= g && v >= b && w >= v ? !0 : g >= m && x >= g && y >= b && w >= y ? !0 : f >= m && x >= f && y >= b && w >= y ? !0 : m >= f && g >= m && b >= v && y >= b ? !0 : x >= f && g >= x && b >= v && y >= b ? !0 : x >= f && g >= x && w >= v && y >= w ? !0 : m >= f && g >= m && w >= v && y >= w ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, p - l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, p - l) ? !0 : !1
+ }, e.math.checkInBoundingCircle = function(e, t, n, r, i, a, o, s) {
+ return e = (e - o) / (i + r), t = (t - s) / (a + r), n >= e * e + t * t
+ }, e.math.boxInBezierVicinity = function(e, t, n, r, i, a, o, s, l, u, c) {
+ var d = .25 * i + .5 * o + .25 * l,
+ h = .25 * a + .5 * s + .25 * u,
+ p = Math.min(e, n) - c,
+ f = Math.min(t, r) - c,
+ v = Math.max(e, n) + c,
+ g = Math.max(t, r) + c;
+ if (i >= p && v >= i && a >= f && g >= a) return 1;
+ if (l >= p && v >= l && u >= f && g >= u) return 1;
+ if (d >= p && v >= d && h >= f && g >= h) return 1;
+ if (o >= p && v >= o && s >= f && g >= s) return 1;
+ var y = Math.min(i, d, l),
+ m = Math.min(a, h, u),
+ x = Math.max(i, d, l),
+ b = Math.max(a, h, u);
+ return y > v || p > x || m > g || f > b ? 0 : 1
+ }, e.math.checkBezierInBox = function(t, n, r, i, a, o, s, l, u, c, d) {
+ function h(d) {
+ var h = e.math.qbezierAt(a, s, u, d),
+ p = e.math.qbezierAt(o, l, c, d);
+ return h >= t && r >= h && p >= n && i >= p
+ }
+ for (var p = 0; 1 >= p; p += .25)
+ if (!h(p)) return !1;
+ return !0
+ }, e.math.checkStraightEdgeInBox = function(e, t, n, r, i, a, o, s, l) {
+ return i >= e && n >= i && o >= e && n >= o && a >= t && r >= a && s >= t && r >= s
+ }, e.math.checkStraightEdgeCrossesBox = function(e, t, n, r, i, a, o, s, l) {
+ var u, c, d = Math.min(e, n) - l,
+ h = Math.min(t, r) - l,
+ p = Math.max(e, n) + l,
+ f = Math.max(t, r) + l,
+ v = o - i,
+ g = i,
+ y = s - a,
+ m = a;
+ if (Math.abs(v) < 1e-4) return i >= d && p >= i && Math.min(a, s) <= h && Math.max(a, s) >= f;
+ var x = (d - g) / v;
+ if (x > 0 && 1 >= x && (u = y * x + m, u >= h && f >= u)) return !0;
+ var b = (p - g) / v;
+ if (b > 0 && 1 >= b && (u = y * b + m, u >= h && f >= u)) return !0;
+ var w = (h - m) / y;
+ if (w > 0 && 1 >= w && (c = v * w + g, c >= d && p >= c)) return !0;
+ var _ = (f - m) / y;
+ return _ > 0 && 1 >= _ && (c = v * _ + g, c >= d && p >= c) ? !0 : !1
+ }, e.math.checkBezierCrossesBox = function(e, t, n, r, i, a, o, s, l, u, c) {
+ var d = Math.min(e, n) - c,
+ h = Math.min(t, r) - c,
+ p = Math.max(e, n) + c,
+ f = Math.max(t, r) + c;
+ if (i >= d && p >= i && a >= h && f >= a) return !0;
+ if (l >= d && p >= l && u >= h && f >= u) return !0;
+ var v = i - 2 * o + l,
+ g = -2 * i + 2 * o,
+ y = i,
+ m = [];
+ if (Math.abs(v) < 1e-4) {
+ var x = (d - i) / g,
+ b = (p - i) / g;
+ m.push(x, b)
+ } else {
+ var w, _, E = g * g - 4 * v * (y - d);
+ if (E > 0) {
+ var T = Math.sqrt(E);
+ w = (-g + T) / (2 * v), _ = (-g - T) / (2 * v), m.push(w, _)
+ }
+ var S, C, k = g * g - 4 * v * (y - p);
+ if (k > 0) {
+ var T = Math.sqrt(k);
+ S = (-g + T) / (2 * v), C = (-g - T) / (2 * v), m.push(S, C)
+ }
+ }
+ m.sort(function(e, t) {
+ return e - t
+ });
+ var D = a - 2 * s + u,
+ N = -2 * a + 2 * s,
+ P = a,
+ M = [];
+ if (Math.abs(D) < 1e-4) {
+ var B = (h - a) / N,
+ L = (f - a) / N;
+ M.push(B, L)
+ } else {
+ var O, A, I = N * N - 4 * D * (P - h);
+ if (I > 0) {
+ var T = Math.sqrt(I);
+ O = (-N + T) / (2 * D), A = (-N - T) / (2 * D), M.push(O, A)
+ }
+ var z, R, j = N * N - 4 * D * (P - f);
+ if (j > 0) {
+ var T = Math.sqrt(j);
+ z = (-N + T) / (2 * D), R = (-N - T) / (2 * D), M.push(z, R)
+ }
+ }
+ M.sort(function(e, t) {
+ return e - t
+ });
+ for (var F = 0; F < m.length; F += 2)
+ for (var q = 1; q < M.length; q += 2)
+ if (m[F] < M[q] && M[q] >= 0 && m[F] <= 1 && m[F + 1] > M[q - 1] && M[q - 1] <= 1 && m[F + 1] >= 0) return !0;
+ return !1
+ }, e.math.inLineVicinity = function(e, t, n, r, i, a, o) {
+ var s = o,
+ l = Math.min(n, i),
+ u = Math.max(n, i),
+ c = Math.min(r, a),
+ d = Math.max(r, a);
+ return e >= l - s && u + s >= e && t >= c - s && d + s >= t
+ }, e.math.inBezierVicinity = function(e, t, n, r, i, a, o, s, l) {
+ var u = {
+ x1: Math.min(n, o, i),
+ x2: Math.max(n, o, i),
+ y1: Math.min(r, s, a),
+ y2: Math.max(r, s, a)
+ };
+ return e < u.x1 || e > u.x2 || t < u.y1 || t > u.y2 ? !1 : !0
+ }, e.math.solveCubic = function(e, t, n, r, i) {
+ t /= e, n /= e, r /= e;
+ var a, o, s, l, u, c, d, h;
+ return o = (3 * n - t * t) / 9, s = -(27 * r) + t * (9 * n - 2 * (t * t)), s /= 54, a = o * o * o + s * s, i[1] = 0, d = t / 3, a > 0 ? (u = s + Math.sqrt(a), u = 0 > u ? -Math.pow(-u, 1 / 3) : Math.pow(u, 1 / 3), c = s - Math.sqrt(a), c = 0 > c ? -Math.pow(-c, 1 / 3) : Math.pow(c, 1 / 3), i[0] = -d + u + c, d += (u + c) / 2, i[4] = i[2] = -d, d = Math.sqrt(3) * (-c + u) / 2, i[3] = d, void(i[5] = -d)) : (i[5] = i[3] = 0, 0 === a ? (h = 0 > s ? -Math.pow(-s, 1 / 3) : Math.pow(s, 1 / 3), i[0] = -d + 2 * h, void(i[4] = i[2] = -(h + d))) : (o = -o, l = o * o * o, l = Math.acos(s / Math.sqrt(l)), h = 2 * Math.sqrt(o), i[0] = -d + h * Math.cos(l / 3), i[2] = -d + h * Math.cos((l + 2 * Math.PI) / 3), void(i[4] = -d + h * Math.cos((l + 4 * Math.PI) / 3))))
+ }, e.math.sqDistanceToQuadraticBezier = function(e, t, n, r, i, a, o, s) {
+ var l = 1 * n * n - 4 * n * i + 2 * n * o + 4 * i * i - 4 * i * o + o * o + r * r - 4 * r * a + 2 * r * s + 4 * a * a - 4 * a * s + s * s,
+ u = 9 * n * i - 3 * n * n - 3 * n * o - 6 * i * i + 3 * i * o + 9 * r * a - 3 * r * r - 3 * r * s - 6 * a * a + 3 * a * s,
+ c = 3 * n * n - 6 * n * i + n * o - n * e + 2 * i * i + 2 * i * e - o * e + 3 * r * r - 6 * r * a + r * s - r * t + 2 * a * a + 2 * a * t - s * t,
+ d = 1 * n * i - n * n + n * e - i * e + r * a - r * r + r * t - a * t,
+ h = [];
+ this.solveCubic(l, u, c, d, h);
+ for (var p = 1e-7, f = [], v = 0; 6 > v; v += 2) Math.abs(h[v + 1]) < p && h[v] >= 0 && h[v] <= 1 && f.push(h[v]);
+ f.push(1), f.push(0);
+ for (var g, y, m, x, b = -1, w = 0; w < f.length; w++) y = Math.pow(1 - f[w], 2) * n + 2 * (1 - f[w]) * f[w] * i + f[w] * f[w] * o, m = Math.pow(1 - f[w], 2) * r + 2 * (1 - f[w]) * f[w] * a + f[w] * f[w] * s, x = Math.pow(y - e, 2) + Math.pow(m - t, 2), b >= 0 ? b > x && (b = x, g = f[w]) : (b = x, g = f[w]);
+ return b
+ }, e.math.sqDistanceToFiniteLine = function(e, t, n, r, i, a) {
+ var o = [e - n, t - r],
+ s = [i - n, a - r],
+ l = s[0] * s[0] + s[1] * s[1],
+ u = o[0] * o[0] + o[1] * o[1],
+ c = o[0] * s[0] + o[1] * s[1],
+ d = c * c / l;
+ return 0 > c ? u : d > l ? (e - i) * (e - i) + (t - a) * (t - a) : u - d
+ }, e.math.pointInsidePolygon = function(e, t, n, r, i, a, o, s, l) {
+ var u = new Array(n.length),
+ c = Math.asin(s[1] / Math.sqrt(s[0] * s[0] + s[1] * s[1]));
+ s[0] < 0 ? c += Math.PI / 2 : c = -c - Math.PI / 2;
+ for (var d = Math.cos(-c), h = Math.sin(-c), p = 0; p < u.length / 2; p++) u[2 * p] = a / 2 * (n[2 * p] * d - n[2 * p + 1] * h), u[2 * p + 1] = o / 2 * (n[2 * p + 1] * d + n[2 * p] * h), u[2 * p] += r, u[2 * p + 1] += i;
+ var f;
+ if (l > 0) {
+ var v = this.expandPolygon(u, -l);
+ f = this.joinLines(v)
+ } else f = u;
+ for (var g, y, m, x, b, w = 0, _ = 0, p = 0; p < f.length / 2; p++)
+ if (g = f[2 * p], y = f[2 * p + 1], p + 1 < f.length / 2 ? (m = f[2 * (p + 1)], x = f[2 * (p + 1) + 1]) : (m = f[2 * (p + 1 - f.length / 2)], x = f[2 * (p + 1 - f.length / 2) + 1]), g == e && m == e);
+ else {
+ if (!(g >= e && e >= m || e >= g && m >= e)) continue;
+ b = (e - g) / (m - g) * (x - y) + y, b > t && w++, t > b && _++
+ }
+ return w % 2 === 0 ? !1 : !0
+ }, e.math.joinLines = function(e) {
+ for (var t, n, r, i, a, o, s, l, u = new Array(e.length / 2), c = 0; c < e.length / 4; c++) {
+ t = e[4 * c], n = e[4 * c + 1], r = e[4 * c + 2], i = e[4 * c + 3], c < e.length / 4 - 1 ? (a = e[4 * (c + 1)], o = e[4 * (c + 1) + 1], s = e[4 * (c + 1) + 2], l = e[4 * (c + 1) + 3]) : (a = e[0], o = e[1], s = e[2], l = e[3]);
+ var d = this.finiteLinesIntersect(t, n, r, i, a, o, s, l, !0);
+ u[2 * c] = d[0], u[2 * c + 1] = d[1]
+ }
+ return u
+ }, e.math.expandPolygon = function(e, t) {
+ for (var n, r, i, a, o = new Array(2 * e.length), s = 0; s < e.length / 2; s++) {
+ n = e[2 * s], r = e[2 * s + 1], s < e.length / 2 - 1 ? (i = e[2 * (s + 1)], a = e[2 * (s + 1) + 1]) : (i = e[0], a = e[1]);
+ var l = a - r,
+ u = -(i - n),
+ c = Math.sqrt(l * l + u * u),
+ d = l / c,
+ h = u / c;
+ o[4 * s] = n + d * t, o[4 * s + 1] = r + h * t, o[4 * s + 2] = i + d * t, o[4 * s + 3] = a + h * t
+ }
+ return o
+ }, e.math.intersectLineEllipse = function(e, t, n, r, i, a) {
+ var o = n - e,
+ s = r - t;
+ o /= i, s /= a;
+ var l = Math.sqrt(o * o + s * s),
+ u = l - 1;
+ if (0 > u) return [];
+ var c = u / l;
+ return [(n - e) * c + e, (r - t) * c + t]
+ }, e.math.dotProduct = function(e, t) {
+ if (2 != e.length || 2 != t.length) throw "dot product: arguments are not vectors";
+ return e[0] * t[0] + e[1] * t[1]
+ }, e.math.intersectLineCircle = function(e, t, n, r, i, a, o) {
+ var s = [n - e, r - t],
+ l = [i, a],
+ u = [e - i, t - a],
+ c = s[0] * s[0] + s[1] * s[1],
+ d = 2 * (u[0] * s[0] + u[1] * s[1]),
+ l = u[0] * u[0] + u[1] * u[1] - o * o,
+ h = d * d - 4 * c * l;
+ if (0 > h) return [];
+ var p = (-d + Math.sqrt(h)) / (2 * c),
+ f = (-d - Math.sqrt(h)) / (2 * c),
+ v = Math.min(p, f),
+ g = Math.max(p, f),
+ y = [];
+ if (v >= 0 && 1 >= v && y.push(v), g >= 0 && 1 >= g && y.push(g), 0 === y.length) return [];
+ var m = y[0] * s[0] + e,
+ x = y[0] * s[1] + t;
+ if (y.length > 1) {
+ if (y[0] == y[1]) return [m, x];
+ var b = y[1] * s[0] + e,
+ w = y[1] * s[1] + t;
+ return [m, x, b, w]
+ }
+ return [m, x]
+ }, e.math.findCircleNearPoint = function(e, t, n, r, i) {
+ var a = r - e,
+ o = i - t,
+ s = Math.sqrt(a * a + o * o),
+ l = a / s,
+ u = o / s;
+ return [e + l * n, t + u * n]
+ }, e.math.findMaxSqDistanceToOrigin = function(e) {
+ for (var t, n = 1e-6, r = 0; r < e.length / 2; r++) t = e[2 * r] * e[2 * r] + e[2 * r + 1] * e[2 * r + 1], t > n && (n = t);
+ return n
+ }, e.math.finiteLinesIntersect = function(e, t, n, r, i, a, o, s, l) {
+ var u = (o - i) * (t - a) - (s - a) * (e - i),
+ c = (n - e) * (t - a) - (r - t) * (e - i),
+ d = (s - a) * (n - e) - (o - i) * (r - t);
+ if (0 !== d) {
+ var h = u / d,
+ p = c / d;
+ return h >= 0 && 1 >= h && p >= 0 && 1 >= p ? [e + h * (n - e), t + h * (r - t)] : l ? [e + h * (n - e), t + h * (r - t)] : []
+ }
+ return 0 === u || 0 === c ? [e, n, o].sort()[1] === o ? [o, s] : [e, n, i].sort()[1] === i ? [i, a] : [i, o, n].sort()[1] === n ? [n, r] : [] : []
+ }, e.math.boxIntersectEllipse = function(e, t, n, r, i, a, o, s, l) {
+ if (e > n) {
+ var u = e;
+ e = n, n = u
+ }
+ if (t > r) {
+ var c = t;
+ t = r, r = c
+ }
+ var d = [s - a / 2 - i, l],
+ h = [s + a / 2 + i, l],
+ p = [s, l - o / 2 - i],
+ f = [s, l + o / 2 + i];
+ return n < d[0] ? !1 : e > h[0] ? !1 : t > f[1] ? !1 : r < p[1] ? !1 : e <= h[0] && h[0] <= n && t <= h[1] && h[1] <= r ? !0 : e <= d[0] && d[0] <= n && t <= d[1] && d[1] <= r ? !0 : e <= p[0] && p[0] <= n && t <= p[1] && p[1] <= r ? !0 : e <= f[0] && f[0] <= n && t <= f[1] && f[1] <= r ? !0 : (e = (e - s) / (a / 2 + i), n = (n - s) / (a / 2 + i), t = (t - l) / (o / 2 + i), r = (r - l) / (o / 2 + i), 1 >= e * e + t * t ? !0 : 1 >= n * n + t * t ? !0 : 1 >= n * n + r * r ? !0 : 1 >= e * e + r * r ? !0 : !1)
+ }, e.math.boxIntersectPolygon = function(t, n, r, i, a, o, s, l, u, c, d) {
+ if (t > r) {
+ var h = t;
+ t = r, r = h
+ }
+ if (n > i) {
+ var p = n;
+ n = i, i = p
+ }
+ var f = new Array(a.length),
+ v = Math.asin(c[1] / Math.sqrt(c[0] * c[0] + c[1] * c[1]));
+ c[0] < 0 ? v += Math.PI / 2 : v = -v - Math.PI / 2;
+ for (var g = Math.cos(-v), y = Math.sin(-v), m = 0; m < f.length / 2; m++) f[2 * m] = o / 2 * (a[2 * m] * g - a[2 * m + 1] * y), f[2 * m + 1] = s / 2 * (a[2 * m + 1] * g + a[2 * m] * y), f[2 * m] += l, f[2 * m + 1] += u;
+ for (var x = f[0], b = f[0], w = f[1], _ = f[1], m = 1; m < f.length / 2; m++) f[2 * m] > b && (b = f[2 * m]), f[2 * m] < x && (x = f[2 * m]), f[2 * m + 1] > _ && (_ = f[2 * m + 1]), f[2 * m + 1] < w && (w = f[2 * m + 1]);
+ if (x - d > r) return !1;
+ if (t > b + d) return !1;
+ if (w - d > i) return !1;
+ if (n > _ + d) return !1;
+ var E;
+ if (d > 0) {
+ var T = e.math.expandPolygon(f, -d);
+ E = e.math.joinLines(T)
+ } else E = f;
+ for (var m = 0; m < f.length / 2; m++)
+ if (t <= f[2 * m] && f[2 * m] <= r && n <= f[2 * m + 1] && f[2 * m + 1] <= i) return !0;
+ for (var m = 0; m < E.length / 2; m++) {
+ var S, C, k = E[2 * m],
+ D = E[2 * m + 1];
+ if (m < E.length / 2 - 1 ? (S = E[2 * (m + 1)], C = E[2 * (m + 1) + 1]) : (S = E[0], C = E[1]), e.math.finiteLinesIntersect(k, D, S, C, t, n, r, n, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, t, i, r, i, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, t, n, t, i, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, r, n, r, i, !1).length > 0) return !0
+ }
+ return !1
+ }, e.math.polygonIntersectLine = function(t, n, r, i, a, o, s, l) {
+ for (var u, c = [], d = new Array(r.length), h = 0; h < d.length / 2; h++) d[2 * h] = r[2 * h] * o + i, d[2 * h + 1] = r[2 * h + 1] * s + a;
+ var p;
+ if (l > 0) {
+ var f = e.math.expandPolygon(d, -l);
+ p = e.math.joinLines(f)
+ } else p = d;
+ for (var v, g, y, m, h = 0; h < p.length / 2; h++) v = p[2 * h], g = p[2 * h + 1], h < p.length / 2 - 1 ? (y = p[2 * (h + 1)], m = p[2 * (h + 1) + 1]) : (y = p[0], m = p[1]), u = this.finiteLinesIntersect(t, n, i, a, v, g, y, m), 0 !== u.length && c.push(u[0], u[1]);
+ return c
+ }, e.math.shortenIntersection = function(e, t, n) {
+ var r = [e[0] - t[0], e[1] - t[1]],
+ i = Math.sqrt(r[0] * r[0] + r[1] * r[1]),
+ a = (i - n) / i;
+ return 0 > a && (a = 1e-5), [t[0] + a * r[0], t[1] + a * r[1]]
+ }, e.math.generateUnitNgonPointsFitToSquare = function(t, n) {
+ var r = e.math.generateUnitNgonPoints(t, n);
+ return r = e.math.fitPolygonToSquare(r)
+ }, e.math.fitPolygonToSquare = function(e) {
+ for (var t, n, r = e.length / 2, i = 1 / 0, a = 1 / 0, o = -(1 / 0), s = -(1 / 0), l = 0; r > l; l++) t = e[2 * l], n = e[2 * l + 1], i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n);
+ for (var u = 2 / (o - i), c = 2 / (s - a), l = 0; r > l; l++) t = e[2 * l] = e[2 * l] * u, n = e[2 * l + 1] = e[2 * l + 1] * c, i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n);
+ if (-1 > a)
+ for (var l = 0; r > l; l++) n = e[2 * l + 1] = e[2 * l + 1] + (-1 - a);
+ return e
+ }, e.math.generateUnitNgonPoints = function(e, t) {
+ var n = 1 / e * 2 * Math.PI,
+ r = e % 2 === 0 ? Math.PI / 2 + n / 2 : Math.PI / 2;
+ r += t;
+ for (var i, a, o, s = new Array(2 * e), l = 0; e > l; l++) i = l * n + r, a = s[2 * l] = Math.cos(i), o = s[2 * l + 1] = Math.sin(-i);
+ return s
+ }, e.math.getRoundRectangleRadius = function(e, t) {
+ return Math.min(e / 4, t / 4, 8)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t, n, r) {
+ var i = {};
+ switch (i[n] = r, t) {
+ case "core":
+ case "collection":
+ e.fn[t](i)
+ }
+ if ("layout" === t) {
+ for (var o = r.prototype, s = [], l = 0; l < s.length; l++) {
+ var u = s[l];
+ o[u] = o[u] || function() {
+ return this
+ }
+ }
+ o.start && !o.run ? o.run = function() {
+ return this.start(), this
+ } : !o.start && o.run && (o.start = function() {
+ return this.run(), this
+ }), o.stop || (o.stop = function() {
+ var e = this.options;
+ return e && e.animate && e.eles.stop(), this
+ }), o.on = e.define.on({
+ layout: !0
+ }), o.one = e.define.on({
+ layout: !0,
+ unbindSelfOnTrigger: !0
+ }), o.once = e.define.on({
+ layout: !0,
+ unbindAllBindersOnTrigger: !0
+ }), o.off = e.define.off({
+ layout: !0
+ }), o.trigger = e.define.trigger({
+ layout: !0
+ }), e.define.eventAliasesOn(o)
+ }
+ return e.util.setMap({
+ map: a,
+ keys: [t, n],
+ value: r
+ })
+ }
+
+ function n(t, n) {
+ return e.util.getMap({
+ map: a,
+ keys: [t, n]
+ })
+ }
+
+ function r(t, n, r, i, a) {
+ return e.util.setMap({
+ map: o,
+ keys: [t, n, r, i],
+ value: a
+ })
+ }
+
+ function i(t, n, r, i) {
+ return e.util.getMap({
+ map: o,
+ keys: [t, n, r, i]
+ })
+ }
+ var a = {};
+ e.extensions = a;
+ var o = {};
+ e.modules = o, e.extension = function() {
+ return 2 == arguments.length ? n.apply(this, arguments) : 3 == arguments.length ? t.apply(this, arguments) : 4 == arguments.length ? i.apply(this, arguments) : 5 == arguments.length ? r.apply(this, arguments) : void e.util.error("Invalid extension access syntax")
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ var t = e[0]._cyreg = e[0]._cyreg || {};
+ return t
+ };
+ t.registerJquery = function(e) {
+ e && (e.fn.cytoscape || (e.fn.cytoscape = function(r) {
+ var i = e(this);
+ if ("get" === r) return n(i).cy;
+ if (t.is.fn(r)) {
+ var a = r,
+ o = n(i).cy;
+ if (o && o.isReady()) o.trigger("ready", [], a);
+ else {
+ var s = n(i),
+ l = s.readies = s.readies || [];
+ l.push(a)
+ }
+ } else if (t.is.plainObject(r)) return i.each(function() {
+ var t = e.extend({}, r, {
+ container: e(this)[0]
+ });
+ window.cy = cytoscape(t)
+ })
+ }, e.cytoscape = cytoscape, null == e.fn.cy && null == e.cy && (e.fn.cy = e.fn.cytoscape, e.cy = e.cytoscape)))
+ }, t.registerJquery(e), t.util.require("jquery", function(e) {
+ t.registerJquery(e)
+ })
+ }("undefined" != typeof jQuery ? jQuery : null, cytoscape),
+ function(e) {
+ "use strict";
+
+ function t() {
+ return !1
+ }
+
+ function n() {
+ return !0
+ }
+ e.Event = function(r, i) {
+ return this instanceof e.Event ? (r && r.type ? (this.originalEvent = r, this.type = r.type, this.isDefaultPrevented = r.defaultPrevented ? n : t) : this.type = r, i && (this.type = void 0 !== i.type ? i.type : this.type, this.cy = i.cy, this.cyTarget = i.cyTarget, this.cyPosition = i.cyPosition, this.cyRenderedPosition = i.cyRenderedPosition, this.namespace = i.namespace, this.layout = i.layout, this.data = i.data, this.message = i.message), void(this.timeStamp = r && r.timeStamp || +new Date)) : new e.Event(r, i)
+ }, e.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = n;
+ var e = this.originalEvent;
+ e && e.preventDefault && e.preventDefault()
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = n;
+ var e = this.originalEvent;
+ e && e.stopPropagation && e.stopPropagation()
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = n, this.stopPropagation()
+ },
+ isDefaultPrevented: t,
+ isPropagationStopped: t,
+ isImmediatePropagationStopped: t
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.define = {
+ data: function(t) {
+ var n = {
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !1,
+ allowSetting: !1,
+ allowGetting: !1,
+ settingEvent: "data",
+ settingTriggersEvent: !1,
+ triggerFnName: "trigger",
+ immutableKeys: {},
+ updateStyle: !1,
+ onSet: function(e) {},
+ canSet: function(e) {
+ return !0
+ }
+ };
+ return t = e.util.extend({}, n, t),
+ function(n, r) {
+ var i = t,
+ a = this,
+ o = void 0 !== a.length,
+ s = o ? a : [a],
+ l = o ? a[0] : a;
+ if (e.is.string(n)) {
+ if (i.allowGetting && void 0 === r) {
+ var u;
+ return l && (u = l._private[i.field][n]), u
+ }
+ if (i.allowSetting && void 0 !== r) {
+ var c = !i.immutableKeys[n];
+ if (c) {
+ for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][n] = r);
+ i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent)
+ }
+ }
+ } else if (i.allowSetting && e.is.plainObject(n)) {
+ var p, f, v = n;
+ for (p in v) {
+ f = v[p];
+ var c = !i.immutableKeys[p];
+ if (c)
+ for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][p] = f)
+ }
+ i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent)
+ } else if (i.allowBinding && e.is.fn(n)) {
+ var g = n;
+ a.bind(i.bindingEvent, g)
+ } else if (i.allowGetting && void 0 === n) {
+ var u;
+ return l && (u = l._private[i.field]), u
+ }
+ return a
+ }
+ },
+ removeData: function(t) {
+ var n = {
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !1,
+ immutableKeys: {}
+ };
+ return t = e.util.extend({}, n, t),
+ function(n) {
+ var r = t,
+ i = this,
+ a = void 0 !== i.length,
+ o = a ? i : [i];
+ if (e.is.string(n)) {
+ for (var s = n.split(/\s+/), l = s.length, u = 0; l > u; u++) {
+ var c = s[u];
+ if (!e.is.emptyString(c)) {
+ var d = !r.immutableKeys[c];
+ if (d)
+ for (var h = 0, p = o.length; p > h; h++) o[h]._private[r.field][c] = void 0
+ }
+ }
+ r.triggerEvent && i[r.triggerFnName](r.event)
+ } else if (void 0 === n) {
+ for (var h = 0, p = o.length; p > h; h++) {
+ var f = o[h]._private[r.field];
+ for (var c in f) {
+ var v = !r.immutableKeys[c];
+ v && (f[c] = void 0)
+ }
+ }
+ r.triggerEvent && i[r.triggerFnName](r.event)
+ }
+ return i
+ }
+ },
+ event: {
+ regex: /(\w+)(\.\w+)?/,
+ optionalTypeRegex: /(\w+)?(\.\w+)?/,
+ falseCallback: function() {
+ return !1
+ }
+ },
+ on: function(t) {
+ var n = {
+ unbindSelfOnTrigger: !1,
+ unbindAllBindersOnTrigger: !1
+ };
+ return t = e.util.extend({}, n, t),
+ function(n, r, i, a) {
+ var o = this,
+ s = void 0 !== o.length,
+ l = s ? o : [o],
+ u = e.is.string(n),
+ c = t;
+ if (e.is.plainObject(r) ? (a = i, i = r, r = void 0) : (e.is.fn(r) || r === !1) && (a = r, i = void 0, r = void 0), (e.is.fn(i) || i === !1) && (a = i, i = void 0), !e.is.fn(a) && a !== !1 && u) return o;
+ if (u) {
+ var d = {};
+ d[n] = a, n = d
+ }
+ for (var h in n)
+ if (a = n[h], a === !1 && (a = e.define.event.falseCallback), e.is.fn(a)) {
+ h = h.split(/\s+/);
+ for (var p = 0; p < h.length; p++) {
+ var f = h[p];
+ if (!e.is.emptyString(f)) {
+ var v = f.match(e.define.event.regex);
+ if (v)
+ for (var g = v[1], y = v[2] ? v[2] : void 0, m = {
+ callback: a,
+ data: i,
+ delegated: r ? !0 : !1,
+ selector: r,
+ selObj: new e.Selector(r),
+ type: g,
+ namespace: y,
+ unbindSelfOnTrigger: c.unbindSelfOnTrigger,
+ unbindAllBindersOnTrigger: c.unbindAllBindersOnTrigger,
+ binders: l
+ }, x = 0; x < l.length; x++) {
+ var b = l[x]._private;
+ b.listeners = b.listeners || [], b.listeners.push(m)
+ }
+ }
+ }
+ }
+ return o
+ }
+ },
+ eventAliasesOn: function(t) {
+ var n = t;
+ n.addListener = n.listen = n.bind = n.on, n.removeListener = n.unlisten = n.unbind = n.off, n.emit = n.trigger, n.pon = n.promiseOn = function(t, n) {
+ var r = this,
+ i = Array.prototype.slice.call(arguments, 0);
+ return new e.Promise(function(e, t) {
+ var n = function(t) {
+ r.off.apply(r, o), e(t)
+ },
+ a = i.concat([n]),
+ o = a.concat([]);
+ r.on.apply(r, a)
+ })
+ }
+ },
+ off: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(t, n, r) {
+ var i = this,
+ a = void 0 !== i.length,
+ o = a ? i : [i],
+ s = e.is.string(t);
+ if (0 === arguments.length) {
+ for (var l = 0; l < o.length; l++) o[l]._private.listeners = [];
+ return i
+ }
+ if ((e.is.fn(n) || n === !1) && (r = n, n = void 0), s) {
+ var u = {};
+ u[t] = r, t = u
+ }
+ for (var c in t) {
+ r = t[c], r === !1 && (r = e.define.event.falseCallback), c = c.split(/\s+/);
+ for (var d = 0; d < c.length; d++) {
+ var h = c[d];
+ if (!e.is.emptyString(h)) {
+ var p = h.match(e.define.event.optionalTypeRegex);
+ if (p)
+ for (var f = p[1] ? p[1] : void 0, v = p[2] ? p[2] : void 0, l = 0; l < o.length; l++)
+ for (var g = o[l]._private.listeners = o[l]._private.listeners || [], y = 0; y < g.length; y++) {
+ var m = g[y],
+ x = !v || v === m.namespace,
+ b = !f || m.type === f,
+ w = !r || r === m.callback,
+ _ = x && b && w;
+ _ && (g.splice(y, 1), y--)
+ }
+ }
+ }
+ }
+ return i
+ }
+ },
+ trigger: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(n, r, i) {
+ var a = this,
+ o = void 0 !== a.length,
+ s = o ? a : [a],
+ l = e.is.string(n),
+ u = e.is.plainObject(n),
+ c = e.is.event(n),
+ d = this._private.cy || (e.is.core(this) ? this : null),
+ h = d ? d.hasCompoundNodes() : !1;
+ if (l) {
+ var p = n.split(/\s+/);
+ n = [];
+ for (var f = 0; f < p.length; f++) {
+ var v = p[f];
+ if (!e.is.emptyString(v)) {
+ var g = v.match(e.define.event.regex),
+ y = g[1],
+ m = g[2] ? g[2] : void 0;
+ n.push({
+ type: y,
+ namespace: m
+ })
+ }
+ }
+ } else if (u) {
+ var x = n;
+ n = [x]
+ }
+ r ? e.is.array(r) || (r = [r]) : r = [];
+ for (var f = 0; f < n.length; f++)
+ for (var b = n[f], w = 0; w < s.length; w++) {
+ var v, _ = s[w],
+ E = _._private.listeners = _._private.listeners || [],
+ T = e.is.element(_),
+ S = T || t.layout;
+ if (c ? (v = b, v.cyTarget = v.cyTarget || _, v.cy = v.cy || d) : v = new e.Event(b, {
+ cyTarget: _,
+ cy: d,
+ namespace: b.namespace
+ }), b.layout && (v.layout = b.layout), t.layout && (v.layout = _), v.cyPosition) {
+ var C = v.cyPosition,
+ k = d.zoom(),
+ D = d.pan();
+ v.cyRenderedPosition = {
+ x: C.x * k + D.x,
+ y: C.y * k + D.y
+ }
+ }
+ i && (E = [{
+ namespace: v.namespace,
+ type: v.type,
+ callback: i
+ }]);
+ for (var N = 0; N < E.length; N++) {
+ var P = E[N],
+ M = !P.namespace || P.namespace === v.namespace,
+ B = P.type === v.type,
+ L = P.delegated ? _ !== v.cyTarget && e.is.element(v.cyTarget) && P.selObj.matches(v.cyTarget) : !0,
+ O = M && B && L;
+ if (O) {
+ var A = [v];
+ if (A = A.concat(r), P.data ? v.data = P.data : v.data = void 0, (P.unbindSelfOnTrigger || P.unbindAllBindersOnTrigger) && (E.splice(N, 1), N--), P.unbindAllBindersOnTrigger)
+ for (var I = P.binders, z = 0; z < I.length; z++) {
+ var R = I[z];
+ if (R && R !== _)
+ for (var j = R._private.listeners, F = 0; F < j.length; F++) {
+ var q = j[F];
+ q === P && (j.splice(F, 1), F--)
+ }
+ }
+ var V = P.delegated ? v.cyTarget : _,
+ X = P.callback.apply(V, A);
+ (X === !1 || v.isPropagationStopped()) && (S = !1, X === !1 && (v.stopPropagation(), v.preventDefault()))
+ }
+ }
+ if (S) {
+ var H = h ? _._private.parent : null,
+ Y = null != H && 0 !== H.length;
+ Y ? (H = H[0], H.trigger(v)) : d.trigger(v)
+ }
+ }
+ return a
+ }
+ },
+ animated: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function() {
+ var e = this,
+ t = void 0 !== e.length,
+ n = t ? e : [e],
+ r = this._private.cy || this;
+ if (!r.styleEnabled()) return !1;
+ var i = n[0];
+ return i ? i._private.animation.current.length > 0 : void 0
+ }
+ },
+ clearQueue: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function() {
+ var e = this,
+ t = void 0 !== e.length,
+ n = t ? e : [e],
+ r = this._private.cy || this;
+ if (!r.styleEnabled()) return this;
+ for (var i = 0; i < n.length; i++) {
+ var a = n[i];
+ a._private.animation.queue = []
+ }
+ return this
+ }
+ },
+ delay: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this._private.cy || this;
+ return n.styleEnabled() ? (this.animate({
+ delay: e
+ }, {
+ duration: e,
+ complete: t
+ }), this) : this
+ }
+ },
+ animate: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this,
+ r = void 0 !== n.length,
+ i = r ? n : [n],
+ a = this._private.cy || this,
+ o = !r,
+ s = !o;
+ if (!a.styleEnabled()) return this;
+ var l, u = +new Date,
+ c = a.style();
+ switch (void 0 === t && (t = {}), void 0 === t.duration && (t.duration = 400), t.duration) {
+ case "slow":
+ t.duration = 600;
+ break;
+ case "fast":
+ t.duration = 200
+ }
+ var d = !0;
+ if (e)
+ for (var h in e) {
+ d = !1;
+ break
+ }
+ if (d) return this;
+ if (e.css && s && (e.css = c.getPropsList(e.css)), e.renderedPosition && s) {
+ var p = e.renderedPosition,
+ f = a.pan(),
+ v = a.zoom();
+ e.position = {
+ x: (p.x - f.x) / v,
+ y: (p.y - f.y) / v
+ }
+ }
+ if (e.panBy && o) {
+ var g = e.panBy,
+ y = a.pan();
+ e.pan = {
+ x: y.x + g.x,
+ y: y.y + g.y
+ }
+ }
+ var m = e.center || e.centre;
+ if (m && o) {
+ var x = a.getCenterPan(m.eles, e.zoom);
+ x && (e.pan = x)
+ }
+ if (e.fit && o) {
+ var b = e.fit,
+ w = a.getFitViewport(b.eles || b.boundingBox, b.padding);
+ w && (e.pan = w.pan, e.zoom = w.zoom)
+ }
+ for (var h = 0; h < i.length; h++) {
+ var _ = i[h];
+ l = _.animated() && (void 0 === t.queue || t.queue) ? _._private.animation.queue : _._private.animation.current, l.push({
+ properties: e,
+ duration: t.duration,
+ params: t,
+ callTime: u
+ })
+ }
+ return s && a.addToAnimationPool(this), this
+ }
+ },
+ stop: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this,
+ r = void 0 !== n.length,
+ i = r ? n : [n],
+ a = this._private.cy || this;
+ if (!a.styleEnabled()) return this;
+ for (var o = 0; o < i.length; o++) {
+ for (var s = i[o], l = s._private.animation.current, u = 0; u < l.length; u++) {
+ var c = l[u];
+ t && (c.duration = 0)
+ }
+ e && (s._private.animation.queue = []), t || (s._private.animation.current = [])
+ }
+ return a.notify({
+ collection: this,
+ type: "draw"
+ }), this
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.selector = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Selector.prototype[r] = i
+ }
+ }, e.Selector = function(t, n) {
+ if (!(this instanceof e.Selector)) return new e.Selector(t, n);
+ void 0 === n && void 0 !== t && (n = t, t = void 0);
+ var r = this;
+ if (r._private = {
+ selectorText: null,
+ invalid: !0
+ }, !n || e.is.string(n) && n.match(/^\s*$/)) null == t ? r.length = 0 : (r[0] = o(), r[0].group = t, r.length = 1);
+ else if (e.is.element(n)) {
+ var i = new e.Collection(r.cy(), [n]);
+ r[0] = o(), r[0].collection = i, r.length = 1
+ } else if (e.is.collection(n)) r[0] = o(), r[0].collection = n, r.length = 1;
+ else if (e.is.fn(n)) r[0] = o(), r[0].filter = n, r.length = 1;
+ else {
+ if (!e.is.string(n)) return void e.util.error("A selector must be created from a string; found " + n);
+ var a = null,
+ o = function() {
+ return {
+ classes: [],
+ colonSelectors: [],
+ data: [],
+ group: null,
+ ids: [],
+ meta: [],
+ collection: null,
+ filter: null,
+ parent: null,
+ ancestor: null,
+ subject: null,
+ child: null,
+ descendant: null
+ }
+ },
+ s = {
+ metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",
+ comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",
+ boolOp: "\\?|\\!|\\^",
+ string: '"(?:\\\\"|[^"])+"|' + "'(?:\\\\'|[^'])+'",
+ number: e.util.regex.number,
+ meta: "degree|indegree|outdegree",
+ separator: "\\s*,\\s*",
+ descendant: "\\s+",
+ child: "\\s+>\\s+",
+ subject: "\\$"
+ };
+ s.variable = "(?:[\\w-]|(?:\\\\" + s.metaChar + "))+", s.value = s.string + "|" + s.number, s.className = s.variable, s.id = s.variable;
+ for (var l = function(e) {
+ return e.replace(new RegExp("\\\\(" + s.metaChar + ")", "g"), function(e, t, n, r) {
+ return t
+ })
+ }, u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) {
+ var d = u[c];
+ s.comparatorOp += "|@" + d
+ }
+ for (var u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) {
+ var d = u[c];
+ d.indexOf("!") >= 0 || "=" !== d && (s.comparatorOp += "|\\!" + d)
+ }
+ var h = {
+ group: {
+ query: !0,
+ regex: "(node|edge|\\*)",
+ populate: function(e) {
+ this.group = "*" == e ? e : e + "s"
+ }
+ },
+ state: {
+ query: !0,
+ regex: "(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)",
+ populate: function(e) {
+ this.colonSelectors.push(e)
+ }
+ },
+ id: {
+ query: !0,
+ regex: "\\#(" + s.id + ")",
+ populate: function(e) {
+ this.ids.push(l(e))
+ }
+ },
+ className: {
+ query: !0,
+ regex: "\\.(" + s.className + ")",
+ populate: function(e) {
+ this.classes.push(l(e))
+ }
+ },
+ dataExists: {
+ query: !0,
+ regex: "\\[\\s*(" + s.variable + ")\\s*\\]",
+ populate: function(e) {
+ this.data.push({
+ field: l(e)
+ })
+ }
+ },
+ dataCompare: {
+ query: !0,
+ regex: "\\[\\s*(" + s.variable + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.value + ")\\s*\\]",
+ populate: function(e, t, n) {
+ var r = null != new RegExp("^" + s.string + "$").exec(n);
+ n = r ? n.substring(1, n.length - 1) : parseFloat(n), this.data.push({
+ field: l(e),
+ operator: t,
+ value: n
+ })
+ }
+ },
+ dataBool: {
+ query: !0,
+ regex: "\\[\\s*(" + s.boolOp + ")\\s*(" + s.variable + ")\\s*\\]",
+ populate: function(e, t) {
+ this.data.push({
+ field: l(t),
+ operator: e
+ })
+ }
+ },
+ metaCompare: {
+ query: !0,
+ regex: "\\[\\[\\s*(" + s.meta + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.number + ")\\s*\\]\\]",
+ populate: function(e, t, n) {
+ this.meta.push({
+ field: l(e),
+ operator: t,
+ value: parseFloat(n)
+ })
+ }
+ },
+ nextQuery: {
+ separator: !0,
+ regex: s.separator,
+ populate: function() {
+ r[++c] = o(), a = null
+ }
+ },
+ child: {
+ separator: !0,
+ regex: s.child,
+ populate: function() {
+ var e = o();
+ e.parent = this, e.subject = a, r[c] = e
+ }
+ },
+ descendant: {
+ separator: !0,
+ regex: s.descendant,
+ populate: function() {
+ var e = o();
+ e.ancestor = this, e.subject = a, r[c] = e
+ }
+ },
+ subject: {
+ modifier: !0,
+ regex: s.subject,
+ populate: function() {
+ return null != a && this.subject != this ? (e.util.error("Redefinition of subject in selector `" + n + "`"), !1) : (a = this, void(this.subject = this))
+ }
+ }
+ },
+ p = 0;
+ for (var f in h) h[p] = h[f], h[p].name = f, p++;
+ h.length = p, r._private.selectorText = n;
+ var v = n,
+ c = 0,
+ g = function(t) {
+ for (var n, r, i, a = 0; a < h.length; a++) {
+ var o = h[a],
+ s = o.name;
+ if (!e.is.fn(t) || t(s, o)) {
+ var l = v.match(new RegExp("^" + o.regex));
+ if (null != l) {
+ r = l, n = o, i = s;
+ var u = l[0];
+ v = v.substring(u.length);
+ break
+ }
+ }
+ }
+ return {
+ expr: n,
+ match: r,
+ name: i
+ }
+ },
+ y = function() {
+ var e = v.match(/^\s+/);
+ if (e) {
+ var t = e[0];
+ v = v.substring(t.length)
+ }
+ };
+ for (r[0] = o(), y();;) {
+ var m = g();
+ if (null == m.expr) return void e.util.error("The selector `" + n + "`is invalid");
+ for (var x = [], p = 1; p < m.match.length; p++) x.push(m.match[p]);
+ var b = m.expr.populate.apply(r[c], x);
+ if (b === !1) return;
+ if (v.match(/^\s*$/)) break
+ }
+ for (r.length = c + 1, p = 0; p < r.length; p++) {
+ var w = r[p];
+ if (null != w.subject) {
+ for (; w.subject != w;)
+ if (null != w.parent) {
+ var _ = w.parent,
+ E = w;
+ E.parent = null, _.child = E, w = _
+ } else {
+ if (null == w.ancestor) {
+ e.util.error("When adjusting references for the selector `" + w + "`, neither parent nor ancestor was found");
+ break
+ }
+ var T = w.ancestor,
+ S = w;
+ S.ancestor = null, T.descendant = S, w = T
+ }
+ r[p] = w.subject
+ }
+ }
+ if (null != t)
+ for (var p = 0; p < r.length; p++) {
+ if (null != r[p].group && r[p].group != t) return void e.util.error("Group `" + r[p].group + "` conflicts with implicit group `" + t + "` in selector `" + n + "`");
+ r[p].group = t
+ }
+ }
+ r._private.invalid = !1
+ }, e.selfn = e.Selector.prototype, e.selfn.size = function() {
+ return this.length
+ }, e.selfn.eq = function(e) {
+ return this[e]
+ }, e.selfn.find = function() {};
+ var t = function(n, r) {
+ if (null != n.group && "*" != n.group && n.group != r._private.group) return !1;
+ for (var i = r.cy(), a = !0, o = 0; o < n.colonSelectors.length; o++) {
+ var s = n.colonSelectors[o];
+ switch (s) {
+ case ":selected":
+ a = r.selected();
+ break;
+ case ":unselected":
+ a = !r.selected();
+ break;
+ case ":selectable":
+ a = r.selectable();
+ break;
+ case ":unselectable":
+ a = !r.selectable();
+ break;
+ case ":locked":
+ a = r.locked();
+ break;
+ case ":unlocked":
+ a = !r.locked();
+ break;
+ case ":visible":
+ a = r.visible();
+ break;
+ case ":hidden":
+ a = !r.visible();
+ break;
+ case ":transparent":
+ a = r.transparent();
+ break;
+ case ":grabbed":
+ a = r.grabbed();
+ break;
+ case ":free":
+ a = !r.grabbed();
+ break;
+ case ":removed":
+ a = r.removed();
+ break;
+ case ":inside":
+ a = !r.removed();
+ break;
+ case ":grabbable":
+ a = r.grabbable();
+ break;
+ case ":ungrabbable":
+ a = !r.grabbable();
+ break;
+ case ":animated":
+ a = r.animated();
+ break;
+ case ":unanimated":
+ a = !r.animated();
+ break;
+ case ":parent":
+ a = r.isNode() && r.children().nonempty();
+ break;
+ case ":child":
+ case ":nonorphan":
+ a = r.isNode() && r.parent().nonempty();
+ break;
+ case ":orphan":
+ a = r.isNode() && r.parent().empty();
+ break;
+ case ":loop":
+ a = r.isEdge() && r.data("source") === r.data("target");
+ break;
+ case ":simple":
+ a = r.isEdge() && r.data("source") !== r.data("target");
+ break;
+ case ":active":
+ a = r.active();
+ break;
+ case ":inactive":
+ a = !r.active();
+ break;
+ case ":touch":
+ a = e.is.touch();
+ break;
+ case ":backgrounding":
+ a = r.backgrounding();
+ break;
+ case ":nonbackgrounding":
+ a = !r.backgrounding()
+ }
+ if (!a) break
+ }
+ if (!a) return !1;
+ for (var l = !0, o = 0; o < n.ids.length; o++) {
+ var u = n.ids[o],
+ c = r._private.data.id;
+ if (l = l && u == c, !l) break
+ }
+ if (!l) return !1;
+ for (var d = !0, o = 0; o < n.classes.length; o++) {
+ var h = n.classes[o];
+ if (d = d && r.hasClass(h), !d) break
+ }
+ if (!d) return !1;
+ var p = function(t) {
+ for (var r = !0, i = 0; i < n[t.name].length; i++) {
+ var a, o = n[t.name][i],
+ s = o.operator,
+ l = o.value,
+ u = o.field;
+ if (null != s && null != l) {
+ var c = t.fieldValue(u),
+ d = e.is.string(c) || e.is.number(c) ? "" + c : "",
+ h = "" + l,
+ p = !1;
+ s.indexOf("@") >= 0 && (d = d.toLowerCase(), h = h.toLowerCase(), s = s.replace("@", ""), p = !0);
+ var f = !1,
+ v = !1;
+ switch (s.indexOf("!") >= 0 && (s = s.replace("!", ""), f = !0), p && (l = h.toLowerCase(), c = d.toLowerCase()), s) {
+ case "*=":
+ a = d.search(h) >= 0;
+ break;
+ case "$=":
+ a = null != new RegExp(h + "$").exec(d);
+ break;
+ case "^=":
+ a = null != new RegExp("^" + h).exec(d);
+ break;
+ case "=":
+ a = c === l;
+ break;
+ case "!=":
+ a = c !== l;
+ break;
+ case ">":
+ a = f ? l >= c : c > l, v = !0;
+ break;
+ case ">=":
+ a = f ? l > c : c >= l, v = !0;
+ break;
+ case "<":
+ a = f ? c >= l : l > c, v = !0;
+ break;
+ case "<=":
+ a = f ? c > l : l >= c, v = !0;
+ break;
+ default:
+ a = !1
+ }
+ } else if (null != s) switch (s) {
+ case "?":
+ a = t.fieldTruthy(u);
+ break;
+ case "!":
+ a = !t.fieldTruthy(u);
+ break;
+ case "^":
+ a = t.fieldUndefined(u)
+ } else a = !t.fieldUndefined(u);
+ if (f && !v && (a = !a, v = !0), !a) {
+ r = !1;
+ break
+ }
+ }
+ return r
+ },
+ f = p({
+ name: "data",
+ fieldValue: function(e) {
+ return r._private.data[e]
+ },
+ fieldRef: function(e) {
+ return "element._private.data." + e
+ },
+ fieldUndefined: function(e) {
+ return void 0 === r._private.data[e]
+ },
+ fieldTruthy: function(e) {
+ return r._private.data[e] ? !0 : !1
+ }
+ });
+ if (!f) return !1;
+ var v = p({
+ name: "meta",
+ fieldValue: function(e) {
+ return r[e]()
+ },
+ fieldRef: function(e) {
+ return "element." + e + "()"
+ },
+ fieldUndefined: function(e) {
+ return null == r[e]()
+ },
+ fieldTruthy: function(e) {
+ return r[e]() ? !0 : !1
+ }
+ });
+ if (!v) return !1;
+ if (null != n.collection) {
+ var g = null != n.collection._private.ids[r.id()];
+ if (!g) return !1
+ }
+ if (null != n.filter && 0 === r.collection().filter(n.filter).size()) return !1;
+ var y = function(e, n) {
+ if (null != e) {
+ var r = !1;
+ if (!i.hasCompoundNodes()) return !1;
+ n = n();
+ for (var a = 0; a < n.length; a++)
+ if (t(e, n[a])) {
+ r = !0;
+ break
+ }
+ return r
+ }
+ return !0
+ };
+ return y(n.parent, function() {
+ return r.parent()
+ }) && y(n.ancestor, function() {
+ return r.parents()
+ }) && y(n.child, function() {
+ return r.children()
+ }) && y(n.descendant, function() {
+ return r.descendants()
+ }) ? !0 : !1
+ };
+ e.selfn.filter = function(n) {
+ var r = this,
+ i = n.cy();
+ if (r._private.invalid) return new e.Collection(i);
+ var a = function(e, n) {
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ if (t(a, n)) return !0
+ }
+ return !1
+ };
+ null == r._private.selectorText && (a = function() {
+ return !0
+ });
+ var o = n.filter(a);
+ return o
+ }, e.selfn.matches = function(e) {
+ var n = this;
+ if (n._private.invalid) return !1;
+ for (var r = 0; r < n.length; r++) {
+ var i = n[r];
+ if (t(i, e)) return !0
+ }
+ return !1
+ }, e.selfn.toString = e.selfn.selector = function() {
+ for (var t = "", n = function(t, n) {
+ return e.is.string(t) ? n ? '"' + t + '"' : t : ""
+ }, r = function(e) {
+ var t = "";
+ e.subject === e && (t += "$");
+ var a = n(e.group);
+ t += a.substring(0, a.length - 1);
+ for (var o = 0; o < e.data.length; o++) {
+ var s = e.data[o];
+ t += s.value ? "[" + s.field + n(s.operator) + n(s.value, !0) + "]" : "[" + n(s.operator) + s.field + "]"
+ }
+ for (var o = 0; o < e.meta.length; o++) {
+ var l = e.meta[o];
+ t += "[[" + l.field + n(l.operator) + n(l.value, !0) + "]]"
+ }
+ for (var o = 0; o < e.colonSelectors.length; o++) {
+ var u = e.colonSelectors[i];
+ t += u
+ }
+ for (var o = 0; o < e.ids.length; o++) {
+ var u = "#" + e.ids[i];
+ t += u
+ }
+ for (var o = 0; o < e.classes.length; o++) {
+ var u = "." + e.classes[i];
+ t += u
+ }
+ return null != e.parent && (t = r(e.parent) + " > " + t), null != e.ancestor && (t = r(e.ancestor) + " " + t), null != e.child && (t += " > " + r(e.child)), null != e.descendant && (t += " " + r(e.descendant)), t
+ }, i = 0; i < this.length; i++) {
+ var a = this[i];
+ t += r(a), this.length > 1 && i < this.length - 1 && (t += ", ")
+ }
+ return t
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.Style = function(t) {
+ return this instanceof e.Style ? e.is.core(t) ? (this._private = {
+ cy: t,
+ coreStyle: {},
+ newStyle: !0
+ }, this.length = 0, void this.addDefaultStylesheet()) : void e.util.error("A style must have a core reference") : new e.Style(t)
+ }, e.style = e.Style, e.styfn = e.Style.prototype, e.fn.style = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Style.prototype = i
+ }
+ },
+ function() {
+ var t = e.util.regex.number,
+ n = e.util.regex.rgbaNoBackRefs,
+ r = e.util.regex.hslaNoBackRefs,
+ i = e.util.regex.hex3,
+ a = e.util.regex.hex6,
+ o = function(e) {
+ return "^" + e + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"
+ },
+ s = function(e) {
+ return "^" + e + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + t + ")\\s*\\,\\s*(" + t + ")\\s*,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\s*\\,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\)$"
+ };
+ e.style.types = {
+ time: {
+ number: !0,
+ min: 0,
+ units: "s|ms",
+ implicitUnits: "ms"
+ },
+ percent: {
+ number: !0,
+ min: 0,
+ max: 100,
+ units: "%"
+ },
+ zeroOneNumber: {
+ number: !0,
+ min: 0,
+ max: 1,
+ unitless: !0
+ },
+ nOneOneNumber: {
+ number: !0,
+ min: -1,
+ max: 1,
+ unitless: !0
+ },
+ nonNegativeInt: {
+ number: !0,
+ min: 0,
+ integer: !0,
+ unitless: !0
+ },
+ position: {
+ enums: ["parent", "origin"]
+ },
+ autoSize: {
+ number: !0,
+ min: 0,
+ enums: ["auto"]
+ },
+ number: {
+ number: !0
+ },
+ size: {
+ number: !0,
+ min: 0
+ },
+ bgSize: {
+ number: !0,
+ min: 0,
+ allowPercent: !0
+ },
+ bgWH: {
+ number: !0,
+ min: 0,
+ allowPercent: !0,
+ enums: ["auto"]
+ },
+ bgPos: {
+ number: !0,
+ allowPercent: !0
+ },
+ bgRepeat: {
+ enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"]
+ },
+ bgFit: {
+ enums: ["none", "contain", "cover"]
+ },
+ bgClip: {
+ enums: ["none", "node"]
+ },
+ color: {
+ color: !0
+ },
+ lineStyle: {
+ enums: ["solid", "dotted", "dashed"]
+ },
+ borderStyle: {
+ enums: ["solid", "dotted", "dashed", "double"]
+ },
+ curveStyle: {
+ enums: ["bezier", "unbundled-bezier", "haystack"]
+ },
+ fontFamily: {
+ regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'
+ },
+ fontVariant: {
+ enums: ["small-caps", "normal"]
+ },
+ fontStyle: {
+ enums: ["italic", "normal", "oblique"]
+ },
+ fontWeight: {
+ enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900]
+ },
+ textDecoration: {
+ enums: ["none", "underline", "overline", "line-through"]
+ },
+ textTransform: {
+ enums: ["none", "uppercase", "lowercase"]
+ },
+ textWrap: {
+ enums: ["none", "wrap"]
+ },
+ textBackgroundShape: {
+ enums: ["rectangle", "roundrectangle"]
+ },
+ nodeShape: {
+ enums: ["rectangle", "roundrectangle", "ellipse", "triangle", "square", "pentagon", "hexagon", "heptagon", "octagon", "star", "diamond", "vee", "rhomboid"]
+ },
+ compoundIncludeLabels: {
+ enums: ["include", "exclude"]
+ },
+ arrowShape: {
+ enums: ["tee", "triangle", "triangle-tee", "triangle-backcurve", "half-triangle-overshot", "square", "circle", "diamond", "none"]
+ },
+ arrowFill: {
+ enums: ["filled", "hollow"]
+ },
+ display: {
+ enums: ["element", "none"]
+ },
+ visibility: {
+ enums: ["hidden", "visible"]
+ },
+ valign: {
+ enums: ["top", "center", "bottom"]
+ },
+ halign: {
+ enums: ["left", "center", "right"]
+ },
+ text: {
+ string: !0
+ },
+ data: {
+ mapping: !0,
+ regex: o("data")
+ },
+ layoutData: {
+ mapping: !0,
+ regex: o("layoutData")
+ },
+ scratch: {
+ mapping: !0,
+ regex: o("scratch")
+ },
+ mapData: {
+ mapping: !0,
+ regex: s("mapData")
+ },
+ mapLayoutData: {
+ mapping: !0,
+ regex: s("mapLayoutData")
+ },
+ mapScratch: {
+ mapping: !0,
+ regex: s("mapScratch")
+ },
+ fn: {
+ mapping: !0,
+ fn: !0
+ },
+ url: {
+ regex: "^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$"
+ },
+ propList: {
+ propList: !0
+ },
+ angle: {
+ number: !0,
+ units: "deg|rad"
+ },
+ textRotation: {
+ enums: ["none", "autorotate"]
+ }
+ };
+ var l = e.style.types,
+ u = e.style.properties = [{
+ name: "text-valign",
+ type: l.valign
+ }, {
+ name: "text-halign",
+ type: l.halign
+ }, {
+ name: "color",
+ type: l.color
+ }, {
+ name: "content",
+ type: l.text
+ }, {
+ name: "text-outline-color",
+ type: l.color
+ }, {
+ name: "text-outline-width",
+ type: l.size
+ }, {
+ name: "text-outline-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-background-color",
+ type: l.color
+ }, {
+ name: "text-background-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-border-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-border-color",
+ type: l.color
+ }, {
+ name: "text-border-width",
+ type: l.size
+ }, {
+ name: "text-border-style",
+ type: l.borderStyle
+ }, {
+ name: "text-background-shape",
+ type: l.textBackgroundShape
+ }, {
+ name: "text-transform",
+ type: l.textTransform
+ }, {
+ name: "text-wrap",
+ type: l.textWrap
+ }, {
+ name: "text-max-width",
+ type: l.size
+ }, {
+ name: "font-family",
+ type: l.fontFamily
+ }, {
+ name: "font-style",
+ type: l.fontStyle
+ }, {
+ name: "font-weight",
+ type: l.fontWeight
+ }, {
+ name: "font-size",
+ type: l.size
+ }, {
+ name: "min-zoomed-font-size",
+ type: l.size
+ }, {
+ name: "edge-text-rotation",
+ type: l.textRotation
+ }, {
+ name: "display",
+ type: l.display
+ }, {
+ name: "visibility",
+ type: l.visibility
+ }, {
+ name: "opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "z-index",
+ type: l.nonNegativeInt
+ }, {
+ name: "overlay-padding",
+ type: l.size
+ }, {
+ name: "overlay-color",
+ type: l.color
+ }, {
+ name: "overlay-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "shadow-blur",
+ type: l.size
+ }, {
+ name: "shadow-color",
+ type: l.color
+ }, {
+ name: "shadow-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "shadow-offset-x",
+ type: l.number
+ }, {
+ name: "shadow-offset-y",
+ type: l.number
+ }, {
+ name: "text-shadow-blur",
+ type: l.size
+ }, {
+ name: "text-shadow-color",
+ type: l.color
+ }, {
+ name: "text-shadow-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-shadow-offset-x",
+ type: l.number
+ }, {
+ name: "text-shadow-offset-y",
+ type: l.number
+ }, {
+ name: "transition-property",
+ type: l.propList
+ }, {
+ name: "transition-duration",
+ type: l.time
+ }, {
+ name: "transition-delay",
+ type: l.time
+ }, {
+ name: "height",
+ type: l.autoSize
+ }, {
+ name: "width",
+ type: l.autoSize
+ }, {
+ name: "shape",
+ type: l.nodeShape
+ }, {
+ name: "background-color",
+ type: l.color
+ }, {
+ name: "background-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "background-blacken",
+ type: l.nOneOneNumber
+ }, {
+ name: "border-color",
+ type: l.color
+ }, {
+ name: "border-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "border-width",
+ type: l.size
+ }, {
+ name: "border-style",
+ type: l.borderStyle
+ }, {
+ name: "background-image",
+ type: l.url
+ }, {
+ name: "background-image-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "background-position-x",
+ type: l.bgPos
+ }, {
+ name: "background-position-y",
+ type: l.bgPos
+ }, {
+ name: "background-repeat",
+ type: l.bgRepeat
+ }, {
+ name: "background-fit",
+ type: l.bgFit
+ }, {
+ name: "background-clip",
+ type: l.bgClip
+ }, {
+ name: "background-width",
+ type: l.bgWH
+ }, {
+ name: "background-height",
+ type: l.bgWH
+ }, {
+ name: "padding-left",
+ type: l.size
+ }, {
+ name: "padding-right",
+ type: l.size
+ }, {
+ name: "padding-top",
+ type: l.size
+ }, {
+ name: "padding-bottom",
+ type: l.size
+ }, {
+ name: "position",
+ type: l.position
+ }, {
+ name: "compound-sizing-wrt-labels",
+ type: l.compoundIncludeLabels
+ }, {
+ name: "line-style",
+ type: l.lineStyle
+ }, {
+ name: "line-color",
+ type: l.color
+ }, {
+ name: "control-point-step-size",
+ type: l.size
+ }, {
+ name: "control-point-distance",
+ type: l.number
+ }, {
+ name: "control-point-weight",
+ type: l.zeroOneNumber
+ }, {
+ name: "curve-style",
+ type: l.curveStyle
+ }, {
+ name: "haystack-radius",
+ type: l.zeroOneNumber
+ }, {
+ name: "source-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "target-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "mid-source-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "mid-target-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "source-arrow-color",
+ type: l.color
+ }, {
+ name: "target-arrow-color",
+ type: l.color
+ }, {
+ name: "mid-source-arrow-color",
+ type: l.color
+ }, {
+ name: "mid-target-arrow-color",
+ type: l.color
+ }, {
+ name: "source-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "target-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "mid-source-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "mid-target-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "selection-box-color",
+ type: l.color
+ }, {
+ name: "selection-box-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "selection-box-border-color",
+ type: l.color
+ }, {
+ name: "selection-box-border-width",
+ type: l.size
+ }, {
+ name: "active-bg-color",
+ type: l.color
+ }, {
+ name: "active-bg-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "active-bg-size",
+ type: l.size
+ }, {
+ name: "outside-texture-bg-color",
+ type: l.color
+ }, {
+ name: "outside-texture-bg-opacity",
+ type: l.zeroOneNumber
+ }];
+ e.style.pieBackgroundN = 16, u.push({
+ name: "pie-size",
+ type: l.bgSize
+ });
+ for (var c = 1; c <= e.style.pieBackgroundN; c++) u.push({
+ name: "pie-" + c + "-background-color",
+ type: l.color
+ }), u.push({
+ name: "pie-" + c + "-background-size",
+ type: l.percent
+ }), u.push({
+ name: "pie-" + c + "-background-opacity",
+ type: l.zeroOneNumber
+ });
+ for (var c = 0; c < u.length; c++) {
+ var d = u[c];
+ u[d.name] = d
+ }
+ }(), e.styfn.addDefaultStylesheet = function() {
+ var e = "Helvetica",
+ t = "normal",
+ n = "normal",
+ r = "#000",
+ i = "none",
+ a = 16,
+ o = 9999;
+ this.selector("node, edge").css({
+ "text-valign": "top",
+ "text-halign": "center",
+ color: r,
+ "text-outline-color": "#000",
+ "text-outline-width": 0,
+ "text-outline-opacity": 1,
+ "text-opacity": 1,
+ "text-decoration": "none",
+ "text-transform": i,
+ "text-wrap": "none",
+ "text-max-width": o,
+ "text-background-color": "#000",
+ "text-background-opacity": 0,
+ "text-border-opacity": 0,
+ "text-border-width": 0,
+ "text-border-style": "solid",
+ "text-border-color": "#000",
+ "text-background-shape": "rectangle",
+ "font-family": e,
+ "font-style": t,
+ "font-weight": n,
+ "font-size": a,
+ "min-zoomed-font-size": 0,
+ "edge-text-rotation": "none",
+ visibility: "visible",
+ display: "element",
+ opacity: 1,
+ "z-index": 0,
+ content: "",
+ "overlay-opacity": 0,
+ "overlay-color": "#000",
+ "overlay-padding": 10,
+ "shadow-opacity": 0,
+ "shadow-color": "#000",
+ "shadow-blur": 10,
+ "shadow-offset-x": 0,
+ "shadow-offset-y": 0,
+ "text-shadow-opacity": 0,
+ "text-shadow-color": "#000",
+ "text-shadow-blur": 5,
+ "text-shadow-offset-x": 0,
+ "text-shadow-offset-y": 0,
+ "transition-property": "none",
+ "transition-duration": 0,
+ "transition-delay": 0,
+ "background-blacken": 0,
+ "background-color": "#888",
+ "background-opacity": 1,
+ "background-image": "none",
+ "background-image-opacity": 1,
+ "background-position-x": "50%",
+ "background-position-y": "50%",
+ "background-repeat": "no-repeat",
+ "background-fit": "none",
+ "background-clip": "node",
+ "background-width": "auto",
+ "background-height": "auto",
+ "border-color": "#000",
+ "border-opacity": 1,
+ "border-width": 0,
+ "border-style": "solid",
+ height: 30,
+ width: 30,
+ shape: "ellipse",
+ "padding-top": 0,
+ "padding-bottom": 0,
+ "padding-left": 0,
+ "padding-right": 0,
+ position: "origin",
+ "compound-sizing-wrt-labels": "include",
+ "pie-size": "100%",
+ "pie-1-background-color": "black",
+ "pie-2-background-color": "black",
+ "pie-3-background-color": "black",
+ "pie-4-background-color": "black",
+ "pie-5-background-color": "black",
+ "pie-6-background-color": "black",
+ "pie-7-background-color": "black",
+ "pie-8-background-color": "black",
+ "pie-9-background-color": "black",
+ "pie-10-background-color": "black",
+ "pie-11-background-color": "black",
+ "pie-12-background-color": "black",
+ "pie-13-background-color": "black",
+ "pie-14-background-color": "black",
+ "pie-15-background-color": "black",
+ "pie-16-background-color": "black",
+ "pie-1-background-size": "0%",
+ "pie-2-background-size": "0%",
+ "pie-3-background-size": "0%",
+ "pie-4-background-size": "0%",
+ "pie-5-background-size": "0%",
+ "pie-6-background-size": "0%",
+ "pie-7-background-size": "0%",
+ "pie-8-background-size": "0%",
+ "pie-9-background-size": "0%",
+ "pie-10-background-size": "0%",
+ "pie-11-background-size": "0%",
+ "pie-12-background-size": "0%",
+ "pie-13-background-size": "0%",
+ "pie-14-background-size": "0%",
+ "pie-15-background-size": "0%",
+ "pie-16-background-size": "0%",
+ "pie-1-background-opacity": 1,
+ "pie-2-background-opacity": 1,
+ "pie-3-background-opacity": 1,
+ "pie-4-background-opacity": 1,
+ "pie-5-background-opacity": 1,
+ "pie-6-background-opacity": 1,
+ "pie-7-background-opacity": 1,
+ "pie-8-background-opacity": 1,
+ "pie-9-background-opacity": 1,
+ "pie-10-background-opacity": 1,
+ "pie-11-background-opacity": 1,
+ "pie-12-background-opacity": 1,
+ "pie-13-background-opacity": 1,
+ "pie-14-background-opacity": 1,
+ "pie-15-background-opacity": 1,
+ "pie-16-background-opacity": 1,
+ "source-arrow-shape": "none",
+ "mid-source-arrow-shape": "none",
+ "target-arrow-shape": "none",
+ "mid-target-arrow-shape": "none",
+ "source-arrow-color": "#ddd",
+ "mid-source-arrow-color": "#ddd",
+ "target-arrow-color": "#ddd",
+ "mid-target-arrow-color": "#ddd",
+ "source-arrow-fill": "filled",
+ "mid-source-arrow-fill": "filled",
+ "target-arrow-fill": "filled",
+ "mid-target-arrow-fill": "filled",
+ "line-style": "solid",
+ "line-color": "#ddd",
+ "control-point-step-size": 40,
+ "control-point-weight": .5,
+ "curve-style": "bezier",
+ "haystack-radius": .8
+ }).selector("$node > node").css({
+ width: "auto",
+ height: "auto",
+ shape: "rectangle",
+ "background-opacity": .5,
+ "padding-top": 10,
+ "padding-right": 10,
+ "padding-left": 10,
+ "padding-bottom": 10
+ }).selector("edge").css({
+ width: 1
+ }).selector(":active").css({
+ "overlay-color": "black",
+ "overlay-padding": 10,
+ "overlay-opacity": .25
+ }).selector("core").css({
+ "selection-box-color": "#ddd",
+ "selection-box-opacity": .65,
+ "selection-box-border-color": "#aaa",
+ "selection-box-border-width": 1,
+ "active-bg-color": "black",
+ "active-bg-opacity": .15,
+ "active-bg-size": 30,
+ "outside-texture-bg-color": "#000",
+ "outside-texture-bg-opacity": .125
+ }), this.defaultLength = this.length
+ }, e.styfn.clear = function() {
+ for (var e = 0; e < this.length; e++) this[e] = void 0;
+ return this.length = 0, this._private.newStyle = !0, this
+ }, e.styfn.resetToDefault = function() {
+ return this.clear(), this.addDefaultStylesheet(), this
+ }, e.styfn.core = function() {
+ return this._private.coreStyle
+ }, e.styfn.parse = function(t, n, r, i) {
+ var a, o = [t, n, r, i].join("$"),
+ s = this.propCache = this.propCache || {};
+ return (a = s[o]) || (a = s[o] = this.parseImpl(t, n, r, i)), e.util.copy(a)
+ }, e.styfn.parseImpl = function(t, n, r, i) {
+ t = e.util.camel2dash(t);
+ var a = e.style.properties[t],
+ o = n,
+ s = e.style.types;
+ if (!a) return null;
+ if (void 0 === n || null === n) return null;
+ var l = e.is.string(n);
+ l && (n = e.util.trim(n));
+ var u = a.type;
+ if (!u) return null;
+ if (r && ("" === n || null === n)) return {
+ name: t,
+ value: n,
+ bypass: !0,
+ deleteBypass: !0
+ };
+ var c = t.match(/pie-(\d+)-background-size/);
+ if (e.is.fn(n)) return {
+ name: t,
+ value: n,
+ strValue: "fn",
+ mapped: s.fn,
+ bypass: r,
+ hasPie: c
+ };
+ var d, h, p, f, v, g;
+ if (!l || i);
+ else {
+ if ((d = new RegExp(s.data.regex).exec(n)) || (p = new RegExp(s.layoutData.regex).exec(n)) || (v = new RegExp(s.scratch.regex).exec(n))) {
+ if (r) return !1;
+ var y;
+ return y = d ? s.data : p ? s.layoutData : s.scratch, d = d || p || v, {
+ name: t,
+ value: d,
+ strValue: "" + n,
+ mapped: y,
+ field: d[1],
+ bypass: r,
+ hasPie: c
+ }
+ }
+ if ((h = new RegExp(s.mapData.regex).exec(n)) || (f = new RegExp(s.mapLayoutData.regex).exec(n)) || (g = new RegExp(s.mapScratch.regex).exec(n))) {
+ if (r) return !1;
+ var y;
+ if (y = h ? s.mapData : f ? s.mapLayoutData : s.mapScratch, h = h || f || g, !u.color && !u.number) return !1;
+ var m = this.parse(t, h[4]);
+ if (!m || m.mapped) return !1;
+ var x = this.parse(t, h[5]);
+ if (!x || x.mapped) return !1;
+ if (m.value === x.value) return !1;
+ if (u.color) {
+ var b = m.value,
+ w = x.value,
+ _ = !(b[0] !== w[0] || b[1] !== w[1] || b[2] !== w[2] || b[3] !== w[3] && (null != b[3] && 1 !== b[3] || null != w[3] && 1 !== w[3]));
+ if (_) return !1
+ }
+ return {
+ name: t,
+ value: h,
+ strValue: "" + n,
+ mapped: y,
+ field: h[1],
+ fieldMin: parseFloat(h[2]),
+ fieldMax: parseFloat(h[3]),
+ valueMin: m.value,
+ valueMax: x.value,
+ bypass: r,
+ hasPie: c
+ }
+ }
+ }
+ if (u.number) {
+ var E, T = "px";
+ if (u.units && (E = u.units), u.implicitUnits && (T = u.implicitUnits), !u.unitless)
+ if (l) {
+ var S = "px|em" + (u.allowPercent ? "|\\%" : "");
+ E && (S = E);
+ var C = n.match("^(" + e.util.regex.number + ")(" + S + ")?$");
+ C && (n = C[1], E = C[2] || T)
+ } else(!E || u.implicitUnits) && (E = T);
+ if (n = parseFloat(n), isNaN(n) && void 0 === u.enums) return null;
+ if (isNaN(n) && void 0 !== u.enums) {
+ n = o;
+ for (var k = 0; k < u.enums.length; k++) {
+ var D = u.enums[k];
+ if (D === n) return {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ }
+ }
+ return null
+ }
+ if (u.integer && !e.is.integer(n)) return null;
+ if (void 0 !== u.min && n < u.min || void 0 !== u.max && n > u.max) return null;
+ var N = {
+ name: t,
+ value: n,
+ strValue: "" + n + (E ? E : ""),
+ units: E,
+ bypass: r,
+ hasPie: c && null != n && 0 !== n && "" !== n
+ };
+ return u.unitless || "px" !== E && "em" !== E || (N.pxValue = "px" !== E && E ? this.getEmSizeInPixels() * n : n), ("ms" === E || "s" === E) && (N.msValue = "ms" === E ? n : 1e3 * n), N
+ }
+ if (u.propList) {
+ var P = [],
+ M = "" + n;
+ if ("none" === M);
+ else {
+ for (var B = M.split(","), k = 0; k < B.length; k++) {
+ var L = e.util.trim(B[k]);
+ e.style.properties[L] && P.push(L)
+ }
+ if (0 === P.length) return null
+ }
+ return {
+ name: t,
+ value: P,
+ strValue: 0 === P.length ? "none" : P.join(", "),
+ bypass: r
+ }
+ }
+ if (u.color) {
+ var O = e.util.color2tuple(n);
+ return O ? {
+ name: t,
+ value: O,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }
+ if (u.enums) {
+ for (var k = 0; k < u.enums.length; k++) {
+ var D = u.enums[k];
+ if (D === n) return {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ }
+ }
+ return null
+ }
+ if (u.regex) {
+ var A = new RegExp(u.regex),
+ I = A.exec(n);
+ return I ? {
+ name: t,
+ value: I,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }
+ return u.string ? {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }, e.styfn.selector = function(t) {
+ var n = "core" === t ? null : new e.Selector(t),
+ r = this.length++;
+ return this[r] = {
+ selector: n,
+ properties: [],
+ mappedProperties: [],
+ index: r
+ }, this
+ }, e.styfn.css = function() {
+ var t = arguments;
+ switch (t.length) {
+ case 1:
+ for (var n = t[0], r = 0; r < e.style.properties.length; r++) {
+ var i = e.style.properties[r],
+ a = n[i.name];
+ void 0 === a && (a = n[e.util.dash2camel(i.name)]), void 0 !== a && this.cssRule(i.name, a)
+ }
+ break;
+ case 2:
+ this.cssRule(t[0], t[1])
+ }
+ return this
+ }, e.styfn.style = e.styfn.css, e.styfn.cssRule = function(e, t) {
+ var n = this.parse(e, t);
+ if (n) {
+ var r = this.length - 1;
+ this[r].properties.push(n), this[r].properties[n.name] = n, n.hasPie && (this._private.hasPie = !0), n.mapped && this[r].mappedProperties.push(n);
+ var i = !this[r].selector;
+ i && (this._private.coreStyle[n.name] = n)
+ }
+ return this
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.styfn.apply = function(e) {
+ var t = this;
+ t._private.newStyle && (this._private.contextStyles = {}, this._private.propDiffs = {});
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = t.getContextMeta(r),
+ a = t.getContextStyle(i),
+ o = t.applyContextStyle(i, a, r);
+ t.updateTransitions(r, o.diffProps), t.updateStyleHints(r)
+ }
+ t._private.newStyle = !1
+ }, e.styfn.getPropertiesDiff = function(e, t) {
+ var n = this,
+ r = n._private.propDiffs = n._private.propDiffs || {},
+ i = e + "-" + t,
+ a = r[i];
+ if (a) return a;
+ for (var o = [], s = {}, l = 0; l < n.length; l++) {
+ var u = n[l],
+ c = "t" === e[l],
+ d = "t" === t[l],
+ h = c !== d,
+ p = u.mappedProperties.length > 0;
+ if (h || p) {
+ var f;
+ h && p ? f = u.properties : h ? f = u.properties : p && (f = u.mappedProperties);
+ for (var v = 0; v < f.length; v++) {
+ for (var g = f[v], y = g.name, m = !1, x = l + 1; x < n.length; x++) {
+ var b = n[x],
+ w = "t" === t[x];
+ if (w && (m = null != b.properties[g.name])) break
+ }
+ s[y] || m || (s[y] = !0, o.push(y))
+ }
+ }
+ }
+ return r[i] = o, o
+ }, e.styfn.getContextMeta = function(e) {
+ var t, n = this,
+ r = "",
+ i = e._private.styleCxtKey || "";
+ n._private.newStyle && (i = "");
+ for (var a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o.selector && o.selector.matches(e);
+ r += s ? "t" : "f"
+ }
+ return t = n.getPropertiesDiff(i, r), e._private.styleCxtKey = r, {
+ key: r,
+ diffPropNames: t
+ }
+ }, e.styfn.getContextStyle = function(e) {
+ var t = e.key,
+ n = this,
+ r = this._private.contextStyles = this._private.contextStyles || {};
+ if (r[t]) return r[t];
+ for (var i = {
+ _private: {
+ key: t
+ }
+ }, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = "t" === t[a];
+ if (s)
+ for (var l = 0; l < o.properties.length; l++) {
+ var u = o.properties[l],
+ c = i[u.name] = u;
+ c.context = o
+ }
+ }
+ return r[t] = i, i
+ }, e.styfn.applyContextStyle = function(e, t, n) {
+ for (var r = this, i = e.diffPropNames, a = {}, o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = t[s],
+ u = n._private.style[s];
+ if (l && u !== l) {
+ var c = a[s] = {
+ prev: u
+ };
+ r.applyParsedProperty(n, l), c.next = n._private.style[s], c.next && c.next.bypass && (c.next = c.next.bypassed)
+ }
+ }
+ return {
+ diffProps: a
+ }
+ }, e.styfn.updateStyleHints = function(t) {
+ var n = t._private,
+ r = this,
+ i = n.style,
+ a = !1;
+ if ("nodes" === n.group && r._private.hasPie)
+ for (var o = 1; o <= e.style.pieBackgroundN; o++) {
+ var s = n.style["pie-" + o + "-background-size"].value;
+ if (s > 0) {
+ a = !0;
+ break
+ }
+ }
+ n.hasPie = a;
+ var l = i["text-transform"].strValue,
+ u = i.content.strValue,
+ c = i["font-style"].strValue,
+ s = i["font-size"].pxValue + "px",
+ d = i["font-family"].strValue,
+ h = i["font-weight"].strValue,
+ p = i["text-valign"].strValue,
+ f = i["text-valign"].strValue,
+ v = i["text-outline-width"].pxValue,
+ g = i["text-wrap"].strValue,
+ y = i["text-max-width"].pxValue;
+ n.labelKey = c + "$" + s + "$" + d + "$" + h + "$" + u + "$" + l + "$" + p + "$" + f + "$" + v + "$" + g + "$" + y, n.fontKey = c + "$" + h + "$" + s + "$" + d;
+ var m = i.width.pxValue,
+ x = i.height.pxValue,
+ b = i["border-width"].pxValue;
+ if (n.boundingBoxKey = m + "$" + x + "$" + b, "edges" === t._private.group) {
+ var w = i["control-point-step-size"].pxValue,
+ _ = i["control-point-distance"] ? i["control-point-distance"].pxValue : void 0,
+ E = i["control-point-weight"].value,
+ T = i["curve-style"].strValue;
+ n.boundingBoxKey += "$" + w + "$" + _ + "$" + E + "$" + T
+ }
+ n.styleKey = Date.now()
+ }, e.styfn.applyParsedProperty = function(t, n) {
+ var r, i, a = n,
+ o = t._private.style,
+ s = e.style.types,
+ l = e.style.properties[a.name].type,
+ u = a.bypass,
+ c = o[a.name],
+ d = c && c.bypass,
+ h = t._private;
+ if (("height" === n.name || "width" === n.name) && t.isNode()) {
+ if ("auto" === n.value && !t.isParent()) return !1;
+ "auto" !== n.value && t.isParent() && (a = n = this.parse(n.name, "auto", u))
+ }
+ if (u && a.deleteBypass) {
+ var p = o[a.name];
+ return p ? p.bypass && p.bypassed ? (o[a.name] = p.bypassed, !0) : !1 : !0
+ }
+ var f = function() {
+ e.util.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + t.id() + "` for property `" + a.name + "` with data field `" + a.field + "`); try a `[" + a.field + "]` selector to limit scope to elements with `" + a.field + "` defined")
+ };
+ switch (a.mapped) {
+ case s.mapData:
+ case s.mapLayoutData:
+ case s.mapScratch:
+ var r, v = a.mapped === s.mapLayoutData,
+ g = a.mapped === s.mapScratch,
+ y = a.field.split(".");
+ r = g || v ? h.scratch : h.data;
+ for (var m = 0; m < y.length && r; m++) {
+ var x = y[m];
+ r = r[x]
+ }
+ var b;
+ if (b = e.is.number(r) ? (r - a.fieldMin) / (a.fieldMax - a.fieldMin) : 0, 0 > b ? b = 0 : b > 1 && (b = 1), l.color) {
+ var w = a.valueMin[0],
+ _ = a.valueMax[0],
+ E = a.valueMin[1],
+ T = a.valueMax[1],
+ S = a.valueMin[2],
+ C = a.valueMax[2],
+ k = null == a.valueMin[3] ? 1 : a.valueMin[3],
+ D = null == a.valueMax[3] ? 1 : a.valueMax[3],
+ N = [Math.round(w + (_ - w) * b), Math.round(E + (T - E) * b), Math.round(S + (C - S) * b), Math.round(k + (D - k) * b)];
+ i = {
+ bypass: a.bypass,
+ name: a.name,
+ value: N,
+ strValue: "rgb(" + N[0] + ", " + N[1] + ", " + N[2] + ")"
+ }
+ } else {
+ if (!l.number) return !1;
+ var P = a.valueMin + (a.valueMax - a.valueMin) * b;
+ i = this.parse(a.name, P, a.bypass, !0)
+ }
+ i || (i = this.parse(a.name, c.strValue, a.bypass, !0)), i || f(), i.mapping = a, a = i;
+ break;
+ case s.data:
+ case s.layoutData:
+ case s.scratch:
+ var r, v = a.mapped === s.layoutData,
+ g = a.mapped === s.scratch,
+ y = a.field.split(".");
+ if (r = g || v ? h.scratch : h.data)
+ for (var m = 0; m < y.length; m++) {
+ var x = y[m];
+ r = r[x]
+ }
+ if (i = this.parse(a.name, r, a.bypass, !0), !i) {
+ var M = c ? c.strValue : "";
+ i = this.parse(a.name, M, a.bypass, !0)
+ }
+ i || f(), i.mapping = a, a = i;
+ break;
+ case s.fn:
+ var B = a.value,
+ L = B(t);
+ i = this.parse(a.name, L, a.bypass, !0), i.mapping = a, a = i;
+ break;
+ case void 0:
+ break;
+ default:
+ return !1
+ }
+ return u ? (d ? a.bypassed = c.bypassed : a.bypassed = c, o[a.name] = a) : d ? c.bypassed = a : o[a.name] = a, !0
+ }, e.styfn.update = function() {
+ var e = this._private.cy,
+ t = e.elements();
+ t.updateStyle()
+ }, e.styfn.updateMappers = function(t) {
+ for (var n = 0; n < t.length; n++) {
+ for (var r = t[n], i = r._private.style, a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = i[o.name];
+ if (s && s.mapping) {
+ var l = s.mapping;
+ this.applyParsedProperty(r, l)
+ }
+ }
+ this.updateStyleHints(r)
+ }
+ }, e.styfn.updateTransitions = function(t, n, r) {
+ var i = this,
+ a = t._private.style,
+ o = a["transition-property"].value,
+ s = a["transition-duration"].msValue,
+ l = a["transition-delay"].msValue,
+ u = {};
+ if (o.length > 0 && s > 0) {
+ for (var c = !1, d = 0; d < o.length; d++) {
+ var h = o[d],
+ p = a[h],
+ f = n[h];
+ if (f) {
+ var v, g = f.prev,
+ y = g,
+ m = null != f.next ? f.next : p,
+ x = !1,
+ b = 1e-6;
+ y && (e.is.number(y.pxValue) && e.is.number(m.pxValue) ? (x = m.pxValue - y.pxValue, v = y.pxValue + b * x) : e.is.number(y.value) && e.is.number(m.value) ? (x = m.value - y.value, v = y.value + b * x) : e.is.array(y.value) && e.is.array(m.value) && (x = y.value[0] !== m.value[0] || y.value[1] !== m.value[1] || y.value[2] !== m.value[2], v = y.strValue), x && (u[h] = m.strValue, this.applyBypass(t, h, v), c = !0))
+ }
+ }
+ if (!c) return;
+ t._private.transitioning = !0, t.stop(), l > 0 && t.delay(l), t.animate({
+ css: u
+ }, {
+ duration: s,
+ queue: !1,
+ complete: function() {
+ r || i.removeBypasses(t, o), t._private.transitioning = !1
+ }
+ })
+ } else t._private.transitioning && (t.stop(), this.removeBypasses(t, o), t._private.transitioning = !1)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.styfn.applyBypass = function(t, n, r, i) {
+ var a = [],
+ o = !0;
+ if ("*" === n || "**" === n) {
+ if (void 0 !== r)
+ for (var s = 0; s < e.style.properties.length; s++) {
+ var l = e.style.properties[s],
+ n = l.name,
+ u = this.parse(n, r, !0);
+ u && a.push(u)
+ }
+ } else if (e.is.string(n)) {
+ var u = this.parse(n, r, !0);
+ u && a.push(u)
+ } else {
+ if (!e.is.plainObject(n)) return !1;
+ var c = n;
+ i = r;
+ for (var s = 0; s < e.style.properties.length; s++) {
+ var l = e.style.properties[s],
+ n = l.name,
+ r = c[n];
+ if (void 0 === r && (r = c[e.util.dash2camel(n)]), void 0 !== r) {
+ var u = this.parse(n, r, !0);
+ u && a.push(u)
+ }
+ }
+ }
+ if (0 === a.length) return !1;
+ for (var d = !1, s = 0; s < t.length; s++) {
+ for (var h, p = t[s], f = p._private.style, v = {}, g = 0; g < a.length; g++) {
+ var l = a[g];
+ if (i) {
+ var y = f[l.name];
+ h = v[l.name] = {
+ prev: y
+ }
+ }
+ d = this.applyParsedProperty(p, l) || d, i && (h.next = f[l.name])
+ }
+ i && this.updateTransitions(p, v, o)
+ }
+ return d
+ }, e.styfn.overrideBypass = function(t, n, r) {
+ for (var i = 0; i < t.length; i++) {
+ var a = t[i],
+ o = a._private.style[e.util.camel2dash(n)];
+ o.bypass ? (o.value = r, o.pxValue = r) : this.applyBypass(a, n, r)
+ }
+ }, e.styfn.removeAllBypasses = function(t, n) {
+ for (var r = !0, i = 0; i < t.length; i++) {
+ for (var a = t[i], o = {}, s = a._private.style, l = 0; l < e.style.properties.length; l++) {
+ var u = e.style.properties[l],
+ c = u.name,
+ d = "",
+ h = this.parse(c, d, !0),
+ p = s[u.name],
+ f = o[u.name] = {
+ prev: p
+ };
+ this.applyParsedProperty(a, h), f.next = s[u.name]
+ }
+ n && this.updateTransitions(a, o, r)
+ }
+ }, e.styfn.removeBypasses = function(t, n, r) {
+ for (var i = !0, a = 0; a < t.length; a++) {
+ for (var o = t[a], s = {}, l = o._private.style, u = 0; u < n.length; u++) {
+ var c = n[u],
+ d = e.style.properties[c],
+ h = "",
+ p = this.parse(c, h, !0),
+ f = l[d.name],
+ v = s[d.name] = {
+ prev: f
+ };
+ this.applyParsedProperty(o, p), v.next = l[d.name]
+ }
+ r && this.updateTransitions(o, s, i)
+ }
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ e.styfn.getEmSizeInPixels = function() {
+ var e = this._private.cy,
+ n = e.container();
+ if (t && n && t.getComputedStyle) {
+ var r = t.getComputedStyle(n).getPropertyValue("font-size"),
+ i = parseFloat(r);
+ return i
+ }
+ return 1
+ }, e.styfn.containerCss = function(e) {
+ var n = this._private.cy,
+ r = n.container();
+ return t && r && t.getComputedStyle ? t.getComputedStyle(r).getPropertyValue(e) : void 0
+ }, e.styfn.containerProperty = function(e) {
+ var t = this.containerCss(e),
+ n = this.parse(e, t);
+ return n
+ }, e.styfn.containerPropertyAsString = function(e) {
+ var t = this.containerProperty(e);
+ return t ? t.strValue : void 0
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.styfn.getRenderedStyle = function(t) {
+ var t = t[0];
+ if (t) {
+ for (var n = {}, r = t._private.style, i = this._private.cy, a = i.zoom(), o = 0; o < e.style.properties.length; o++) {
+ var s = e.style.properties[o],
+ l = r[s.name];
+ if (l) {
+ var u = l.unitless ? l.strValue : l.pxValue * a + "px";
+ n[s.name] = u, n[e.util.dash2camel(s.name)] = u
+ }
+ }
+ return n
+ }
+ }, e.styfn.getRawStyle = function(t) {
+ var t = t[0];
+ if (t) {
+ for (var n = {}, r = t._private.style, i = 0; i < e.style.properties.length; i++) {
+ var a = e.style.properties[i],
+ o = r[a.name];
+ o && (n[a.name] = o.strValue, n[e.util.dash2camel(a.name)] = o.strValue)
+ }
+ return n
+ }
+ }, e.styfn.getValueStyle = function(t) {
+ var n, r = {},
+ i = e.is.element(t);
+ if (n = i ? t._private.style : t)
+ for (var a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = n[o.name] || n[e.util.dash2camel(o.name)];
+ void 0 === s || e.is.plainObject(s) || (s = this.parse(o.name, s)), s && (r[o.name] = s, r[e.util.dash2camel(o.name)] = s)
+ }
+ return r
+ }, e.styfn.getPropsList = function(t) {
+ var n = [],
+ r = t,
+ i = e.style.properties;
+ if (r)
+ for (var a in r) {
+ var o = r[a],
+ s = i[a] || i[e.util.camel2dash(a)],
+ l = this.parse(s.name, o);
+ n.push(l)
+ }
+ return n
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.style.applyFromJson = function(e, t) {
+ for (var n = 0; n < t.length; n++) {
+ var r = t[n],
+ i = r.selector,
+ a = r.style || r.css;
+ e.selector(i);
+ for (var o in a) {
+ var s = a[o];
+ e.css(o, s)
+ }
+ }
+ return e
+ }, e.style.fromJson = function(t, n) {
+ var r = new e.Style(t);
+ return e.style.applyFromJson(r, n), r
+ }, e.styfn.fromJson = function(t) {
+ var n = this;
+ return n.resetToDefault(), e.style.applyFromJson(n, t), n
+ }, e.styfn.json = function() {
+ for (var e = [], t = this.defaultLength; t < this.length; t++) {
+ for (var n = this[t], r = n.selector, i = n.properties, a = {}, o = 0; o < i.length; o++) {
+ var s = i[o];
+ a[s.name] = s.strValue
+ }
+ e.push({
+ selector: r ? r.toString() : "core",
+ style: a
+ })
+ }
+ return e
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.style.applyFromString = function(t, n) {
+ function r() {
+ l = l.length > a.length ? l.substr(a.length) : ""
+ }
+
+ function i() {
+ o = o.length > s.length ? o.substr(s.length) : ""
+ }
+ var a, o, s, l = "" + n;
+ for (l = l.replace(/[/][*](\s|.)+?[*][/]/g, "");;) {
+ var u = l.match(/^\s*$/);
+ if (u) break;
+ var c = l.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);
+ if (!c) {
+ e.util.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + l);
+ break
+ }
+ a = c[0];
+ var d = c[1];
+ if ("core" !== d) {
+ var h = new e.Selector(d);
+ if (h._private.invalid) {
+ e.util.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + d), r();
+ continue
+ }
+ }
+ var p = c[2],
+ f = !1;
+ o = p;
+ for (var v = [];;) {
+ var u = o.match(/^\s*$/);
+ if (u) break;
+ var g = o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);
+ if (!g) {
+ e.util.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + p), f = !0;
+ break
+ }
+ s = g[0];
+ var y = g[1],
+ m = g[2],
+ x = e.style.properties[y];
+ if (x) {
+ var b = t.parse(y, m);
+ b ? (v.push({
+ name: y,
+ val: m
+ }), i()) : (e.util.error("Skipping property: Invalid property definition in: " + s), i())
+ } else e.util.error("Skipping property: Invalid property name in: " + s), i()
+ }
+ if (f) {
+ r();
+ break
+ }
+ t.selector(d);
+ for (var w = 0; w < v.length; w++) {
+ var x = v[w];
+ t.css(x.name, x.val)
+ }
+ r()
+ }
+ return t
+ }, e.style.fromString = function(t, n) {
+ var r = new e.Style(t);
+ return e.style.applyFromString(r, n), r
+ }, e.styfn.fromString = function(t) {
+ var n = this;
+ return n.resetToDefault(), e.style.applyFromString(n, t), n
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.stylesheet = e.Stylesheet = function() {
+ return this instanceof e.Stylesheet ? void(this.length = 0) : new e.Stylesheet
+ }, e.sheetfn = e.Stylesheet.prototype, e.sheetfn.selector = function(e) {
+ var t = this.length++;
+ return this[t] = {
+ selector: e,
+ properties: []
+ }, this
+ }, e.sheetfn.css = function(t, n) {
+ var r = this.length - 1;
+ if (e.is.string(t)) this[r].properties.push({
+ name: t,
+ value: n
+ });
+ else if (e.is.plainObject(t))
+ for (var i = t, a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = i[o.name];
+ if (void 0 === s && (s = i[e.util.dash2camel(o.name)]), void 0 !== s) {
+ var t = o.name,
+ n = s;
+ this[r].properties.push({
+ name: t,
+ value: n
+ })
+ }
+ }
+ return this
+ }, e.sheetfn.style = e.sheetfn.css, e.sheetfn.generateStyle = function(t) {
+ for (var n = new e.Style(t), r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = i.selector,
+ o = i.properties;
+ n.selector(a);
+ for (var s = 0; s < o.length; s++) {
+ var l = o[s];
+ n.css(l.name, l.value)
+ }
+ }
+ return n
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ e.Thread = function(t) {
+ return this instanceof e.Thread ? (this._private = {
+ requires: [],
+ files: [],
+ queue: null,
+ pass: []
+ }, void(t && this.run(t))) : new e.Thread(t)
+ }, e.thread = e.Thread, e.thdfn = e.Thread.prototype, e.fn.thread = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Thread.prototype[r] = i
+ }
+ };
+ var n = function(t) {
+ var n = e.is.fn(t) ? t.toString() : 'JSON.parse("' + JSON.stringify(t) + '")';
+ return n
+ },
+ r = function(t) {
+ var i, o;
+ e.is.object(t) && t.fn ? (i = a(t.fn, t.name), o = t.name, t = t.fn) : e.is.fn(t) ? (i = t.toString(), o = t.name) : e.is.string(t) ? i = t : e.is.object(t) && (i = t.proto ? "" : t.name + " = {};", o = t.name, t = t.obj), i += "\n";
+ var s = function(e, t) {
+ if (e.prototype) {
+ var n = !1;
+ for (var a in e.prototype) {
+ n = !0;
+ break
+ }
+ n && (i += r({
+ name: t,
+ obj: e,
+ proto: !0
+ }, e))
+ }
+ };
+ if (t.prototype && null != o)
+ for (var l in t.prototype) {
+ var u = "",
+ c = t.prototype[l],
+ d = n(c),
+ h = o + ".prototype." + l;
+ u += h + " = " + d + ";\n", u && (i += u), s(c, h)
+ }
+ if (!e.is.string(t))
+ for (var l in t) {
+ var p = "";
+ if (t.hasOwnProperty(l)) {
+ var c = t[l],
+ d = n(c),
+ h = o + '["' + l + '"]';
+ p += h + " = " + d + ";\n"
+ }
+ p && (i += p), s(c, h)
+ }
+ return i
+ },
+ i = function(t) {
+ return e.is.string(t) && t.match(/\.js$/)
+ };
+ e.fn.thread({
+ require: function(t, n) {
+ return i(t) ? (this._private.files.push(t), this) : (n && (e.is.fn(t) ? (n = n || t.name, t = {
+ name: n,
+ fn: t
+ }) : t = {
+ name: n,
+ obj: t
+ }), this._private.requires.push(t), this)
+ },
+ pass: function(e) {
+ return this._private.pass.push(e), this
+ },
+ run: function(n, i) {
+ var a = this,
+ o = this._private;
+ if (i = i || o.pass.shift(), o.stopped) return void e.util.error("Attempted to run a stopped thread! Start a new thread or do not stop the existing thread and reuse it.");
+ if (o.running) return o.queue = o.queue.then(function() {
+ return a.run(n, i)
+ });
+ var s = null != t,
+ l = "undefined" != typeof module;
+ a.trigger("run");
+ var u = new e.Promise(function(u, c) {
+ o.running = !0;
+ var d = o.ran,
+ h = e.is.string(n) ? n : n.toString(),
+ p = "\n" + o.requires.map(function(e) {
+ return r(e)
+ }).concat(o.files.map(function(e) {
+ if (s) {
+ var n = function(e) {
+ return e.match(/^\.\//) || e.match(/^\.\./) ? t.location.origin + t.location.pathname + e : e.match(/^\//) ? t.location.origin + "/" + e : e
+ };
+ return 'importScripts("' + n(e) + '");'
+ }
+ return l ? 'eval( require("fs").readFileSync("' + e + '", { encoding: "utf8" }) );' : void 0
+ })).concat(["( function(){", "var ret = (" + h + ")(" + JSON.stringify(i) + ");", "if( ret !== undefined ){ resolve(ret); }", "} )()\n"]).join("\n");
+ if (o.requires = [], o.files = [], s) {
+ var f, v;
+ if (!d) {
+ var g = p + "";
+ p = ["function broadcast(m){ return message(m); };", "function message(m){ postMessage(m); };", "function listen(fn){", ' self.addEventListener("message", function(m){ ', ' if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){', " } else { ", " fn( m.data );", " }", " });", "};", 'self.addEventListener("message", function(m){ if( m.data.$$eval ){ eval( m.data.$$eval ); } });', "function resolve(v){ postMessage({ $$resolve: v }); };", "function reject(v){ postMessage({ $$reject: v }); };"].join("\n"), p += g, f = new Blob([p], {
+ type: "application/javascript"
+ }), v = t.URL.createObjectURL(f)
+ }
+ var y = o.webworker = o.webworker || new Worker(v);
+ d && y.postMessage({
+ $$eval: p
+ });
+ var m;
+ y.addEventListener("message", m = function(t) {
+ var n = e.is.object(t) && e.is.object(t.data);
+ n && "$$resolve" in t.data ? (y.removeEventListener("message", m), u(t.data.$$resolve)) : n && "$$reject" in t.data ? (y.removeEventListener("message", m), c(t.data.$$reject)) : a.trigger(new e.Event(t, {
+ type: "message",
+ message: t.data
+ }))
+ }, !1), d || y.postMessage("$$start")
+ } else if (l) {
+ var m, x = require("path"),
+ b = require("child_process"),
+ w = o.child = o.child || b.fork(x.join(__dirname, "thread-node-fork"));
+ w.on("message", m = function(t) {
+ e.is.object(t) && "$$resolve" in t ? (w.removeListener("message", m), u(t.$$resolve)) : e.is.object(t) && "$$reject" in t ? (w.removeListener("message", m), c(t.$$reject)) : a.trigger(new e.Event({}, {
+ type: "message",
+ message: t
+ }))
+ }), w.send({
+ $$eval: p
+ })
+ } else e.error("Tried to create thread but no underlying tech found!")
+ }).then(function(e) {
+ return o.running = !1, o.ran = !0, a.trigger("ran"), e
+ });
+ return null == o.queue && (o.queue = u), u
+ },
+ message: function(e) {
+ var t = this._private;
+ return t.webworker && t.webworker.postMessage(e), t.child && t.child.send(e), this
+ },
+ stop: function() {
+ var e = this._private;
+ return e.webworker && e.webworker.terminate(), e.child && e.child.kill(), e.stopped = !0, this.trigger("stop")
+ },
+ stopped: function() {
+ return this._private.stopped
+ }
+ });
+ var a = function(e, t) {
+ var n = e.toString();
+ return n = n.replace(/function.*\(/, "function " + t + "(")
+ },
+ o = function(e) {
+ return e = e || {},
+ function(t, n) {
+ var r = a(t, "_$_$_" + e.name);
+ return this.require(r), this.run(["function( data ){", " var origResolve = resolve;", " var res = [];", " ", " resolve = function( val ){", " res.push( val );", " };", " ", " var ret = data." + e.name + "( _$_$_" + e.name + (arguments.length > 1 ? ", " + JSON.stringify(n) : "") + " );", " ", " resolve = origResolve;", " resolve( res.length > 0 ? res : ret );", "}"].join("\n"))
+ }
+ };
+ e.fn.thread({
+ reduce: o({
+ name: "reduce"
+ }),
+ reduceRight: o({
+ name: "reduceRight"
+ }),
+ map: o({
+ name: "map"
+ })
+ });
+ var s = e.thdfn;
+ s.promise = s.run, s.terminate = s.halt = s.stop, s.include = s.require, e.worker = e.Worker = e.Thread, e.fn.thread({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.thdfn)
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.Fabric = function(t) {
+ if (!(this instanceof e.Fabric)) return new e.Fabric(t);
+ this._private = {
+ pass: []
+ };
+ var n = 4;
+ e.is.number(t), t = "undefined" != typeof navigator && null != navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "undefined" != typeof module ? require("os").cpus().length : n;
+ for (var r = 0; t > r; r++) this[r] = e.Thread();
+ this.length = t
+ }, e.fabric = e.Fabric, e.fabfn = e.Fabric.prototype, e.fn.fabric = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Fabric.prototype[r] = i
+ }
+ }, e.fn.fabric({
+ require: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = this[n];
+ r.require(e, t)
+ }
+ return this
+ },
+ random: function() {
+ var e = Math.round((this.length - 1) * Math.random()),
+ t = this[e];
+ return t
+ },
+ run: function(e) {
+ var t = this._private.pass.shift();
+ return this.random().pass(t).run(e)
+ },
+ message: function(e) {
+ return this.random().message(e)
+ },
+ broadcast: function(e) {
+ for (var t = 0; t < this.length; t++) {
+ var n = this[t];
+ n.message(e)
+ }
+ return this
+ },
+ stop: function() {
+ for (var e = 0; e < this.length; e++) {
+ var t = this[e];
+ t.stop()
+ }
+ return this
+ },
+ pass: function(t) {
+ var n = this._private.pass;
+ return e.is.array(t) ? n.push(t) : e.util.error("Only arrays or collections may be used with fabric.pass()"), this
+ },
+ spreadSize: function() {
+ var e = Math.ceil(this._private.pass[0].length / this.length);
+ return e = Math.max(1, e)
+ },
+ spread: function(t) {
+ for (var n = this, r = n._private, i = n.spreadSize(), a = r.pass.shift().concat([]), o = [], s = 0; s < this.length; s++) {
+ var l = this[s],
+ u = a.splice(0, i),
+ c = l.pass(u).run(t);
+ o.push(c);
+ var d = 0 === a.length;
+ if (d) break
+ }
+ return e.Promise.all(o).then(function(e) {
+ for (var t = [], n = 0, r = 0; r < e.length; r++)
+ for (var i = e[r], a = 0; a < i.length; a++) {
+ var o = i[a];
+ t[n++] = o
+ }
+ return t
+ })
+ },
+ map: function(e) {
+ var t = this;
+ return t.require(e, "_$_$_fabmap"), t.spread(function(e) {
+ var t = [],
+ n = resolve;
+ resolve = function(e) {
+ t.push(e)
+ };
+ for (var r = 0; r < e.length; r++) {
+ var i = t.length,
+ a = _$_$_fabmap(e[r]),
+ o = i === t.length;
+ o && t.push(a)
+ }
+ return resolve = n, t
+ })
+ },
+ filter: function(e) {
+ var t = this._private,
+ n = t.pass[0];
+ return this.map(e).then(function(e) {
+ for (var t = [], r = 0; r < n.length; r++) {
+ var i = n[r],
+ a = e[r];
+ a && t.push(i)
+ }
+ return t
+ })
+ },
+ sort: function(e) {
+ var t = this,
+ n = this._private.pass[0].length,
+ r = this.spreadSize();
+ return e = e || function(e, t) {
+ return t > e ? -1 : e > t ? 1 : 0
+ }, t.require(e, "_$_$_cmp"), t.spread(function(e) {
+ var t = e.sort(_$_$_cmp);
+ resolve(t)
+ }).then(function(t) {
+ for (var i = function(r, i, a) {
+ i = Math.min(i, n), a = Math.min(a, n);
+ for (var o = r, s = i, l = [], u = o; a > u; u++) {
+ var c = t[r],
+ d = t[i];
+ s > r && (i >= a || e(c, d) <= 0) ? (l.push(c), r++) : (l.push(d), i++)
+ }
+ for (var u = 0; u < l.length; u++) {
+ var h = o + u;
+ t[h] = l[u]
+ }
+ }, a = r; n > a; a *= 2)
+ for (var o = 0; n > o; o += 2 * a) i(o, o + a, o + 2 * a);
+ return t
+ })
+ }
+ });
+ var n = function(e) {
+ return e = e || {},
+ function(t, n) {
+ var r = this._private.pass.shift();
+ return this.random().pass(r)[e.threadFn](t, n)
+ }
+ };
+ e.fn.fabric({
+ randomMap: n({
+ threadFn: "map"
+ }),
+ reduce: n({
+ threadFn: "reduce"
+ }),
+ reduceRight: n({
+ threadFn: "reduceRight"
+ })
+ });
+ var r = e.fabfn;
+ r.promise = r.run, r.terminate = r.halt = r.stop, r.include = r.require, e.fn.fabric({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.fabfn)
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ var n = {},
+ r = e.util.copy(n);
+ e.defaults = function(t) {
+ n = e.util.extend({}, r, t)
+ }, e.fn.core = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Core.prototype[r] = i
+ }
+ }, e.Core = function(r) {
+ if (!(this instanceof e.Core)) return new e.Core(r);
+ var i = this;
+ r = e.util.extend({}, n, r);
+ var a = r.container,
+ o = a ? a._cyreg : null;
+ if (o = o || {}, o && o.cy) {
+ if (a)
+ for (; a.firstChild;) a.removeChild(a.firstChild);
+ o.cy.notify({
+ type: "destroy"
+ }), o = {}
+ }
+ var s = o.readies = o.readies || [];
+ a && (a._cyreg = o), o.cy = i;
+ var l = void 0 !== t && void 0 !== a && !r.headless,
+ u = r;
+ u.layout = e.util.extend({
+ name: l ? "grid" : "null"
+ }, u.layout), u.renderer = e.util.extend({
+ name: l ? "canvas" : "null"
+ }, u.renderer);
+ var c = function(e, t, n) {
+ return void 0 !== t ? t : void 0 !== n ? n : e
+ },
+ d = this._private = {
+ container: u.container,
+ ready: !1,
+ initrender: !1,
+ options: u,
+ elements: [],
+ id2index: {},
+ listeners: [],
+ onRenders: [],
+ aniEles: e.Collection(this),
+ scratch: {},
+ layout: null,
+ renderer: null,
+ notificationsEnabled: !0,
+ minZoom: 1e-50,
+ maxZoom: 1e50,
+ zoomingEnabled: c(!0, u.zoomingEnabled),
+ userZoomingEnabled: c(!0, u.userZoomingEnabled),
+ panningEnabled: c(!0, u.panningEnabled),
+ userPanningEnabled: c(!0, u.userPanningEnabled),
+ boxSelectionEnabled: c(!1, u.boxSelectionEnabled),
+ autolock: c(!1, u.autolock, u.autolockNodes),
+ autoungrabify: c(!1, u.autoungrabify, u.autoungrabifyNodes),
+ autounselectify: c(!1, u.autounselectify),
+ styleEnabled: void 0 === u.styleEnabled ? l : u.styleEnabled,
+ zoom: e.is.number(u.zoom) ? u.zoom : 1,
+ pan: {
+ x: e.is.plainObject(u.pan) && e.is.number(u.pan.x) ? u.pan.x : 0,
+ y: e.is.plainObject(u.pan) && e.is.number(u.pan.y) ? u.pan.y : 0
+ },
+ animation: {
+ current: [],
+ queue: []
+ },
+ hasCompoundNodes: !1,
+ deferredExecQueue: []
+ },
+ h = u.selectionType;
+ void 0 === h || "additive" !== h && "single" !== h ? d.selectionType = "single" : d.selectionType = h, e.is.number(u.minZoom) && e.is.number(u.maxZoom) && u.minZoom < u.maxZoom ? (d.minZoom = u.minZoom, d.maxZoom = u.maxZoom) : e.is.number(u.minZoom) && void 0 === u.maxZoom ? d.minZoom = u.minZoom : e.is.number(u.maxZoom) && void 0 === u.minZoom && (d.maxZoom = u.maxZoom);
+ var p = function(t) {
+ for (var n = !1, r = 0; r < f.length; r++) {
+ var i = f[r];
+ if (e.is.promise(i)) {
+ n = !0;
+ break
+ }
+ }
+ return n ? e.Promise.all(f).then(t) : void t(f)
+ },
+ f = [u.style, u.elements];
+ p(function(t) {
+ var n = t[0],
+ r = t[1];
+ d.styleEnabled && i.setStyle(n), i.initRenderer(e.util.extend({
+ hideEdgesOnViewport: u.hideEdgesOnViewport,
+ hideLabelsOnViewport: u.hideLabelsOnViewport,
+ textureOnViewport: u.textureOnViewport,
+ wheelSensitivity: e.is.number(u.wheelSensitivity) && u.wheelSensitivity > 0 ? u.wheelSensitivity : 1,
+ motionBlur: void 0 === u.motionBlur ? !0 : u.motionBlur,
+ motionBlurOpacity: void 0 === u.motionBlurOpacity ? .05 : u.motionBlurOpacity,
+ pixelRatio: e.is.number(u.pixelRatio) && u.pixelRatio > 0 ? u.pixelRatio : "auto" === u.pixelRatio ? void 0 : 1,
+ desktopTapThreshold: void 0 === u.desktopTapThreshold ? 4 : u.desktopTapThreshold,
+ touchTapThreshold: void 0 === u.touchTapThreshold ? 8 : u.touchTapThreshold
+ }, u.renderer)), u.initrender && (i.on("initrender", u.initrender), i.on("initrender", function() {
+ i._private.initrender = !0
+ })), i.load(r, function() {
+ i.startAnimationLoop(), i._private.ready = !0, e.is.fn(u.ready) && i.on("ready", u.ready);
+ for (var t = 0; t < s.length; t++) {
+ var n = s[t];
+ i.on("ready", n)
+ }
+ o && (o.readies = []), i.trigger("ready")
+ }, u.done)
+ })
+ }, e.corefn = e.Core.prototype, e.fn.core({
+ isReady: function() {
+ return this._private.ready
+ },
+ ready: function(e) {
+ this.isReady() ? this.trigger("ready", [], e) : this.on("ready", e)
+ },
+ initrender: function() {
+ return this._private.initrender
+ },
+ destroy: function() {
+ this.notify({
+ type: "destroy"
+ });
+ var e = this.container(),
+ t = e.parentNode;
+ if (t) try {
+ t.removeChild(e)
+ } catch (n) {}
+ return this
+ },
+ getElementById: function(t) {
+ var n = this._private.id2index[t];
+ return void 0 !== n ? this._private.elements[n] : new e.Collection(this)
+ },
+ selectionType: function() {
+ return this._private.selectionType
+ },
+ hasCompoundNodes: function() {
+ return this._private.hasCompoundNodes
+ },
+ styleEnabled: function() {
+ return this._private.styleEnabled
+ },
+ addToPool: function(e) {
+ for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = i._private.data.id,
+ o = n[a],
+ s = void 0 !== o;
+ s || (o = t.length, t.push(i), n[a] = o, i._private.index = o)
+ }
+ return this
+ },
+ removeFromPool: function(e) {
+ for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = i._private.data.id,
+ o = n[a],
+ s = void 0 !== o;
+ if (s) {
+ this._private.id2index[a] = void 0, t.splice(o, 1);
+ for (var l = o; l < t.length; l++) {
+ var u = t[l]._private.data.id;
+ n[u]--, t[l]._private.index--
+ }
+ }
+ }
+ },
+ container: function() {
+ return this._private.container
+ },
+ options: function() {
+ return e.util.copy(this._private.options)
+ },
+ json: function(e) {
+ var t = {},
+ n = this;
+ return t.elements = {}, n.elements().each(function(e, n) {
+ var r = n.group();
+ t.elements[r] || (t.elements[r] = []), t.elements[r].push(n.json())
+ }), this._private.styleEnabled && (t.style = n.style().json()), t.zoomingEnabled = n._private.zoomingEnabled, t.userZoomingEnabled = n._private.userZoomingEnabled, t.zoom = n._private.zoom, t.minZoom = n._private.minZoom, t.maxZoom = n._private.maxZoom, t.panningEnabled = n._private.panningEnabled, t.userPanningEnabled = n._private.userPanningEnabled, t.pan = n._private.pan, t.boxSelectionEnabled = n._private.boxSelectionEnabled, t.layout = n._private.options.layout, t.renderer = n._private.options.renderer, t.hideEdgesOnViewport = n._private.options.hideEdgesOnViewport, t.hideLabelsOnViewport = n._private.options.hideLabelsOnViewport, t.textureOnViewport = n._private.options.textureOnViewport, t.wheelSensitivity = n._private.options.wheelSensitivity, t.motionBlur = n._private.options.motionBlur, t
+ },
+ defer: function(e) {
+ var t = this,
+ n = t._private,
+ r = n.deferredExecQueue;
+ r.push(e), n.deferredTimeout || (n.deferredTimeout = setTimeout(function() {
+ for (; r.length > 0;) r.shift()();
+ n.deferredTimeout = null
+ }, 0))
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+
+ function n(e) {
+ var t = !document || "interactive" !== document.readyState && "complete" !== document.readyState ? n : e;
+ setTimeout(t, 9, e)
+ }
+ e.fn.core({
+ add: function(t) {
+ var n, r = this;
+ if (e.is.elementOrCollection(t)) {
+ var i = t;
+ if (i._private.cy === r) n = i.restore();
+ else {
+ for (var a = [], o = 0; o < i.length; o++) {
+ var s = i[o];
+ a.push(s.json())
+ }
+ n = new e.Collection(r, a)
+ }
+ } else if (e.is.array(t)) {
+ var a = t;
+ n = new e.Collection(r, a)
+ } else if (e.is.plainObject(t) && (e.is.array(t.nodes) || e.is.array(t.edges))) {
+ for (var l = t, a = [], u = ["nodes", "edges"], o = 0, c = u.length; c > o; o++) {
+ var d = u[o],
+ h = l[d];
+ if (e.is.array(h))
+ for (var p = 0, f = h.length; f > p; p++) {
+ var v = h[p];
+ v.group = d, a.push(v)
+ }
+ }
+ n = new e.Collection(r, a)
+ } else {
+ var v = t;
+ n = new e.Element(r, v).collection()
+ }
+ return n
+ },
+ remove: function(t) {
+ if (e.is.elementOrCollection(t)) t = t;
+ else if (e.is.string(t)) {
+ var n = t;
+ t = this.$(n)
+ }
+ return t.remove()
+ },
+ load: function(r, i, a) {
+ function o() {
+ s.one("layoutready", function(e) {
+ s.notifications(!0), s.trigger(e), s.notify({
+ type: "load",
+ collection: s.elements()
+ }), s.one("load", i), s.trigger("load")
+ }).one("layoutstop", function() {
+ s.one("done", a), s.trigger("done")
+ });
+ var t = e.util.extend({}, s._private.options.layout);
+ t.eles = s.$(), s.layout(t)
+ }
+ var s = this;
+ s.notifications(!1);
+ var l = s.elements();
+ return l.length > 0 && l.remove(), null != r && (e.is.plainObject(r) || e.is.array(r)) && s.add(r), t ? n(o) : o(), this
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.fn.core({
+ animated: e.define.animated(),
+ clearQueue: e.define.clearQueue(),
+ delay: e.define.delay(),
+ animate: e.define.animate(),
+ stop: e.define.stop(),
+ addToAnimationPool: function(e) {
+ var t = this;
+ t.styleEnabled() && t._private.aniEles.merge(e)
+ },
+ startAnimationLoop: function() {
+ function n() {
+ e.util.requestAnimationFrame(function(e) {
+ r(e), n()
+ })
+ }
+
+ function r(t) {
+ function n(n, r) {
+ var l = n._private.animation.current,
+ u = n._private.animation.queue,
+ c = !1;
+ if (0 === l.length) {
+ var d = u.length > 0 ? u.shift() : null;
+ d && (d.callTime = t, l.push(d))
+ }
+ for (var h = [], p = l.length - 1; p >= 0; p--) {
+ var f = l[p];
+ f.started || (i(n, f), s = !0), a(n, f, t, r), f.done && (h.push(f), l.splice(p, 1)), c = !0
+ }
+ for (var p = 0; p < h.length; p++) {
+ var f = h[p],
+ v = f.params.complete;
+ e.is.fn(v) && v.apply(n, [t])
+ }
+ return r || 0 !== l.length || 0 !== u.length || o.push(n), c
+ }
+ t = +new Date;
+ for (var r = l._private.aniEles, o = [], s = !1, u = 0; u < r.length; u++) {
+ var c = r[u];
+ n(c)
+ }
+ var d = n(l, !0);
+ if (r.length > 0 || d) {
+ var h;
+ if (r.length > 0) {
+ var p = r.updateCompoundBounds();
+ h = p.length > 0 ? r.add(p) : r
+ }
+ l.notify({
+ type: s ? "style" : "draw",
+ collection: h
+ })
+ }
+ r.unmerge(o)
+ }
+
+ function i(t, n) {
+ var r = e.is.core(t),
+ i = !r,
+ a = t,
+ o = l._private.style;
+ if (i) var s = a._private.position,
+ u = {
+ x: s.x,
+ y: s.y
+ },
+ c = o.getValueStyle(a);
+ if (r) var d = l._private.pan,
+ h = {
+ x: d.x,
+ y: d.y
+ },
+ p = l._private.zoom;
+ n.started = !0, n.startTime = Date.now(), n.startPosition = u, n.startStyle = c, n.startPan = h, n.startZoom = p
+ }
+
+ function a(t, n, r, i) {
+ var a, u = l._private.style,
+ c = n.properties,
+ d = n.params,
+ h = n.startTime,
+ p = !i;
+ if (a = 0 === n.duration ? 1 : Math.min(1, (r - h) / n.duration), 0 > a ? a = 0 : a > 1 && (a = 1), null == c.delay) {
+ var f = n.startPosition,
+ v = c.position,
+ g = t._private.position;
+ v && p && (o(f.x, v.x) && (g.x = s(f.x, v.x, a)), o(f.y, v.y) && (g.y = s(f.y, v.y, a)));
+ var y = n.startPan,
+ m = c.pan,
+ x = t._private.pan,
+ b = null != m && i;
+ b && (o(y.x, m.x) && (x.x = s(y.x, m.x, a)), o(y.y, m.y) && (x.y = s(y.y, m.y, a)), t.trigger("pan"));
+ var w = n.startZoom,
+ _ = c.zoom,
+ E = null != _ && i;
+ E && (o(w, _) && (t._private.zoom = s(w, _, a)), t.trigger("zoom")), (b || E) && t.trigger("viewport");
+ var T = c.style || c.css;
+ if (T && p)
+ for (var S = 0; S < T.length; S++) {
+ var C = T[S].name,
+ k = T[S],
+ D = k,
+ N = n.startStyle[C],
+ P = s(N, D, a);
+ u.overrideBypass(t, C, P)
+ }
+ }
+ return e.is.fn(d.step) && d.step.apply(t, [r]), a >= 1 && (n.done = !0), a
+ }
+
+ function o(t, n) {
+ return null == t || null == n ? !1 : e.is.number(t) && e.is.number(n) ? !0 : t && n ? !0 : !1
+ }
+
+ function s(t, n, r) {
+ 0 > r ? r = 0 : r > 1 && (r = 1);
+ var i, a;
+ if (i = null != t.pxValue || null != t.value ? null != t.pxValue ? t.pxValue : t.value : t, a = null != n.pxValue || null != n.value ? null != n.pxValue ? n.pxValue : n.value : n, e.is.number(i) && e.is.number(a)) return i + (a - i) * r;
+ if (e.is.number(i[0]) && e.is.number(a[0])) {
+ var o = i,
+ s = a,
+ l = function(e, t) {
+ var n = t - e,
+ i = e;
+ return Math.round(r * n + i)
+ },
+ u = l(o[0], s[0]),
+ c = l(o[1], s[1]),
+ d = l(o[2], s[2]);
+ return [u, c, d]
+ }
+ return void 0
+ }
+ var l = this;
+ l.styleEnabled() && t && n()
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ data: e.define.data({
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "data",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0
+ }),
+ removeData: e.define.removeData({
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !0
+ }),
+ scratch: e.define.data({
+ field: "scratch",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingTriggersEvent: !1,
+ allowGetting: !0
+ }),
+ removeScratch: e.define.removeData({
+ field: "scratch",
+ triggerEvent: !1
+ })
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ once: e.define.on({
+ unbindAllBindersOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.corefn)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ png: function(e) {
+ var t = this._private.renderer;
+ return e = e || {}, t.png(e)
+ },
+ jpg: function(e) {
+ var t = this._private.renderer;
+ return e = e || {}, e.bg = e.bg || "#fff", t.jpg(e)
+ }
+ }), e.corefn.jpeg = e.corefn.jpg
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ layout: function(t) {
+ var n;
+ return null == t && (t = e.util.extend({}, this._private.options.layout), t.eles = this.$()), n = this.initLayout(t), n.run(), this
+ },
+ makeLayout: function(e) {
+ return this.initLayout(e)
+ },
+ initLayout: function(t) {
+ if (null == t) return void e.util.error("Layout options must be specified to make a layout");
+ if (null == t.name) return void e.util.error("A `name` must be specified to make a layout");
+ var n = t.name,
+ r = e.extension("layout", n);
+ if (null == r) return void e.util.error("Can not apply layout: No such layout `" + n + "` found; did you include its JS file?");
+ t.eles = null != t.eles ? t.eles : this.$(), e.is.string(t.eles) && (t.eles = this.$(t.eles));
+ var i = new r(e.util.extend({}, t, {
+ cy: this
+ }));
+ return e.is.plainObject(i._private) || (i._private = {}), i._private.cy = this, i._private.listeners = [], i
+ }
+ }), e.corefn.createLayout = e.corefn.makeLayout
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ notify: function(e) {
+ if (this._private.batchingNotify) {
+ var t = this._private.batchNotifyEles,
+ n = this._private.batchNotifyTypes;
+ if (e.collection)
+ for (var r = 0; r < e.collection.length; r++) {
+ var i = e.collection[r];
+ t.ids[i._private.id] || t.push(i)
+ }
+ return void(n.ids[e.type] || n.push(e.type))
+ }
+ if (this._private.notificationsEnabled) {
+ var a = this.renderer();
+ a.notify(e)
+ }
+ },
+ notifications: function(e) {
+ var t = this._private;
+ return void 0 === e ? t.notificationsEnabled : void(t.notificationsEnabled = e ? !0 : !1)
+ },
+ noNotifications: function(e) {
+ this.notifications(!1), e(), this.notifications(!0)
+ },
+ startBatch: function() {
+ var e = this._private;
+ return e.batchingStyle = e.batchingNotify = !0, e.batchStyleEles = [], e.batchNotifyEles = [], e.batchNotifyTypes = [], e.batchStyleEles.ids = {}, e.batchNotifyEles.ids = {}, e.batchNotifyTypes.ids = {}, this
+ },
+ endBatch: function() {
+ var t = this._private;
+ return t.batchingStyle = !1, new e.Collection(this, t.batchStyleEles).updateStyle(), t.batchingNotify = !1, this.notify({
+ type: t.batchNotifyTypes,
+ collection: t.batchNotifyEles
+ }), this
+ },
+ batch: function(e) {
+ return this.startBatch(), e(), this.endBatch(), this
+ },
+ batchData: function(e) {
+ var t = this;
+ return this.batch(function() {
+ for (var n in e) {
+ var r = e[n],
+ i = t.getElementById(n);
+ i.data(r)
+ }
+ })
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ renderTo: function(e, t, n, r) {
+ var i = this._private.renderer;
+ return i.renderTo(e, t, n, r), this
+ },
+ renderer: function() {
+ return this._private.renderer
+ },
+ forceRender: function() {
+ return this.notify({
+ type: "draw"
+ }), this
+ },
+ resize: function() {
+ return this.notify({
+ type: "resize"
+ }), this.trigger("resize"), this
+ },
+ initRenderer: function(t) {
+ var n = this,
+ r = e.extension("renderer", t.name);
+ return null == r ? void e.util.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", t.name) : void(this._private.renderer = new r(e.util.extend({}, t, {
+ cy: n,
+ style: n._private.style
+ })))
+ },
+ triggerOnRender: function() {
+ for (var e = this._private.onRenders, t = 0; t < e.length; t++) {
+ var n = e[t];
+ n()
+ }
+ return this
+ },
+ onRender: function(e) {
+ return this._private.onRenders.push(e), this
+ },
+ offRender: function(e) {
+ var t = this._private.onRenders;
+ if (null == e) return this._private.onRenders = [], this;
+ for (var n = 0; n < t.length; n++) {
+ var r = t[n];
+ if (e === r) {
+ t.splice(n, 1);
+ break
+ }
+ }
+ return this
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ collection: function(t) {
+ return e.is.string(t) ? this.$(t) : e.is.elementOrCollection(t) ? t.collection() : e.is.array(t) ? new e.Collection(this, t) : new e.Collection(this)
+ },
+ nodes: function(e) {
+ var t = this.$(function() {
+ return this.isNode()
+ });
+ return e ? t.filter(e) : t
+ },
+ edges: function(e) {
+ var t = this.$(function() {
+ return this.isEdge()
+ });
+ return e ? t.filter(e) : t
+ },
+ $: function(t) {
+ var n = new e.Collection(this, this._private.elements);
+ return t ? n.filter(t) : n
+ }
+ }), e.corefn.elements = e.corefn.filter = e.corefn.$
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ style: function(e) {
+ if (e) {
+ var t = this.setStyle(e);
+ t.update()
+ }
+ return this._private.style
+ },
+ setStyle: function(t) {
+ var n = this._private;
+ return e.is.stylesheet(t) ? n.style = t.generateStyle(this) : e.is.array(t) ? n.style = e.style.fromJson(this, t) : e.is.string(t) ? n.style = e.style.fromString(this, t) : n.style = new e.Style(this), n.style
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ autolock: function(e) {
+ return void 0 === e ? this._private.autolock : (this._private.autolock = e ? !0 : !1, this)
+ },
+ autoungrabify: function(e) {
+ return void 0 === e ? this._private.autoungrabify : (this._private.autoungrabify = e ? !0 : !1, this)
+ },
+ autounselectify: function(e) {
+ return void 0 === e ? this._private.autounselectify : (this._private.autounselectify = e ? !0 : !1, this)
+ },
+ panningEnabled: function(e) {
+ return void 0 === e ? this._private.panningEnabled : (this._private.panningEnabled = e ? !0 : !1, this)
+ },
+ userPanningEnabled: function(e) {
+ return void 0 === e ? this._private.userPanningEnabled : (this._private.userPanningEnabled = e ? !0 : !1, this)
+ },
+ zoomingEnabled: function(e) {
+ return void 0 === e ? this._private.zoomingEnabled : (this._private.zoomingEnabled = e ? !0 : !1, this)
+ },
+ userZoomingEnabled: function(e) {
+ return void 0 === e ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = e ? !0 : !1, this)
+ },
+ boxSelectionEnabled: function(e) {
+ return void 0 === e ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = e ? !0 : !1, this)
+ },
+ pan: function() {
+ var t, n, r, i, a, o = arguments,
+ s = this._private.pan;
+ switch (o.length) {
+ case 0:
+ return s;
+ case 1:
+ if (e.is.string(o[0])) return t = o[0], s[t];
+ if (e.is.plainObject(o[0])) {
+ if (!this._private.panningEnabled) return this;
+ r = o[0], i = r.x, a = r.y, e.is.number(i) && (s.x = i), e.is.number(a) && (s.y = a), this.trigger("pan viewport")
+ }
+ break;
+ case 2:
+ if (!this._private.panningEnabled) return this;
+ t = o[0], n = o[1], "x" !== t && "y" !== t || !e.is.number(n) || (s[t] = n), this.trigger("pan viewport")
+ }
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ panBy: function(t) {
+ var n, r, i, a, o, s = arguments,
+ l = this._private.pan;
+ if (!this._private.panningEnabled) return this;
+ switch (s.length) {
+ case 1:
+ e.is.plainObject(s[0]) && (i = s[0], a = i.x, o = i.y, e.is.number(a) && (l.x += a), e.is.number(o) && (l.y += o), this.trigger("pan viewport"));
+ break;
+ case 2:
+ n = s[0], r = s[1], "x" !== n && "y" !== n || !e.is.number(r) || (l[n] += r), this.trigger("pan viewport")
+ }
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ fit: function(e, t) {
+ var n = this.getFitViewport(e, t);
+ if (n) {
+ var r = this._private;
+ r.zoom = n.zoom, r.pan = n.pan, this.trigger("pan zoom viewport"), this.notify({
+ type: "viewport"
+ })
+ }
+ return this
+ },
+ getFitViewport: function(t, n) {
+ if (e.is.number(t) && void 0 === n && (n = t, t = void 0), this._private.panningEnabled && this._private.zoomingEnabled) {
+ var r;
+ if (e.is.string(t)) {
+ var i = t;
+ t = this.$(i)
+ } else if (e.is.boundingBox(t)) {
+ var a = t;
+ r = {
+ x1: a.x1,
+ y1: a.y1,
+ x2: a.x2,
+ y2: a.y2
+ }, r.w = r.x2 - r.x1, r.h = r.y2 - r.y1
+ } else e.is.elementOrCollection(t) || (t = this.elements());
+ r = r || t.boundingBox();
+ var o, s = this.width(),
+ l = this.height();
+ if (n = e.is.number(n) ? n : 0, !isNaN(s) && !isNaN(l) && s > 0 && l > 0 && !isNaN(r.w) && !isNaN(r.h) && r.w > 0 && r.h > 0) {
+ o = Math.min((s - 2 * n) / r.w, (l - 2 * n) / r.h), o = o > this._private.maxZoom ? this._private.maxZoom : o, o = o < this._private.minZoom ? this._private.minZoom : o;
+ var u = {
+ x: (s - o * (r.x1 + r.x2)) / 2,
+ y: (l - o * (r.y1 + r.y2)) / 2
+ };
+ return {
+ zoom: o,
+ pan: u
+ }
+ }
+ }
+ },
+ minZoom: function(t) {
+ return void 0 === t ? this._private.minZoom : (e.is.number(t) && (this._private.minZoom = t), this)
+ },
+ maxZoom: function(t) {
+ return void 0 === t ? this._private.maxZoom : (e.is.number(t) && (this._private.maxZoom = t), this)
+ },
+ zoom: function(t) {
+ var n, r;
+ if (void 0 === t) return this._private.zoom;
+ if (e.is.number(t)) r = t;
+ else if (e.is.plainObject(t)) {
+ if (r = t.level, t.position) {
+ var i = t.position,
+ a = this._private.pan,
+ o = this._private.zoom;
+ n = {
+ x: i.x * o + a.x,
+ y: i.y * o + a.y
+ }
+ } else t.renderedPosition && (n = t.renderedPosition);
+ if (n && !this._private.panningEnabled) return this
+ }
+ if (!this._private.zoomingEnabled) return this;
+ if (!e.is.number(r) || n && (!e.is.number(n.x) || !e.is.number(n.y))) return this;
+ if (r = r > this._private.maxZoom ? this._private.maxZoom : r, r = r < this._private.minZoom ? this._private.minZoom : r, n) {
+ var s = this._private.pan,
+ l = this._private.zoom,
+ u = r,
+ c = {
+ x: -u / l * (n.x - s.x) + n.x,
+ y: -u / l * (n.y - s.y) + n.y
+ };
+ this._private.zoom = r, this._private.pan = c;
+ var d = s.x !== c.x || s.y !== c.y;
+ this.trigger(" zoom " + (d ? " pan " : "") + " viewport ")
+ } else this._private.zoom = r, this.trigger("zoom viewport");
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ viewport: function(t) {
+ var n = this._private,
+ r = !0,
+ i = !0,
+ a = [],
+ o = !1,
+ s = !1;
+ if (!t) return this;
+ if (e.is.number(t.zoom) || (r = !1), e.is.plainObject(t.pan) || (i = !1), !r && !i) return this;
+ if (r) {
+ var l = t.zoom;
+ l < n.minZoom || l > n.maxZoom || !n.zoomingEnabled ? o = !0 : (n.zoom = l, a.push("zoom"))
+ }
+ if (i && (!o || !t.cancelOnFailedZoom) && n.panningEnabled) {
+ var u = t.pan;
+ e.is.number(u.x) && (n.pan.x = u.x, s = !1), e.is.number(u.y) && (n.pan.y = u.y, s = !1), s || a.push("pan")
+ }
+ return a.length > 0 && (a.push("viewport"), this.trigger(a.join(" ")), this.notify({
+ type: "viewport"
+ })), this
+ },
+ center: function(e) {
+ var t = this.getCenterPan(e);
+ return t && (this._private.pan = t, this.trigger("pan viewport"), this.notify({
+ type: "viewport"
+ })), this
+ },
+ getCenterPan: function(t, n) {
+ if (this._private.panningEnabled) {
+ if (e.is.string(t)) {
+ var r = t;
+ t = this.elements(r)
+ } else e.is.elementOrCollection(t) || (t = this.elements());
+ var i = t.boundingBox(),
+ a = this.width(),
+ o = this.height();
+ n = void 0 === n ? this._private.zoom : n;
+ var s = {
+ x: (a - n * (i.x1 + i.x2)) / 2,
+ y: (o - n * (i.y1 + i.y2)) / 2
+ };
+ return s
+ }
+ },
+ reset: function() {
+ return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({
+ pan: {
+ x: 0,
+ y: 0
+ },
+ zoom: 1
+ }), this) : this
+ },
+ width: function() {
+ var e = this._private.container;
+ return e ? e.clientWidth : 1
+ },
+ height: function() {
+ var e = this._private.container;
+ return e ? e.clientHeight : 1
+ },
+ extent: function() {
+ var e = this._private.pan,
+ t = this._private.zoom,
+ n = this.renderedExtent(),
+ r = {
+ x1: (n.x1 - e.x) / t,
+ x2: (n.x2 - e.x) / t,
+ y1: (n.y1 - e.y) / t,
+ y2: (n.y2 - e.y) / t
+ };
+ return r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r
+ },
+ renderedExtent: function() {
+ var e = this.width(),
+ t = this.height();
+ return {
+ x1: 0,
+ y1: 0,
+ x2: e,
+ y2: t,
+ w: e,
+ h: t
+ }
+ }
+ }), e.corefn.centre = e.corefn.center, e.corefn.autolockNodes = e.corefn.autolock, e.corefn.autoungrabifyNodes = e.corefn.autoungrabify
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.collection = e.fn.eles = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Collection.prototype[r] = i
+ }
+ };
+ var t = {
+ prefix: {
+ nodes: "n",
+ edges: "e"
+ },
+ id: {
+ nodes: 0,
+ edges: 0
+ },
+ generate: function(t, n, r) {
+ var i = e.is.element(n) ? n._private : n,
+ a = i.group,
+ o = null != r ? r : this.prefix[a] + this.id[a];
+ if (t.getElementById(o).empty()) this.id[a]++;
+ else
+ for (; !t.getElementById(o).empty();) o = this.prefix[a] + ++this.id[a];
+ return o
+ }
+ };
+ e.Element = function(t, n, r) {
+ if (!(this instanceof e.Element)) return new e.Element(t, n, r);
+ var i = this;
+ if (r = void 0 === r || r ? !0 : !1, void 0 === t || void 0 === n || !e.is.core(t)) return void e.util.error("An element must have a core reference and parameters set");
+ if ("nodes" !== n.group && "edges" !== n.group) return void e.util.error("An element must be of type `nodes` or `edges`; you specified `" + n.group + "`");
+ if (this.length = 1, this[0] = this, this._private = {
+ cy: t,
+ single: !0,
+ data: n.data || {},
+ position: n.position || {},
+ autoWidth: void 0,
+ autoHeight: void 0,
+ listeners: [],
+ group: n.group,
+ style: {},
+ rstyle: {},
+ styleCxts: [],
+ removed: !0,
+ selected: n.selected ? !0 : !1,
+ selectable: void 0 === n.selectable ? !0 : n.selectable ? !0 : !1,
+ locked: n.locked ? !0 : !1,
+ grabbed: !1,
+ grabbable: void 0 === n.grabbable ? !0 : n.grabbable ? !0 : !1,
+ active: !1,
+ classes: {},
+ animation: {
+ current: [],
+ queue: []
+ },
+ rscratch: {},
+ scratch: n.scratch || {},
+ edges: [],
+ children: []
+ }, n.renderedPosition) {
+ var a = n.renderedPosition,
+ o = t.pan(),
+ s = t.zoom();
+ this._private.position = {
+ x: (a.x - o.x) / s,
+ y: (a.y - o.y) / s
+ }
+ }
+ if (e.is.string(n.classes))
+ for (var l = n.classes.split(/\s+/), u = 0, c = l.length; c > u; u++) {
+ var d = l[u];
+ d && "" !== d && (i._private.classes[d] = !0)
+ }
+ n.css && t.style().applyBypass(this, n.css), (void 0 === r || r) && this.restore()
+ }, e.Collection = function(n, r, i) {
+ if (!(this instanceof e.Collection)) return new e.Collection(n, r);
+ if (void 0 === n || !e.is.core(n)) return void e.util.error("A collection must have a reference to the core");
+ var a = {},
+ o = {},
+ s = !1;
+ if (r) {
+ if (r.length > 0 && e.is.plainObject(r[0]) && !e.is.element(r[0])) {
+ s = !0;
+ for (var l = [], u = {}, c = 0, d = r.length; d > c; c++) {
+ var h = r[c];
+ null == h.data && (h.data = {});
+ var p = h.data;
+ if (null == p.id) p.id = t.generate(n, h);
+ else if (0 !== n.getElementById(p.id).length || u[p.id]) continue;
+ var f = new e.Element(n, h, !1);
+ l.push(f), u[p.id] = !0
+ }
+ r = l
+ }
+ } else r = [];
+ this.length = 0;
+ for (var c = 0, d = r.length; d > c; c++) {
+ var v = r[c];
+ if (v) {
+ var g = v._private.data.id;
+ (!i || i.unique && !a[g]) && (a[g] = v, o[g] = this.length, this[this.length] = v, this.length++)
+ }
+ }
+ this._private = {
+ cy: n,
+ ids: a,
+ indexes: o
+ }, s && this.restore()
+ }, e.elefn = e.elesfn = e.Element.prototype = e.Collection.prototype, e.elesfn.cy = function() {
+ return this._private.cy
+ }, e.elesfn.element = function() {
+ return this[0]
+ }, e.elesfn.collection = function() {
+ return e.is.collection(this) ? this : new e.Collection(this._private.cy, [this])
+ }, e.elesfn.unique = function() {
+ return new e.Collection(this._private.cy, this, {
+ unique: !0
+ })
+ }, e.elesfn.getElementById = function(t) {
+ var n = this._private.cy,
+ r = this._private.ids[t];
+ return r ? r : e.Collection(n)
+ }, e.elesfn.json = function() {
+ var t = this.element();
+ if (null == t) return void 0;
+ var n = t._private,
+ r = e.util.copy({
+ data: n.data,
+ position: n.position,
+ group: n.group,
+ bypass: n.bypass,
+ removed: n.removed,
+ selected: n.selected,
+ selectable: n.selectable,
+ locked: n.locked,
+ grabbed: n.grabbed,
+ grabbable: n.grabbable,
+ classes: ""
+ }),
+ i = [];
+ for (var a in n.classes) n.classes[a] && i.push(a);
+ for (var o = 0; o < i.length; o++) {
+ var a = i[o];
+ r.classes += a + (o < i.length - 1 ? " " : "")
+ }
+ return r
+ }, e.elesfn.jsons = function() {
+ for (var e = [], t = 0; t < this.length; t++) {
+ var n = this[t],
+ r = n.json();
+ e.push(r)
+ }
+ return e
+ }, e.elesfn.clone = function() {
+ for (var t = this.cy(), n = [], r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = i.json(),
+ o = new e.Element(t, a, !1);
+ n.push(o)
+ }
+ return new e.Collection(t, n)
+ }, e.elesfn.copy = e.elesfn.clone, e.elesfn.restore = function(n) {
+ var r = this,
+ i = [],
+ a = r.cy();
+ void 0 === n && (n = !0);
+ for (var o = [], s = [], l = [], u = 0, c = 0, d = 0, h = r.length; h > d; d++) {
+ var p = r[d];
+ p.isNode() ? (s.push(p), u++) : (l.push(p), c++)
+ }
+ o = s.concat(l);
+ for (var d = 0, h = o.length; h > d; d++) {
+ var p = o[d];
+ if (p.removed()) {
+ var f = p._private,
+ v = f.data;
+ if (void 0 === v.id) v.id = t.generate(a, p);
+ else {
+ if (e.is.emptyString(v.id) || !e.is.string(v.id)) {
+ e.util.error("Can not create element with invalid string ID `" + v.id + "`");
+ continue
+ }
+ if (0 !== a.getElementById(v.id).length) {
+ e.util.error("Can not create second element with ID `" + v.id + "`");
+ continue
+ }
+ }
+ var g = v.id;
+ if (p.isEdge()) {
+ for (var y = p, m = ["source", "target"], x = m.length, b = !1, w = 0; x > w; w++) {
+ var _ = m[w],
+ E = v[_];
+ null == E || "" === E ? (e.util.error("Can not create edge `" + g + "` with unspecified " + _), b = !0) : a.getElementById(E).empty() && (e.util.error("Can not create edge `" + g + "` with nonexistant " + _ + " `" + E + "`"), b = !0)
+ }
+ if (b) continue;
+ var T = a.getElementById(v.source),
+ S = a.getElementById(v.target);
+ T._private.edges.push(y), S._private.edges.push(y), y._private.source = T, y._private.target = S
+ }
+ f.ids = {}, f.ids[g] = p, f.removed = !1, a.addToPool(p), i.push(p)
+ }
+ }
+ for (var d = 0; u > d; d++) {
+ var C = o[d],
+ v = C._private.data,
+ k = C._private.data.parent,
+ D = null != k;
+ if (D) {
+ var N = a.getElementById(k);
+ if (N.empty()) v.parent = void 0;
+ else {
+ for (var P = !1, M = N; !M.empty();) {
+ if (C.same(M)) {
+ P = !0, v.parent = void 0;
+ break
+ }
+ M = M.parent()
+ }
+ P || (N[0]._private.children.push(C), C._private.parent = N[0], a._private.hasCompoundNodes = !0)
+ }
+ }
+ }
+ if (i = new e.Collection(a, i), i.length > 0) {
+ var B = i.add(i.connectedNodes()).add(i.parent());
+ B.updateStyle(n), n ? i.rtrigger("add") : i.trigger("add")
+ }
+ return r
+ }, e.elesfn.removed = function() {
+ var e = this[0];
+ return e && e._private.removed
+ }, e.elesfn.inside = function() {
+ var e = this[0];
+ return e && !e._private.removed
+ }, e.elesfn.remove = function(t) {
+ function n(e) {
+ for (var t = e._private.edges, n = 0; n < t.length; n++) i(t[n])
+ }
+
+ function r(e) {
+ for (var t = e._private.children, n = 0; n < t.length; n++) i(t[n])
+ }
+
+ function i(e) {
+ var t = c[e.id()];
+ t || (c[e.id()] = !0, e.isNode() ? (u.push(e), n(e), r(e)) : u.unshift(e))
+ }
+
+ function a(e, t) {
+ for (var n = e._private.edges, r = 0; r < n.length; r++) {
+ var i = n[r];
+ if (t === i) {
+ n.splice(r, 1);
+ break
+ }
+ }
+ }
+
+ function o(e, t) {
+ t = t[0], e = e[0];
+ for (var n = e._private.children, r = 0; r < n.length; r++)
+ if (n[r][0] === t[0]) {
+ n.splice(r, 1);
+ break
+ }
+ }
+ var s = this,
+ l = [],
+ u = [],
+ c = {},
+ d = s._private.cy;
+ void 0 === t && (t = !0);
+ for (var h = 0, p = s.length; p > h; h++) {
+ var f = s[h];
+ i(f)
+ }
+ for (var h = 0; h < u.length; h++) {
+ var f = u[h];
+ if (f._private.removed = !0, d.removeFromPool(f), l.push(f), f.isEdge()) {
+ var v = f.source()[0],
+ g = f.target()[0];
+ a(v, f), a(g, f)
+ } else {
+ var y = f.parent();
+ 0 !== y.length && o(y, f)
+ }
+ }
+ var m = d._private.elements;
+ d._private.hasCompoundNodes = !1;
+ for (var h = 0; h < m.length; h++) {
+ var f = m[h];
+ if (f.isParent()) {
+ d._private.hasCompoundNodes = !0;
+ break
+ }
+ }
+ var x = new e.Collection(this.cy(), l);
+ x.size() > 0 && (t && this.cy().notify({
+ type: "remove",
+ collection: x
+ }), x.trigger("remove"));
+ for (var b = {}, h = 0; h < u.length; h++) {
+ var f = u[h],
+ w = "nodes" === f._private.group,
+ _ = f._private.data.parent;
+ if (w && void 0 !== _ && !b[_]) {
+ b[_] = !0;
+ var y = d.getElementById(_);
+ y && 0 !== y.length && !y._private.removed && 0 === y.children().length && y.updateStyle()
+ }
+ }
+ return this
+ }, e.elesfn.move = function(e) {
+ var t = this._private.cy;
+ if (void 0 !== e.source || void 0 !== e.target) {
+ var n = e.source,
+ r = e.target,
+ i = t.getElementById(n).length > 0,
+ a = t.getElementById(r).length > 0;
+ if (i || a) {
+ var o = this.jsons();
+ this.remove();
+ for (var s = 0; s < o.length; s++) {
+ var l = o[s];
+ "edges" === l.group && (i && (l.data.source = n), a && (l.data.target = r))
+ }
+ return t.add(o)
+ }
+ } else if (void 0 !== e.parent) {
+ var u = e.parent,
+ c = null === u || t.getElementById(u).length > 0;
+ if (c) {
+ var o = this.jsons(),
+ d = this.descendants(),
+ h = d.merge(d.add(this).connectedEdges());
+ this.remove();
+ for (var s = 0; s < this.length; s++) {
+ var l = o[s];
+ "nodes" === l.group && (l.data.parent = null === u ? void 0 : u)
+ }
+ }
+ return t.add(o).merge(h.restore())
+ }
+ return this
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ stdBreadthFirstSearch: function(t) {
+ return t = e.util.extend({}, t, {
+ std: !0
+ }), this.breadthFirstSearch(t)
+ },
+ breadthFirstSearch: function(t, n, r) {
+ var i, a, o;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {};
+ for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.nodes(), y = this.edges(), m = 0; m < u.length; m++) u[m].isNode() && (c.unshift(u[m]), f[u[m].id()] = !0, d.push(u[m]), p[u[m].id()] = 0);
+ for (; 0 !== c.length;) {
+ var x, u = c.shift(),
+ b = p[u.id()],
+ w = h[u.id()],
+ _ = null == w ? void 0 : w.connectedNodes().not(u)[0];
+ if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) {
+ s = u;
+ break
+ }
+ if (x === !1) break;
+ for (var E = u.connectedEdges(r ? function() {
+ return this.data("source") === u.id()
+ } : void 0).intersect(y), m = 0; m < E.length; m++) {
+ var T = E[m],
+ S = T.connectedNodes(function() {
+ return this.id() !== u.id()
+ }).intersect(g);
+ 0 === S.length || f[S.id()] || (S = S[0], c.push(S), f[S.id()] = !0, p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T)
+ }
+ }
+ for (var C = [], m = 0; m < d.length; m++) {
+ var k = d[m],
+ D = h[k.id()];
+ D && C.push(D), C.push(k)
+ }
+ return {
+ path: new e.Collection(l, C, {
+ unique: !0
+ }),
+ found: new e.Collection(l, s, {
+ unique: !0
+ })
+ }
+ },
+ stdDepthFirstSearch: function(t) {
+ return t = e.util.extend({}, t, {
+ std: !0
+ }), this.depthFirstSearch(t)
+ },
+ depthFirstSearch: function(t, n, r) {
+ var i, a, o;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {};
+ for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.edges(), y = this.nodes(), m = 0; m < u.length; m++) u[m].isNode() && (c.push(u[m]), d.push(u[m]), p[u[m].id()] = 0);
+ for (; 0 !== c.length;) {
+ var u = c.pop();
+ if (!f[u.id()]) {
+ f[u.id()] = !0;
+ var x, b = p[u.id()],
+ w = h[u.id()],
+ _ = null == w ? void 0 : w.connectedNodes().not(u)[0];
+ if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) {
+ s = u;
+ break
+ }
+ if (x === !1) break;
+ for (var E = u.connectedEdges(r ? function() {
+ return this.data("source") === u.id()
+ } : void 0).intersect(g), m = 0; m < E.length; m++) {
+ var T = E[m],
+ S = T.connectedNodes(function() {
+ return this.id() !== u.id()
+ }).intersect(y);
+ 0 === S.length || f[S.id()] || (S = S[0], c.push(S), p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T)
+ }
+ }
+ }
+ for (var C = [], m = 0; m < d.length; m++) {
+ var k = d[m],
+ D = h[k.id()];
+ D && C.push(D), C.push(k)
+ }
+ return {
+ path: new e.Collection(l, C, {
+ unique: !0
+ }),
+ found: new e.Collection(l, s, {
+ unique: !0
+ })
+ }
+ },
+ kruskal: function(t) {
+ function n(e) {
+ for (var t = 0; t < i.length; t++) {
+ var n = i[t];
+ if (n.anySame(e)) return {
+ eles: n,
+ index: t
+ }
+ }
+ }
+ t = e.is.fn(t) ? t : function() {
+ return 1
+ };
+ for (var r = new e.Collection(this._private.cy, []), i = [], a = this.nodes(), o = 0; o < a.length; o++) i.push(a[o].collection());
+ for (var s = this.edges(), l = s.toArray().sort(function(e, n) {
+ var r = t.call(e, e),
+ i = t.call(n, n);
+ return r - i
+ }), o = 0; o < l.length; o++) {
+ var u = l[o],
+ c = u.source()[0],
+ d = u.target()[0],
+ h = n(c),
+ p = n(d);
+ h.index !== p.index && (r = r.add(u), i[h.index] = h.eles.add(p.eles), i.splice(p.index, 1))
+ }
+ return a.add(r)
+ },
+ dijkstra: function(t, n, r) {
+ var i;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.root, n = i.weight, r = i.directed);
+ var a = this._private.cy;
+ n = e.is.fn(n) ? n : function() {
+ return 1
+ };
+ for (var o = e.is.string(t) ? this.filter(t)[0] : t[0], s = {}, l = {}, u = {}, c = this.edges().filter(function() {
+ return !this.isLoop()
+ }), d = this.nodes(), h = [], p = 0; p < d.length; p++) s[d[p].id()] = d[p].same(o) ? 0 : 1 / 0, h.push(d[p]);
+ var f = function(e) {
+ return s[e.id()]
+ };
+ h = new e.Collection(a, h);
+ for (var v = e.Minheap(a, h, f), g = function(e, t) {
+ for (var i, a = (r ? e.edgesTo(t) : e.edgesWith(t)).intersect(c), o = 1 / 0, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = n.apply(l, [l]);
+ (o > u || !i) && (o = u, i = l)
+ }
+ return {
+ edge: i,
+ dist: o
+ }
+ }; v.size() > 0;) {
+ var y = v.pop(),
+ m = y.value,
+ x = y.id,
+ b = a.getElementById(x);
+ if (u[x] = m, m === Math.Infinite) break;
+ for (var w = b.neighborhood().intersect(d), p = 0; p < w.length; p++) {
+ var _ = w[p],
+ E = _.id(),
+ T = g(b, _),
+ S = m + T.dist;
+ S < v.getValueById(E) && (v.edit(E, S), l[E] = {
+ node: b,
+ edge: T.edge
+ })
+ }
+ }
+ return {
+ distanceTo: function(t) {
+ var n = e.is.string(t) ? d.filter(t)[0] : t[0];
+ return u[n.id()]
+ },
+ pathTo: function(t) {
+ var n = e.is.string(t) ? d.filter(t)[0] : t[0],
+ r = [],
+ i = n;
+ if (n.length > 0)
+ for (r.unshift(n); l[i.id()];) {
+ var o = l[i.id()];
+ r.unshift(o.edge), r.unshift(o.node), i = o.node
+ }
+ return new e.Collection(a, r)
+ }
+ }
+ }
+ }), e.elesfn.bfs = e.elesfn.breadthFirstSearch, e.elesfn.dfs = e.elesfn.depthFirstSearch, e.elesfn.stdBfs = e.elesfn.stdBreadthFirstSearch, e.elesfn.stdDfs = e.elesfn.stdDepthFirstSearch
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ aStar: function(t) {
+ t = t || {};
+ var n = function(e, t, r, a) {
+ if (e == t) return a.push(i.getElementById(t)), a;
+ if (t in r) {
+ var o = r[t],
+ s = p[t];
+ return a.push(i.getElementById(t)), a.push(i.getElementById(s)), n(e, o, r, a)
+ }
+ return void 0
+ },
+ r = function(e, t) {
+ if (0 === e.length) return void 0;
+ for (var n = 0, r = t[e[0]], i = 1; i < e.length; i++) {
+ var a = t[e[i]];
+ r > a && (r = a, n = i)
+ }
+ return n
+ },
+ i = this._private.cy;
+ if (null == t || null == t.root) return void 0;
+ var a = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0];
+ if (null == t.goal) return void 0;
+ var o = e.is.string(t.goal) ? this.filter(t.goal)[0] : t.goal[0];
+ if (null != t.heuristic && e.is.fn(t.heuristic)) var s = t.heuristic;
+ else var s = function() {
+ return 0
+ };
+ if (null != t.weight && e.is.fn(t.weight)) var l = t.weight;
+ else var l = function(e) {
+ return 1
+ };
+ if (null != t.directed) var u = t.directed;
+ else var u = !1;
+ var c = [],
+ d = [a.id()],
+ h = {},
+ p = {},
+ f = {},
+ v = {};
+ f[a.id()] = 0, v[a.id()] = s(a);
+ for (var g = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), y = this.nodes(), m = 0; d.length > 0;) {
+ var x = r(d, v),
+ b = i.getElementById(d[x]);
+ if (m++, b.id() == o.id()) {
+ var w = n(a.id(), o.id(), h, []);
+ return w.reverse(), {
+ found: !0,
+ distance: f[b.id()],
+ path: new e.Collection(i, w),
+ steps: m
+ }
+ }
+ c.push(b.id()), d.splice(x, 1);
+ var _ = b.connectedEdges();
+ u && (_ = _.stdFilter(function(e) {
+ return e.data("source") === b.id()
+ })), _ = _.intersect(g);
+ for (var E = 0; E < _.length; E++) {
+ var T = _[E],
+ S = T.connectedNodes().stdFilter(function(e) {
+ return e.id() !== b.id()
+ }).intersect(y);
+ if (-1 == c.indexOf(S.id())) {
+ var C = f[b.id()] + l.apply(T, [T]); - 1 != d.indexOf(S.id()) ? C < f[S.id()] && (f[S.id()] = C, v[S.id()] = C + s(S), h[S.id()] = b.id()) : (f[S.id()] = C, v[S.id()] = C + s(S), d.push(S.id()), h[S.id()] = b.id(), p[S.id()] = T.id())
+ }
+ }
+ }
+ return {
+ found: !1,
+ distance: void 0,
+ path: void 0,
+ steps: m
+ }
+ },
+ floydWarshall: function(t) {
+ t = t || {};
+ var n = this._private.cy;
+ if (null != t.weight && e.is.fn(t.weight)) var r = t.weight;
+ else var r = function(e) {
+ return 1
+ };
+ if (null != t.directed) var i = t.directed;
+ else var i = !1;
+ for (var a = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), o = this.nodes(), s = o.length, l = {}, u = 0; s > u; u++) l[o[u].id()] = u;
+ for (var c = [], u = 0; s > u; u++) {
+ for (var d = new Array(s), h = 0; s > h; h++) u == h ? d[h] = 0 : d[h] = 1 / 0;
+ c.push(d)
+ }
+ var p = [],
+ f = [],
+ v = function(e) {
+ for (var t = 0; s > t; t++) {
+ for (var n = new Array(s), r = 0; s > r; r++) n[r] = void 0;
+ e.push(n)
+ }
+ };
+ v(p), v(f);
+ for (var u = 0; u < a.length; u++) {
+ var g = l[a[u].source().id()],
+ y = l[a[u].target().id()],
+ m = r.apply(a[u], [a[u]]);
+ c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u])
+ }
+ if (!i)
+ for (var u = 0; u < a.length; u++) {
+ var g = l[a[u].target().id()],
+ y = l[a[u].source().id()],
+ m = r.apply(a[u], [a[u]]);
+ c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u])
+ }
+ for (var x = 0; s > x; x++)
+ for (var u = 0; s > u; u++)
+ for (var h = 0; s > h; h++) c[u][x] + c[x][h] < c[u][h] && (c[u][h] = c[u][x] + c[x][h], p[u][h] = p[u][x]);
+ for (var b = [], u = 0; s > u; u++) b.push(o[u].id());
+ var w = {
+ distance: function(t, r) {
+ if (e.is.string(t)) var i = n.filter(t)[0].id();
+ else var i = t.id();
+ if (e.is.string(r)) var a = n.filter(r)[0].id();
+ else var a = r.id();
+ return c[l[i]][l[a]]
+ },
+ path: function(t, r) {
+ var i = function(e, t, r, i, a) {
+ if (e === t) return n.getElementById(i[e]);
+ if (void 0 === r[e][t]) return void 0;
+ for (var o = [n.getElementById(i[e])], s = e; e !== t;) {
+ s = e, e = r[e][t];
+ var l = a[s][e];
+ o.push(l), o.push(n.getElementById(i[e]))
+ }
+ return o
+ };
+ if (e.is.string(t)) var a = n.filter(t)[0].id();
+ else var a = t.id();
+ if (e.is.string(r)) var o = n.filter(r)[0].id();
+ else var o = r.id();
+ var s = i(l[a], l[o], p, b, f);
+ return new e.Collection(n, s)
+ }
+ };
+ return w
+ },
+ bellmanFord: function(t) {
+ if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight;
+ else var n = function(e) {
+ return 1
+ };
+ if (null != t.directed) var r = t.directed;
+ else var r = !1;
+ if (null == t.root) return void e.util.error("options.root required");
+ if (e.is.string(t.root)) var i = this.filter(t.root)[0];
+ else var i = t.root[0];
+ for (var a = this._private.cy, o = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), s = this.nodes(), l = s.length, u = {}, c = 0; l > c; c++) u[s[c].id()] = c;
+ for (var d = [], h = [], p = [], c = 0; l > c; c++) s[c].id() === i.id() ? d[c] = 0 : d[c] = 1 / 0, h[c] = void 0;
+ for (var f = !1, c = 1; l > c; c++) {
+ f = !1;
+ for (var v = 0; v < o.length; v++) {
+ var g = u[o[v].source().id()],
+ y = u[o[v].target().id()],
+ m = n.apply(o[v], [o[v]]),
+ x = d[g] + m;
+ if (x < d[y] && (d[y] = x, h[y] = g, p[y] = o[v], f = !0), !r) {
+ var x = d[y] + m;
+ x < d[g] && (d[g] = x, h[g] = y, p[g] = o[v], f = !0)
+ }
+ }
+ if (!f) break
+ }
+ if (f)
+ for (var v = 0; v < o.length; v++) {
+ var g = u[o[v].source().id()],
+ y = u[o[v].target().id()],
+ m = n.apply(o[v], [o[v]]);
+ if (d[g] + m < d[y]) return e.util.error("Error: graph contains a negative weigth cycle!"), {
+ pathTo: void 0,
+ distanceTo: void 0,
+ hasNegativeWeightCycle: !0
+ }
+ }
+ for (var b = [], c = 0; l > c; c++) b.push(s[c].id());
+ var w = {
+ distanceTo: function(t) {
+ if (e.is.string(t)) var n = a.filter(t)[0].id();
+ else var n = t.id();
+ return d[u[n]]
+ },
+ pathTo: function(t) {
+ var n = function(e, t, n, r, i, o) {
+ for (;;) {
+ if (i.push(a.getElementById(r[n])), i.push(o[n]), t === n) return i;
+ var s = e[n];
+ if ("undefined" == typeof s) return void 0;
+ n = s
+ }
+ };
+ if (e.is.string(t)) var r = a.filter(t)[0].id();
+ else var r = t.id();
+ var o = [],
+ s = n(h, u[i.id()], u[r], b, o, p);
+ return null != s && s.reverse(), new e.Collection(a, s)
+ },
+ hasNegativeWeightCycle: !1
+ };
+ return w
+ },
+ kargerStein: function(t) {
+ t = t || {};
+ var n = function(e, t, n) {
+ for (var r = n[e], i = r[1], a = r[2], o = t[i], s = t[a], l = n.filter(function(e) {
+ return t[e[1]] === o && t[e[2]] === s ? !1 : t[e[1]] === s && t[e[2]] === o ? !1 : !0
+ }), u = 0; u < l.length; u++) {
+ var c = l[u];
+ c[1] === s ? (l[u] = c.slice(0), l[u][1] = o) : c[2] === s && (l[u] = c.slice(0), l[u][2] = o)
+ }
+ for (var u = 0; u < t.length; u++) t[u] === s && (t[u] = o);
+ return l
+ },
+ r = function(e, t, i, a) {
+ if (a >= i) return t;
+ var o = Math.floor(Math.random() * t.length),
+ s = n(o, e, t);
+ return r(e, s, i - 1, a)
+ },
+ i = this._private.cy,
+ a = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }),
+ o = this.nodes(),
+ s = o.length,
+ l = a.length,
+ u = Math.ceil(Math.pow(Math.log(s) / Math.LN2, 2)),
+ c = Math.floor(s / Math.sqrt(2));
+ if (2 > s) return void e.util.error("At least 2 nodes are required for KargerSteing algorithm!");
+ for (var d = {}, h = 0; s > h; h++) d[o[h].id()] = h;
+ for (var p = [], h = 0; l > h; h++) {
+ var f = a[h];
+ p.push([h, d[f.source().id()], d[f.target().id()]])
+ }
+ for (var v, g = 1 / 0, y = [], h = 0; s > h; h++) y.push(h);
+ for (var m = 0; u >= m; m++) {
+ var x = y.slice(0),
+ b = r(x, p, s, c),
+ w = x.slice(0),
+ _ = r(x, b, c, 2),
+ E = r(w, b, c, 2);
+ _.length <= E.length && _.length < g ? (g = _.length, v = [_, x]) : E.length <= _.length && E.length < g && (g = E.length, v = [E, w])
+ }
+ for (var T = v[0].map(function(e) {
+ return a[e[0]]
+ }), S = [], C = [], k = v[1][0], h = 0; h < v[1].length; h++) {
+ var D = v[1][h];
+ D === k ? S.push(o[h]) : C.push(o[h])
+ }
+ var N = {
+ cut: new e.Collection(i, T),
+ partition1: new e.Collection(i, S),
+ partition2: new e.Collection(i, C)
+ };
+ return N
+ },
+ pageRank: function(t) {
+ t = t || {};
+ var n = function(e) {
+ for (var t = e.length, n = 0, r = 0; t > r; r++) n += e[r];
+ for (var r = 0; t > r; r++) e[r] = e[r] / n
+ };
+ if (null != t && null != t.dampingfactor) var r = t.dampingFactor;
+ else var r = .8;
+ if (null != t && null != t.precision) var i = t.precision;
+ else var i = 1e-6;
+ if (null != t && null != t.iterations) var a = t.iterations;
+ else var a = 200;
+ if (null != t && null != t.weight && e.is.fn(t.weight)) var o = t.weight;
+ else var o = function(e) {
+ return 1
+ };
+ for (var s = this._private.cy, l = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), u = this.nodes(), c = u.length, d = l.length, h = {}, p = 0; c > p; p++) h[u[p].id()] = p;
+ for (var f = [], v = [], g = (1 - r) / c, p = 0; c > p; p++) {
+ for (var y = [], m = 0; c > m; m++) y.push(0);
+ f.push(y), v.push(0)
+ }
+ for (var p = 0; d > p; p++) {
+ var x = l[p],
+ b = h[x.source().id()],
+ w = h[x.target().id()],
+ _ = o.apply(x, [x]);
+ f[w][b] += _, v[b] += _
+ }
+ for (var E = 1 / c + g, m = 0; c > m; m++)
+ if (0 === v[m])
+ for (var p = 0; c > p; p++) f[p][m] = E;
+ else
+ for (var p = 0; c > p; p++) f[p][m] = f[p][m] / v[m] + g;
+ for (var T, S = [], C = [], p = 0; c > p; p++) S.push(1), C.push(0);
+ for (var k = 0; a > k; k++) {
+ for (var D = C.slice(0), p = 0; c > p; p++)
+ for (var m = 0; c > m; m++) D[p] += f[p][m] * S[m];
+ n(D), T = S, S = D;
+ for (var N = 0, p = 0; c > p; p++) N += Math.pow(T[p] - S[p], 2);
+ if (i > N) break
+ }
+ var P = {
+ rank: function(t) {
+ if (e.is.string(t)) var n = s.filter(t)[0].id();
+ else var n = t.id();
+ return S[h[n]]
+ }
+ };
+ return P
+ },
+ degreeCentralityNormalized: function(t) {
+ if (t = t || {}, null != t.directed) var n = t.directed;
+ else var n = !1;
+ var r = this.nodes(),
+ i = r.length;
+ if (n) {
+ for (var a = {}, o = {}, s = 0, l = 0, u = 0; i > u; u++) {
+ var c = r[u],
+ d = this.degreeCentrality(e.util.extend({}, t, {
+ root: c
+ }));
+ s < d.indegree && (s = d.indegree), l < d.outdegree && (l = d.outdegree), a[c.id()] = d.indegree, o[c.id()] = d.outdegree
+ }
+ return {
+ indegree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return a[t] / s
+ },
+ outdegree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return o[t] / l
+ }
+ }
+ }
+ for (var h = {}, p = 0, u = 0; i > u; u++) {
+ var c = r[u],
+ d = this.degreeCentrality(e.util.extend({}, t, {
+ root: c
+ }));
+ p < d.degree && (p = d.degree), h[c.id()] = d.degree
+ }
+ return {
+ degree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return h[t] / p
+ }
+ }
+ },
+ degreeCentrality: function(t) {
+ t = t || {};
+ var n = this;
+ if (null == t || null == t.root) return void 0;
+ var r = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0];
+ if (null != t.weight && e.is.fn(t.weight)) var i = t.weight;
+ else var i = function(e) {
+ return 1
+ };
+ if (null != t.directed) var a = t.directed;
+ else var a = !1;
+ if (null != t.alpha && e.is.number(t.alpha)) var o = t.alpha;
+ else o = 0;
+ if (a) {
+ for (var s = r.connectedEdges('edge[target = "' + r.id() + '"]').intersection(n), l = r.connectedEdges('edge[source = "' + r.id() + '"]').intersection(n), u = s.length, c = l.length, d = 0, h = 0, p = 0; p < s.length; p++) {
+ var f = s[p];
+ d += i.apply(f, [f])
+ }
+ for (var p = 0; p < l.length; p++) {
+ var f = l[p];
+ h += i.apply(f, [f])
+ }
+ return {
+ indegree: Math.pow(u, 1 - o) * Math.pow(d, o),
+ outdegree: Math.pow(c, 1 - o) * Math.pow(h, o)
+ }
+ }
+ for (var v = r.connectedEdges().intersection(n), g = v.length, y = 0, p = 0; p < v.length; p++) {
+ var f = v[p];
+ y += i.apply(f, [f])
+ }
+ return {
+ degree: Math.pow(g, 1 - o) * Math.pow(y, o)
+ }
+ },
+ closenessCentralityNormalized: function(t) {
+ t = t || {};
+ var n = t.harmonic;
+ void 0 === n && (n = !0);
+ for (var r = {}, i = 0, a = this.nodes(), o = this.floydWarshall({
+ weight: t.weight,
+ directed: t.directed
+ }), s = 0; s < a.length; s++) {
+ for (var l = 0, u = 0; u < a.length; u++)
+ if (s != u) {
+ var c = o.distance(a[s], a[u]);
+ l += n ? 1 / c : c
+ }
+ n || (l = 1 / l), l > i && (i = l), r[a[s].id()] = l
+ }
+ return {
+ closeness: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return r[t] / i
+ }
+ }
+ },
+ closenessCentrality: function(t) {
+ if (t = t || {}, null == t.root) return void e.util.error("options.root required");
+ if (e.is.string(t.root)) var n = this.filter(t.root)[0];
+ else var n = t.root[0];
+ if (null != t.weight && e.is.fn(t.weight)) var r = t.weight;
+ else var r = function() {
+ return 1
+ };
+ if (null != t.directed && e.is.bool(t.directed)) var i = t.directed;
+ else var i = !1;
+ var a = t.harmonic;
+ void 0 === a && (a = !0);
+ for (var o = this.dijkstra({
+ root: n,
+ weight: r,
+ directed: i
+ }), s = 0, l = this.nodes(), u = 0; u < l.length; u++)
+ if (l[u].id() != n.id()) {
+ var c = o.distanceTo(l[u]);
+ s += a ? 1 / c : c
+ }
+ return a ? s : 1 / s
+ },
+ betweennessCentrality: function(t) {
+ if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight,
+ r = !0;
+ else var r = !1;
+ if (null != t.directed && e.is.bool(t.directed)) var i = t.directed;
+ else var i = !1;
+ for (var a = function(e, t) {
+ e.unshift(t);
+ for (var n = 0; v[e[n]] < v[e[n + 1]] && n < e.length - 1; n++) {
+ var r = e[n];
+ e[n] = e[n + 1], e[n + 1] = r
+ }
+ }, o = this._private.cy, s = this.nodes(), l = {}, u = {}, c = 0; c < s.length; c++) i ? l[s[c].id()] = s[c].outgoers("node") : l[s[c].id()] = s[c].openNeighborhood("node");
+ for (var c = 0; c < s.length; c++) u[s[c].id()] = 0;
+ for (var d = 0; d < s.length; d++) {
+ for (var h = [], p = {}, f = {}, v = {}, g = [], c = 0; c < s.length; c++) p[s[c].id()] = [], f[s[c].id()] = 0, v[s[c].id()] = Number.POSITIVE_INFINITY;
+ for (f[s[d].id()] = 1, v[s[d].id()] = 0, g.unshift(s[d].id()); g.length > 0;) {
+ var y = g.pop();
+ h.push(y), r ? l[y].forEach(function(e) {
+ if (o.$("#" + y).edgesTo(e).length > 0) var t = o.$("#" + y).edgesTo(e)[0];
+ else var t = e.edgesTo("#" + y)[0];
+ var r = n.apply(t, [t]);
+ v[e.id()] > v[y] + r && (v[e.id()] = v[y] + r, g.indexOf(e.id()) < 0 ? a(g, e.id()) : (g.splice(g.indexOf(e.id()), 1), a(g, e.id())), f[e.id()] = 0, p[e.id()] = []), v[e.id()] == v[y] + r && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y))
+ }) : l[y].forEach(function(e) {
+ v[e.id()] == Number.POSITIVE_INFINITY && (g.unshift(e.id()), v[e.id()] = v[y] + 1), v[e.id()] == v[y] + 1 && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y))
+ })
+ }
+ for (var m = {}, c = 0; c < s.length; c++) m[s[c].id()] = 0;
+ for (; h.length > 0;) {
+ var x = h.pop();
+ p[x].forEach(function(e) {
+ m[e] = m[e] + f[e] / f[x] * (1 + m[x]), x != s[d].id() && (u[x] = u[x] + m[x])
+ })
+ }
+ }
+ var b = 0;
+ for (var w in u) b < u[w] && (b = u[w]);
+ var _ = {
+ betweenness: function(t) {
+ if (e.is.string(t)) var t = o.filter(t)[0].id();
+ else var t = t.id();
+ return u[t]
+ },
+ betweennessNormalized: function(t) {
+ if (e.is.string(t)) var t = o.filter(t)[0].id();
+ else var t = t.id();
+ return u[t] / b
+ }
+ };
+ return _.betweennessNormalised = _.betweennessNormalized, _
+ }
+ }), e.elesfn.dc = e.elesfn.degreeCentrality, e.elesfn.dcn = e.elesfn.degreeCentralityNormalised = e.elesfn.degreeCentralityNormalized, e.elesfn.cc = e.elesfn.closenessCentrality, e.elesfn.ccn = e.elesfn.closenessCentralityNormalised = e.elesfn.closenessCentralityNormalized, e.elesfn.bc = e.elesfn.betweennessCentrality
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ animated: e.define.animated(),
+ clearQueue: e.define.clearQueue(),
+ delay: e.define.delay(),
+ animate: e.define.animate(),
+ stop: e.define.stop()
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ addClass: function(t) {
+ t = t.split(/\s+/);
+ for (var n = this, r = [], i = 0; i < t.length; i++) {
+ var a = t[i];
+ if (!e.is.emptyString(a))
+ for (var o = 0; o < n.length; o++) {
+ var s = n[o],
+ l = s._private.classes[a];
+ s._private.classes[a] = !0, l || r.push(s)
+ }
+ }
+ return r.length > 0 && new e.Collection(this._private.cy, r).updateStyle().trigger("class"), n
+ },
+ hasClass: function(e) {
+ var t = this[0];
+ return null != t && t._private.classes[e] ? !0 : !1
+ },
+ toggleClass: function(t, n) {
+ for (var r = t.split(/\s+/), i = this, a = [], o = 0, s = i.length; s > o; o++)
+ for (var l = i[o], u = 0; u < r.length; u++) {
+ var c = r[u];
+ if (!e.is.emptyString(c)) {
+ var d = l._private.classes[c],
+ h = n || void 0 === n && !d;
+ h ? (l._private.classes[c] = !0, d || a.push(l)) : (l._private.classes[c] = !1, d && a.push(l))
+ }
+ }
+ return a.length > 0 && new e.Collection(this._private.cy, a).updateStyle().trigger("class"), i
+ },
+ removeClass: function(t) {
+ t = t.split(/\s+/);
+ for (var n = this, r = [], i = 0; i < n.length; i++)
+ for (var a = n[i], o = 0; o < t.length; o++) {
+ var s = t[o];
+ if (s && "" !== s) {
+ var l = a._private.classes[s];
+ a._private.classes[s] = void 0, l && r.push(a)
+ }
+ }
+ return r.length > 0 && new e.Collection(n._private.cy, r).updateStyle(), n.trigger("class"), n
+ },
+ flashClass: function(e, t) {
+ var n = this;
+ if (null == t) t = 250;
+ else if (0 === t) return n;
+ return n.addClass(e), setTimeout(function() {
+ n.removeClass(e)
+ }, t), n
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ allAre: function(e) {
+ return this.filter(e).length === this.length
+ },
+ is: function(e) {
+ return this.filter(e).length > 0
+ },
+ some: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this);
+ if (r) return !0
+ }
+ return !1
+ },
+ every: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this);
+ if (!r) return !1
+ }
+ return !0
+ },
+ same: function(e) {
+ return e = this.cy().collection(e), this.length !== e.length ? !1 : this.intersect(e).length === this.length
+ },
+ anySame: function(e) {
+ return e = this.cy().collection(e), this.intersect(e).length > 0
+ },
+ allAreNeighbors: function(e) {
+ return e = this.cy().collection(e), this.neighborhood().intersect(e).length === e.length
+ }
+ }), e.elesfn.allAreNeighbours = e.elesfn.allAreNeighbors
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ parent: function(t) {
+ for (var n = [], r = this._private.cy, i = 0; i < this.length; i++) {
+ var a = this[i],
+ o = r.getElementById(a._private.data.parent);
+ o.size() > 0 && n.push(o)
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ parents: function(t) {
+ for (var n = [], r = this.parent(); r.nonempty();) {
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ n.push(a)
+ }
+ r = r.parent()
+ }
+ return new e.Collection(this.cy(), n, {
+ unique: !0
+ }).filter(t)
+ },
+ commonAncestors: function(e) {
+ for (var t, n = 0; n < this.length; n++) {
+ var r = this[n],
+ i = r.parents();
+ t = t || i, t = t.intersect(i)
+ }
+ return t.filter(e)
+ },
+ orphans: function(e) {
+ return this.stdFilter(function(e) {
+ return e.isNode() && e.parent().empty()
+ }).filter(e)
+ },
+ nonorphans: function(e) {
+ return this.stdFilter(function(e) {
+ return e.isNode() && e.parent().nonempty()
+ }).filter(e)
+ },
+ children: function(t) {
+ for (var n = [], r = 0; r < this.length; r++) {
+ var i = this[r];
+ n = n.concat(i._private.children)
+ }
+ return new e.Collection(this.cy(), n, {
+ unique: !0
+ }).filter(t)
+ },
+ siblings: function(e) {
+ return this.parent().children().not(this).filter(e)
+ },
+ isParent: function() {
+ var e = this[0];
+ return e ? 0 !== e._private.children.length : void 0
+ },
+ isChild: function() {
+ var e = this[0];
+ return e ? void 0 !== e._private.data.parent && 0 !== e.parent().length : void 0
+ },
+ descendants: function(t) {
+ function n(e) {
+ for (var t = 0; t < e.length; t++) {
+ var i = e[t];
+ r.push(i), i.children().nonempty() && n(i.children())
+ }
+ }
+ var r = [];
+ return n(this.children()), new e.Collection(this.cy(), r, {
+ unique: !0
+ }).filter(t)
+ }
+ }), e.elesfn.ancestors = e.elesfn.parents
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = 1,
+ n = 0;
+ e.fn.eles({
+ data: e.define.data({
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "data",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ immutableKeys: {
+ id: !0,
+ source: !0,
+ target: !0,
+ parent: !0
+ },
+ updateStyle: !0
+ }),
+ removeData: e.define.removeData({
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !0,
+ immutableKeys: {
+ id: !0,
+ source: !0,
+ target: !0,
+ parent: !0
+ },
+ updateStyle: !0
+ }),
+ scratch: e.define.data({
+ field: "scratch",
+ bindingEvent: "scratch",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "scratch",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ updateStyle: !0
+ }),
+ removeScratch: e.define.removeData({
+ field: "scratch",
+ event: "scratch",
+ triggerFnName: "trigger",
+ triggerEvent: !0,
+ updateStyle: !0
+ }),
+ rscratch: e.define.data({
+ field: "rscratch",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingTriggersEvent: !1,
+ allowGetting: !0
+ }),
+ removeRscratch: e.define.removeData({
+ field: "rscratch",
+ triggerEvent: !1
+ }),
+ id: function() {
+ var e = this[0];
+ return e ? e._private.data.id : void 0
+ },
+ position: e.define.data({
+ field: "position",
+ bindingEvent: "position",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "position",
+ settingTriggersEvent: !0,
+ triggerFnName: "rtrigger",
+ allowGetting: !0,
+ validKeys: ["x", "y"],
+ onSet: function(e) {
+ var t = e.updateCompoundBounds();
+ t.rtrigger("position")
+ },
+ canSet: function(e) {
+ return !e.locked()
+ }
+ }),
+ silentPosition: e.define.data({
+ field: "position",
+ bindingEvent: "position",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingEvent: "position",
+ settingTriggersEvent: !1,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ validKeys: ["x", "y"],
+ onSet: function(e) {
+ e.updateCompoundBounds()
+ },
+ canSet: function(e) {
+ return !e.locked()
+ }
+ }),
+ positions: function(t, n) {
+ if (e.is.plainObject(t)) this.position(t);
+ else if (e.is.fn(t)) {
+ for (var r = t, i = 0; i < this.length; i++) {
+ var a = this[i],
+ t = r.apply(a, [i, a]);
+ if (t && !a.locked()) {
+ var o = a._private.position;
+ o.x = t.x, o.y = t.y
+ }
+ }
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ n ? l.trigger("position") : l.rtrigger("position")
+ }
+ return this
+ },
+ silentPositions: function(e) {
+ return this.positions(e, !0)
+ },
+ updateCompoundBounds: function() {
+ function t(e) {
+ var t = e.children(),
+ n = e._private.style,
+ i = "include" === n["compound-sizing-wrt-labels"].value,
+ a = t.boundingBox({
+ includeLabels: i,
+ includeEdges: !0
+ }),
+ o = {
+ top: n["padding-top"].pxValue,
+ bottom: n["padding-bottom"].pxValue,
+ left: n["padding-left"].pxValue,
+ right: n["padding-right"].pxValue
+ },
+ s = e._private.position,
+ l = !1;
+ "auto" === n.width.value && (e._private.autoWidth = a.w + o.left + o.right, s.x = (a.x1 + a.x2 - o.left + o.right) / 2, l = !0), "auto" === n.height.value && (e._private.autoHeight = a.h + o.top + o.bottom, s.y = (a.y1 + a.y2 - o.top + o.bottom) / 2, l = !0), l && r.push(e)
+ }
+ var n = this.cy();
+ if (!n.styleEnabled() || !n.hasCompoundNodes()) return n.collection();
+ for (var r = [], i = this.parent(); i.nonempty();) {
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ t(o)
+ }
+ i = i.parent()
+ }
+ return new e.Collection(n, r)
+ },
+ renderedPosition: function(t, n) {
+ var r = this[0],
+ i = this.cy(),
+ a = i.zoom(),
+ o = i.pan(),
+ s = e.is.plainObject(t) ? t : void 0,
+ l = void 0 !== s || void 0 !== n && e.is.string(t);
+ if (r && r.isNode()) {
+ if (!l) {
+ var u = r._private.position;
+ return s = {
+ x: u.x * a + o.x,
+ y: u.y * a + o.y
+ }, void 0 === t ? s : s[t]
+ }
+ for (var c = 0; c < this.length; c++) {
+ var r = this[c];
+ void 0 !== n ? r._private.position[t] = (n - o[t]) / a : void 0 !== s && (r._private.position = {
+ x: (s.x - o.x) / a,
+ y: (s.y - o.y) / a
+ })
+ }
+ this.rtrigger("position")
+ } else if (!l) return void 0;
+ return this
+ },
+ relativePosition: function(t, n) {
+ var r = this[0],
+ i = this.cy(),
+ a = e.is.plainObject(t) ? t : void 0,
+ o = void 0 !== a || void 0 !== n && e.is.string(t),
+ s = i.hasCompoundNodes();
+ if (r && r.isNode()) {
+ if (!o) {
+ var l = r._private.position,
+ u = s ? r.parent() : null,
+ c = u && u.length > 0,
+ d = c;
+ c && (u = u[0]);
+ var h = d ? u._private.position : {
+ x: 0,
+ y: 0
+ };
+ return a = {
+ x: l.x - h.x,
+ y: l.y - h.y
+ }, void 0 === t ? a : a[t]
+ }
+ for (var p = 0; p < this.length; p++) {
+ var r = this[p],
+ u = s ? r.parent() : null,
+ c = u && u.length > 0,
+ d = c;
+ c && (u = u[0]);
+ var h = d ? u._private.position : {
+ x: 0,
+ y: 0
+ };
+ void 0 !== n ? r._private.position[t] = n + h[t] : void 0 !== a && (r._private.position = {
+ x: a.x + h.x,
+ y: a.y + h.y
+ })
+ }
+ this.rtrigger("position")
+ } else if (!o) return void 0;
+ return this
+ },
+ width: function() {
+ var e = this[0],
+ t = e._private.cy,
+ n = t._private.styleEnabled;
+ if (e) {
+ if (n) {
+ var r = e._private.style.width;
+ return "auto" === r.strValue ? e._private.autoWidth : r.pxValue
+ }
+ return 1
+ }
+ },
+ outerWidth: function() {
+ var e = this[0],
+ r = e._private.cy,
+ i = r._private.styleEnabled;
+ if (e) {
+ if (i) {
+ var a = e._private.style,
+ o = "auto" === a.width.strValue ? e._private.autoWidth : a.width.pxValue,
+ s = a["border-width"] ? a["border-width"].pxValue * t + n : 0;
+ return o + s
+ }
+ return 1
+ }
+ },
+ renderedWidth: function() {
+ var e = this[0];
+ if (e) {
+ var t = e.width();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedOuterWidth: function() {
+ var e = this[0];
+ if (e) {
+ var t = e.outerWidth();
+ return t * this.cy().zoom()
+ }
+ },
+ height: function() {
+ var e = this[0],
+ t = e._private.cy,
+ n = t._private.styleEnabled;
+ if (e && "nodes" === e._private.group) {
+ if (n) {
+ var r = e._private.style.height;
+ return "auto" === r.strValue ? e._private.autoHeight : r.pxValue
+ }
+ return 1
+ }
+ },
+ outerHeight: function() {
+ var e = this[0],
+ r = e._private.cy,
+ i = r._private.styleEnabled;
+ if (e && "nodes" === e._private.group) {
+ if (!i) return 1;
+ var a = e._private.style,
+ o = "auto" === a.height.strValue ? e._private.autoHeight : a.height.pxValue,
+ s = a["border-width"] ? a["border-width"].pxValue * t + n : 0;
+ return o + s
+ }
+ },
+ renderedHeight: function() {
+ var e = this[0];
+ if (e && "nodes" === e._private.group) {
+ var t = e.height();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedOuterHeight: function() {
+ var e = this[0];
+ if (e && "nodes" === e._private.group) {
+ var t = e.outerHeight();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedBoundingBox: function(e) {
+ var t = this.boundingBox(e),
+ n = this.cy(),
+ r = n.zoom(),
+ i = n.pan(),
+ a = t.x1 * r + i.x,
+ o = t.x2 * r + i.x,
+ s = t.y1 * r + i.y,
+ l = t.y2 * r + i.y;
+ return {
+ x1: a,
+ x2: o,
+ y1: s,
+ y2: l,
+ w: o - a,
+ h: l - s
+ }
+ },
+ boundingBox: function(e) {
+ var t = this,
+ n = t._private.cy,
+ r = n._private,
+ i = r.styleEnabled;
+ e = e || {};
+ var a = void 0 === e.includeNodes ? !0 : e.includeNodes,
+ o = void 0 === e.includeEdges ? !0 : e.includeEdges,
+ s = void 0 === e.includeLabels ? !0 : e.includeLabels;
+ i && r.renderer.recalculateRenderedStyle(this);
+ for (var l = 1 / 0, u = -(1 / 0), c = 1 / 0, d = -(1 / 0), h = 0; h < t.length; h++) {
+ var p, f, v, g, y, m, x = t[h],
+ b = x._private,
+ w = b.style,
+ _ = i ? b.style.display.value : "element",
+ E = "nodes" === b.group,
+ T = !1;
+ if ("none" !== _) {
+ if (E && a) {
+ T = !0;
+ var S = b.position;
+ y = S.x, m = S.y;
+ var C = x.outerWidth(),
+ k = C / 2,
+ D = x.outerHeight(),
+ N = D / 2;
+ p = y - k, f = y + k, v = m - N, g = m + N, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ } else if (x.isEdge() && o) {
+ T = !0;
+ var P = b.source,
+ M = P._private,
+ B = M.position,
+ L = b.target,
+ O = L._private,
+ A = O.position,
+ I = b.rstyle || {};
+ if (p = B.x, f = A.x, v = B.y, g = A.y, p > f) {
+ var z = p;
+ p = f, f = z
+ }
+ if (v > g) {
+ var z = v;
+ v = g, g = z
+ }
+ if (l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d, i)
+ for (var R = I.bezierPts || [], C = w.width.pxValue, j = C / 2, F = 0; F < R.length; F++) {
+ var q = R[F];
+ p = q.x - j, f = q.x + j, v = q.y - j, g = q.y + j, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ }
+ if (i && "haystack" === w["curve-style"].strValue) {
+ var V = b.rscratch.haystackPts;
+ if (p = V[0], v = V[1], f = V[2], g = V[3], p > f) {
+ var z = p;
+ p = f, f = z
+ }
+ if (v > g) {
+ var z = v;
+ v = g, g = z
+ }
+ l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ }
+ }
+ if (i) {
+ var w = x._private.style,
+ I = x._private.rstyle,
+ X = w.content.strValue,
+ H = w["font-size"],
+ Y = w["text-halign"],
+ $ = w["text-valign"],
+ W = I.labelWidth,
+ U = I.labelHeight,
+ Z = I.labelX,
+ G = I.labelY;
+ if (T && s && X && H && null != U && null != W && null != Z && null != G && Y && $) {
+ var K, J, Q, ee, te = U,
+ ne = W;
+ if (x.isEdge()) K = Z - ne / 2, J = Z + ne / 2, Q = G - te / 2, ee = G + te / 2;
+ else {
+ switch (Y.value) {
+ case "left":
+ K = Z - ne, J = Z;
+ break;
+ case "center":
+ K = Z - ne / 2, J = Z + ne / 2;
+ break;
+ case "right":
+ K = Z, J = Z + ne
+ }
+ switch ($.value) {
+ case "top":
+ Q = G - te, ee = G;
+ break;
+ case "center":
+ Q = G - te / 2, ee = G + te / 2;
+ break;
+ case "bottom":
+ Q = G, ee = G + te
+ }
+ }
+ l = l > K ? K : l, u = J > u ? J : u, c = c > Q ? Q : c, d = ee > d ? ee : d
+ }
+ }
+ }
+ }
+ var re = function(e) {
+ return e === 1 / 0 || e === -(1 / 0) ? 0 : e
+ };
+ return l = re(l), u = re(u), c = re(c), d = re(d), {
+ x1: l,
+ x2: u,
+ y1: c,
+ y2: d,
+ w: u - l,
+ h: d - c
+ }
+ }
+ });
+ var r = e.elesfn;
+ r.attr = r.data, r.removeAttr = r.removeData, r.modelPosition = r.point = r.position, r.modelPositions = r.points = r.positions, r.renderedPoint = r.renderedPosition, r.relativePoint = r.relativePosition, r.boundingbox = r.boundingBox, r.renderedBoundingbox = r.renderedBoundingBox
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ return function(t) {
+ var n = this;
+ if (void 0 === t && (t = !0), 0 !== n.length && n.isNode() && !n.removed()) {
+ for (var r = 0, i = n[0], a = i._private.edges, o = 0; o < a.length; o++) {
+ var s = a[o];
+ (t || !s.isLoop()) && (r += e(i, s))
+ }
+ return r
+ }
+ }
+ }
+
+ function n(e, t) {
+ return function(n) {
+ for (var r, i = this.nodes(), a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = o[e](n);
+ void 0 === s || void 0 !== r && !t(s, r) || (r = s)
+ }
+ return r
+ }
+ }
+ e.fn.eles({
+ degree: t(function(e, t) {
+ return t.source().same(t.target()) ? 2 : 1
+ }),
+ indegree: t(function(e, t) {
+ return t.target().same(e) ? 1 : 0
+ }),
+ outdegree: t(function(e, t) {
+ return t.source().same(e) ? 1 : 0
+ })
+ }), e.fn.eles({
+ minDegree: n("degree", function(e, t) {
+ return t > e
+ }),
+ maxDegree: n("degree", function(e, t) {
+ return e > t
+ }),
+ minIndegree: n("indegree", function(e, t) {
+ return t > e
+ }),
+ maxIndegree: n("indegree", function(e, t) {
+ return e > t
+ }),
+ minOutdegree: n("outdegree", function(e, t) {
+ return t > e
+ }),
+ maxOutdegree: n("outdegree", function(e, t) {
+ return e > t
+ })
+ }), e.fn.eles({
+ totalDegree: function(e) {
+ for (var t = 0, n = this.nodes(), r = 0; r < n.length; r++) t += n[r].degree(e);
+ return t
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ once: e.define.on({
+ unbindAllBindersOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger(),
+ rtrigger: function(e, t) {
+ return 0 !== this.length ? (this.cy().notify({
+ type: e,
+ collection: this
+ }), this.trigger(e, t), this) : void 0
+ }
+ }), e.define.eventAliasesOn(e.elesfn)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ nodes: function(e) {
+ return this.filter(function(e, t) {
+ return t.isNode()
+ }).filter(e)
+ },
+ edges: function(e) {
+ return this.filter(function(e, t) {
+ return t.isEdge()
+ }).filter(e)
+ },
+ filter: function(t) {
+ var n = this._private.cy;
+ if (e.is.fn(t)) {
+ for (var r = [], i = 0; i < this.length; i++) {
+ var a = this[i];
+ t.apply(a, [i, a]) && r.push(a)
+ }
+ return new e.Collection(n, r)
+ }
+ return e.is.string(t) || e.is.elementOrCollection(t) ? new e.Selector(t).filter(this) : void 0 === t ? this : new e.Collection(n)
+ },
+ not: function(t) {
+ var n = this._private.cy;
+ if (t) {
+ e.is.string(t) && (t = this.filter(t));
+ for (var r = [], i = 0; i < this.length; i++) {
+ var a = this[i],
+ o = t._private.ids[a.id()];
+ o || r.push(a)
+ }
+ return new e.Collection(n, r)
+ }
+ return this
+ },
+ absoluteComplement: function() {
+ var e = this._private.cy;
+ return e.elements().not(this)
+ },
+ intersect: function(t) {
+ var n = this._private.cy;
+ if (e.is.string(t)) {
+ var r = t;
+ return this.filter(r)
+ }
+ for (var i = [], a = this, o = t, s = this.length < t.length, l = s ? o._private.ids : a._private.ids, u = s ? a : o, c = 0; c < u.length; c++) {
+ var d = u[c]._private.data.id,
+ h = l[d];
+ h && i.push(h)
+ }
+ return new e.Collection(n, i)
+ },
+ xor: function(t) {
+ var n = this._private.cy;
+ e.is.string(t) && (t = n.$(t));
+ var r = [],
+ i = this,
+ a = t,
+ o = function(e, t) {
+ for (var n = 0; n < e.length; n++) {
+ var i = e[n],
+ a = i._private.data.id,
+ o = t._private.ids[a];
+ o || r.push(i)
+ }
+ };
+ return o(i, a), o(a, i), new e.Collection(n, r)
+ },
+ diff: function(t) {
+ var n = this._private.cy;
+ e.is.string(t) && (t = n.$(t));
+ var r = [],
+ i = [],
+ a = [],
+ o = this,
+ s = t,
+ l = function(e, t, n) {
+ for (var r = 0; r < e.length; r++) {
+ var i = e[r],
+ o = i._private.data.id,
+ s = t._private.ids[o];
+ s ? a.push(i) : n.push(i)
+ }
+ };
+ return l(o, s, r), l(s, o, i), {
+ left: new e.Collection(n, r, {
+ unique: !0
+ }),
+ right: new e.Collection(n, i, {
+ unique: !0
+ }),
+ both: new e.Collection(n, a, {
+ unique: !0
+ })
+ }
+ },
+ add: function(t) {
+ var n = this._private.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var r = t;
+ t = n.elements(r)
+ }
+ for (var i = [], a = 0; a < this.length; a++) i.push(this[a]);
+ for (var a = 0; a < t.length; a++) {
+ var o = !this._private.ids[t[a].id()];
+ o && i.push(t[a])
+ }
+ return new e.Collection(n, i)
+ },
+ merge: function(t) {
+ var n = this._private,
+ r = n.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var i = t;
+ t = r.elements(i)
+ }
+ for (var a = 0; a < t.length; a++) {
+ var o = t[a],
+ s = o.id(),
+ l = !n.ids[s];
+ if (l) {
+ var u = this.length++;
+ this[u] = o, n.ids[s] = o, n.indexes[s] = u
+ }
+ }
+ return this
+ },
+ unmergeOne: function(e) {
+ e = e[0];
+ var t = this._private,
+ n = e.id(),
+ r = t.indexes[n];
+ if (null == r) return this;
+ this[r] = void 0, t.ids[n] = void 0, t.indexes[n] = void 0;
+ var i = r === this.length - 1;
+ if (this.length > 1 && !i) {
+ var a = this.length - 1,
+ o = this[a];
+ this[a] = void 0, this[r] = o, t.indexes[o.id()] = r
+ }
+ return this.length--, this
+ },
+ unmerge: function(t) {
+ var n = this._private.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var r = t;
+ t = n.elements(r)
+ }
+ for (var i = 0; i < t.length; i++) this.unmergeOne(t[i]);
+ return this
+ },
+ map: function(e, t) {
+ for (var n = [], r = this, i = 0; i < r.length; i++) {
+ var a = r[i],
+ o = t ? e.apply(t, [a, i, r]) : e(a, i, r);
+ n.push(o)
+ }
+ return n
+ },
+ stdFilter: function(t, n) {
+ for (var r = [], i = this, a = this._private.cy, o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = n ? t.apply(n, [s, o, i]) : t(s, o, i);
+ l && r.push(s)
+ }
+ return new e.Collection(a, r)
+ },
+ max: function(e, t) {
+ for (var n, r = -(1 / 0), i = this, a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = t ? e.apply(t, [o, a, i]) : e(o, a, i);
+ s > r && (r = s, n = o)
+ }
+ return {
+ value: r,
+ ele: n
+ }
+ },
+ min: function(e, t) {
+ for (var n, r = 1 / 0, i = this, a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = t ? e.apply(t, [o, a, i]) : e(o, a, i);
+ r > s && (r = s, n = o)
+ }
+ return {
+ value: r,
+ ele: n
+ }
+ }
+ });
+ var t = e.elesfn;
+ t.u = t["|"] = t["+"] = t.union = t.or = t.add, t["\\"] = t["!"] = t["-"] = t.difference = t.relativeComplement = t.not, t.n = t["&"] = t["."] = t.and = t.intersection = t.intersect, t["^"] = t["(+)"] = t["(-)"] = t.symmetricDifference = t.symdiff = t.xor, t.fnFilter = t.filterFn = t.stdFilter, t.complement = t.abscomp = t.absoluteComplement
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ isNode: function() {
+ return "nodes" === this.group()
+ },
+ isEdge: function() {
+ return "edges" === this.group()
+ },
+ isLoop: function() {
+ return this.isEdge() && this.source().id() === this.target().id()
+ },
+ isSimple: function() {
+ return this.isEdge() && this.source().id() !== this.target().id()
+ },
+ group: function() {
+ var e = this[0];
+ return e ? e._private.group : void 0
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ each: function(t) {
+ if (e.is.fn(t))
+ for (var n = 0; n < this.length; n++) {
+ var r = this[n],
+ i = t.apply(r, [n, r]);
+ if (i === !1) break
+ }
+ return this
+ },
+ forEach: function(t, n) {
+ if (e.is.fn(t))
+ for (var r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = n ? t.apply(n, [i, r, this]) : t(i, r, this);
+ if (a === !1) break
+ }
+ return this
+ },
+ toArray: function() {
+ for (var e = [], t = 0; t < this.length; t++) e.push(this[t]);
+ return e
+ },
+ slice: function(t, n) {
+ var r = [],
+ i = this.length;
+ null == n && (n = i), null == t && (t = 0), 0 > t && (t = i + t), 0 > n && (n = i + n);
+ for (var a = t; a >= 0 && n > a && i > a; a++) r.push(this[a]);
+ return new e.Collection(this.cy(), r)
+ },
+ size: function() {
+ return this.length
+ },
+ eq: function(t) {
+ return this[t] || new e.Collection(this.cy())
+ },
+ first: function() {
+ return this[0] || new e.Collection(this.cy())
+ },
+ last: function() {
+ return this[this.length - 1] || new e.Collection(this.cy())
+ },
+ empty: function() {
+ return 0 === this.length
+ },
+ nonempty: function() {
+ return !this.empty()
+ },
+ sort: function(t) {
+ if (!e.is.fn(t)) return this;
+ var n = this.cy(),
+ r = this.toArray().sort(t);
+ return new e.Collection(n, r)
+ },
+ sortByZIndex: function() {
+ return this.sort(e.Collection.zIndexSort)
+ },
+ zDepth: function() {
+ var e = this[0];
+ if (!e) return void 0;
+ var t = e._private,
+ n = t.group;
+ if ("nodes" === n) {
+ var r = t.data.parent ? e.parents().size() : 0;
+ return e.isParent() ? r : Number.MAX_VALUE
+ }
+ var i = t.source,
+ a = t.target,
+ o = i.zDepth(),
+ s = a.zDepth();
+ return Math.max(o, s, 0)
+ }
+ }), e.Collection.zIndexSort = function(e, t) {
+ var n = e.cy(),
+ r = e._private,
+ i = t._private,
+ a = r.style["z-index"].value - i.style["z-index"].value,
+ o = 0,
+ s = 0,
+ l = n.hasCompoundNodes(),
+ u = "nodes" === r.group,
+ c = "edges" === r.group,
+ d = "nodes" === i.group,
+ h = "edges" === i.group;
+ l && (o = e.zDepth(), s = t.zDepth());
+ var p = o - s,
+ f = 0 === p;
+ return f ? u && h ? 1 : c && d ? -1 : 0 === a ? r.index - i.index : a : p
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ layoutPositions: function(t, n, r) {
+ var i = this.nodes(),
+ a = this.cy();
+ if (t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), n.animate) {
+ for (var o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = o === i.length - 1,
+ u = r.call(s, o, s),
+ c = s.position();
+ e.is.number(c.x) && e.is.number(c.y) || s.silentPosition({
+ x: 0,
+ y: 0
+ }), s.animate({
+ position: u
+ }, {
+ duration: n.animationDuration,
+ step: l ? function() {
+ n.fit && a.fit(n.eles, n.padding)
+ } : void 0,
+ complete: l ? function() {
+ null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), n.fit && a.fit(n.eles, n.padding), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ } : void 0
+ })
+ }
+ t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })
+ } else i.positions(r), n.fit && a.fit(n.eles, n.padding), null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ });
+ return this
+ },
+ layout: function(t) {
+ var n = this.cy();
+ return n.layout(e.util.extend({}, t, {
+ eles: this
+ })), this
+ },
+ makeLayout: function(t) {
+ var n = this.cy();
+ return n.makeLayout(e.util.extend({}, t, {
+ eles: this
+ }))
+ }
+ }), e.elesfn.createLayout = e.elesfn.makeLayout
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ updateStyle: function(e) {
+ var t = this._private.cy;
+ if (!t.styleEnabled()) return this;
+ if (t._private.batchingStyle) {
+ for (var n = t._private.batchStyleEles, r = 0; r < this.length; r++) {
+ var i = this[r];
+ n.ids[i._private.id] || n.push(i)
+ }
+ return this
+ }
+ var a = t.style();
+ e = e || void 0 === e ? !0 : !1, a.apply(this);
+ var o = this.updateCompoundBounds(),
+ s = o.length > 0 ? this.add(o) : this;
+ return e ? s.rtrigger("style") : s.trigger("style"), this
+ },
+ updateMappers: function(e) {
+ var t = this._private.cy,
+ n = t.style();
+ if (e = e || void 0 === e ? !0 : !1, !t.styleEnabled()) return this;
+ n.updateMappers(this);
+ var r = this.updateCompoundBounds(),
+ i = r.length > 0 ? this.add(r) : this;
+ return e ? i.rtrigger("style") : i.trigger("style"), this
+ },
+ renderedCss: function(e) {
+ var t = this.cy();
+ if (!t.styleEnabled()) return this;
+ var n = this[0];
+ if (n) {
+ var r = n.cy().style().getRenderedStyle(n);
+ return void 0 === e ? r : r[e]
+ }
+ },
+ css: function(t, n) {
+ var r = this.cy();
+ if (!r.styleEnabled()) return this;
+ var i = !1,
+ a = r.style();
+ if (e.is.plainObject(t)) {
+ var o = t;
+ a.applyBypass(this, o, i);
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ l.rtrigger("style")
+ } else if (e.is.string(t)) {
+ if (void 0 === n) {
+ var u = this[0];
+ return u ? u._private.style[t].strValue : void 0
+ }
+ a.applyBypass(this, t, n, i);
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ l.rtrigger("style")
+ } else if (void 0 === t) {
+ var u = this[0];
+ return u ? a.getRawStyle(u) : void 0
+ }
+ return this
+ },
+ removeCss: function(e) {
+ var t = this.cy();
+ if (!t.styleEnabled()) return this;
+ var n = !1,
+ r = t.style(),
+ i = this;
+ if (void 0 === e)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ r.removeAllBypasses(o, n)
+ } else {
+ e = e.split(/\s+/);
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ r.removeBypasses(o, e, n)
+ }
+ }
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ return l.rtrigger("style"), this
+ },
+ show: function() {
+ return this.css("display", "element"), this
+ },
+ hide: function() {
+ return this.css("display", "none"), this
+ },
+ visible: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !0;
+ var t = this[0],
+ n = e.hasCompoundNodes();
+ if (t) {
+ var r = t._private.style;
+ if ("visible" !== r.visibility.value || "element" !== r.display.value) return !1;
+ if ("nodes" === t._private.group) {
+ if (!n) return !0;
+ var i = t._private.data.parent ? t.parents() : null;
+ if (i)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = o._private.style,
+ l = s.visibility.value,
+ u = s.display.value;
+ if ("visible" !== l || "element" !== u) return !1
+ }
+ return !0
+ }
+ var c = t._private.source,
+ d = t._private.target;
+ return c.visible() && d.visible()
+ }
+ },
+ hidden: function() {
+ var e = this[0];
+ return e ? !e.visible() : void 0
+ },
+ effectiveOpacity: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return 1;
+ var t = e.hasCompoundNodes(),
+ n = this[0];
+ if (n) {
+ var r = n._private,
+ i = r.style.opacity.value;
+ if (!t) return i;
+ var a = r.data.parent ? n.parents() : null;
+ if (a)
+ for (var o = 0; o < a.length; o++) {
+ var s = a[o],
+ l = s._private.style.opacity.value;
+ i = l * i
+ }
+ return i
+ }
+ },
+ transparent: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0],
+ n = t.cy().hasCompoundNodes();
+ return t ? n ? 0 === t.effectiveOpacity() : 0 === t._private.style.opacity.value : void 0
+ },
+ isFullAutoParent: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0];
+ if (t) {
+ var n = "auto" === t._private.style.width.value,
+ r = "auto" === t._private.style.height.value;
+ return t.isParent() && n && r
+ }
+ },
+ backgrounding: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0];
+ return t._private.backgrounding ? !0 : !1
+ }
+ }), e.elesfn.bypass = e.elesfn.style = e.elesfn.css, e.elesfn.renderedStyle = e.elesfn.renderedCss, e.elesfn.removeBypass = e.elesfn.removeStyle = e.elesfn.removeCss
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ return function() {
+ var n = arguments,
+ r = [];
+ if (2 === n.length) {
+ var i = n[0],
+ a = n[1];
+ this.bind(t.event, i, a)
+ } else if (1 === n.length) {
+ var a = n[0];
+ this.bind(t.event, a)
+ } else if (0 === n.length) {
+ for (var o = 0; o < this.length; o++) {
+ var s = this[o],
+ l = !t.ableField || s._private[t.ableField],
+ u = s._private[t.field] != t.value;
+ if (t.overrideAble) {
+ var c = t.overrideAble(s);
+ if (void 0 !== c && (l = c, !c)) return this
+ }
+ l && (s._private[t.field] = t.value, u && r.push(s))
+ }
+ var d = e.Collection(this.cy(), r);
+ d.updateStyle(), d.trigger(t.event)
+ }
+ return this
+ }
+ }
+
+ function n(n) {
+ e.elesfn[n.field] = function() {
+ var e = this[0];
+ if (e) {
+ if (n.overrideField) {
+ var t = n.overrideField(e);
+ if (void 0 !== t) return t
+ }
+ return e._private[n.field]
+ }
+ }, e.elesfn[n.on] = t({
+ event: n.on,
+ field: n.field,
+ ableField: n.ableField,
+ overrideAble: n.overrideAble,
+ value: !0
+ }), e.elesfn[n.off] = t({
+ event: n.off,
+ field: n.field,
+ ableField: n.ableField,
+ overrideAble: n.overrideAble,
+ value: !1
+ })
+ }
+ n({
+ field: "locked",
+ overrideField: function(e) {
+ return e.cy().autolock() ? !0 : void 0
+ },
+ on: "lock",
+ off: "unlock"
+ }), n({
+ field: "grabbable",
+ overrideField: function(e) {
+ return e.cy().autoungrabify() ? !1 : void 0
+ },
+ on: "grabify",
+ off: "ungrabify"
+ }), n({
+ field: "selected",
+ ableField: "selectable",
+ overrideAble: function(e) {
+ return e.cy().autounselectify() ? !1 : void 0
+ },
+ on: "select",
+ off: "unselect"
+ }), n({
+ field: "selectable",
+ overrideField: function(e) {
+ return e.cy().autounselectify() ? !1 : void 0
+ },
+ on: "selectify",
+ off: "unselectify"
+ }), e.elesfn.deselect = e.elesfn.unselect, e.elesfn.grabbed = function() {
+ var e = this[0];
+ return e ? e._private.grabbed : void 0
+ }, n({
+ field: "active",
+ on: "activate",
+ off: "unactivate"
+ }), e.elesfn.inactive = function() {
+ var e = this[0];
+ return e ? !e._private.active : void 0
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ return function(n) {
+ for (var r = [], i = this._private.cy, a = 0; a < this.length; a++) {
+ var o = this[a],
+ s = o._private[t.attr];
+ s && r.push(s)
+ }
+ return new e.Collection(i, r, {
+ unique: !0
+ }).filter(n)
+ }
+ }
+
+ function n(t) {
+ return function(n) {
+ var r = [],
+ i = this._private.cy,
+ a = t || {};
+ e.is.string(n) && (n = i.$(n));
+ for (var o = this._private.ids, s = n._private.ids, l = 0; l < n.length; l++)
+ for (var u = n[l]._private.edges, c = 0; c < u.length; c++) {
+ var d = u[c],
+ h = d._private.data,
+ p = o[h.source] && s[h.target],
+ f = s[h.source] && o[h.target],
+ v = p || f;
+ if (v) {
+ if (a.thisIs) {
+ if ("source" === a.thisIs && !p) continue;
+ if ("target" === a.thisIs && !f) continue
+ }
+ r.push(d)
+ }
+ }
+ return new e.Collection(i, r, {
+ unique: !0
+ })
+ }
+ }
+
+ function r(t) {
+ var n = {
+ codirected: !1
+ };
+ return t = e.util.extend({}, n, t),
+ function(n) {
+ for (var r = this._private.cy, i = [], a = this.edges(), o = t, s = 0; s < a.length; s++)
+ for (var l = a[s], u = l.source()[0], c = u.id(), d = l.target()[0], h = d.id(), p = u._private.edges, f = 0; f < p.length; f++) {
+ var v = p[f],
+ g = v._private.data,
+ y = g.target,
+ m = g.source,
+ x = y === h && m === c,
+ b = c === y && h === m;
+ (o.codirected && x || !o.codirected && (x || b)) && i.push(v)
+ }
+ return new e.Collection(r, i, {
+ unique: !0
+ }).filter(n)
+ }
+ }
+ e.fn.eles({
+ roots: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i];
+ if (a.isNode()) {
+ var o = a.connectedEdges(function() {
+ return this.data("target") === a.id() && this.data("source") !== a.id()
+ }).length > 0;
+ o || r.push(a)
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ leaves: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i];
+ if (a.isNode()) {
+ var o = a.connectedEdges(function() {
+ return this.data("source") === a.id() && this.data("target") !== a.id()
+ }).length > 0;
+ o || r.push(a)
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ outgoers: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i],
+ o = a.id();
+ if (a.isNode())
+ for (var s = a._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u._private.data.source,
+ d = u._private.data.target;
+ c === o && d !== o && (r.push(u), r.push(u.target()[0]))
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ successors: function(t) {
+ for (var n = this, r = [], i = {};;) {
+ var a = n.outgoers();
+ if (0 === a.length) break;
+ for (var o = !1, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = l.id();
+ i[u] || (i[u] = !0, r.push(l), o = !0)
+ }
+ if (!o) break;
+ n = a
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ incomers: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i],
+ o = a.id();
+ if (a.isNode())
+ for (var s = a._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u._private.data.source,
+ d = u._private.data.target;
+ d === o && c !== o && (r.push(u), r.push(u.source()[0]))
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ predecessors: function(t) {
+ for (var n = this, r = [], i = {};;) {
+ var a = n.incomers();
+ if (0 === a.length) break;
+ for (var o = !1, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = l.id();
+ i[u] || (i[u] = !0, r.push(l), o = !0)
+ }
+ if (!o) break;
+ n = a
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ }
+ }), e.fn.eles({
+ neighborhood: function(t) {
+ for (var n = [], r = this._private.cy, i = this.nodes(), a = 0; a < i.length; a++)
+ for (var o = i[a], s = o.connectedEdges(), l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u.connectedNodes().not(o);
+ c.length > 0 && n.push(c[0]), n.push(u[0])
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ closedNeighborhood: function(e) {
+ return this.neighborhood().add(this).filter(e)
+ },
+ openNeighborhood: function(e) {
+ return this.neighborhood(e)
+ }
+ }), e.elesfn.neighbourhood = e.elesfn.neighborhood, e.elesfn.closedNeighbourhood = e.elesfn.closedNeighborhood, e.elesfn.openNeighbourhood = e.elesfn.openNeighborhood, e.fn.eles({
+ source: function(e) {
+ var t, n = this[0];
+ return n && (t = n._private.source), t && e ? t.filter(e) : t
+ },
+ target: function(e) {
+ var t, n = this[0];
+ return n && (t = n._private.target), t && e ? t.filter(e) : t
+ },
+ sources: t({
+ attr: "source"
+ }),
+ targets: t({
+ attr: "target"
+ })
+ }), e.fn.eles({
+ edgesWith: n(),
+ edgesTo: n({
+ thisIs: "source"
+ })
+ }), e.fn.eles({
+ connectedEdges: function(t) {
+ for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) {
+ var o = i[a];
+ if (o.isNode())
+ for (var s = o._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l];
+ n.push(u)
+ }
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ connectedNodes: function(t) {
+ for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) {
+ var o = i[a];
+ o.isEdge() && (n.push(o.source()[0]), n.push(o.target()[0]))
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ parallelEdges: r(),
+ codirectedEdges: r({
+ codirected: !0
+ })
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ fit: function() {},
+ center: function() {}
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.Minheap = function(t, n, r) {
+ return new e.Heap(t, n, e.Heap.minHeapComparator, r)
+ }, e.Maxheap = function(t, n, r) {
+ return new e.Heap(t, n, e.Heap.maxHeapComparator, r)
+ }, e.Heap = function(t, n, r, i) {
+ if ("undefined" != typeof r && "undefined" != typeof n) {
+ "undefined" == typeof i && (i = e.Heap.idFn);
+ var a, o, s, l = [],
+ u = {},
+ c = [],
+ d = 0;
+ for (n = this.getArgumentAsCollection(n, t), s = n.length, d = 0; s > d; d += 1) {
+ if (l.push(i.call(t, n[d], d, n)), a = n[d].id(), u.hasOwnProperty(a)) throw "ERROR: Multiple items with the same id found: " + a;
+ u[a] = d, c.push(a)
+ }
+ for (this._private = {
+ cy: t,
+ heap: l,
+ pointers: u,
+ elements: c,
+ comparator: r,
+ extractor: i,
+ length: s
+ }, d = Math.floor(s / 2); d >= 0; d -= 1) o = this.heapify(d);
+ return o
+ }
+ }, e.Heap.idFn = function(e) {
+ return e.id()
+ }, e.Heap.minHeapComparator = function(e, t) {
+ return e >= t
+ }, e.Heap.maxHeapComparator = function(e, t) {
+ return t >= e
+ }, e.fn.heap = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Heap.prototype[r] = i
+ }
+ }, e.heapfn = e.Heap.prototype, e.heapfn.size = function() {
+ return this._private.length
+ }, e.heapfn.getArgumentAsCollection = function(t, n) {
+ var r;
+ if ("undefined" == typeof n && (n = this._private.cy), e.is.elementOrCollection(t)) r = t;
+ else {
+ for (var i = [], a = [].concat.apply([], [t]), o = 0; o < a.length; o++) {
+ var s = a[o],
+ l = n.getElementById(s);
+ l.length > 0 && i.push(l)
+ }
+ r = new e.Collection(n, i)
+ }
+ return r
+ }, e.heapfn.isHeap = function() {
+ var e, t, n, r, i, a = this._private.heap,
+ o = a.length,
+ s = this._private.comparator;
+ for (e = 0; o > e; e += 1)
+ if (t = 2 * e + 1, n = t + 1, r = o > t ? s(a[t], a[e]) : !0, i = o > n ? s(a[n], a[e]) : !0, !r || !i) return !1;
+ return !0
+ }, e.heapfn.heapSwap = function(e, t) {
+ var n = this._private.heap,
+ r = this._private.pointers,
+ i = this._private.elements,
+ a = n[e],
+ o = i[e],
+ s = i[e],
+ l = i[t];
+ n[e] = n[t],
+ i[e] = i[t], r[s] = t, r[l] = e, n[t] = a, i[t] = o
+ }, e.heapfn.heapify = function(e, t) {
+ var n, r, i, a, o, s, l, u = 0,
+ c = !1;
+ for ("undefined" == typeof t && (t = !0), n = this._private.heap, u = n.length, s = this._private.comparator, r = e; !c;) t ? (i = 2 * r + 1, a = i + 1, o = r, u > i && !s(n[i], n[o]) && (o = i), u > a && !s(n[a], n[o]) && (o = a), c = o === r, c || (this.heapSwap(o, r), r = o)) : (l = Math.floor((r - 1) / 2), o = r, c = 0 > l || s(n[o], n[l]), c || (this.heapSwap(o, l), r = l))
+ }, e.heapfn.insert = function(e) {
+ var t, n, r, i, a, o = this.getArgumentAsCollection(e),
+ s = o.length;
+ for (a = 0; s > a; a += 1) {
+ if (t = o[a], n = this._private.heap.length, r = this._private.extractor(t), i = t.id(), this._private.pointers.hasOwnProperty(i)) throw "ERROR: Multiple items with the same id found: " + i;
+ this._private.heap.push(r), this._private.elements.push(i), this._private.pointers[i] = n, this.heapify(n, !1)
+ }
+ this._private.length = this._private.heap.length
+ }, e.heapfn.getValueById = function(e) {
+ if (this._private.pointers.hasOwnProperty(e)) {
+ var t = this._private.pointers[e];
+ return this._private.heap[t]
+ }
+ }, e.heapfn.contains = function(e) {
+ for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) {
+ var r = t[n].id();
+ if (!this._private.pointers.hasOwnProperty(r)) return !1
+ }
+ return !0
+ }, e.heapfn.top = function() {
+ return this._private.length > 0 ? {
+ value: this._private.heap[0],
+ id: this._private.elements[0]
+ } : void 0
+ }, e.heapfn.pop = function() {
+ if (this._private.length > 0) {
+ var e, t, n, r = this.top(),
+ i = this._private.length - 1;
+ return this.heapSwap(0, i), e = this._private.elements[i], t = this._private.heap[i], n = e, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[n] = void 0, this.heapify(0), r
+ }
+ }, e.heapfn.findDirectionHeapify = function(e) {
+ var t = Math.floor((e - 1) / 2),
+ n = this._private.heap,
+ r = 0 > t || this._private.comparator(n[e], n[t]);
+ this.heapify(e, r)
+ }, e.heapfn.edit = function(t, n) {
+ for (var r = this.getArgumentAsCollection(t), i = 0; i < r.length; i += 1) {
+ var a = r[i].id(),
+ o = this._private.pointers[a],
+ s = this._private.heap[o];
+ e.is.number(n) ? this._private.heap[o] = n : e.is.fn(n) && (this._private.heap[o] = n.call(this._private.cy, s, o)), this.findDirectionHeapify(o)
+ }
+ }, e.heapfn.remove = function(e) {
+ for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) {
+ var r, i, a, o = t[n].id(),
+ s = this._private.pointers[o],
+ l = this._private.length - 1;
+ s !== l && this.heapSwap(s, l), r = this._private.elements[l], i = this._private.heap[l], a = r, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[a] = void 0, this.findDirectionHeapify(s)
+ }
+ return i
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ this.options = e, this.data = {
+ select: [void 0, void 0, void 0, void 0, 0],
+ renderer: this,
+ cy: e.cy,
+ container: e.cy.container(),
+ canvases: new Array(t.CANVAS_LAYERS),
+ contexts: new Array(t.CANVAS_LAYERS),
+ canvasNeedsRedraw: new Array(t.CANVAS_LAYERS),
+ bufferCanvases: new Array(t.BUFFER_COUNT),
+ bufferContexts: new Array(t.CANVAS_LAYERS)
+ }, this.hoverData = {
+ down: null,
+ last: null,
+ downTime: null,
+ triggerMode: null,
+ dragging: !1,
+ initialPan: [null, null],
+ capture: !1
+ }, this.timeoutData = {
+ panTimeout: null
+ }, this.dragData = {
+ possibleDragElements: []
+ }, this.touchData = {
+ start: null,
+ capture: !1,
+ startPosition: [null, null, null, null, null, null],
+ singleTouchStartTime: null,
+ singleTouchMoved: !0,
+ now: [null, null, null, null, null, null],
+ earlier: [null, null, null, null, null, null]
+ }, this.zoomData = {
+ freeToZoom: !1,
+ lastPointerX: null
+ }, this.redraws = 0, this.showFps = e.showFps, this.bindings = [], this.data.canvasContainer = document.createElement("div");
+ var n = this.data.canvasContainer.style;
+ n.position = "absolute", n.zIndex = "0", n.overflow = "hidden", this.data.container.appendChild(this.data.canvasContainer);
+ for (var r = 0; r < t.CANVAS_LAYERS; r++) this.data.canvases[r] = document.createElement("canvas"), this.data.contexts[r] = this.data.canvases[r].getContext("2d"), this.data.canvases[r].style.position = "absolute", this.data.canvases[r].setAttribute("data-id", "layer" + r), this.data.canvases[r].style.zIndex = String(t.CANVAS_LAYERS - r), this.data.canvasContainer.appendChild(this.data.canvases[r]), this.data.canvasNeedsRedraw[r] = !1;
+ this.data.topCanvas = this.data.canvases[0], this.data.canvases[t.NODE].setAttribute("data-id", "layer" + t.NODE + "-node"), this.data.canvases[t.SELECT_BOX].setAttribute("data-id", "layer" + t.SELECT_BOX + "-selectbox"), this.data.canvases[t.DRAG].setAttribute("data-id", "layer" + t.DRAG + "-drag");
+ for (var r = 0; r < t.BUFFER_COUNT; r++) this.data.bufferCanvases[r] = document.createElement("canvas"), this.data.bufferContexts[r] = this.data.bufferCanvases[r].getContext("2d"), this.data.bufferCanvases[r].style.position = "absolute", this.data.bufferCanvases[r].setAttribute("data-id", "buffer" + r), this.data.bufferCanvases[r].style.zIndex = String(-r - 1), this.data.bufferCanvases[r].style.visibility = "hidden";
+ this.hideEdgesOnViewport = e.hideEdgesOnViewport, this.hideLabelsOnViewport = e.hideLabelsOnViewport, this.textureOnViewport = e.textureOnViewport, this.wheelSensitivity = e.wheelSensitivity, this.motionBlurEnabled = e.motionBlur, this.forcedPixelRatio = e.pixelRatio, this.motionBlur = !0, this.motionBlurOpacity = e.motionBlurOpacity, this.motionBlurTransparency = 1 - this.motionBlurOpacity, this.motionBlurPxRatio = 1, this.mbPxRBlurry = 1, this.minMbLowQualFrames = 4, this.fullQualityMb = !1, this.clearedForMotionBlur = [], this.desktopTapThreshold = e.desktopTapThreshold, this.desktopTapThreshold2 = e.desktopTapThreshold * e.desktopTapThreshold, this.touchTapThreshold = e.touchTapThreshold, this.touchTapThreshold2 = e.touchTapThreshold * e.touchTapThreshold, this.tapholdDuration = 500, this.load()
+ }
+ t.CANVAS_LAYERS = 3, t.SELECT_BOX = 0, t.DRAG = 1, t.NODE = 2, t.BUFFER_COUNT = 3, t.TEXTURE_BUFFER = 0, t.MOTIONBLUR_BUFFER_NODE = 1, t.MOTIONBLUR_BUFFER_DRAG = 2, t.panOrBoxSelectDelay = 400;
+ var n = "undefined" != typeof Path2D;
+ t.usePaths = function() {
+ return n
+ }, t.prototype.notify = function(n) {
+ var r;
+ r = e.is.array(n.type) ? n.type : [n.type];
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ switch (a) {
+ case "destroy":
+ return void this.destroy();
+ case "add":
+ case "remove":
+ case "load":
+ this.updateNodesCache(), this.updateEdgesCache();
+ break;
+ case "viewport":
+ this.data.canvasNeedsRedraw[t.SELECT_BOX] = !0;
+ break;
+ case "style":
+ this.updateCachedZSortedEles()
+ }("load" === a || "resize" === a) && (this.invalidateContainerClientCoordsCache(), this.matchCanvasSize(this.data.container))
+ }
+ this.data.canvasNeedsRedraw[t.NODE] = !0, this.data.canvasNeedsRedraw[t.DRAG] = !0, this.redraw()
+ }, t.prototype.destroy = function() {
+ this.destroyed = !0;
+ for (var e = 0; e < this.bindings.length; e++) {
+ var t = this.bindings[e],
+ n = t;
+ n.target.removeEventListener(n.event, n.handler, n.useCapture)
+ }
+ if (this.removeObserver && this.removeObserver.disconnect(), this.labelCalcDiv) try {
+ document.body.removeChild(this.labelCalcDiv)
+ } catch (r) {}
+ };
+ for (var r in e.math) t.prototype[r] = e.math[r];
+ e("renderer", "canvas", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype,
+ r = t.arrowShapes = {};
+ t.arrowShapeHeight = .3;
+ var i = function(e, t, n, r, i, a, o, s) {
+ var l = n - i / 2,
+ u = n + i / 2,
+ c = r - a / 2,
+ d = r + a / 2;
+ return e >= l && u >= e && t >= c && d >= t
+ },
+ a = function(e, t, n, r, i) {
+ r = -r;
+ var a = e * Math.cos(r) - t * Math.sin(r),
+ o = e * Math.sin(r) + t * Math.cos(r),
+ s = a * n,
+ l = o * n,
+ u = s + i.x,
+ c = l + i.y;
+ return {
+ x: u,
+ y: c
+ }
+ };
+ r.arrow = {
+ _points: [-.15, -.3, 0, 0, .15, -.3],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.arrow._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.arrow._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.triangle = r.arrow, r["triangle-backcurve"] = {
+ _ctrlPt: [0, -.15],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.triangle._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o, s = r.triangle._points, l = 0; l < s.length / 2; l++) {
+ var u = a(s[2 * l], s[2 * l + 1], t, n, i);
+ 0 === l && (o = u), e.lineTo(u.x, u.y)
+ }
+ var c = this._ctrlPt,
+ d = a(c[0], c[1], t, n, i);
+ e.quadraticCurveTo(d.x, d.y, o.x, o.y)
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r["triangle-tee"] = {
+ _points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3],
+ _pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r["triangle-tee"]._points,
+ d = r["triangle-tee"]._pointsTee,
+ h = e.math.pointInsidePolygon(t, n, d, i, a, o, s, l, u) || e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u);
+ return h
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r["triangle-tee"]._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ var u = r["triangle-tee"]._pointsTee,
+ c = a(u[0], u[1], t, n, i);
+ e.moveTo(c.x, c.y);
+ for (var s = 0; s < u.length / 2; s++) {
+ var l = a(u[2 * s], u[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r["half-triangle-overshot"] = {
+ _points: [0, -.25, -.5, -.25, .5, .25],
+ leavePathOpen: !0,
+ matchEdgeWidth: !0,
+ collide: function(t, n, r, i, a, o, s, l) {
+ var u = this._points;
+ return e.math.pointInsidePolygon(t, n, u, r, i, a, o, s, l)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, r) {
+ for (var i = this._points, o = 0; o < i.length / 2; o++) {
+ var s = a(i[2 * o], i[2 * o + 1], t, n, r);
+ e.lineTo(s.x, s.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.none = {
+ collide: function(e, t, n, r, i, a, o, s) {
+ return !1
+ },
+ roughCollide: function(e, t, n, r, i, a, o, s) {
+ return !1
+ },
+ draw: function(e) {},
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 0
+ }
+ }, r.circle = {
+ _baseRadius: .15,
+ collide: function(e, t, n, i, a, o, s, l) {
+ if (a != o) {
+ var u = (o + l) / (a + l);
+ return t /= u, i /= u, Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2)
+ }
+ return Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ e.arc(i.x, i.y, r.circle._baseRadius * t, 0, 2 * Math.PI, !1)
+ },
+ spacing: function(e) {
+ return n.getArrowWidth(e._private.style.width.pxValue) * r.circle._baseRadius
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.inhibitor = {
+ _points: [-.25, 0, -.25, -.1, .25, -.1, .25, 0],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.inhibitor._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.inhibitor._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 1
+ },
+ gap: function(e) {
+ return 1
+ }
+ }, r.tee = r.inhibitor, r.square = {
+ _points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.square._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.square._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.diamond = {
+ _points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.diamond._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.diamond._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return e._private.style.width.pxValue
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.getCachedNodes = function() {
+ var e = this.data,
+ t = this.data.cy;
+ return null == e.cache && (e.cache = {}), null == e.cache.cachedNodes && (e.cache.cachedNodes = t.nodes()), e.cache.cachedNodes
+ }, n.updateNodesCache = function() {
+ var e = this.data,
+ t = this.data.cy;
+ null == e.cache && (e.cache = {}), e.cache.cachedNodes = t.nodes()
+ }, n.getCachedEdges = function() {
+ var e = this.data,
+ t = this.data.cy;
+ return null == e.cache && (e.cache = {}), null == e.cache.cachedEdges && (e.cache.cachedEdges = t.edges()), e.cache.cachedEdges
+ }, n.updateEdgesCache = function() {
+ var e = this.data,
+ t = this.data.cy;
+ null == e.cache && (e.cache = {}), e.cache.cachedEdges = t.edges()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.projectIntoViewport = function(e, t) {
+ var n = this.findContainerClientCoords(),
+ r = n[0],
+ i = n[1],
+ a = e - r,
+ o = t - i;
+ return a -= this.data.cy.pan().x, o -= this.data.cy.pan().y, a /= this.data.cy.zoom(), o /= this.data.cy.zoom(), [a, o]
+ }, n.findContainerClientCoords = function() {
+ var e = this.data.container,
+ t = this.containerBB = this.containerBB || e.getBoundingClientRect();
+ return [t.left, t.top, t.right - t.left, t.bottom - t.top]
+ }, n.invalidateContainerClientCoordsCache = function() {
+ this.containerBB = null
+ }, n.findNearestElement = function(n, r, i, a) {
+ function o(e) {
+ var a = e.outerWidth() + 2 * f,
+ o = e.outerHeight() + 2 * f,
+ s = a / 2,
+ u = o / 2,
+ d = e._private.position;
+ if (d.x - s <= n && n <= d.x + s && d.y - u <= r && r <= d.y + u) {
+ var h = !i || e.visible() && !e.transparent();
+ if (i && !h) return;
+ var p = t.nodeShapes[l.getNodeShape(e)];
+ e._private.style["border-width"].pxValue / 2;
+ p.checkPoint(n, r, 0, a, o, d.x, d.y) && c.push(e)
+ }
+ }
+
+ function s(a) {
+ var s, u, d = a._private.rscratch,
+ f = a._private.style,
+ v = f.width.pxValue / 2 + p,
+ g = v * v,
+ y = 2 * v,
+ m = a._private.source,
+ x = a._private.target,
+ b = !1,
+ w = function() {
+ if (void 0 !== u) return u;
+ if (!i) return u = !0, !0;
+ var e = a.visible() && !a.transparent();
+ return e ? (u = !0, !0) : (u = !1, !1)
+ };
+ if ("self" === d.edgeType || "compound" === d.edgeType)((b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY)) || (b = e.math.inBezierVicinity(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY))) && c.push(a);
+ else if ("haystack" === d.edgeType) {
+ var _ = f["haystack-radius"].value,
+ E = _ / 2,
+ T = x._private.position,
+ S = x.width(),
+ C = x.height(),
+ k = m._private.position,
+ D = m.width(),
+ N = m.height(),
+ P = k.x + d.source.x * D * E,
+ M = k.y + d.source.y * N * E,
+ B = T.x + d.target.x * S * E,
+ L = T.y + d.target.y * C * E;
+ (b = e.math.inLineVicinity(n, r, P, M, B, L, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, P, M, B, L)) && c.push(a)
+ } else "straight" === d.edgeType ? (b = e.math.inLineVicinity(n, r, d.startX, d.startY, d.endX, d.endY, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, d.startX, d.startY, d.endX, d.endY)) && c.push(a) : "bezier" === d.edgeType && (b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY)) && c.push(a);
+ if (b && w() && 0 === c.length || c[c.length - 1] !== a) {
+ var O = t.arrowShapes[f["source-arrow-shape"].value],
+ A = t.arrowShapes[f["target-arrow-shape"].value],
+ m = m || a._private.source,
+ x = x || a._private.target,
+ T = x._private.position,
+ k = m._private.position,
+ I = l.getArrowWidth(f.width.pxValue),
+ z = l.getArrowHeight(f.width.pxValue),
+ R = I,
+ j = z;
+ (O.roughCollide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) && O.collide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) || A.roughCollide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p) && A.collide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p)) && c.push(a)
+ }
+ h && c.length > 0 && c[c.length - 1] === a && (o(m), o(x))
+ }
+ for (var l = this, u = this.getCachedZSortedEles(), c = [], d = this.data.cy.zoom(), h = this.data.cy.hasCompoundNodes(), p = (a ? 24 : 8) / d, f = (a ? 8 : 2) / d, v = u.length - 1; v >= 0; v--) {
+ var g = u[v];
+ if (c.length > 0) break;
+ "nodes" === g._private.group ? o(u[v]) : s(u[v])
+ }
+ return c.length > 0 ? c[c.length - 1] : null
+ }, n.getAllInBox = function(n, r, i, a) {
+ var o = this.getCachedNodes(),
+ s = this.getCachedEdges(),
+ l = [],
+ u = Math.min(n, i),
+ c = Math.max(n, i),
+ d = Math.min(r, a),
+ h = Math.max(r, a);
+ n = u, i = c, r = d, a = h;
+ for (var p, f = 0; f < o.length; f++) {
+ var v = o[f]._private.position,
+ g = this.getNodeShape(o[f]),
+ y = this.getNodeWidth(o[f]),
+ m = this.getNodeHeight(o[f]),
+ x = o[f]._private.style["border-width"].pxValue / 2,
+ b = t.nodeShapes[g];
+ b.intersectBox(n, r, i, a, y, m, v.x, v.y, x) && l.push(o[f])
+ }
+ for (var f = 0; f < s.length; f++) {
+ var w = s[f]._private.rscratch;
+ if ("self" == s[f]._private.rscratch.edgeType && ((p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) || (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue))) && l.push(s[f]), "bezier" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "straight" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, .5 * w.startX + .5 * w.endX, .5 * w.startY + .5 * w.endY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkStraightEdgeInBox(n, r, i, a, w.startX, w.startY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "haystack" == w.edgeType) {
+ var _ = s[f].target()[0],
+ E = _.position(),
+ T = s[f].source()[0],
+ S = T.position(),
+ C = S.x + w.source.x,
+ k = S.y + w.source.y,
+ D = E.x + w.target.x,
+ N = E.y + w.target.y,
+ P = C >= n && i >= C && k >= r && a >= k,
+ M = D >= n && i >= D && N >= r && a >= N;
+ P && M && l.push(s[f])
+ }
+ }
+ return l
+ }, n.getNodeWidth = function(e) {
+ return e.width()
+ }, n.getNodeHeight = function(e) {
+ return e.height()
+ }, n.getNodeShape = function(e) {
+ var t = e._private.style.shape.value;
+ return e.isParent() ? "rectangle" === t || "roundrectangle" === t ? t : "rectangle" : t
+ }, n.getNodePadding = function(e) {
+ var t = e._private.style["padding-left"].pxValue,
+ n = e._private.style["padding-right"].pxValue,
+ r = e._private.style["padding-top"].pxValue,
+ i = e._private.style["padding-bottom"].pxValue;
+ return isNaN(t) && (t = 0), isNaN(n) && (n = 0), isNaN(r) && (r = 0), isNaN(i) && (i = 0), {
+ left: t,
+ right: n,
+ top: r,
+ bottom: i
+ }
+ }, n.zOrderSort = e.Collection.zIndexSort, n.updateCachedZSortedEles = function() {
+ this.getCachedZSortedEles(!0)
+ }, n.getCachedZSortedEles = function(e) {
+ var t = this.lastZOrderCachedNodes,
+ n = this.lastZOrderCachedEdges,
+ r = this.getCachedNodes(),
+ i = this.getCachedEdges(),
+ a = [];
+ if (!e && t && n && t === r && n === i) a = this.cachedZSortedEles;
+ else {
+ for (var o = 0; o < r.length; o++) {
+ var s = r[o];
+ (s.animated() || s.visible() && !s.transparent()) && a.push(s)
+ }
+ for (var o = 0; o < i.length; o++) {
+ var l = i[o];
+ (l.animated() || l.visible() && !l.transparent()) && a.push(l)
+ }
+ a.sort(this.zOrderSort), this.cachedZSortedEles = a
+ }
+ return this.lastZOrderCachedNodes = r, this.lastZOrderCachedEdges = i, a
+ }, n.projectBezier = function(t) {
+ function n(e) {
+ a.push({
+ x: r(e[0], e[2], e[4], .05),
+ y: r(e[1], e[3], e[5], .05)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .25),
+ y: r(e[1], e[3], e[5], .25)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .4),
+ y: r(e[1], e[3], e[5], .4)
+ });
+ var t = {
+ x: r(e[0], e[2], e[4], .5),
+ y: r(e[1], e[3], e[5], .5)
+ };
+ a.push(t), "self" === i.edgeType || "compound" === i.edgeType ? (i.midX = i.selfEdgeMidX, i.midY = i.selfEdgeMidY) : (i.midX = t.x, i.midY = t.y), a.push({
+ x: r(e[0], e[2], e[4], .6),
+ y: r(e[1], e[3], e[5], .6)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .75),
+ y: r(e[1], e[3], e[5], .75)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .95),
+ y: r(e[1], e[3], e[5], .95)
+ })
+ }
+ var r = e.math.qbezierAt,
+ i = t._private.rscratch,
+ a = t._private.rstyle.bezierPts = [];
+ "self" === i.edgeType ? (n([i.startX, i.startY, i.cp2ax, i.cp2ay, i.selfEdgeMidX, i.selfEdgeMidY]), n([i.selfEdgeMidX, i.selfEdgeMidY, i.cp2cx, i.cp2cy, i.endX, i.endY])) : "bezier" === i.edgeType && n([i.startX, i.startY, i.cp2x, i.cp2y, i.endX, i.endY])
+ }, n.recalculateNodeLabelProjection = function(e) {
+ var t = e._private.style.content.strValue;
+ if (t && !t.match(/^\s+$/)) {
+ var n, r, i = e.outerWidth(),
+ a = e.outerHeight(),
+ o = e._private.position,
+ s = e._private.style["text-halign"].strValue,
+ l = e._private.style["text-valign"].strValue,
+ u = e._private.rscratch,
+ c = e._private.rstyle;
+ switch (s) {
+ case "left":
+ n = o.x - i / 2;
+ break;
+ case "right":
+ n = o.x + i / 2;
+ break;
+ default:
+ n = o.x
+ }
+ switch (l) {
+ case "top":
+ r = o.y - a / 2;
+ break;
+ case "bottom":
+ r = o.y + a / 2;
+ break;
+ default:
+ r = o.y
+ }
+ u.labelX = n, u.labelY = r, c.labelX = n, c.labelY = r, this.applyLabelDimensions(e)
+ }
+ }, n.recalculateEdgeLabelProjection = function(t) {
+ var n = t._private.style.content.strValue;
+ if (n && !n.match(/^\s+$/)) {
+ var r, i, a, o, s = t._private,
+ l = s.rscratch,
+ u = s.rstyle;
+ if ("self" == l.edgeType) a = l.selfEdgeMidX, o = l.selfEdgeMidY;
+ else if ("straight" == l.edgeType) a = (l.startX + l.endX) / 2, o = (l.startY + l.endY) / 2;
+ else if ("bezier" == l.edgeType) a = e.math.qbezierAt(l.startX, l.cp2x, l.endX, .5), o = e.math.qbezierAt(l.startY, l.cp2y, l.endY, .5);
+ else if ("haystack" == l.edgeType) {
+ var c = l.haystackPts;
+ a = (c[0] + c[2]) / 2, o = (c[1] + c[3]) / 2
+ }
+ r = a, i = o, l.labelX = r, l.labelY = i, u.labelX = r, u.labelY = i, this.applyLabelDimensions(t)
+ }
+ }, n.applyLabelDimensions = function(e) {
+ var t = e._private.rscratch,
+ n = e._private.rstyle,
+ r = this.getLabelText(e),
+ i = this.calculateLabelDimensions(e, r);
+ n.labelWidth = i.width, t.labelWidth = i.width, n.labelHeight = i.height, t.labelHeight = i.height
+ }, n.getLabelText = function(e) {
+ var t = e._private.style,
+ n = e._private.style.content.strValue,
+ r = t["text-transform"].value,
+ i = e._private.rscratch;
+ if ("none" == r || ("uppercase" == r ? n = n.toUpperCase() : "lowercase" == r && (n = n.toLowerCase())), "wrap" === t["text-wrap"].value) {
+ if (i.labelWrapKey === i.labelKey) return i.labelWrapCachedText;
+ for (var a = n.split("\n"), o = t["text-max-width"].pxValue, s = [], l = 0; l < a.length; l++) {
+ var u = a[l],
+ c = this.calculateLabelDimensions(e, u, "line=" + u),
+ d = c.width;
+ if (d > o) {
+ for (var h = u.split(/\s+/), p = "", f = 0; f < h.length; f++) {
+ var v = h[f],
+ g = 0 === p.length ? v : p + " " + v,
+ y = this.calculateLabelDimensions(e, g, "testLine=" + g),
+ m = y.width;
+ o >= m ? p += v + " " : (s.push(p), p = v + " ")
+ }
+ p.match(/^\s+$/) || s.push(p)
+ } else s.push(u)
+ }
+ i.labelWrapCachedLines = s, i.labelWrapCachedText = n = s.join("\n"), i.labelWrapKey = i.labelKey
+ }
+ return n
+ }, n.calculateLabelDimensions = function(e, t, n) {
+ var r = this,
+ i = e._private.style,
+ a = i["font-style"].strValue,
+ o = i["font-size"].pxValue + "px",
+ s = i["font-family"].strValue,
+ l = i["font-weight"].strValue,
+ u = e._private.labelKey;
+ n && (u += "$@$" + n);
+ var c = r.labelDimCache || (r.labelDimCache = {});
+ if (c[u]) return c[u];
+ var d = this.labelCalcDiv;
+ d || (d = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(d));
+ var h = d.style;
+ return h.fontFamily = s, h.fontStyle = a, h.fontSize = o, h.fontWeight = l, h.position = "absolute", h.left = "-9999px", h.top = "-9999px", h.zIndex = "-1", h.visibility = "hidden", h.pointerEvents = "none", h.padding = "0", h.lineHeight = "1", "wrap" === i["text-wrap"].value ? h.whiteSpace = "pre" : h.whiteSpace = "normal", d.textContent = t, c[u] = {
+ width: d.clientWidth,
+ height: d.clientHeight
+ }, c[u]
+ }, n.recalculateRenderedStyle = function(e) {
+ for (var t = [], n = [], r = {}, i = 0; i < e.length; i++) {
+ var a = e[i],
+ o = a._private,
+ s = o.style,
+ l = o.rscratch,
+ u = o.rstyle,
+ c = o.data.id,
+ d = null != l.boundingBoxKey && o.boundingBoxKey === l.boundingBoxKey,
+ h = null != l.labelKey && o.labelKey === l.labelKey,
+ p = d && h;
+ if ("nodes" === a._private.group) {
+ var f = o.position,
+ v = null != u.nodeX && null != u.nodeY && f.x === u.nodeX && f.y === u.nodeY,
+ g = null != u.nodeW && u.nodeW === s.width.pxValue,
+ y = null != u.nodeH && u.nodeH === s.height.pxValue;
+ v && p && g && y || n.push(a), u.nodeX = f.x, u.nodeY = f.y, u.nodeW = s.width.pxValue, u.nodeH = s.height.pxValue
+ } else {
+ var m = a._private.source._private.position,
+ x = a._private.target._private.position,
+ b = null != u.srcX && null != u.srcY && m.x === u.srcX && m.y === u.srcY,
+ w = null != u.tgtX && null != u.tgtY && x.x === u.tgtX && x.y === u.tgtY,
+ _ = b && w;
+ if (!_ || !p) {
+ var E = o.style["curve-style"].value;
+ if ("bezier" === E) {
+ if (!r[c]) {
+ t.push(a), r[c] = !0;
+ for (var T = a.parallelEdges(), i = 0; i < T.length; i++) {
+ var S = T[i],
+ C = S._private.data.id;
+ r[C] || (t.push(S), r[C] = !0)
+ }
+ }
+ } else t.push(a)
+ }
+ u.srcX = m.x, u.srcY = m.y, u.tgtX = x.x, u.tgtY = x.y
+ }
+ l.boundingBoxKey = o.boundingBoxKey, l.labelKey = o.labelKey
+ }
+ this.recalculateEdgeProjections(t), this.recalculateLabelProjections(n, t)
+ }, n.recalculateLabelProjections = function(e, t) {
+ for (var n = 0; n < e.length; n++) this.recalculateNodeLabelProjection(e[n]);
+ for (var n = 0; n < t.length; n++) this.recalculateEdgeLabelProjection(t[n])
+ }, n.recalculateEdgeProjections = function(e) {
+ this.findEdgeControlPoints(e)
+ }, n.findEdgeControlPoints = function(n) {
+ if (n && 0 !== n.length) {
+ for (var r, i = this.data.cy, a = i.hasCompoundNodes(), o = {}, s = [], l = [], u = 0; u < n.length; u++) {
+ var c = n[u],
+ d = c._private.style,
+ h = "unbundled-bezier" === d["curve-style"].value;
+ if ("none" !== d.display.value)
+ if ("haystack" !== d["curve-style"].value) {
+ var p = c._private.data.source,
+ f = c._private.data.target;
+ r = p > f ? f + "-" + p : p + "-" + f, h && (r = "unbundled" + c._private.data.id), null == o[r] && (o[r] = [], s.push(r)), o[r].push(c), h && (o[r].hasUnbundled = !0)
+ } else l.push(c)
+ }
+ for (var v, g, y, m, x, b, w, _, E, T, S, C, k, D, N = 0; N < s.length; N++) {
+ r = s[N];
+ var P = o[r];
+ if (P.sort(function(e, t) {
+ return e._private.index - t._private.index
+ }), v = P[0]._private.source, g = P[0]._private.target, v._private.data.id > g._private.data.id) {
+ var M = v;
+ v = g, g = M
+ }
+ if (y = v._private.position, m = g._private.position, x = this.getNodeWidth(v), b = this.getNodeHeight(v), w = this.getNodeWidth(g), _ = this.getNodeHeight(g), E = t.nodeShapes[this.getNodeShape(v)], T = t.nodeShapes[this.getNodeShape(g)], S = v._private.style["border-width"].pxValue, C = g._private.style["border-width"].pxValue, D = !1, P.length > 1 && v !== g || P.hasUnbundled) {
+ var B = E.intersectLine(y.x, y.y, x, b, m.x, m.y, S / 2),
+ L = T.intersectLine(m.x, m.y, w, _, y.x, y.y, C / 2),
+ O = {
+ x1: B[0],
+ x2: L[0],
+ y1: B[1],
+ y2: L[1]
+ },
+ A = L[1] - B[1],
+ I = L[0] - B[0],
+ z = Math.sqrt(I * I + A * A),
+ R = {
+ x: I,
+ y: A
+ },
+ j = {
+ x: R.x / z,
+ y: R.y / z
+ };
+ k = {
+ x: -j.y,
+ y: j.x
+ }, (T.checkPoint(B[0], B[1], C / 2, w, _, m.x, m.y) || E.checkPoint(L[0], L[1], S / 2, x, b, y.x, y.y)) && (k = {}, D = !0)
+ }
+ for (var c, F, u = 0; u < P.length; u++) {
+ c = P[u], F = c._private.rscratch;
+ var q = F.lastEdgeIndex,
+ V = u,
+ X = F.lastNumEdges,
+ H = P.length,
+ Y = c._private.style,
+ $ = Y["control-point-step-size"].pxValue,
+ W = void 0 !== Y["control-point-distance"] ? Y["control-point-distance"].pxValue : void 0,
+ U = Y["control-point-weight"].value,
+ h = "unbundled-bezier" === Y["curve-style"].value,
+ Z = c._private.source !== v;
+ Z && h && (W *= -1);
+ var G = F.lastSrcCtlPtX,
+ K = y.x,
+ J = F.lastSrcCtlPtY,
+ Q = y.y,
+ ee = F.lastSrcCtlPtW,
+ te = v.outerWidth(),
+ ne = F.lastSrcCtlPtH,
+ re = v.outerHeight(),
+ ie = F.lastTgtCtlPtX,
+ ae = m.x,
+ oe = F.lastTgtCtlPtY,
+ se = m.y,
+ le = F.lastTgtCtlPtW,
+ ue = g.outerWidth(),
+ ce = F.lastTgtCtlPtH,
+ de = g.outerHeight(),
+ he = F.lastW,
+ pe = Y["control-point-step-size"].pxValue;
+ if (D ? F.badBezier = !0 : F.badBezier = !1, G !== K || J !== Q || ee !== te || ne !== re || ie !== ae || oe !== se || le !== ue || ce !== de || he !== pe || !(q === V && X === H || h)) {
+ if (F.lastSrcCtlPtX = K, F.lastSrcCtlPtY = Q, F.lastSrcCtlPtW = te, F.lastSrcCtlPtH = re, F.lastTgtCtlPtX = ae, F.lastTgtCtlPtY = se, F.lastTgtCtlPtW = ue, F.lastTgtCtlPtH = de, F.lastEdgeIndex = V, F.lastNumEdges = H, F.lastWidth = pe, v === g) {
+ F.edgeType = "self";
+ var fe = u,
+ ve = $;
+ h && (fe = 0, ve = W), F.cp2ax = y.x, F.cp2ay = y.y - (1 + Math.pow(b, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cx = y.x - (1 + Math.pow(x, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cy = y.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2
+ } else if (a && (v.isParent() || v.isChild() || g.isParent() || g.isChild()) && (v.parents().anySame(g) || g.parents().anySame(v))) {
+ F.edgeType = "compound", F.badBezier = !1;
+ var fe = u,
+ ve = $;
+ h && (fe = 0, ve = W);
+ var ge = 50,
+ ye = {
+ x: y.x - x / 2,
+ y: y.y - b / 2
+ },
+ me = {
+ x: m.x - w / 2,
+ y: m.y - _ / 2
+ },
+ xe = 1;
+ F.cp2ax = ye.x, F.compoundStretchA = Math.max(xe, Math.log(.01 * x)), F.cp2ay = ye.y - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchA, F.compoundStretchB = Math.max(xe, Math.log(.01 * w)), F.cp2cx = me.x - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchB, F.cp2cy = me.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2
+ } else if (P.length % 2 !== 1 || u !== Math.floor(P.length / 2) || h) {
+ var be, we = (.5 - P.length / 2 + u) * $,
+ _e = e.math.signum(we);
+ be = h ? W : void 0 !== W ? _e * W : void 0;
+ var Ee = void 0 !== be ? be : we,
+ Te = 1 - U,
+ Se = U;
+ Z && (Te = U, Se = 1 - U);
+ var Ce = {
+ x: O.x1 * Te + O.x2 * Se,
+ y: O.y1 * Te + O.y2 * Se
+ };
+ F.edgeType = "bezier", F.cp2x = Ce.x + k.x * Ee, F.cp2y = Ce.y + k.y * Ee
+ } else F.edgeType = "straight";
+ this.findEndpoints(c);
+ var ke = !e.is.number(F.startX) || !e.is.number(F.startY),
+ De = !e.is.number(F.arrowStartX) || !e.is.number(F.arrowStartY),
+ Ne = !e.is.number(F.endX) || !e.is.number(F.endY),
+ Pe = !e.is.number(F.arrowEndX) || !e.is.number(F.arrowEndY),
+ Me = 3,
+ Be = this.getArrowWidth(c._private.style.width.pxValue) * t.arrowShapeHeight,
+ Le = Me * Be,
+ Oe = e.math.distance({
+ x: F.cp2x,
+ y: F.cp2y
+ }, {
+ x: F.startX,
+ y: F.startY
+ }),
+ Ae = Le > Oe,
+ Ie = e.math.distance({
+ x: F.cp2x,
+ y: F.cp2y
+ }, {
+ x: F.endX,
+ y: F.endY
+ }),
+ ze = Le > Ie;
+ if ("bezier" === F.edgeType) {
+ var Re = !1;
+ if (ke || De || Ae) {
+ Re = !0;
+ var je = {
+ x: F.cp2x - y.x,
+ y: F.cp2y - y.y
+ },
+ Fe = Math.sqrt(je.x * je.x + je.y * je.y),
+ qe = {
+ x: je.x / Fe,
+ y: je.y / Fe
+ },
+ Ve = Math.max(x, b),
+ Xe = {
+ x: F.cp2x + 2 * qe.x * Ve,
+ y: F.cp2y + 2 * qe.y * Ve
+ },
+ He = E.intersectLine(y.x, y.y, x, b, Xe.x, Xe.y, S / 2);
+ Ae ? (F.cp2x = F.cp2x + qe.x * (Le - Oe), F.cp2y = F.cp2y + qe.y * (Le - Oe)) : (F.cp2x = He[0] + qe.x * Le, F.cp2y = He[1] + qe.y * Le)
+ }
+ if (Ne || Pe || ze) {
+ Re = !0;
+ var je = {
+ x: F.cp2x - m.x,
+ y: F.cp2y - m.y
+ },
+ Fe = Math.sqrt(je.x * je.x + je.y * je.y),
+ qe = {
+ x: je.x / Fe,
+ y: je.y / Fe
+ },
+ Ve = Math.max(x, b),
+ Xe = {
+ x: F.cp2x + 2 * qe.x * Ve,
+ y: F.cp2y + 2 * qe.y * Ve
+ },
+ Ye = T.intersectLine(m.x, m.y, w, _, Xe.x, Xe.y, C / 2);
+ ze ? (F.cp2x = F.cp2x + qe.x * (Le - Ie), F.cp2y = F.cp2y + qe.y * (Le - Ie)) : (F.cp2x = Ye[0] + qe.x * Le, F.cp2y = Ye[1] + qe.y * Le)
+ }
+ Re && this.findEndpoints(c)
+ } else "straight" === F.edgeType && (F.midX = (K + ae) / 2, F.midY = (Q + se) / 2);
+ this.projectBezier(c), this.recalculateEdgeLabelProjection(c)
+ }
+ }
+ }
+ for (var u = 0; u < l.length; u++) {
+ var c = l[u],
+ $e = c._private,
+ We = $e.rscratch,
+ F = We;
+ if (!We.haystack) {
+ var Ue = 2 * Math.random() * Math.PI;
+ We.source = {
+ x: Math.cos(Ue),
+ y: Math.sin(Ue)
+ };
+ var Ue = 2 * Math.random() * Math.PI;
+ We.target = {
+ x: Math.cos(Ue),
+ y: Math.sin(Ue)
+ }
+ }
+ var v = $e.source,
+ g = $e.target,
+ y = v._private.position,
+ m = g._private.position,
+ x = v.width(),
+ w = g.width(),
+ b = v.height(),
+ _ = g.height(),
+ Ve = d["haystack-radius"].value,
+ Ze = Ve / 2;
+ F.haystackPts = [F.source.x * x * Ze + y.x, F.source.y * b * Ze + y.y, F.target.x * w * Ze + m.x, F.target.y * _ * Ze + m.y], We.edgeType = "haystack", We.haystack = !0, this.recalculateEdgeLabelProjection(c)
+ }
+ return o
+ }
+ }, n.findEndpoints = function(n) {
+ var r, i = n.source()[0],
+ a = n.target()[0],
+ o = n._private.style["target-arrow-shape"].value,
+ s = n._private.style["source-arrow-shape"].value,
+ l = a._private.style["border-width"].pxValue,
+ u = i._private.style["border-width"].pxValue,
+ c = n._private.rscratch;
+ if ("self" == c.edgeType || "compound" == c.edgeType) {
+ var d = [c.cp2cx, c.cp2cy];
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2);
+ var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1];
+ var d = [c.cp2ax, c.cp2ay];
+ r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2);
+ var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1]
+ } else if ("straight" == c.edgeType) {
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), i.position().x, i.position().y, l / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1;
+ var h = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), a.position().x, a.position().y, u / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1;
+ var f = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1], e.is.number(c.startX) && e.is.number(c.startY) && e.is.number(c.endX) && e.is.number(c.endY) ? c.badLine = !1 : c.badLine = !0
+ } else if ("bezier" == c.edgeType) {
+ var d = [c.cp2x, c.cp2y];
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2);
+ var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2);
+ var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1]
+ } else if (c.isArcEdge) return
+ }, n.findEdges = function(e) {
+ for (var t = this.getCachedEdges(), n = {}, r = [], i = 0; i < e.length; i++) n[e[i]._private.data.id] = e[i];
+ for (var i = 0; i < t.length; i++)(n[t[i]._private.data.source] || n[t[i]._private.data.target]) && r.push(t[i]);
+ return r
+ }, n.getArrowWidth = n.getArrowHeight = function(e) {
+ var t = this.arrowWidthCache = this.arrowWidthCache || {},
+ n = t[e];
+ return n ? n : (n = Math.max(Math.pow(13.37 * e, .9), 29), t[e] = n, n)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawEdge = function(e, n, r) {
+ var i = n._private.rscratch,
+ a = t.usePaths();
+ if (!i.badBezier && ("bezier" !== i.edgeType && "straight" !== i.edgeType || !isNaN(i.startX))) {
+ var o = n._private.style;
+ if (!(o.width.pxValue <= 0)) {
+ var s = o["overlay-padding"].pxValue,
+ l = o["overlay-opacity"].value,
+ u = o["overlay-color"].value;
+ if (r) {
+ if (0 === l) return;
+ this.strokeStyle(e, u[0], u[1], u[2], l), e.lineCap = "round", "self" != n._private.rscratch.edgeType || a || (e.lineCap = "butt")
+ } else {
+ var c = o["line-color"].value;
+ this.strokeStyle(e, c[0], c[1], c[2], o.opacity.value), e.lineCap = "butt"
+ }
+ var d, h, p, f;
+ p = d = n._private.source, f = h = n._private.target;
+ var v = o.width.pxValue + (r ? 2 * s : 0),
+ g = r ? "solid" : o["line-style"].value;
+ e.lineWidth = v;
+ var y = o["shadow-blur"].pxValue,
+ m = o["shadow-opacity"].value,
+ x = o["shadow-color"].value,
+ b = o["shadow-offset-x"].pxValue,
+ w = o["shadow-offset-y"].pxValue;
+ if (this.shadowStyle(e, x, r ? 0 : m, y, b, w), "haystack" === i.edgeType) this.drawStyledEdge(n, e, i.haystackPts, g, v);
+ else if ("self" === i.edgeType || "compound" === i.edgeType) {
+ var _ = n._private.rscratch,
+ E = [_.startX, _.startY, _.cp2ax, _.cp2ay, _.selfEdgeMidX, _.selfEdgeMidY, _.selfEdgeMidX, _.selfEdgeMidY, _.cp2cx, _.cp2cy, _.endX, _.endY];
+ this.drawStyledEdge(n, e, E, g, v)
+ } else if ("straight" === i.edgeType) {
+ var T = h._private.position.x - d._private.position.x,
+ S = h._private.position.y - d._private.position.y,
+ C = i.endX - i.startX,
+ k = i.endY - i.startY;
+ if (0 > T * C + S * k) i.straightEdgeTooShort = !0;
+ else {
+ var _ = i;
+ this.drawStyledEdge(n, e, [_.startX, _.startY, _.endX, _.endY], g, v), i.straightEdgeTooShort = !1
+ }
+ } else {
+ var _ = i;
+ this.drawStyledEdge(n, e, [_.startX, _.startY, _.cp2x, _.cp2y, _.endX, _.endY], g, v)
+ }
+ "haystack" === i.edgeType ? this.drawArrowheads(e, n, r) : i.noArrowPlacement !== !0 && void 0 !== i.startX && this.drawArrowheads(e, n, r), this.shadowStyle(e, "transparent", 0)
+ }
+ }
+ }, n.drawStyledEdge = function(e, n, r, i, a) {
+ var o, s = e._private.rscratch,
+ l = n,
+ u = !1,
+ c = t.usePaths();
+ if (c) {
+ for (var d = r, h = s.pathCacheKey && d.length === s.pathCacheKey.length, p = h, f = 0; p && f < d.length; f++) s.pathCacheKey[f] !== d[f] && (p = !1);
+ p ? (o = n = s.pathCache, u = !0) : (o = n = new Path2D, s.pathCacheKey = d, s.pathCache = o)
+ }
+ if (l.setLineDash) switch (i) {
+ case "dotted":
+ l.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ l.setLineDash([6, 3]);
+ break;
+ case "solid":
+ l.setLineDash([])
+ }
+ u || (n.beginPath && n.beginPath(), n.moveTo(r[0], r[1]), 6 !== r.length || s.badBezier ? 12 !== r.length || s.badBezier ? 4 !== r.length || s.badLine || n.lineTo(r[2], r[3]) : (n.quadraticCurveTo(r[2], r[3], r[4], r[5]), n.quadraticCurveTo(r[8], r[9], r[10], r[11])) : n.quadraticCurveTo(r[2], r[3], r[4], r[5])), n = l, c ? n.stroke(o) : n.stroke(), n.setLineDash && n.setLineDash([])
+ }, n.drawArrowheads = function(e, t, n) {
+ function r(n, r, i, a, o) {
+ var s = v[n + "-arrow-shape"].value;
+ if ("none" !== s) {
+ var l = e.globalCompositeOperation,
+ u = "hollow" === v[n + "-arrow-fill"].value ? "both" : "filled",
+ c = v[n + "-arrow-fill"].value;
+ "half-triangle-overshot" === s && (c = "hollow", u = "hollow"), (1 !== v.opacity.value || "hollow" === c) && (e.globalCompositeOperation = "destination-out", d.fillStyle(e, 255, 255, 255, 1), d.strokeStyle(e, 255, 255, 255, 1), d.drawArrowShape(t, n, e, u, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o), e.globalCompositeOperation = l);
+ var h = v[n + "-arrow-color"].value;
+ d.fillStyle(e, h[0], h[1], h[2], v.opacity.value), d.strokeStyle(e, h[0], h[1], h[2], v.opacity.value), d.drawArrowShape(t, n, e, c, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o)
+ }
+ }
+ if (!n) {
+ var i, a, o, s, l, u, c = t._private.rscratch,
+ d = this,
+ h = "haystack" === c.edgeType,
+ p = t.source().position(),
+ f = t.target().position();
+ h ? (o = c.haystackPts[0], s = c.haystackPts[1], l = c.haystackPts[2], u = c.haystackPts[3]) : (o = c.arrowStartX, s = c.arrowStartY, l = c.arrowEndX, u = c.arrowEndY);
+ var v = t._private.style;
+ i = o - p.x, a = s - p.y, h || isNaN(o) || isNaN(s) || isNaN(i) || isNaN(a) || r("source", o, s, i, a);
+ var g = c.midX,
+ y = c.midY;
+ h && (g = (o + l) / 2, y = (s + u) / 2), i = o - l, a = s - u, "self" === c.edgeType && (i = 1, a = -1), isNaN(g) || isNaN(y) || r("mid-target", g, y, i, a), i *= -1, a *= -1, isNaN(g) || isNaN(y) || r("mid-source", g, y, i, a), i = l - f.x, a = u - f.y, h || isNaN(l) || isNaN(u) || isNaN(i) || isNaN(a) || r("target", l, u, i, a)
+ }
+ }, n.drawArrowShape = function(e, n, r, i, a, o, s, l, u, c) {
+ var d, h = t.usePaths(),
+ p = e._private.rscratch,
+ f = !1,
+ v = r,
+ g = {
+ x: s,
+ y: l
+ },
+ y = Math.asin(c / Math.sqrt(u * u + c * c));
+ 0 > u ? y += Math.PI / 2 : y = -(Math.PI / 2 + y);
+ var m = this.getArrowWidth(a),
+ x = t.arrowShapes[o];
+ if (h) {
+ var b = m + "$" + o + "$" + y + "$" + s + "$" + l;
+ p.arrowPathCacheKey = p.arrowPathCacheKey || {}, p.arrowPathCache = p.arrowPathCache || {};
+ var w = p.arrowPathCacheKey[n] === b;
+ w ? (d = r = p.arrowPathCache[n], f = !0) : (d = r = new Path2D, p.arrowPathCacheKey[n] = b, p.arrowPathCache[n] = d)
+ }
+ r.beginPath && r.beginPath(), f || x.draw(r, m, y, g), !x.leavePathOpen && r.closePath && r.closePath(), r = v, ("filled" === i || "both" === i) && (h ? r.fill(d) : r.fill()), ("hollow" === i || "both" === i) && (r.lineWidth = x.matchEdgeWidth ? a : 1, r.lineJoin = "miter", h ? r.stroke(d) : r.stroke())
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.getCachedImage = function(e, t) {
+ var n = this,
+ r = n.imageCache = n.imageCache || {};
+ if (r[e] && r[e].image) return r[e].image;
+ var i = r[e] = r[e] || {},
+ a = i.image = new Image;
+ return a.addEventListener("load", t), a.src = e, a
+ }, n.safeDrawImage = function(e, n, r, i, a, o, s, l, u, c) {
+ var d = this;
+ try {
+ e.drawImage(n, r, i, a, o, s, l, u, c)
+ } catch (h) {
+ d.data.canvasNeedsRedraw[t.NODE] = !0, d.data.canvasNeedsRedraw[t.DRAG] = !0, d.drawingImage = !0, d.redraw()
+ }
+ }, n.drawInscribedImage = function(e, n, r) {
+ var i = this,
+ a = r._private.position.x,
+ o = r._private.position.y,
+ s = r._private.style,
+ l = s["background-fit"].value,
+ u = s["background-position-x"],
+ c = s["background-position-y"],
+ d = s["background-repeat"].value,
+ h = r.width(),
+ p = r.height(),
+ f = r._private.rscratch,
+ v = s["background-clip"].value,
+ g = "node" === v,
+ y = s["background-image-opacity"].value,
+ m = n.width,
+ x = n.height;
+ if (0 !== m && 0 !== x) {
+ var b = s["background-width"];
+ "auto" !== b.value && (m = "%" === b.units ? b.value / 100 * h : b.pxValue);
+ var w = s["background-height"];
+ if ("auto" !== w.value && (x = "%" === w.units ? w.value / 100 * p : w.pxValue), 0 !== m && 0 !== x) {
+ if ("contain" === l) {
+ var _ = Math.min(h / m, p / x);
+ m *= _, x *= _
+ } else if ("cover" === l) {
+ var _ = Math.max(h / m, p / x);
+ m *= _, x *= _
+ }
+ var E = a - h / 2;
+ E += "%" === u.units ? (h - m) * u.value / 100 : u.pxValue;
+ var T = o - p / 2;
+ T += "%" === c.units ? (p - x) * c.value / 100 : c.pxValue, f.pathCache && (E -= a, T -= o, a = 0, o = 0);
+ var S = e.globalAlpha;
+ if (e.globalAlpha = y, "no-repeat" === d) g && (e.save(), f.pathCache ? e.clip(f.pathCache) : (t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.clip())), i.safeDrawImage(e, n, 0, 0, n.width, n.height, E, T, m, x), g && e.restore();
+ else {
+ var C = e.createPattern(n, d);
+ e.fillStyle = C, t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.translate(E, T), e.fill(), e.translate(-E, -T)
+ }
+ e.globalAlpha = S
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e, t, n, r, i, a) {
+ var a = a || 5;
+ e.beginPath(), e.moveTo(t + a, n), e.lineTo(t + r - a, n), e.quadraticCurveTo(t + r, n, t + r, n + a), e.lineTo(t + r, n + i - a), e.quadraticCurveTo(t + r, n + i, t + r - a, n + i), e.lineTo(t + a, n + i), e.quadraticCurveTo(t, n + i, t, n + i - a), e.lineTo(t, n + a), e.quadraticCurveTo(t, n, t + a, n), e.closePath(), e.fill()
+ }
+ var n = e("renderer", "canvas"),
+ r = n.prototype;
+ r.drawEdgeText = function(t, n) {
+ var r = n._private.style.content.strValue;
+ if (r && !r.match(/^\s+$/) && (!this.hideEdgesOnViewport || !(this.dragData.didDrag || this.pinching || this.hoverData.dragging || this.data.wheel || this.swipePanning))) {
+ var i = n._private.style["font-size"].pxValue * n.cy().zoom(),
+ a = n._private.style["min-zoomed-font-size"].pxValue;
+ if (!(a > i)) {
+ t.textAlign = "center", t.textBaseline = "middle";
+ var o = n._private.rscratch;
+ if (e.is.number(o.labelX) && e.is.number(o.labelY)) {
+ var s, l, u, c = n._private.style,
+ d = "autorotate" === c["edge-text-rotation"].strValue;
+ if (d) {
+ switch (o.edgeType) {
+ case "haystack":
+ l = o.haystackPts[2] - o.haystackPts[0], u = o.haystackPts[3] - o.haystackPts[1];
+ break;
+ default:
+ l = o.endX - o.startX, u = o.endY - o.startY
+ }
+ s = Math.atan(u / l), t.translate(o.labelX, o.labelY), t.rotate(s), this.drawText(t, n, 0, 0), t.rotate(-s), t.translate(-o.labelX, -o.labelY)
+ } else this.drawText(t, n, o.labelX, o.labelY)
+ }
+ }
+ }
+ }, r.drawNodeText = function(t, n) {
+ var r = n._private.style.content.strValue;
+ if (r && !r.match(/^\s+$/)) {
+ var i = n._private.style["font-size"].pxValue * n.cy().zoom(),
+ a = n._private.style["min-zoomed-font-size"].pxValue;
+ if (!(a > i)) {
+ var o = n._private.style["text-halign"].strValue,
+ s = n._private.style["text-valign"].strValue,
+ l = n._private.rscratch;
+ if (e.is.number(l.labelX) && e.is.number(l.labelY)) {
+ switch (o) {
+ case "left":
+ t.textAlign = "right";
+ break;
+ case "right":
+ t.textAlign = "left";
+ break;
+ default:
+ t.textAlign = "center"
+ }
+ switch (s) {
+ case "top":
+ t.textBaseline = "bottom";
+ break;
+ case "bottom":
+ t.textBaseline = "top";
+ break;
+ default:
+ t.textBaseline = "middle"
+ }
+ this.drawText(t, n, l.labelX, l.labelY)
+ }
+ }
+ }
+ }, r.getFontCache = function(e) {
+ var t;
+ this.fontCaches = this.fontCaches || [];
+ for (var n = 0; n < this.fontCaches.length; n++)
+ if (t = this.fontCaches[n], t.context === e) return t;
+ return t = {
+ context: e
+ }, this.fontCaches.push(t), t
+ }, r.setupTextStyle = function(e, t) {
+ var n = t.effectiveOpacity(),
+ r = t._private.style,
+ i = r["font-style"].strValue,
+ a = r["font-size"].pxValue + "px",
+ o = r["font-family"].strValue,
+ s = r["font-weight"].strValue,
+ l = r["text-opacity"].value * r.opacity.value * n,
+ u = r["text-outline-opacity"].value * l,
+ c = r.color.value,
+ d = r["text-outline-color"].value,
+ h = r["text-shadow-blur"].pxValue,
+ p = r["text-shadow-opacity"].value,
+ f = r["text-shadow-color"].value,
+ v = r["text-shadow-offset-x"].pxValue,
+ g = r["text-shadow-offset-y"].pxValue,
+ y = t._private.fontKey,
+ m = this.getFontCache(e);
+ m.key !== y && (e.font = i + " " + s + " " + a + " " + o, m.key = y);
+ var x = this.getLabelText(t);
+ return e.lineJoin = "round", this.fillStyle(e, c[0], c[1], c[2], l), this.strokeStyle(e, d[0], d[1], d[2], u), this.shadowStyle(e, f, p, h, v, g), x
+ }, r.drawText = function(e, n, r, i) {
+ var a = n._private,
+ o = a.style,
+ s = a.rstyle,
+ l = a.rscratch,
+ u = n.effectiveOpacity();
+ if (0 !== u && 0 !== o["text-opacity"].value) {
+ var c = this.setupTextStyle(e, n),
+ d = o["text-halign"].value,
+ h = o["text-valign"].value;
+ if (n.isEdge() && (d = "center", h = "center"), null != c && !isNaN(r) && !isNaN(i)) {
+ var p = o["text-background-opacity"].value,
+ f = o["text-border-opacity"].value,
+ v = o["text-border-width"].pxValue;
+ if (p > 0 || v > 0 && f > 0) {
+ var g = 4 + v / 2;
+ n.isNode() && ("top" === h ? i -= g : "bottom" === h && (i += g), "left" === d ? r -= g : "right" === d && (r += g));
+ var y = s.labelWidth,
+ m = s.labelHeight,
+ x = r;
+ d && ("center" == d ? x -= y / 2 : "left" == d && (x -= y));
+ var b = i;
+ if (n.isNode() ? "top" == h ? b -= m : "center" == h && (b -= m / 2) : b -= m / 2, "autorotate" === o["edge-text-rotation"].strValue ? (i = 0, y += 4, x = r - y / 2, b = i - m / 2) : (x -= g, b -= g, m += 2 * g, y += 2 * g), p > 0) {
+ var w = e.fillStyle,
+ _ = o["text-background-color"].value;
+ e.fillStyle = "rgba(" + _[0] + "," + _[1] + "," + _[2] + "," + p * u + ")";
+ var E = o["text-background-shape"].strValue;
+ "roundrectangle" == E ? t(e, x, b, y, m, 2) : e.fillRect(x, b, y, m), e.fillStyle = w
+ }
+ if (v > 0 && f > 0) {
+ var T = e.strokeStyle,
+ S = e.lineWidth,
+ C = o["text-border-color"].value,
+ k = o["text-border-style"].value;
+ if (e.strokeStyle = "rgba(" + C[0] + "," + C[1] + "," + C[2] + "," + f * u + ")", e.lineWidth = v, e.setLineDash) switch (k) {
+ case "dotted":
+ e.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ e.setLineDash([4, 2]);
+ break;
+ case "double":
+ e.lineWidth = v / 4, e.setLineDash([]);
+ break;
+ case "solid":
+ e.setLineDash([])
+ }
+ if (e.strokeRect(x, b, y, m), "double" === k) {
+ var D = v / 2;
+ e.strokeRect(x + D, b + D, y - 2 * D, m - 2 * D)
+ }
+ e.setLineDash && e.setLineDash([]), e.lineWidth = S, e.strokeStyle = T
+ }
+ }
+ var N = 2 * o["text-outline-width"].pxValue;
+ if (N > 0 && (e.lineWidth = N), "wrap" === o["text-wrap"].value) {
+ var P = l.labelWrapCachedLines,
+ M = s.labelHeight / P.length;
+ switch (h) {
+ case "top":
+ i -= (P.length - 1) * M;
+ break;
+ case "bottom":
+ break;
+ default:
+ case "center":
+ i -= (P.length - 1) * M / 2
+ }
+ for (var B = 0; B < P.length; B++) N > 0 && e.strokeText(P[B], r, i), e.fillText(P[B], r, i), i += M
+ } else N > 0 && e.strokeText(c, r, i), e.fillText(c, r, i);
+ this.shadowStyle(e, "transparent", 0)
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawNode = function(e, n, r) {
+ var i, a, o = this,
+ s = n._private.style,
+ l = n._private.rscratch,
+ u = n._private,
+ c = u.position;
+ if (void 0 !== c.x && void 0 !== c.y) {
+ var d, h = t.usePaths(),
+ p = e,
+ f = !1,
+ v = s["overlay-padding"].pxValue,
+ g = s["overlay-opacity"].value,
+ y = s["overlay-color"].value;
+ if (!r || 0 !== g) {
+ var m = n.effectiveOpacity();
+ if (0 !== m)
+ if (i = this.getNodeWidth(n), a = this.getNodeHeight(n), e.lineWidth = s["border-width"].pxValue, void 0 !== r && r) g > 0 && (this.fillStyle(e, y[0], y[1], y[2], g), t.nodeShapes.roundrectangle.drawPath(e, n._private.position.x, n._private.position.y, i + 2 * v, a + 2 * v), e.fill());
+ else {
+ var x, b = s["background-image"].value[2] || s["background-image"].value[1];
+ if (void 0 !== b) {
+ x = this.getCachedImage(b, function() {
+ o.data.canvasNeedsRedraw[t.NODE] = !0, o.data.canvasNeedsRedraw[t.DRAG] = !0, o.drawingImage = !0, o.redraw()
+ });
+ var w = u.backgrounding;
+ u.backgrounding = !x.complete, w !== u.backgrounding && n.updateStyle(!1)
+ }
+ var _ = s["background-color"].value,
+ E = s["border-color"].value,
+ T = s["border-style"].value;
+ this.fillStyle(e, _[0], _[1], _[2], s["background-opacity"].value * m), this.strokeStyle(e, E[0], E[1], E[2], s["border-opacity"].value * m);
+ var S = s["shadow-blur"].pxValue,
+ C = s["shadow-opacity"].value,
+ k = s["shadow-color"].value,
+ D = s["shadow-offset-x"].pxValue,
+ N = s["shadow-offset-y"].pxValue;
+ if (this.shadowStyle(e, k, C, S, D, N), e.lineJoin = "miter", e.setLineDash) switch (T) {
+ case "dotted":
+ e.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ e.setLineDash([4, 2]);
+ break;
+ case "solid":
+ case "double":
+ e.setLineDash([])
+ }
+ var P = s.shape.strValue;
+ if (h) {
+ var M = P + "$" + i + "$" + a;
+ e.translate(c.x, c.y), l.pathCacheKey === M ? (d = e = l.pathCache, f = !0) : (d = e = new Path2D, l.pathCacheKey = M, l.pathCache = d)
+ }
+ if (!f) {
+ var B = c;
+ h && (B = {
+ x: 0,
+ y: 0
+ }), t.nodeShapes[this.getNodeShape(n)].drawPath(e, B.x, B.y, i, a)
+ }
+ e = p, h ? e.fill(d) : e.fill(), this.shadowStyle(e, "transparent", 0), void 0 !== b && x.complete && this.drawInscribedImage(e, x, n);
+ var L = s["background-blacken"].value,
+ O = s["border-width"].pxValue;
+ if (this.hasPie(n) && (this.drawPie(e, n, m), (0 !== L || 0 !== O) && (h || t.nodeShapes[this.getNodeShape(n)].drawPath(e, c.x, c.y, i, a))), L > 0 ? (this.fillStyle(e, 0, 0, 0, L), h ? e.fill(d) : e.fill()) : 0 > L && (this.fillStyle(e, 255, 255, 255, -L), h ? e.fill(d) : e.fill()), O > 0 && (h ? e.stroke(d) : e.stroke(), "double" === T)) {
+ e.lineWidth = s["border-width"].pxValue / 3;
+ var A = e.globalCompositeOperation;
+ e.globalCompositeOperation = "destination-out", h ? e.stroke(d) : e.stroke(), e.globalCompositeOperation = A
+ }
+ h && e.translate(-c.x, -c.y), e.setLineDash && e.setLineDash([])
+ }
+ }
+ }
+ }, n.hasPie = function(e) {
+ return e = e[0], e._private.hasPie
+ }, n.drawPie = function(n, r, i) {
+ r = r[0];
+ var a = r._private,
+ o = a.style,
+ s = o["pie-size"],
+ l = this.getNodeWidth(r),
+ u = this.getNodeHeight(r),
+ c = a.position.x,
+ d = a.position.y,
+ h = Math.min(l, u) / 2,
+ p = 0,
+ f = t.usePaths();
+ f && (c = 0, d = 0), "%" === s.units ? h = h * s.value / 100 : void 0 !== s.pxValue && (h = s.pxValue / 2);
+ for (var v = 1; v <= e.style.pieBackgroundN; v++) {
+ var g = o["pie-" + v + "-background-size"].value,
+ y = o["pie-" + v + "-background-color"].value,
+ m = o["pie-" + v + "-background-opacity"].value * i,
+ x = g / 100;
+ x + p > 1 && (x = 1 - p);
+ var b = 1.5 * Math.PI + 2 * Math.PI * p,
+ w = 2 * Math.PI * x,
+ _ = b + w;
+ 0 === g || p >= 1 || p + x > 1 || (n.beginPath(), n.moveTo(c, d), n.arc(c, d, h, b, _), n.closePath(), this.fillStyle(n, y[0], y[1], y[2], m), n.fill(), p += x)
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t,
+ r = t.prototype;
+ r.getPixelRatio = function() {
+ var e = this.data.contexts[0];
+ if (null != this.forcedPixelRatio) return this.forcedPixelRatio;
+ var t = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1;
+ return (window.devicePixelRatio || 1) / t
+ }, r.paintCache = function(e) {
+ for (var t, n = this.paintCaches = this.paintCaches || [], r = !0, i = 0; i < n.length; i++)
+ if (t = n[i], t.context === e) {
+ r = !1;
+ break
+ }
+ return r && (t = {
+ context: e
+ }, n.push(t)), t
+ }, r.fillStyle = function(e, t, n, r, i) {
+ e.fillStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")"
+ }, r.strokeStyle = function(e, t, n, r, i) {
+ e.strokeStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")"
+ }, r.shadowStyle = function(e, t, n, r, i, a) {
+ var o = this.data.cy.zoom(),
+ s = this.paintCache(e);
+ (0 !== s.shadowOpacity || 0 !== n) && (s.shadowOpacity = n, n > 0 ? (e.shadowBlur = r * o, e.shadowColor = "rgba(" + t[0] + "," + t[1] + "," + t[2] + "," + n + ")", e.shadowOffsetX = i * o, e.shadowOffsetY = a * o) : (e.shadowBlur = 0, e.shadowColor = "transparent"))
+ }, r.matchCanvasSize = function(e) {
+ var r = this.data,
+ i = e.clientWidth,
+ a = e.clientHeight,
+ o = this.getPixelRatio(),
+ s = this.motionBlurPxRatio;
+ (e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE] || e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG]) && (o = s);
+ var l, u = i * o,
+ c = a * o;
+ if (u !== this.canvasWidth || c !== this.canvasHeight) {
+ this.fontCaches = null;
+ var d = r.canvasContainer;
+ d.style.width = i + "px", d.style.height = a + "px";
+ for (var h = 0; h < t.CANVAS_LAYERS; h++) l = r.canvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px");
+ for (var h = 0; h < t.BUFFER_COUNT; h++) l = r.bufferCanvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px");
+ this.textureMult = 1, 1 >= o && (l = r.bufferCanvases[t.TEXTURE_BUFFER], this.textureMult = 2, l.width = u * this.textureMult, l.height = c * this.textureMult), this.canvasWidth = u, this.canvasHeight = c
+ }
+ }, r.renderTo = function(e, t, n, r) {
+ this.redraw({
+ forcedContext: e,
+ forcedZoom: t,
+ forcedPan: n,
+ drawAllLayers: !0,
+ forcedPxRatio: r
+ })
+ }, r.timeToRender = function() {
+ return this.redrawTotalTime / this.redrawCount
+ }, t.minRedrawLimit = 1e3 / 60, t.maxRedrawLimit = 1e3, t.motionBlurDelay = 100, r.redraw = function(r) {
+ function i() {
+ function r(e, t, n, r, i) {
+ var a = e.globalCompositeOperation;
+ e.globalCompositeOperation = "destination-out", c.fillStyle(e, 255, 255, 255, c.motionBlurTransparency), e.fillRect(t, n, r, i), e.globalCompositeOperation = a
+ }
+
+ function i(e, t) {
+ var i, s, d, h;
+ c.clearingMotionBlur || e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] && e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] ? (i = k, s = S, d = c.canvasWidth, h = c.canvasHeight) : (i = {
+ x: C.x * y,
+ y: C.y * y
+ }, s = T * y, d = c.canvasWidth * y, h = c.canvasHeight * y), e.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === t ? r(e, 0, 0, d, h) : a || void 0 !== t && !t || e.clearRect(0, 0, d, h), o || (e.translate(i.x, i.y), e.scale(s, s)), u && e.translate(u.x, u.y), l && e.scale(l, l)
+ }
+
+ function b(e, t) {
+ for (var n = e.eles, r = 0; r < n.length; r++) {
+ var i = n[r];
+ i.isNode() ? (c.drawNode(t, i), q || c.drawNodeText(t, i), c.drawNode(t, i, !0)) : F || (c.drawEdge(t, i), q || c.drawEdgeText(t, i), c.drawEdge(t, i, !0))
+ }
+ }
+ c.textureDrawLastFrame && !v && (f[n.NODE] = !0, f[n.SELECT_BOX] = !0);
+ var _ = c.getCachedEdges(),
+ E = h.style()._private.coreStyle,
+ T = h.zoom(),
+ S = void 0 !== l ? l : T,
+ C = h.pan(),
+ k = {
+ x: C.x,
+ y: C.y
+ },
+ N = {
+ zoom: T,
+ pan: {
+ x: C.x,
+ y: C.y
+ }
+ },
+ P = c.prevViewport,
+ M = void 0 === P || N.zoom !== P.zoom || N.pan.x !== P.pan.x || N.pan.y !== P.pan.y;
+ M || x && !m || (c.motionBlurPxRatio = 1), u && (k = u), S *= d, k.x *= d, k.y *= d;
+ var B = {
+ drag: {
+ nodes: [],
+ edges: [],
+ eles: []
+ },
+ nondrag: {
+ nodes: [],
+ edges: [],
+ eles: []
+ }
+ };
+ if (v || (c.textureDrawLastFrame = !1), v) {
+ c.textureDrawLastFrame = !0;
+ var L;
+ if (!c.textureCache) {
+ c.textureCache = {}, L = c.textureCache.bb = h.elements().boundingBox(), c.textureCache.texture = c.data.bufferCanvases[t.TEXTURE_BUFFER];
+ var O = c.data.bufferContexts[t.TEXTURE_BUFFER];
+ O.setTransform(1, 0, 0, 1, 0, 0), O.clearRect(0, 0, c.canvasWidth * c.textureMult, c.canvasHeight * c.textureMult), c.redraw({
+ forcedContext: O,
+ drawOnlyNodeLayer: !0,
+ forcedPxRatio: d * c.textureMult
+ });
+ var N = c.textureCache.viewport = {
+ zoom: h.zoom(),
+ pan: h.pan(),
+ width: c.canvasWidth,
+ height: c.canvasHeight
+ };
+ N.mpan = {
+ x: (0 - N.pan.x) / N.zoom,
+ y: (0 - N.pan.y) / N.zoom
+ }
+ }
+ f[n.DRAG] = !1, f[n.NODE] = !1;
+ var A = p.contexts[n.NODE],
+ I = c.textureCache.texture,
+ N = c.textureCache.viewport;
+ L = c.textureCache.bb, A.setTransform(1, 0, 0, 1, 0, 0), g ? r(A, 0, 0, N.width, N.height) : A.clearRect(0, 0, N.width, N.height);
+ var z = E["outside-texture-bg-color"].value,
+ R = E["outside-texture-bg-opacity"].value;
+ c.fillStyle(A, z[0], z[1], z[2], R), A.fillRect(0, 0, N.width, N.height);
+ var T = h.zoom();
+ i(A, !1), A.clearRect(N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d), A.drawImage(I, N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d)
+ } else c.textureOnViewport && !a && (c.textureCache = null);
+ var j = c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming || c.hoverData.draggingEles,
+ F = c.hideEdgesOnViewport && j,
+ q = c.hideLabelsOnViewport && j;
+ if (f[n.DRAG] || f[n.NODE] || o || s) {
+ F || c.findEdgeControlPoints(_);
+ for (var V = c.getCachedZSortedEles(), X = h.extent(), H = 0; H < V.length; H++) {
+ var Y, $ = V[H],
+ L = a ? null : $.boundingBox(),
+ W = a ? !0 : e.math.boundingBoxesIntersect(X, L);
+ W && (Y = $._private.rscratch.inDragLayer ? B.drag : B.nondrag, Y.eles.push($))
+ }
+ }
+ var U = [];
+ if (U[n.NODE] = !f[n.NODE] && g && !c.clearedForMotionBlur[n.NODE] || c.clearingMotionBlur, U[n.NODE] && (c.clearedForMotionBlur[n.NODE] = !0), U[n.DRAG] = !f[n.DRAG] && g && !c.clearedForMotionBlur[n.DRAG] || c.clearingMotionBlur, U[n.DRAG] && (c.clearedForMotionBlur[n.DRAG] = !0), f[n.NODE] || o || s || U[n.NODE]) {
+ var Z = g && !U[n.NODE] && 1 !== y,
+ A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] : p.contexts[n.NODE]),
+ G = g && !Z ? "motionBlur" : void 0;
+ i(A, G), b(B.nondrag, A), o || g || (f[n.NODE] = !1)
+ }
+ if (!s && (f[n.DRAG] || o || U[n.DRAG])) {
+ var Z = g && !U[n.DRAG] && 1 !== y,
+ A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] : p.contexts[n.DRAG]);
+ i(A, g && !Z ? "motionBlur" : void 0), b(B.drag, A), o || g || (f[n.DRAG] = !1)
+ }
+ if (c.showFps || !s && f[n.SELECT_BOX] && !o) {
+ var A = a || p.contexts[n.SELECT_BOX];
+ if (i(A), 1 == p.select[4] && (c.hoverData.selecting || c.touchData.selecting)) {
+ var T = p.cy.zoom(),
+ K = E["selection-box-border-width"].value / T;
+ A.lineWidth = K, A.fillStyle = "rgba(" + E["selection-box-color"].value[0] + "," + E["selection-box-color"].value[1] + "," + E["selection-box-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.fillRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1]), K > 0 && (A.strokeStyle = "rgba(" + E["selection-box-border-color"].value[0] + "," + E["selection-box-border-color"].value[1] + "," + E["selection-box-border-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.strokeRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1]))
+ }
+ if (p.bgActivePosistion && !c.hoverData.selecting) {
+ var T = p.cy.zoom(),
+ J = p.bgActivePosistion;
+ A.fillStyle = "rgba(" + E["active-bg-color"].value[0] + "," + E["active-bg-color"].value[1] + "," + E["active-bg-color"].value[2] + "," + E["active-bg-opacity"].value + ")", A.beginPath(), A.arc(J.x, J.y, E["active-bg-size"].pxValue / T, 0, 2 * Math.PI), A.fill()
+ }
+ var Q = c.averageRedrawTime;
+ if (c.showFps && Q) {
+ Q = Math.round(Q);
+ var ee = Math.round(1e3 / Q);
+ A.setTransform(1, 0, 0, 1, 0, 0), A.fillStyle = "rgba(255, 0, 0, 0.75)", A.strokeStyle = "rgba(255, 0, 0, 0.75)", A.lineWidth = 1, A.fillText("1 frame = " + Q + " ms = " + ee + " fps", 0, 20);
+ var te = 60;
+ A.strokeRect(0, 30, 250, 20), A.fillRect(0, 30, 250 * Math.min(ee / te, 1), 20)
+ }
+ o || (f[n.SELECT_BOX] = !1)
+ }
+ if (g && 1 !== y) {
+ var ne = p.contexts[n.NODE],
+ re = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE],
+ ie = p.contexts[n.DRAG],
+ ae = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG],
+ oe = function(e, t, n) {
+ e.setTransform(1, 0, 0, 1, 0, 0), n || !w ? e.clearRect(0, 0, c.canvasWidth, c.canvasHeight) : r(e, 0, 0, c.canvasWidth, c.canvasHeight);
+ var i = y;
+ e.drawImage(t, 0, 0, c.canvasWidth * i, c.canvasHeight * i, 0, 0, c.canvasWidth, c.canvasHeight)
+ };
+ (f[n.NODE] || U[n.NODE]) && (oe(ne, re, U[n.NODE]), f[n.NODE] = !1), (f[n.DRAG] || U[n.DRAG]) && (oe(ie, ae, U[n.DRAG]), f[n.DRAG] = !1)
+ }
+ var se = Date.now();
+ void 0 === c.averageRedrawTime && (c.averageRedrawTime = se - D), void 0 === c.redrawCount && (c.redrawCount = 0), c.redrawCount++, void 0 === c.redrawTotalTime && (c.redrawTotalTime = 0), c.redrawTotalTime += se - D, c.lastRedrawTime = se - D, c.averageRedrawTime = c.averageRedrawTime / 2 + (se - D) / 2, c.currentlyDrawing = !1, c.prevViewport = N, c.clearingMotionBlur && (c.clearingMotionBlur = !1, c.motionBlurCleared = !0, c.motionBlur = !0), g && (c.motionBlurTimeout = setTimeout(function() {
+ c.motionBlurTimeout = null, c.clearedForMotionBlur[n.NODE] = !1, c.clearedForMotionBlur[n.DRAG] = !1, c.motionBlur = !1, c.clearingMotionBlur = !v, c.mbFrames = 0, f[n.NODE] = !0, f[n.DRAG] = !0, c.redraw()
+ }, t.motionBlurDelay)), c.drawingImage = !1
+ }
+ r = r || {};
+ var a = r.forcedContext,
+ o = r.drawAllLayers,
+ s = r.drawOnlyNodeLayer,
+ l = r.forcedZoom,
+ u = r.forcedPan,
+ c = this,
+ d = void 0 === r.forcedPxRatio ? this.getPixelRatio() : r.forcedPxRatio,
+ h = c.data.cy,
+ p = c.data,
+ f = p.canvasNeedsRedraw,
+ v = c.textureOnViewport && !a && (c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming),
+ g = void 0 !== r.motionBlur ? r.motionBlur : c.motionBlur,
+ y = c.motionBlurPxRatio,
+ m = h.hasCompoundNodes(),
+ x = c.hoverData.draggingEles,
+ b = c.hoverData.selecting || c.touchData.selecting ? !0 : !1;
+ g = g && !a && c.motionBlurEnabled && !b;
+ var w = g;
+ !a && c.motionBlurTimeout && clearTimeout(c.motionBlurTimeout), !a && this.redrawTimeout && clearTimeout(this.redrawTimeout), this.redrawTimeout = null, void 0 === this.averageRedrawTime && (this.averageRedrawTime = 0);
+ var _ = t.minRedrawLimit,
+ E = t.maxRedrawLimit,
+ T = this.averageRedrawTime;
+ T = _ > T ? _ : T, T = E > T ? T : E, void 0 === this.lastDrawTime && (this.lastDrawTime = 0);
+ var S = Date.now(),
+ C = S - this.lastDrawTime,
+ k = C >= T;
+ if (!a && !c.clearingMotionBlur) {
+ if (!k || this.currentlyDrawing) return void(this.redrawTimeout = setTimeout(function() {
+ c.redraw()
+ }, T));
+ this.lastDrawTime = S, this.currentlyDrawing = !0
+ }
+ g && (null == c.mbFrames && (c.mbFrames = 0), c.drawingImage || c.mbFrames++, c.mbFrames < 3 && (w = !1), c.mbFrames > c.minMbLowQualFrames && (c.motionBlurPxRatio = c.mbPxRBlurry)), c.clearingMotionBlur && (c.motionBlurPxRatio = 1);
+ var D = Date.now();
+ a ? i() : e.util.requestAnimationFrame(i), a || c.initrender || (c.initrender = !0, h.trigger("initrender")), a || h.triggerOnRender()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawPolygonPath = function(e, t, n, r, i, a) {
+ var o = r / 2,
+ s = i / 2;
+ e.beginPath && e.beginPath(), e.moveTo(t + o * a[0], n + s * a[1]);
+ for (var l = 1; l < a.length / 2; l++) e.lineTo(t + o * a[2 * l], n + s * a[2 * l + 1]);
+ e.closePath()
+ }, n.drawPolygon = function(e, t, n, r, i, a) {
+ this.drawPolygonPath(e, t, n, r, i, a), e.fill()
+ }, n.drawRoundRectanglePath = function(t, n, r, i, a, o) {
+ var s = i / 2,
+ l = a / 2,
+ u = e.math.getRoundRectangleRadius(i, a);
+ t.beginPath && t.beginPath(), t.moveTo(n, r - l), t.arcTo(n + s, r - l, n + s, r, u), t.arcTo(n + s, r + l, n, r + l, u), t.arcTo(n - s, r + l, n - s, r, u), t.arcTo(n - s, r - l, n, r - l, u), t.lineTo(n, r - l), t.closePath()
+ }, n.drawRoundRectangle = function(e, t, n, r, i, a) {
+ this.drawRoundRectanglePath(e, t, n, r, i, a), e.fill()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.createBuffer = function(e, t) {
+ var n = document.createElement("canvas");
+ return n.width = e, n.height = t, [n, n.getContext("2d")]
+ }, n.bufferCanvasImage = function(t) {
+ var n = this.data,
+ r = n.cy,
+ i = r.elements().boundingBox(),
+ a = t.full ? Math.ceil(i.w) : this.data.container.clientWidth,
+ o = t.full ? Math.ceil(i.h) : this.data.container.clientHeight,
+ s = 1;
+ if (void 0 !== t.scale) a *= t.scale, o *= t.scale, s = t.scale;
+ else if (e.is.number(t.maxWidth) || e.is.number(t.maxHeight)) {
+ var l = 1 / 0,
+ u = 1 / 0;
+ e.is.number(t.maxWidth) && (l = s * t.maxWidth / a), e.is.number(t.maxHeight) && (u = s * t.maxHeight / o), s = Math.min(l, u), a *= s, o *= s
+ }
+ var c = document.createElement("canvas");
+ c.width = a, c.height = o, c.style.width = a + "px", c.style.height = o + "px";
+ var d = c.getContext("2d");
+ if (a > 0 && o > 0)
+ if (d.clearRect(0, 0, a, o), t.bg && (d.fillStyle = t.bg, d.rect(0, 0, a, o), d.fill()), d.globalCompositeOperation = "source-over", t.full) this.redraw({
+ forcedContext: d,
+ drawAllLayers: !0,
+ forcedZoom: s,
+ forcedPan: {
+ x: -i.x1 * s,
+ y: -i.y1 * s
+ },
+ forcedPxRatio: 1
+ });
+ else {
+ var h = r.pan(),
+ p = {
+ x: h.x * s,
+ y: h.y * s
+ },
+ f = r.zoom() * s;
+ this.redraw({
+ forcedContext: d,
+ drawAllLayers: !0,
+ forcedZoom: f,
+ forcedPan: p,
+ forcedPxRatio: 1
+ })
+ }
+ return c
+ }, n.png = function(e) {
+ return this.bufferCanvasImage(e).toDataURL("image/png")
+ }, n.jpg = function(e) {
+ return this.bufferCanvasImage(e).toDataURL("image/jpeg")
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t,
+ r = n.prototype;
+ r.registerBinding = function(e, t, n, r) {
+ this.bindings.push({
+ target: e,
+ event: t,
+ handler: n,
+ useCapture: r
+ }), e.addEventListener(t, n, r)
+ }, r.nodeIsDraggable = function(e) {
+ return 0 !== e._private.style.opacity.value && "visible" == e._private.style.visibility.value && "element" == e._private.style.display.value && !e.locked() && e.grabbable() ? !0 : !1
+ }, r.load = function() {
+ var t = this,
+ r = function(e) {
+ var n;
+ if (e.addToList && t.data.cy.hasCompoundNodes()) {
+ if (!e.addToList.hasId) {
+ e.addToList.hasId = {};
+ for (var r = 0; r < e.addToList.length; r++) {
+ var i = e.addToList[r];
+ e.addToList.hasId[i.id()] = !0
+ }
+ }
+ n = e.addToList.hasId
+ }
+ return n || {}
+ },
+ i = function(e, t) {
+ if (e._private.cy.hasCompoundNodes() && (null != t.inDragLayer || null != t.addToList))
+ for (var n = r(t), i = e.descendants(), a = 0; a < i.size(); a++) {
+ var o = i[a],
+ s = o._private;
+ t.inDragLayer && (s.rscratch.inDragLayer = !0), t.addToList && !n[o.id()] && (t.addToList.push(o), n[o.id()] = !0, s.grabbed = !0);
+ for (var l = s.edges, u = 0; t.inDragLayer && u < l.length; u++) l[u]._private.rscratch.inDragLayer = !0
+ }
+ },
+ a = function(e, t) {
+ var n = e._private,
+ a = r(t);
+ t.inDragLayer && (n.rscratch.inDragLayer = !0), t.addToList && !a[e.id()] && (t.addToList.push(e), a[e.id()] = !0, n.grabbed = !0);
+ for (var o = n.edges, l = 0; t.inDragLayer && l < o.length; l++) o[l]._private.rscratch.inDragLayer = !0;
+ i(e, t), s(e, {
+ inDragLayer: t.inDragLayer
+ })
+ },
+ o = function(e) {
+ if (e)
+ for (var t = 0; t < e.length; t++) {
+ var n = e[t]._private;
+ if ("nodes" === n.group) {
+ n.rscratch.inDragLayer = !1, n.grabbed = !1;
+ for (var r = n.edges, i = 0; i < r.length; i++) r[i]._private.rscratch.inDragLayer = !1;
+ s(e[t], {
+ inDragLayer: !1
+ })
+ } else "edges" === n.group && (n.rscratch.inDragLayer = !1)
+ }
+ },
+ s = function(e, t) {
+ if (null != t.inDragLayer || null != t.addToList) {
+ var n = e;
+ if (e._private.cy.hasCompoundNodes()) {
+ for (; n.parent().nonempty();) n = n.parent()[0];
+ if (n != e) {
+ for (var i = n.descendants().merge(n).unmerge(e).unmerge(e.descendants()), a = i.connectedEdges(), o = r(t), s = 0; s < i.size(); s++) void 0 !== t.inDragLayer && (i[s]._private.rscratch.inDragLayer = t.inDragLayer), t.addToList && !o[i[s].id()] && (t.addToList.push(i[s]), o[i[s].id()] = !0, i[s]._private.grabbed = !0);
+ for (var l = 0; void 0 !== t.inDragLayer && l < a.length; l++) a[l]._private.rscratch.inDragLayer = t.inDragLayer
+ }
+ }
+ }
+ };
+ "undefined" != typeof MutationObserver ? (t.removeObserver = new MutationObserver(function(e) {
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = r.removedNodes;
+ if (i)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ if (o === t.data.container) {
+ t.destroy();
+ break
+ }
+ }
+ }
+ }), t.removeObserver.observe(t.data.container.parentNode, {
+ childList: !0
+ })) : t.registerBinding(t.data.container, "DOMNodeRemoved", function(e) {
+ t.destroy()
+ }), t.registerBinding(window, "resize", e.util.debounce(function(e) {
+ t.invalidateContainerClientCoordsCache(), t.matchCanvasSize(t.data.container), t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw()
+ }, 100));
+ for (var l = function(e) {
+ t.registerBinding(e, "scroll", function(e) {
+ t.invalidateContainerClientCoordsCache()
+ })
+ }, u = t.data.cy.container(); l(u), u.parentNode;) u = u.parentNode;
+ t.registerBinding(t.data.container, "contextmenu", function(e) {
+ e.preventDefault()
+ });
+ var c = function() {
+ return 0 !== t.data.select[4]
+ };
+ t.registerBinding(t.data.container, "mousedown", function(r) {
+ r.preventDefault(), t.hoverData.capture = !0, t.hoverData.which = r.which;
+ var i = t.data.cy,
+ o = t.projectIntoViewport(r.clientX, r.clientY),
+ s = t.data.select,
+ l = t.findNearestElement(o[0], o[1], !0, !1),
+ u = t.dragData.possibleDragElements;
+ t.hoverData.mdownPos = o;
+ var c = t.data.canvasNeedsRedraw,
+ d = function() {
+ t.hoverData.tapholdCancelled = !1, clearTimeout(t.hoverData.tapholdTimeout), t.hoverData.tapholdTimeout = setTimeout(function() {
+ if (!t.hoverData.tapholdCancelled) {
+ var n = t.hoverData.down;
+ n ? n.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })) : i.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }))
+ }
+ }, t.tapholdDuration)
+ };
+ if (3 == r.which) {
+ t.hoverData.cxtStarted = !0;
+ var h = new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ });
+ l ? (l.activate(), l.trigger(h), t.hoverData.down = l) : i.trigger(h), t.hoverData.downTime = (new Date).getTime(), t.hoverData.cxtDragged = !1
+ } else if (1 == r.which) {
+ if (l && l.activate(), null != l) {
+ if (t.nodeIsDraggable(l)) {
+ var p = new e.Event(r, {
+ type: "grab",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ });
+ if (l.isNode() && !l.selected()) u = t.dragData.possibleDragElements = [], a(l, {
+ addToList: u
+ }), l.trigger(p);
+ else if (l.isNode() && l.selected()) {
+ u = t.dragData.possibleDragElements = [];
+ for (var f = i.$(function() {
+ return this.isNode() && this.selected()
+ }), v = 0; v < f.length; v++) t.nodeIsDraggable(f[v]) && a(f[v], {
+ addToList: u
+ });
+ l.trigger(p)
+ }
+ c[n.NODE] = !0, c[n.DRAG] = !0
+ }
+ l.trigger(new e.Event(r, {
+ type: "mousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }))
+ } else null == l && i.trigger(new e.Event(r, {
+ type: "mousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }));
+ if (t.hoverData.down = l, t.hoverData.downTime = (new Date).getTime(), null == l || l.isEdge()) {
+ s[4] = 1;
+ var g = Math.max(0, n.panOrBoxSelectDelay - (+new Date - t.hoverData.downTime));
+ clearTimeout(t.bgActiveTimeout), i.boxSelectionEnabled() || l && l.isEdge() ? t.bgActiveTimeout = setTimeout(function() {
+ l && l.unactivate(), t.data.bgActivePosistion = {
+ x: o[0],
+ y: o[1]
+ }, t.hoverData.dragging = !0, c[n.SELECT_BOX] = !0, t.redraw()
+ }, g) : (t.data.bgActivePosistion = {
+ x: o[0],
+ y: o[1]
+ }, c[n.SELECT_BOX] = !0, t.redraw())
+ }
+ d()
+ }
+ s[0] = s[2] = o[0], s[1] = s[3] = o[1]
+ }, !1), t.registerBinding(window, "mousemove", e.util.throttle(function(r) {
+ var i = !1,
+ o = t.hoverData.capture;
+ if (!o) {
+ var s = t.findContainerClientCoords();
+ if (!(r.clientX > s[0] && r.clientX < s[0] + t.canvasWidth && r.clientY > s[1] && r.clientY < s[1] + t.canvasHeight)) return;
+ for (var l = t.data.container, u = r.target, c = u.parentNode, d = !1; c;) {
+ if (c === l) {
+ d = !0;
+ break
+ }
+ c = c.parentNode
+ }
+ if (!d) return
+ }
+ var h = t.data.cy,
+ p = h.zoom(),
+ f = t.projectIntoViewport(r.clientX, r.clientY),
+ v = t.data.select,
+ g = t.data.canvasNeedsRedraw,
+ y = null;
+ t.hoverData.draggingEles || (y = t.findNearestElement(f[0], f[1], !0, !1));
+ var m = t.hoverData.last,
+ x = t.hoverData.down,
+ b = [f[0] - v[2], f[1] - v[3]],
+ w = t.dragData.possibleDragElements,
+ _ = v[2] - v[0],
+ E = _ * _,
+ T = v[3] - v[1],
+ S = T * T,
+ C = E + S,
+ k = C * p * p;
+ t.hoverData.tapholdCancelled = !0;
+ var D = function() {
+ var e = t.hoverData.dragDelta = t.hoverData.dragDelta || [];
+ 0 === e.length ? (e.push(b[0]), e.push(b[1])) : (e[0] += b[0], e[1] += b[1])
+ };
+ if (i = !0, null != y ? y.trigger(new e.Event(r, {
+ type: "mousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })) : null == y && h.trigger(new e.Event(r, {
+ type: "mousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), 3 === t.hoverData.which) {
+ var N = new e.Event(r, {
+ type: "cxtdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ });
+ x ? x.trigger(N) : h.trigger(N), t.hoverData.cxtDragged = !0, t.hoverData.cxtOver && y === t.hoverData.cxtOver || (t.hoverData.cxtOver && t.hoverData.cxtOver.trigger(new e.Event(r, {
+ type: "cxtdragout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), t.hoverData.cxtOver = y, y && y.trigger(new e.Event(r, {
+ type: "cxtdragover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })))
+ } else if (t.hoverData.dragging) {
+ if (i = !0, h.panningEnabled() && h.userPanningEnabled()) {
+ var P;
+ if (t.hoverData.justStartedPan) {
+ var M = t.hoverData.mdownPos;
+ P = {
+ x: (f[0] - M[0]) * p,
+ y: (f[1] - M[1]) * p
+ }, t.hoverData.justStartedPan = !1
+ } else P = {
+ x: b[0] * p,
+ y: b[1] * p
+ };
+ h.panBy(P), t.hoverData.dragged = !0
+ }
+ f = t.projectIntoViewport(r.clientX, r.clientY)
+ } else if (1 == v[4] && (null == x || x.isEdge()) && (!h.boxSelectionEnabled() || +new Date - t.hoverData.downTime >= n.panOrBoxSelectDelay) && !t.hoverData.selecting && k >= t.desktopTapThreshold2 && h.panningEnabled() && h.userPanningEnabled()) t.hoverData.dragging = !0, t.hoverData.selecting = !1, t.hoverData.justStartedPan = !0, v[4] = 0;
+ else {
+ if (h.boxSelectionEnabled() && !t.hoverData.dragging && Math.pow(v[2] - v[0], 2) + Math.pow(v[3] - v[1], 2) > 7 && v[4] && (clearTimeout(t.bgActiveTimeout), t.data.bgActivePosistion = void 0, t.hoverData.selecting = !0, g[n.SELECT_BOX] = !0, t.redraw()), x && x.isEdge() && x.active() && x.unactivate(), y != m && (m && (m.trigger(new e.Event(r, {
+ type: "mouseout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), m.trigger(new e.Event(r, {
+ type: "tapdragout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ }))), y && (y.trigger(new e.Event(r, {
+ type: "mouseover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), y.trigger(new e.Event(r, {
+ type: "tapdragover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ }))), t.hoverData.last = y), x && x.isNode() && t.nodeIsDraggable(x))
+ if (k >= t.desktopTapThreshold2) {
+ var B = !t.dragData.didDrag;
+ B && (g[n.NODE] = !0), t.dragData.didDrag = !0;
+ for (var L = [], O = 0; O < w.length; O++) {
+ var A = w[O];
+ if (t.hoverData.draggingEles || a(A, {
+ inDragLayer: !0
+ }), A.isNode() && t.nodeIsDraggable(A) && A.grabbed()) {
+ var I = A._private.position;
+ if (L.push(A), e.is.number(b[0]) && e.is.number(b[1]) && (I.x += b[0], I.y += b[1], B)) {
+ var z = t.hoverData.dragDelta;
+ e.is.number(z[0]) && e.is.number(z[1]) && (I.x += z[0], I.y += z[1])
+ }
+ }
+ }
+ t.hoverData.draggingEles = !0;
+ var R = new e.Collection(h, L);
+ R.updateCompoundBounds(), R.trigger("position drag"), g[n.DRAG] = !0, t.redraw()
+ } else D();
+ i = !0
+ }
+ return v[2] = f[0], v[3] = f[1], i ? (r.stopPropagation && r.stopPropagation(), r.preventDefault && r.preventDefault(), !1) : void 0
+ }, 1e3 / 30, {
+ trailing: !0
+ }), !1), t.registerBinding(window, "mouseup", function(r) {
+ var i = t.hoverData.capture;
+ if (i) {
+ t.hoverData.capture = !1;
+ var a = t.data.cy,
+ s = t.projectIntoViewport(r.clientX, r.clientY),
+ l = t.data.select,
+ u = t.findNearestElement(s[0], s[1], !0, !1),
+ c = t.dragData.possibleDragElements,
+ d = t.hoverData.down,
+ h = r.shiftKey,
+ p = t.data.canvasNeedsRedraw;
+ if (t.data.bgActivePosistion && (p[n.SELECT_BOX] = !0, t.redraw()), t.hoverData.tapholdCancelled = !0, t.data.bgActivePosistion = void 0, clearTimeout(t.bgActiveTimeout), d && d.unactivate(), 3 === t.hoverData.which) {
+ var f = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ });
+ if (d ? d.trigger(f) : a.trigger(f), !t.hoverData.cxtDragged) {
+ var v = new e.Event(r, {
+ type: "cxttap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ });
+ d ? d.trigger(v) : a.trigger(v)
+ }
+ t.hoverData.cxtDragged = !1, t.hoverData.which = null
+ } else {
+ if (null != d || t.dragData.didDrag || t.hoverData.dragged || (a.$(function() {
+ return this.selected()
+ }).unselect(), c.length > 0 && (p[n.NODE] = !0), t.dragData.possibleDragElements = c = []), null != u ? u.trigger(new e.Event(r, {
+ type: "mouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })) : null == u && a.trigger(new e.Event(r, {
+ type: "mouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })), t.dragData.didDrag || t.hoverData.dragged || (null != u ? u.trigger(new e.Event(r, {
+ type: "click",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })) : null == u && a.trigger(new e.Event(r, {
+ type: "click",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ }))), u != d || t.dragData.didDrag || null != u && u._private.selectable && (t.hoverData.dragging || ("additive" === a.selectionType() || h ? u.selected() ? u.unselect() : u.select() : h || (a.$(":selected").unmerge(u).unselect(), u.select())), p[n.NODE] = !0), t.hoverData.selecting && a.boxSelectionEnabled() && Math.pow(l[2] - l[0], 2) + Math.pow(l[3] - l[1], 2) > 7 && l[4]) {
+ var g = [],
+ y = t.getAllInBox(l[0], l[1], l[2], l[3]);
+ p[n.SELECT_BOX] = !0, y.length > 0 && (p[n.NODE] = !0);
+ for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]);
+ var x = new e.Collection(a, g);
+ "additive" === a.selectionType() ? x.select() : (h || a.$(":selected").unmerge(x).unselect(), x.select()), t.redraw()
+ }
+ t.hoverData.dragging && (t.hoverData.dragging = !1, p[n.SELECT_BOX] = !0, p[n.NODE] = !0, t.redraw()), l[4] || (p[n.DRAG] = !0, p[n.NODE] = !0, o(c), d && d.trigger("free"))
+ }
+ l[4] = 0, t.hoverData.down = null, t.hoverData.cxtStarted = !1, t.hoverData.draggingEles = !1, t.hoverData.selecting = !1, t.dragData.didDrag = !1, t.hoverData.dragged = !1, t.hoverData.dragDelta = []
+ }
+ }, !1);
+ var d = function(e) {
+ if (!t.scrollingPage) {
+ var r = t.data.cy,
+ i = t.projectIntoViewport(e.clientX, e.clientY),
+ a = [i[0] * r.zoom() + r.pan().x, i[1] * r.zoom() + r.pan().y];
+ if (t.hoverData.draggingEles || t.hoverData.dragging || t.hoverData.cxtStarted || c()) return void e.preventDefault();
+ if (r.panningEnabled() && r.userPanningEnabled() && r.zoomingEnabled() && r.userZoomingEnabled()) {
+ e.preventDefault(), t.data.wheelZooming = !0, clearTimeout(t.data.wheelTimeout), t.data.wheelTimeout = setTimeout(function() {
+ t.data.wheelZooming = !1, t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw()
+ }, 150);
+ var o = e.deltaY / -250 || e.wheelDeltaY / 1e3 || e.wheelDelta / 1e3;
+ o *= t.wheelSensitivity;
+ var s = 1 === e.deltaMode;
+ s && (o *= 33), r.zoom({
+ level: r.zoom() * Math.pow(10, o),
+ renderedPosition: {
+ x: a[0],
+ y: a[1]
+ }
+ })
+ }
+ }
+ };
+ t.registerBinding(t.data.container, "wheel", d, !0), t.registerBinding(window, "scroll", function(e) {
+ t.scrollingPage = !0, clearTimeout(t.scrollingPageTimeout), t.scrollingPageTimeout = setTimeout(function() {
+ t.scrollingPage = !1
+ }, 250)
+ }, !0), t.registerBinding(t.data.container, "mouseout", function(n) {
+ var r = t.projectIntoViewport(n.clientX, n.clientY);
+ t.data.cy.trigger(new e.Event(n, {
+ type: "mouseout",
+ cyPosition: {
+ x: r[0],
+ y: r[1]
+ }
+ }))
+ }, !1), t.registerBinding(t.data.container, "mouseover", function(n) {
+ var r = t.projectIntoViewport(n.clientX, n.clientY);
+ t.data.cy.trigger(new e.Event(n, {
+ type: "mouseover",
+ cyPosition: {
+ x: r[0],
+ y: r[1]
+ }
+ }))
+ }, !1);
+ var h, p, f, v, g, y, m, x, b, w, _, E, T, S = function(e, t, n, r) {
+ return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t))
+ },
+ C = function(e, t, n, r) {
+ return (n - e) * (n - e) + (r - t) * (r - t)
+ };
+ t.registerBinding(t.data.container, "touchstart", function(r) {
+ clearTimeout(this.threeFingerSelectTimeout), r.target !== t.data.link && r.preventDefault(), t.touchData.capture = !0, t.data.bgActivePosistion = void 0;
+ var i = t.data.cy,
+ o = t.getCachedNodes(),
+ s = t.getCachedEdges(),
+ l = t.touchData.now,
+ u = t.touchData.earlier,
+ c = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var d = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = d[0], l[1] = d[1]
+ }
+ if (r.touches[1]) {
+ var d = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = d[0], l[3] = d[1]
+ }
+ if (r.touches[2]) {
+ var d = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = d[0], l[5] = d[1]
+ }
+ if (r.touches[1]) {
+ var k = function(e) {
+ for (var t = 0; t < e.length; t++) e[t]._private.grabbed = !1, e[t]._private.rscratch.inDragLayer = !1, e[t].active() && e[t].unactivate()
+ };
+ k(o), k(s);
+ var D = t.findContainerClientCoords();
+ b = D[0], w = D[1], _ = D[2], E = D[3], h = r.touches[0].clientX - b, p = r.touches[0].clientY - w, f = r.touches[1].clientX - b, v = r.touches[1].clientY - w, T = h >= 0 && _ >= h && f >= 0 && _ >= f && p >= 0 && E >= p && v >= 0 && E >= v;
+ var N = i.pan(),
+ P = i.zoom();
+ g = S(h, p, f, v), y = C(h, p, f, v), m = [(h + f) / 2, (p + v) / 2], x = [(m[0] - N.x) / P, (m[1] - N.y) / P];
+ var M = 200,
+ B = M * M;
+ if (B > y && !r.touches[2]) {
+ var L = t.findNearestElement(l[0], l[1], !0, !0),
+ O = t.findNearestElement(l[2], l[3], !0, !0);
+ return L && L.isNode() ? (L.activate().trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = L) : O && O.isNode() ? (O.activate().trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = O) : (i.trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = null), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !0, t.touchData.cxtDragged = !1, t.data.bgActivePosistion = void 0, void t.redraw()
+ }
+ }
+ if (r.touches[2]);
+ else if (r.touches[1]);
+ else if (r.touches[0]) {
+ var A = t.findNearestElement(l[0], l[1], !0, !0);
+ if (null != A) {
+ if (A.activate(), t.touchData.start = A, A.isNode() && t.nodeIsDraggable(A)) {
+ var I = t.dragData.touchDragEles = [];
+ if (c[n.NODE] = !0, c[n.DRAG] = !0, A.selected())
+ for (var z = i.$(function() {
+ return this.isNode() && this.selected()
+ }), R = 0; R < z.length; R++) {
+ var j = z[R];
+ t.nodeIsDraggable(j) && a(j, {
+ addToList: I
+ })
+ } else a(A, {
+ addToList: I
+ });
+ A.trigger(new e.Event(r, {
+ type: "grab",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))
+ }
+ A.trigger(new e.Event(r, {
+ type: "touchstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousdown",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))
+ }
+ null == A && (i.trigger(new e.Event(r, {
+ type: "touchstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.data.bgActivePosistion = {
+ x: d[0],
+ y: d[1]
+ }, c[n.SELECT_BOX] = !0, t.redraw());
+ for (var F = 0; F < l.length; F++) u[F] = l[F], t.touchData.startPosition[F] = l[F];
+ t.touchData.singleTouchMoved = !1, t.touchData.singleTouchStartTime = +new Date, clearTimeout(t.touchData.tapholdTimeout), t.touchData.tapholdTimeout = setTimeout(function() {
+ t.touchData.singleTouchMoved !== !1 || t.pinching || (t.touchData.start ? t.touchData.start.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })) : (t.data.cy.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), i.$(":selected").unselect()))
+ }, t.tapholdDuration)
+ }
+ }, !1), t.registerBinding(window, "touchmove", e.util.throttle(function(r) {
+ var i = t.data.select,
+ o = t.touchData.capture;
+ o && r.preventDefault();
+ var s = t.data.cy,
+ l = t.touchData.now,
+ u = t.touchData.earlier,
+ c = s.zoom(),
+ d = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ if (r.touches[1]) {
+ var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = m[0], l[3] = m[1]
+ }
+ if (r.touches[2]) {
+ var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = m[0], l[5] = m[1]
+ }
+ for (var _ = [], E = 0; E < l.length; E++) _[E] = l[E] - u[E];
+ var k = t.touchData.startPosition,
+ D = l[0] - k[0],
+ N = D * D,
+ P = l[1] - k[1],
+ M = P * P,
+ B = N + M,
+ L = B * c * c;
+ if (o && t.touchData.cxt) {
+ var O = r.touches[0].clientX - b,
+ A = r.touches[0].clientY - w,
+ I = r.touches[1].clientX - b,
+ z = r.touches[1].clientY - w,
+ R = C(O, A, I, z),
+ j = R / y,
+ F = 150,
+ q = F * F,
+ V = 1.5,
+ X = V * V;
+ if (j >= X || R >= q) {
+ t.touchData.cxt = !1, t.touchData.start && (t.touchData.start.unactivate(), t.touchData.start = null), t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0;
+ var H = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ });
+ t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H)
+ }
+ }
+ if (o && t.touchData.cxt) {
+ var H = new e.Event(r, {
+ type: "cxtdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ });
+ t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0, t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxtDragged = !0;
+ var Y = t.findNearestElement(l[0], l[1], !0, !0);
+ t.touchData.cxtOver && Y === t.touchData.cxtOver || (t.touchData.cxtOver && t.touchData.cxtOver.trigger(new e.Event(r, {
+ type: "cxtdragout",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.cxtOver = Y, Y && Y.trigger(new e.Event(r, {
+ type: "cxtdragover",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })))
+ } else if (o && r.touches[2] && s.boxSelectionEnabled()) t.data.bgActivePosistion = void 0, clearTimeout(this.threeFingerSelectTimeout), this.lastThreeTouch = +new Date, t.touchData.selecting = !0, d[n.SELECT_BOX] = !0, i && 0 !== i.length && void 0 !== i[0] ? (i[2] = (l[0] + l[2] + l[4]) / 3, i[3] = (l[1] + l[3] + l[5]) / 3) : (i[0] = (l[0] + l[2] + l[4]) / 3, i[1] = (l[1] + l[3] + l[5]) / 3, i[2] = (l[0] + l[2] + l[4]) / 3 + 1, i[3] = (l[1] + l[3] + l[5]) / 3 + 1), i[4] = 1, t.touchData.selecting = !0, t.redraw();
+ else if (o && r.touches[1] && s.zoomingEnabled() && s.panningEnabled() && s.userZoomingEnabled() && s.userPanningEnabled()) {
+ t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0;
+ var $ = t.dragData.touchDragEles;
+ if ($) {
+ d[n.DRAG] = !0;
+ for (var W = 0; W < $.length; W++) $[W]._private.grabbed = !1, $[W]._private.rscratch.inDragLayer = !1
+ }
+ var O = r.touches[0].clientX - b,
+ A = r.touches[0].clientY - w,
+ I = r.touches[1].clientX - b,
+ z = r.touches[1].clientY - w,
+ U = S(O, A, I, z),
+ Z = U / g;
+ if (1 != Z && T) {
+ var G = O - h,
+ K = A - p,
+ J = I - f,
+ Q = z - v,
+ ee = (G + J) / 2,
+ te = (K + Q) / 2,
+ ne = s.zoom(),
+ re = ne * Z,
+ ie = s.pan(),
+ ae = x[0] * ne + ie.x,
+ oe = x[1] * ne + ie.y,
+ se = {
+ x: -re / ne * (ae - ie.x - ee) + ae,
+ y: -re / ne * (oe - ie.y - te) + oe
+ };
+ if (t.touchData.start) {
+ var $ = t.dragData.touchDragEles;
+ if ($)
+ for (var W = 0; W < $.length; W++) {
+ var le = $[W]._private;
+ le.grabbed = !1, le.rscratch.inDragLayer = !1
+ }
+ var ue = t.touchData.start._private;
+ ue.active = !1, ue.grabbed = !1, ue.rscratch.inDragLayer = !1, d[n.DRAG] = !0, t.touchData.start.trigger("free").trigger("unactivate")
+ }
+ s.viewport({
+ zoom: re,
+ pan: se,
+ cancelOnFailedZoom: !0
+ }), g = U, h = O, p = A, f = I, v = z, t.pinching = !0
+ }
+ if (r.touches[0]) {
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ if (r.touches[1]) {
+ var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = m[0], l[3] = m[1]
+ }
+ if (r.touches[2]) {
+ var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = m[0], l[5] = m[1]
+ }
+ } else if (r.touches[0]) {
+ var ce = t.touchData.start,
+ de = t.touchData.last,
+ Y = Y || t.findNearestElement(l[0], l[1], !0, !0);
+ if (null != ce && "nodes" == ce._private.group && t.nodeIsDraggable(ce))
+ if (L >= t.touchTapThreshold2) {
+ for (var $ = t.dragData.touchDragEles, he = 0; he < $.length; he++) {
+ var pe = $[he];
+ if (t.nodeIsDraggable(pe) && pe.isNode() && pe.grabbed()) {
+ t.dragData.didDrag = !0;
+ var fe = pe._private.position,
+ ve = !t.hoverData.draggingEles;
+ if (e.is.number(_[0]) && e.is.number(_[1]) && (fe.x += _[0], fe.y += _[1]), ve) {
+ a(pe, {
+ inDragLayer: !0
+ }), d[n.NODE] = !0;
+ var ge = t.touchData.dragDelta;
+ e.is.number(ge[0]) && e.is.number(ge[1]) && (fe.x += ge[0], fe.y += ge[1])
+ }
+ }
+ }
+ var ye = new e.Collection(s, pe);
+ ye.updateCompoundBounds(), ye.trigger("position drag"), t.hoverData.draggingEles = !0, d[n.DRAG] = !0, t.touchData.startPosition[0] == u[0] && t.touchData.startPosition[1] == u[1] && (d[n.NODE] = !0), t.redraw()
+ } else {
+ var ge = t.touchData.dragDelta = t.touchData.dragDelta || [];
+ 0 === ge.length ? (ge.push(_[0]), ge.push(_[1])) : (ge[0] += _[0], ge[1] += _[1])
+ }
+ null != ce && (ce.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), ce.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), ce.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), null == ce && (null != Y && (Y.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), null == Y && (s.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), s.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), s.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })))), Y != de && (de && de.trigger(new e.Event(r, {
+ type: "tapdragout",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y && Y.trigger(new e.Event(r, {
+ type: "tapdragover",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), t.touchData.last = Y;
+ for (var W = 0; W < l.length; W++) l[W] && t.touchData.startPosition[W] && Math.abs(l[W] - t.touchData.startPosition[W]) > 4 && (t.touchData.singleTouchMoved = !0);
+ if (o && (null == ce || ce.isEdge()) && s.panningEnabled() && s.userPanningEnabled()) {
+ t.swipePanning ? s.panBy({
+ x: _[0] * c,
+ y: _[1] * c
+ }) : L >= t.touchTapThreshold2 && (t.swipePanning = !0, s.panBy({
+ x: D * c,
+ y: P * c
+ })), ce && (ce.unactivate(), t.data.bgActivePosistion || (t.data.bgActivePosistion = {
+ x: l[0],
+ y: l[1]
+ }), d[n.SELECT_BOX] = !0, t.touchData.start = null);
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ }
+ for (var E = 0; E < l.length; E++) u[E] = l[E]
+ }, 1e3 / 30, {
+ trailing: !0
+ }), !1), t.registerBinding(window, "touchcancel", function(e) {
+ var n = t.touchData.start;
+ t.touchData.capture = !1, n && n.unactivate()
+ }), t.registerBinding(window, "touchend", function(r) {
+ var i = t.touchData.start,
+ a = t.touchData.capture;
+ if (a) {
+ t.touchData.capture = !1, r.preventDefault();
+ var s = t.data.select;
+ t.swipePanning = !1, t.hoverData.draggingEles = !1;
+ var l = t.data.cy,
+ u = l.zoom(),
+ c = t.touchData.now,
+ d = t.touchData.earlier,
+ h = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var p = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ c[0] = p[0], c[1] = p[1]
+ }
+ if (r.touches[1]) {
+ var p = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ c[2] = p[0], c[3] = p[1]
+ }
+ if (r.touches[2]) {
+ var p = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ c[4] = p[0], c[5] = p[1]
+ }
+ i && i.unactivate();
+ var f;
+ if (t.touchData.cxt) {
+ if (f = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }), i ? i.trigger(f) : l.trigger(f), !t.touchData.cxtDragged) {
+ var v = new e.Event(r, {
+ type: "cxttap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ });
+ i ? i.trigger(v) : l.trigger(v)
+ }
+ return t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !1, t.touchData.start = null, void t.redraw()
+ }
+ if (!r.touches[2] && l.boxSelectionEnabled() && t.touchData.selecting) {
+ t.touchData.selecting = !1, clearTimeout(this.threeFingerSelectTimeout);
+ var g = [],
+ y = t.getAllInBox(s[0], s[1], s[2], s[3]);
+ s[0] = void 0, s[1] = void 0, s[2] = void 0, s[3] = void 0, s[4] = 0, h[n.SELECT_BOX] = !0;
+ for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]);
+ var x = new e.Collection(l, g);
+ "single" === l.selectionType() && l.$(":selected").unmerge(x).unselect(), x.select(), x.length > 0 ? h[n.NODE] = !0 : t.redraw()
+ }
+ var b = !1;
+ if (null != i && (i._private.active = !1, b = !0, i.unactivate()), r.touches[2]) t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0;
+ else if (r.touches[1]);
+ else if (r.touches[0]);
+ else if (!r.touches[0]) {
+ t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0;
+ var w = t.dragData.touchDragEles;
+ if (null != i) {
+ var _ = i._private.grabbed;
+ o(w), h[n.DRAG] = !0, h[n.NODE] = !0, _ && i.trigger("free"), i.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })), i.unactivate(), t.touchData.start = null
+ } else {
+ var E = t.findNearestElement(c[0], c[1], !0, !0);
+ null != E && E.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })), null == E && l.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }))
+ }
+ var T = t.touchData.startPosition[0] - c[0],
+ S = T * T,
+ C = t.touchData.startPosition[1] - c[1],
+ k = C * C,
+ D = S + k,
+ N = D * u * u;
+ null != i && !t.dragData.didDrag && i._private.selectable && N < t.touchTapThreshold2 && !t.pinching && ("single" === l.selectionType() ? (l.$(":selected").unmerge(i).unselect(), i.select()) : i.selected() ? i.unselect() : i.select(), b = !0, h[n.NODE] = !0), t.touchData.singleTouchMoved === !1 && (i ? i.trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })) : l.trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }))), t.touchData.singleTouchMoved = !0
+ }
+ for (var P = 0; P < c.length; P++) d[P] = c[P];
+ t.dragData.didDrag = !1, 0 === r.touches.length && (t.touchData.dragDelta = []), b && i && i.updateStyle(!1), r.touches.length < 2 && (t.pinching = !1, h[n.NODE] = !0, t.redraw())
+ }
+ }, !1)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t, n) {
+ a[t] = {
+ points: n,
+ draw: function(e, n, i, o, s) {
+ r.drawPolygon(e, n, i, o, s, a[t].points)
+ },
+ drawPath: function(e, n, i, o, s) {
+ r.drawPolygonPath(e, n, i, o, s, a[t].points)
+ },
+ intersectLine: function(n, r, i, o, s, l, u) {
+ return e.math.polygonIntersectLine(s, l, a[t].points, n, r, i / 2, o / 2, u)
+ },
+ intersectBox: function(n, r, i, o, s, l, u, c, d) {
+ var h = a[t].points;
+ return e.math.boxIntersectPolygon(n, r, i, o, h, s, l, u, c, [0, -1], d)
+ },
+ checkPoint: function(n, r, i, o, s, l, u) {
+ return e.math.pointInsidePolygon(n, r, a[t].points, l, u, o, s, [0, -1], i)
+ }
+ }
+ }
+ for (var n = e("renderer", "canvas"), r = n.prototype, i = n.usePaths(), a = n.nodeShapes = {}, o = Math.sin(0), s = Math.cos(0), l = {}, u = {}, c = .1, d = 0 * Math.PI; d < 2 * Math.PI; d += c) l[d] = Math.sin(d), u[d] = Math.cos(d);
+ a.ellipse = {
+ draw: function(e, t, n, r, i) {
+ a.ellipse.drawPath(e, t, n, r, i), e.fill()
+ },
+ drawPath: function(e, t, n, r, a) {
+ if (i) {
+ e.beginPath && e.beginPath();
+ for (var d, h, p = r / 2, f = a / 2, v = 0 * Math.PI; v < 2 * Math.PI; v += c) d = t - p * l[v] * o + p * u[v] * s, h = n + f * u[v] * o + f * l[v] * s, 0 === v ? e.moveTo(d, h) : e.lineTo(d, h);
+ e.closePath()
+ } else e.beginPath && e.beginPath(), e.translate(t, n), e.scale(r / 2, a / 2), e.arc(0, 0, 1, 0, 2 * Math.PI * .999, !1), e.closePath(), e.scale(2 / r, 2 / a), e.translate(-t, -n)
+ },
+ intersectLine: function(t, n, r, i, a, o, s) {
+ var l = e.math.intersectLineEllipse(a, o, t, n, r / 2 + s, i / 2 + s);
+ return l
+ },
+ intersectBox: function(t, n, r, i, a, o, s, l, u) {
+ return e.math.boxIntersectEllipse(t, n, r, i, u, a, o, s, l)
+ },
+ checkPoint: function(e, t, n, r, i, a, o) {
+ return e -= a, t -= o, e /= r / 2 + n, t /= i / 2 + n, Math.pow(e, 2) + Math.pow(t, 2) <= 1
+ }
+ }, t("triangle", e.math.generateUnitNgonPointsFitToSquare(3, 0)), t("square", e.math.generateUnitNgonPointsFitToSquare(4, 0)), a.rectangle = a.square, a.roundrectangle = {
+ points: e.math.generateUnitNgonPointsFitToSquare(4, 0),
+ draw: function(e, t, n, i, a) {
+ r.drawRoundRectangle(e, t, n, i, a, 10)
+ },
+ drawPath: function(e, t, n, i, a) {
+ r.drawRoundRectanglePath(e, t, n, i, a, 10)
+ },
+ intersectLine: function(t, n, r, i, a, o, s) {
+ return e.math.roundRectangleIntersectLine(a, o, t, n, r, i, s)
+ },
+ intersectBox: function(t, n, r, i, a, o, s, l, u) {
+ return e.math.roundRectangleIntersectBox(t, n, r, i, a, o, s, l, u)
+ },
+ checkPoint: function(t, n, r, i, o, s, l) {
+ var u = e.math.getRoundRectangleRadius(i, o);
+ if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i, o - 2 * u, [0, -1], r)) return !0;
+ if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i - 2 * u, o, [0, -1], r)) return !0;
+ var c = function(e, t, n, r, i, a, o) {
+ return e -= n, t -= r, e /= i / 2 + o, t /= a / 2 + o, Math.pow(e, 2) + Math.pow(t, 2) <= 1
+ };
+ return c(t, n, s - i / 2 + u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : c(t, n, s - i / 2 + u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : !1
+ }
+ }, t("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), t("pentagon", e.math.generateUnitNgonPointsFitToSquare(5, 0)), t("hexagon", e.math.generateUnitNgonPointsFitToSquare(6, 0)), t("heptagon", e.math.generateUnitNgonPointsFitToSquare(7, 0)), t("octagon", e.math.generateUnitNgonPointsFitToSquare(8, 0));
+ var h = new Array(20),
+ p = e.math.generateUnitNgonPoints(5, 0),
+ f = e.math.generateUnitNgonPoints(5, Math.PI / 5),
+ v = .5 * (3 - Math.sqrt(5));
+ v *= 1.57;
+ for (var d = 0; d < f.length / 2; d++) f[2 * d] *= v, f[2 * d + 1] *= v;
+ for (var d = 0; 5 > d; d++) h[4 * d] = p[2 * d], h[4 * d + 1] = p[2 * d + 1], h[4 * d + 2] = f[2 * d], h[4 * d + 3] = f[2 * d + 1];
+ h = e.math.fitPolygonToSquare(h), t("star", h), t("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), t("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1])
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this._private = {}, this._private.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ animate: !0,
+ maxSimulationTime: 4e3,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ ungrabifyWhileSimulating: !1,
+ ready: void 0,
+ stop: void 0,
+ repulsion: void 0,
+ stiffness: void 0,
+ friction: void 0,
+ gravity: !0,
+ fps: void 0,
+ precision: void 0,
+ nodeMass: void 0,
+ edgeLength: void 0,
+ stepSize: .1,
+ stableEnergy: function(e) {
+ var t = e;
+ return t.max <= .5 || t.mean <= .3
+ },
+ infinite: !1
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this._private.options;
+ return e.util.require("arbor", function(r) {
+ function i(e, t) {
+ return null == t ? void 0 : "function" == typeof t ? t.apply(e, [e._private.data, {
+ nodes: u.length,
+ edges: c.length,
+ element: e
+ }]) : t
+ }
+
+ function a(e) {
+ if (!e.isFullAutoParent()) {
+ var t = e._private.data.id,
+ r = i(e, n.nodeMass),
+ a = e._private.locked,
+ o = e.position(),
+ s = p.fromScreen({
+ x: o.x,
+ y: o.y
+ });
+ e.scratch().arbor = p.addNode(t, {
+ element: e,
+ mass: r,
+ fixed: a,
+ x: a && s ? s.x : void 0,
+ y: a && s ? s.y : void 0
+ })
+ }
+ }
+
+ function o(e) {
+ var t = e.source().id(),
+ r = e.target().id(),
+ a = i(e, n.edgeLength);
+ e.scratch().arbor = p.addEdge(t, r, {
+ length: a
+ })
+ }
+ var s = n.cy,
+ l = n.eles,
+ u = l.nodes().not(":parent"),
+ c = l.edges(),
+ d = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: s.width(),
+ h: s.height()
+ }),
+ h = !1;
+ if (t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), void 0 !== n.liveUpdate && (n.animate = n.liveUpdate), l.nodes().size() <= 1) return n.fit && s.reset(), l.nodes().position({
+ x: Math.round((d.x1 + d.x2) / 2),
+ y: Math.round((d.y1 + d.y2) / 2)
+ }), t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }), t.one("layoutstop", n.stop), void t.trigger({
+ type: "layoutstop",
+ layout: t
+ });
+ var p = t._private.system = r.ParticleSystem();
+ p.parameters({
+ repulsion: n.repulsion,
+ stiffness: n.stiffness,
+ friction: n.friction,
+ gravity: n.gravity,
+ fps: n.fps,
+ dt: n.dt,
+ precision: n.precision
+ }), n.animate && n.fit && s.fit(d, n.padding);
+ var f, v = 250,
+ g = !1,
+ y = +new Date,
+ m = {
+ init: function(e) {},
+ redraw: function() {
+ var e = p.energy();
+ if (!n.infinite && null != n.stableEnergy && null != e && e.n > 0 && n.stableEnergy(e)) return void t.stop();
+ n.infinite || v == 1 / 0 || (clearTimeout(f), f = setTimeout(S, v));
+ var r = s.collection();
+ p.eachNode(function(e, t) {
+ var n = e.data,
+ i = n.element;
+ null != i && (i.locked() || i.grabbed() || (i.silentPosition({
+ x: d.x1 + t.x,
+ y: d.y1 + t.y
+ }), r.merge(i)))
+ }), n.animate && r.length > 0 && (h = !0, r.rtrigger("position"), n.fit && s.fit(n.padding), y = +new Date, h = !1), g || (g = !0, t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }))
+ }
+ };
+ p.renderer = m, p.screenSize(d.w, d.h), p.screenPadding(n.padding, n.padding, n.padding, n.padding), p.screenStep(n.stepSize);
+ var x;
+ u.on("grab free position", x = function(e) {
+ if (!h) {
+ var t = this.position(),
+ i = p.fromScreen(t);
+ if (i) {
+ var a = r.Point(i.x, i.y),
+ o = n.padding;
+ switch (d.x1 + o <= t.x && t.x <= d.x2 - o && d.y1 + o <= t.y && t.y <= d.y2 - o && (this.scratch().arbor.p = a), e.type) {
+ case "grab":
+ this.scratch().arbor.fixed = !0;
+ break;
+ case "free":
+ this.scratch().arbor.fixed = !1
+ }
+ }
+ }
+ });
+ var b;
+ u.on("lock unlock", b = function(e) {
+ node.scratch().arbor.fixed = node.locked()
+ });
+ var w;
+ l.on("remove", w = function(e) {});
+ var _;
+ s.on("add", "*", _ = function() {});
+ var E;
+ s.on("resize", E = function() {
+ if (null == n.boundingBox && null != t._private.system) {
+ var e = s.width(),
+ r = s.height();
+ p.screenSize(e, r)
+ }
+ }), u.each(function(e, t) {
+ a(t)
+ }), c.each(function(e, t) {
+ o(t)
+ });
+ var T = u.filter(":grabbable");
+ n.ungrabifyWhileSimulating && T.ungrabify();
+ var S = t._private.doneHandler = function() {
+ t._private.doneHandler = null, n.animate || (n.fit && s.reset(), u.rtrigger("position")), u.off("grab free position", x), u.off("lock unlock", b), l.off("remove", w), s.off("add", "*", _), s.off("resize", E), n.ungrabifyWhileSimulating && T.grabify(), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ };
+ p.start(), !n.infinite && null != n.maxSimulationTime && n.maxSimulationTime > 0 && n.maxSimulationTime !== 1 / 0 && setTimeout(function() {
+ t.stop()
+ }, n.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return null != this._private.system && this._private.system.stop(), this._private.doneHandler && this._private.doneHandler(), this
+ }, e("layout", "arbor", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ directed: !1,
+ padding: 30,
+ circle: !1,
+ spacingFactor: 1.75,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ roots: void 0,
+ maximalAdjustments: 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t, n = this.options,
+ r = n,
+ i = n.cy,
+ a = r.eles,
+ o = a.nodes().not(":parent"),
+ s = a,
+ l = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ });
+ if (e.is.elementOrCollection(r.roots)) t = r.roots;
+ else if (e.is.array(r.roots)) {
+ for (var u = [], c = 0; c < r.roots.length; c++) {
+ var d = r.roots[c],
+ h = i.getElementById(d);
+ u.push(h)
+ }
+ t = new e.Collection(i, u)
+ } else if (e.is.string(r.roots)) t = i.$(r.roots);
+ else if (r.directed) t = o.roots();
+ else {
+ for (var p = [], f = o; f.length > 0;) {
+ var v = i.collection();
+ a.bfs({
+ roots: f[0],
+ visit: function(e, t, n, r, i) {
+ v = v.add(n)
+ },
+ directed: !1
+ }), f = f.not(v), p.push(v)
+ }
+ t = i.collection();
+ for (var c = 0; c < p.length; c++) {
+ var g = p[c],
+ y = g.maxDegree(!1),
+ m = g.filter(function() {
+ return this.degree(!1) === y
+ });
+ t = t.add(m)
+ }
+ }
+ var x = [],
+ b = {},
+ w = {},
+ _ = {},
+ E = {},
+ T = {};
+ s.bfs({
+ roots: t,
+ directed: r.directed,
+ visit: function(e, t, n, r, i) {
+ var a = this[0],
+ o = a.id();
+ if (x[t] || (x[t] = []), x[t].push(a), b[o] = !0, w[o] = t, _[o] = i, E[o] = r, i) {
+ var s = i.id(),
+ l = T[s] = T[s] || [];
+ l.push(n)
+ }
+ }
+ });
+ for (var S = [], c = 0; c < o.length; c++) {
+ var h = o[c];
+ b[h.id()] || S.push(h)
+ }
+ for (var C = 3 * S.length, k = 0; 0 !== S.length && C > k;) {
+ for (var D = S.shift(), N = D.neighborhood().nodes(), P = !1, c = 0; c < N.length; c++) {
+ var M = w[N[c].id()];
+ if (void 0 !== M) {
+ x[M].push(D), P = !0;
+ break
+ }
+ }
+ P || S.push(D), k++
+ }
+ for (; 0 !== S.length;) {
+ var D = S.shift(),
+ P = !1;
+ P || (0 === x.length && x.push([]), x[0].push(D))
+ }
+ var B = function() {
+ for (var e = 0; e < x.length; e++)
+ for (var t = x[e], n = 0; n < t.length; n++) {
+ var r = t[n];
+ r._private.scratch.breadthfirst = {
+ depth: e,
+ index: n
+ }
+ }
+ };
+ B();
+ for (var L = function(e) {
+ for (var t, n = e.connectedEdges(function() {
+ return this.data("target") === e.id()
+ }), r = e._private.scratch.breadthfirst, i = 0, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o.source()[0],
+ l = s._private.scratch.breadthfirst;
+ r.depth <= l.depth && i < l.depth && (i = l.depth, t = s)
+ }
+ return t
+ }, O = 0; O < r.maximalAdjustments; O++) {
+ for (var A = x.length, I = [], c = 0; A > c; c++)
+ for (var M = x[c], z = M.length, R = 0; z > R; R++) {
+ var h = M[R],
+ j = h._private.scratch.breadthfirst,
+ F = L(h);
+ F && (j.intEle = F, I.push(h))
+ }
+ for (var c = 0; c < I.length; c++) {
+ var h = I[c],
+ j = h._private.scratch.breadthfirst,
+ F = j.intEle,
+ q = F._private.scratch.breadthfirst;
+ x[j.depth].splice(j.index, 1);
+ for (var V = q.depth + 1; V > x.length - 1;) x.push([]);
+ x[V].push(h), j.depth = V, j.index = x[V].length - 1
+ }
+ B()
+ }
+ var X = 0;
+ if (r.avoidOverlap) {
+ for (var c = 0; c < o.length; c++) {
+ var H = o[c].outerWidth(),
+ Y = o[c].outerHeight();
+ X = Math.max(X, H, Y)
+ }
+ X *= r.spacingFactor
+ }
+ for (var $ = {}, W = function(e) {
+ if ($[e.id()]) return $[e.id()];
+ for (var t = e._private.scratch.breadthfirst.depth, n = e.neighborhood().nodes().not(":parent"), r = 0, i = 0, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o._private.scratch.breadthfirst,
+ l = s.index,
+ u = s.depth,
+ c = x[u].length;
+ (t > u || 0 === t) && (r += l / c, i++)
+ }
+ return i = Math.max(1, i), r /= i, 0 === i && (r = void 0), $[e.id()] = r, r
+ }, U = function(e, t) {
+ var n = W(e),
+ r = W(t);
+ return n - r
+ }, Z = 0; 3 > Z; Z++) {
+ for (var c = 0; c < x.length; c++) x[c] = x[c].sort(U);
+ B()
+ }
+ for (var G = 0, c = 0; c < x.length; c++) G = Math.max(x[c].length, G);
+ for (var K = {
+ x: l.x1 + l.w / 2,
+ y: l.x1 + l.h / 2
+ }, J = function(e, t) {
+ var n = e._private.scratch.breadthfirst,
+ i = n.depth,
+ a = n.index,
+ o = x[i].length,
+ s = Math.max(l.w / (o + 1), X),
+ u = Math.max(l.h / (x.length + 1), X),
+ c = Math.min(l.w / 2 / x.length, l.h / 2 / x.length);
+ if (c = Math.max(c, X), r.circle) {
+ if (r.circle) {
+ var d = c * i + c - (x.length > 0 && x[0].length <= 3 ? c / 2 : 0),
+ h = 2 * Math.PI / x[i].length * a;
+ return 0 === i && 1 === x[0].length && (d = 1), {
+ x: K.x + d * Math.cos(h),
+ y: K.y + d * Math.sin(h)
+ }
+ }
+ return {
+ x: K.x + (a + 1 - (o + 1) / 2) * s,
+ y: (i + 1) * u
+ }
+ }
+ var p = {
+ x: K.x + (a + 1 - (o + 1) / 2) * s,
+ y: (i + 1) * u
+ };
+ return t ? p : p
+ }, Q = {}, c = x.length - 1; c >= 0; c--)
+ for (var M = x[c], R = 0; R < M.length; R++) {
+ var D = M[R];
+ Q[D.id()] = J(D, c === x.length - 1)
+ }
+ return o.layoutPositions(this, r, function() {
+ return Q[this.id()]
+ }), this
+ }, e("layout", "breadthfirst", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ radius: void 0,
+ startAngle: 1.5 * Math.PI,
+ counterclockwise: !1,
+ sort: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t,
+ r = t.cy,
+ i = n.eles,
+ a = i.nodes().not(":parent");
+ n.sort && (a = a.sort(n.sort));
+ for (var o, s = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ }), l = {
+ x: s.x1 + s.w / 2,
+ y: s.y1 + s.h / 2
+ }, u = n.startAngle, c = 2 * Math.PI / a.length, d = 0, h = 0; h < a.length; h++) {
+ var p = a[h].outerWidth(),
+ f = a[h].outerHeight();
+ d = Math.max(d, p, f)
+ }
+ if (o = e.is.number(n.radius) ? n.radius : a.length <= 1 ? 0 : Math.min(s.h, s.w) / 2 - d, a.length > 1 && n.avoidOverlap) {
+ d *= 1.75;
+ var c = 2 * Math.PI / a.length,
+ v = Math.cos(c) - Math.cos(0),
+ g = Math.sin(c) - Math.sin(0),
+ y = Math.sqrt(d * d / (v * v + g * g));
+ o = Math.max(y, o)
+ }
+ var m = function(e, t) {
+ var r = o * Math.cos(u),
+ i = o * Math.sin(u),
+ a = {
+ x: l.x + r,
+ y: l.y + i
+ };
+ return u = n.counterclockwise ? u - c : u + c, a
+ };
+ return a.layoutPositions(this, n, m), this
+ }, e("layout", "circle", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ animate: !0,
+ refresh: 1,
+ maxSimulationTime: 4e3,
+ ungrabifyWhileSimulating: !1,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ ready: function() {},
+ stop: function() {},
+ randomize: !1,
+ avoidOverlap: !0,
+ handleDisconnected: !0,
+ nodeSpacing: function(e) {
+ return 10
+ },
+ flow: void 0,
+ alignment: void 0,
+ edgeLength: void 0,
+ edgeSymDiffLength: void 0,
+ edgeJaccardLength: void 0,
+ unconstrIter: void 0,
+ userConstIter: void 0,
+ allConstIter: void 0,
+ infinite: !1
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this.options;
+ return t.manuallyStopped = !1, e.util.require("cola", function(r) {
+ var i = n.cy,
+ a = n.eles,
+ o = a.nodes(),
+ s = a.edges(),
+ l = !1,
+ u = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ }),
+ c = function(t, n) {
+ if (e.is.fn(t)) {
+ var r = t;
+ return r.apply(n, [n])
+ }
+ return t
+ },
+ d = function() {
+ for (var t = {
+ min: 1 / 0,
+ max: -(1 / 0)
+ }, r = {
+ min: 1 / 0,
+ max: -(1 / 0)
+ }, a = 0; a < o.length; a++) {
+ var s = o[a],
+ d = s._private.scratch.cola;
+ if (t.min = Math.min(t.min, d.x || 0), t.max = Math.max(t.max, d.x || 0), r.min = Math.min(r.min, d.y || 0), r.max = Math.max(r.max, d.y || 0), !d.updatedDims) {
+ var h = s.boundingBox(),
+ f = c(n.nodeSpacing, s);
+ d.width = h.w + 2 * f, d.height = h.h + 2 * f
+ }
+ }
+ o.positions(function(n, i) {
+ var a, o = i._private.scratch.cola;
+ return i.grabbed() || i.isParent() || (a = {
+ x: u.x1 + o.x - t.min,
+ y: u.y1 + o.y - r.min
+ }, e.is.number(a.x) && e.is.number(a.y) || (a = void 0)), a
+ }), o.updateCompoundBounds(), l || (p(), l = !0), n.fit && i.fit(n.padding)
+ },
+ h = function() {
+ n.ungrabifyWhileSimulating && y.grabify(), o.off("grab free position", m), o.off("lock unlock", x), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ },
+ p = function() {
+ t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })
+ },
+ f = n.refresh,
+ v = 1;
+ n.refresh < 0 ? (v = Math.abs(n.refresh), f = 1) : f = Math.max(1, f);
+ var g = t.adaptor = r.adaptor({
+ trigger: function(e) {
+ var t = r.EventType ? r.EventType.tick : null,
+ i = r.EventType ? r.EventType.end : null;
+ switch (e.type) {
+ case "tick":
+ case t:
+ n.animate && d();
+ break;
+ case "end":
+ case i:
+ d(), n.infinite || h()
+ }
+ },
+ kick: function() {
+ var r = function() {
+ if (t.manuallyStopped) return h(), !0;
+ var e = g.tick();
+ return e && n.infinite && g.resume(), e
+ },
+ i = function() {
+ for (var e, t = 0; f > t && !e; t++) e = e || r();
+ return e
+ };
+ if (n.animate) {
+ var a = function() {
+ i() || e.util.requestAnimationFrame(a)
+ };
+ e.util.requestAnimationFrame(a)
+ } else
+ for (; !r(););
+ },
+ on: function(e, t) {},
+ drag: function() {}
+ });
+ t.adaptor = g;
+ var y = o.filter(":grabbable");
+ n.ungrabifyWhileSimulating && y.ungrabify();
+ var m;
+ o.on("grab free position", m = function(t) {
+ var n = this,
+ r = n._private.scratch.cola,
+ i = n._private.position;
+ switch (n.grabbed() ? (r.x = i.x - u.x1, r.y = i.y - u.y1, g.dragstart(r)) : e.is.number(r.x) && e.is.number(r.y) && (i.x = r.x + u.x1, i.y = r.y + u.y1), t.type) {
+ case "grab":
+ g.dragstart(r), g.resume();
+ break;
+ case "free":
+ g.dragend(r)
+ }
+ });
+ var x;
+ o.on("lock unlock", x = function(e) {
+ var t = this,
+ n = t._private.scratch.cola;
+ t.locked() ? g.dragstart(n) : g.dragend(n)
+ });
+ var b = o.stdFilter(function(e) {
+ return !e.isParent()
+ });
+ if (g.nodes(b.map(function(e, t) {
+ var r = c(n.nodeSpacing, e),
+ i = e.position(),
+ a = e.boundingBox(),
+ o = e._private.scratch.cola = {
+ x: n.randomize || void 0 === i.x ? Math.round(Math.random() * u.w) : i.x,
+ y: n.randomize || void 0 === i.y ? Math.round(Math.random() * u.h) : i.y,
+ width: a.w + 2 * r,
+ height: a.h + 2 * r,
+ index: t
+ };
+ return o
+ })), n.alignment) {
+ var w = [],
+ _ = [];
+ b.forEach(function(e) {
+ var t = c(n.alignment, e),
+ r = e._private.scratch.cola,
+ i = r.index;
+ t && (null != t.x && w.push({
+ node: i,
+ offset: t.x
+ }), null != t.y && _.push({
+ node: i,
+ offset: t.y
+ }))
+ });
+ var E = [];
+ w.length > 0 && E.push({
+ type: "alignment",
+ axis: "x",
+ offsets: w
+ }), _.length > 0 && E.push({
+ type: "alignment",
+ axis: "y",
+ offsets: _
+ }), g.constraints(E)
+ }
+ g.groups(o.stdFilter(function(e) {
+ return e.isParent()
+ }).map(function(e, t) {
+ var r = e._private.style,
+ i = c(n.nodeSpacing, e),
+ a = r["padding-left"].pxValue + i,
+ o = r["padding-right"].pxValue + i,
+ s = r["padding-top"].pxValue + i,
+ l = r["padding-bottom"].pxValue + i;
+ return e._private.scratch.cola = {
+ index: t,
+ padding: Math.max(a, o, s, l),
+ leaves: e.descendants().stdFilter(function(e) {
+ return !e.isParent()
+ }).map(function(e) {
+ return e[0]._private.scratch.cola.index
+ })
+ }, e
+ }).map(function(e) {
+ return e._private.scratch.cola.groups = e.descendants().stdFilter(function(e) {
+ return e.isParent()
+ }).map(function(e) {
+ return e._private.scratch.cola.index
+ }), e._private.scratch.cola
+ }));
+ var T, S;
+ null != n.edgeLength ? (T = n.edgeLength, S = "linkDistance") : null != n.edgeSymDiffLength ? (T = n.edgeSymDiffLength, S = "symmetricDiffLinkLengths") : null != n.edgeJaccardLength ? (T = n.edgeJaccardLength, S = "jaccardLinkLengths") : (T = 100, S = "linkDistance");
+ var C = function(e) {
+ return e.calcLength
+ };
+ if (g.links(s.stdFilter(function(e) {
+ return !e.source().isParent() && !e.target().isParent()
+ }).map(function(e, t) {
+ var n = e._private.scratch.cola = {
+ source: e.source()[0]._private.scratch.cola.index,
+ target: e.target()[0]._private.scratch.cola.index
+ };
+ return null != T && (n.calcLength = c(T, e)), n
+ })), g.size([u.w, u.h]), null != T && g[S](C), n.flow) {
+ var k, D = "y",
+ N = 50;
+ e.is.string(n.flow) ? k = {
+ axis: n.flow,
+ minSeparation: N
+ } : e.is.number(n.flow) ? k = {
+ axis: D,
+ minSeparation: n.flow
+ } : e.is.plainObject(n.flow) ? (k = n.flow, k.axis = k.axis || D, k.minSeparation = null != k.minSeparation ? k.minSeparation : N) : k = {
+ axis: D,
+ minSeparation: N
+ }, g.flowLayout(k.axis, k.minSeparation)
+ }
+ t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), g.avoidOverlaps(n.avoidOverlap).handleDisconnected(n.handleDisconnected).start(n.unconstrIter, n.userConstIter, n.allConstIter), n.infinite || setTimeout(function() {
+ t.manuallyStopped || g.stop()
+ }, n.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return this.adaptor && (this.manuallyStopped = !0, this.adaptor.stop()), this
+ }, e("layout", "cola", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ startAngle: 1.5 * Math.PI,
+ counterclockwise: !1,
+ minNodeSpacing: 10,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ height: void 0,
+ width: void 0,
+ concentric: function(e) {
+ return e.degree()
+ },
+ levelWidth: function(e) {
+ return e.maxDegree() / 4
+ },
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ for (var t = this.options, n = t, r = t.cy, i = n.eles, a = i.nodes().not(":parent"), o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ }), s = {
+ x: o.x1 + o.w / 2,
+ y: o.y1 + o.h / 2
+ }, l = [], u = n.startAngle, c = 0, d = 0; d < a.length; d++) {
+ var h, p = a[d];
+ h = n.concentric.apply(p, [p]), l.push({
+ value: h,
+ node: p
+ }), p._private.scratch.concentric = h
+ }
+ a.updateStyle();
+ for (var d = 0; d < a.length; d++) {
+ var p = a[d];
+ c = Math.max(c, p.outerWidth(), p.outerHeight())
+ }
+ l.sort(function(e, t) {
+ return t.value - e.value
+ });
+ for (var f = n.levelWidth(a), v = [
+ []
+ ], g = v[0], d = 0; d < l.length; d++) {
+ var y = l[d];
+ if (g.length > 0) {
+ var m = Math.abs(g[0].value - y.value);
+ m >= f && (g = [], v.push(g))
+ }
+ g.push(y)
+ }
+ var x = {},
+ b = 0,
+ w = c + n.minNodeSpacing;
+ if (!n.avoidOverlap) {
+ var _ = v.length > 0 && v[0].length > 1,
+ E = Math.min(o.w, o.h) / 2 - w,
+ T = E / (v.length + _ ? 1 : 0);
+ w = Math.min(w, T)
+ }
+ for (var d = 0; d < v.length; d++) {
+ var S = v[d],
+ C = 2 * Math.PI / S.length;
+ if (S.length > 1 && n.avoidOverlap) {
+ var k = Math.cos(C) - Math.cos(0),
+ D = Math.sin(C) - Math.sin(0),
+ N = Math.sqrt(w * w / (k * k + D * D));
+ b = Math.max(N, b)
+ }
+ for (var P = 0; P < S.length; P++) {
+ var y = S[P],
+ u = n.startAngle + (n.counterclockwise ? -1 : 1) * C * P,
+ M = {
+ x: s.x + b * Math.cos(u),
+ y: s.y + b * Math.sin(u)
+ };
+ x[y.node.id()] = M
+ }
+ b += w
+ }
+ return a.layoutPositions(this, n, function() {
+ var e = this.id();
+ return x[e]
+ }), this
+ }, e("layout", "concentric", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, r, t)
+ }
+ var n, r = {
+ ready: function() {},
+ stop: function() {},
+ animate: !0,
+ refresh: 4,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ randomize: !0,
+ debug: !1,
+ nodeRepulsion: 4e5,
+ nodeOverlap: 10,
+ idealEdgeLength: 10,
+ edgeElasticity: 100,
+ nestingFactor: 5,
+ gravity: 250,
+ numIter: 100,
+ initialTemp: 200,
+ coolingFactor: .95,
+ minTemp: 1
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ r = t.cy,
+ a = this;
+ a.stopped = !1, a.trigger({
+ type: "layoutstart",
+ layout: a
+ }), n = !0 === t.debug ? !0 : !1;
+ var o = new Date,
+ d = i(r, a, t);
+ n && s(d), !0 === t.randomize && l(d, r), m(d, r, t);
+ var h = function(e) {
+ return a.stopped ? !1 : (c(d, r, t, e), d.temperature = d.temperature * t.coolingFactor, d.temperature < t.minTemp ? !1 : !0)
+ },
+ p = function() {
+ u(d, r, t), !0 === t.fit && r.fit(t.padding);
+ var e = new Date;
+ console.info("Layout took " + (e - o) + " ms"), a.one("layoutstop", t.stop), a.trigger({
+ type: "layoutstop",
+ layout: a
+ })
+ };
+ if (t.animate) {
+ var f = 0,
+ v = function() {
+ for (var n, i = 0; i < t.refresh && f < t.numIter;) {
+ var n = h(f);
+ if (n === !1) break;
+ i++, f++
+ }
+ u(d, r, t), t.fit && r.fit(t.padding), n !== !1 && f + 1 < t.numIter ? e.util.requestAnimationFrame(v) : p()
+ };
+ e.util.requestAnimationFrame(v)
+ } else {
+ for (var f = 0; f < t.numIter && h(f) !== !1; f++);
+ p()
+ }
+ return this
+ }, t.prototype.stop = function() {
+ return this.stopped = !0, this
+ };
+ var i = function(t, n, r) {
+ for (var i = r.eles.edges(), o = r.eles.nodes(), s = {
+ layout: n,
+ layoutNodes: [],
+ idToIndex: {},
+ nodeSize: o.size(),
+ graphSet: [],
+ indexToGraph: [],
+ layoutEdges: [],
+ edgeSize: i.size(),
+ temperature: r.initialTemp,
+ clientWidth: t.width(),
+ clientHeight: t.width(),
+ boundingBox: e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: t.width(),
+ h: t.height()
+ })
+ }, l = 0; l < s.nodeSize; l++) {
+ var u = {};
+ u.id = o[l].data("id"), u.parentId = o[l].data("parent"), u.children = [], u.positionX = o[l].position("x"), u.positionY = o[l].position("y"), u.offsetX = 0, u.offsetY = 0, u.height = o[l].height(), u.width = o[l].width(), u.maxX = u.positionX + u.width / 2, u.minX = u.positionX - u.width / 2, u.maxY = u.positionY + u.height / 2, u.minY = u.positionY - u.height / 2, u.padLeft = o[l]._private.style["padding-left"].pxValue, u.padRight = o[l]._private.style["padding-right"].pxValue, u.padTop = o[l]._private.style["padding-top"].pxValue, u.padBottom = o[l]._private.style["padding-bottom"].pxValue, s.layoutNodes.push(u), s.idToIndex[u.id] = l
+ }
+ for (var c = [], d = 0, h = -1, p = [], l = 0; l < s.nodeSize; l++) {
+ var f = s.layoutNodes[l],
+ v = f.parentId;
+ null != v ? s.layoutNodes[s.idToIndex[v]].children.push(f.id) : (c[++h] = f.id, p.push(f.id))
+ }
+ for (s.graphSet.push(p); h >= d;) {
+ var g = c[d++],
+ y = s.idToIndex[g],
+ m = s.layoutNodes[y],
+ x = m.children;
+ if (x.length > 0) {
+ s.graphSet.push(x);
+ for (var l = 0; l < x.length; l++) c[++h] = x[l]
+ }
+ }
+ for (var l = 0; l < s.graphSet.length; l++)
+ for (var b = s.graphSet[l], w = 0; w < b.length; w++) {
+ var _ = s.idToIndex[b[w]];
+ s.indexToGraph[_] = l
+ }
+ for (var l = 0; l < s.edgeSize; l++) {
+ var E = i[l],
+ T = {};
+ T.id = E.data("id"), T.sourceId = E.data("source"), T.targetId = E.data("target");
+ var S = r.idealEdgeLength,
+ C = s.idToIndex[T.sourceId],
+ k = s.idToIndex[T.targetId],
+ D = s.indexToGraph[C],
+ N = s.indexToGraph[k];
+ if (D != N) {
+ for (var P = a(T.sourceId, T.targetId, s), M = s.graphSet[P], B = 0, u = s.layoutNodes[C]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++;
+ for (u = s.layoutNodes[k]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++;
+ S *= B * r.nestingFactor
+ }
+ T.idealLength = S, s.layoutEdges.push(T)
+ }
+ return s
+ },
+ a = function(e, t, n) {
+ var r = o(e, t, 0, n);
+ return 2 > r.count ? 0 : r.graph
+ },
+ o = function(e, t, n, r) {
+ var i = r.graphSet[n];
+ if (-1 < $.inArray(e, i) && -1 < $.inArray(t, i)) return {
+ count: 2,
+ graph: n
+ };
+ for (var a = 0, s = 0; s < i.length; s++) {
+ var l = i[s],
+ u = r.idToIndex[l],
+ c = r.layoutNodes[u].children;
+ if (0 !== c.length) {
+ var d = r.indexToGraph[r.idToIndex[c[0]]],
+ h = o(e, t, d, r);
+ if (0 !== h.count) {
+ if (1 !== h.count) return h;
+ if (a++, 2 === a) break
+ }
+ }
+ }
+ return {
+ count: a,
+ graph: n
+ }
+ },
+ s = function(e) {
+ if (n) {
+ console.debug("layoutNodes:");
+ for (var t = 0; t < e.nodeSize; t++) {
+ var r = e.layoutNodes[t],
+ i = "\nindex: " + t + "\nId: " + r.id + "\nChildren: " + r.children.toString() + "\nparentId: " + r.parentId + "\npositionX: " + r.positionX + "\npositionY: " + r.positionY + "\nOffsetX: " + r.offsetX + "\nOffsetY: " + r.offsetY + "\npadLeft: " + r.padLeft + "\npadRight: " + r.padRight + "\npadTop: " + r.padTop + "\npadBottom: " + r.padBottom;
+ console.debug(i)
+ }
+ console.debug("idToIndex");
+ for (var t in e.idToIndex) console.debug("Id: " + t + "\nIndex: " + e.idToIndex[t]);
+ console.debug("Graph Set");
+ for (var a = e.graphSet, t = 0; t < a.length; t++) console.debug("Set : " + t + ": " + a[t].toString());
+ for (var i = "IndexToGraph", t = 0; t < e.indexToGraph.length; t++) i += "\nIndex : " + t + " Graph: " + e.indexToGraph[t];
+ console.debug(i), i = "Layout Edges";
+ for (var t = 0; t < e.layoutEdges.length; t++) {
+ var o = e.layoutEdges[t];
+ i += "\nEdge Index: " + t + " ID: " + o.id + " SouceID: " + o.sourceId + " TargetId: " + o.targetId + " Ideal Length: " + o.idealLength
+ }
+ console.debug(i), i = "nodeSize: " + e.nodeSize, i += "\nedgeSize: " + e.edgeSize, i += "\ntemperature: " + e.temperature, console.debug(i)
+ }
+ },
+ l = function(e, t) {
+ for (var n = e.clientWidth, r = e.clientHeight, i = 0; i < e.nodeSize; i++) {
+ var a = e.layoutNodes[i];
+ a.positionX = Math.random() * n, a.positionY = Math.random() * r
+ }
+ },
+ u = function(e, t, n) {
+ var r = e.layout,
+ i = n.eles.nodes(),
+ a = e.boundingBox,
+ o = {
+ x1: 1 / 0,
+ x2: -(1 / 0),
+ y1: 1 / 0,
+ y2: -(1 / 0)
+ };
+ n.boundingBox && (i.forEach(function(t) {
+ var n = e.layoutNodes[e.idToIndex[t.data("id")]];
+ o.x1 = Math.min(o.x1, n.positionX), o.x2 = Math.max(o.x2, n.positionX), o.y1 = Math.min(o.y1, n.positionY), o.y2 = Math.max(o.y2, n.positionY)
+ }), o.w = o.x2 - o.x1, o.h = o.y2 - o.y1), i.positions(function(t, r) {
+ var i = e.layoutNodes[e.idToIndex[r.data("id")]];
+ if (n.boundingBox) {
+ var s = (i.positionX - o.x1) / o.w,
+ l = (i.positionY - o.y1) / o.h;
+ return {
+ x: a.x1 + s * a.w,
+ y: a.y1 + l * a.h
+ }
+ }
+ return {
+ x: i.positionX,
+ y: i.positionY
+ }
+ }), !0 !== e.ready && (e.ready = !0, r.one("layoutready", n.ready), r.trigger({
+ type: "layoutready",
+ layout: this
+ }))
+ },
+ c = function(e, t, n, r) {
+ d(e, t, n), v(e, t, n), g(e, t, n), y(e, t, n), m(e, t, n)
+ },
+ d = function(e, t, n) {
+ for (var r = 0; r < e.graphSet.length; r++)
+ for (var i = e.graphSet[r], a = i.length, o = 0; a > o; o++)
+ for (var s = e.layoutNodes[e.idToIndex[i[o]]], l = o + 1; a > l; l++) {
+ var u = e.layoutNodes[e.idToIndex[i[l]]];
+ h(s, u, e, t, n)
+ }
+ },
+ h = function(e, t, n, r, i) {
+ var a = t.positionX - e.positionX,
+ o = t.positionY - e.positionY;
+ if (0 !== a || 0 !== o) {
+ var s = f(e, t, a, o);
+ if (s > 0) var l = i.nodeOverlap * s,
+ u = Math.sqrt(a * a + o * o),
+ c = l * a / u,
+ d = l * o / u;
+ else var h = p(e, a, o),
+ v = p(t, -1 * a, -1 * o),
+ g = v.x - h.x,
+ y = v.y - h.y,
+ m = g * g + y * y,
+ u = Math.sqrt(m),
+ l = i.nodeRepulsion / m,
+ c = l * g / u,
+ d = l * y / u;
+ e.offsetX -= c, e.offsetY -= d, t.offsetX += c, t.offsetY += d
+ }
+ },
+ p = function(e, t, n) {
+ var r = e.positionX,
+ i = e.positionY,
+ a = e.height,
+ o = e.width,
+ s = n / t,
+ l = a / o,
+ u = {};
+ do {
+ if (0 === t && n > 0) {
+ u.x = r, u.y = i + a / 2;
+ break
+ }
+ if (0 === t && 0 > n) {
+ u.x = r, u.y = i + a / 2;
+ break
+ }
+ if (t > 0 && s >= -1 * l && l >= s) {
+ u.x = r + o / 2, u.y = i + o * n / 2 / t;
+ break
+ }
+ if (0 > t && s >= -1 * l && l >= s) {
+ u.x = r - o / 2, u.y = i - o * n / 2 / t;
+ break
+ }
+ if (n > 0 && (-1 * l >= s || s >= l)) {
+ u.x = r + a * t / 2 / n, u.y = i + a / 2;
+ break
+ }
+ if (0 > n && (-1 * l >= s || s >= l)) {
+ u.x = r - a * t / 2 / n, u.y = i - a / 2;
+ break
+ }
+ } while (!1);
+ return u
+ },
+ f = function(e, t, n, r) {
+ if (n > 0) var i = e.maxX - t.minX;
+ else var i = t.maxX - e.minX;
+ if (r > 0) var a = e.maxY - t.minY;
+ else var a = t.maxY - e.minY;
+ return i >= 0 && a >= 0 ? Math.sqrt(i * i + a * a) : 0
+ },
+ v = function(e, t, n) {
+ for (var r = 0; r < e.edgeSize; r++) {
+ var i = e.layoutEdges[r],
+ a = e.idToIndex[i.sourceId],
+ o = e.layoutNodes[a],
+ s = e.idToIndex[i.targetId],
+ l = e.layoutNodes[s],
+ u = l.positionX - o.positionX,
+ c = l.positionY - o.positionY;
+ if (0 === u && 0 === c) return;
+ var d = p(o, u, c),
+ h = p(l, -1 * u, -1 * c),
+ f = h.x - d.x,
+ v = h.y - d.y,
+ g = Math.sqrt(f * f + v * v),
+ y = Math.pow(i.idealLength - g, 2) / n.edgeElasticity;
+ if (0 !== g) var m = y * f / g,
+ x = y * v / g;
+ else var m = 0,
+ x = 0;
+ o.offsetX += m, o.offsetY += x, l.offsetX -= m, l.offsetY -= x
+ }
+ },
+ g = function(e, t, n) {
+ for (var r = 0; r < e.graphSet.length; r++) {
+ var i = e.graphSet[r],
+ a = i.length;
+ if (0 === r) var o = e.clientHeight / 2,
+ s = e.clientWidth / 2;
+ else var l = e.layoutNodes[e.idToIndex[i[0]]],
+ u = e.layoutNodes[e.idToIndex[l.parentId]],
+ o = u.positionX,
+ s = u.positionY;
+ for (var c = 0; a > c; c++) {
+ var d = e.layoutNodes[e.idToIndex[i[c]]],
+ h = o - d.positionX,
+ p = s - d.positionY,
+ f = Math.sqrt(h * h + p * p);
+ if (f > 1) {
+ var v = n.gravity * h / f,
+ g = n.gravity * p / f;
+ d.offsetX += v, d.offsetY += g
+ }
+ }
+ }
+ },
+ y = function(e, t, n) {
+ var r = [],
+ i = 0,
+ a = -1;
+ for (r.push.apply(r, e.graphSet[0]), a += e.graphSet[0].length; a >= i;) {
+ var o = r[i++],
+ s = e.idToIndex[o],
+ l = e.layoutNodes[s],
+ u = l.children;
+ if (0 < u.length) {
+ for (var c = l.offsetX, d = l.offsetY, h = 0; h < u.length; h++) {
+ var p = e.layoutNodes[e.idToIndex[u[h]]];
+ p.offsetX += c, p.offsetY += d, r[++a] = u[h]
+ }
+ l.offsetX = 0, l.offsetY = 0
+ }
+ }
+ },
+ m = function(e, t, n) {
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ 0 < i.children.length && (i.maxX = void 0, i.minX = void 0, i.maxY = void 0, i.minY = void 0)
+ }
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ if (!(0 < i.children.length)) {
+ var a = x(i.offsetX, i.offsetY, e.temperature);
+ i.positionX += a.x, i.positionY += a.y, i.offsetX = 0, i.offsetY = 0, i.minX = i.positionX - i.width, i.maxX = i.positionX + i.width, i.minY = i.positionY - i.height, i.maxY = i.positionY + i.height, b(i, e)
+ }
+ }
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ 0 < i.children.length && (i.positionX = (i.maxX + i.minX) / 2, i.positionY = (i.maxY + i.minY) / 2, i.width = i.maxX - i.minX, i.height = i.maxY - i.minY)
+ }
+ },
+ x = function(e, t, n) {
+ var r = Math.sqrt(e * e + t * t);
+ if (r > n) var i = {
+ x: n * e / r,
+ y: n * t / r
+ };
+ else var i = {
+ x: e,
+ y: t
+ };
+ return i
+ },
+ b = function(e, t) {
+ var n = e.parentId;
+ if (null != n) {
+ var r = t.layoutNodes[t.idToIndex[n]],
+ i = !1;
+ return (null == r.maxX || e.maxX + r.padRight > r.maxX) && (r.maxX = e.maxX + r.padRight, i = !0), (null == r.minX || e.minX - r.padLeft < r.minX) && (r.minX = e.minX - r.padLeft, i = !0), (null == r.maxY || e.maxY + r.padBottom > r.maxY) && (r.maxY = e.maxY + r.padBottom, i = !0), (null == r.minY || e.minY - r.padTop < r.minY) && (r.minY = e.minY - r.padTop, i = !0), i ? b(r, t) : void 0
+ }
+ };
+ e("layout", "cose", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ nodeSep: void 0,
+ edgeSep: void 0,
+ rankSep: void 0,
+ rankDir: void 0,
+ minLen: function(e) {
+ return 1
+ },
+ edgeWeight: function(e) {
+ return 1
+ },
+ fit: !0,
+ padding: 30,
+ animate: !1,
+ animationDuration: 500,
+ boundingBox: void 0,
+ ready: function() {},
+ stop: function() {}
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = this;
+ return e.util.require("dagre", function(r) {
+ var i = t.cy,
+ a = t.eles,
+ o = function(t, n) {
+ return e.is.fn(n) ? n.apply(t, [t]) : n
+ },
+ s = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ }),
+ l = new r.graphlib.Graph({
+ multigraph: !0,
+ compound: !0
+ }),
+ u = {},
+ c = function(e, t) {
+ null != t && (u[e] = t)
+ };
+ c("nodesep", t.nodeSep), c("edgesep", t.edgeSep), c("ranksep", t.rankSep), c("rankdir", t.rankDir), l.setGraph(u), l.setDefaultEdgeLabel(function() {
+ return {}
+ }), l.setDefaultNodeLabel(function() {
+ return {}
+ });
+ for (var d = a.nodes(), h = 0; h < d.length; h++) {
+ var p = d[h];
+ l.setNode(p.id(), {
+ width: p.width(),
+ height: p.height(),
+ name: p.id()
+ })
+ }
+ for (var h = 0; h < d.length; h++) {
+ var p = d[h];
+ p.isChild() && l.setParent(p.id(), p.parent().id())
+ }
+ for (var f = a.edges().stdFilter(function(e) {
+ return !e.source().isParent() && !e.target().isParent()
+ }), h = 0; h < f.length; h++) {
+ var v = f[h];
+ l.setEdge(v.source().id(), v.target().id(), {
+ minlen: o(v, t.minLen),
+ weight: o(v, t.edgeWeight),
+ name: v.id()
+ }, v.id())
+ }
+ r.layout(l);
+ for (var g = l.nodes(), h = 0; h < g.length; h++) {
+ var y = g[h],
+ m = l.node(y);
+ i.getElementById(y).scratch().dagre = m
+ }
+ var x;
+ t.boundingBox ? (x = {
+ x1: 1 / 0,
+ x2: -(1 / 0),
+ y1: 1 / 0,
+ y2: -(1 / 0)
+ }, d.forEach(function(e) {
+ var t = e.scratch().dagre;
+ x.x1 = Math.min(x.x1, t.x), x.x2 = Math.max(x.x2, t.x), x.y1 = Math.min(x.y1, t.y), x.y2 = Math.max(x.y2, t.y)
+ }), x.w = x.x2 - x.x1, x.h = x.y2 - x.y1) : x = s;
+ var b = function(e) {
+ if (t.boundingBox) {
+ var n = (e.x - x.x1) / x.w,
+ r = (e.y - x.y1) / x.h;
+ return {
+ x: s.x1 + n * s.w,
+ y: s.y1 + r * s.h
+ }
+ }
+ return e
+ };
+ d.layoutPositions(n, t, function() {
+ var e = this.scratch().dagre;
+ return b({
+ x: e.x,
+ y: e.y
+ })
+ })
+ }), this
+ }, e("layout", "dagre", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ rows: void 0,
+ columns: void 0,
+ position: function(e) {},
+ sort: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t,
+ r = t.cy,
+ i = n.eles,
+ a = i.nodes().not(":parent");
+ n.sort && (a = a.sort(n.sort));
+ var o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ });
+ if (0 === o.h || 0 === o.w) a.layoutPositions(this, n, function() {
+ return {
+ x: o.x1,
+ y: o.y1
+ }
+ });
+ else {
+ var s = a.size(),
+ l = Math.sqrt(s * o.h / o.w),
+ u = Math.round(l),
+ c = Math.round(o.w / o.h * l),
+ d = function(e) {
+ if (null == e) return Math.min(u, c);
+ var t = Math.min(u, c);
+ t == u ? u = e : c = e
+ },
+ h = function(e) {
+ if (null == e) return Math.max(u, c);
+ var t = Math.max(u, c);
+ t == u ? u = e : c = e
+ };
+ if (null != n.rows && null != n.columns) u = n.rows, c = n.columns;
+ else if (null != n.rows && null == n.columns) u = n.rows, c = Math.ceil(s / u);
+ else if (null == n.rows && null != n.columns) c = n.columns, u = Math.ceil(s / c);
+ else if (c * u > s) {
+ var p = d(),
+ f = h();
+ (p - 1) * f >= s ? d(p - 1) : (f - 1) * p >= s && h(f - 1)
+ } else
+ for (; s > c * u;) {
+ var p = d(),
+ f = h();
+ (f + 1) * p >= s ? h(f + 1) : d(p + 1)
+ }
+ var v = o.w / c,
+ g = o.h / u;
+ if (n.avoidOverlap)
+ for (var y = 0; y < a.length; y++) {
+ var m = a[y],
+ x = m.outerWidth(),
+ b = m.outerHeight();
+ v = Math.max(v, x), g = Math.max(g, b)
+ }
+ for (var w = {}, _ = function(e, t) {
+ return w["c-" + e + "-" + t] ? !0 : !1
+ }, E = function(e, t) {
+ w["c-" + e + "-" + t] = !0
+ }, T = 0, S = 0, C = function() {
+ S++, S >= c && (S = 0, T++)
+ }, k = {}, y = 0; y < a.length; y++) {
+ var m = a[y],
+ D = n.position(m);
+ if (D && (void 0 !== D.row || void 0 !== D.col)) {
+ var N = {
+ row: D.row,
+ col: D.col
+ };
+ if (void 0 === N.col)
+ for (N.col = 0; _(N.row, N.col);) N.col++;
+ else if (void 0 === N.row)
+ for (N.row = 0; _(N.row, N.col);) N.row++;
+ k[m.id()] = N, E(N.row, N.col)
+ }
+ }
+ var P = function(e, t) {
+ var n, r;
+ if (t.locked() || t.isFullAutoParent()) return !1;
+ var i = k[t.id()];
+ if (i) n = i.col * v + v / 2 + o.x1, r = i.row * g + g / 2 + o.y1;
+ else {
+ for (; _(T, S);) C();
+ n = S * v + v / 2 + o.x1, r = T * g + g / 2 + o.y1, E(T, S), C()
+ }
+ return {
+ x: n,
+ y: r
+ }
+ };
+ a.layoutPositions(this, n, P)
+ }
+ return this
+ }, e("layout", "grid", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ ready: function() {},
+ stop: function() {}
+ };
+ t.prototype.run = function() {
+ var e = this.options,
+ t = e.eles,
+ n = this;
+ e.cy;
+ return n.trigger("layoutstart"), t.nodes().positions(function() {
+ return {
+ x: 0,
+ y: 0
+ }
+ }), n.one("layoutready", e.ready), n.trigger("layoutready"), n.one("layoutstop", e.stop), n.trigger("layoutstop"), this
+ }, t.prototype.stop = function() {
+ return this
+ }, e("layout", "null", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ positions: void 0,
+ zoom: void 0,
+ pan: void 0,
+ fit: !0,
+ padding: 30,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ function t(e) {
+ if (null == n.positions) return null;
+ if (a) return n.positions.apply(e, [e]);
+ var t = n.positions[e._private.data.id];
+ return null == t ? null : t
+ }
+ var n = this.options,
+ r = n.eles,
+ i = r.nodes(),
+ a = e.is.fn(n.positions);
+ return i.layoutPositions(this, n, function(e, n) {
+ var r = t(n);
+ return n.locked() || null == r ? !1 : r
+ }), this
+ }, e("layout", "preset", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t.cy,
+ r = t.eles,
+ i = r.nodes().not(":parent"),
+ a = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: n.width(),
+ h: n.height()
+ }),
+ o = function(e, t) {
+ return {
+ x: a.x1 + Math.round(Math.random() * a.w),
+ y: a.y1 + Math.round(Math.random() * a.h)
+ }
+ };
+ return i.layoutPositions(this, t, o), this
+ }, e("layout", "random", t)
+ }(cytoscape),
+ function($$) {
+ "use strict";
+
+ function SpreadLayout(e) {
+ this.options = $$.util.extend({}, defaults, e)
+ }
+
+ function cellCentroid(e) {
+ for (var t, n, r, i = e.halfedges, a = 0, o = 0, s = 0, l = 0; l < i.length; ++l) t = i[l].getEndpoint(), n = i[l].getStartpoint(), a += t.x * n.y, a -= t.y * n.x, r = t.x * n.y - n.x * t.y, o += (t.x + n.x) * r, s += (t.y + n.y) * r;
+ return a /= 2, r = 6 * a, {
+ x: o / r,
+ y: s / r
+ }
+ }
+
+ function sitesDistance(e, t) {
+ var n = e.x - t.x,
+ r = e.y - t.y;
+ return Math.sqrt(n * n + r * r)
+ }
+ var defaults = {
+ animate: !0,
+ ready: void 0,
+ stop: void 0,
+ fit: !0,
+ minDist: 20,
+ padding: 20,
+ expandingFactor: -1,
+ maxFruchtermanReingoldIterations: 50,
+ maxExpandIterations: 4,
+ boundingBox: void 0
+ };
+ SpreadLayout.prototype.run = function() {
+ var layout = this,
+ options = this.options;
+ return $$.util.requires(["foograph", "Voronoi"], function(foograph, Voronoi) {
+ function setPositions(e) {
+ for (var t = e.vertices, n = [], r = 0; r < t.length; ++r) {
+ var i = t[r];
+ n[i.id] = {
+ x: i.x,
+ y: i.y
+ }
+ }
+ nodes.positions(function(e, t) {
+ var r = t._private.data.id,
+ i = n[r];
+ return {
+ x: Math.round(simBB.x1 + i.x),
+ y: Math.round(simBB.y1 + i.y)
+ }
+ }), options.fit && cy.fit(options.padding), cy.nodes().rtrigger("position")
+ }
+ var cy = options.cy,
+ nodes = cy.nodes(),
+ edges = cy.edges(),
+ cWidth = cy.width(),
+ cHeight = cy.height(),
+ simulationBounds = options.boundingBox ? $$.util.makeBoundingBox(options.boundingBox) : null,
+ padding = options.padding,
+ simBBFactor = Math.max(1, .8 * Math.log(nodes.length));
+ nodes.length < 100 && (simBBFactor /= 2), layout.trigger({
+ type: "layoutstart",
+ layout: layout
+ });
+ var simBB = {
+ x1: 0,
+ y1: 0,
+ x2: cWidth * simBBFactor,
+ y2: cHeight * simBBFactor
+ };
+ simulationBounds && (simBB.x1 = simulationBounds.x1, simBB.y1 = simulationBounds.y1, simBB.x2 = simulationBounds.x2, simBB.y2 = simulationBounds.y2), simBB.x1 += padding, simBB.y1 += padding, simBB.x2 -= padding, simBB.y2 -= padding;
+ var width = simBB.x2 - simBB.x1,
+ height = simBB.y2 - simBB.y1,
+ startTime = Date.now();
+ if (nodes.size() <= 1) {
+ nodes.positions({
+ x: Math.round((simBB.x1 + simBB.x2) / 2),
+ y: Math.round((simBB.y1 + simBB.y2) / 2)
+ }), options.fit && cy.fit(options.padding);
+ var endTime = Date.now();
+ return console.info("Layout on " + nodes.size() + " nodes took " + (endTime - startTime) + " ms"), layout.one("layoutready", options.ready), layout.trigger("layoutready"), layout.one("layoutstop", options.stop), void layout.trigger("layoutstop")
+ }
+ var pData = {
+ width: width,
+ height: height,
+ minDist: options.minDist,
+ expFact: options.expandingFactor,
+ expIt: 0,
+ maxExpIt: options.maxExpandIterations,
+ vertices: [],
+ edges: [],
+ startTime: startTime,
+ maxFruchtermanReingoldIterations: options.maxFruchtermanReingoldIterations
+ };
+ nodes.each(function(e, t) {
+ var n = this._private.data.id;
+ pData.vertices.push({
+ id: n,
+ x: 0,
+ y: 0
+ })
+ }), edges.each(function() {
+ var e = this.source().id(),
+ t = this.target().id();
+ pData.edges.push({
+ src: e,
+ tgt: t
+ })
+ });
+ var t1 = $$.Thread();
+ t1.require(foograph, "foograph"), t1.require(Voronoi), t1.require(sitesDistance), t1.require(cellCentroid);
+ var didLayoutReady = !1;
+ t1.on("message", function(e) {
+ var t = e.message;
+ options.animate && (setPositions(t), didLayoutReady || (layout.trigger("layoutready"), didLayoutReady = !0))
+ }), layout.one("layoutready", options.ready), t1.pass(pData).run(function(pData) {
+ function checkMinDist(e) {
+ for (var t = 0, n = 0; n < e.length; ++n) {
+ var r = e[n];
+ null != r.lSite && null != r.rSite && sitesDistance(r.lSite, r.rSite) < lMinDist && ++t
+ }
+ return t
+ }
+ foograph = eval("foograph"), Voronoi = eval("Voronoi");
+ for (var lWidth = pData.width, lHeight = pData.height, lMinDist = pData.minDist, lExpFact = pData.expFact, lMaxExpIt = pData.maxExpIt, lMaxFruchtermanReingoldIterations = pData.maxFruchtermanReingoldIterations, savePositions = function() {
+ pData.width = lWidth, pData.height = lHeight, pData.expIt = expandIteration, pData.expFact = lExpFact, pData.vertices = [];
+ for (var e = 0; e < fv.length; ++e) pData.vertices.push({
+ id: fv[e].label,
+ x: fv[e].x,
+ y: fv[e].y
+ })
+ }, messagePositions = function() {
+ broadcast(pData)
+ }, frg = new foograph.Graph("FRgraph", !1), frgNodes = {}, dataVertices = pData.vertices, ni = 0; ni < dataVertices.length; ++ni) {
+ var id = dataVertices[ni].id,
+ v = new foograph.Vertex(id, Math.round(Math.random() * lHeight), Math.round(Math.random() * lHeight));
+ frgNodes[id] = v, frg.insertVertex(v)
+ }
+ for (var dataEdges = pData.edges, ei = 0; ei < dataEdges.length; ++ei) {
+ var srcNodeId = dataEdges[ei].src,
+ tgtNodeId = dataEdges[ei].tgt;
+ frg.insertEdge("", 1, frgNodes[srcNodeId], frgNodes[tgtNodeId])
+ }
+ var fv = frg.vertices,
+ iterations = lMaxFruchtermanReingoldIterations,
+ frLayoutManager = new foograph.ForceDirectedVertexLayout(lWidth, lHeight, iterations, !1, lMinDist);
+ frLayoutManager.callback = function() {
+ savePositions(), messagePositions()
+ }, frLayoutManager.layout(frg), savePositions(), messagePositions();
+ for (var voronoi = new Voronoi, bbox = {
+ xl: 0,
+ xr: lWidth,
+ yt: 0,
+ yb: lHeight
+ }, vSites = [], i = 0; i < fv.length; ++i) vSites[fv[i].label] = fv[i];
+ for (var diagram = voronoi.compute(fv, bbox), cells = diagram.cells, i = 0; i < cells.length; ++i) {
+ var cell = cells[i],
+ site = cell.site,
+ centroid = cellCentroid(cell),
+ currv = vSites[site.label];
+ currv.x = centroid.x, currv.y = centroid.y
+ }
+ 0 > lExpFact && (lExpFact = Math.max(.05, Math.min(.1, lMinDist / Math.sqrt(lWidth * lHeight / fv.length) * .5)));
+ for (var prevInfractions = checkMinDist(diagram.edges), bStop = 0 >= prevInfractions, voronoiIteration = 0, expandIteration = 0; !bStop;) {
+ ++voronoiIteration;
+ for (var it = 0; 4 >= it; ++it) {
+ voronoi.recycle(diagram), diagram = voronoi.compute(fv, bbox), cells = diagram.cells;
+ for (var i = 0; i < cells.length; ++i) {
+ var cell = cells[i],
+ site = cell.site,
+ centroid = cellCentroid(cell),
+ currv = vSites[site.label];
+ currv.x = centroid.x, currv.y = centroid.y
+ }
+ }
+ var currInfractions = checkMinDist(diagram.edges);
+ 0 >= currInfractions ? bStop = !0 : (currInfractions >= prevInfractions || voronoiIteration >= 4) && (expandIteration >= lMaxExpIt ? bStop = !0 : (lWidth += lWidth * lExpFact, lHeight += lHeight * lExpFact, bbox = {
+ xl: 0,
+ xr: lWidth,
+ yt: 0,
+ yb: lHeight
+ }, ++expandIteration, voronoiIteration = 0)), prevInfractions = currInfractions, savePositions(), messagePositions()
+ }
+ return savePositions(), pData
+ }).then(function(e) {
+ var t = e.vertices;
+ setPositions(e);
+ var n = e.startTime,
+ r = new Date;
+ console.info("Layout on " + t.length + " nodes took " + (r - n) + " ms"), layout.one("layoutstop", options.stop), options.animate || layout.trigger("layoutready"), layout.trigger("layoutstop"), t1.stop()
+ })
+ }), this
+ }, SpreadLayout.prototype.stop = function() {}, $$("layout", "spread", SpreadLayout)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ animate: !0,
+ maxSimulationTime: 4e3,
+ ungrabifyWhileSimulating: !1,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ random: !1,
+ infinite: !1,
+ ready: void 0,
+ stop: void 0,
+ stiffness: 400,
+ repulsion: 400,
+ damping: .5
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this,
+ r = this.options;
+ return e.util.require("Springy", function(i) {
+ function a(e) {
+ var t = e.scratch("springy").model.id,
+ n = w.layout.nodePoints[t].p,
+ r = e.position(),
+ i = null != r.x && null != r.y ? y(e.position()) : {
+ x: 4 * Math.random() - 2,
+ y: 4 * Math.random() - 2
+ };
+ n.x = i.x, n.y = i.y
+ }
+
+ function o() {
+ n.stopped = !1, r.ungrabifyWhileSimulating && E.ungrabify(), w.start()
+ }
+ var s = !1,
+ l = r.cy;
+ t.trigger({
+ type: "layoutstart",
+ layout: t
+ });
+ var u = r.eles,
+ c = u.nodes().not(":parent"),
+ d = u.edges(),
+ h = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: l.width(),
+ h: l.height()
+ }),
+ p = new i.Graph;
+ c.each(function(e, t) {
+ t.scratch("springy", {
+ model: p.newNode({
+ element: t
+ })
+ })
+ }), d.each(function(e, t) {
+ var n = t.source().scratch("springy").model,
+ r = t.target().scratch("springy").model;
+ t.scratch("springy", {
+ model: p.newEdge(n, r, {
+ element: t
+ })
+ })
+ });
+ var f = window.sim = new i.Layout.ForceDirected(p, r.stiffness, r.repulsion, r.damping);
+ r.infinite && (f.minEnergyThreshold = -(1 / 0));
+ var v = f.getBoundingBox(),
+ g = function(e) {
+ v = f.getBoundingBox();
+ var t = v.topright.subtract(v.bottomleft),
+ n = e.subtract(v.bottomleft).divide(t.x).x * h.w + h.x1,
+ r = e.subtract(v.bottomleft).divide(t.y).y * h.h + h.x1;
+ return new i.Vector(n, r)
+ },
+ y = function(e) {
+ v = f.getBoundingBox();
+ var t = v.topright.subtract(v.bottomleft),
+ n = (e.x - h.x1) / h.w * t.x + v.bottomleft.x,
+ r = (e.y - h.y1) / h.h * t.y + v.bottomleft.y;
+ return new i.Vector(n, r)
+ },
+ m = l.collection(),
+ x = l.nodes().size(),
+ b = 1,
+ w = new i.Renderer(f, function() {
+ n.stopped || m.length > 0 && r.animate && (s = !0, m.rtrigger("position"), r.fit && l.fit(r.padding), m = l.collection(), s = !1)
+ }, function(e, t, n) {}, function(e, i) {
+ if (!n.stopped) {
+ var a = g(i),
+ o = e.data.element;
+ o.locked() || o.grabbed() || (o._private.position = {
+ x: a.x,
+ y: a.y
+ }, m.merge(o)), b == x && (t.one("layoutready", r.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })), b++
+ }
+ });
+ c.each(function(e, t) {
+ r.random || a(t)
+ });
+ var _;
+ c.on("position", _ = function() {
+ s || a(this)
+ });
+ var E = c.filter(":grabbable");
+ n.stopSystem = function() {
+ n.stopped = !0, p.filterNodes(function() {
+ return !1
+ }), r.ungrabifyWhileSimulating && E.grabify(), r.fit && l.fit(r.padding), c.off("drag position", _), t.one("layoutstop", r.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ }), n.stopSystem = null
+ }, o(), r.infinite || setTimeout(function() {
+ n.stop()
+ }, r.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return null != this.stopSystem && this.stopSystem(), this
+ }, e("layout", "springy", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ this.options = e
+ }
+ t.prototype.recalculateRenderedStyle = function() {}, t.prototype.notify = function() {}, e("renderer", "null", t)
+ }(cytoscape);
\ No newline at end of file
diff --git a/xquery/ent-file-net/web_session/styles.js b/xquery/ent-file-net/web_session/styles.js
new file mode 100644
index 0000000..71840c1
--- /dev/null
+++ b/xquery/ent-file-net/web_session/styles.js
@@ -0,0 +1,95 @@
+var styles = [ {
+ "format_version" : "1.0",
+ "generated_by" : "cytoscape-3.9.1",
+ "target_cytoscapejs_version" : "~2.1",
+ "title" : "default",
+ "style" : [ {
+ "selector" : "node",
+ "css" : {
+ "color" : "rgb(255,255,255)",
+ "width" : 35.0,
+ "height" : 35.0,
+ "background-color" : "rgb(33,113,181)",
+ "font-family" : "SansSerif.plain",
+ "font-weight" : "normal",
+ "shape" : "roundrectangle",
+ "background-opacity" : 1.0,
+ "font-size" : 12,
+ "border-opacity" : 1.0,
+ "border-width" : 0.0,
+ "text-valign" : "center",
+ "text-halign" : "center",
+ "border-color" : "rgb(204,204,204)",
+ "text-opacity" : 1.0,
+ "content" : "data(name)"
+ }
+ }, {
+ "selector" : "node[Column_2 = 'person']",
+ "css" : {
+ "background-color" : "rgb(227,26,28)"
+ }
+ }, {
+ "selector" : "node[Column_2 = 'person']",
+ "css" : {
+ "shape" : "diamond"
+ }
+ }, {
+ "selector" : "node:selected",
+ "css" : {
+ "background-color" : "rgb(255,255,0)"
+ }
+ }, {
+ "selector" : "edge",
+ "css" : {
+ "line-style" : "solid",
+ "color" : "rgb(252,251,253)",
+ "line-color" : "rgb(132,132,132)",
+ "text-opacity" : 1.0,
+ "source-arrow-color" : "rgb(0,0,0)",
+ "target-arrow-color" : "rgb(0,0,0)",
+ "font-family" : "Dialog.plain",
+ "font-weight" : "normal",
+ "content" : "",
+ "font-size" : 10,
+ "width" : 2.0,
+ "source-arrow-shape" : "none",
+ "opacity" : 1.0,
+ "target-arrow-shape" : "none"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 2,826.99057424]",
+ "css" : {
+ "line-color" : "rgb(68,1,84)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness = 2,826.99057424]",
+ "css" : {
+ "line-color" : "rgb(68,2,86)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 1,414.49520293][EdgeBetweenness < 2,826.99057424]",
+ "css" : {
+ "line-color" : "mapData(EdgeBetweenness,1,414.49520293,2,826.99057424,rgb(33,145,140),rgb(68,2,86))"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 2][EdgeBetweenness < 1,414.49520293]",
+ "css" : {
+ "line-color" : "mapData(EdgeBetweenness,2,1,414.49520293,rgb(203,24,29),rgb(33,145,140))"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness = 2]",
+ "css" : {
+ "line-color" : "rgb(203,24,29)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness < 2]",
+ "css" : {
+ "line-color" : "rgb(253,231,37)"
+ }
+ }, {
+ "selector" : "edge:selected",
+ "css" : {
+ "line-color" : "rgb(255,0,0)"
+ }
+ } ]
+} ]
\ No newline at end of file
diff --git a/xquery/ent-file-net/web_session/styles/main.css b/xquery/ent-file-net/web_session/styles/main.css
new file mode 100644
index 0000000..71df565
--- /dev/null
+++ b/xquery/ent-file-net/web_session/styles/main.css
@@ -0,0 +1 @@
+body{background:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#555;font-weight:100}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}#cy{width:800px;height:600px;background-color:#eee}
\ No newline at end of file
diff --git a/xquery/person-file-net.zip b/xquery/person-file-net.zip
new file mode 100644
index 0000000..098538b
Binary files /dev/null and b/xquery/person-file-net.zip differ
diff --git a/xquery/person-file-net/web_session/404.html b/xquery/person-file-net/web_session/404.html
new file mode 100644
index 0000000..fdace4a
--- /dev/null
+++ b/xquery/person-file-net/web_session/404.html
@@ -0,0 +1,157 @@
+
+
+
+
+ Page Not Found :(
+
+
+
+
+
Not found :(
+
Sorry, but the page you were trying to view does not exist.
"]
+ },
+ Ge = v(fe),
+ Ke = Ge.appendChild(fe.createElement("div"));
+ Ze.optgroup = Ze.option, Ze.tbody = Ze.tfoot = Ze.colgroup = Ze.caption = Ze.thead, Ze.th = Ze.td, ie.extend({
+ clone: function(e, t, n) {
+ var r, i, a, o, s, l = ie.contains(e.ownerDocument, e);
+ if (ne.html5Clone || ie.isXMLDoc(e) || !Re.test("<" + e.nodeName + ">") ? a = e.cloneNode(!0) : (Ke.innerHTML = e.outerHTML, Ke.removeChild(a = Ke.firstChild)), !(ne.noCloneEvent && ne.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ie.isXMLDoc(e)))
+ for (r = g(a), s = g(e), o = 0; null != (i = s[o]); ++o) r[o] && E(i, r[o]);
+ if (t)
+ if (n)
+ for (s = s || g(e), r = r || g(a), o = 0; null != (i = s[o]); o++) _(i, r[o]);
+ else _(e, a);
+ return r = g(a, "script"), r.length > 0 && w(r, !l && g(e, "script")), r = s = i = null, a
+ },
+ buildFragment: function(e, t, n, r) {
+ for (var i, a, o, s, l, u, c, d = e.length, h = v(t), p = [], f = 0; d > f; f++)
+ if (a = e[f], a || 0 === a)
+ if ("object" === ie.type(a)) ie.merge(p, a.nodeType ? [a] : a);
+ else if (Xe.test(a)) {
+ for (s = s || h.appendChild(t.createElement("div")), l = (qe.exec(a) || ["", ""])[1].toLowerCase(), c = Ze[l] || Ze._default, s.innerHTML = c[1] + a.replace(Fe, "<$1>$2>") + c[2], i = c[0]; i--;) s = s.lastChild;
+ if (!ne.leadingWhitespace && je.test(a) && p.push(t.createTextNode(je.exec(a)[0])), !ne.tbody)
+ for (a = "table" !== l || Ve.test(a) ? "
" !== c[1] || Ve.test(a) ? 0 : s : s.firstChild, i = a && a.childNodes.length; i--;) ie.nodeName(u = a.childNodes[i], "tbody") && !u.childNodes.length && a.removeChild(u);
+ for (ie.merge(p, s.childNodes), s.textContent = ""; s.firstChild;) s.removeChild(s.firstChild);
+ s = h.lastChild
+ } else p.push(t.createTextNode(a));
+ for (s && h.removeChild(s), ne.appendChecked || ie.grep(g(p, "input"), y), f = 0; a = p[f++];)
+ if ((!r || -1 === ie.inArray(a, r)) && (o = ie.contains(a.ownerDocument, a), s = g(h.appendChild(a), "script"), o && w(s), n))
+ for (i = 0; a = s[i++];) $e.test(a.type || "") && n.push(a);
+ return s = null, h
+ },
+ cleanData: function(e, t) {
+ for (var n, r, i, a, o = 0, s = ie.expando, l = ie.cache, u = ne.deleteExpando, c = ie.event.special; null != (n = e[o]); o++)
+ if ((t || ie.acceptData(n)) && (i = n[s], a = i && l[i])) {
+ if (a.events)
+ for (r in a.events) c[r] ? ie.event.remove(n, r) : ie.removeEvent(n, r, a.handle);
+ l[i] && (delete l[i], u ? delete n[s] : typeof n.removeAttribute !== Ee ? n.removeAttribute(s) : n[s] = null, U.push(i))
+ }
+ }
+ }), ie.fn.extend({
+ text: function(e) {
+ return Ne(this, function(e) {
+ return void 0 === e ? ie.text(this) : this.empty().append((this[0] && this[0].ownerDocument || fe).createTextNode(e))
+ }, null, e, arguments.length)
+ },
+ append: function() {
+ return this.domManip(arguments, function(e) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var t = m(this, e);
+ t.appendChild(e)
+ }
+ })
+ },
+ prepend: function() {
+ return this.domManip(arguments, function(e) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var t = m(this, e);
+ t.insertBefore(e, t.firstChild)
+ }
+ })
+ },
+ before: function() {
+ return this.domManip(arguments, function(e) {
+ this.parentNode && this.parentNode.insertBefore(e, this)
+ })
+ },
+ after: function() {
+ return this.domManip(arguments, function(e) {
+ this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
+ })
+ },
+ remove: function(e, t) {
+ for (var n, r = e ? ie.filter(e, this) : this, i = 0; null != (n = r[i]); i++) t || 1 !== n.nodeType || ie.cleanData(g(n)), n.parentNode && (t && ie.contains(n.ownerDocument, n) && w(g(n, "script")), n.parentNode.removeChild(n));
+ return this
+ },
+ empty: function() {
+ for (var e, t = 0; null != (e = this[t]); t++) {
+ for (1 === e.nodeType && ie.cleanData(g(e, !1)); e.firstChild;) e.removeChild(e.firstChild);
+ e.options && ie.nodeName(e, "select") && (e.options.length = 0)
+ }
+ return this
+ },
+ clone: function(e, t) {
+ return e = null == e ? !1 : e, t = null == t ? e : t, this.map(function() {
+ return ie.clone(this, e, t)
+ })
+ },
+ html: function(e) {
+ return Ne(this, function(e) {
+ var t = this[0] || {},
+ n = 0,
+ r = this.length;
+ if (void 0 === e) return 1 === t.nodeType ? t.innerHTML.replace(ze, "") : void 0;
+ if ("string" == typeof e && !He.test(e) && (ne.htmlSerialize || !Re.test(e)) && (ne.leadingWhitespace || !je.test(e)) && !Ze[(qe.exec(e) || ["", ""])[1].toLowerCase()]) {
+ e = e.replace(Fe, "<$1>$2>");
+ try {
+ for (; r > n; n++) t = this[n] || {}, 1 === t.nodeType && (ie.cleanData(g(t, !1)), t.innerHTML = e);
+ t = 0
+ } catch (i) {}
+ }
+ t && this.empty().append(e)
+ }, null, e, arguments.length)
+ },
+ replaceWith: function() {
+ var e = arguments[0];
+ return this.domManip(arguments, function(t) {
+ e = this.parentNode, ie.cleanData(g(this)), e && e.replaceChild(t, this)
+ }), e && (e.length || e.nodeType) ? this : this.remove()
+ },
+ detach: function(e) {
+ return this.remove(e, !0)
+ },
+ domManip: function(e, t) {
+ e = G.apply([], e);
+ var n, r, i, a, o, s, l = 0,
+ u = this.length,
+ c = this,
+ d = u - 1,
+ h = e[0],
+ p = ie.isFunction(h);
+ if (p || u > 1 && "string" == typeof h && !ne.checkClone && Ye.test(h)) return this.each(function(n) {
+ var r = c.eq(n);
+ p && (e[0] = h.call(this, n, r.html())), r.domManip(e, t)
+ });
+ if (u && (s = ie.buildFragment(e, this[0].ownerDocument, !1, this), n = s.firstChild, 1 === s.childNodes.length && (s = n), n)) {
+ for (a = ie.map(g(s, "script"), x), i = a.length; u > l; l++) r = s, l !== d && (r = ie.clone(r, !0, !0), i && ie.merge(a, g(r, "script"))), t.call(this[l], r, l);
+ if (i)
+ for (o = a[a.length - 1].ownerDocument, ie.map(a, b), l = 0; i > l; l++) r = a[l], $e.test(r.type || "") && !ie._data(r, "globalEval") && ie.contains(o, r) && (r.src ? ie._evalUrl && ie._evalUrl(r.src) : ie.globalEval((r.text || r.textContent || r.innerHTML || "").replace(Ue, "")));
+ s = n = null
+ }
+ return this
+ }
+ }), ie.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function(e, t) {
+ ie.fn[e] = function(e) {
+ for (var n, r = 0, i = [], a = ie(e), o = a.length - 1; o >= r; r++) n = r === o ? this : this.clone(!0), ie(a[r])[t](n), K.apply(i, n.get());
+ return this.pushStack(i)
+ }
+ });
+ var Je, Qe = {};
+ ! function() {
+ var e;
+ ne.shrinkWrapBlocks = function() {
+ if (null != e) return e;
+ e = !1;
+ var t, n, r;
+ return n = fe.getElementsByTagName("body")[0], n && n.style ? (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== Ee && (t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", t.appendChild(fe.createElement("div")).style.width = "5px", e = 3 !== t.offsetWidth), n.removeChild(r), e) : void 0
+ }
+ }();
+ var et, tt, nt = /^margin/,
+ rt = new RegExp("^(" + Ce + ")(?!px)[a-z%]+$", "i"),
+ it = /^(top|right|bottom|left)$/;
+ e.getComputedStyle ? (et = function(t) {
+ return t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null) : e.getComputedStyle(t, null)
+ }, tt = function(e, t, n) {
+ var r, i, a, o, s = e.style;
+ return n = n || et(e), o = n ? n.getPropertyValue(t) || n[t] : void 0, n && ("" !== o || ie.contains(e.ownerDocument, e) || (o = ie.style(e, t)), rt.test(o) && nt.test(t) && (r = s.width, i = s.minWidth,
+ a = s.maxWidth, s.minWidth = s.maxWidth = s.width = o, o = n.width, s.width = r, s.minWidth = i, s.maxWidth = a)), void 0 === o ? o : o + ""
+ }) : fe.documentElement.currentStyle && (et = function(e) {
+ return e.currentStyle
+ }, tt = function(e, t, n) {
+ var r, i, a, o, s = e.style;
+ return n = n || et(e), o = n ? n[t] : void 0, null == o && s && s[t] && (o = s[t]), rt.test(o) && !it.test(t) && (r = s.left, i = e.runtimeStyle, a = i && i.left, a && (i.left = e.currentStyle.left), s.left = "fontSize" === t ? "1em" : o, o = s.pixelLeft + "px", s.left = r, a && (i.left = a)), void 0 === o ? o : o + "" || "auto"
+ }),
+ function() {
+ function t() {
+ var t, n, r, i;
+ n = fe.getElementsByTagName("body")[0], n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), t.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", a = o = !1, l = !0, e.getComputedStyle && (a = "1%" !== (e.getComputedStyle(t, null) || {}).top, o = "4px" === (e.getComputedStyle(t, null) || {
+ width: "4px"
+ }).width, i = t.appendChild(fe.createElement("div")), i.style.cssText = t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", i.style.marginRight = i.style.width = "0", t.style.width = "1px", l = !parseFloat((e.getComputedStyle(i, null) || {}).marginRight), t.removeChild(i)), t.innerHTML = "
t
", i = t.getElementsByTagName("td"), i[0].style.cssText = "margin:0;border:0;padding:0;display:none", s = 0 === i[0].offsetHeight, s && (i[0].style.display = "", i[1].style.display = "none", s = 0 === i[0].offsetHeight), n.removeChild(r))
+ }
+ var n, r, i, a, o, s, l;
+ n = fe.createElement("div"), n.innerHTML = "
a", i = n.getElementsByTagName("a")[0], r = i && i.style, r && (r.cssText = "float:left;opacity:.5", ne.opacity = "0.5" === r.opacity, ne.cssFloat = !!r.cssFloat, n.style.backgroundClip = "content-box", n.cloneNode(!0).style.backgroundClip = "", ne.clearCloneStyle = "content-box" === n.style.backgroundClip, ne.boxSizing = "" === r.boxSizing || "" === r.MozBoxSizing || "" === r.WebkitBoxSizing, ie.extend(ne, {
+ reliableHiddenOffsets: function() {
+ return null == s && t(), s
+ },
+ boxSizingReliable: function() {
+ return null == o && t(), o
+ },
+ pixelPosition: function() {
+ return null == a && t(), a
+ },
+ reliableMarginRight: function() {
+ return null == l && t(), l
+ }
+ }))
+ }(), ie.swap = function(e, t, n, r) {
+ var i, a, o = {};
+ for (a in t) o[a] = e.style[a], e.style[a] = t[a];
+ i = n.apply(e, r || []);
+ for (a in t) e.style[a] = o[a];
+ return i
+ };
+ var at = /alpha\([^)]*\)/i,
+ ot = /opacity\s*=\s*([^)]*)/,
+ st = /^(none|table(?!-c[ea]).+)/,
+ lt = new RegExp("^(" + Ce + ")(.*)$", "i"),
+ ut = new RegExp("^([+-])=(" + Ce + ")", "i"),
+ ct = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ },
+ dt = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+ ht = ["Webkit", "O", "Moz", "ms"];
+ ie.extend({
+ cssHooks: {
+ opacity: {
+ get: function(e, t) {
+ if (t) {
+ var n = tt(e, "opacity");
+ return "" === n ? "1" : n
+ }
+ }
+ }
+ },
+ cssNumber: {
+ columnCount: !0,
+ fillOpacity: !0,
+ flexGrow: !0,
+ flexShrink: !0,
+ fontWeight: !0,
+ lineHeight: !0,
+ opacity: !0,
+ order: !0,
+ orphans: !0,
+ widows: !0,
+ zIndex: !0,
+ zoom: !0
+ },
+ cssProps: {
+ "float": ne.cssFloat ? "cssFloat" : "styleFloat"
+ },
+ style: function(e, t, n, r) {
+ if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
+ var i, a, o, s = ie.camelCase(t),
+ l = e.style;
+ if (t = ie.cssProps[s] || (ie.cssProps[s] = k(l, s)), o = ie.cssHooks[t] || ie.cssHooks[s], void 0 === n) return o && "get" in o && void 0 !== (i = o.get(e, !1, r)) ? i : l[t];
+ if (a = typeof n, "string" === a && (i = ut.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(ie.css(e, t)), a = "number"), null != n && n === n && ("number" !== a || ie.cssNumber[s] || (n += "px"), ne.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), !(o && "set" in o && void 0 === (n = o.set(e, n, r))))) try {
+ l[t] = n
+ } catch (u) {}
+ }
+ },
+ css: function(e, t, n, r) {
+ var i, a, o, s = ie.camelCase(t);
+ return t = ie.cssProps[s] || (ie.cssProps[s] = k(e.style, s)), o = ie.cssHooks[t] || ie.cssHooks[s], o && "get" in o && (a = o.get(e, !0, n)), void 0 === a && (a = tt(e, t, r)), "normal" === a && t in dt && (a = dt[t]), "" === n || n ? (i = parseFloat(a), n === !0 || ie.isNumeric(i) ? i || 0 : a) : a
+ }
+ }), ie.each(["height", "width"], function(e, t) {
+ ie.cssHooks[t] = {
+ get: function(e, n, r) {
+ return n ? st.test(ie.css(e, "display")) && 0 === e.offsetWidth ? ie.swap(e, ct, function() {
+ return M(e, t, r)
+ }) : M(e, t, r) : void 0
+ },
+ set: function(e, n, r) {
+ var i = r && et(e);
+ return N(e, n, r ? P(e, t, r, ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, i), i) : 0)
+ }
+ }
+ }), ne.opacity || (ie.cssHooks.opacity = {
+ get: function(e, t) {
+ return ot.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
+ },
+ set: function(e, t) {
+ var n = e.style,
+ r = e.currentStyle,
+ i = ie.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
+ a = r && r.filter || n.filter || "";
+ n.zoom = 1, (t >= 1 || "" === t) && "" === ie.trim(a.replace(at, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = at.test(a) ? a.replace(at, i) : a + " " + i)
+ }
+ }), ie.cssHooks.marginRight = C(ne.reliableMarginRight, function(e, t) {
+ return t ? ie.swap(e, {
+ display: "inline-block"
+ }, tt, [e, "marginRight"]) : void 0
+ }), ie.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function(e, t) {
+ ie.cssHooks[e + t] = {
+ expand: function(n) {
+ for (var r = 0, i = {}, a = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++) i[e + ke[r] + t] = a[r] || a[r - 2] || a[0];
+ return i
+ }
+ }, nt.test(e) || (ie.cssHooks[e + t].set = N)
+ }), ie.fn.extend({
+ css: function(e, t) {
+ return Ne(this, function(e, t, n) {
+ var r, i, a = {},
+ o = 0;
+ if (ie.isArray(t)) {
+ for (r = et(e), i = t.length; i > o; o++) a[t[o]] = ie.css(e, t[o], !1, r);
+ return a
+ }
+ return void 0 !== n ? ie.style(e, t, n) : ie.css(e, t)
+ }, e, t, arguments.length > 1)
+ },
+ show: function() {
+ return D(this, !0)
+ },
+ hide: function() {
+ return D(this)
+ },
+ toggle: function(e) {
+ return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
+ De(this) ? ie(this).show() : ie(this).hide()
+ })
+ }
+ }), ie.Tween = B, B.prototype = {
+ constructor: B,
+ init: function(e, t, n, r, i, a) {
+ this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = a || (ie.cssNumber[n] ? "" : "px")
+ },
+ cur: function() {
+ var e = B.propHooks[this.prop];
+ return e && e.get ? e.get(this) : B.propHooks._default.get(this)
+ },
+ run: function(e) {
+ var t, n = B.propHooks[this.prop];
+ return this.options.duration ? this.pos = t = ie.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : B.propHooks._default.set(this), this
+ }
+ }, B.prototype.init.prototype = B.prototype, B.propHooks = {
+ _default: {
+ get: function(e) {
+ var t;
+ return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = ie.css(e.elem, e.prop, ""), t && "auto" !== t ? t : 0) : e.elem[e.prop]
+ },
+ set: function(e) {
+ ie.fx.step[e.prop] ? ie.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[ie.cssProps[e.prop]] || ie.cssHooks[e.prop]) ? ie.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
+ }
+ }
+ }, B.propHooks.scrollTop = B.propHooks.scrollLeft = {
+ set: function(e) {
+ e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
+ }
+ }, ie.easing = {
+ linear: function(e) {
+ return e
+ },
+ swing: function(e) {
+ return .5 - Math.cos(e * Math.PI) / 2
+ }
+ }, ie.fx = B.prototype.init, ie.fx.step = {};
+ var pt, ft, vt = /^(?:toggle|show|hide)$/,
+ gt = new RegExp("^(?:([+-])=|)(" + Ce + ")([a-z%]*)$", "i"),
+ yt = /queueHooks$/,
+ mt = [I],
+ xt = {
+ "*": [function(e, t) {
+ var n = this.createTween(e, t),
+ r = n.cur(),
+ i = gt.exec(t),
+ a = i && i[3] || (ie.cssNumber[e] ? "" : "px"),
+ o = (ie.cssNumber[e] || "px" !== a && +r) && gt.exec(ie.css(n.elem, e)),
+ s = 1,
+ l = 20;
+ if (o && o[3] !== a) {
+ a = a || o[3], i = i || [], o = +r || 1;
+ do s = s || ".5", o /= s, ie.style(n.elem, e, o + a); while (s !== (s = n.cur() / r) && 1 !== s && --l)
+ }
+ return i && (o = n.start = +o || +r || 0, n.unit = a, n.end = i[1] ? o + (i[1] + 1) * i[2] : +i[2]), n
+ }]
+ };
+ ie.Animation = ie.extend(R, {
+ tweener: function(e, t) {
+ ie.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
+ for (var n, r = 0, i = e.length; i > r; r++) n = e[r], xt[n] = xt[n] || [], xt[n].unshift(t)
+ },
+ prefilter: function(e, t) {
+ t ? mt.unshift(e) : mt.push(e)
+ }
+ }), ie.speed = function(e, t, n) {
+ var r = e && "object" == typeof e ? ie.extend({}, e) : {
+ complete: n || !n && t || ie.isFunction(e) && e,
+ duration: e,
+ easing: n && t || t && !ie.isFunction(t) && t
+ };
+ return r.duration = ie.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in ie.fx.speeds ? ie.fx.speeds[r.duration] : ie.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() {
+ ie.isFunction(r.old) && r.old.call(this), r.queue && ie.dequeue(this, r.queue)
+ }, r
+ }, ie.fn.extend({
+ fadeTo: function(e, t, n, r) {
+ return this.filter(De).css("opacity", 0).show().end().animate({
+ opacity: t
+ }, e, n, r)
+ },
+ animate: function(e, t, n, r) {
+ var i = ie.isEmptyObject(e),
+ a = ie.speed(t, n, r),
+ o = function() {
+ var t = R(this, ie.extend({}, e), a);
+ (i || ie._data(this, "finish")) && t.stop(!0)
+ };
+ return o.finish = o, i || a.queue === !1 ? this.each(o) : this.queue(a.queue, o)
+ },
+ stop: function(e, t, n) {
+ var r = function(e) {
+ var t = e.stop;
+ delete e.stop, t(n)
+ };
+ return "string" != typeof e && (n = t, t = e, e = void 0), t && e !== !1 && this.queue(e || "fx", []), this.each(function() {
+ var t = !0,
+ i = null != e && e + "queueHooks",
+ a = ie.timers,
+ o = ie._data(this);
+ if (i) o[i] && o[i].stop && r(o[i]);
+ else
+ for (i in o) o[i] && o[i].stop && yt.test(i) && r(o[i]);
+ for (i = a.length; i--;) a[i].elem !== this || null != e && a[i].queue !== e || (a[i].anim.stop(n), t = !1, a.splice(i, 1));
+ (t || !n) && ie.dequeue(this, e)
+ })
+ },
+ finish: function(e) {
+ return e !== !1 && (e = e || "fx"), this.each(function() {
+ var t, n = ie._data(this),
+ r = n[e + "queue"],
+ i = n[e + "queueHooks"],
+ a = ie.timers,
+ o = r ? r.length : 0;
+ for (n.finish = !0, ie.queue(this, e, []), i && i.stop && i.stop.call(this, !0), t = a.length; t--;) a[t].elem === this && a[t].queue === e && (a[t].anim.stop(!0), a.splice(t, 1));
+ for (t = 0; o > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
+ delete n.finish
+ })
+ }
+ }), ie.each(["toggle", "show", "hide"], function(e, t) {
+ var n = ie.fn[t];
+ ie.fn[t] = function(e, r, i) {
+ return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(O(t, !0), e, r, i)
+ }
+ }), ie.each({
+ slideDown: O("show"),
+ slideUp: O("hide"),
+ slideToggle: O("toggle"),
+ fadeIn: {
+ opacity: "show"
+ },
+ fadeOut: {
+ opacity: "hide"
+ },
+ fadeToggle: {
+ opacity: "toggle"
+ }
+ }, function(e, t) {
+ ie.fn[e] = function(e, n, r) {
+ return this.animate(t, e, n, r)
+ }
+ }), ie.timers = [], ie.fx.tick = function() {
+ var e, t = ie.timers,
+ n = 0;
+ for (pt = ie.now(); n < t.length; n++) e = t[n], e() || t[n] !== e || t.splice(n--, 1);
+ t.length || ie.fx.stop(), pt = void 0
+ }, ie.fx.timer = function(e) {
+ ie.timers.push(e), e() ? ie.fx.start() : ie.timers.pop()
+ }, ie.fx.interval = 13, ie.fx.start = function() {
+ ft || (ft = setInterval(ie.fx.tick, ie.fx.interval))
+ }, ie.fx.stop = function() {
+ clearInterval(ft), ft = null
+ }, ie.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ _default: 400
+ }, ie.fn.delay = function(e, t) {
+ return e = ie.fx ? ie.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) {
+ var r = setTimeout(t, e);
+ n.stop = function() {
+ clearTimeout(r)
+ }
+ })
+ },
+ function() {
+ var e, t, n, r, i;
+ t = fe.createElement("div"), t.setAttribute("className", "t"), t.innerHTML = "
a", r = t.getElementsByTagName("a")[0], n = fe.createElement("select"), i = n.appendChild(fe.createElement("option")), e = t.getElementsByTagName("input")[0], r.style.cssText = "top:1px", ne.getSetAttribute = "t" !== t.className, ne.style = /top/.test(r.getAttribute("style")), ne.hrefNormalized = "/a" === r.getAttribute("href"), ne.checkOn = !!e.value, ne.optSelected = i.selected, ne.enctype = !!fe.createElement("form").enctype, n.disabled = !0, ne.optDisabled = !i.disabled, e = fe.createElement("input"), e.setAttribute("value", ""), ne.input = "" === e.getAttribute("value"), e.value = "t", e.setAttribute("type", "radio"), ne.radioValue = "t" === e.value
+ }();
+ var bt = /\r/g;
+ ie.fn.extend({
+ val: function(e) {
+ var t, n, r, i = this[0]; {
+ if (arguments.length) return r = ie.isFunction(e), this.each(function(n) {
+ var i;
+ 1 === this.nodeType && (i = r ? e.call(this, n, ie(this).val()) : e, null == i ? i = "" : "number" == typeof i ? i += "" : ie.isArray(i) && (i = ie.map(i, function(e) {
+ return null == e ? "" : e + ""
+ })), t = ie.valHooks[this.type] || ie.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i))
+ });
+ if (i) return t = ie.valHooks[i.type] || ie.valHooks[i.nodeName.toLowerCase()], t && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : (n = i.value, "string" == typeof n ? n.replace(bt, "") : null == n ? "" : n)
+ }
+ }
+ }), ie.extend({
+ valHooks: {
+ option: {
+ get: function(e) {
+ var t = ie.find.attr(e, "value");
+ return null != t ? t : ie.trim(ie.text(e))
+ }
+ },
+ select: {
+ get: function(e) {
+ for (var t, n, r = e.options, i = e.selectedIndex, a = "select-one" === e.type || 0 > i, o = a ? null : [], s = a ? i + 1 : r.length, l = 0 > i ? s : a ? i : 0; s > l; l++)
+ if (n = r[l], (n.selected || l === i) && (ne.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !ie.nodeName(n.parentNode, "optgroup"))) {
+ if (t = ie(n).val(), a) return t;
+ o.push(t)
+ }
+ return o
+ },
+ set: function(e, t) {
+ for (var n, r, i = e.options, a = ie.makeArray(t), o = i.length; o--;)
+ if (r = i[o], ie.inArray(ie.valHooks.option.get(r), a) >= 0) try {
+ r.selected = n = !0
+ } catch (s) {
+ r.scrollHeight
+ } else r.selected = !1;
+ return n || (e.selectedIndex = -1), i
+ }
+ }
+ }
+ }), ie.each(["radio", "checkbox"], function() {
+ ie.valHooks[this] = {
+ set: function(e, t) {
+ return ie.isArray(t) ? e.checked = ie.inArray(ie(e).val(), t) >= 0 : void 0
+ }
+ }, ne.checkOn || (ie.valHooks[this].get = function(e) {
+ return null === e.getAttribute("value") ? "on" : e.value
+ })
+ });
+ var wt, _t, Et = ie.expr.attrHandle,
+ Tt = /^(?:checked|selected)$/i,
+ St = ne.getSetAttribute,
+ Ct = ne.input;
+ ie.fn.extend({
+ attr: function(e, t) {
+ return Ne(this, ie.attr, e, t, arguments.length > 1)
+ },
+ removeAttr: function(e) {
+ return this.each(function() {
+ ie.removeAttr(this, e)
+ })
+ }
+ }), ie.extend({
+ attr: function(e, t, n) {
+ var r, i, a = e.nodeType;
+ if (e && 3 !== a && 8 !== a && 2 !== a) return typeof e.getAttribute === Ee ? ie.prop(e, t, n) : (1 === a && ie.isXMLDoc(e) || (t = t.toLowerCase(), r = ie.attrHooks[t] || (ie.expr.match.bool.test(t) ? _t : wt)), void 0 === n ? r && "get" in r && null !== (i = r.get(e, t)) ? i : (i = ie.find.attr(e, t), null == i ? void 0 : i) : null !== n ? r && "set" in r && void 0 !== (i = r.set(e, n, t)) ? i : (e.setAttribute(t, n + ""), n) : void ie.removeAttr(e, t))
+ },
+ removeAttr: function(e, t) {
+ var n, r, i = 0,
+ a = t && t.match(xe);
+ if (a && 1 === e.nodeType)
+ for (; n = a[i++];) r = ie.propFix[n] || n, ie.expr.match.bool.test(n) ? Ct && St || !Tt.test(n) ? e[r] = !1 : e[ie.camelCase("default-" + n)] = e[r] = !1 : ie.attr(e, n, ""), e.removeAttribute(St ? n : r)
+ },
+ attrHooks: {
+ type: {
+ set: function(e, t) {
+ if (!ne.radioValue && "radio" === t && ie.nodeName(e, "input")) {
+ var n = e.value;
+ return e.setAttribute("type", t), n && (e.value = n), t
+ }
+ }
+ }
+ }
+ }), _t = {
+ set: function(e, t, n) {
+ return t === !1 ? ie.removeAttr(e, n) : Ct && St || !Tt.test(n) ? e.setAttribute(!St && ie.propFix[n] || n, n) : e[ie.camelCase("default-" + n)] = e[n] = !0, n
+ }
+ }, ie.each(ie.expr.match.bool.source.match(/\w+/g), function(e, t) {
+ var n = Et[t] || ie.find.attr;
+ Et[t] = Ct && St || !Tt.test(t) ? function(e, t, r) {
+ var i, a;
+ return r || (a = Et[t], Et[t] = i, i = null != n(e, t, r) ? t.toLowerCase() : null, Et[t] = a), i
+ } : function(e, t, n) {
+ return n ? void 0 : e[ie.camelCase("default-" + t)] ? t.toLowerCase() : null
+ }
+ }), Ct && St || (ie.attrHooks.value = {
+ set: function(e, t, n) {
+ return ie.nodeName(e, "input") ? void(e.defaultValue = t) : wt && wt.set(e, t, n)
+ }
+ }), St || (wt = {
+ set: function(e, t, n) {
+ var r = e.getAttributeNode(n);
+ return r || e.setAttributeNode(r = e.ownerDocument.createAttribute(n)), r.value = t += "", "value" === n || t === e.getAttribute(n) ? t : void 0
+ }
+ }, Et.id = Et.name = Et.coords = function(e, t, n) {
+ var r;
+ return n ? void 0 : (r = e.getAttributeNode(t)) && "" !== r.value ? r.value : null
+ }, ie.valHooks.button = {
+ get: function(e, t) {
+ var n = e.getAttributeNode(t);
+ return n && n.specified ? n.value : void 0
+ },
+ set: wt.set
+ }, ie.attrHooks.contenteditable = {
+ set: function(e, t, n) {
+ wt.set(e, "" === t ? !1 : t, n)
+ }
+ }, ie.each(["width", "height"], function(e, t) {
+ ie.attrHooks[t] = {
+ set: function(e, n) {
+ return "" === n ? (e.setAttribute(t, "auto"), n) : void 0
+ }
+ }
+ })), ne.style || (ie.attrHooks.style = {
+ get: function(e) {
+ return e.style.cssText || void 0
+ },
+ set: function(e, t) {
+ return e.style.cssText = t + ""
+ }
+ });
+ var kt = /^(?:input|select|textarea|button|object)$/i,
+ Dt = /^(?:a|area)$/i;
+ ie.fn.extend({
+ prop: function(e, t) {
+ return Ne(this, ie.prop, e, t, arguments.length > 1)
+ },
+ removeProp: function(e) {
+ return e = ie.propFix[e] || e, this.each(function() {
+ try {
+ this[e] = void 0, delete this[e]
+ } catch (t) {}
+ })
+ }
+ }), ie.extend({
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+ prop: function(e, t, n) {
+ var r, i, a, o = e.nodeType;
+ if (e && 3 !== o && 8 !== o && 2 !== o) return a = 1 !== o || !ie.isXMLDoc(e), a && (t = ie.propFix[t] || t, i = ie.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t]
+ },
+ propHooks: {
+ tabIndex: {
+ get: function(e) {
+ var t = ie.find.attr(e, "tabindex");
+ return t ? parseInt(t, 10) : kt.test(e.nodeName) || Dt.test(e.nodeName) && e.href ? 0 : -1
+ }
+ }
+ }
+ }), ne.hrefNormalized || ie.each(["href", "src"], function(e, t) {
+ ie.propHooks[t] = {
+ get: function(e) {
+ return e.getAttribute(t, 4)
+ }
+ }
+ }), ne.optSelected || (ie.propHooks.selected = {
+ get: function(e) {
+ var t = e.parentNode;
+ return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
+ }
+ }), ie.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
+ ie.propFix[this.toLowerCase()] = this
+ }), ne.enctype || (ie.propFix.enctype = "encoding");
+ var Nt = /[\t\r\n\f]/g;
+ ie.fn.extend({
+ addClass: function(e) {
+ var t, n, r, i, a, o, s = 0,
+ l = this.length,
+ u = "string" == typeof e && e;
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).addClass(e.call(this, t, this.className))
+ });
+ if (u)
+ for (t = (e || "").match(xe) || []; l > s; s++)
+ if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : " ")) {
+ for (a = 0; i = t[a++];) r.indexOf(" " + i + " ") < 0 && (r += i + " ");
+ o = ie.trim(r), n.className !== o && (n.className = o)
+ }
+ return this
+ },
+ removeClass: function(e) {
+ var t, n, r, i, a, o, s = 0,
+ l = this.length,
+ u = 0 === arguments.length || "string" == typeof e && e;
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).removeClass(e.call(this, t, this.className))
+ });
+ if (u)
+ for (t = (e || "").match(xe) || []; l > s; s++)
+ if (n = this[s], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(Nt, " ") : "")) {
+ for (a = 0; i = t[a++];)
+ for (; r.indexOf(" " + i + " ") >= 0;) r = r.replace(" " + i + " ", " ");
+ o = e ? ie.trim(r) : "", n.className !== o && (n.className = o)
+ }
+ return this
+ },
+ toggleClass: function(e, t) {
+ var n = typeof e;
+ return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : ie.isFunction(e) ? this.each(function(n) {
+ ie(this).toggleClass(e.call(this, n, this.className, t), t)
+ }) : this.each(function() {
+ if ("string" === n)
+ for (var t, r = 0, i = ie(this), a = e.match(xe) || []; t = a[r++];) i.hasClass(t) ? i.removeClass(t) : i.addClass(t);
+ else(n === Ee || "boolean" === n) && (this.className && ie._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : ie._data(this, "__className__") || "")
+ })
+ },
+ hasClass: function(e) {
+ for (var t = " " + e + " ", n = 0, r = this.length; r > n; n++)
+ if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(Nt, " ").indexOf(t) >= 0) return !0;
+ return !1
+ }
+ }), ie.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
+ ie.fn[t] = function(e, n) {
+ return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
+ }
+ }), ie.fn.extend({
+ hover: function(e, t) {
+ return this.mouseenter(e).mouseleave(t || e)
+ },
+ bind: function(e, t, n) {
+ return this.on(e, null, t, n)
+ },
+ unbind: function(e, t) {
+ return this.off(e, null, t)
+ },
+ delegate: function(e, t, n, r) {
+ return this.on(t, e, n, r)
+ },
+ undelegate: function(e, t, n) {
+ return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
+ }
+ });
+ var Pt = ie.now(),
+ Mt = /\?/,
+ Bt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+ ie.parseJSON = function(t) {
+ if (e.JSON && e.JSON.parse) return e.JSON.parse(t + "");
+ var n, r = null,
+ i = ie.trim(t + "");
+ return i && !ie.trim(i.replace(Bt, function(e, t, i, a) {
+ return n && t && (r = 0), 0 === r ? e : (n = i || t, r += !a - !i, "")
+ })) ? Function("return " + i)() : ie.error("Invalid JSON: " + t)
+ }, ie.parseXML = function(t) {
+ var n, r;
+ if (!t || "string" != typeof t) return null;
+ try {
+ e.DOMParser ? (r = new DOMParser, n = r.parseFromString(t, "text/xml")) : (n = new ActiveXObject("Microsoft.XMLDOM"), n.async = "false", n.loadXML(t))
+ } catch (i) {
+ n = void 0
+ }
+ return n && n.documentElement && !n.getElementsByTagName("parsererror").length || ie.error("Invalid XML: " + t), n
+ };
+ var Lt, Ot, At = /#.*$/,
+ It = /([?&])_=[^&]*/,
+ zt = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
+ Rt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ jt = /^(?:GET|HEAD)$/,
+ Ft = /^\/\//,
+ qt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+ Vt = {},
+ Xt = {},
+ Ht = "*/".concat("*");
+ try {
+ Ot = location.href
+ } catch (Yt) {
+ Ot = fe.createElement("a"), Ot.href = "", Ot = Ot.href
+ }
+ Lt = qt.exec(Ot.toLowerCase()) || [], ie.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: Ot,
+ type: "GET",
+ isLocal: Rt.test(Lt[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": Ht,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+ converters: {
+ "* text": String,
+ "text html": !0,
+ "text json": ie.parseJSON,
+ "text xml": ie.parseXML
+ },
+ flatOptions: {
+ url: !0,
+ context: !0
+ }
+ },
+ ajaxSetup: function(e, t) {
+ return t ? q(q(e, ie.ajaxSettings), t) : q(ie.ajaxSettings, e)
+ },
+ ajaxPrefilter: j(Vt),
+ ajaxTransport: j(Xt),
+ ajax: function(e, t) {
+ function n(e, t, n, r) {
+ var i, c, y, m, b, _ = t;
+ 2 !== x && (x = 2, s && clearTimeout(s), u = void 0, o = r || "", w.readyState = e > 0 ? 4 : 0, i = e >= 200 && 300 > e || 304 === e, n && (m = V(d, w, n)), m = X(d, m, w, i), i ? (d.ifModified && (b = w.getResponseHeader("Last-Modified"), b && (ie.lastModified[a] = b), b = w.getResponseHeader("etag"), b && (ie.etag[a] = b)), 204 === e || "HEAD" === d.type ? _ = "nocontent" : 304 === e ? _ = "notmodified" : (_ = m.state, c = m.data, y = m.error, i = !y)) : (y = _, (e || !_) && (_ = "error", 0 > e && (e = 0))), w.status = e, w.statusText = (t || _) + "", i ? f.resolveWith(h, [c, _, w]) : f.rejectWith(h, [w, _, y]), w.statusCode(g), g = void 0, l && p.trigger(i ? "ajaxSuccess" : "ajaxError", [w, d, i ? c : y]), v.fireWith(h, [w, _]), l && (p.trigger("ajaxComplete", [w, d]), --ie.active || ie.event.trigger("ajaxStop")))
+ }
+ "object" == typeof e && (t = e, e = void 0), t = t || {};
+ var r, i, a, o, s, l, u, c, d = ie.ajaxSetup({}, t),
+ h = d.context || d,
+ p = d.context && (h.nodeType || h.jquery) ? ie(h) : ie.event,
+ f = ie.Deferred(),
+ v = ie.Callbacks("once memory"),
+ g = d.statusCode || {},
+ y = {},
+ m = {},
+ x = 0,
+ b = "canceled",
+ w = {
+ readyState: 0,
+ getResponseHeader: function(e) {
+ var t;
+ if (2 === x) {
+ if (!c)
+ for (c = {}; t = zt.exec(o);) c[t[1].toLowerCase()] = t[2];
+ t = c[e.toLowerCase()]
+ }
+ return null == t ? null : t
+ },
+ getAllResponseHeaders: function() {
+ return 2 === x ? o : null
+ },
+ setRequestHeader: function(e, t) {
+ var n = e.toLowerCase();
+ return x || (e = m[n] = m[n] || e, y[e] = t), this
+ },
+ overrideMimeType: function(e) {
+ return x || (d.mimeType = e), this
+ },
+ statusCode: function(e) {
+ var t;
+ if (e)
+ if (2 > x)
+ for (t in e) g[t] = [g[t], e[t]];
+ else w.always(e[w.status]);
+ return this
+ },
+ abort: function(e) {
+ var t = e || b;
+ return u && u.abort(t), n(0, t), this
+ }
+ };
+ if (f.promise(w).complete = v.add, w.success = w.done, w.error = w.fail, d.url = ((e || d.url || Ot) + "").replace(At, "").replace(Ft, Lt[1] + "//"), d.type = t.method || t.type || d.method || d.type, d.dataTypes = ie.trim(d.dataType || "*").toLowerCase().match(xe) || [""], null == d.crossDomain && (r = qt.exec(d.url.toLowerCase()), d.crossDomain = !(!r || r[1] === Lt[1] && r[2] === Lt[2] && (r[3] || ("http:" === r[1] ? "80" : "443")) === (Lt[3] || ("http:" === Lt[1] ? "80" : "443")))), d.data && d.processData && "string" != typeof d.data && (d.data = ie.param(d.data, d.traditional)), F(Vt, d, t, w), 2 === x) return w;
+ l = ie.event && d.global, l && 0 === ie.active++ && ie.event.trigger("ajaxStart"), d.type = d.type.toUpperCase(), d.hasContent = !jt.test(d.type), a = d.url, d.hasContent || (d.data && (a = d.url += (Mt.test(a) ? "&" : "?") + d.data, delete d.data), d.cache === !1 && (d.url = It.test(a) ? a.replace(It, "$1_=" + Pt++) : a + (Mt.test(a) ? "&" : "?") + "_=" + Pt++)), d.ifModified && (ie.lastModified[a] && w.setRequestHeader("If-Modified-Since", ie.lastModified[a]), ie.etag[a] && w.setRequestHeader("If-None-Match", ie.etag[a])), (d.data && d.hasContent && d.contentType !== !1 || t.contentType) && w.setRequestHeader("Content-Type", d.contentType), w.setRequestHeader("Accept", d.dataTypes[0] && d.accepts[d.dataTypes[0]] ? d.accepts[d.dataTypes[0]] + ("*" !== d.dataTypes[0] ? ", " + Ht + "; q=0.01" : "") : d.accepts["*"]);
+ for (i in d.headers) w.setRequestHeader(i, d.headers[i]);
+ if (d.beforeSend && (d.beforeSend.call(h, w, d) === !1 || 2 === x)) return w.abort();
+ b = "abort";
+ for (i in {
+ success: 1,
+ error: 1,
+ complete: 1
+ }) w[i](d[i]);
+ if (u = F(Xt, d, t, w)) {
+ w.readyState = 1, l && p.trigger("ajaxSend", [w, d]), d.async && d.timeout > 0 && (s = setTimeout(function() {
+ w.abort("timeout")
+ }, d.timeout));
+ try {
+ x = 1, u.send(y, n)
+ } catch (_) {
+ if (!(2 > x)) throw _;
+ n(-1, _)
+ }
+ } else n(-1, "No Transport");
+ return w
+ },
+ getJSON: function(e, t, n) {
+ return ie.get(e, t, n, "json")
+ },
+ getScript: function(e, t) {
+ return ie.get(e, void 0, t, "script")
+ }
+ }), ie.each(["get", "post"], function(e, t) {
+ ie[t] = function(e, n, r, i) {
+ return ie.isFunction(n) && (i = i || r, r = n, n = void 0), ie.ajax({
+ url: e,
+ type: t,
+ dataType: i,
+ data: n,
+ success: r
+ })
+ }
+ }), ie._evalUrl = function(e) {
+ return ie.ajax({
+ url: e,
+ type: "GET",
+ dataType: "script",
+ async: !1,
+ global: !1,
+ "throws": !0
+ })
+ }, ie.fn.extend({
+ wrapAll: function(e) {
+ if (ie.isFunction(e)) return this.each(function(t) {
+ ie(this).wrapAll(e.call(this, t))
+ });
+ if (this[0]) {
+ var t = ie(e, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
+ for (var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild;
+ return e
+ }).append(this)
+ }
+ return this
+ },
+ wrapInner: function(e) {
+ return ie.isFunction(e) ? this.each(function(t) {
+ ie(this).wrapInner(e.call(this, t))
+ }) : this.each(function() {
+ var t = ie(this),
+ n = t.contents();
+ n.length ? n.wrapAll(e) : t.append(e)
+ })
+ },
+ wrap: function(e) {
+ var t = ie.isFunction(e);
+ return this.each(function(n) {
+ ie(this).wrapAll(t ? e.call(this, n) : e)
+ })
+ },
+ unwrap: function() {
+ return this.parent().each(function() {
+ ie.nodeName(this, "body") || ie(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), ie.expr.filters.hidden = function(e) {
+ return e.offsetWidth <= 0 && e.offsetHeight <= 0 || !ne.reliableHiddenOffsets() && "none" === (e.style && e.style.display || ie.css(e, "display"))
+ }, ie.expr.filters.visible = function(e) {
+ return !ie.expr.filters.hidden(e)
+ };
+ var $t = /%20/g,
+ Wt = /\[\]$/,
+ Ut = /\r?\n/g,
+ Zt = /^(?:submit|button|image|reset|file)$/i,
+ Gt = /^(?:input|select|textarea|keygen)/i;
+ ie.param = function(e, t) {
+ var n, r = [],
+ i = function(e, t) {
+ t = ie.isFunction(t) ? t() : null == t ? "" : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
+ };
+ if (void 0 === t && (t = ie.ajaxSettings && ie.ajaxSettings.traditional), ie.isArray(e) || e.jquery && !ie.isPlainObject(e)) ie.each(e, function() {
+ i(this.name, this.value)
+ });
+ else
+ for (n in e) H(n, e[n], t, i);
+ return r.join("&").replace($t, "+")
+ }, ie.fn.extend({
+ serialize: function() {
+ return ie.param(this.serializeArray())
+ },
+ serializeArray: function() {
+ return this.map(function() {
+ var e = ie.prop(this, "elements");
+ return e ? ie.makeArray(e) : this
+ }).filter(function() {
+ var e = this.type;
+ return this.name && !ie(this).is(":disabled") && Gt.test(this.nodeName) && !Zt.test(e) && (this.checked || !Pe.test(e))
+ }).map(function(e, t) {
+ var n = ie(this).val();
+ return null == n ? null : ie.isArray(n) ? ie.map(n, function(e) {
+ return {
+ name: t.name,
+ value: e.replace(Ut, "\r\n")
+ }
+ }) : {
+ name: t.name,
+ value: n.replace(Ut, "\r\n")
+ }
+ }).get()
+ }
+ }), ie.ajaxSettings.xhr = void 0 !== e.ActiveXObject ? function() {
+ return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Y() || $()
+ } : Y;
+ var Kt = 0,
+ Jt = {},
+ Qt = ie.ajaxSettings.xhr();
+ e.attachEvent && e.attachEvent("onunload", function() {
+ for (var e in Jt) Jt[e](void 0, !0)
+ }), ne.cors = !!Qt && "withCredentials" in Qt, Qt = ne.ajax = !!Qt, Qt && ie.ajaxTransport(function(e) {
+ if (!e.crossDomain || ne.cors) {
+ var t;
+ return {
+ send: function(n, r) {
+ var i, a = e.xhr(),
+ o = ++Kt;
+ if (a.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields)
+ for (i in e.xhrFields) a[i] = e.xhrFields[i];
+ e.mimeType && a.overrideMimeType && a.overrideMimeType(e.mimeType), e.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest");
+ for (i in n) void 0 !== n[i] && a.setRequestHeader(i, n[i] + "");
+ a.send(e.hasContent && e.data || null), t = function(n, i) {
+ var s, l, u;
+ if (t && (i || 4 === a.readyState))
+ if (delete Jt[o], t = void 0, a.onreadystatechange = ie.noop, i) 4 !== a.readyState && a.abort();
+ else {
+ u = {}, s = a.status, "string" == typeof a.responseText && (u.text = a.responseText);
+ try {
+ l = a.statusText
+ } catch (c) {
+ l = ""
+ }
+ s || !e.isLocal || e.crossDomain ? 1223 === s && (s = 204) : s = u.text ? 200 : 404
+ }
+ u && r(s, l, u, a.getAllResponseHeaders())
+ }, e.async ? 4 === a.readyState ? setTimeout(t) : a.onreadystatechange = Jt[o] = t : t()
+ },
+ abort: function() {
+ t && t(void 0, !0)
+ }
+ }
+ }
+ }), ie.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function(e) {
+ return ie.globalEval(e), e
+ }
+ }
+ }), ie.ajaxPrefilter("script", function(e) {
+ void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
+ }), ie.ajaxTransport("script", function(e) {
+ if (e.crossDomain) {
+ var t, n = fe.head || ie("head")[0] || fe.documentElement;
+ return {
+ send: function(r, i) {
+ t = fe.createElement("script"), t.async = !0, e.scriptCharset && (t.charset = e.scriptCharset), t.src = e.url, t.onload = t.onreadystatechange = function(e, n) {
+ (n || !t.readyState || /loaded|complete/.test(t.readyState)) && (t.onload = t.onreadystatechange = null, t.parentNode && t.parentNode.removeChild(t), t = null, n || i(200, "success"))
+ }, n.insertBefore(t, n.firstChild)
+ },
+ abort: function() {
+ t && t.onload(void 0, !0)
+ }
+ }
+ }
+ });
+ var en = [],
+ tn = /(=)\?(?=&|$)|\?\?/;
+ ie.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var e = en.pop() || ie.expando + "_" + Pt++;
+ return this[e] = !0, e
+ }
+ }), ie.ajaxPrefilter("json jsonp", function(t, n, r) {
+ var i, a, o, s = t.jsonp !== !1 && (tn.test(t.url) ? "url" : "string" == typeof t.data && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && tn.test(t.data) && "data");
+ return s || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = ie.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, s ? t[s] = t[s].replace(tn, "$1" + i) : t.jsonp !== !1 && (t.url += (Mt.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), t.converters["script json"] = function() {
+ return o || ie.error(i + " was not called"), o[0]
+ }, t.dataTypes[0] = "json", a = e[i], e[i] = function() {
+ o = arguments
+ }, r.always(function() {
+ e[i] = a, t[i] && (t.jsonpCallback = n.jsonpCallback, en.push(i)), o && ie.isFunction(a) && a(o[0]), o = a = void 0
+ }), "script") : void 0
+ }), ie.parseHTML = function(e, t, n) {
+ if (!e || "string" != typeof e) return null;
+ "boolean" == typeof t && (n = t, t = !1), t = t || fe;
+ var r = de.exec(e),
+ i = !n && [];
+ return r ? [t.createElement(r[1])] : (r = ie.buildFragment([e], t, i), i && i.length && ie(i).remove(), ie.merge([], r.childNodes))
+ };
+ var nn = ie.fn.load;
+ ie.fn.load = function(e, t, n) {
+ if ("string" != typeof e && nn) return nn.apply(this, arguments);
+ var r, i, a, o = this,
+ s = e.indexOf(" ");
+ return s >= 0 && (r = ie.trim(e.slice(s, e.length)), e = e.slice(0, s)), ie.isFunction(t) ? (n = t, t = void 0) : t && "object" == typeof t && (a = "POST"), o.length > 0 && ie.ajax({
+ url: e,
+ type: a,
+ dataType: "html",
+ data: t
+ }).done(function(e) {
+ i = arguments, o.html(r ? ie("
").append(ie.parseHTML(e)).find(r) : e)
+ }).complete(n && function(e, t) {
+ o.each(n, i || [e.responseText, t, e])
+ }), this
+ }, ie.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
+ ie.fn[t] = function(e) {
+ return this.on(t, e)
+ }
+ }), ie.expr.filters.animated = function(e) {
+ return ie.grep(ie.timers, function(t) {
+ return e === t.elem
+ }).length
+ };
+ var rn = e.document.documentElement;
+ ie.offset = {
+ setOffset: function(e, t, n) {
+ var r, i, a, o, s, l, u, c = ie.css(e, "position"),
+ d = ie(e),
+ h = {};
+ "static" === c && (e.style.position = "relative"), s = d.offset(), a = ie.css(e, "top"), l = ie.css(e, "left"), u = ("absolute" === c || "fixed" === c) && ie.inArray("auto", [a, l]) > -1, u ? (r = d.position(), o = r.top, i = r.left) : (o = parseFloat(a) || 0, i = parseFloat(l) || 0), ie.isFunction(t) && (t = t.call(e, n, s)), null != t.top && (h.top = t.top - s.top + o), null != t.left && (h.left = t.left - s.left + i), "using" in t ? t.using.call(e, h) : d.css(h)
+ }
+ }, ie.fn.extend({
+ offset: function(e) {
+ if (arguments.length) return void 0 === e ? this : this.each(function(t) {
+ ie.offset.setOffset(this, e, t)
+ });
+ var t, n, r = {
+ top: 0,
+ left: 0
+ },
+ i = this[0],
+ a = i && i.ownerDocument;
+ if (a) return t = a.documentElement, ie.contains(t, i) ? (typeof i.getBoundingClientRect !== Ee && (r = i.getBoundingClientRect()), n = W(a), {
+ top: r.top + (n.pageYOffset || t.scrollTop) - (t.clientTop || 0),
+ left: r.left + (n.pageXOffset || t.scrollLeft) - (t.clientLeft || 0)
+ }) : r
+ },
+ position: function() {
+ if (this[0]) {
+ var e, t, n = {
+ top: 0,
+ left: 0
+ },
+ r = this[0];
+ return "fixed" === ie.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), ie.nodeName(e[0], "html") || (n = e.offset()), n.top += ie.css(e[0], "borderTopWidth", !0), n.left += ie.css(e[0], "borderLeftWidth", !0)), {
+ top: t.top - n.top - ie.css(r, "marginTop", !0),
+ left: t.left - n.left - ie.css(r, "marginLeft", !0)
+ }
+ }
+ },
+ offsetParent: function() {
+ return this.map(function() {
+ for (var e = this.offsetParent || rn; e && !ie.nodeName(e, "html") && "static" === ie.css(e, "position");) e = e.offsetParent;
+ return e || rn
+ })
+ }
+ }), ie.each({
+ scrollLeft: "pageXOffset",
+ scrollTop: "pageYOffset"
+ }, function(e, t) {
+ var n = /Y/.test(t);
+ ie.fn[e] = function(r) {
+ return Ne(this, function(e, r, i) {
+ var a = W(e);
+ return void 0 === i ? a ? t in a ? a[t] : a.document.documentElement[r] : e[r] : void(a ? a.scrollTo(n ? ie(a).scrollLeft() : i, n ? i : ie(a).scrollTop()) : e[r] = i)
+ }, e, r, arguments.length, null)
+ }
+ }), ie.each(["top", "left"], function(e, t) {
+ ie.cssHooks[t] = C(ne.pixelPosition, function(e, n) {
+ return n ? (n = tt(e, t), rt.test(n) ? ie(e).position()[t] + "px" : n) : void 0
+ })
+ }), ie.each({
+ Height: "height",
+ Width: "width"
+ }, function(e, t) {
+ ie.each({
+ padding: "inner" + e,
+ content: t,
+ "": "outer" + e
+ }, function(n, r) {
+ ie.fn[r] = function(r, i) {
+ var a = arguments.length && (n || "boolean" != typeof r),
+ o = n || (r === !0 || i === !0 ? "margin" : "border");
+ return Ne(this, function(t, n, r) {
+ var i;
+ return ie.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? ie.css(t, n, o) : ie.style(t, n, r, o)
+ }, t, a ? r : void 0, a, null)
+ }
+ })
+ }), ie.fn.size = function() {
+ return this.length
+ }, ie.fn.andSelf = ie.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
+ return ie
+ });
+ var an = e.jQuery,
+ on = e.$;
+ return ie.noConflict = function(t) {
+ return e.$ === ie && (e.$ = on), t && e.jQuery === ie && (e.jQuery = an), ie
+ }, typeof t === Ee && (e.jQuery = e.$ = ie), ie
+});
+var cytoscape;
+! function(e) {
+ "use strict";
+ var t = cytoscape = function() {
+ return cytoscape.init.apply(cytoscape, arguments)
+ };
+ t.version = "2.4.6", t.init = function(e) {
+ return void 0 === e && (e = {}), t.is.plainObject(e) ? new t.Core(e) : t.is.string(e) ? t.extension.apply(t.extension, arguments) : void 0
+ }, t.fn = {}, "undefined" != typeof module && module.exports && (module.exports = cytoscape), "undefined" != typeof define && define.amd && define("cytoscape", function() {
+ return cytoscape
+ }), e && (e.cytoscape = cytoscape)
+}("undefined" == typeof window ? null : window), this.cytoscape = cytoscape,
+ function(e) {
+ "use strict";
+ var t = 0,
+ n = 1,
+ r = 2,
+ i = function(e) {
+ return this instanceof i ? (this.id = "Thenable/1.0.7", this.state = t, this.fulfillValue = void 0, this.rejectReason = void 0, this.onFulfilled = [], this.onRejected = [], this.proxy = {
+ then: this.then.bind(this)
+ }, void("function" == typeof e && e.call(this, this.fulfill.bind(this), this.reject.bind(this)))) : new i(e)
+ };
+ i.prototype = {
+ fulfill: function(e) {
+ return a(this, n, "fulfillValue", e)
+ },
+ reject: function(e) {
+ return a(this, r, "rejectReason", e)
+ },
+ then: function(e, t) {
+ var n = this,
+ r = new i;
+ return n.onFulfilled.push(l(e, r, "fulfill")), n.onRejected.push(l(t, r, "reject")), o(n), r.proxy
+ }
+ };
+ var a = function(e, n, r, i) {
+ return e.state === t && (e.state = n, e[r] = i, o(e)), e
+ },
+ o = function(e) {
+ e.state === n ? s(e, "onFulfilled", e.fulfillValue) : e.state === r && s(e, "onRejected", e.rejectReason)
+ },
+ s = function(e, t, n) {
+ if (0 !== e[t].length) {
+ var r = e[t];
+ e[t] = [];
+ var i = function() {
+ for (var e = 0; e < r.length; e++) r[e](n)
+ };
+ "object" == typeof process && "function" == typeof process.nextTick ? process.nextTick(i) : "function" == typeof setImmediate ? setImmediate(i) : setTimeout(i, 0)
+ }
+ },
+ l = function(e, t, n) {
+ return function(r) {
+ if ("function" != typeof e) t[n].call(t, r);
+ else {
+ var i;
+ try {
+ i = e(r)
+ } catch (a) {
+ return void t.reject(a)
+ }
+ u(t, i)
+ }
+ }
+ },
+ u = function(e, t) {
+ if (e === t || e.proxy === t) return void e.reject(new TypeError("cannot resolve promise with itself"));
+ var n;
+ if ("object" == typeof t && null !== t || "function" == typeof t) try {
+ n = t.then
+ } catch (r) {
+ return void e.reject(r)
+ }
+ if ("function" != typeof n) e.fulfill(t);
+ else {
+ var i = !1;
+ try {
+ n.call(t, function(n) {
+ i || (i = !0, n === t ? e.reject(new TypeError("circular thenable chain")) : u(e, n))
+ }, function(t) {
+ i || (i = !0, e.reject(t))
+ })
+ } catch (r) {
+ i || e.reject(r)
+ }
+ }
+ };
+ e.Promise = "undefined" == typeof Promise ? i : Promise, e.Promise.all = e.Promise.all || function(t) {
+ return new e.Promise(function(e, n) {
+ for (var r = new Array(t.length), i = 0, a = function(n, a) {
+ r[n] = a, i++, i === t.length && e(r)
+ }, o = 0; o < t.length; o++) ! function(e) {
+ var r = t[e],
+ i = null != r.then;
+ if (i) r.then(function(t) {
+ a(e, t)
+ }, function(e) {
+ n(e)
+ });
+ else {
+ var o = r;
+ a(e, o)
+ }
+ }(o)
+ })
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ var n = "string",
+ r = typeof {},
+ i = "function";
+ e.is = {
+ defined: function(e) {
+ return null != e
+ },
+ string: function(e) {
+ return null != e && typeof e == n
+ },
+ fn: function(e) {
+ return null != e && typeof e === i
+ },
+ array: function(e) {
+ return Array.isArray ? Array.isArray(e) : null != e && e instanceof Array
+ },
+ plainObject: function(t) {
+ return null != t && typeof t === r && !e.is.array(t) && t.constructor === Object
+ },
+ object: function(e) {
+ return null != e && typeof e === r
+ },
+ number: function(e) {
+ return null != e && "number" == typeof e && !isNaN(e)
+ },
+ integer: function(t) {
+ return e.is.number(t) && Math.floor(t) === t
+ },
+ color: function(e) {
+ return null != e && "string" == typeof e && "" !== $.Color(e).toString()
+ },
+ bool: function(e) {
+ return null != e && typeof e == typeof !0
+ },
+ elementOrCollection: function(t) {
+ return e.is.element(t) || e.is.collection(t)
+ },
+ element: function(t) {
+ return t instanceof e.Element && t._private.single
+ },
+ collection: function(t) {
+ return t instanceof e.Collection && !t._private.single
+ },
+ core: function(t) {
+ return t instanceof e.Core
+ },
+ style: function(t) {
+ return t instanceof e.Style
+ },
+ stylesheet: function(t) {
+ return t instanceof e.Stylesheet
+ },
+ event: function(t) {
+ return t instanceof e.Event
+ },
+ thread: function(t) {
+ return t instanceof e.Thread
+ },
+ fabric: function(t) {
+ return t instanceof e.Fabric
+ },
+ emptyString: function(t) {
+ return t ? e.is.string(t) && ("" === t || t.match(/^\s+$/)) ? !0 : !1 : !0
+ },
+ nonemptyString: function(t) {
+ return t && e.is.string(t) && "" !== t && !t.match(/^\s+$/) ? !0 : !1
+ },
+ domElement: function(e) {
+ return "undefined" == typeof HTMLElement ? !1 : e instanceof HTMLElement
+ },
+ boundingBox: function(t) {
+ return e.is.plainObject(t) && e.is.number(t.x1) && e.is.number(t.x2) && e.is.number(t.y1) && e.is.number(t.y2)
+ },
+ promise: function(t) {
+ return e.is.object(t) && e.is.fn(t.then)
+ },
+ touch: function() {
+ return t && ("ontouchstart" in t || t.DocumentTouch && document instanceof DocumentTouch)
+ },
+ gecko: function() {
+ return "undefined" != typeof InstallTrigger || "MozAppearance" in document.documentElement.style
+ },
+ webkit: function() {
+ return "undefined" != typeof webkitURL || "WebkitAppearance" in document.documentElement.style
+ },
+ chromium: function() {
+ return "undefined" != typeof chrome
+ },
+ khtml: function() {
+ return navigator.vendor.match(/kde/i)
+ },
+ khtmlEtc: function() {
+ return e.is.khtml() || e.is.webkit() || e.is.chromium()
+ },
+ trident: function() {
+ return "undefined" != typeof ActiveXObject || !1
+ },
+ windows: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Win/i)
+ },
+ mac: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Mac/i)
+ },
+ linux: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/Linux/i)
+ },
+ unix: function() {
+ return "undefined" != typeof navigator && navigator.appVersion.match(/X11/i)
+ }
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.util = {
+ extend: function() {
+ var t, n, r, i, a, o, s = arguments[0] || {},
+ l = 1,
+ u = arguments.length,
+ c = !1;
+ for ("boolean" == typeof s && (c = s, s = arguments[1] || {}, l = 2), "object" == typeof s || e.is.fn(s) || (s = {}), u === l && (s = this, --l); u > l; l++)
+ if (null != (t = arguments[l]))
+ for (n in t) r = s[n], i = t[n], s !== i && (c && i && (e.is.plainObject(i) || (a = e.is.array(i))) ? (a ? (a = !1, o = r && e.is.array(r) ? r : []) : o = r && e.is.plainObject(r) ? r : {}, s[n] = e.util.extend(c, o, i)) : void 0 !== i && (s[n] = i));
+ return s
+ },
+ require: function(n, r, i) {
+ var a;
+ i = e.util.extend({
+ msgIfNotFound: !0
+ }, i);
+ var o = !1,
+ s = function(e) {
+ o = !0, r(e)
+ },
+ l = function(e) {
+ t && (a = t[n]), void 0 !== a && s(a), e && e()
+ },
+ u = function() {
+ o || c(d)
+ },
+ c = function(e) {
+ if ("undefined" != typeof module && module.exports && require) try {
+ a = require(n)
+ } catch (t) {}
+ void 0 !== a && s(a), e && e()
+ },
+ d = function() {
+ o || h(p)
+ },
+ h = function(e) {
+ "undefined" != typeof define && define.amd && require && require([n], function(t) {
+ a = t, void 0 !== a && s(a), e && e()
+ }, function(t) {
+ e && e()
+ })
+ },
+ p = function() {
+ !o && i.msgIfNotFound && e.util.error("Cytoscape.js tried to pull in dependency `" + n + "` but no module (i.e. CommonJS, AMD, or window) was found")
+ };
+ l(u)
+ },
+ requires: function(t, n) {
+ for (var r = [], i = [], a = function() {
+ for (var e = 0; e < t.length; e++)
+ if (!i[e]) return;
+ n.apply(n, r)
+ }, o = 0; o < t.length; o++) ! function() {
+ var n = t[o],
+ s = o;
+ e.util.require(n, function(e) {
+ r[s] = e, i[s] = !0, a()
+ })
+ }()
+ },
+ throttle: function(t, n, r) {
+ var i = !0,
+ a = !0;
+ return r === !1 ? i = !1 : e.is.plainObject(r) && (i = "leading" in r ? r.leading : i, a = "trailing" in r ? r.trailing : a), r = r || {}, r.leading = i, r.maxWait = n, r.trailing = a, e.util.debounce(t, n, r)
+ },
+ now: function() {
+ return +new Date
+ },
+ debounce: function(t, n, r) {
+ var i, a, o, s, l, u, c, d = 0,
+ h = !1,
+ p = !0;
+ if (e.is.fn(t)) {
+ if (n = Math.max(0, n) || 0, r === !0) {
+ var f = !0;
+ p = !1
+ } else e.is.plainObject(r) && (f = r.leading, h = "maxWait" in r && (Math.max(n, r.maxWait) || 0), p = "trailing" in r ? r.trailing : p);
+ var v = function() {
+ var r = n - (e.util.now() - s);
+ if (0 >= r) {
+ a && clearTimeout(a);
+ var h = c;
+ a = u = c = void 0, h && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null))
+ } else u = setTimeout(v, r)
+ },
+ g = function() {
+ u && clearTimeout(u), a = u = c = void 0, (p || h !== n) && (d = e.util.now(), o = t.apply(l, i), u || a || (i = l = null))
+ };
+ return function() {
+ if (i = arguments, s = e.util.now(), l = this, c = p && (u || !f), h === !1) var r = f && !u;
+ else {
+ a || f || (d = s);
+ var y = h - (s - d),
+ m = 0 >= y;
+ m ? (a && (a = clearTimeout(a)), d = s, o = t.apply(l, i)) : a || (a = setTimeout(g, y))
+ }
+ return m && u ? u = clearTimeout(u) : u || n === h || (u = setTimeout(v, n)), r && (m = !0, o = t.apply(l, i)), !m || u || a || (i = l = null), o
+ }
+ }
+ },
+ error: function(e) {
+ if (!console) throw e;
+ if (console.error) console.error.apply(console, arguments);
+ else {
+ if (!console.log) throw e;
+ console.log.apply(console, arguments)
+ }
+ },
+ clone: function(e) {
+ var t = {};
+ for (var n in e) t[n] = e[n];
+ return t
+ },
+ copy: function(t) {
+ return null == t ? t : e.is.array(t) ? t.slice() : e.is.plainObject(t) ? e.util.clone(t) : t
+ },
+ makeBoundingBox: function(e) {
+ if (null != e.x1 && null != e.y1) {
+ if (null != e.x2 && null != e.y2 && e.x2 >= e.x1 && e.y2 >= e.y1) return {
+ x1: e.x1,
+ y1: e.y1,
+ x2: e.x2,
+ y2: e.y2,
+ w: e.x2 - e.x1,
+ h: e.y2 - e.y1
+ };
+ if (null != e.w && null != e.h && e.w >= 0 && e.h >= 0) return {
+ x1: e.x1,
+ y1: e.y1,
+ x2: e.x1 + e.w,
+ y2: e.y1 + e.h,
+ w: e.w,
+ h: e.h
+ }
+ }
+ },
+ mapEmpty: function(e) {
+ var t = !0;
+ if (null != e)
+ for (var n in e) {
+ t = !1;
+ break
+ }
+ return t
+ },
+ pushMap: function(t) {
+ var n = e.util.getMap(t);
+ null == n ? e.util.setMap($.extend({}, t, {
+ value: [t.value]
+ })) : n.push(t.value)
+ },
+ setMap: function(t) {
+ for (var n, r = t.map, i = t.keys, a = i.length, o = 0; a > o; o++) {
+ var n = i[o];
+ e.is.plainObject(n) && e.util.error("Tried to set map with object key"), o < i.length - 1 ? (null == r[n] && (r[n] = {}), r = r[n]) : r[n] = t.value
+ }
+ },
+ getMap: function(t) {
+ for (var n = t.map, r = t.keys, i = r.length, a = 0; i > a; a++) {
+ var o = r[a];
+ if (e.is.plainObject(o) && e.util.error("Tried to get map with object key"), n = n[o], null == n) return n
+ }
+ return n
+ },
+ deleteMap: function(t) {
+ for (var n = t.map, r = t.keys, i = r.length, a = t.keepChildren, o = 0; i > o; o++) {
+ var s = r[o];
+ e.is.plainObject(s) && e.util.error("Tried to delete map with object key");
+ var l = o === t.keys.length - 1;
+ if (l)
+ if (a)
+ for (var u in n) a[u] || (n[u] = void 0);
+ else n[s] = void 0;
+ else n = n[s]
+ }
+ },
+ capitalize: function(t) {
+ return e.is.emptyString(t) ? t : t.charAt(0).toUpperCase() + t.substring(1)
+ },
+ trim: function(e) {
+ var t, n;
+ for (t = 0; t < e.length && " " === e[t]; t++);
+ for (n = e.length - 1; n > t && " " === e[n]; n--);
+ return e.substring(t, n + 1)
+ },
+ hex2tuple: function(e) {
+ if ((4 === e.length || 7 === e.length) && "#" === e[0]) {
+ var t, n, r, i = 4 === e.length,
+ a = 16;
+ return i ? (t = parseInt(e[1] + e[1], a), n = parseInt(e[2] + e[2], a), r = parseInt(e[3] + e[3], a)) : (t = parseInt(e[1] + e[2], a), n = parseInt(e[3] + e[4], a), r = parseInt(e[5] + e[6], a)), [t, n, r]
+ }
+ },
+ hsl2tuple: function(t) {
+ function n(e, t, n) {
+ return 0 > n && (n += 1), n > 1 && (n -= 1), 1 / 6 > n ? e + 6 * (t - e) * n : .5 > n ? t : 2 / 3 > n ? e + (t - e) * (2 / 3 - n) * 6 : e
+ }
+ var r, i, a, o, s, l, u, c, d = new RegExp("^" + e.util.regex.hsla + "$").exec(t);
+ if (d) {
+ if (i = parseInt(d[1]), 0 > i ? i = (360 - -1 * i % 360) % 360 : i > 360 && (i %= 360), i /= 360, a = parseFloat(d[2]), 0 > a || a > 100) return;
+ if (a /= 100, o = parseFloat(d[3]), 0 > o || o > 100) return;
+ if (o /= 100, s = d[4], void 0 !== s && (s = parseFloat(s), 0 > s || s > 1)) return;
+ if (0 === a) l = u = c = Math.round(255 * o);
+ else {
+ var h = .5 > o ? o * (1 + a) : o + a - o * a,
+ p = 2 * o - h;
+ l = Math.round(255 * n(p, h, i + 1 / 3)), u = Math.round(255 * n(p, h, i)), c = Math.round(255 * n(p, h, i - 1 / 3))
+ }
+ r = [l, u, c, s]
+ }
+ return r
+ },
+ rgb2tuple: function(t) {
+ var n, r = new RegExp("^" + e.util.regex.rgba + "$").exec(t);
+ if (r) {
+ n = [];
+ for (var i = [], a = 1; 3 >= a; a++) {
+ var o = r[a];
+ if ("%" === o[o.length - 1] && (i[a] = !0), o = parseFloat(o), i[a] && (o = o / 100 * 255), 0 > o || o > 255) return;
+ n.push(Math.floor(o))
+ }
+ var s = i[1] || i[2] || i[3],
+ l = i[1] && i[2] && i[3];
+ if (s && !l) return;
+ var u = r[4];
+ if (void 0 !== u) {
+ if (u = parseFloat(u), 0 > u || u > 1) return;
+ n.push(u)
+ }
+ }
+ return n
+ },
+ colorname2tuple: function(t) {
+ return e.util.colors[t.toLowerCase()]
+ },
+ color2tuple: function(t) {
+ return (e.is.array(t) ? t : null) || e.util.colorname2tuple(t) || e.util.hex2tuple(t) || e.util.rgb2tuple(t) || e.util.hsl2tuple(t)
+ },
+ tuple2hex: function(e) {
+ function t(e) {
+ var t = e.toString(16);
+ return 1 === t.length && (t = "0" + t), t
+ }
+ var n = e[0],
+ r = e[1],
+ i = e[2];
+ return "#" + t(n) + t(r) + t(i)
+ },
+ colors: {
+ transparent: [0, 0, 0, 0],
+ aliceblue: [240, 248, 255],
+ antiquewhite: [250, 235, 215],
+ aqua: [0, 255, 255],
+ aquamarine: [127, 255, 212],
+ azure: [240, 255, 255],
+ beige: [245, 245, 220],
+ bisque: [255, 228, 196],
+ black: [0, 0, 0],
+ blanchedalmond: [255, 235, 205],
+ blue: [0, 0, 255],
+ blueviolet: [138, 43, 226],
+ brown: [165, 42, 42],
+ burlywood: [222, 184, 135],
+ cadetblue: [95, 158, 160],
+ chartreuse: [127, 255, 0],
+ chocolate: [210, 105, 30],
+ coral: [255, 127, 80],
+ cornflowerblue: [100, 149, 237],
+ cornsilk: [255, 248, 220],
+ crimson: [220, 20, 60],
+ cyan: [0, 255, 255],
+ darkblue: [0, 0, 139],
+ darkcyan: [0, 139, 139],
+ darkgoldenrod: [184, 134, 11],
+ darkgray: [169, 169, 169],
+ darkgreen: [0, 100, 0],
+ darkgrey: [169, 169, 169],
+ darkkhaki: [189, 183, 107],
+ darkmagenta: [139, 0, 139],
+ darkolivegreen: [85, 107, 47],
+ darkorange: [255, 140, 0],
+ darkorchid: [153, 50, 204],
+ darkred: [139, 0, 0],
+ darksalmon: [233, 150, 122],
+ darkseagreen: [143, 188, 143],
+ darkslateblue: [72, 61, 139],
+ darkslategray: [47, 79, 79],
+ darkslategrey: [47, 79, 79],
+ darkturquoise: [0, 206, 209],
+ darkviolet: [148, 0, 211],
+ deeppink: [255, 20, 147],
+ deepskyblue: [0, 191, 255],
+ dimgray: [105, 105, 105],
+ dimgrey: [105, 105, 105],
+ dodgerblue: [30, 144, 255],
+ firebrick: [178, 34, 34],
+ floralwhite: [255, 250, 240],
+ forestgreen: [34, 139, 34],
+ fuchsia: [255, 0, 255],
+ gainsboro: [220, 220, 220],
+ ghostwhite: [248, 248, 255],
+ gold: [255, 215, 0],
+ goldenrod: [218, 165, 32],
+ gray: [128, 128, 128],
+ grey: [128, 128, 128],
+ green: [0, 128, 0],
+ greenyellow: [173, 255, 47],
+ honeydew: [240, 255, 240],
+ hotpink: [255, 105, 180],
+ indianred: [205, 92, 92],
+ indigo: [75, 0, 130],
+ ivory: [255, 255, 240],
+ khaki: [240, 230, 140],
+ lavender: [230, 230, 250],
+ lavenderblush: [255, 240, 245],
+ lawngreen: [124, 252, 0],
+ lemonchiffon: [255, 250, 205],
+ lightblue: [173, 216, 230],
+ lightcoral: [240, 128, 128],
+ lightcyan: [224, 255, 255],
+ lightgoldenrodyellow: [250, 250, 210],
+ lightgray: [211, 211, 211],
+ lightgreen: [144, 238, 144],
+ lightgrey: [211, 211, 211],
+ lightpink: [255, 182, 193],
+ lightsalmon: [255, 160, 122],
+ lightseagreen: [32, 178, 170],
+ lightskyblue: [135, 206, 250],
+ lightslategray: [119, 136, 153],
+ lightslategrey: [119, 136, 153],
+ lightsteelblue: [176, 196, 222],
+ lightyellow: [255, 255, 224],
+ lime: [0, 255, 0],
+ limegreen: [50, 205, 50],
+ linen: [250, 240, 230],
+ magenta: [255, 0, 255],
+ maroon: [128, 0, 0],
+ mediumaquamarine: [102, 205, 170],
+ mediumblue: [0, 0, 205],
+ mediumorchid: [186, 85, 211],
+ mediumpurple: [147, 112, 219],
+ mediumseagreen: [60, 179, 113],
+ mediumslateblue: [123, 104, 238],
+ mediumspringgreen: [0, 250, 154],
+ mediumturquoise: [72, 209, 204],
+ mediumvioletred: [199, 21, 133],
+ midnightblue: [25, 25, 112],
+ mintcream: [245, 255, 250],
+ mistyrose: [255, 228, 225],
+ moccasin: [255, 228, 181],
+ navajowhite: [255, 222, 173],
+ navy: [0, 0, 128],
+ oldlace: [253, 245, 230],
+ olive: [128, 128, 0],
+ olivedrab: [107, 142, 35],
+ orange: [255, 165, 0],
+ orangered: [255, 69, 0],
+ orchid: [218, 112, 214],
+ palegoldenrod: [238, 232, 170],
+ palegreen: [152, 251, 152],
+ paleturquoise: [175, 238, 238],
+ palevioletred: [219, 112, 147],
+ papayawhip: [255, 239, 213],
+ peachpuff: [255, 218, 185],
+ peru: [205, 133, 63],
+ pink: [255, 192, 203],
+ plum: [221, 160, 221],
+ powderblue: [176, 224, 230],
+ purple: [128, 0, 128],
+ red: [255, 0, 0],
+ rosybrown: [188, 143, 143],
+ royalblue: [65, 105, 225],
+ saddlebrown: [139, 69, 19],
+ salmon: [250, 128, 114],
+ sandybrown: [244, 164, 96],
+ seagreen: [46, 139, 87],
+ seashell: [255, 245, 238],
+ sienna: [160, 82, 45],
+ silver: [192, 192, 192],
+ skyblue: [135, 206, 235],
+ slateblue: [106, 90, 205],
+ slategray: [112, 128, 144],
+ slategrey: [112, 128, 144],
+ snow: [255, 250, 250],
+ springgreen: [0, 255, 127],
+ steelblue: [70, 130, 180],
+ tan: [210, 180, 140],
+ teal: [0, 128, 128],
+ thistle: [216, 191, 216],
+ tomato: [255, 99, 71],
+ turquoise: [64, 224, 208],
+ violet: [238, 130, 238],
+ wheat: [245, 222, 179],
+ white: [255, 255, 255],
+ whitesmoke: [245, 245, 245],
+ yellow: [255, 255, 0],
+ yellowgreen: [154, 205, 50]
+ },
+ memoize: function(e, t) {
+ var n = this,
+ r = {};
+ return t || (t = function() {
+ if (1 === arguments.length) return arguments[0];
+ for (var e = [], t = 0; t < arguments.length; t++) e.push(arguments[t]);
+ return e.join("$")
+ }),
+ function() {
+ var i, a = arguments,
+ o = t.apply(n, a);
+ return (i = r[o]) || (i = r[o] = e.apply(n, a)), i
+ }
+ }
+ }, e.util.camel2dash = e.util.memoize(function(e) {
+ for (var t = [], n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = r.toLowerCase(),
+ a = r !== i;
+ a ? (t.push("-"), t.push(i)) : t.push(r)
+ }
+ var o = t.length === e.length;
+ return o ? e : t.join("")
+ }), e.util.dash2camel = e.util.memoize(function(e) {
+ for (var t = [], n = !1, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = "-" === i;
+ a ? n = !0 : (n ? t.push(i.toUpperCase()) : t.push(i), n = !1)
+ }
+ return t.join("")
+ }), e.util.regex = {}, e.util.regex.number = "(?:[-]?\\d*\\.\\d+|[-]?\\d+|[-]?\\d*\\.\\d+[eE]\\d+)", e.util.regex.rgba = "rgb[a]?\\((" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)\\s*,\\s*(" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.rgbaNoBackRefs = "rgb[a]?\\((?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)\\s*,\\s*(?:" + e.util.regex.number + "[%]?)(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hsla = "hsl[a]?\\((" + e.util.regex.number + ")\\s*,\\s*(" + e.util.regex.number + "[%])\\s*,\\s*(" + e.util.regex.number + "[%])(?:\\s*,\\s*(" + e.util.regex.number + "))?\\)", e.util.regex.hslaNoBackRefs = "hsl[a]?\\((?:" + e.util.regex.number + ")\\s*,\\s*(?:" + e.util.regex.number + "[%])\\s*,\\s*(?:" + e.util.regex.number + "[%])(?:\\s*,\\s*(?:" + e.util.regex.number + "))?\\)", e.util.regex.hex3 = "\\#[0-9a-fA-F]{3}", e.util.regex.hex6 = "\\#[0-9a-fA-F]{6}";
+ var n = t ? t.requestAnimationFrame || t.mozRequestAnimationFrame || t.webkitRequestAnimationFrame || t.msRequestAnimationFrame : null;
+ n = n || function(e) {
+ e && setTimeout(e, 1e3 / 60)
+ }, e.util.requestAnimationFrame = function(e) {
+ n(e)
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.math = {}, e.math.signum = function(e) {
+ return e > 0 ? 1 : 0 > e ? -1 : 0
+ }, e.math.distance = function(e, t) {
+ var n = t.x - e.x,
+ r = t.y - e.y;
+ return Math.sqrt(n * n + r * r)
+ }, e.math.qbezierAt = function(e, t, n, r) {
+ return (1 - r) * (1 - r) * e + 2 * (1 - r) * r * t + r * r * n
+ }, e.math.qbezierPtAt = function(t, n, r, i) {
+ return {
+ x: e.math.qbezierAt(t.x, n.x, r.x, i),
+ y: e.math.qbezierAt(t.y, n.y, r.y, i)
+ }
+ }, e.math.boundingBoxesIntersect = function(e, t) {
+ return e.x1 > t.x2 ? !1 : t.x1 > e.x2 ? !1 : e.x2 < t.x1 ? !1 : t.x2 < e.x1 ? !1 : e.y2 < t.y1 ? !1 : t.y2 < e.y1 ? !1 : e.y1 > t.y2 ? !1 : t.y1 > e.y2 ? !1 : !0
+ }, e.math.inBoundingBox = function(e, t, n) {
+ return e.x1 <= t && t <= e.x2 && e.y1 <= n && n <= e.y2
+ }, e.math.pointInBoundingBox = function(e, t) {
+ return this.inBoundingBox(e, t.x, t.y)
+ }, e.math.roundRectangleIntersectLine = function(e, t, n, r, i, a, o) {
+ var s, l = this.getRoundRectangleRadius(i, a),
+ u = i / 2,
+ c = a / 2,
+ d = n - u + l - o,
+ h = r - c - o,
+ p = n + u - l + o,
+ f = h;
+ if (s = this.finiteLinesIntersect(e, t, n, r, d, h, p, f, !1), s.length > 0) return s;
+ var v = n + u + o,
+ g = r - c + l - o,
+ y = v,
+ m = r + c - l + o;
+ if (s = this.finiteLinesIntersect(e, t, n, r, v, g, y, m, !1), s.length > 0) return s;
+ var x = n - u + l - o,
+ b = r + c + o,
+ w = n + u - l + o,
+ _ = b;
+ if (s = this.finiteLinesIntersect(e, t, n, r, x, b, w, _, !1), s.length > 0) return s;
+ var E = n - u - o,
+ T = r - c + l - o,
+ S = E,
+ C = r + c - l + o;
+ if (s = this.finiteLinesIntersect(e, t, n, r, E, T, S, C, !1), s.length > 0) return s;
+ var k, D = n - u + l,
+ N = r - c + l;
+ if (k = this.intersectLineCircle(e, t, n, r, D, N, l + o), k.length > 0 && k[0] <= D && k[1] <= N) return [k[0], k[1]];
+ var P = n + u - l,
+ M = r - c + l;
+ if (k = this.intersectLineCircle(e, t, n, r, P, M, l + o), k.length > 0 && k[0] >= P && k[1] <= M) return [k[0], k[1]];
+ var B = n + u - l,
+ L = r + c - l;
+ if (k = this.intersectLineCircle(e, t, n, r, B, L, l + o), k.length > 0 && k[0] >= B && k[1] >= L) return [k[0], k[1]];
+ var O = n - u + l,
+ A = r + c - l;
+ return k = this.intersectLineCircle(e, t, n, r, O, A, l + o), k.length > 0 && k[0] <= O && k[1] >= A ? [k[0], k[1]] : []
+ }, e.math.roundRectangleIntersectBox = function(e, t, n, r, i, a, o, s, l) {
+ var u = this.getRoundRectangleRadius(i, a),
+ c = o - i / 2 - l,
+ d = s - a / 2 + u - l,
+ h = o + i / 2 + l,
+ p = s + a / 2 - u + l,
+ f = o - i / 2 + u - l,
+ v = s - a / 2 - l,
+ g = o + i / 2 - u + l,
+ y = s + a / 2 + l,
+ m = Math.min(e, n),
+ x = Math.max(e, n),
+ b = Math.min(t, r),
+ w = Math.max(t, r);
+ return c > x ? !1 : m > h ? !1 : v > w ? !1 : b > y ? !1 : c >= m && x >= c && d >= b && w >= d ? !0 : h >= m && x >= h && d >= b && w >= d ? !0 : h >= m && x >= h && p >= b && w >= p ? !0 : c >= m && x >= c && p >= b && w >= p ? !0 : m >= c && h >= m && b >= d && p >= b ? !0 : x >= c && h >= x && b >= d && p >= b ? !0 : x >= c && h >= x && w >= d && p >= w ? !0 : m >= c && h >= m && w >= d && p >= w ? !0 : f >= m && x >= f && v >= b && w >= v ? !0 : g >= m && x >= g && v >= b && w >= v ? !0 : g >= m && x >= g && y >= b && w >= y ? !0 : f >= m && x >= f && y >= b && w >= y ? !0 : m >= f && g >= m && b >= v && y >= b ? !0 : x >= f && g >= x && b >= v && y >= b ? !0 : x >= f && g >= x && w >= v && y >= w ? !0 : m >= f && g >= m && w >= v && y >= w ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, d + l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, g - l, p - l) ? !0 : this.boxIntersectEllipse(m, b, x, w, l, 2 * u, 2 * u, f + l, p - l) ? !0 : !1
+ }, e.math.checkInBoundingCircle = function(e, t, n, r, i, a, o, s) {
+ return e = (e - o) / (i + r), t = (t - s) / (a + r), n >= e * e + t * t
+ }, e.math.boxInBezierVicinity = function(e, t, n, r, i, a, o, s, l, u, c) {
+ var d = .25 * i + .5 * o + .25 * l,
+ h = .25 * a + .5 * s + .25 * u,
+ p = Math.min(e, n) - c,
+ f = Math.min(t, r) - c,
+ v = Math.max(e, n) + c,
+ g = Math.max(t, r) + c;
+ if (i >= p && v >= i && a >= f && g >= a) return 1;
+ if (l >= p && v >= l && u >= f && g >= u) return 1;
+ if (d >= p && v >= d && h >= f && g >= h) return 1;
+ if (o >= p && v >= o && s >= f && g >= s) return 1;
+ var y = Math.min(i, d, l),
+ m = Math.min(a, h, u),
+ x = Math.max(i, d, l),
+ b = Math.max(a, h, u);
+ return y > v || p > x || m > g || f > b ? 0 : 1
+ }, e.math.checkBezierInBox = function(t, n, r, i, a, o, s, l, u, c, d) {
+ function h(d) {
+ var h = e.math.qbezierAt(a, s, u, d),
+ p = e.math.qbezierAt(o, l, c, d);
+ return h >= t && r >= h && p >= n && i >= p
+ }
+ for (var p = 0; 1 >= p; p += .25)
+ if (!h(p)) return !1;
+ return !0
+ }, e.math.checkStraightEdgeInBox = function(e, t, n, r, i, a, o, s, l) {
+ return i >= e && n >= i && o >= e && n >= o && a >= t && r >= a && s >= t && r >= s
+ }, e.math.checkStraightEdgeCrossesBox = function(e, t, n, r, i, a, o, s, l) {
+ var u, c, d = Math.min(e, n) - l,
+ h = Math.min(t, r) - l,
+ p = Math.max(e, n) + l,
+ f = Math.max(t, r) + l,
+ v = o - i,
+ g = i,
+ y = s - a,
+ m = a;
+ if (Math.abs(v) < 1e-4) return i >= d && p >= i && Math.min(a, s) <= h && Math.max(a, s) >= f;
+ var x = (d - g) / v;
+ if (x > 0 && 1 >= x && (u = y * x + m, u >= h && f >= u)) return !0;
+ var b = (p - g) / v;
+ if (b > 0 && 1 >= b && (u = y * b + m, u >= h && f >= u)) return !0;
+ var w = (h - m) / y;
+ if (w > 0 && 1 >= w && (c = v * w + g, c >= d && p >= c)) return !0;
+ var _ = (f - m) / y;
+ return _ > 0 && 1 >= _ && (c = v * _ + g, c >= d && p >= c) ? !0 : !1
+ }, e.math.checkBezierCrossesBox = function(e, t, n, r, i, a, o, s, l, u, c) {
+ var d = Math.min(e, n) - c,
+ h = Math.min(t, r) - c,
+ p = Math.max(e, n) + c,
+ f = Math.max(t, r) + c;
+ if (i >= d && p >= i && a >= h && f >= a) return !0;
+ if (l >= d && p >= l && u >= h && f >= u) return !0;
+ var v = i - 2 * o + l,
+ g = -2 * i + 2 * o,
+ y = i,
+ m = [];
+ if (Math.abs(v) < 1e-4) {
+ var x = (d - i) / g,
+ b = (p - i) / g;
+ m.push(x, b)
+ } else {
+ var w, _, E = g * g - 4 * v * (y - d);
+ if (E > 0) {
+ var T = Math.sqrt(E);
+ w = (-g + T) / (2 * v), _ = (-g - T) / (2 * v), m.push(w, _)
+ }
+ var S, C, k = g * g - 4 * v * (y - p);
+ if (k > 0) {
+ var T = Math.sqrt(k);
+ S = (-g + T) / (2 * v), C = (-g - T) / (2 * v), m.push(S, C)
+ }
+ }
+ m.sort(function(e, t) {
+ return e - t
+ });
+ var D = a - 2 * s + u,
+ N = -2 * a + 2 * s,
+ P = a,
+ M = [];
+ if (Math.abs(D) < 1e-4) {
+ var B = (h - a) / N,
+ L = (f - a) / N;
+ M.push(B, L)
+ } else {
+ var O, A, I = N * N - 4 * D * (P - h);
+ if (I > 0) {
+ var T = Math.sqrt(I);
+ O = (-N + T) / (2 * D), A = (-N - T) / (2 * D), M.push(O, A)
+ }
+ var z, R, j = N * N - 4 * D * (P - f);
+ if (j > 0) {
+ var T = Math.sqrt(j);
+ z = (-N + T) / (2 * D), R = (-N - T) / (2 * D), M.push(z, R)
+ }
+ }
+ M.sort(function(e, t) {
+ return e - t
+ });
+ for (var F = 0; F < m.length; F += 2)
+ for (var q = 1; q < M.length; q += 2)
+ if (m[F] < M[q] && M[q] >= 0 && m[F] <= 1 && m[F + 1] > M[q - 1] && M[q - 1] <= 1 && m[F + 1] >= 0) return !0;
+ return !1
+ }, e.math.inLineVicinity = function(e, t, n, r, i, a, o) {
+ var s = o,
+ l = Math.min(n, i),
+ u = Math.max(n, i),
+ c = Math.min(r, a),
+ d = Math.max(r, a);
+ return e >= l - s && u + s >= e && t >= c - s && d + s >= t
+ }, e.math.inBezierVicinity = function(e, t, n, r, i, a, o, s, l) {
+ var u = {
+ x1: Math.min(n, o, i),
+ x2: Math.max(n, o, i),
+ y1: Math.min(r, s, a),
+ y2: Math.max(r, s, a)
+ };
+ return e < u.x1 || e > u.x2 || t < u.y1 || t > u.y2 ? !1 : !0
+ }, e.math.solveCubic = function(e, t, n, r, i) {
+ t /= e, n /= e, r /= e;
+ var a, o, s, l, u, c, d, h;
+ return o = (3 * n - t * t) / 9, s = -(27 * r) + t * (9 * n - 2 * (t * t)), s /= 54, a = o * o * o + s * s, i[1] = 0, d = t / 3, a > 0 ? (u = s + Math.sqrt(a), u = 0 > u ? -Math.pow(-u, 1 / 3) : Math.pow(u, 1 / 3), c = s - Math.sqrt(a), c = 0 > c ? -Math.pow(-c, 1 / 3) : Math.pow(c, 1 / 3), i[0] = -d + u + c, d += (u + c) / 2, i[4] = i[2] = -d, d = Math.sqrt(3) * (-c + u) / 2, i[3] = d, void(i[5] = -d)) : (i[5] = i[3] = 0, 0 === a ? (h = 0 > s ? -Math.pow(-s, 1 / 3) : Math.pow(s, 1 / 3), i[0] = -d + 2 * h, void(i[4] = i[2] = -(h + d))) : (o = -o, l = o * o * o, l = Math.acos(s / Math.sqrt(l)), h = 2 * Math.sqrt(o), i[0] = -d + h * Math.cos(l / 3), i[2] = -d + h * Math.cos((l + 2 * Math.PI) / 3), void(i[4] = -d + h * Math.cos((l + 4 * Math.PI) / 3))))
+ }, e.math.sqDistanceToQuadraticBezier = function(e, t, n, r, i, a, o, s) {
+ var l = 1 * n * n - 4 * n * i + 2 * n * o + 4 * i * i - 4 * i * o + o * o + r * r - 4 * r * a + 2 * r * s + 4 * a * a - 4 * a * s + s * s,
+ u = 9 * n * i - 3 * n * n - 3 * n * o - 6 * i * i + 3 * i * o + 9 * r * a - 3 * r * r - 3 * r * s - 6 * a * a + 3 * a * s,
+ c = 3 * n * n - 6 * n * i + n * o - n * e + 2 * i * i + 2 * i * e - o * e + 3 * r * r - 6 * r * a + r * s - r * t + 2 * a * a + 2 * a * t - s * t,
+ d = 1 * n * i - n * n + n * e - i * e + r * a - r * r + r * t - a * t,
+ h = [];
+ this.solveCubic(l, u, c, d, h);
+ for (var p = 1e-7, f = [], v = 0; 6 > v; v += 2) Math.abs(h[v + 1]) < p && h[v] >= 0 && h[v] <= 1 && f.push(h[v]);
+ f.push(1), f.push(0);
+ for (var g, y, m, x, b = -1, w = 0; w < f.length; w++) y = Math.pow(1 - f[w], 2) * n + 2 * (1 - f[w]) * f[w] * i + f[w] * f[w] * o, m = Math.pow(1 - f[w], 2) * r + 2 * (1 - f[w]) * f[w] * a + f[w] * f[w] * s, x = Math.pow(y - e, 2) + Math.pow(m - t, 2), b >= 0 ? b > x && (b = x, g = f[w]) : (b = x, g = f[w]);
+ return b
+ }, e.math.sqDistanceToFiniteLine = function(e, t, n, r, i, a) {
+ var o = [e - n, t - r],
+ s = [i - n, a - r],
+ l = s[0] * s[0] + s[1] * s[1],
+ u = o[0] * o[0] + o[1] * o[1],
+ c = o[0] * s[0] + o[1] * s[1],
+ d = c * c / l;
+ return 0 > c ? u : d > l ? (e - i) * (e - i) + (t - a) * (t - a) : u - d
+ }, e.math.pointInsidePolygon = function(e, t, n, r, i, a, o, s, l) {
+ var u = new Array(n.length),
+ c = Math.asin(s[1] / Math.sqrt(s[0] * s[0] + s[1] * s[1]));
+ s[0] < 0 ? c += Math.PI / 2 : c = -c - Math.PI / 2;
+ for (var d = Math.cos(-c), h = Math.sin(-c), p = 0; p < u.length / 2; p++) u[2 * p] = a / 2 * (n[2 * p] * d - n[2 * p + 1] * h), u[2 * p + 1] = o / 2 * (n[2 * p + 1] * d + n[2 * p] * h), u[2 * p] += r, u[2 * p + 1] += i;
+ var f;
+ if (l > 0) {
+ var v = this.expandPolygon(u, -l);
+ f = this.joinLines(v)
+ } else f = u;
+ for (var g, y, m, x, b, w = 0, _ = 0, p = 0; p < f.length / 2; p++)
+ if (g = f[2 * p], y = f[2 * p + 1], p + 1 < f.length / 2 ? (m = f[2 * (p + 1)], x = f[2 * (p + 1) + 1]) : (m = f[2 * (p + 1 - f.length / 2)], x = f[2 * (p + 1 - f.length / 2) + 1]), g == e && m == e);
+ else {
+ if (!(g >= e && e >= m || e >= g && m >= e)) continue;
+ b = (e - g) / (m - g) * (x - y) + y, b > t && w++, t > b && _++
+ }
+ return w % 2 === 0 ? !1 : !0
+ }, e.math.joinLines = function(e) {
+ for (var t, n, r, i, a, o, s, l, u = new Array(e.length / 2), c = 0; c < e.length / 4; c++) {
+ t = e[4 * c], n = e[4 * c + 1], r = e[4 * c + 2], i = e[4 * c + 3], c < e.length / 4 - 1 ? (a = e[4 * (c + 1)], o = e[4 * (c + 1) + 1], s = e[4 * (c + 1) + 2], l = e[4 * (c + 1) + 3]) : (a = e[0], o = e[1], s = e[2], l = e[3]);
+ var d = this.finiteLinesIntersect(t, n, r, i, a, o, s, l, !0);
+ u[2 * c] = d[0], u[2 * c + 1] = d[1]
+ }
+ return u
+ }, e.math.expandPolygon = function(e, t) {
+ for (var n, r, i, a, o = new Array(2 * e.length), s = 0; s < e.length / 2; s++) {
+ n = e[2 * s], r = e[2 * s + 1], s < e.length / 2 - 1 ? (i = e[2 * (s + 1)], a = e[2 * (s + 1) + 1]) : (i = e[0], a = e[1]);
+ var l = a - r,
+ u = -(i - n),
+ c = Math.sqrt(l * l + u * u),
+ d = l / c,
+ h = u / c;
+ o[4 * s] = n + d * t, o[4 * s + 1] = r + h * t, o[4 * s + 2] = i + d * t, o[4 * s + 3] = a + h * t
+ }
+ return o
+ }, e.math.intersectLineEllipse = function(e, t, n, r, i, a) {
+ var o = n - e,
+ s = r - t;
+ o /= i, s /= a;
+ var l = Math.sqrt(o * o + s * s),
+ u = l - 1;
+ if (0 > u) return [];
+ var c = u / l;
+ return [(n - e) * c + e, (r - t) * c + t]
+ }, e.math.dotProduct = function(e, t) {
+ if (2 != e.length || 2 != t.length) throw "dot product: arguments are not vectors";
+ return e[0] * t[0] + e[1] * t[1]
+ }, e.math.intersectLineCircle = function(e, t, n, r, i, a, o) {
+ var s = [n - e, r - t],
+ l = [i, a],
+ u = [e - i, t - a],
+ c = s[0] * s[0] + s[1] * s[1],
+ d = 2 * (u[0] * s[0] + u[1] * s[1]),
+ l = u[0] * u[0] + u[1] * u[1] - o * o,
+ h = d * d - 4 * c * l;
+ if (0 > h) return [];
+ var p = (-d + Math.sqrt(h)) / (2 * c),
+ f = (-d - Math.sqrt(h)) / (2 * c),
+ v = Math.min(p, f),
+ g = Math.max(p, f),
+ y = [];
+ if (v >= 0 && 1 >= v && y.push(v), g >= 0 && 1 >= g && y.push(g), 0 === y.length) return [];
+ var m = y[0] * s[0] + e,
+ x = y[0] * s[1] + t;
+ if (y.length > 1) {
+ if (y[0] == y[1]) return [m, x];
+ var b = y[1] * s[0] + e,
+ w = y[1] * s[1] + t;
+ return [m, x, b, w]
+ }
+ return [m, x]
+ }, e.math.findCircleNearPoint = function(e, t, n, r, i) {
+ var a = r - e,
+ o = i - t,
+ s = Math.sqrt(a * a + o * o),
+ l = a / s,
+ u = o / s;
+ return [e + l * n, t + u * n]
+ }, e.math.findMaxSqDistanceToOrigin = function(e) {
+ for (var t, n = 1e-6, r = 0; r < e.length / 2; r++) t = e[2 * r] * e[2 * r] + e[2 * r + 1] * e[2 * r + 1], t > n && (n = t);
+ return n
+ }, e.math.finiteLinesIntersect = function(e, t, n, r, i, a, o, s, l) {
+ var u = (o - i) * (t - a) - (s - a) * (e - i),
+ c = (n - e) * (t - a) - (r - t) * (e - i),
+ d = (s - a) * (n - e) - (o - i) * (r - t);
+ if (0 !== d) {
+ var h = u / d,
+ p = c / d;
+ return h >= 0 && 1 >= h && p >= 0 && 1 >= p ? [e + h * (n - e), t + h * (r - t)] : l ? [e + h * (n - e), t + h * (r - t)] : []
+ }
+ return 0 === u || 0 === c ? [e, n, o].sort()[1] === o ? [o, s] : [e, n, i].sort()[1] === i ? [i, a] : [i, o, n].sort()[1] === n ? [n, r] : [] : []
+ }, e.math.boxIntersectEllipse = function(e, t, n, r, i, a, o, s, l) {
+ if (e > n) {
+ var u = e;
+ e = n, n = u
+ }
+ if (t > r) {
+ var c = t;
+ t = r, r = c
+ }
+ var d = [s - a / 2 - i, l],
+ h = [s + a / 2 + i, l],
+ p = [s, l - o / 2 - i],
+ f = [s, l + o / 2 + i];
+ return n < d[0] ? !1 : e > h[0] ? !1 : t > f[1] ? !1 : r < p[1] ? !1 : e <= h[0] && h[0] <= n && t <= h[1] && h[1] <= r ? !0 : e <= d[0] && d[0] <= n && t <= d[1] && d[1] <= r ? !0 : e <= p[0] && p[0] <= n && t <= p[1] && p[1] <= r ? !0 : e <= f[0] && f[0] <= n && t <= f[1] && f[1] <= r ? !0 : (e = (e - s) / (a / 2 + i), n = (n - s) / (a / 2 + i), t = (t - l) / (o / 2 + i), r = (r - l) / (o / 2 + i), 1 >= e * e + t * t ? !0 : 1 >= n * n + t * t ? !0 : 1 >= n * n + r * r ? !0 : 1 >= e * e + r * r ? !0 : !1)
+ }, e.math.boxIntersectPolygon = function(t, n, r, i, a, o, s, l, u, c, d) {
+ if (t > r) {
+ var h = t;
+ t = r, r = h
+ }
+ if (n > i) {
+ var p = n;
+ n = i, i = p
+ }
+ var f = new Array(a.length),
+ v = Math.asin(c[1] / Math.sqrt(c[0] * c[0] + c[1] * c[1]));
+ c[0] < 0 ? v += Math.PI / 2 : v = -v - Math.PI / 2;
+ for (var g = Math.cos(-v), y = Math.sin(-v), m = 0; m < f.length / 2; m++) f[2 * m] = o / 2 * (a[2 * m] * g - a[2 * m + 1] * y), f[2 * m + 1] = s / 2 * (a[2 * m + 1] * g + a[2 * m] * y), f[2 * m] += l, f[2 * m + 1] += u;
+ for (var x = f[0], b = f[0], w = f[1], _ = f[1], m = 1; m < f.length / 2; m++) f[2 * m] > b && (b = f[2 * m]), f[2 * m] < x && (x = f[2 * m]), f[2 * m + 1] > _ && (_ = f[2 * m + 1]), f[2 * m + 1] < w && (w = f[2 * m + 1]);
+ if (x - d > r) return !1;
+ if (t > b + d) return !1;
+ if (w - d > i) return !1;
+ if (n > _ + d) return !1;
+ var E;
+ if (d > 0) {
+ var T = e.math.expandPolygon(f, -d);
+ E = e.math.joinLines(T)
+ } else E = f;
+ for (var m = 0; m < f.length / 2; m++)
+ if (t <= f[2 * m] && f[2 * m] <= r && n <= f[2 * m + 1] && f[2 * m + 1] <= i) return !0;
+ for (var m = 0; m < E.length / 2; m++) {
+ var S, C, k = E[2 * m],
+ D = E[2 * m + 1];
+ if (m < E.length / 2 - 1 ? (S = E[2 * (m + 1)], C = E[2 * (m + 1) + 1]) : (S = E[0], C = E[1]), e.math.finiteLinesIntersect(k, D, S, C, t, n, r, n, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, t, i, r, i, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, t, n, t, i, !1).length > 0) return !0;
+ if (e.math.finiteLinesIntersect(k, D, S, C, r, n, r, i, !1).length > 0) return !0
+ }
+ return !1
+ }, e.math.polygonIntersectLine = function(t, n, r, i, a, o, s, l) {
+ for (var u, c = [], d = new Array(r.length), h = 0; h < d.length / 2; h++) d[2 * h] = r[2 * h] * o + i, d[2 * h + 1] = r[2 * h + 1] * s + a;
+ var p;
+ if (l > 0) {
+ var f = e.math.expandPolygon(d, -l);
+ p = e.math.joinLines(f)
+ } else p = d;
+ for (var v, g, y, m, h = 0; h < p.length / 2; h++) v = p[2 * h], g = p[2 * h + 1], h < p.length / 2 - 1 ? (y = p[2 * (h + 1)], m = p[2 * (h + 1) + 1]) : (y = p[0], m = p[1]), u = this.finiteLinesIntersect(t, n, i, a, v, g, y, m), 0 !== u.length && c.push(u[0], u[1]);
+ return c
+ }, e.math.shortenIntersection = function(e, t, n) {
+ var r = [e[0] - t[0], e[1] - t[1]],
+ i = Math.sqrt(r[0] * r[0] + r[1] * r[1]),
+ a = (i - n) / i;
+ return 0 > a && (a = 1e-5), [t[0] + a * r[0], t[1] + a * r[1]]
+ }, e.math.generateUnitNgonPointsFitToSquare = function(t, n) {
+ var r = e.math.generateUnitNgonPoints(t, n);
+ return r = e.math.fitPolygonToSquare(r)
+ }, e.math.fitPolygonToSquare = function(e) {
+ for (var t, n, r = e.length / 2, i = 1 / 0, a = 1 / 0, o = -(1 / 0), s = -(1 / 0), l = 0; r > l; l++) t = e[2 * l], n = e[2 * l + 1], i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n);
+ for (var u = 2 / (o - i), c = 2 / (s - a), l = 0; r > l; l++) t = e[2 * l] = e[2 * l] * u, n = e[2 * l + 1] = e[2 * l + 1] * c, i = Math.min(i, t), o = Math.max(o, t), a = Math.min(a, n), s = Math.max(s, n);
+ if (-1 > a)
+ for (var l = 0; r > l; l++) n = e[2 * l + 1] = e[2 * l + 1] + (-1 - a);
+ return e
+ }, e.math.generateUnitNgonPoints = function(e, t) {
+ var n = 1 / e * 2 * Math.PI,
+ r = e % 2 === 0 ? Math.PI / 2 + n / 2 : Math.PI / 2;
+ r += t;
+ for (var i, a, o, s = new Array(2 * e), l = 0; e > l; l++) i = l * n + r, a = s[2 * l] = Math.cos(i), o = s[2 * l + 1] = Math.sin(-i);
+ return s
+ }, e.math.getRoundRectangleRadius = function(e, t) {
+ return Math.min(e / 4, t / 4, 8)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t, n, r) {
+ var i = {};
+ switch (i[n] = r, t) {
+ case "core":
+ case "collection":
+ e.fn[t](i)
+ }
+ if ("layout" === t) {
+ for (var o = r.prototype, s = [], l = 0; l < s.length; l++) {
+ var u = s[l];
+ o[u] = o[u] || function() {
+ return this
+ }
+ }
+ o.start && !o.run ? o.run = function() {
+ return this.start(), this
+ } : !o.start && o.run && (o.start = function() {
+ return this.run(), this
+ }), o.stop || (o.stop = function() {
+ var e = this.options;
+ return e && e.animate && e.eles.stop(), this
+ }), o.on = e.define.on({
+ layout: !0
+ }), o.one = e.define.on({
+ layout: !0,
+ unbindSelfOnTrigger: !0
+ }), o.once = e.define.on({
+ layout: !0,
+ unbindAllBindersOnTrigger: !0
+ }), o.off = e.define.off({
+ layout: !0
+ }), o.trigger = e.define.trigger({
+ layout: !0
+ }), e.define.eventAliasesOn(o)
+ }
+ return e.util.setMap({
+ map: a,
+ keys: [t, n],
+ value: r
+ })
+ }
+
+ function n(t, n) {
+ return e.util.getMap({
+ map: a,
+ keys: [t, n]
+ })
+ }
+
+ function r(t, n, r, i, a) {
+ return e.util.setMap({
+ map: o,
+ keys: [t, n, r, i],
+ value: a
+ })
+ }
+
+ function i(t, n, r, i) {
+ return e.util.getMap({
+ map: o,
+ keys: [t, n, r, i]
+ })
+ }
+ var a = {};
+ e.extensions = a;
+ var o = {};
+ e.modules = o, e.extension = function() {
+ return 2 == arguments.length ? n.apply(this, arguments) : 3 == arguments.length ? t.apply(this, arguments) : 4 == arguments.length ? i.apply(this, arguments) : 5 == arguments.length ? r.apply(this, arguments) : void e.util.error("Invalid extension access syntax")
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ var n = function(e) {
+ var t = e[0]._cyreg = e[0]._cyreg || {};
+ return t
+ };
+ t.registerJquery = function(e) {
+ e && (e.fn.cytoscape || (e.fn.cytoscape = function(r) {
+ var i = e(this);
+ if ("get" === r) return n(i).cy;
+ if (t.is.fn(r)) {
+ var a = r,
+ o = n(i).cy;
+ if (o && o.isReady()) o.trigger("ready", [], a);
+ else {
+ var s = n(i),
+ l = s.readies = s.readies || [];
+ l.push(a)
+ }
+ } else if (t.is.plainObject(r)) return i.each(function() {
+ var t = e.extend({}, r, {
+ container: e(this)[0]
+ });
+ window.cy = cytoscape(t)
+ })
+ }, e.cytoscape = cytoscape, null == e.fn.cy && null == e.cy && (e.fn.cy = e.fn.cytoscape, e.cy = e.cytoscape)))
+ }, t.registerJquery(e), t.util.require("jquery", function(e) {
+ t.registerJquery(e)
+ })
+ }("undefined" != typeof jQuery ? jQuery : null, cytoscape),
+ function(e) {
+ "use strict";
+
+ function t() {
+ return !1
+ }
+
+ function n() {
+ return !0
+ }
+ e.Event = function(r, i) {
+ return this instanceof e.Event ? (r && r.type ? (this.originalEvent = r, this.type = r.type, this.isDefaultPrevented = r.defaultPrevented ? n : t) : this.type = r, i && (this.type = void 0 !== i.type ? i.type : this.type, this.cy = i.cy, this.cyTarget = i.cyTarget, this.cyPosition = i.cyPosition, this.cyRenderedPosition = i.cyRenderedPosition, this.namespace = i.namespace, this.layout = i.layout, this.data = i.data, this.message = i.message), void(this.timeStamp = r && r.timeStamp || +new Date)) : new e.Event(r, i)
+ }, e.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = n;
+ var e = this.originalEvent;
+ e && e.preventDefault && e.preventDefault()
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = n;
+ var e = this.originalEvent;
+ e && e.stopPropagation && e.stopPropagation()
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = n, this.stopPropagation()
+ },
+ isDefaultPrevented: t,
+ isPropagationStopped: t,
+ isImmediatePropagationStopped: t
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.define = {
+ data: function(t) {
+ var n = {
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !1,
+ allowSetting: !1,
+ allowGetting: !1,
+ settingEvent: "data",
+ settingTriggersEvent: !1,
+ triggerFnName: "trigger",
+ immutableKeys: {},
+ updateStyle: !1,
+ onSet: function(e) {},
+ canSet: function(e) {
+ return !0
+ }
+ };
+ return t = e.util.extend({}, n, t),
+ function(n, r) {
+ var i = t,
+ a = this,
+ o = void 0 !== a.length,
+ s = o ? a : [a],
+ l = o ? a[0] : a;
+ if (e.is.string(n)) {
+ if (i.allowGetting && void 0 === r) {
+ var u;
+ return l && (u = l._private[i.field][n]), u
+ }
+ if (i.allowSetting && void 0 !== r) {
+ var c = !i.immutableKeys[n];
+ if (c) {
+ for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][n] = r);
+ i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent)
+ }
+ }
+ } else if (i.allowSetting && e.is.plainObject(n)) {
+ var p, f, v = n;
+ for (p in v) {
+ f = v[p];
+ var c = !i.immutableKeys[p];
+ if (c)
+ for (var d = 0, h = s.length; h > d; d++) i.canSet(s[d]) && (s[d]._private[i.field][p] = f)
+ }
+ i.updateStyle && a.updateStyle(), i.onSet(a), i.settingTriggersEvent && a[i.triggerFnName](i.settingEvent)
+ } else if (i.allowBinding && e.is.fn(n)) {
+ var g = n;
+ a.bind(i.bindingEvent, g)
+ } else if (i.allowGetting && void 0 === n) {
+ var u;
+ return l && (u = l._private[i.field]), u
+ }
+ return a
+ }
+ },
+ removeData: function(t) {
+ var n = {
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !1,
+ immutableKeys: {}
+ };
+ return t = e.util.extend({}, n, t),
+ function(n) {
+ var r = t,
+ i = this,
+ a = void 0 !== i.length,
+ o = a ? i : [i];
+ if (e.is.string(n)) {
+ for (var s = n.split(/\s+/), l = s.length, u = 0; l > u; u++) {
+ var c = s[u];
+ if (!e.is.emptyString(c)) {
+ var d = !r.immutableKeys[c];
+ if (d)
+ for (var h = 0, p = o.length; p > h; h++) o[h]._private[r.field][c] = void 0
+ }
+ }
+ r.triggerEvent && i[r.triggerFnName](r.event)
+ } else if (void 0 === n) {
+ for (var h = 0, p = o.length; p > h; h++) {
+ var f = o[h]._private[r.field];
+ for (var c in f) {
+ var v = !r.immutableKeys[c];
+ v && (f[c] = void 0)
+ }
+ }
+ r.triggerEvent && i[r.triggerFnName](r.event)
+ }
+ return i
+ }
+ },
+ event: {
+ regex: /(\w+)(\.\w+)?/,
+ optionalTypeRegex: /(\w+)?(\.\w+)?/,
+ falseCallback: function() {
+ return !1
+ }
+ },
+ on: function(t) {
+ var n = {
+ unbindSelfOnTrigger: !1,
+ unbindAllBindersOnTrigger: !1
+ };
+ return t = e.util.extend({}, n, t),
+ function(n, r, i, a) {
+ var o = this,
+ s = void 0 !== o.length,
+ l = s ? o : [o],
+ u = e.is.string(n),
+ c = t;
+ if (e.is.plainObject(r) ? (a = i, i = r, r = void 0) : (e.is.fn(r) || r === !1) && (a = r, i = void 0, r = void 0), (e.is.fn(i) || i === !1) && (a = i, i = void 0), !e.is.fn(a) && a !== !1 && u) return o;
+ if (u) {
+ var d = {};
+ d[n] = a, n = d
+ }
+ for (var h in n)
+ if (a = n[h], a === !1 && (a = e.define.event.falseCallback), e.is.fn(a)) {
+ h = h.split(/\s+/);
+ for (var p = 0; p < h.length; p++) {
+ var f = h[p];
+ if (!e.is.emptyString(f)) {
+ var v = f.match(e.define.event.regex);
+ if (v)
+ for (var g = v[1], y = v[2] ? v[2] : void 0, m = {
+ callback: a,
+ data: i,
+ delegated: r ? !0 : !1,
+ selector: r,
+ selObj: new e.Selector(r),
+ type: g,
+ namespace: y,
+ unbindSelfOnTrigger: c.unbindSelfOnTrigger,
+ unbindAllBindersOnTrigger: c.unbindAllBindersOnTrigger,
+ binders: l
+ }, x = 0; x < l.length; x++) {
+ var b = l[x]._private;
+ b.listeners = b.listeners || [], b.listeners.push(m)
+ }
+ }
+ }
+ }
+ return o
+ }
+ },
+ eventAliasesOn: function(t) {
+ var n = t;
+ n.addListener = n.listen = n.bind = n.on, n.removeListener = n.unlisten = n.unbind = n.off, n.emit = n.trigger, n.pon = n.promiseOn = function(t, n) {
+ var r = this,
+ i = Array.prototype.slice.call(arguments, 0);
+ return new e.Promise(function(e, t) {
+ var n = function(t) {
+ r.off.apply(r, o), e(t)
+ },
+ a = i.concat([n]),
+ o = a.concat([]);
+ r.on.apply(r, a)
+ })
+ }
+ },
+ off: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(t, n, r) {
+ var i = this,
+ a = void 0 !== i.length,
+ o = a ? i : [i],
+ s = e.is.string(t);
+ if (0 === arguments.length) {
+ for (var l = 0; l < o.length; l++) o[l]._private.listeners = [];
+ return i
+ }
+ if ((e.is.fn(n) || n === !1) && (r = n, n = void 0), s) {
+ var u = {};
+ u[t] = r, t = u
+ }
+ for (var c in t) {
+ r = t[c], r === !1 && (r = e.define.event.falseCallback), c = c.split(/\s+/);
+ for (var d = 0; d < c.length; d++) {
+ var h = c[d];
+ if (!e.is.emptyString(h)) {
+ var p = h.match(e.define.event.optionalTypeRegex);
+ if (p)
+ for (var f = p[1] ? p[1] : void 0, v = p[2] ? p[2] : void 0, l = 0; l < o.length; l++)
+ for (var g = o[l]._private.listeners = o[l]._private.listeners || [], y = 0; y < g.length; y++) {
+ var m = g[y],
+ x = !v || v === m.namespace,
+ b = !f || m.type === f,
+ w = !r || r === m.callback,
+ _ = x && b && w;
+ _ && (g.splice(y, 1), y--)
+ }
+ }
+ }
+ }
+ return i
+ }
+ },
+ trigger: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(n, r, i) {
+ var a = this,
+ o = void 0 !== a.length,
+ s = o ? a : [a],
+ l = e.is.string(n),
+ u = e.is.plainObject(n),
+ c = e.is.event(n),
+ d = this._private.cy || (e.is.core(this) ? this : null),
+ h = d ? d.hasCompoundNodes() : !1;
+ if (l) {
+ var p = n.split(/\s+/);
+ n = [];
+ for (var f = 0; f < p.length; f++) {
+ var v = p[f];
+ if (!e.is.emptyString(v)) {
+ var g = v.match(e.define.event.regex),
+ y = g[1],
+ m = g[2] ? g[2] : void 0;
+ n.push({
+ type: y,
+ namespace: m
+ })
+ }
+ }
+ } else if (u) {
+ var x = n;
+ n = [x]
+ }
+ r ? e.is.array(r) || (r = [r]) : r = [];
+ for (var f = 0; f < n.length; f++)
+ for (var b = n[f], w = 0; w < s.length; w++) {
+ var v, _ = s[w],
+ E = _._private.listeners = _._private.listeners || [],
+ T = e.is.element(_),
+ S = T || t.layout;
+ if (c ? (v = b, v.cyTarget = v.cyTarget || _, v.cy = v.cy || d) : v = new e.Event(b, {
+ cyTarget: _,
+ cy: d,
+ namespace: b.namespace
+ }), b.layout && (v.layout = b.layout), t.layout && (v.layout = _), v.cyPosition) {
+ var C = v.cyPosition,
+ k = d.zoom(),
+ D = d.pan();
+ v.cyRenderedPosition = {
+ x: C.x * k + D.x,
+ y: C.y * k + D.y
+ }
+ }
+ i && (E = [{
+ namespace: v.namespace,
+ type: v.type,
+ callback: i
+ }]);
+ for (var N = 0; N < E.length; N++) {
+ var P = E[N],
+ M = !P.namespace || P.namespace === v.namespace,
+ B = P.type === v.type,
+ L = P.delegated ? _ !== v.cyTarget && e.is.element(v.cyTarget) && P.selObj.matches(v.cyTarget) : !0,
+ O = M && B && L;
+ if (O) {
+ var A = [v];
+ if (A = A.concat(r), P.data ? v.data = P.data : v.data = void 0, (P.unbindSelfOnTrigger || P.unbindAllBindersOnTrigger) && (E.splice(N, 1), N--), P.unbindAllBindersOnTrigger)
+ for (var I = P.binders, z = 0; z < I.length; z++) {
+ var R = I[z];
+ if (R && R !== _)
+ for (var j = R._private.listeners, F = 0; F < j.length; F++) {
+ var q = j[F];
+ q === P && (j.splice(F, 1), F--)
+ }
+ }
+ var V = P.delegated ? v.cyTarget : _,
+ X = P.callback.apply(V, A);
+ (X === !1 || v.isPropagationStopped()) && (S = !1, X === !1 && (v.stopPropagation(), v.preventDefault()))
+ }
+ }
+ if (S) {
+ var H = h ? _._private.parent : null,
+ Y = null != H && 0 !== H.length;
+ Y ? (H = H[0], H.trigger(v)) : d.trigger(v)
+ }
+ }
+ return a
+ }
+ },
+ animated: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function() {
+ var e = this,
+ t = void 0 !== e.length,
+ n = t ? e : [e],
+ r = this._private.cy || this;
+ if (!r.styleEnabled()) return !1;
+ var i = n[0];
+ return i ? i._private.animation.current.length > 0 : void 0
+ }
+ },
+ clearQueue: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function() {
+ var e = this,
+ t = void 0 !== e.length,
+ n = t ? e : [e],
+ r = this._private.cy || this;
+ if (!r.styleEnabled()) return this;
+ for (var i = 0; i < n.length; i++) {
+ var a = n[i];
+ a._private.animation.queue = []
+ }
+ return this
+ }
+ },
+ delay: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this._private.cy || this;
+ return n.styleEnabled() ? (this.animate({
+ delay: e
+ }, {
+ duration: e,
+ complete: t
+ }), this) : this
+ }
+ },
+ animate: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this,
+ r = void 0 !== n.length,
+ i = r ? n : [n],
+ a = this._private.cy || this,
+ o = !r,
+ s = !o;
+ if (!a.styleEnabled()) return this;
+ var l, u = +new Date,
+ c = a.style();
+ switch (void 0 === t && (t = {}), void 0 === t.duration && (t.duration = 400), t.duration) {
+ case "slow":
+ t.duration = 600;
+ break;
+ case "fast":
+ t.duration = 200
+ }
+ var d = !0;
+ if (e)
+ for (var h in e) {
+ d = !1;
+ break
+ }
+ if (d) return this;
+ if (e.css && s && (e.css = c.getPropsList(e.css)), e.renderedPosition && s) {
+ var p = e.renderedPosition,
+ f = a.pan(),
+ v = a.zoom();
+ e.position = {
+ x: (p.x - f.x) / v,
+ y: (p.y - f.y) / v
+ }
+ }
+ if (e.panBy && o) {
+ var g = e.panBy,
+ y = a.pan();
+ e.pan = {
+ x: y.x + g.x,
+ y: y.y + g.y
+ }
+ }
+ var m = e.center || e.centre;
+ if (m && o) {
+ var x = a.getCenterPan(m.eles, e.zoom);
+ x && (e.pan = x)
+ }
+ if (e.fit && o) {
+ var b = e.fit,
+ w = a.getFitViewport(b.eles || b.boundingBox, b.padding);
+ w && (e.pan = w.pan, e.zoom = w.zoom)
+ }
+ for (var h = 0; h < i.length; h++) {
+ var _ = i[h];
+ l = _.animated() && (void 0 === t.queue || t.queue) ? _._private.animation.queue : _._private.animation.current, l.push({
+ properties: e,
+ duration: t.duration,
+ params: t,
+ callTime: u
+ })
+ }
+ return s && a.addToAnimationPool(this), this
+ }
+ },
+ stop: function(t) {
+ var n = {};
+ return t = e.util.extend({}, n, t),
+ function(e, t) {
+ var n = this,
+ r = void 0 !== n.length,
+ i = r ? n : [n],
+ a = this._private.cy || this;
+ if (!a.styleEnabled()) return this;
+ for (var o = 0; o < i.length; o++) {
+ for (var s = i[o], l = s._private.animation.current, u = 0; u < l.length; u++) {
+ var c = l[u];
+ t && (c.duration = 0)
+ }
+ e && (s._private.animation.queue = []), t || (s._private.animation.current = [])
+ }
+ return a.notify({
+ collection: this,
+ type: "draw"
+ }), this
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.selector = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Selector.prototype[r] = i
+ }
+ }, e.Selector = function(t, n) {
+ if (!(this instanceof e.Selector)) return new e.Selector(t, n);
+ void 0 === n && void 0 !== t && (n = t, t = void 0);
+ var r = this;
+ if (r._private = {
+ selectorText: null,
+ invalid: !0
+ }, !n || e.is.string(n) && n.match(/^\s*$/)) null == t ? r.length = 0 : (r[0] = o(), r[0].group = t, r.length = 1);
+ else if (e.is.element(n)) {
+ var i = new e.Collection(r.cy(), [n]);
+ r[0] = o(), r[0].collection = i, r.length = 1
+ } else if (e.is.collection(n)) r[0] = o(), r[0].collection = n, r.length = 1;
+ else if (e.is.fn(n)) r[0] = o(), r[0].filter = n, r.length = 1;
+ else {
+ if (!e.is.string(n)) return void e.util.error("A selector must be created from a string; found " + n);
+ var a = null,
+ o = function() {
+ return {
+ classes: [],
+ colonSelectors: [],
+ data: [],
+ group: null,
+ ids: [],
+ meta: [],
+ collection: null,
+ filter: null,
+ parent: null,
+ ancestor: null,
+ subject: null,
+ child: null,
+ descendant: null
+ }
+ },
+ s = {
+ metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",
+ comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",
+ boolOp: "\\?|\\!|\\^",
+ string: '"(?:\\\\"|[^"])+"|' + "'(?:\\\\'|[^'])+'",
+ number: e.util.regex.number,
+ meta: "degree|indegree|outdegree",
+ separator: "\\s*,\\s*",
+ descendant: "\\s+",
+ child: "\\s+>\\s+",
+ subject: "\\$"
+ };
+ s.variable = "(?:[\\w-]|(?:\\\\" + s.metaChar + "))+", s.value = s.string + "|" + s.number, s.className = s.variable, s.id = s.variable;
+ for (var l = function(e) {
+ return e.replace(new RegExp("\\\\(" + s.metaChar + ")", "g"), function(e, t, n, r) {
+ return t
+ })
+ }, u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) {
+ var d = u[c];
+ s.comparatorOp += "|@" + d
+ }
+ for (var u = s.comparatorOp.split("|"), c = 0; c < u.length; c++) {
+ var d = u[c];
+ d.indexOf("!") >= 0 || "=" !== d && (s.comparatorOp += "|\\!" + d)
+ }
+ var h = {
+ group: {
+ query: !0,
+ regex: "(node|edge|\\*)",
+ populate: function(e) {
+ this.group = "*" == e ? e : e + "s"
+ }
+ },
+ state: {
+ query: !0,
+ regex: "(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)",
+ populate: function(e) {
+ this.colonSelectors.push(e)
+ }
+ },
+ id: {
+ query: !0,
+ regex: "\\#(" + s.id + ")",
+ populate: function(e) {
+ this.ids.push(l(e))
+ }
+ },
+ className: {
+ query: !0,
+ regex: "\\.(" + s.className + ")",
+ populate: function(e) {
+ this.classes.push(l(e))
+ }
+ },
+ dataExists: {
+ query: !0,
+ regex: "\\[\\s*(" + s.variable + ")\\s*\\]",
+ populate: function(e) {
+ this.data.push({
+ field: l(e)
+ })
+ }
+ },
+ dataCompare: {
+ query: !0,
+ regex: "\\[\\s*(" + s.variable + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.value + ")\\s*\\]",
+ populate: function(e, t, n) {
+ var r = null != new RegExp("^" + s.string + "$").exec(n);
+ n = r ? n.substring(1, n.length - 1) : parseFloat(n), this.data.push({
+ field: l(e),
+ operator: t,
+ value: n
+ })
+ }
+ },
+ dataBool: {
+ query: !0,
+ regex: "\\[\\s*(" + s.boolOp + ")\\s*(" + s.variable + ")\\s*\\]",
+ populate: function(e, t) {
+ this.data.push({
+ field: l(t),
+ operator: e
+ })
+ }
+ },
+ metaCompare: {
+ query: !0,
+ regex: "\\[\\[\\s*(" + s.meta + ")\\s*(" + s.comparatorOp + ")\\s*(" + s.number + ")\\s*\\]\\]",
+ populate: function(e, t, n) {
+ this.meta.push({
+ field: l(e),
+ operator: t,
+ value: parseFloat(n)
+ })
+ }
+ },
+ nextQuery: {
+ separator: !0,
+ regex: s.separator,
+ populate: function() {
+ r[++c] = o(), a = null
+ }
+ },
+ child: {
+ separator: !0,
+ regex: s.child,
+ populate: function() {
+ var e = o();
+ e.parent = this, e.subject = a, r[c] = e
+ }
+ },
+ descendant: {
+ separator: !0,
+ regex: s.descendant,
+ populate: function() {
+ var e = o();
+ e.ancestor = this, e.subject = a, r[c] = e
+ }
+ },
+ subject: {
+ modifier: !0,
+ regex: s.subject,
+ populate: function() {
+ return null != a && this.subject != this ? (e.util.error("Redefinition of subject in selector `" + n + "`"), !1) : (a = this, void(this.subject = this))
+ }
+ }
+ },
+ p = 0;
+ for (var f in h) h[p] = h[f], h[p].name = f, p++;
+ h.length = p, r._private.selectorText = n;
+ var v = n,
+ c = 0,
+ g = function(t) {
+ for (var n, r, i, a = 0; a < h.length; a++) {
+ var o = h[a],
+ s = o.name;
+ if (!e.is.fn(t) || t(s, o)) {
+ var l = v.match(new RegExp("^" + o.regex));
+ if (null != l) {
+ r = l, n = o, i = s;
+ var u = l[0];
+ v = v.substring(u.length);
+ break
+ }
+ }
+ }
+ return {
+ expr: n,
+ match: r,
+ name: i
+ }
+ },
+ y = function() {
+ var e = v.match(/^\s+/);
+ if (e) {
+ var t = e[0];
+ v = v.substring(t.length)
+ }
+ };
+ for (r[0] = o(), y();;) {
+ var m = g();
+ if (null == m.expr) return void e.util.error("The selector `" + n + "`is invalid");
+ for (var x = [], p = 1; p < m.match.length; p++) x.push(m.match[p]);
+ var b = m.expr.populate.apply(r[c], x);
+ if (b === !1) return;
+ if (v.match(/^\s*$/)) break
+ }
+ for (r.length = c + 1, p = 0; p < r.length; p++) {
+ var w = r[p];
+ if (null != w.subject) {
+ for (; w.subject != w;)
+ if (null != w.parent) {
+ var _ = w.parent,
+ E = w;
+ E.parent = null, _.child = E, w = _
+ } else {
+ if (null == w.ancestor) {
+ e.util.error("When adjusting references for the selector `" + w + "`, neither parent nor ancestor was found");
+ break
+ }
+ var T = w.ancestor,
+ S = w;
+ S.ancestor = null, T.descendant = S, w = T
+ }
+ r[p] = w.subject
+ }
+ }
+ if (null != t)
+ for (var p = 0; p < r.length; p++) {
+ if (null != r[p].group && r[p].group != t) return void e.util.error("Group `" + r[p].group + "` conflicts with implicit group `" + t + "` in selector `" + n + "`");
+ r[p].group = t
+ }
+ }
+ r._private.invalid = !1
+ }, e.selfn = e.Selector.prototype, e.selfn.size = function() {
+ return this.length
+ }, e.selfn.eq = function(e) {
+ return this[e]
+ }, e.selfn.find = function() {};
+ var t = function(n, r) {
+ if (null != n.group && "*" != n.group && n.group != r._private.group) return !1;
+ for (var i = r.cy(), a = !0, o = 0; o < n.colonSelectors.length; o++) {
+ var s = n.colonSelectors[o];
+ switch (s) {
+ case ":selected":
+ a = r.selected();
+ break;
+ case ":unselected":
+ a = !r.selected();
+ break;
+ case ":selectable":
+ a = r.selectable();
+ break;
+ case ":unselectable":
+ a = !r.selectable();
+ break;
+ case ":locked":
+ a = r.locked();
+ break;
+ case ":unlocked":
+ a = !r.locked();
+ break;
+ case ":visible":
+ a = r.visible();
+ break;
+ case ":hidden":
+ a = !r.visible();
+ break;
+ case ":transparent":
+ a = r.transparent();
+ break;
+ case ":grabbed":
+ a = r.grabbed();
+ break;
+ case ":free":
+ a = !r.grabbed();
+ break;
+ case ":removed":
+ a = r.removed();
+ break;
+ case ":inside":
+ a = !r.removed();
+ break;
+ case ":grabbable":
+ a = r.grabbable();
+ break;
+ case ":ungrabbable":
+ a = !r.grabbable();
+ break;
+ case ":animated":
+ a = r.animated();
+ break;
+ case ":unanimated":
+ a = !r.animated();
+ break;
+ case ":parent":
+ a = r.isNode() && r.children().nonempty();
+ break;
+ case ":child":
+ case ":nonorphan":
+ a = r.isNode() && r.parent().nonempty();
+ break;
+ case ":orphan":
+ a = r.isNode() && r.parent().empty();
+ break;
+ case ":loop":
+ a = r.isEdge() && r.data("source") === r.data("target");
+ break;
+ case ":simple":
+ a = r.isEdge() && r.data("source") !== r.data("target");
+ break;
+ case ":active":
+ a = r.active();
+ break;
+ case ":inactive":
+ a = !r.active();
+ break;
+ case ":touch":
+ a = e.is.touch();
+ break;
+ case ":backgrounding":
+ a = r.backgrounding();
+ break;
+ case ":nonbackgrounding":
+ a = !r.backgrounding()
+ }
+ if (!a) break
+ }
+ if (!a) return !1;
+ for (var l = !0, o = 0; o < n.ids.length; o++) {
+ var u = n.ids[o],
+ c = r._private.data.id;
+ if (l = l && u == c, !l) break
+ }
+ if (!l) return !1;
+ for (var d = !0, o = 0; o < n.classes.length; o++) {
+ var h = n.classes[o];
+ if (d = d && r.hasClass(h), !d) break
+ }
+ if (!d) return !1;
+ var p = function(t) {
+ for (var r = !0, i = 0; i < n[t.name].length; i++) {
+ var a, o = n[t.name][i],
+ s = o.operator,
+ l = o.value,
+ u = o.field;
+ if (null != s && null != l) {
+ var c = t.fieldValue(u),
+ d = e.is.string(c) || e.is.number(c) ? "" + c : "",
+ h = "" + l,
+ p = !1;
+ s.indexOf("@") >= 0 && (d = d.toLowerCase(), h = h.toLowerCase(), s = s.replace("@", ""), p = !0);
+ var f = !1,
+ v = !1;
+ switch (s.indexOf("!") >= 0 && (s = s.replace("!", ""), f = !0), p && (l = h.toLowerCase(), c = d.toLowerCase()), s) {
+ case "*=":
+ a = d.search(h) >= 0;
+ break;
+ case "$=":
+ a = null != new RegExp(h + "$").exec(d);
+ break;
+ case "^=":
+ a = null != new RegExp("^" + h).exec(d);
+ break;
+ case "=":
+ a = c === l;
+ break;
+ case "!=":
+ a = c !== l;
+ break;
+ case ">":
+ a = f ? l >= c : c > l, v = !0;
+ break;
+ case ">=":
+ a = f ? l > c : c >= l, v = !0;
+ break;
+ case "<":
+ a = f ? c >= l : l > c, v = !0;
+ break;
+ case "<=":
+ a = f ? c > l : l >= c, v = !0;
+ break;
+ default:
+ a = !1
+ }
+ } else if (null != s) switch (s) {
+ case "?":
+ a = t.fieldTruthy(u);
+ break;
+ case "!":
+ a = !t.fieldTruthy(u);
+ break;
+ case "^":
+ a = t.fieldUndefined(u)
+ } else a = !t.fieldUndefined(u);
+ if (f && !v && (a = !a, v = !0), !a) {
+ r = !1;
+ break
+ }
+ }
+ return r
+ },
+ f = p({
+ name: "data",
+ fieldValue: function(e) {
+ return r._private.data[e]
+ },
+ fieldRef: function(e) {
+ return "element._private.data." + e
+ },
+ fieldUndefined: function(e) {
+ return void 0 === r._private.data[e]
+ },
+ fieldTruthy: function(e) {
+ return r._private.data[e] ? !0 : !1
+ }
+ });
+ if (!f) return !1;
+ var v = p({
+ name: "meta",
+ fieldValue: function(e) {
+ return r[e]()
+ },
+ fieldRef: function(e) {
+ return "element." + e + "()"
+ },
+ fieldUndefined: function(e) {
+ return null == r[e]()
+ },
+ fieldTruthy: function(e) {
+ return r[e]() ? !0 : !1
+ }
+ });
+ if (!v) return !1;
+ if (null != n.collection) {
+ var g = null != n.collection._private.ids[r.id()];
+ if (!g) return !1
+ }
+ if (null != n.filter && 0 === r.collection().filter(n.filter).size()) return !1;
+ var y = function(e, n) {
+ if (null != e) {
+ var r = !1;
+ if (!i.hasCompoundNodes()) return !1;
+ n = n();
+ for (var a = 0; a < n.length; a++)
+ if (t(e, n[a])) {
+ r = !0;
+ break
+ }
+ return r
+ }
+ return !0
+ };
+ return y(n.parent, function() {
+ return r.parent()
+ }) && y(n.ancestor, function() {
+ return r.parents()
+ }) && y(n.child, function() {
+ return r.children()
+ }) && y(n.descendant, function() {
+ return r.descendants()
+ }) ? !0 : !1
+ };
+ e.selfn.filter = function(n) {
+ var r = this,
+ i = n.cy();
+ if (r._private.invalid) return new e.Collection(i);
+ var a = function(e, n) {
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ if (t(a, n)) return !0
+ }
+ return !1
+ };
+ null == r._private.selectorText && (a = function() {
+ return !0
+ });
+ var o = n.filter(a);
+ return o
+ }, e.selfn.matches = function(e) {
+ var n = this;
+ if (n._private.invalid) return !1;
+ for (var r = 0; r < n.length; r++) {
+ var i = n[r];
+ if (t(i, e)) return !0
+ }
+ return !1
+ }, e.selfn.toString = e.selfn.selector = function() {
+ for (var t = "", n = function(t, n) {
+ return e.is.string(t) ? n ? '"' + t + '"' : t : ""
+ }, r = function(e) {
+ var t = "";
+ e.subject === e && (t += "$");
+ var a = n(e.group);
+ t += a.substring(0, a.length - 1);
+ for (var o = 0; o < e.data.length; o++) {
+ var s = e.data[o];
+ t += s.value ? "[" + s.field + n(s.operator) + n(s.value, !0) + "]" : "[" + n(s.operator) + s.field + "]"
+ }
+ for (var o = 0; o < e.meta.length; o++) {
+ var l = e.meta[o];
+ t += "[[" + l.field + n(l.operator) + n(l.value, !0) + "]]"
+ }
+ for (var o = 0; o < e.colonSelectors.length; o++) {
+ var u = e.colonSelectors[i];
+ t += u
+ }
+ for (var o = 0; o < e.ids.length; o++) {
+ var u = "#" + e.ids[i];
+ t += u
+ }
+ for (var o = 0; o < e.classes.length; o++) {
+ var u = "." + e.classes[i];
+ t += u
+ }
+ return null != e.parent && (t = r(e.parent) + " > " + t), null != e.ancestor && (t = r(e.ancestor) + " " + t), null != e.child && (t += " > " + r(e.child)), null != e.descendant && (t += " " + r(e.descendant)), t
+ }, i = 0; i < this.length; i++) {
+ var a = this[i];
+ t += r(a), this.length > 1 && i < this.length - 1 && (t += ", ")
+ }
+ return t
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.Style = function(t) {
+ return this instanceof e.Style ? e.is.core(t) ? (this._private = {
+ cy: t,
+ coreStyle: {},
+ newStyle: !0
+ }, this.length = 0, void this.addDefaultStylesheet()) : void e.util.error("A style must have a core reference") : new e.Style(t)
+ }, e.style = e.Style, e.styfn = e.Style.prototype, e.fn.style = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Style.prototype = i
+ }
+ },
+ function() {
+ var t = e.util.regex.number,
+ n = e.util.regex.rgbaNoBackRefs,
+ r = e.util.regex.hslaNoBackRefs,
+ i = e.util.regex.hex3,
+ a = e.util.regex.hex6,
+ o = function(e) {
+ return "^" + e + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"
+ },
+ s = function(e) {
+ return "^" + e + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + t + ")\\s*\\,\\s*(" + t + ")\\s*,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\s*\\,\\s*(" + t + "|\\w+|" + n + "|" + r + "|" + i + "|" + a + ")\\)$"
+ };
+ e.style.types = {
+ time: {
+ number: !0,
+ min: 0,
+ units: "s|ms",
+ implicitUnits: "ms"
+ },
+ percent: {
+ number: !0,
+ min: 0,
+ max: 100,
+ units: "%"
+ },
+ zeroOneNumber: {
+ number: !0,
+ min: 0,
+ max: 1,
+ unitless: !0
+ },
+ nOneOneNumber: {
+ number: !0,
+ min: -1,
+ max: 1,
+ unitless: !0
+ },
+ nonNegativeInt: {
+ number: !0,
+ min: 0,
+ integer: !0,
+ unitless: !0
+ },
+ position: {
+ enums: ["parent", "origin"]
+ },
+ autoSize: {
+ number: !0,
+ min: 0,
+ enums: ["auto"]
+ },
+ number: {
+ number: !0
+ },
+ size: {
+ number: !0,
+ min: 0
+ },
+ bgSize: {
+ number: !0,
+ min: 0,
+ allowPercent: !0
+ },
+ bgWH: {
+ number: !0,
+ min: 0,
+ allowPercent: !0,
+ enums: ["auto"]
+ },
+ bgPos: {
+ number: !0,
+ allowPercent: !0
+ },
+ bgRepeat: {
+ enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"]
+ },
+ bgFit: {
+ enums: ["none", "contain", "cover"]
+ },
+ bgClip: {
+ enums: ["none", "node"]
+ },
+ color: {
+ color: !0
+ },
+ lineStyle: {
+ enums: ["solid", "dotted", "dashed"]
+ },
+ borderStyle: {
+ enums: ["solid", "dotted", "dashed", "double"]
+ },
+ curveStyle: {
+ enums: ["bezier", "unbundled-bezier", "haystack"]
+ },
+ fontFamily: {
+ regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'
+ },
+ fontVariant: {
+ enums: ["small-caps", "normal"]
+ },
+ fontStyle: {
+ enums: ["italic", "normal", "oblique"]
+ },
+ fontWeight: {
+ enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900]
+ },
+ textDecoration: {
+ enums: ["none", "underline", "overline", "line-through"]
+ },
+ textTransform: {
+ enums: ["none", "uppercase", "lowercase"]
+ },
+ textWrap: {
+ enums: ["none", "wrap"]
+ },
+ textBackgroundShape: {
+ enums: ["rectangle", "roundrectangle"]
+ },
+ nodeShape: {
+ enums: ["rectangle", "roundrectangle", "ellipse", "triangle", "square", "pentagon", "hexagon", "heptagon", "octagon", "star", "diamond", "vee", "rhomboid"]
+ },
+ compoundIncludeLabels: {
+ enums: ["include", "exclude"]
+ },
+ arrowShape: {
+ enums: ["tee", "triangle", "triangle-tee", "triangle-backcurve", "half-triangle-overshot", "square", "circle", "diamond", "none"]
+ },
+ arrowFill: {
+ enums: ["filled", "hollow"]
+ },
+ display: {
+ enums: ["element", "none"]
+ },
+ visibility: {
+ enums: ["hidden", "visible"]
+ },
+ valign: {
+ enums: ["top", "center", "bottom"]
+ },
+ halign: {
+ enums: ["left", "center", "right"]
+ },
+ text: {
+ string: !0
+ },
+ data: {
+ mapping: !0,
+ regex: o("data")
+ },
+ layoutData: {
+ mapping: !0,
+ regex: o("layoutData")
+ },
+ scratch: {
+ mapping: !0,
+ regex: o("scratch")
+ },
+ mapData: {
+ mapping: !0,
+ regex: s("mapData")
+ },
+ mapLayoutData: {
+ mapping: !0,
+ regex: s("mapLayoutData")
+ },
+ mapScratch: {
+ mapping: !0,
+ regex: s("mapScratch")
+ },
+ fn: {
+ mapping: !0,
+ fn: !0
+ },
+ url: {
+ regex: "^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$"
+ },
+ propList: {
+ propList: !0
+ },
+ angle: {
+ number: !0,
+ units: "deg|rad"
+ },
+ textRotation: {
+ enums: ["none", "autorotate"]
+ }
+ };
+ var l = e.style.types,
+ u = e.style.properties = [{
+ name: "text-valign",
+ type: l.valign
+ }, {
+ name: "text-halign",
+ type: l.halign
+ }, {
+ name: "color",
+ type: l.color
+ }, {
+ name: "content",
+ type: l.text
+ }, {
+ name: "text-outline-color",
+ type: l.color
+ }, {
+ name: "text-outline-width",
+ type: l.size
+ }, {
+ name: "text-outline-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-background-color",
+ type: l.color
+ }, {
+ name: "text-background-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-border-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-border-color",
+ type: l.color
+ }, {
+ name: "text-border-width",
+ type: l.size
+ }, {
+ name: "text-border-style",
+ type: l.borderStyle
+ }, {
+ name: "text-background-shape",
+ type: l.textBackgroundShape
+ }, {
+ name: "text-transform",
+ type: l.textTransform
+ }, {
+ name: "text-wrap",
+ type: l.textWrap
+ }, {
+ name: "text-max-width",
+ type: l.size
+ }, {
+ name: "font-family",
+ type: l.fontFamily
+ }, {
+ name: "font-style",
+ type: l.fontStyle
+ }, {
+ name: "font-weight",
+ type: l.fontWeight
+ }, {
+ name: "font-size",
+ type: l.size
+ }, {
+ name: "min-zoomed-font-size",
+ type: l.size
+ }, {
+ name: "edge-text-rotation",
+ type: l.textRotation
+ }, {
+ name: "display",
+ type: l.display
+ }, {
+ name: "visibility",
+ type: l.visibility
+ }, {
+ name: "opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "z-index",
+ type: l.nonNegativeInt
+ }, {
+ name: "overlay-padding",
+ type: l.size
+ }, {
+ name: "overlay-color",
+ type: l.color
+ }, {
+ name: "overlay-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "shadow-blur",
+ type: l.size
+ }, {
+ name: "shadow-color",
+ type: l.color
+ }, {
+ name: "shadow-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "shadow-offset-x",
+ type: l.number
+ }, {
+ name: "shadow-offset-y",
+ type: l.number
+ }, {
+ name: "text-shadow-blur",
+ type: l.size
+ }, {
+ name: "text-shadow-color",
+ type: l.color
+ }, {
+ name: "text-shadow-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "text-shadow-offset-x",
+ type: l.number
+ }, {
+ name: "text-shadow-offset-y",
+ type: l.number
+ }, {
+ name: "transition-property",
+ type: l.propList
+ }, {
+ name: "transition-duration",
+ type: l.time
+ }, {
+ name: "transition-delay",
+ type: l.time
+ }, {
+ name: "height",
+ type: l.autoSize
+ }, {
+ name: "width",
+ type: l.autoSize
+ }, {
+ name: "shape",
+ type: l.nodeShape
+ }, {
+ name: "background-color",
+ type: l.color
+ }, {
+ name: "background-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "background-blacken",
+ type: l.nOneOneNumber
+ }, {
+ name: "border-color",
+ type: l.color
+ }, {
+ name: "border-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "border-width",
+ type: l.size
+ }, {
+ name: "border-style",
+ type: l.borderStyle
+ }, {
+ name: "background-image",
+ type: l.url
+ }, {
+ name: "background-image-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "background-position-x",
+ type: l.bgPos
+ }, {
+ name: "background-position-y",
+ type: l.bgPos
+ }, {
+ name: "background-repeat",
+ type: l.bgRepeat
+ }, {
+ name: "background-fit",
+ type: l.bgFit
+ }, {
+ name: "background-clip",
+ type: l.bgClip
+ }, {
+ name: "background-width",
+ type: l.bgWH
+ }, {
+ name: "background-height",
+ type: l.bgWH
+ }, {
+ name: "padding-left",
+ type: l.size
+ }, {
+ name: "padding-right",
+ type: l.size
+ }, {
+ name: "padding-top",
+ type: l.size
+ }, {
+ name: "padding-bottom",
+ type: l.size
+ }, {
+ name: "position",
+ type: l.position
+ }, {
+ name: "compound-sizing-wrt-labels",
+ type: l.compoundIncludeLabels
+ }, {
+ name: "line-style",
+ type: l.lineStyle
+ }, {
+ name: "line-color",
+ type: l.color
+ }, {
+ name: "control-point-step-size",
+ type: l.size
+ }, {
+ name: "control-point-distance",
+ type: l.number
+ }, {
+ name: "control-point-weight",
+ type: l.zeroOneNumber
+ }, {
+ name: "curve-style",
+ type: l.curveStyle
+ }, {
+ name: "haystack-radius",
+ type: l.zeroOneNumber
+ }, {
+ name: "source-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "target-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "mid-source-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "mid-target-arrow-shape",
+ type: l.arrowShape
+ }, {
+ name: "source-arrow-color",
+ type: l.color
+ }, {
+ name: "target-arrow-color",
+ type: l.color
+ }, {
+ name: "mid-source-arrow-color",
+ type: l.color
+ }, {
+ name: "mid-target-arrow-color",
+ type: l.color
+ }, {
+ name: "source-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "target-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "mid-source-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "mid-target-arrow-fill",
+ type: l.arrowFill
+ }, {
+ name: "selection-box-color",
+ type: l.color
+ }, {
+ name: "selection-box-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "selection-box-border-color",
+ type: l.color
+ }, {
+ name: "selection-box-border-width",
+ type: l.size
+ }, {
+ name: "active-bg-color",
+ type: l.color
+ }, {
+ name: "active-bg-opacity",
+ type: l.zeroOneNumber
+ }, {
+ name: "active-bg-size",
+ type: l.size
+ }, {
+ name: "outside-texture-bg-color",
+ type: l.color
+ }, {
+ name: "outside-texture-bg-opacity",
+ type: l.zeroOneNumber
+ }];
+ e.style.pieBackgroundN = 16, u.push({
+ name: "pie-size",
+ type: l.bgSize
+ });
+ for (var c = 1; c <= e.style.pieBackgroundN; c++) u.push({
+ name: "pie-" + c + "-background-color",
+ type: l.color
+ }), u.push({
+ name: "pie-" + c + "-background-size",
+ type: l.percent
+ }), u.push({
+ name: "pie-" + c + "-background-opacity",
+ type: l.zeroOneNumber
+ });
+ for (var c = 0; c < u.length; c++) {
+ var d = u[c];
+ u[d.name] = d
+ }
+ }(), e.styfn.addDefaultStylesheet = function() {
+ var e = "Helvetica",
+ t = "normal",
+ n = "normal",
+ r = "#000",
+ i = "none",
+ a = 16,
+ o = 9999;
+ this.selector("node, edge").css({
+ "text-valign": "top",
+ "text-halign": "center",
+ color: r,
+ "text-outline-color": "#000",
+ "text-outline-width": 0,
+ "text-outline-opacity": 1,
+ "text-opacity": 1,
+ "text-decoration": "none",
+ "text-transform": i,
+ "text-wrap": "none",
+ "text-max-width": o,
+ "text-background-color": "#000",
+ "text-background-opacity": 0,
+ "text-border-opacity": 0,
+ "text-border-width": 0,
+ "text-border-style": "solid",
+ "text-border-color": "#000",
+ "text-background-shape": "rectangle",
+ "font-family": e,
+ "font-style": t,
+ "font-weight": n,
+ "font-size": a,
+ "min-zoomed-font-size": 0,
+ "edge-text-rotation": "none",
+ visibility: "visible",
+ display: "element",
+ opacity: 1,
+ "z-index": 0,
+ content: "",
+ "overlay-opacity": 0,
+ "overlay-color": "#000",
+ "overlay-padding": 10,
+ "shadow-opacity": 0,
+ "shadow-color": "#000",
+ "shadow-blur": 10,
+ "shadow-offset-x": 0,
+ "shadow-offset-y": 0,
+ "text-shadow-opacity": 0,
+ "text-shadow-color": "#000",
+ "text-shadow-blur": 5,
+ "text-shadow-offset-x": 0,
+ "text-shadow-offset-y": 0,
+ "transition-property": "none",
+ "transition-duration": 0,
+ "transition-delay": 0,
+ "background-blacken": 0,
+ "background-color": "#888",
+ "background-opacity": 1,
+ "background-image": "none",
+ "background-image-opacity": 1,
+ "background-position-x": "50%",
+ "background-position-y": "50%",
+ "background-repeat": "no-repeat",
+ "background-fit": "none",
+ "background-clip": "node",
+ "background-width": "auto",
+ "background-height": "auto",
+ "border-color": "#000",
+ "border-opacity": 1,
+ "border-width": 0,
+ "border-style": "solid",
+ height: 30,
+ width: 30,
+ shape: "ellipse",
+ "padding-top": 0,
+ "padding-bottom": 0,
+ "padding-left": 0,
+ "padding-right": 0,
+ position: "origin",
+ "compound-sizing-wrt-labels": "include",
+ "pie-size": "100%",
+ "pie-1-background-color": "black",
+ "pie-2-background-color": "black",
+ "pie-3-background-color": "black",
+ "pie-4-background-color": "black",
+ "pie-5-background-color": "black",
+ "pie-6-background-color": "black",
+ "pie-7-background-color": "black",
+ "pie-8-background-color": "black",
+ "pie-9-background-color": "black",
+ "pie-10-background-color": "black",
+ "pie-11-background-color": "black",
+ "pie-12-background-color": "black",
+ "pie-13-background-color": "black",
+ "pie-14-background-color": "black",
+ "pie-15-background-color": "black",
+ "pie-16-background-color": "black",
+ "pie-1-background-size": "0%",
+ "pie-2-background-size": "0%",
+ "pie-3-background-size": "0%",
+ "pie-4-background-size": "0%",
+ "pie-5-background-size": "0%",
+ "pie-6-background-size": "0%",
+ "pie-7-background-size": "0%",
+ "pie-8-background-size": "0%",
+ "pie-9-background-size": "0%",
+ "pie-10-background-size": "0%",
+ "pie-11-background-size": "0%",
+ "pie-12-background-size": "0%",
+ "pie-13-background-size": "0%",
+ "pie-14-background-size": "0%",
+ "pie-15-background-size": "0%",
+ "pie-16-background-size": "0%",
+ "pie-1-background-opacity": 1,
+ "pie-2-background-opacity": 1,
+ "pie-3-background-opacity": 1,
+ "pie-4-background-opacity": 1,
+ "pie-5-background-opacity": 1,
+ "pie-6-background-opacity": 1,
+ "pie-7-background-opacity": 1,
+ "pie-8-background-opacity": 1,
+ "pie-9-background-opacity": 1,
+ "pie-10-background-opacity": 1,
+ "pie-11-background-opacity": 1,
+ "pie-12-background-opacity": 1,
+ "pie-13-background-opacity": 1,
+ "pie-14-background-opacity": 1,
+ "pie-15-background-opacity": 1,
+ "pie-16-background-opacity": 1,
+ "source-arrow-shape": "none",
+ "mid-source-arrow-shape": "none",
+ "target-arrow-shape": "none",
+ "mid-target-arrow-shape": "none",
+ "source-arrow-color": "#ddd",
+ "mid-source-arrow-color": "#ddd",
+ "target-arrow-color": "#ddd",
+ "mid-target-arrow-color": "#ddd",
+ "source-arrow-fill": "filled",
+ "mid-source-arrow-fill": "filled",
+ "target-arrow-fill": "filled",
+ "mid-target-arrow-fill": "filled",
+ "line-style": "solid",
+ "line-color": "#ddd",
+ "control-point-step-size": 40,
+ "control-point-weight": .5,
+ "curve-style": "bezier",
+ "haystack-radius": .8
+ }).selector("$node > node").css({
+ width: "auto",
+ height: "auto",
+ shape: "rectangle",
+ "background-opacity": .5,
+ "padding-top": 10,
+ "padding-right": 10,
+ "padding-left": 10,
+ "padding-bottom": 10
+ }).selector("edge").css({
+ width: 1
+ }).selector(":active").css({
+ "overlay-color": "black",
+ "overlay-padding": 10,
+ "overlay-opacity": .25
+ }).selector("core").css({
+ "selection-box-color": "#ddd",
+ "selection-box-opacity": .65,
+ "selection-box-border-color": "#aaa",
+ "selection-box-border-width": 1,
+ "active-bg-color": "black",
+ "active-bg-opacity": .15,
+ "active-bg-size": 30,
+ "outside-texture-bg-color": "#000",
+ "outside-texture-bg-opacity": .125
+ }), this.defaultLength = this.length
+ }, e.styfn.clear = function() {
+ for (var e = 0; e < this.length; e++) this[e] = void 0;
+ return this.length = 0, this._private.newStyle = !0, this
+ }, e.styfn.resetToDefault = function() {
+ return this.clear(), this.addDefaultStylesheet(), this
+ }, e.styfn.core = function() {
+ return this._private.coreStyle
+ }, e.styfn.parse = function(t, n, r, i) {
+ var a, o = [t, n, r, i].join("$"),
+ s = this.propCache = this.propCache || {};
+ return (a = s[o]) || (a = s[o] = this.parseImpl(t, n, r, i)), e.util.copy(a)
+ }, e.styfn.parseImpl = function(t, n, r, i) {
+ t = e.util.camel2dash(t);
+ var a = e.style.properties[t],
+ o = n,
+ s = e.style.types;
+ if (!a) return null;
+ if (void 0 === n || null === n) return null;
+ var l = e.is.string(n);
+ l && (n = e.util.trim(n));
+ var u = a.type;
+ if (!u) return null;
+ if (r && ("" === n || null === n)) return {
+ name: t,
+ value: n,
+ bypass: !0,
+ deleteBypass: !0
+ };
+ var c = t.match(/pie-(\d+)-background-size/);
+ if (e.is.fn(n)) return {
+ name: t,
+ value: n,
+ strValue: "fn",
+ mapped: s.fn,
+ bypass: r,
+ hasPie: c
+ };
+ var d, h, p, f, v, g;
+ if (!l || i);
+ else {
+ if ((d = new RegExp(s.data.regex).exec(n)) || (p = new RegExp(s.layoutData.regex).exec(n)) || (v = new RegExp(s.scratch.regex).exec(n))) {
+ if (r) return !1;
+ var y;
+ return y = d ? s.data : p ? s.layoutData : s.scratch, d = d || p || v, {
+ name: t,
+ value: d,
+ strValue: "" + n,
+ mapped: y,
+ field: d[1],
+ bypass: r,
+ hasPie: c
+ }
+ }
+ if ((h = new RegExp(s.mapData.regex).exec(n)) || (f = new RegExp(s.mapLayoutData.regex).exec(n)) || (g = new RegExp(s.mapScratch.regex).exec(n))) {
+ if (r) return !1;
+ var y;
+ if (y = h ? s.mapData : f ? s.mapLayoutData : s.mapScratch, h = h || f || g, !u.color && !u.number) return !1;
+ var m = this.parse(t, h[4]);
+ if (!m || m.mapped) return !1;
+ var x = this.parse(t, h[5]);
+ if (!x || x.mapped) return !1;
+ if (m.value === x.value) return !1;
+ if (u.color) {
+ var b = m.value,
+ w = x.value,
+ _ = !(b[0] !== w[0] || b[1] !== w[1] || b[2] !== w[2] || b[3] !== w[3] && (null != b[3] && 1 !== b[3] || null != w[3] && 1 !== w[3]));
+ if (_) return !1
+ }
+ return {
+ name: t,
+ value: h,
+ strValue: "" + n,
+ mapped: y,
+ field: h[1],
+ fieldMin: parseFloat(h[2]),
+ fieldMax: parseFloat(h[3]),
+ valueMin: m.value,
+ valueMax: x.value,
+ bypass: r,
+ hasPie: c
+ }
+ }
+ }
+ if (u.number) {
+ var E, T = "px";
+ if (u.units && (E = u.units), u.implicitUnits && (T = u.implicitUnits), !u.unitless)
+ if (l) {
+ var S = "px|em" + (u.allowPercent ? "|\\%" : "");
+ E && (S = E);
+ var C = n.match("^(" + e.util.regex.number + ")(" + S + ")?$");
+ C && (n = C[1], E = C[2] || T)
+ } else(!E || u.implicitUnits) && (E = T);
+ if (n = parseFloat(n), isNaN(n) && void 0 === u.enums) return null;
+ if (isNaN(n) && void 0 !== u.enums) {
+ n = o;
+ for (var k = 0; k < u.enums.length; k++) {
+ var D = u.enums[k];
+ if (D === n) return {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ }
+ }
+ return null
+ }
+ if (u.integer && !e.is.integer(n)) return null;
+ if (void 0 !== u.min && n < u.min || void 0 !== u.max && n > u.max) return null;
+ var N = {
+ name: t,
+ value: n,
+ strValue: "" + n + (E ? E : ""),
+ units: E,
+ bypass: r,
+ hasPie: c && null != n && 0 !== n && "" !== n
+ };
+ return u.unitless || "px" !== E && "em" !== E || (N.pxValue = "px" !== E && E ? this.getEmSizeInPixels() * n : n), ("ms" === E || "s" === E) && (N.msValue = "ms" === E ? n : 1e3 * n), N
+ }
+ if (u.propList) {
+ var P = [],
+ M = "" + n;
+ if ("none" === M);
+ else {
+ for (var B = M.split(","), k = 0; k < B.length; k++) {
+ var L = e.util.trim(B[k]);
+ e.style.properties[L] && P.push(L)
+ }
+ if (0 === P.length) return null
+ }
+ return {
+ name: t,
+ value: P,
+ strValue: 0 === P.length ? "none" : P.join(", "),
+ bypass: r
+ }
+ }
+ if (u.color) {
+ var O = e.util.color2tuple(n);
+ return O ? {
+ name: t,
+ value: O,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }
+ if (u.enums) {
+ for (var k = 0; k < u.enums.length; k++) {
+ var D = u.enums[k];
+ if (D === n) return {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ }
+ }
+ return null
+ }
+ if (u.regex) {
+ var A = new RegExp(u.regex),
+ I = A.exec(n);
+ return I ? {
+ name: t,
+ value: I,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }
+ return u.string ? {
+ name: t,
+ value: n,
+ strValue: "" + n,
+ bypass: r
+ } : null
+ }, e.styfn.selector = function(t) {
+ var n = "core" === t ? null : new e.Selector(t),
+ r = this.length++;
+ return this[r] = {
+ selector: n,
+ properties: [],
+ mappedProperties: [],
+ index: r
+ }, this
+ }, e.styfn.css = function() {
+ var t = arguments;
+ switch (t.length) {
+ case 1:
+ for (var n = t[0], r = 0; r < e.style.properties.length; r++) {
+ var i = e.style.properties[r],
+ a = n[i.name];
+ void 0 === a && (a = n[e.util.dash2camel(i.name)]), void 0 !== a && this.cssRule(i.name, a)
+ }
+ break;
+ case 2:
+ this.cssRule(t[0], t[1])
+ }
+ return this
+ }, e.styfn.style = e.styfn.css, e.styfn.cssRule = function(e, t) {
+ var n = this.parse(e, t);
+ if (n) {
+ var r = this.length - 1;
+ this[r].properties.push(n), this[r].properties[n.name] = n, n.hasPie && (this._private.hasPie = !0), n.mapped && this[r].mappedProperties.push(n);
+ var i = !this[r].selector;
+ i && (this._private.coreStyle[n.name] = n)
+ }
+ return this
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.styfn.apply = function(e) {
+ var t = this;
+ t._private.newStyle && (this._private.contextStyles = {}, this._private.propDiffs = {});
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = t.getContextMeta(r),
+ a = t.getContextStyle(i),
+ o = t.applyContextStyle(i, a, r);
+ t.updateTransitions(r, o.diffProps), t.updateStyleHints(r)
+ }
+ t._private.newStyle = !1
+ }, e.styfn.getPropertiesDiff = function(e, t) {
+ var n = this,
+ r = n._private.propDiffs = n._private.propDiffs || {},
+ i = e + "-" + t,
+ a = r[i];
+ if (a) return a;
+ for (var o = [], s = {}, l = 0; l < n.length; l++) {
+ var u = n[l],
+ c = "t" === e[l],
+ d = "t" === t[l],
+ h = c !== d,
+ p = u.mappedProperties.length > 0;
+ if (h || p) {
+ var f;
+ h && p ? f = u.properties : h ? f = u.properties : p && (f = u.mappedProperties);
+ for (var v = 0; v < f.length; v++) {
+ for (var g = f[v], y = g.name, m = !1, x = l + 1; x < n.length; x++) {
+ var b = n[x],
+ w = "t" === t[x];
+ if (w && (m = null != b.properties[g.name])) break
+ }
+ s[y] || m || (s[y] = !0, o.push(y))
+ }
+ }
+ }
+ return r[i] = o, o
+ }, e.styfn.getContextMeta = function(e) {
+ var t, n = this,
+ r = "",
+ i = e._private.styleCxtKey || "";
+ n._private.newStyle && (i = "");
+ for (var a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o.selector && o.selector.matches(e);
+ r += s ? "t" : "f"
+ }
+ return t = n.getPropertiesDiff(i, r), e._private.styleCxtKey = r, {
+ key: r,
+ diffPropNames: t
+ }
+ }, e.styfn.getContextStyle = function(e) {
+ var t = e.key,
+ n = this,
+ r = this._private.contextStyles = this._private.contextStyles || {};
+ if (r[t]) return r[t];
+ for (var i = {
+ _private: {
+ key: t
+ }
+ }, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = "t" === t[a];
+ if (s)
+ for (var l = 0; l < o.properties.length; l++) {
+ var u = o.properties[l],
+ c = i[u.name] = u;
+ c.context = o
+ }
+ }
+ return r[t] = i, i
+ }, e.styfn.applyContextStyle = function(e, t, n) {
+ for (var r = this, i = e.diffPropNames, a = {}, o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = t[s],
+ u = n._private.style[s];
+ if (l && u !== l) {
+ var c = a[s] = {
+ prev: u
+ };
+ r.applyParsedProperty(n, l), c.next = n._private.style[s], c.next && c.next.bypass && (c.next = c.next.bypassed)
+ }
+ }
+ return {
+ diffProps: a
+ }
+ }, e.styfn.updateStyleHints = function(t) {
+ var n = t._private,
+ r = this,
+ i = n.style,
+ a = !1;
+ if ("nodes" === n.group && r._private.hasPie)
+ for (var o = 1; o <= e.style.pieBackgroundN; o++) {
+ var s = n.style["pie-" + o + "-background-size"].value;
+ if (s > 0) {
+ a = !0;
+ break
+ }
+ }
+ n.hasPie = a;
+ var l = i["text-transform"].strValue,
+ u = i.content.strValue,
+ c = i["font-style"].strValue,
+ s = i["font-size"].pxValue + "px",
+ d = i["font-family"].strValue,
+ h = i["font-weight"].strValue,
+ p = i["text-valign"].strValue,
+ f = i["text-valign"].strValue,
+ v = i["text-outline-width"].pxValue,
+ g = i["text-wrap"].strValue,
+ y = i["text-max-width"].pxValue;
+ n.labelKey = c + "$" + s + "$" + d + "$" + h + "$" + u + "$" + l + "$" + p + "$" + f + "$" + v + "$" + g + "$" + y, n.fontKey = c + "$" + h + "$" + s + "$" + d;
+ var m = i.width.pxValue,
+ x = i.height.pxValue,
+ b = i["border-width"].pxValue;
+ if (n.boundingBoxKey = m + "$" + x + "$" + b, "edges" === t._private.group) {
+ var w = i["control-point-step-size"].pxValue,
+ _ = i["control-point-distance"] ? i["control-point-distance"].pxValue : void 0,
+ E = i["control-point-weight"].value,
+ T = i["curve-style"].strValue;
+ n.boundingBoxKey += "$" + w + "$" + _ + "$" + E + "$" + T
+ }
+ n.styleKey = Date.now()
+ }, e.styfn.applyParsedProperty = function(t, n) {
+ var r, i, a = n,
+ o = t._private.style,
+ s = e.style.types,
+ l = e.style.properties[a.name].type,
+ u = a.bypass,
+ c = o[a.name],
+ d = c && c.bypass,
+ h = t._private;
+ if (("height" === n.name || "width" === n.name) && t.isNode()) {
+ if ("auto" === n.value && !t.isParent()) return !1;
+ "auto" !== n.value && t.isParent() && (a = n = this.parse(n.name, "auto", u))
+ }
+ if (u && a.deleteBypass) {
+ var p = o[a.name];
+ return p ? p.bypass && p.bypassed ? (o[a.name] = p.bypassed, !0) : !1 : !0
+ }
+ var f = function() {
+ e.util.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + t.id() + "` for property `" + a.name + "` with data field `" + a.field + "`); try a `[" + a.field + "]` selector to limit scope to elements with `" + a.field + "` defined")
+ };
+ switch (a.mapped) {
+ case s.mapData:
+ case s.mapLayoutData:
+ case s.mapScratch:
+ var r, v = a.mapped === s.mapLayoutData,
+ g = a.mapped === s.mapScratch,
+ y = a.field.split(".");
+ r = g || v ? h.scratch : h.data;
+ for (var m = 0; m < y.length && r; m++) {
+ var x = y[m];
+ r = r[x]
+ }
+ var b;
+ if (b = e.is.number(r) ? (r - a.fieldMin) / (a.fieldMax - a.fieldMin) : 0, 0 > b ? b = 0 : b > 1 && (b = 1), l.color) {
+ var w = a.valueMin[0],
+ _ = a.valueMax[0],
+ E = a.valueMin[1],
+ T = a.valueMax[1],
+ S = a.valueMin[2],
+ C = a.valueMax[2],
+ k = null == a.valueMin[3] ? 1 : a.valueMin[3],
+ D = null == a.valueMax[3] ? 1 : a.valueMax[3],
+ N = [Math.round(w + (_ - w) * b), Math.round(E + (T - E) * b), Math.round(S + (C - S) * b), Math.round(k + (D - k) * b)];
+ i = {
+ bypass: a.bypass,
+ name: a.name,
+ value: N,
+ strValue: "rgb(" + N[0] + ", " + N[1] + ", " + N[2] + ")"
+ }
+ } else {
+ if (!l.number) return !1;
+ var P = a.valueMin + (a.valueMax - a.valueMin) * b;
+ i = this.parse(a.name, P, a.bypass, !0)
+ }
+ i || (i = this.parse(a.name, c.strValue, a.bypass, !0)), i || f(), i.mapping = a, a = i;
+ break;
+ case s.data:
+ case s.layoutData:
+ case s.scratch:
+ var r, v = a.mapped === s.layoutData,
+ g = a.mapped === s.scratch,
+ y = a.field.split(".");
+ if (r = g || v ? h.scratch : h.data)
+ for (var m = 0; m < y.length; m++) {
+ var x = y[m];
+ r = r[x]
+ }
+ if (i = this.parse(a.name, r, a.bypass, !0), !i) {
+ var M = c ? c.strValue : "";
+ i = this.parse(a.name, M, a.bypass, !0)
+ }
+ i || f(), i.mapping = a, a = i;
+ break;
+ case s.fn:
+ var B = a.value,
+ L = B(t);
+ i = this.parse(a.name, L, a.bypass, !0), i.mapping = a, a = i;
+ break;
+ case void 0:
+ break;
+ default:
+ return !1
+ }
+ return u ? (d ? a.bypassed = c.bypassed : a.bypassed = c, o[a.name] = a) : d ? c.bypassed = a : o[a.name] = a, !0
+ }, e.styfn.update = function() {
+ var e = this._private.cy,
+ t = e.elements();
+ t.updateStyle()
+ }, e.styfn.updateMappers = function(t) {
+ for (var n = 0; n < t.length; n++) {
+ for (var r = t[n], i = r._private.style, a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = i[o.name];
+ if (s && s.mapping) {
+ var l = s.mapping;
+ this.applyParsedProperty(r, l)
+ }
+ }
+ this.updateStyleHints(r)
+ }
+ }, e.styfn.updateTransitions = function(t, n, r) {
+ var i = this,
+ a = t._private.style,
+ o = a["transition-property"].value,
+ s = a["transition-duration"].msValue,
+ l = a["transition-delay"].msValue,
+ u = {};
+ if (o.length > 0 && s > 0) {
+ for (var c = !1, d = 0; d < o.length; d++) {
+ var h = o[d],
+ p = a[h],
+ f = n[h];
+ if (f) {
+ var v, g = f.prev,
+ y = g,
+ m = null != f.next ? f.next : p,
+ x = !1,
+ b = 1e-6;
+ y && (e.is.number(y.pxValue) && e.is.number(m.pxValue) ? (x = m.pxValue - y.pxValue, v = y.pxValue + b * x) : e.is.number(y.value) && e.is.number(m.value) ? (x = m.value - y.value, v = y.value + b * x) : e.is.array(y.value) && e.is.array(m.value) && (x = y.value[0] !== m.value[0] || y.value[1] !== m.value[1] || y.value[2] !== m.value[2], v = y.strValue), x && (u[h] = m.strValue, this.applyBypass(t, h, v), c = !0))
+ }
+ }
+ if (!c) return;
+ t._private.transitioning = !0, t.stop(), l > 0 && t.delay(l), t.animate({
+ css: u
+ }, {
+ duration: s,
+ queue: !1,
+ complete: function() {
+ r || i.removeBypasses(t, o), t._private.transitioning = !1
+ }
+ })
+ } else t._private.transitioning && (t.stop(), this.removeBypasses(t, o), t._private.transitioning = !1)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.styfn.applyBypass = function(t, n, r, i) {
+ var a = [],
+ o = !0;
+ if ("*" === n || "**" === n) {
+ if (void 0 !== r)
+ for (var s = 0; s < e.style.properties.length; s++) {
+ var l = e.style.properties[s],
+ n = l.name,
+ u = this.parse(n, r, !0);
+ u && a.push(u)
+ }
+ } else if (e.is.string(n)) {
+ var u = this.parse(n, r, !0);
+ u && a.push(u)
+ } else {
+ if (!e.is.plainObject(n)) return !1;
+ var c = n;
+ i = r;
+ for (var s = 0; s < e.style.properties.length; s++) {
+ var l = e.style.properties[s],
+ n = l.name,
+ r = c[n];
+ if (void 0 === r && (r = c[e.util.dash2camel(n)]), void 0 !== r) {
+ var u = this.parse(n, r, !0);
+ u && a.push(u)
+ }
+ }
+ }
+ if (0 === a.length) return !1;
+ for (var d = !1, s = 0; s < t.length; s++) {
+ for (var h, p = t[s], f = p._private.style, v = {}, g = 0; g < a.length; g++) {
+ var l = a[g];
+ if (i) {
+ var y = f[l.name];
+ h = v[l.name] = {
+ prev: y
+ }
+ }
+ d = this.applyParsedProperty(p, l) || d, i && (h.next = f[l.name])
+ }
+ i && this.updateTransitions(p, v, o)
+ }
+ return d
+ }, e.styfn.overrideBypass = function(t, n, r) {
+ for (var i = 0; i < t.length; i++) {
+ var a = t[i],
+ o = a._private.style[e.util.camel2dash(n)];
+ o.bypass ? (o.value = r, o.pxValue = r) : this.applyBypass(a, n, r)
+ }
+ }, e.styfn.removeAllBypasses = function(t, n) {
+ for (var r = !0, i = 0; i < t.length; i++) {
+ for (var a = t[i], o = {}, s = a._private.style, l = 0; l < e.style.properties.length; l++) {
+ var u = e.style.properties[l],
+ c = u.name,
+ d = "",
+ h = this.parse(c, d, !0),
+ p = s[u.name],
+ f = o[u.name] = {
+ prev: p
+ };
+ this.applyParsedProperty(a, h), f.next = s[u.name]
+ }
+ n && this.updateTransitions(a, o, r)
+ }
+ }, e.styfn.removeBypasses = function(t, n, r) {
+ for (var i = !0, a = 0; a < t.length; a++) {
+ for (var o = t[a], s = {}, l = o._private.style, u = 0; u < n.length; u++) {
+ var c = n[u],
+ d = e.style.properties[c],
+ h = "",
+ p = this.parse(c, h, !0),
+ f = l[d.name],
+ v = s[d.name] = {
+ prev: f
+ };
+ this.applyParsedProperty(o, p), v.next = l[d.name]
+ }
+ r && this.updateTransitions(o, s, i)
+ }
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ e.styfn.getEmSizeInPixels = function() {
+ var e = this._private.cy,
+ n = e.container();
+ if (t && n && t.getComputedStyle) {
+ var r = t.getComputedStyle(n).getPropertyValue("font-size"),
+ i = parseFloat(r);
+ return i
+ }
+ return 1
+ }, e.styfn.containerCss = function(e) {
+ var n = this._private.cy,
+ r = n.container();
+ return t && r && t.getComputedStyle ? t.getComputedStyle(r).getPropertyValue(e) : void 0
+ }, e.styfn.containerProperty = function(e) {
+ var t = this.containerCss(e),
+ n = this.parse(e, t);
+ return n
+ }, e.styfn.containerPropertyAsString = function(e) {
+ var t = this.containerProperty(e);
+ return t ? t.strValue : void 0
+ }
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.styfn.getRenderedStyle = function(t) {
+ var t = t[0];
+ if (t) {
+ for (var n = {}, r = t._private.style, i = this._private.cy, a = i.zoom(), o = 0; o < e.style.properties.length; o++) {
+ var s = e.style.properties[o],
+ l = r[s.name];
+ if (l) {
+ var u = l.unitless ? l.strValue : l.pxValue * a + "px";
+ n[s.name] = u, n[e.util.dash2camel(s.name)] = u
+ }
+ }
+ return n
+ }
+ }, e.styfn.getRawStyle = function(t) {
+ var t = t[0];
+ if (t) {
+ for (var n = {}, r = t._private.style, i = 0; i < e.style.properties.length; i++) {
+ var a = e.style.properties[i],
+ o = r[a.name];
+ o && (n[a.name] = o.strValue, n[e.util.dash2camel(a.name)] = o.strValue)
+ }
+ return n
+ }
+ }, e.styfn.getValueStyle = function(t) {
+ var n, r = {},
+ i = e.is.element(t);
+ if (n = i ? t._private.style : t)
+ for (var a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = n[o.name] || n[e.util.dash2camel(o.name)];
+ void 0 === s || e.is.plainObject(s) || (s = this.parse(o.name, s)), s && (r[o.name] = s, r[e.util.dash2camel(o.name)] = s)
+ }
+ return r
+ }, e.styfn.getPropsList = function(t) {
+ var n = [],
+ r = t,
+ i = e.style.properties;
+ if (r)
+ for (var a in r) {
+ var o = r[a],
+ s = i[a] || i[e.util.camel2dash(a)],
+ l = this.parse(s.name, o);
+ n.push(l)
+ }
+ return n
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.style.applyFromJson = function(e, t) {
+ for (var n = 0; n < t.length; n++) {
+ var r = t[n],
+ i = r.selector,
+ a = r.style || r.css;
+ e.selector(i);
+ for (var o in a) {
+ var s = a[o];
+ e.css(o, s)
+ }
+ }
+ return e
+ }, e.style.fromJson = function(t, n) {
+ var r = new e.Style(t);
+ return e.style.applyFromJson(r, n), r
+ }, e.styfn.fromJson = function(t) {
+ var n = this;
+ return n.resetToDefault(), e.style.applyFromJson(n, t), n
+ }, e.styfn.json = function() {
+ for (var e = [], t = this.defaultLength; t < this.length; t++) {
+ for (var n = this[t], r = n.selector, i = n.properties, a = {}, o = 0; o < i.length; o++) {
+ var s = i[o];
+ a[s.name] = s.strValue
+ }
+ e.push({
+ selector: r ? r.toString() : "core",
+ style: a
+ })
+ }
+ return e
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.style.applyFromString = function(t, n) {
+ function r() {
+ l = l.length > a.length ? l.substr(a.length) : ""
+ }
+
+ function i() {
+ o = o.length > s.length ? o.substr(s.length) : ""
+ }
+ var a, o, s, l = "" + n;
+ for (l = l.replace(/[/][*](\s|.)+?[*][/]/g, "");;) {
+ var u = l.match(/^\s*$/);
+ if (u) break;
+ var c = l.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);
+ if (!c) {
+ e.util.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + l);
+ break
+ }
+ a = c[0];
+ var d = c[1];
+ if ("core" !== d) {
+ var h = new e.Selector(d);
+ if (h._private.invalid) {
+ e.util.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + d), r();
+ continue
+ }
+ }
+ var p = c[2],
+ f = !1;
+ o = p;
+ for (var v = [];;) {
+ var u = o.match(/^\s*$/);
+ if (u) break;
+ var g = o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);
+ if (!g) {
+ e.util.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + p), f = !0;
+ break
+ }
+ s = g[0];
+ var y = g[1],
+ m = g[2],
+ x = e.style.properties[y];
+ if (x) {
+ var b = t.parse(y, m);
+ b ? (v.push({
+ name: y,
+ val: m
+ }), i()) : (e.util.error("Skipping property: Invalid property definition in: " + s), i())
+ } else e.util.error("Skipping property: Invalid property name in: " + s), i()
+ }
+ if (f) {
+ r();
+ break
+ }
+ t.selector(d);
+ for (var w = 0; w < v.length; w++) {
+ var x = v[w];
+ t.css(x.name, x.val)
+ }
+ r()
+ }
+ return t
+ }, e.style.fromString = function(t, n) {
+ var r = new e.Style(t);
+ return e.style.applyFromString(r, n), r
+ }, e.styfn.fromString = function(t) {
+ var n = this;
+ return n.resetToDefault(), e.style.applyFromString(n, t), n
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.stylesheet = e.Stylesheet = function() {
+ return this instanceof e.Stylesheet ? void(this.length = 0) : new e.Stylesheet
+ }, e.sheetfn = e.Stylesheet.prototype, e.sheetfn.selector = function(e) {
+ var t = this.length++;
+ return this[t] = {
+ selector: e,
+ properties: []
+ }, this
+ }, e.sheetfn.css = function(t, n) {
+ var r = this.length - 1;
+ if (e.is.string(t)) this[r].properties.push({
+ name: t,
+ value: n
+ });
+ else if (e.is.plainObject(t))
+ for (var i = t, a = 0; a < e.style.properties.length; a++) {
+ var o = e.style.properties[a],
+ s = i[o.name];
+ if (void 0 === s && (s = i[e.util.dash2camel(o.name)]), void 0 !== s) {
+ var t = o.name,
+ n = s;
+ this[r].properties.push({
+ name: t,
+ value: n
+ })
+ }
+ }
+ return this
+ }, e.sheetfn.style = e.sheetfn.css, e.sheetfn.generateStyle = function(t) {
+ for (var n = new e.Style(t), r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = i.selector,
+ o = i.properties;
+ n.selector(a);
+ for (var s = 0; s < o.length; s++) {
+ var l = o[s];
+ n.css(l.name, l.value)
+ }
+ }
+ return n
+ }
+ }(cytoscape),
+ function(e, t) {
+ "use strict";
+ e.Thread = function(t) {
+ return this instanceof e.Thread ? (this._private = {
+ requires: [],
+ files: [],
+ queue: null,
+ pass: []
+ }, void(t && this.run(t))) : new e.Thread(t)
+ }, e.thread = e.Thread, e.thdfn = e.Thread.prototype, e.fn.thread = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Thread.prototype[r] = i
+ }
+ };
+ var n = function(t) {
+ var n = e.is.fn(t) ? t.toString() : 'JSON.parse("' + JSON.stringify(t) + '")';
+ return n
+ },
+ r = function(t) {
+ var i, o;
+ e.is.object(t) && t.fn ? (i = a(t.fn, t.name), o = t.name, t = t.fn) : e.is.fn(t) ? (i = t.toString(), o = t.name) : e.is.string(t) ? i = t : e.is.object(t) && (i = t.proto ? "" : t.name + " = {};", o = t.name, t = t.obj), i += "\n";
+ var s = function(e, t) {
+ if (e.prototype) {
+ var n = !1;
+ for (var a in e.prototype) {
+ n = !0;
+ break
+ }
+ n && (i += r({
+ name: t,
+ obj: e,
+ proto: !0
+ }, e))
+ }
+ };
+ if (t.prototype && null != o)
+ for (var l in t.prototype) {
+ var u = "",
+ c = t.prototype[l],
+ d = n(c),
+ h = o + ".prototype." + l;
+ u += h + " = " + d + ";\n", u && (i += u), s(c, h)
+ }
+ if (!e.is.string(t))
+ for (var l in t) {
+ var p = "";
+ if (t.hasOwnProperty(l)) {
+ var c = t[l],
+ d = n(c),
+ h = o + '["' + l + '"]';
+ p += h + " = " + d + ";\n"
+ }
+ p && (i += p), s(c, h)
+ }
+ return i
+ },
+ i = function(t) {
+ return e.is.string(t) && t.match(/\.js$/)
+ };
+ e.fn.thread({
+ require: function(t, n) {
+ return i(t) ? (this._private.files.push(t), this) : (n && (e.is.fn(t) ? (n = n || t.name, t = {
+ name: n,
+ fn: t
+ }) : t = {
+ name: n,
+ obj: t
+ }), this._private.requires.push(t), this)
+ },
+ pass: function(e) {
+ return this._private.pass.push(e), this
+ },
+ run: function(n, i) {
+ var a = this,
+ o = this._private;
+ if (i = i || o.pass.shift(), o.stopped) return void e.util.error("Attempted to run a stopped thread! Start a new thread or do not stop the existing thread and reuse it.");
+ if (o.running) return o.queue = o.queue.then(function() {
+ return a.run(n, i)
+ });
+ var s = null != t,
+ l = "undefined" != typeof module;
+ a.trigger("run");
+ var u = new e.Promise(function(u, c) {
+ o.running = !0;
+ var d = o.ran,
+ h = e.is.string(n) ? n : n.toString(),
+ p = "\n" + o.requires.map(function(e) {
+ return r(e)
+ }).concat(o.files.map(function(e) {
+ if (s) {
+ var n = function(e) {
+ return e.match(/^\.\//) || e.match(/^\.\./) ? t.location.origin + t.location.pathname + e : e.match(/^\//) ? t.location.origin + "/" + e : e
+ };
+ return 'importScripts("' + n(e) + '");'
+ }
+ return l ? 'eval( require("fs").readFileSync("' + e + '", { encoding: "utf8" }) );' : void 0
+ })).concat(["( function(){", "var ret = (" + h + ")(" + JSON.stringify(i) + ");", "if( ret !== undefined ){ resolve(ret); }", "} )()\n"]).join("\n");
+ if (o.requires = [], o.files = [], s) {
+ var f, v;
+ if (!d) {
+ var g = p + "";
+ p = ["function broadcast(m){ return message(m); };", "function message(m){ postMessage(m); };", "function listen(fn){", ' self.addEventListener("message", function(m){ ', ' if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){', " } else { ", " fn( m.data );", " }", " });", "};", 'self.addEventListener("message", function(m){ if( m.data.$$eval ){ eval( m.data.$$eval ); } });', "function resolve(v){ postMessage({ $$resolve: v }); };", "function reject(v){ postMessage({ $$reject: v }); };"].join("\n"), p += g, f = new Blob([p], {
+ type: "application/javascript"
+ }), v = t.URL.createObjectURL(f)
+ }
+ var y = o.webworker = o.webworker || new Worker(v);
+ d && y.postMessage({
+ $$eval: p
+ });
+ var m;
+ y.addEventListener("message", m = function(t) {
+ var n = e.is.object(t) && e.is.object(t.data);
+ n && "$$resolve" in t.data ? (y.removeEventListener("message", m), u(t.data.$$resolve)) : n && "$$reject" in t.data ? (y.removeEventListener("message", m), c(t.data.$$reject)) : a.trigger(new e.Event(t, {
+ type: "message",
+ message: t.data
+ }))
+ }, !1), d || y.postMessage("$$start")
+ } else if (l) {
+ var m, x = require("path"),
+ b = require("child_process"),
+ w = o.child = o.child || b.fork(x.join(__dirname, "thread-node-fork"));
+ w.on("message", m = function(t) {
+ e.is.object(t) && "$$resolve" in t ? (w.removeListener("message", m), u(t.$$resolve)) : e.is.object(t) && "$$reject" in t ? (w.removeListener("message", m), c(t.$$reject)) : a.trigger(new e.Event({}, {
+ type: "message",
+ message: t
+ }))
+ }), w.send({
+ $$eval: p
+ })
+ } else e.error("Tried to create thread but no underlying tech found!")
+ }).then(function(e) {
+ return o.running = !1, o.ran = !0, a.trigger("ran"), e
+ });
+ return null == o.queue && (o.queue = u), u
+ },
+ message: function(e) {
+ var t = this._private;
+ return t.webworker && t.webworker.postMessage(e), t.child && t.child.send(e), this
+ },
+ stop: function() {
+ var e = this._private;
+ return e.webworker && e.webworker.terminate(), e.child && e.child.kill(), e.stopped = !0, this.trigger("stop")
+ },
+ stopped: function() {
+ return this._private.stopped
+ }
+ });
+ var a = function(e, t) {
+ var n = e.toString();
+ return n = n.replace(/function.*\(/, "function " + t + "(")
+ },
+ o = function(e) {
+ return e = e || {},
+ function(t, n) {
+ var r = a(t, "_$_$_" + e.name);
+ return this.require(r), this.run(["function( data ){", " var origResolve = resolve;", " var res = [];", " ", " resolve = function( val ){", " res.push( val );", " };", " ", " var ret = data." + e.name + "( _$_$_" + e.name + (arguments.length > 1 ? ", " + JSON.stringify(n) : "") + " );", " ", " resolve = origResolve;", " resolve( res.length > 0 ? res : ret );", "}"].join("\n"))
+ }
+ };
+ e.fn.thread({
+ reduce: o({
+ name: "reduce"
+ }),
+ reduceRight: o({
+ name: "reduceRight"
+ }),
+ map: o({
+ name: "map"
+ })
+ });
+ var s = e.thdfn;
+ s.promise = s.run, s.terminate = s.halt = s.stop, s.include = s.require, e.worker = e.Worker = e.Thread, e.fn.thread({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.thdfn)
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.Fabric = function(t) {
+ if (!(this instanceof e.Fabric)) return new e.Fabric(t);
+ this._private = {
+ pass: []
+ };
+ var n = 4;
+ e.is.number(t), t = "undefined" != typeof navigator && null != navigator.hardwareConcurrency ? navigator.hardwareConcurrency : "undefined" != typeof module ? require("os").cpus().length : n;
+ for (var r = 0; t > r; r++) this[r] = e.Thread();
+ this.length = t
+ }, e.fabric = e.Fabric, e.fabfn = e.Fabric.prototype, e.fn.fabric = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Fabric.prototype[r] = i
+ }
+ }, e.fn.fabric({
+ require: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = this[n];
+ r.require(e, t)
+ }
+ return this
+ },
+ random: function() {
+ var e = Math.round((this.length - 1) * Math.random()),
+ t = this[e];
+ return t
+ },
+ run: function(e) {
+ var t = this._private.pass.shift();
+ return this.random().pass(t).run(e)
+ },
+ message: function(e) {
+ return this.random().message(e)
+ },
+ broadcast: function(e) {
+ for (var t = 0; t < this.length; t++) {
+ var n = this[t];
+ n.message(e)
+ }
+ return this
+ },
+ stop: function() {
+ for (var e = 0; e < this.length; e++) {
+ var t = this[e];
+ t.stop()
+ }
+ return this
+ },
+ pass: function(t) {
+ var n = this._private.pass;
+ return e.is.array(t) ? n.push(t) : e.util.error("Only arrays or collections may be used with fabric.pass()"), this
+ },
+ spreadSize: function() {
+ var e = Math.ceil(this._private.pass[0].length / this.length);
+ return e = Math.max(1, e)
+ },
+ spread: function(t) {
+ for (var n = this, r = n._private, i = n.spreadSize(), a = r.pass.shift().concat([]), o = [], s = 0; s < this.length; s++) {
+ var l = this[s],
+ u = a.splice(0, i),
+ c = l.pass(u).run(t);
+ o.push(c);
+ var d = 0 === a.length;
+ if (d) break
+ }
+ return e.Promise.all(o).then(function(e) {
+ for (var t = [], n = 0, r = 0; r < e.length; r++)
+ for (var i = e[r], a = 0; a < i.length; a++) {
+ var o = i[a];
+ t[n++] = o
+ }
+ return t
+ })
+ },
+ map: function(e) {
+ var t = this;
+ return t.require(e, "_$_$_fabmap"), t.spread(function(e) {
+ var t = [],
+ n = resolve;
+ resolve = function(e) {
+ t.push(e)
+ };
+ for (var r = 0; r < e.length; r++) {
+ var i = t.length,
+ a = _$_$_fabmap(e[r]),
+ o = i === t.length;
+ o && t.push(a)
+ }
+ return resolve = n, t
+ })
+ },
+ filter: function(e) {
+ var t = this._private,
+ n = t.pass[0];
+ return this.map(e).then(function(e) {
+ for (var t = [], r = 0; r < n.length; r++) {
+ var i = n[r],
+ a = e[r];
+ a && t.push(i)
+ }
+ return t
+ })
+ },
+ sort: function(e) {
+ var t = this,
+ n = this._private.pass[0].length,
+ r = this.spreadSize();
+ return e = e || function(e, t) {
+ return t > e ? -1 : e > t ? 1 : 0
+ }, t.require(e, "_$_$_cmp"), t.spread(function(e) {
+ var t = e.sort(_$_$_cmp);
+ resolve(t)
+ }).then(function(t) {
+ for (var i = function(r, i, a) {
+ i = Math.min(i, n), a = Math.min(a, n);
+ for (var o = r, s = i, l = [], u = o; a > u; u++) {
+ var c = t[r],
+ d = t[i];
+ s > r && (i >= a || e(c, d) <= 0) ? (l.push(c), r++) : (l.push(d), i++)
+ }
+ for (var u = 0; u < l.length; u++) {
+ var h = o + u;
+ t[h] = l[u]
+ }
+ }, a = r; n > a; a *= 2)
+ for (var o = 0; n > o; o += 2 * a) i(o, o + a, o + 2 * a);
+ return t
+ })
+ }
+ });
+ var n = function(e) {
+ return e = e || {},
+ function(t, n) {
+ var r = this._private.pass.shift();
+ return this.random().pass(r)[e.threadFn](t, n)
+ }
+ };
+ e.fn.fabric({
+ randomMap: n({
+ threadFn: "map"
+ }),
+ reduce: n({
+ threadFn: "reduce"
+ }),
+ reduceRight: n({
+ threadFn: "reduceRight"
+ })
+ });
+ var r = e.fabfn;
+ r.promise = r.run, r.terminate = r.halt = r.stop, r.include = r.require, e.fn.fabric({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.fabfn)
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ var n = {},
+ r = e.util.copy(n);
+ e.defaults = function(t) {
+ n = e.util.extend({}, r, t)
+ }, e.fn.core = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Core.prototype[r] = i
+ }
+ }, e.Core = function(r) {
+ if (!(this instanceof e.Core)) return new e.Core(r);
+ var i = this;
+ r = e.util.extend({}, n, r);
+ var a = r.container,
+ o = a ? a._cyreg : null;
+ if (o = o || {}, o && o.cy) {
+ if (a)
+ for (; a.firstChild;) a.removeChild(a.firstChild);
+ o.cy.notify({
+ type: "destroy"
+ }), o = {}
+ }
+ var s = o.readies = o.readies || [];
+ a && (a._cyreg = o), o.cy = i;
+ var l = void 0 !== t && void 0 !== a && !r.headless,
+ u = r;
+ u.layout = e.util.extend({
+ name: l ? "grid" : "null"
+ }, u.layout), u.renderer = e.util.extend({
+ name: l ? "canvas" : "null"
+ }, u.renderer);
+ var c = function(e, t, n) {
+ return void 0 !== t ? t : void 0 !== n ? n : e
+ },
+ d = this._private = {
+ container: u.container,
+ ready: !1,
+ initrender: !1,
+ options: u,
+ elements: [],
+ id2index: {},
+ listeners: [],
+ onRenders: [],
+ aniEles: e.Collection(this),
+ scratch: {},
+ layout: null,
+ renderer: null,
+ notificationsEnabled: !0,
+ minZoom: 1e-50,
+ maxZoom: 1e50,
+ zoomingEnabled: c(!0, u.zoomingEnabled),
+ userZoomingEnabled: c(!0, u.userZoomingEnabled),
+ panningEnabled: c(!0, u.panningEnabled),
+ userPanningEnabled: c(!0, u.userPanningEnabled),
+ boxSelectionEnabled: c(!1, u.boxSelectionEnabled),
+ autolock: c(!1, u.autolock, u.autolockNodes),
+ autoungrabify: c(!1, u.autoungrabify, u.autoungrabifyNodes),
+ autounselectify: c(!1, u.autounselectify),
+ styleEnabled: void 0 === u.styleEnabled ? l : u.styleEnabled,
+ zoom: e.is.number(u.zoom) ? u.zoom : 1,
+ pan: {
+ x: e.is.plainObject(u.pan) && e.is.number(u.pan.x) ? u.pan.x : 0,
+ y: e.is.plainObject(u.pan) && e.is.number(u.pan.y) ? u.pan.y : 0
+ },
+ animation: {
+ current: [],
+ queue: []
+ },
+ hasCompoundNodes: !1,
+ deferredExecQueue: []
+ },
+ h = u.selectionType;
+ void 0 === h || "additive" !== h && "single" !== h ? d.selectionType = "single" : d.selectionType = h, e.is.number(u.minZoom) && e.is.number(u.maxZoom) && u.minZoom < u.maxZoom ? (d.minZoom = u.minZoom, d.maxZoom = u.maxZoom) : e.is.number(u.minZoom) && void 0 === u.maxZoom ? d.minZoom = u.minZoom : e.is.number(u.maxZoom) && void 0 === u.minZoom && (d.maxZoom = u.maxZoom);
+ var p = function(t) {
+ for (var n = !1, r = 0; r < f.length; r++) {
+ var i = f[r];
+ if (e.is.promise(i)) {
+ n = !0;
+ break
+ }
+ }
+ return n ? e.Promise.all(f).then(t) : void t(f)
+ },
+ f = [u.style, u.elements];
+ p(function(t) {
+ var n = t[0],
+ r = t[1];
+ d.styleEnabled && i.setStyle(n), i.initRenderer(e.util.extend({
+ hideEdgesOnViewport: u.hideEdgesOnViewport,
+ hideLabelsOnViewport: u.hideLabelsOnViewport,
+ textureOnViewport: u.textureOnViewport,
+ wheelSensitivity: e.is.number(u.wheelSensitivity) && u.wheelSensitivity > 0 ? u.wheelSensitivity : 1,
+ motionBlur: void 0 === u.motionBlur ? !0 : u.motionBlur,
+ motionBlurOpacity: void 0 === u.motionBlurOpacity ? .05 : u.motionBlurOpacity,
+ pixelRatio: e.is.number(u.pixelRatio) && u.pixelRatio > 0 ? u.pixelRatio : "auto" === u.pixelRatio ? void 0 : 1,
+ desktopTapThreshold: void 0 === u.desktopTapThreshold ? 4 : u.desktopTapThreshold,
+ touchTapThreshold: void 0 === u.touchTapThreshold ? 8 : u.touchTapThreshold
+ }, u.renderer)), u.initrender && (i.on("initrender", u.initrender), i.on("initrender", function() {
+ i._private.initrender = !0
+ })), i.load(r, function() {
+ i.startAnimationLoop(), i._private.ready = !0, e.is.fn(u.ready) && i.on("ready", u.ready);
+ for (var t = 0; t < s.length; t++) {
+ var n = s[t];
+ i.on("ready", n)
+ }
+ o && (o.readies = []), i.trigger("ready")
+ }, u.done)
+ })
+ }, e.corefn = e.Core.prototype, e.fn.core({
+ isReady: function() {
+ return this._private.ready
+ },
+ ready: function(e) {
+ this.isReady() ? this.trigger("ready", [], e) : this.on("ready", e)
+ },
+ initrender: function() {
+ return this._private.initrender
+ },
+ destroy: function() {
+ this.notify({
+ type: "destroy"
+ });
+ var e = this.container(),
+ t = e.parentNode;
+ if (t) try {
+ t.removeChild(e)
+ } catch (n) {}
+ return this
+ },
+ getElementById: function(t) {
+ var n = this._private.id2index[t];
+ return void 0 !== n ? this._private.elements[n] : new e.Collection(this)
+ },
+ selectionType: function() {
+ return this._private.selectionType
+ },
+ hasCompoundNodes: function() {
+ return this._private.hasCompoundNodes
+ },
+ styleEnabled: function() {
+ return this._private.styleEnabled
+ },
+ addToPool: function(e) {
+ for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = i._private.data.id,
+ o = n[a],
+ s = void 0 !== o;
+ s || (o = t.length, t.push(i), n[a] = o, i._private.index = o)
+ }
+ return this
+ },
+ removeFromPool: function(e) {
+ for (var t = this._private.elements, n = this._private.id2index, r = 0; r < e.length; r++) {
+ var i = e[r],
+ a = i._private.data.id,
+ o = n[a],
+ s = void 0 !== o;
+ if (s) {
+ this._private.id2index[a] = void 0, t.splice(o, 1);
+ for (var l = o; l < t.length; l++) {
+ var u = t[l]._private.data.id;
+ n[u]--, t[l]._private.index--
+ }
+ }
+ }
+ },
+ container: function() {
+ return this._private.container
+ },
+ options: function() {
+ return e.util.copy(this._private.options)
+ },
+ json: function(e) {
+ var t = {},
+ n = this;
+ return t.elements = {}, n.elements().each(function(e, n) {
+ var r = n.group();
+ t.elements[r] || (t.elements[r] = []), t.elements[r].push(n.json())
+ }), this._private.styleEnabled && (t.style = n.style().json()), t.zoomingEnabled = n._private.zoomingEnabled, t.userZoomingEnabled = n._private.userZoomingEnabled, t.zoom = n._private.zoom, t.minZoom = n._private.minZoom, t.maxZoom = n._private.maxZoom, t.panningEnabled = n._private.panningEnabled, t.userPanningEnabled = n._private.userPanningEnabled, t.pan = n._private.pan, t.boxSelectionEnabled = n._private.boxSelectionEnabled, t.layout = n._private.options.layout, t.renderer = n._private.options.renderer, t.hideEdgesOnViewport = n._private.options.hideEdgesOnViewport, t.hideLabelsOnViewport = n._private.options.hideLabelsOnViewport, t.textureOnViewport = n._private.options.textureOnViewport, t.wheelSensitivity = n._private.options.wheelSensitivity, t.motionBlur = n._private.options.motionBlur, t
+ },
+ defer: function(e) {
+ var t = this,
+ n = t._private,
+ r = n.deferredExecQueue;
+ r.push(e), n.deferredTimeout || (n.deferredTimeout = setTimeout(function() {
+ for (; r.length > 0;) r.shift()();
+ n.deferredTimeout = null
+ }, 0))
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+
+ function n(e) {
+ var t = !document || "interactive" !== document.readyState && "complete" !== document.readyState ? n : e;
+ setTimeout(t, 9, e)
+ }
+ e.fn.core({
+ add: function(t) {
+ var n, r = this;
+ if (e.is.elementOrCollection(t)) {
+ var i = t;
+ if (i._private.cy === r) n = i.restore();
+ else {
+ for (var a = [], o = 0; o < i.length; o++) {
+ var s = i[o];
+ a.push(s.json())
+ }
+ n = new e.Collection(r, a)
+ }
+ } else if (e.is.array(t)) {
+ var a = t;
+ n = new e.Collection(r, a)
+ } else if (e.is.plainObject(t) && (e.is.array(t.nodes) || e.is.array(t.edges))) {
+ for (var l = t, a = [], u = ["nodes", "edges"], o = 0, c = u.length; c > o; o++) {
+ var d = u[o],
+ h = l[d];
+ if (e.is.array(h))
+ for (var p = 0, f = h.length; f > p; p++) {
+ var v = h[p];
+ v.group = d, a.push(v)
+ }
+ }
+ n = new e.Collection(r, a)
+ } else {
+ var v = t;
+ n = new e.Element(r, v).collection()
+ }
+ return n
+ },
+ remove: function(t) {
+ if (e.is.elementOrCollection(t)) t = t;
+ else if (e.is.string(t)) {
+ var n = t;
+ t = this.$(n)
+ }
+ return t.remove()
+ },
+ load: function(r, i, a) {
+ function o() {
+ s.one("layoutready", function(e) {
+ s.notifications(!0), s.trigger(e), s.notify({
+ type: "load",
+ collection: s.elements()
+ }), s.one("load", i), s.trigger("load")
+ }).one("layoutstop", function() {
+ s.one("done", a), s.trigger("done")
+ });
+ var t = e.util.extend({}, s._private.options.layout);
+ t.eles = s.$(), s.layout(t)
+ }
+ var s = this;
+ s.notifications(!1);
+ var l = s.elements();
+ return l.length > 0 && l.remove(), null != r && (e.is.plainObject(r) || e.is.array(r)) && s.add(r), t ? n(o) : o(), this
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e, t) {
+ "use strict";
+ e.fn.core({
+ animated: e.define.animated(),
+ clearQueue: e.define.clearQueue(),
+ delay: e.define.delay(),
+ animate: e.define.animate(),
+ stop: e.define.stop(),
+ addToAnimationPool: function(e) {
+ var t = this;
+ t.styleEnabled() && t._private.aniEles.merge(e)
+ },
+ startAnimationLoop: function() {
+ function n() {
+ e.util.requestAnimationFrame(function(e) {
+ r(e), n()
+ })
+ }
+
+ function r(t) {
+ function n(n, r) {
+ var l = n._private.animation.current,
+ u = n._private.animation.queue,
+ c = !1;
+ if (0 === l.length) {
+ var d = u.length > 0 ? u.shift() : null;
+ d && (d.callTime = t, l.push(d))
+ }
+ for (var h = [], p = l.length - 1; p >= 0; p--) {
+ var f = l[p];
+ f.started || (i(n, f), s = !0), a(n, f, t, r), f.done && (h.push(f), l.splice(p, 1)), c = !0
+ }
+ for (var p = 0; p < h.length; p++) {
+ var f = h[p],
+ v = f.params.complete;
+ e.is.fn(v) && v.apply(n, [t])
+ }
+ return r || 0 !== l.length || 0 !== u.length || o.push(n), c
+ }
+ t = +new Date;
+ for (var r = l._private.aniEles, o = [], s = !1, u = 0; u < r.length; u++) {
+ var c = r[u];
+ n(c)
+ }
+ var d = n(l, !0);
+ if (r.length > 0 || d) {
+ var h;
+ if (r.length > 0) {
+ var p = r.updateCompoundBounds();
+ h = p.length > 0 ? r.add(p) : r
+ }
+ l.notify({
+ type: s ? "style" : "draw",
+ collection: h
+ })
+ }
+ r.unmerge(o)
+ }
+
+ function i(t, n) {
+ var r = e.is.core(t),
+ i = !r,
+ a = t,
+ o = l._private.style;
+ if (i) var s = a._private.position,
+ u = {
+ x: s.x,
+ y: s.y
+ },
+ c = o.getValueStyle(a);
+ if (r) var d = l._private.pan,
+ h = {
+ x: d.x,
+ y: d.y
+ },
+ p = l._private.zoom;
+ n.started = !0, n.startTime = Date.now(), n.startPosition = u, n.startStyle = c, n.startPan = h, n.startZoom = p
+ }
+
+ function a(t, n, r, i) {
+ var a, u = l._private.style,
+ c = n.properties,
+ d = n.params,
+ h = n.startTime,
+ p = !i;
+ if (a = 0 === n.duration ? 1 : Math.min(1, (r - h) / n.duration), 0 > a ? a = 0 : a > 1 && (a = 1), null == c.delay) {
+ var f = n.startPosition,
+ v = c.position,
+ g = t._private.position;
+ v && p && (o(f.x, v.x) && (g.x = s(f.x, v.x, a)), o(f.y, v.y) && (g.y = s(f.y, v.y, a)));
+ var y = n.startPan,
+ m = c.pan,
+ x = t._private.pan,
+ b = null != m && i;
+ b && (o(y.x, m.x) && (x.x = s(y.x, m.x, a)), o(y.y, m.y) && (x.y = s(y.y, m.y, a)), t.trigger("pan"));
+ var w = n.startZoom,
+ _ = c.zoom,
+ E = null != _ && i;
+ E && (o(w, _) && (t._private.zoom = s(w, _, a)), t.trigger("zoom")), (b || E) && t.trigger("viewport");
+ var T = c.style || c.css;
+ if (T && p)
+ for (var S = 0; S < T.length; S++) {
+ var C = T[S].name,
+ k = T[S],
+ D = k,
+ N = n.startStyle[C],
+ P = s(N, D, a);
+ u.overrideBypass(t, C, P)
+ }
+ }
+ return e.is.fn(d.step) && d.step.apply(t, [r]), a >= 1 && (n.done = !0), a
+ }
+
+ function o(t, n) {
+ return null == t || null == n ? !1 : e.is.number(t) && e.is.number(n) ? !0 : t && n ? !0 : !1
+ }
+
+ function s(t, n, r) {
+ 0 > r ? r = 0 : r > 1 && (r = 1);
+ var i, a;
+ if (i = null != t.pxValue || null != t.value ? null != t.pxValue ? t.pxValue : t.value : t, a = null != n.pxValue || null != n.value ? null != n.pxValue ? n.pxValue : n.value : n, e.is.number(i) && e.is.number(a)) return i + (a - i) * r;
+ if (e.is.number(i[0]) && e.is.number(a[0])) {
+ var o = i,
+ s = a,
+ l = function(e, t) {
+ var n = t - e,
+ i = e;
+ return Math.round(r * n + i)
+ },
+ u = l(o[0], s[0]),
+ c = l(o[1], s[1]),
+ d = l(o[2], s[2]);
+ return [u, c, d]
+ }
+ return void 0
+ }
+ var l = this;
+ l.styleEnabled() && t && n()
+ }
+ })
+ }(cytoscape, "undefined" == typeof window ? null : window),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ data: e.define.data({
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "data",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0
+ }),
+ removeData: e.define.removeData({
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !0
+ }),
+ scratch: e.define.data({
+ field: "scratch",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingTriggersEvent: !1,
+ allowGetting: !0
+ }),
+ removeScratch: e.define.removeData({
+ field: "scratch",
+ triggerEvent: !1
+ })
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ once: e.define.on({
+ unbindAllBindersOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger()
+ }), e.define.eventAliasesOn(e.corefn)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ png: function(e) {
+ var t = this._private.renderer;
+ return e = e || {}, t.png(e)
+ },
+ jpg: function(e) {
+ var t = this._private.renderer;
+ return e = e || {}, e.bg = e.bg || "#fff", t.jpg(e)
+ }
+ }), e.corefn.jpeg = e.corefn.jpg
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ layout: function(t) {
+ var n;
+ return null == t && (t = e.util.extend({}, this._private.options.layout), t.eles = this.$()), n = this.initLayout(t), n.run(), this
+ },
+ makeLayout: function(e) {
+ return this.initLayout(e)
+ },
+ initLayout: function(t) {
+ if (null == t) return void e.util.error("Layout options must be specified to make a layout");
+ if (null == t.name) return void e.util.error("A `name` must be specified to make a layout");
+ var n = t.name,
+ r = e.extension("layout", n);
+ if (null == r) return void e.util.error("Can not apply layout: No such layout `" + n + "` found; did you include its JS file?");
+ t.eles = null != t.eles ? t.eles : this.$(), e.is.string(t.eles) && (t.eles = this.$(t.eles));
+ var i = new r(e.util.extend({}, t, {
+ cy: this
+ }));
+ return e.is.plainObject(i._private) || (i._private = {}), i._private.cy = this, i._private.listeners = [], i
+ }
+ }), e.corefn.createLayout = e.corefn.makeLayout
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ notify: function(e) {
+ if (this._private.batchingNotify) {
+ var t = this._private.batchNotifyEles,
+ n = this._private.batchNotifyTypes;
+ if (e.collection)
+ for (var r = 0; r < e.collection.length; r++) {
+ var i = e.collection[r];
+ t.ids[i._private.id] || t.push(i)
+ }
+ return void(n.ids[e.type] || n.push(e.type))
+ }
+ if (this._private.notificationsEnabled) {
+ var a = this.renderer();
+ a.notify(e)
+ }
+ },
+ notifications: function(e) {
+ var t = this._private;
+ return void 0 === e ? t.notificationsEnabled : void(t.notificationsEnabled = e ? !0 : !1)
+ },
+ noNotifications: function(e) {
+ this.notifications(!1), e(), this.notifications(!0)
+ },
+ startBatch: function() {
+ var e = this._private;
+ return e.batchingStyle = e.batchingNotify = !0, e.batchStyleEles = [], e.batchNotifyEles = [], e.batchNotifyTypes = [], e.batchStyleEles.ids = {}, e.batchNotifyEles.ids = {}, e.batchNotifyTypes.ids = {}, this
+ },
+ endBatch: function() {
+ var t = this._private;
+ return t.batchingStyle = !1, new e.Collection(this, t.batchStyleEles).updateStyle(), t.batchingNotify = !1, this.notify({
+ type: t.batchNotifyTypes,
+ collection: t.batchNotifyEles
+ }), this
+ },
+ batch: function(e) {
+ return this.startBatch(), e(), this.endBatch(), this
+ },
+ batchData: function(e) {
+ var t = this;
+ return this.batch(function() {
+ for (var n in e) {
+ var r = e[n],
+ i = t.getElementById(n);
+ i.data(r)
+ }
+ })
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ renderTo: function(e, t, n, r) {
+ var i = this._private.renderer;
+ return i.renderTo(e, t, n, r), this
+ },
+ renderer: function() {
+ return this._private.renderer
+ },
+ forceRender: function() {
+ return this.notify({
+ type: "draw"
+ }), this
+ },
+ resize: function() {
+ return this.notify({
+ type: "resize"
+ }), this.trigger("resize"), this
+ },
+ initRenderer: function(t) {
+ var n = this,
+ r = e.extension("renderer", t.name);
+ return null == r ? void e.util.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", t.name) : void(this._private.renderer = new r(e.util.extend({}, t, {
+ cy: n,
+ style: n._private.style
+ })))
+ },
+ triggerOnRender: function() {
+ for (var e = this._private.onRenders, t = 0; t < e.length; t++) {
+ var n = e[t];
+ n()
+ }
+ return this
+ },
+ onRender: function(e) {
+ return this._private.onRenders.push(e), this
+ },
+ offRender: function(e) {
+ var t = this._private.onRenders;
+ if (null == e) return this._private.onRenders = [], this;
+ for (var n = 0; n < t.length; n++) {
+ var r = t[n];
+ if (e === r) {
+ t.splice(n, 1);
+ break
+ }
+ }
+ return this
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ collection: function(t) {
+ return e.is.string(t) ? this.$(t) : e.is.elementOrCollection(t) ? t.collection() : e.is.array(t) ? new e.Collection(this, t) : new e.Collection(this)
+ },
+ nodes: function(e) {
+ var t = this.$(function() {
+ return this.isNode()
+ });
+ return e ? t.filter(e) : t
+ },
+ edges: function(e) {
+ var t = this.$(function() {
+ return this.isEdge()
+ });
+ return e ? t.filter(e) : t
+ },
+ $: function(t) {
+ var n = new e.Collection(this, this._private.elements);
+ return t ? n.filter(t) : n
+ }
+ }), e.corefn.elements = e.corefn.filter = e.corefn.$
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ style: function(e) {
+ if (e) {
+ var t = this.setStyle(e);
+ t.update()
+ }
+ return this._private.style
+ },
+ setStyle: function(t) {
+ var n = this._private;
+ return e.is.stylesheet(t) ? n.style = t.generateStyle(this) : e.is.array(t) ? n.style = e.style.fromJson(this, t) : e.is.string(t) ? n.style = e.style.fromString(this, t) : n.style = new e.Style(this), n.style
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.core({
+ autolock: function(e) {
+ return void 0 === e ? this._private.autolock : (this._private.autolock = e ? !0 : !1, this)
+ },
+ autoungrabify: function(e) {
+ return void 0 === e ? this._private.autoungrabify : (this._private.autoungrabify = e ? !0 : !1, this)
+ },
+ autounselectify: function(e) {
+ return void 0 === e ? this._private.autounselectify : (this._private.autounselectify = e ? !0 : !1, this)
+ },
+ panningEnabled: function(e) {
+ return void 0 === e ? this._private.panningEnabled : (this._private.panningEnabled = e ? !0 : !1, this)
+ },
+ userPanningEnabled: function(e) {
+ return void 0 === e ? this._private.userPanningEnabled : (this._private.userPanningEnabled = e ? !0 : !1, this)
+ },
+ zoomingEnabled: function(e) {
+ return void 0 === e ? this._private.zoomingEnabled : (this._private.zoomingEnabled = e ? !0 : !1, this)
+ },
+ userZoomingEnabled: function(e) {
+ return void 0 === e ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = e ? !0 : !1, this)
+ },
+ boxSelectionEnabled: function(e) {
+ return void 0 === e ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = e ? !0 : !1, this)
+ },
+ pan: function() {
+ var t, n, r, i, a, o = arguments,
+ s = this._private.pan;
+ switch (o.length) {
+ case 0:
+ return s;
+ case 1:
+ if (e.is.string(o[0])) return t = o[0], s[t];
+ if (e.is.plainObject(o[0])) {
+ if (!this._private.panningEnabled) return this;
+ r = o[0], i = r.x, a = r.y, e.is.number(i) && (s.x = i), e.is.number(a) && (s.y = a), this.trigger("pan viewport")
+ }
+ break;
+ case 2:
+ if (!this._private.panningEnabled) return this;
+ t = o[0], n = o[1], "x" !== t && "y" !== t || !e.is.number(n) || (s[t] = n), this.trigger("pan viewport")
+ }
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ panBy: function(t) {
+ var n, r, i, a, o, s = arguments,
+ l = this._private.pan;
+ if (!this._private.panningEnabled) return this;
+ switch (s.length) {
+ case 1:
+ e.is.plainObject(s[0]) && (i = s[0], a = i.x, o = i.y, e.is.number(a) && (l.x += a), e.is.number(o) && (l.y += o), this.trigger("pan viewport"));
+ break;
+ case 2:
+ n = s[0], r = s[1], "x" !== n && "y" !== n || !e.is.number(r) || (l[n] += r), this.trigger("pan viewport")
+ }
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ fit: function(e, t) {
+ var n = this.getFitViewport(e, t);
+ if (n) {
+ var r = this._private;
+ r.zoom = n.zoom, r.pan = n.pan, this.trigger("pan zoom viewport"), this.notify({
+ type: "viewport"
+ })
+ }
+ return this
+ },
+ getFitViewport: function(t, n) {
+ if (e.is.number(t) && void 0 === n && (n = t, t = void 0), this._private.panningEnabled && this._private.zoomingEnabled) {
+ var r;
+ if (e.is.string(t)) {
+ var i = t;
+ t = this.$(i)
+ } else if (e.is.boundingBox(t)) {
+ var a = t;
+ r = {
+ x1: a.x1,
+ y1: a.y1,
+ x2: a.x2,
+ y2: a.y2
+ }, r.w = r.x2 - r.x1, r.h = r.y2 - r.y1
+ } else e.is.elementOrCollection(t) || (t = this.elements());
+ r = r || t.boundingBox();
+ var o, s = this.width(),
+ l = this.height();
+ if (n = e.is.number(n) ? n : 0, !isNaN(s) && !isNaN(l) && s > 0 && l > 0 && !isNaN(r.w) && !isNaN(r.h) && r.w > 0 && r.h > 0) {
+ o = Math.min((s - 2 * n) / r.w, (l - 2 * n) / r.h), o = o > this._private.maxZoom ? this._private.maxZoom : o, o = o < this._private.minZoom ? this._private.minZoom : o;
+ var u = {
+ x: (s - o * (r.x1 + r.x2)) / 2,
+ y: (l - o * (r.y1 + r.y2)) / 2
+ };
+ return {
+ zoom: o,
+ pan: u
+ }
+ }
+ }
+ },
+ minZoom: function(t) {
+ return void 0 === t ? this._private.minZoom : (e.is.number(t) && (this._private.minZoom = t), this)
+ },
+ maxZoom: function(t) {
+ return void 0 === t ? this._private.maxZoom : (e.is.number(t) && (this._private.maxZoom = t), this)
+ },
+ zoom: function(t) {
+ var n, r;
+ if (void 0 === t) return this._private.zoom;
+ if (e.is.number(t)) r = t;
+ else if (e.is.plainObject(t)) {
+ if (r = t.level, t.position) {
+ var i = t.position,
+ a = this._private.pan,
+ o = this._private.zoom;
+ n = {
+ x: i.x * o + a.x,
+ y: i.y * o + a.y
+ }
+ } else t.renderedPosition && (n = t.renderedPosition);
+ if (n && !this._private.panningEnabled) return this
+ }
+ if (!this._private.zoomingEnabled) return this;
+ if (!e.is.number(r) || n && (!e.is.number(n.x) || !e.is.number(n.y))) return this;
+ if (r = r > this._private.maxZoom ? this._private.maxZoom : r, r = r < this._private.minZoom ? this._private.minZoom : r, n) {
+ var s = this._private.pan,
+ l = this._private.zoom,
+ u = r,
+ c = {
+ x: -u / l * (n.x - s.x) + n.x,
+ y: -u / l * (n.y - s.y) + n.y
+ };
+ this._private.zoom = r, this._private.pan = c;
+ var d = s.x !== c.x || s.y !== c.y;
+ this.trigger(" zoom " + (d ? " pan " : "") + " viewport ")
+ } else this._private.zoom = r, this.trigger("zoom viewport");
+ return this.notify({
+ type: "viewport"
+ }), this
+ },
+ viewport: function(t) {
+ var n = this._private,
+ r = !0,
+ i = !0,
+ a = [],
+ o = !1,
+ s = !1;
+ if (!t) return this;
+ if (e.is.number(t.zoom) || (r = !1), e.is.plainObject(t.pan) || (i = !1), !r && !i) return this;
+ if (r) {
+ var l = t.zoom;
+ l < n.minZoom || l > n.maxZoom || !n.zoomingEnabled ? o = !0 : (n.zoom = l, a.push("zoom"))
+ }
+ if (i && (!o || !t.cancelOnFailedZoom) && n.panningEnabled) {
+ var u = t.pan;
+ e.is.number(u.x) && (n.pan.x = u.x, s = !1), e.is.number(u.y) && (n.pan.y = u.y, s = !1), s || a.push("pan")
+ }
+ return a.length > 0 && (a.push("viewport"), this.trigger(a.join(" ")), this.notify({
+ type: "viewport"
+ })), this
+ },
+ center: function(e) {
+ var t = this.getCenterPan(e);
+ return t && (this._private.pan = t, this.trigger("pan viewport"), this.notify({
+ type: "viewport"
+ })), this
+ },
+ getCenterPan: function(t, n) {
+ if (this._private.panningEnabled) {
+ if (e.is.string(t)) {
+ var r = t;
+ t = this.elements(r)
+ } else e.is.elementOrCollection(t) || (t = this.elements());
+ var i = t.boundingBox(),
+ a = this.width(),
+ o = this.height();
+ n = void 0 === n ? this._private.zoom : n;
+ var s = {
+ x: (a - n * (i.x1 + i.x2)) / 2,
+ y: (o - n * (i.y1 + i.y2)) / 2
+ };
+ return s
+ }
+ },
+ reset: function() {
+ return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({
+ pan: {
+ x: 0,
+ y: 0
+ },
+ zoom: 1
+ }), this) : this
+ },
+ width: function() {
+ var e = this._private.container;
+ return e ? e.clientWidth : 1
+ },
+ height: function() {
+ var e = this._private.container;
+ return e ? e.clientHeight : 1
+ },
+ extent: function() {
+ var e = this._private.pan,
+ t = this._private.zoom,
+ n = this.renderedExtent(),
+ r = {
+ x1: (n.x1 - e.x) / t,
+ x2: (n.x2 - e.x) / t,
+ y1: (n.y1 - e.y) / t,
+ y2: (n.y2 - e.y) / t
+ };
+ return r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r
+ },
+ renderedExtent: function() {
+ var e = this.width(),
+ t = this.height();
+ return {
+ x1: 0,
+ y1: 0,
+ x2: e,
+ y2: t,
+ w: e,
+ h: t
+ }
+ }
+ }), e.corefn.centre = e.corefn.center, e.corefn.autolockNodes = e.corefn.autolock, e.corefn.autoungrabifyNodes = e.corefn.autoungrabify
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.collection = e.fn.eles = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Collection.prototype[r] = i
+ }
+ };
+ var t = {
+ prefix: {
+ nodes: "n",
+ edges: "e"
+ },
+ id: {
+ nodes: 0,
+ edges: 0
+ },
+ generate: function(t, n, r) {
+ var i = e.is.element(n) ? n._private : n,
+ a = i.group,
+ o = null != r ? r : this.prefix[a] + this.id[a];
+ if (t.getElementById(o).empty()) this.id[a]++;
+ else
+ for (; !t.getElementById(o).empty();) o = this.prefix[a] + ++this.id[a];
+ return o
+ }
+ };
+ e.Element = function(t, n, r) {
+ if (!(this instanceof e.Element)) return new e.Element(t, n, r);
+ var i = this;
+ if (r = void 0 === r || r ? !0 : !1, void 0 === t || void 0 === n || !e.is.core(t)) return void e.util.error("An element must have a core reference and parameters set");
+ if ("nodes" !== n.group && "edges" !== n.group) return void e.util.error("An element must be of type `nodes` or `edges`; you specified `" + n.group + "`");
+ if (this.length = 1, this[0] = this, this._private = {
+ cy: t,
+ single: !0,
+ data: n.data || {},
+ position: n.position || {},
+ autoWidth: void 0,
+ autoHeight: void 0,
+ listeners: [],
+ group: n.group,
+ style: {},
+ rstyle: {},
+ styleCxts: [],
+ removed: !0,
+ selected: n.selected ? !0 : !1,
+ selectable: void 0 === n.selectable ? !0 : n.selectable ? !0 : !1,
+ locked: n.locked ? !0 : !1,
+ grabbed: !1,
+ grabbable: void 0 === n.grabbable ? !0 : n.grabbable ? !0 : !1,
+ active: !1,
+ classes: {},
+ animation: {
+ current: [],
+ queue: []
+ },
+ rscratch: {},
+ scratch: n.scratch || {},
+ edges: [],
+ children: []
+ }, n.renderedPosition) {
+ var a = n.renderedPosition,
+ o = t.pan(),
+ s = t.zoom();
+ this._private.position = {
+ x: (a.x - o.x) / s,
+ y: (a.y - o.y) / s
+ }
+ }
+ if (e.is.string(n.classes))
+ for (var l = n.classes.split(/\s+/), u = 0, c = l.length; c > u; u++) {
+ var d = l[u];
+ d && "" !== d && (i._private.classes[d] = !0)
+ }
+ n.css && t.style().applyBypass(this, n.css), (void 0 === r || r) && this.restore()
+ }, e.Collection = function(n, r, i) {
+ if (!(this instanceof e.Collection)) return new e.Collection(n, r);
+ if (void 0 === n || !e.is.core(n)) return void e.util.error("A collection must have a reference to the core");
+ var a = {},
+ o = {},
+ s = !1;
+ if (r) {
+ if (r.length > 0 && e.is.plainObject(r[0]) && !e.is.element(r[0])) {
+ s = !0;
+ for (var l = [], u = {}, c = 0, d = r.length; d > c; c++) {
+ var h = r[c];
+ null == h.data && (h.data = {});
+ var p = h.data;
+ if (null == p.id) p.id = t.generate(n, h);
+ else if (0 !== n.getElementById(p.id).length || u[p.id]) continue;
+ var f = new e.Element(n, h, !1);
+ l.push(f), u[p.id] = !0
+ }
+ r = l
+ }
+ } else r = [];
+ this.length = 0;
+ for (var c = 0, d = r.length; d > c; c++) {
+ var v = r[c];
+ if (v) {
+ var g = v._private.data.id;
+ (!i || i.unique && !a[g]) && (a[g] = v, o[g] = this.length, this[this.length] = v, this.length++)
+ }
+ }
+ this._private = {
+ cy: n,
+ ids: a,
+ indexes: o
+ }, s && this.restore()
+ }, e.elefn = e.elesfn = e.Element.prototype = e.Collection.prototype, e.elesfn.cy = function() {
+ return this._private.cy
+ }, e.elesfn.element = function() {
+ return this[0]
+ }, e.elesfn.collection = function() {
+ return e.is.collection(this) ? this : new e.Collection(this._private.cy, [this])
+ }, e.elesfn.unique = function() {
+ return new e.Collection(this._private.cy, this, {
+ unique: !0
+ })
+ }, e.elesfn.getElementById = function(t) {
+ var n = this._private.cy,
+ r = this._private.ids[t];
+ return r ? r : e.Collection(n)
+ }, e.elesfn.json = function() {
+ var t = this.element();
+ if (null == t) return void 0;
+ var n = t._private,
+ r = e.util.copy({
+ data: n.data,
+ position: n.position,
+ group: n.group,
+ bypass: n.bypass,
+ removed: n.removed,
+ selected: n.selected,
+ selectable: n.selectable,
+ locked: n.locked,
+ grabbed: n.grabbed,
+ grabbable: n.grabbable,
+ classes: ""
+ }),
+ i = [];
+ for (var a in n.classes) n.classes[a] && i.push(a);
+ for (var o = 0; o < i.length; o++) {
+ var a = i[o];
+ r.classes += a + (o < i.length - 1 ? " " : "")
+ }
+ return r
+ }, e.elesfn.jsons = function() {
+ for (var e = [], t = 0; t < this.length; t++) {
+ var n = this[t],
+ r = n.json();
+ e.push(r)
+ }
+ return e
+ }, e.elesfn.clone = function() {
+ for (var t = this.cy(), n = [], r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = i.json(),
+ o = new e.Element(t, a, !1);
+ n.push(o)
+ }
+ return new e.Collection(t, n)
+ }, e.elesfn.copy = e.elesfn.clone, e.elesfn.restore = function(n) {
+ var r = this,
+ i = [],
+ a = r.cy();
+ void 0 === n && (n = !0);
+ for (var o = [], s = [], l = [], u = 0, c = 0, d = 0, h = r.length; h > d; d++) {
+ var p = r[d];
+ p.isNode() ? (s.push(p), u++) : (l.push(p), c++)
+ }
+ o = s.concat(l);
+ for (var d = 0, h = o.length; h > d; d++) {
+ var p = o[d];
+ if (p.removed()) {
+ var f = p._private,
+ v = f.data;
+ if (void 0 === v.id) v.id = t.generate(a, p);
+ else {
+ if (e.is.emptyString(v.id) || !e.is.string(v.id)) {
+ e.util.error("Can not create element with invalid string ID `" + v.id + "`");
+ continue
+ }
+ if (0 !== a.getElementById(v.id).length) {
+ e.util.error("Can not create second element with ID `" + v.id + "`");
+ continue
+ }
+ }
+ var g = v.id;
+ if (p.isEdge()) {
+ for (var y = p, m = ["source", "target"], x = m.length, b = !1, w = 0; x > w; w++) {
+ var _ = m[w],
+ E = v[_];
+ null == E || "" === E ? (e.util.error("Can not create edge `" + g + "` with unspecified " + _), b = !0) : a.getElementById(E).empty() && (e.util.error("Can not create edge `" + g + "` with nonexistant " + _ + " `" + E + "`"), b = !0)
+ }
+ if (b) continue;
+ var T = a.getElementById(v.source),
+ S = a.getElementById(v.target);
+ T._private.edges.push(y), S._private.edges.push(y), y._private.source = T, y._private.target = S
+ }
+ f.ids = {}, f.ids[g] = p, f.removed = !1, a.addToPool(p), i.push(p)
+ }
+ }
+ for (var d = 0; u > d; d++) {
+ var C = o[d],
+ v = C._private.data,
+ k = C._private.data.parent,
+ D = null != k;
+ if (D) {
+ var N = a.getElementById(k);
+ if (N.empty()) v.parent = void 0;
+ else {
+ for (var P = !1, M = N; !M.empty();) {
+ if (C.same(M)) {
+ P = !0, v.parent = void 0;
+ break
+ }
+ M = M.parent()
+ }
+ P || (N[0]._private.children.push(C), C._private.parent = N[0], a._private.hasCompoundNodes = !0)
+ }
+ }
+ }
+ if (i = new e.Collection(a, i), i.length > 0) {
+ var B = i.add(i.connectedNodes()).add(i.parent());
+ B.updateStyle(n), n ? i.rtrigger("add") : i.trigger("add")
+ }
+ return r
+ }, e.elesfn.removed = function() {
+ var e = this[0];
+ return e && e._private.removed
+ }, e.elesfn.inside = function() {
+ var e = this[0];
+ return e && !e._private.removed
+ }, e.elesfn.remove = function(t) {
+ function n(e) {
+ for (var t = e._private.edges, n = 0; n < t.length; n++) i(t[n])
+ }
+
+ function r(e) {
+ for (var t = e._private.children, n = 0; n < t.length; n++) i(t[n])
+ }
+
+ function i(e) {
+ var t = c[e.id()];
+ t || (c[e.id()] = !0, e.isNode() ? (u.push(e), n(e), r(e)) : u.unshift(e))
+ }
+
+ function a(e, t) {
+ for (var n = e._private.edges, r = 0; r < n.length; r++) {
+ var i = n[r];
+ if (t === i) {
+ n.splice(r, 1);
+ break
+ }
+ }
+ }
+
+ function o(e, t) {
+ t = t[0], e = e[0];
+ for (var n = e._private.children, r = 0; r < n.length; r++)
+ if (n[r][0] === t[0]) {
+ n.splice(r, 1);
+ break
+ }
+ }
+ var s = this,
+ l = [],
+ u = [],
+ c = {},
+ d = s._private.cy;
+ void 0 === t && (t = !0);
+ for (var h = 0, p = s.length; p > h; h++) {
+ var f = s[h];
+ i(f)
+ }
+ for (var h = 0; h < u.length; h++) {
+ var f = u[h];
+ if (f._private.removed = !0, d.removeFromPool(f), l.push(f), f.isEdge()) {
+ var v = f.source()[0],
+ g = f.target()[0];
+ a(v, f), a(g, f)
+ } else {
+ var y = f.parent();
+ 0 !== y.length && o(y, f)
+ }
+ }
+ var m = d._private.elements;
+ d._private.hasCompoundNodes = !1;
+ for (var h = 0; h < m.length; h++) {
+ var f = m[h];
+ if (f.isParent()) {
+ d._private.hasCompoundNodes = !0;
+ break
+ }
+ }
+ var x = new e.Collection(this.cy(), l);
+ x.size() > 0 && (t && this.cy().notify({
+ type: "remove",
+ collection: x
+ }), x.trigger("remove"));
+ for (var b = {}, h = 0; h < u.length; h++) {
+ var f = u[h],
+ w = "nodes" === f._private.group,
+ _ = f._private.data.parent;
+ if (w && void 0 !== _ && !b[_]) {
+ b[_] = !0;
+ var y = d.getElementById(_);
+ y && 0 !== y.length && !y._private.removed && 0 === y.children().length && y.updateStyle()
+ }
+ }
+ return this
+ }, e.elesfn.move = function(e) {
+ var t = this._private.cy;
+ if (void 0 !== e.source || void 0 !== e.target) {
+ var n = e.source,
+ r = e.target,
+ i = t.getElementById(n).length > 0,
+ a = t.getElementById(r).length > 0;
+ if (i || a) {
+ var o = this.jsons();
+ this.remove();
+ for (var s = 0; s < o.length; s++) {
+ var l = o[s];
+ "edges" === l.group && (i && (l.data.source = n), a && (l.data.target = r))
+ }
+ return t.add(o)
+ }
+ } else if (void 0 !== e.parent) {
+ var u = e.parent,
+ c = null === u || t.getElementById(u).length > 0;
+ if (c) {
+ var o = this.jsons(),
+ d = this.descendants(),
+ h = d.merge(d.add(this).connectedEdges());
+ this.remove();
+ for (var s = 0; s < this.length; s++) {
+ var l = o[s];
+ "nodes" === l.group && (l.data.parent = null === u ? void 0 : u)
+ }
+ }
+ return t.add(o).merge(h.restore())
+ }
+ return this
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ stdBreadthFirstSearch: function(t) {
+ return t = e.util.extend({}, t, {
+ std: !0
+ }), this.breadthFirstSearch(t)
+ },
+ breadthFirstSearch: function(t, n, r) {
+ var i, a, o;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {};
+ for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.nodes(), y = this.edges(), m = 0; m < u.length; m++) u[m].isNode() && (c.unshift(u[m]), f[u[m].id()] = !0, d.push(u[m]), p[u[m].id()] = 0);
+ for (; 0 !== c.length;) {
+ var x, u = c.shift(),
+ b = p[u.id()],
+ w = h[u.id()],
+ _ = null == w ? void 0 : w.connectedNodes().not(u)[0];
+ if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) {
+ s = u;
+ break
+ }
+ if (x === !1) break;
+ for (var E = u.connectedEdges(r ? function() {
+ return this.data("source") === u.id()
+ } : void 0).intersect(y), m = 0; m < E.length; m++) {
+ var T = E[m],
+ S = T.connectedNodes(function() {
+ return this.id() !== u.id()
+ }).intersect(g);
+ 0 === S.length || f[S.id()] || (S = S[0], c.push(S), f[S.id()] = !0, p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T)
+ }
+ }
+ for (var C = [], m = 0; m < d.length; m++) {
+ var k = d[m],
+ D = h[k.id()];
+ D && C.push(D), C.push(k)
+ }
+ return {
+ path: new e.Collection(l, C, {
+ unique: !0
+ }),
+ found: new e.Collection(l, s, {
+ unique: !0
+ })
+ }
+ },
+ stdDepthFirstSearch: function(t) {
+ return t = e.util.extend({}, t, {
+ std: !0
+ }), this.depthFirstSearch(t)
+ },
+ depthFirstSearch: function(t, n, r) {
+ var i, a, o;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.roots, n = i.visit, r = i.directed, a = i.std, o = i.thisArg), r = 2 !== arguments.length || e.is.fn(n) ? r : n, n = e.is.fn(n) ? n : function() {};
+ for (var s, l = this._private.cy, u = e.is.string(t) ? this.filter(t) : t, c = [], d = [], h = {}, p = {}, f = {}, v = 0, g = this.edges(), y = this.nodes(), m = 0; m < u.length; m++) u[m].isNode() && (c.push(u[m]), d.push(u[m]), p[u[m].id()] = 0);
+ for (; 0 !== c.length;) {
+ var u = c.pop();
+ if (!f[u.id()]) {
+ f[u.id()] = !0;
+ var x, b = p[u.id()],
+ w = h[u.id()],
+ _ = null == w ? void 0 : w.connectedNodes().not(u)[0];
+ if (x = a ? n.call(o, u, w, _, v++, b) : n.call(u, v++, b, u, w, _), x === !0) {
+ s = u;
+ break
+ }
+ if (x === !1) break;
+ for (var E = u.connectedEdges(r ? function() {
+ return this.data("source") === u.id()
+ } : void 0).intersect(g), m = 0; m < E.length; m++) {
+ var T = E[m],
+ S = T.connectedNodes(function() {
+ return this.id() !== u.id()
+ }).intersect(y);
+ 0 === S.length || f[S.id()] || (S = S[0], c.push(S), p[S.id()] = p[u.id()] + 1, d.push(S), h[S.id()] = T)
+ }
+ }
+ }
+ for (var C = [], m = 0; m < d.length; m++) {
+ var k = d[m],
+ D = h[k.id()];
+ D && C.push(D), C.push(k)
+ }
+ return {
+ path: new e.Collection(l, C, {
+ unique: !0
+ }),
+ found: new e.Collection(l, s, {
+ unique: !0
+ })
+ }
+ },
+ kruskal: function(t) {
+ function n(e) {
+ for (var t = 0; t < i.length; t++) {
+ var n = i[t];
+ if (n.anySame(e)) return {
+ eles: n,
+ index: t
+ }
+ }
+ }
+ t = e.is.fn(t) ? t : function() {
+ return 1
+ };
+ for (var r = new e.Collection(this._private.cy, []), i = [], a = this.nodes(), o = 0; o < a.length; o++) i.push(a[o].collection());
+ for (var s = this.edges(), l = s.toArray().sort(function(e, n) {
+ var r = t.call(e, e),
+ i = t.call(n, n);
+ return r - i
+ }), o = 0; o < l.length; o++) {
+ var u = l[o],
+ c = u.source()[0],
+ d = u.target()[0],
+ h = n(c),
+ p = n(d);
+ h.index !== p.index && (r = r.add(u), i[h.index] = h.eles.add(p.eles), i.splice(p.index, 1))
+ }
+ return a.add(r)
+ },
+ dijkstra: function(t, n, r) {
+ var i;
+ e.is.plainObject(t) && !e.is.elementOrCollection(t) && (i = t, t = i.root, n = i.weight, r = i.directed);
+ var a = this._private.cy;
+ n = e.is.fn(n) ? n : function() {
+ return 1
+ };
+ for (var o = e.is.string(t) ? this.filter(t)[0] : t[0], s = {}, l = {}, u = {}, c = this.edges().filter(function() {
+ return !this.isLoop()
+ }), d = this.nodes(), h = [], p = 0; p < d.length; p++) s[d[p].id()] = d[p].same(o) ? 0 : 1 / 0, h.push(d[p]);
+ var f = function(e) {
+ return s[e.id()]
+ };
+ h = new e.Collection(a, h);
+ for (var v = e.Minheap(a, h, f), g = function(e, t) {
+ for (var i, a = (r ? e.edgesTo(t) : e.edgesWith(t)).intersect(c), o = 1 / 0, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = n.apply(l, [l]);
+ (o > u || !i) && (o = u, i = l)
+ }
+ return {
+ edge: i,
+ dist: o
+ }
+ }; v.size() > 0;) {
+ var y = v.pop(),
+ m = y.value,
+ x = y.id,
+ b = a.getElementById(x);
+ if (u[x] = m, m === Math.Infinite) break;
+ for (var w = b.neighborhood().intersect(d), p = 0; p < w.length; p++) {
+ var _ = w[p],
+ E = _.id(),
+ T = g(b, _),
+ S = m + T.dist;
+ S < v.getValueById(E) && (v.edit(E, S), l[E] = {
+ node: b,
+ edge: T.edge
+ })
+ }
+ }
+ return {
+ distanceTo: function(t) {
+ var n = e.is.string(t) ? d.filter(t)[0] : t[0];
+ return u[n.id()]
+ },
+ pathTo: function(t) {
+ var n = e.is.string(t) ? d.filter(t)[0] : t[0],
+ r = [],
+ i = n;
+ if (n.length > 0)
+ for (r.unshift(n); l[i.id()];) {
+ var o = l[i.id()];
+ r.unshift(o.edge), r.unshift(o.node), i = o.node
+ }
+ return new e.Collection(a, r)
+ }
+ }
+ }
+ }), e.elesfn.bfs = e.elesfn.breadthFirstSearch, e.elesfn.dfs = e.elesfn.depthFirstSearch, e.elesfn.stdBfs = e.elesfn.stdBreadthFirstSearch, e.elesfn.stdDfs = e.elesfn.stdDepthFirstSearch
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ aStar: function(t) {
+ t = t || {};
+ var n = function(e, t, r, a) {
+ if (e == t) return a.push(i.getElementById(t)), a;
+ if (t in r) {
+ var o = r[t],
+ s = p[t];
+ return a.push(i.getElementById(t)), a.push(i.getElementById(s)), n(e, o, r, a)
+ }
+ return void 0
+ },
+ r = function(e, t) {
+ if (0 === e.length) return void 0;
+ for (var n = 0, r = t[e[0]], i = 1; i < e.length; i++) {
+ var a = t[e[i]];
+ r > a && (r = a, n = i)
+ }
+ return n
+ },
+ i = this._private.cy;
+ if (null == t || null == t.root) return void 0;
+ var a = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0];
+ if (null == t.goal) return void 0;
+ var o = e.is.string(t.goal) ? this.filter(t.goal)[0] : t.goal[0];
+ if (null != t.heuristic && e.is.fn(t.heuristic)) var s = t.heuristic;
+ else var s = function() {
+ return 0
+ };
+ if (null != t.weight && e.is.fn(t.weight)) var l = t.weight;
+ else var l = function(e) {
+ return 1
+ };
+ if (null != t.directed) var u = t.directed;
+ else var u = !1;
+ var c = [],
+ d = [a.id()],
+ h = {},
+ p = {},
+ f = {},
+ v = {};
+ f[a.id()] = 0, v[a.id()] = s(a);
+ for (var g = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), y = this.nodes(), m = 0; d.length > 0;) {
+ var x = r(d, v),
+ b = i.getElementById(d[x]);
+ if (m++, b.id() == o.id()) {
+ var w = n(a.id(), o.id(), h, []);
+ return w.reverse(), {
+ found: !0,
+ distance: f[b.id()],
+ path: new e.Collection(i, w),
+ steps: m
+ }
+ }
+ c.push(b.id()), d.splice(x, 1);
+ var _ = b.connectedEdges();
+ u && (_ = _.stdFilter(function(e) {
+ return e.data("source") === b.id()
+ })), _ = _.intersect(g);
+ for (var E = 0; E < _.length; E++) {
+ var T = _[E],
+ S = T.connectedNodes().stdFilter(function(e) {
+ return e.id() !== b.id()
+ }).intersect(y);
+ if (-1 == c.indexOf(S.id())) {
+ var C = f[b.id()] + l.apply(T, [T]); - 1 != d.indexOf(S.id()) ? C < f[S.id()] && (f[S.id()] = C, v[S.id()] = C + s(S), h[S.id()] = b.id()) : (f[S.id()] = C, v[S.id()] = C + s(S), d.push(S.id()), h[S.id()] = b.id(), p[S.id()] = T.id())
+ }
+ }
+ }
+ return {
+ found: !1,
+ distance: void 0,
+ path: void 0,
+ steps: m
+ }
+ },
+ floydWarshall: function(t) {
+ t = t || {};
+ var n = this._private.cy;
+ if (null != t.weight && e.is.fn(t.weight)) var r = t.weight;
+ else var r = function(e) {
+ return 1
+ };
+ if (null != t.directed) var i = t.directed;
+ else var i = !1;
+ for (var a = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), o = this.nodes(), s = o.length, l = {}, u = 0; s > u; u++) l[o[u].id()] = u;
+ for (var c = [], u = 0; s > u; u++) {
+ for (var d = new Array(s), h = 0; s > h; h++) u == h ? d[h] = 0 : d[h] = 1 / 0;
+ c.push(d)
+ }
+ var p = [],
+ f = [],
+ v = function(e) {
+ for (var t = 0; s > t; t++) {
+ for (var n = new Array(s), r = 0; s > r; r++) n[r] = void 0;
+ e.push(n)
+ }
+ };
+ v(p), v(f);
+ for (var u = 0; u < a.length; u++) {
+ var g = l[a[u].source().id()],
+ y = l[a[u].target().id()],
+ m = r.apply(a[u], [a[u]]);
+ c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u])
+ }
+ if (!i)
+ for (var u = 0; u < a.length; u++) {
+ var g = l[a[u].target().id()],
+ y = l[a[u].source().id()],
+ m = r.apply(a[u], [a[u]]);
+ c[g][y] > m && (c[g][y] = m, p[g][y] = y, f[g][y] = a[u])
+ }
+ for (var x = 0; s > x; x++)
+ for (var u = 0; s > u; u++)
+ for (var h = 0; s > h; h++) c[u][x] + c[x][h] < c[u][h] && (c[u][h] = c[u][x] + c[x][h], p[u][h] = p[u][x]);
+ for (var b = [], u = 0; s > u; u++) b.push(o[u].id());
+ var w = {
+ distance: function(t, r) {
+ if (e.is.string(t)) var i = n.filter(t)[0].id();
+ else var i = t.id();
+ if (e.is.string(r)) var a = n.filter(r)[0].id();
+ else var a = r.id();
+ return c[l[i]][l[a]]
+ },
+ path: function(t, r) {
+ var i = function(e, t, r, i, a) {
+ if (e === t) return n.getElementById(i[e]);
+ if (void 0 === r[e][t]) return void 0;
+ for (var o = [n.getElementById(i[e])], s = e; e !== t;) {
+ s = e, e = r[e][t];
+ var l = a[s][e];
+ o.push(l), o.push(n.getElementById(i[e]))
+ }
+ return o
+ };
+ if (e.is.string(t)) var a = n.filter(t)[0].id();
+ else var a = t.id();
+ if (e.is.string(r)) var o = n.filter(r)[0].id();
+ else var o = r.id();
+ var s = i(l[a], l[o], p, b, f);
+ return new e.Collection(n, s)
+ }
+ };
+ return w
+ },
+ bellmanFord: function(t) {
+ if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight;
+ else var n = function(e) {
+ return 1
+ };
+ if (null != t.directed) var r = t.directed;
+ else var r = !1;
+ if (null == t.root) return void e.util.error("options.root required");
+ if (e.is.string(t.root)) var i = this.filter(t.root)[0];
+ else var i = t.root[0];
+ for (var a = this._private.cy, o = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), s = this.nodes(), l = s.length, u = {}, c = 0; l > c; c++) u[s[c].id()] = c;
+ for (var d = [], h = [], p = [], c = 0; l > c; c++) s[c].id() === i.id() ? d[c] = 0 : d[c] = 1 / 0, h[c] = void 0;
+ for (var f = !1, c = 1; l > c; c++) {
+ f = !1;
+ for (var v = 0; v < o.length; v++) {
+ var g = u[o[v].source().id()],
+ y = u[o[v].target().id()],
+ m = n.apply(o[v], [o[v]]),
+ x = d[g] + m;
+ if (x < d[y] && (d[y] = x, h[y] = g, p[y] = o[v], f = !0), !r) {
+ var x = d[y] + m;
+ x < d[g] && (d[g] = x, h[g] = y, p[g] = o[v], f = !0)
+ }
+ }
+ if (!f) break
+ }
+ if (f)
+ for (var v = 0; v < o.length; v++) {
+ var g = u[o[v].source().id()],
+ y = u[o[v].target().id()],
+ m = n.apply(o[v], [o[v]]);
+ if (d[g] + m < d[y]) return e.util.error("Error: graph contains a negative weigth cycle!"), {
+ pathTo: void 0,
+ distanceTo: void 0,
+ hasNegativeWeightCycle: !0
+ }
+ }
+ for (var b = [], c = 0; l > c; c++) b.push(s[c].id());
+ var w = {
+ distanceTo: function(t) {
+ if (e.is.string(t)) var n = a.filter(t)[0].id();
+ else var n = t.id();
+ return d[u[n]]
+ },
+ pathTo: function(t) {
+ var n = function(e, t, n, r, i, o) {
+ for (;;) {
+ if (i.push(a.getElementById(r[n])), i.push(o[n]), t === n) return i;
+ var s = e[n];
+ if ("undefined" == typeof s) return void 0;
+ n = s
+ }
+ };
+ if (e.is.string(t)) var r = a.filter(t)[0].id();
+ else var r = t.id();
+ var o = [],
+ s = n(h, u[i.id()], u[r], b, o, p);
+ return null != s && s.reverse(), new e.Collection(a, s)
+ },
+ hasNegativeWeightCycle: !1
+ };
+ return w
+ },
+ kargerStein: function(t) {
+ t = t || {};
+ var n = function(e, t, n) {
+ for (var r = n[e], i = r[1], a = r[2], o = t[i], s = t[a], l = n.filter(function(e) {
+ return t[e[1]] === o && t[e[2]] === s ? !1 : t[e[1]] === s && t[e[2]] === o ? !1 : !0
+ }), u = 0; u < l.length; u++) {
+ var c = l[u];
+ c[1] === s ? (l[u] = c.slice(0), l[u][1] = o) : c[2] === s && (l[u] = c.slice(0), l[u][2] = o)
+ }
+ for (var u = 0; u < t.length; u++) t[u] === s && (t[u] = o);
+ return l
+ },
+ r = function(e, t, i, a) {
+ if (a >= i) return t;
+ var o = Math.floor(Math.random() * t.length),
+ s = n(o, e, t);
+ return r(e, s, i - 1, a)
+ },
+ i = this._private.cy,
+ a = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }),
+ o = this.nodes(),
+ s = o.length,
+ l = a.length,
+ u = Math.ceil(Math.pow(Math.log(s) / Math.LN2, 2)),
+ c = Math.floor(s / Math.sqrt(2));
+ if (2 > s) return void e.util.error("At least 2 nodes are required for KargerSteing algorithm!");
+ for (var d = {}, h = 0; s > h; h++) d[o[h].id()] = h;
+ for (var p = [], h = 0; l > h; h++) {
+ var f = a[h];
+ p.push([h, d[f.source().id()], d[f.target().id()]])
+ }
+ for (var v, g = 1 / 0, y = [], h = 0; s > h; h++) y.push(h);
+ for (var m = 0; u >= m; m++) {
+ var x = y.slice(0),
+ b = r(x, p, s, c),
+ w = x.slice(0),
+ _ = r(x, b, c, 2),
+ E = r(w, b, c, 2);
+ _.length <= E.length && _.length < g ? (g = _.length, v = [_, x]) : E.length <= _.length && E.length < g && (g = E.length, v = [E, w])
+ }
+ for (var T = v[0].map(function(e) {
+ return a[e[0]]
+ }), S = [], C = [], k = v[1][0], h = 0; h < v[1].length; h++) {
+ var D = v[1][h];
+ D === k ? S.push(o[h]) : C.push(o[h])
+ }
+ var N = {
+ cut: new e.Collection(i, T),
+ partition1: new e.Collection(i, S),
+ partition2: new e.Collection(i, C)
+ };
+ return N
+ },
+ pageRank: function(t) {
+ t = t || {};
+ var n = function(e) {
+ for (var t = e.length, n = 0, r = 0; t > r; r++) n += e[r];
+ for (var r = 0; t > r; r++) e[r] = e[r] / n
+ };
+ if (null != t && null != t.dampingfactor) var r = t.dampingFactor;
+ else var r = .8;
+ if (null != t && null != t.precision) var i = t.precision;
+ else var i = 1e-6;
+ if (null != t && null != t.iterations) var a = t.iterations;
+ else var a = 200;
+ if (null != t && null != t.weight && e.is.fn(t.weight)) var o = t.weight;
+ else var o = function(e) {
+ return 1
+ };
+ for (var s = this._private.cy, l = this.edges().stdFilter(function(e) {
+ return !e.isLoop()
+ }), u = this.nodes(), c = u.length, d = l.length, h = {}, p = 0; c > p; p++) h[u[p].id()] = p;
+ for (var f = [], v = [], g = (1 - r) / c, p = 0; c > p; p++) {
+ for (var y = [], m = 0; c > m; m++) y.push(0);
+ f.push(y), v.push(0)
+ }
+ for (var p = 0; d > p; p++) {
+ var x = l[p],
+ b = h[x.source().id()],
+ w = h[x.target().id()],
+ _ = o.apply(x, [x]);
+ f[w][b] += _, v[b] += _
+ }
+ for (var E = 1 / c + g, m = 0; c > m; m++)
+ if (0 === v[m])
+ for (var p = 0; c > p; p++) f[p][m] = E;
+ else
+ for (var p = 0; c > p; p++) f[p][m] = f[p][m] / v[m] + g;
+ for (var T, S = [], C = [], p = 0; c > p; p++) S.push(1), C.push(0);
+ for (var k = 0; a > k; k++) {
+ for (var D = C.slice(0), p = 0; c > p; p++)
+ for (var m = 0; c > m; m++) D[p] += f[p][m] * S[m];
+ n(D), T = S, S = D;
+ for (var N = 0, p = 0; c > p; p++) N += Math.pow(T[p] - S[p], 2);
+ if (i > N) break
+ }
+ var P = {
+ rank: function(t) {
+ if (e.is.string(t)) var n = s.filter(t)[0].id();
+ else var n = t.id();
+ return S[h[n]]
+ }
+ };
+ return P
+ },
+ degreeCentralityNormalized: function(t) {
+ if (t = t || {}, null != t.directed) var n = t.directed;
+ else var n = !1;
+ var r = this.nodes(),
+ i = r.length;
+ if (n) {
+ for (var a = {}, o = {}, s = 0, l = 0, u = 0; i > u; u++) {
+ var c = r[u],
+ d = this.degreeCentrality(e.util.extend({}, t, {
+ root: c
+ }));
+ s < d.indegree && (s = d.indegree), l < d.outdegree && (l = d.outdegree), a[c.id()] = d.indegree, o[c.id()] = d.outdegree
+ }
+ return {
+ indegree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return a[t] / s
+ },
+ outdegree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return o[t] / l
+ }
+ }
+ }
+ for (var h = {}, p = 0, u = 0; i > u; u++) {
+ var c = r[u],
+ d = this.degreeCentrality(e.util.extend({}, t, {
+ root: c
+ }));
+ p < d.degree && (p = d.degree), h[c.id()] = d.degree
+ }
+ return {
+ degree: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return h[t] / p
+ }
+ }
+ },
+ degreeCentrality: function(t) {
+ t = t || {};
+ var n = this;
+ if (null == t || null == t.root) return void 0;
+ var r = e.is.string(t.root) ? this.filter(t.root)[0] : t.root[0];
+ if (null != t.weight && e.is.fn(t.weight)) var i = t.weight;
+ else var i = function(e) {
+ return 1
+ };
+ if (null != t.directed) var a = t.directed;
+ else var a = !1;
+ if (null != t.alpha && e.is.number(t.alpha)) var o = t.alpha;
+ else o = 0;
+ if (a) {
+ for (var s = r.connectedEdges('edge[target = "' + r.id() + '"]').intersection(n), l = r.connectedEdges('edge[source = "' + r.id() + '"]').intersection(n), u = s.length, c = l.length, d = 0, h = 0, p = 0; p < s.length; p++) {
+ var f = s[p];
+ d += i.apply(f, [f])
+ }
+ for (var p = 0; p < l.length; p++) {
+ var f = l[p];
+ h += i.apply(f, [f])
+ }
+ return {
+ indegree: Math.pow(u, 1 - o) * Math.pow(d, o),
+ outdegree: Math.pow(c, 1 - o) * Math.pow(h, o)
+ }
+ }
+ for (var v = r.connectedEdges().intersection(n), g = v.length, y = 0, p = 0; p < v.length; p++) {
+ var f = v[p];
+ y += i.apply(f, [f])
+ }
+ return {
+ degree: Math.pow(g, 1 - o) * Math.pow(y, o)
+ }
+ },
+ closenessCentralityNormalized: function(t) {
+ t = t || {};
+ var n = t.harmonic;
+ void 0 === n && (n = !0);
+ for (var r = {}, i = 0, a = this.nodes(), o = this.floydWarshall({
+ weight: t.weight,
+ directed: t.directed
+ }), s = 0; s < a.length; s++) {
+ for (var l = 0, u = 0; u < a.length; u++)
+ if (s != u) {
+ var c = o.distance(a[s], a[u]);
+ l += n ? 1 / c : c
+ }
+ n || (l = 1 / l), l > i && (i = l), r[a[s].id()] = l
+ }
+ return {
+ closeness: function(t) {
+ if (e.is.string(t)) var t = cy.filter(t)[0].id();
+ else var t = t.id();
+ return r[t] / i
+ }
+ }
+ },
+ closenessCentrality: function(t) {
+ if (t = t || {}, null == t.root) return void e.util.error("options.root required");
+ if (e.is.string(t.root)) var n = this.filter(t.root)[0];
+ else var n = t.root[0];
+ if (null != t.weight && e.is.fn(t.weight)) var r = t.weight;
+ else var r = function() {
+ return 1
+ };
+ if (null != t.directed && e.is.bool(t.directed)) var i = t.directed;
+ else var i = !1;
+ var a = t.harmonic;
+ void 0 === a && (a = !0);
+ for (var o = this.dijkstra({
+ root: n,
+ weight: r,
+ directed: i
+ }), s = 0, l = this.nodes(), u = 0; u < l.length; u++)
+ if (l[u].id() != n.id()) {
+ var c = o.distanceTo(l[u]);
+ s += a ? 1 / c : c
+ }
+ return a ? s : 1 / s
+ },
+ betweennessCentrality: function(t) {
+ if (t = t || {}, null != t.weight && e.is.fn(t.weight)) var n = t.weight,
+ r = !0;
+ else var r = !1;
+ if (null != t.directed && e.is.bool(t.directed)) var i = t.directed;
+ else var i = !1;
+ for (var a = function(e, t) {
+ e.unshift(t);
+ for (var n = 0; v[e[n]] < v[e[n + 1]] && n < e.length - 1; n++) {
+ var r = e[n];
+ e[n] = e[n + 1], e[n + 1] = r
+ }
+ }, o = this._private.cy, s = this.nodes(), l = {}, u = {}, c = 0; c < s.length; c++) i ? l[s[c].id()] = s[c].outgoers("node") : l[s[c].id()] = s[c].openNeighborhood("node");
+ for (var c = 0; c < s.length; c++) u[s[c].id()] = 0;
+ for (var d = 0; d < s.length; d++) {
+ for (var h = [], p = {}, f = {}, v = {}, g = [], c = 0; c < s.length; c++) p[s[c].id()] = [], f[s[c].id()] = 0, v[s[c].id()] = Number.POSITIVE_INFINITY;
+ for (f[s[d].id()] = 1, v[s[d].id()] = 0, g.unshift(s[d].id()); g.length > 0;) {
+ var y = g.pop();
+ h.push(y), r ? l[y].forEach(function(e) {
+ if (o.$("#" + y).edgesTo(e).length > 0) var t = o.$("#" + y).edgesTo(e)[0];
+ else var t = e.edgesTo("#" + y)[0];
+ var r = n.apply(t, [t]);
+ v[e.id()] > v[y] + r && (v[e.id()] = v[y] + r, g.indexOf(e.id()) < 0 ? a(g, e.id()) : (g.splice(g.indexOf(e.id()), 1), a(g, e.id())), f[e.id()] = 0, p[e.id()] = []), v[e.id()] == v[y] + r && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y))
+ }) : l[y].forEach(function(e) {
+ v[e.id()] == Number.POSITIVE_INFINITY && (g.unshift(e.id()), v[e.id()] = v[y] + 1), v[e.id()] == v[y] + 1 && (f[e.id()] = f[e.id()] + f[y], p[e.id()].push(y))
+ })
+ }
+ for (var m = {}, c = 0; c < s.length; c++) m[s[c].id()] = 0;
+ for (; h.length > 0;) {
+ var x = h.pop();
+ p[x].forEach(function(e) {
+ m[e] = m[e] + f[e] / f[x] * (1 + m[x]), x != s[d].id() && (u[x] = u[x] + m[x])
+ })
+ }
+ }
+ var b = 0;
+ for (var w in u) b < u[w] && (b = u[w]);
+ var _ = {
+ betweenness: function(t) {
+ if (e.is.string(t)) var t = o.filter(t)[0].id();
+ else var t = t.id();
+ return u[t]
+ },
+ betweennessNormalized: function(t) {
+ if (e.is.string(t)) var t = o.filter(t)[0].id();
+ else var t = t.id();
+ return u[t] / b
+ }
+ };
+ return _.betweennessNormalised = _.betweennessNormalized, _
+ }
+ }), e.elesfn.dc = e.elesfn.degreeCentrality, e.elesfn.dcn = e.elesfn.degreeCentralityNormalised = e.elesfn.degreeCentralityNormalized, e.elesfn.cc = e.elesfn.closenessCentrality, e.elesfn.ccn = e.elesfn.closenessCentralityNormalised = e.elesfn.closenessCentralityNormalized, e.elesfn.bc = e.elesfn.betweennessCentrality
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ animated: e.define.animated(),
+ clearQueue: e.define.clearQueue(),
+ delay: e.define.delay(),
+ animate: e.define.animate(),
+ stop: e.define.stop()
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ addClass: function(t) {
+ t = t.split(/\s+/);
+ for (var n = this, r = [], i = 0; i < t.length; i++) {
+ var a = t[i];
+ if (!e.is.emptyString(a))
+ for (var o = 0; o < n.length; o++) {
+ var s = n[o],
+ l = s._private.classes[a];
+ s._private.classes[a] = !0, l || r.push(s)
+ }
+ }
+ return r.length > 0 && new e.Collection(this._private.cy, r).updateStyle().trigger("class"), n
+ },
+ hasClass: function(e) {
+ var t = this[0];
+ return null != t && t._private.classes[e] ? !0 : !1
+ },
+ toggleClass: function(t, n) {
+ for (var r = t.split(/\s+/), i = this, a = [], o = 0, s = i.length; s > o; o++)
+ for (var l = i[o], u = 0; u < r.length; u++) {
+ var c = r[u];
+ if (!e.is.emptyString(c)) {
+ var d = l._private.classes[c],
+ h = n || void 0 === n && !d;
+ h ? (l._private.classes[c] = !0, d || a.push(l)) : (l._private.classes[c] = !1, d && a.push(l))
+ }
+ }
+ return a.length > 0 && new e.Collection(this._private.cy, a).updateStyle().trigger("class"), i
+ },
+ removeClass: function(t) {
+ t = t.split(/\s+/);
+ for (var n = this, r = [], i = 0; i < n.length; i++)
+ for (var a = n[i], o = 0; o < t.length; o++) {
+ var s = t[o];
+ if (s && "" !== s) {
+ var l = a._private.classes[s];
+ a._private.classes[s] = void 0, l && r.push(a)
+ }
+ }
+ return r.length > 0 && new e.Collection(n._private.cy, r).updateStyle(), n.trigger("class"), n
+ },
+ flashClass: function(e, t) {
+ var n = this;
+ if (null == t) t = 250;
+ else if (0 === t) return n;
+ return n.addClass(e), setTimeout(function() {
+ n.removeClass(e)
+ }, t), n
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ allAre: function(e) {
+ return this.filter(e).length === this.length
+ },
+ is: function(e) {
+ return this.filter(e).length > 0
+ },
+ some: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this);
+ if (r) return !0
+ }
+ return !1
+ },
+ every: function(e, t) {
+ for (var n = 0; n < this.length; n++) {
+ var r = t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this);
+ if (!r) return !1
+ }
+ return !0
+ },
+ same: function(e) {
+ return e = this.cy().collection(e), this.length !== e.length ? !1 : this.intersect(e).length === this.length
+ },
+ anySame: function(e) {
+ return e = this.cy().collection(e), this.intersect(e).length > 0
+ },
+ allAreNeighbors: function(e) {
+ return e = this.cy().collection(e), this.neighborhood().intersect(e).length === e.length
+ }
+ }), e.elesfn.allAreNeighbours = e.elesfn.allAreNeighbors
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ parent: function(t) {
+ for (var n = [], r = this._private.cy, i = 0; i < this.length; i++) {
+ var a = this[i],
+ o = r.getElementById(a._private.data.parent);
+ o.size() > 0 && n.push(o)
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ parents: function(t) {
+ for (var n = [], r = this.parent(); r.nonempty();) {
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ n.push(a)
+ }
+ r = r.parent()
+ }
+ return new e.Collection(this.cy(), n, {
+ unique: !0
+ }).filter(t)
+ },
+ commonAncestors: function(e) {
+ for (var t, n = 0; n < this.length; n++) {
+ var r = this[n],
+ i = r.parents();
+ t = t || i, t = t.intersect(i)
+ }
+ return t.filter(e)
+ },
+ orphans: function(e) {
+ return this.stdFilter(function(e) {
+ return e.isNode() && e.parent().empty()
+ }).filter(e)
+ },
+ nonorphans: function(e) {
+ return this.stdFilter(function(e) {
+ return e.isNode() && e.parent().nonempty()
+ }).filter(e)
+ },
+ children: function(t) {
+ for (var n = [], r = 0; r < this.length; r++) {
+ var i = this[r];
+ n = n.concat(i._private.children)
+ }
+ return new e.Collection(this.cy(), n, {
+ unique: !0
+ }).filter(t)
+ },
+ siblings: function(e) {
+ return this.parent().children().not(this).filter(e)
+ },
+ isParent: function() {
+ var e = this[0];
+ return e ? 0 !== e._private.children.length : void 0
+ },
+ isChild: function() {
+ var e = this[0];
+ return e ? void 0 !== e._private.data.parent && 0 !== e.parent().length : void 0
+ },
+ descendants: function(t) {
+ function n(e) {
+ for (var t = 0; t < e.length; t++) {
+ var i = e[t];
+ r.push(i), i.children().nonempty() && n(i.children())
+ }
+ }
+ var r = [];
+ return n(this.children()), new e.Collection(this.cy(), r, {
+ unique: !0
+ }).filter(t)
+ }
+ }), e.elesfn.ancestors = e.elesfn.parents
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = 1,
+ n = 0;
+ e.fn.eles({
+ data: e.define.data({
+ field: "data",
+ bindingEvent: "data",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "data",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ immutableKeys: {
+ id: !0,
+ source: !0,
+ target: !0,
+ parent: !0
+ },
+ updateStyle: !0
+ }),
+ removeData: e.define.removeData({
+ field: "data",
+ event: "data",
+ triggerFnName: "trigger",
+ triggerEvent: !0,
+ immutableKeys: {
+ id: !0,
+ source: !0,
+ target: !0,
+ parent: !0
+ },
+ updateStyle: !0
+ }),
+ scratch: e.define.data({
+ field: "scratch",
+ bindingEvent: "scratch",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "scratch",
+ settingTriggersEvent: !0,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ updateStyle: !0
+ }),
+ removeScratch: e.define.removeData({
+ field: "scratch",
+ event: "scratch",
+ triggerFnName: "trigger",
+ triggerEvent: !0,
+ updateStyle: !0
+ }),
+ rscratch: e.define.data({
+ field: "rscratch",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingTriggersEvent: !1,
+ allowGetting: !0
+ }),
+ removeRscratch: e.define.removeData({
+ field: "rscratch",
+ triggerEvent: !1
+ }),
+ id: function() {
+ var e = this[0];
+ return e ? e._private.data.id : void 0
+ },
+ position: e.define.data({
+ field: "position",
+ bindingEvent: "position",
+ allowBinding: !0,
+ allowSetting: !0,
+ settingEvent: "position",
+ settingTriggersEvent: !0,
+ triggerFnName: "rtrigger",
+ allowGetting: !0,
+ validKeys: ["x", "y"],
+ onSet: function(e) {
+ var t = e.updateCompoundBounds();
+ t.rtrigger("position")
+ },
+ canSet: function(e) {
+ return !e.locked()
+ }
+ }),
+ silentPosition: e.define.data({
+ field: "position",
+ bindingEvent: "position",
+ allowBinding: !1,
+ allowSetting: !0,
+ settingEvent: "position",
+ settingTriggersEvent: !1,
+ triggerFnName: "trigger",
+ allowGetting: !0,
+ validKeys: ["x", "y"],
+ onSet: function(e) {
+ e.updateCompoundBounds()
+ },
+ canSet: function(e) {
+ return !e.locked()
+ }
+ }),
+ positions: function(t, n) {
+ if (e.is.plainObject(t)) this.position(t);
+ else if (e.is.fn(t)) {
+ for (var r = t, i = 0; i < this.length; i++) {
+ var a = this[i],
+ t = r.apply(a, [i, a]);
+ if (t && !a.locked()) {
+ var o = a._private.position;
+ o.x = t.x, o.y = t.y
+ }
+ }
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ n ? l.trigger("position") : l.rtrigger("position")
+ }
+ return this
+ },
+ silentPositions: function(e) {
+ return this.positions(e, !0)
+ },
+ updateCompoundBounds: function() {
+ function t(e) {
+ var t = e.children(),
+ n = e._private.style,
+ i = "include" === n["compound-sizing-wrt-labels"].value,
+ a = t.boundingBox({
+ includeLabels: i,
+ includeEdges: !0
+ }),
+ o = {
+ top: n["padding-top"].pxValue,
+ bottom: n["padding-bottom"].pxValue,
+ left: n["padding-left"].pxValue,
+ right: n["padding-right"].pxValue
+ },
+ s = e._private.position,
+ l = !1;
+ "auto" === n.width.value && (e._private.autoWidth = a.w + o.left + o.right, s.x = (a.x1 + a.x2 - o.left + o.right) / 2, l = !0), "auto" === n.height.value && (e._private.autoHeight = a.h + o.top + o.bottom, s.y = (a.y1 + a.y2 - o.top + o.bottom) / 2, l = !0), l && r.push(e)
+ }
+ var n = this.cy();
+ if (!n.styleEnabled() || !n.hasCompoundNodes()) return n.collection();
+ for (var r = [], i = this.parent(); i.nonempty();) {
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ t(o)
+ }
+ i = i.parent()
+ }
+ return new e.Collection(n, r)
+ },
+ renderedPosition: function(t, n) {
+ var r = this[0],
+ i = this.cy(),
+ a = i.zoom(),
+ o = i.pan(),
+ s = e.is.plainObject(t) ? t : void 0,
+ l = void 0 !== s || void 0 !== n && e.is.string(t);
+ if (r && r.isNode()) {
+ if (!l) {
+ var u = r._private.position;
+ return s = {
+ x: u.x * a + o.x,
+ y: u.y * a + o.y
+ }, void 0 === t ? s : s[t]
+ }
+ for (var c = 0; c < this.length; c++) {
+ var r = this[c];
+ void 0 !== n ? r._private.position[t] = (n - o[t]) / a : void 0 !== s && (r._private.position = {
+ x: (s.x - o.x) / a,
+ y: (s.y - o.y) / a
+ })
+ }
+ this.rtrigger("position")
+ } else if (!l) return void 0;
+ return this
+ },
+ relativePosition: function(t, n) {
+ var r = this[0],
+ i = this.cy(),
+ a = e.is.plainObject(t) ? t : void 0,
+ o = void 0 !== a || void 0 !== n && e.is.string(t),
+ s = i.hasCompoundNodes();
+ if (r && r.isNode()) {
+ if (!o) {
+ var l = r._private.position,
+ u = s ? r.parent() : null,
+ c = u && u.length > 0,
+ d = c;
+ c && (u = u[0]);
+ var h = d ? u._private.position : {
+ x: 0,
+ y: 0
+ };
+ return a = {
+ x: l.x - h.x,
+ y: l.y - h.y
+ }, void 0 === t ? a : a[t]
+ }
+ for (var p = 0; p < this.length; p++) {
+ var r = this[p],
+ u = s ? r.parent() : null,
+ c = u && u.length > 0,
+ d = c;
+ c && (u = u[0]);
+ var h = d ? u._private.position : {
+ x: 0,
+ y: 0
+ };
+ void 0 !== n ? r._private.position[t] = n + h[t] : void 0 !== a && (r._private.position = {
+ x: a.x + h.x,
+ y: a.y + h.y
+ })
+ }
+ this.rtrigger("position")
+ } else if (!o) return void 0;
+ return this
+ },
+ width: function() {
+ var e = this[0],
+ t = e._private.cy,
+ n = t._private.styleEnabled;
+ if (e) {
+ if (n) {
+ var r = e._private.style.width;
+ return "auto" === r.strValue ? e._private.autoWidth : r.pxValue
+ }
+ return 1
+ }
+ },
+ outerWidth: function() {
+ var e = this[0],
+ r = e._private.cy,
+ i = r._private.styleEnabled;
+ if (e) {
+ if (i) {
+ var a = e._private.style,
+ o = "auto" === a.width.strValue ? e._private.autoWidth : a.width.pxValue,
+ s = a["border-width"] ? a["border-width"].pxValue * t + n : 0;
+ return o + s
+ }
+ return 1
+ }
+ },
+ renderedWidth: function() {
+ var e = this[0];
+ if (e) {
+ var t = e.width();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedOuterWidth: function() {
+ var e = this[0];
+ if (e) {
+ var t = e.outerWidth();
+ return t * this.cy().zoom()
+ }
+ },
+ height: function() {
+ var e = this[0],
+ t = e._private.cy,
+ n = t._private.styleEnabled;
+ if (e && "nodes" === e._private.group) {
+ if (n) {
+ var r = e._private.style.height;
+ return "auto" === r.strValue ? e._private.autoHeight : r.pxValue
+ }
+ return 1
+ }
+ },
+ outerHeight: function() {
+ var e = this[0],
+ r = e._private.cy,
+ i = r._private.styleEnabled;
+ if (e && "nodes" === e._private.group) {
+ if (!i) return 1;
+ var a = e._private.style,
+ o = "auto" === a.height.strValue ? e._private.autoHeight : a.height.pxValue,
+ s = a["border-width"] ? a["border-width"].pxValue * t + n : 0;
+ return o + s
+ }
+ },
+ renderedHeight: function() {
+ var e = this[0];
+ if (e && "nodes" === e._private.group) {
+ var t = e.height();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedOuterHeight: function() {
+ var e = this[0];
+ if (e && "nodes" === e._private.group) {
+ var t = e.outerHeight();
+ return t * this.cy().zoom()
+ }
+ },
+ renderedBoundingBox: function(e) {
+ var t = this.boundingBox(e),
+ n = this.cy(),
+ r = n.zoom(),
+ i = n.pan(),
+ a = t.x1 * r + i.x,
+ o = t.x2 * r + i.x,
+ s = t.y1 * r + i.y,
+ l = t.y2 * r + i.y;
+ return {
+ x1: a,
+ x2: o,
+ y1: s,
+ y2: l,
+ w: o - a,
+ h: l - s
+ }
+ },
+ boundingBox: function(e) {
+ var t = this,
+ n = t._private.cy,
+ r = n._private,
+ i = r.styleEnabled;
+ e = e || {};
+ var a = void 0 === e.includeNodes ? !0 : e.includeNodes,
+ o = void 0 === e.includeEdges ? !0 : e.includeEdges,
+ s = void 0 === e.includeLabels ? !0 : e.includeLabels;
+ i && r.renderer.recalculateRenderedStyle(this);
+ for (var l = 1 / 0, u = -(1 / 0), c = 1 / 0, d = -(1 / 0), h = 0; h < t.length; h++) {
+ var p, f, v, g, y, m, x = t[h],
+ b = x._private,
+ w = b.style,
+ _ = i ? b.style.display.value : "element",
+ E = "nodes" === b.group,
+ T = !1;
+ if ("none" !== _) {
+ if (E && a) {
+ T = !0;
+ var S = b.position;
+ y = S.x, m = S.y;
+ var C = x.outerWidth(),
+ k = C / 2,
+ D = x.outerHeight(),
+ N = D / 2;
+ p = y - k, f = y + k, v = m - N, g = m + N, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ } else if (x.isEdge() && o) {
+ T = !0;
+ var P = b.source,
+ M = P._private,
+ B = M.position,
+ L = b.target,
+ O = L._private,
+ A = O.position,
+ I = b.rstyle || {};
+ if (p = B.x, f = A.x, v = B.y, g = A.y, p > f) {
+ var z = p;
+ p = f, f = z
+ }
+ if (v > g) {
+ var z = v;
+ v = g, g = z
+ }
+ if (l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d, i)
+ for (var R = I.bezierPts || [], C = w.width.pxValue, j = C / 2, F = 0; F < R.length; F++) {
+ var q = R[F];
+ p = q.x - j, f = q.x + j, v = q.y - j, g = q.y + j, l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ }
+ if (i && "haystack" === w["curve-style"].strValue) {
+ var V = b.rscratch.haystackPts;
+ if (p = V[0], v = V[1], f = V[2], g = V[3], p > f) {
+ var z = p;
+ p = f, f = z
+ }
+ if (v > g) {
+ var z = v;
+ v = g, g = z
+ }
+ l = l > p ? p : l, u = f > u ? f : u, c = c > v ? v : c, d = g > d ? g : d
+ }
+ }
+ if (i) {
+ var w = x._private.style,
+ I = x._private.rstyle,
+ X = w.content.strValue,
+ H = w["font-size"],
+ Y = w["text-halign"],
+ $ = w["text-valign"],
+ W = I.labelWidth,
+ U = I.labelHeight,
+ Z = I.labelX,
+ G = I.labelY;
+ if (T && s && X && H && null != U && null != W && null != Z && null != G && Y && $) {
+ var K, J, Q, ee, te = U,
+ ne = W;
+ if (x.isEdge()) K = Z - ne / 2, J = Z + ne / 2, Q = G - te / 2, ee = G + te / 2;
+ else {
+ switch (Y.value) {
+ case "left":
+ K = Z - ne, J = Z;
+ break;
+ case "center":
+ K = Z - ne / 2, J = Z + ne / 2;
+ break;
+ case "right":
+ K = Z, J = Z + ne
+ }
+ switch ($.value) {
+ case "top":
+ Q = G - te, ee = G;
+ break;
+ case "center":
+ Q = G - te / 2, ee = G + te / 2;
+ break;
+ case "bottom":
+ Q = G, ee = G + te
+ }
+ }
+ l = l > K ? K : l, u = J > u ? J : u, c = c > Q ? Q : c, d = ee > d ? ee : d
+ }
+ }
+ }
+ }
+ var re = function(e) {
+ return e === 1 / 0 || e === -(1 / 0) ? 0 : e
+ };
+ return l = re(l), u = re(u), c = re(c), d = re(d), {
+ x1: l,
+ x2: u,
+ y1: c,
+ y2: d,
+ w: u - l,
+ h: d - c
+ }
+ }
+ });
+ var r = e.elesfn;
+ r.attr = r.data, r.removeAttr = r.removeData, r.modelPosition = r.point = r.position, r.modelPositions = r.points = r.positions, r.renderedPoint = r.renderedPosition, r.relativePoint = r.relativePosition, r.boundingbox = r.boundingBox, r.renderedBoundingbox = r.renderedBoundingBox
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ return function(t) {
+ var n = this;
+ if (void 0 === t && (t = !0), 0 !== n.length && n.isNode() && !n.removed()) {
+ for (var r = 0, i = n[0], a = i._private.edges, o = 0; o < a.length; o++) {
+ var s = a[o];
+ (t || !s.isLoop()) && (r += e(i, s))
+ }
+ return r
+ }
+ }
+ }
+
+ function n(e, t) {
+ return function(n) {
+ for (var r, i = this.nodes(), a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = o[e](n);
+ void 0 === s || void 0 !== r && !t(s, r) || (r = s)
+ }
+ return r
+ }
+ }
+ e.fn.eles({
+ degree: t(function(e, t) {
+ return t.source().same(t.target()) ? 2 : 1
+ }),
+ indegree: t(function(e, t) {
+ return t.target().same(e) ? 1 : 0
+ }),
+ outdegree: t(function(e, t) {
+ return t.source().same(e) ? 1 : 0
+ })
+ }), e.fn.eles({
+ minDegree: n("degree", function(e, t) {
+ return t > e
+ }),
+ maxDegree: n("degree", function(e, t) {
+ return e > t
+ }),
+ minIndegree: n("indegree", function(e, t) {
+ return t > e
+ }),
+ maxIndegree: n("indegree", function(e, t) {
+ return e > t
+ }),
+ minOutdegree: n("outdegree", function(e, t) {
+ return t > e
+ }),
+ maxOutdegree: n("outdegree", function(e, t) {
+ return e > t
+ })
+ }), e.fn.eles({
+ totalDegree: function(e) {
+ for (var t = 0, n = this.nodes(), r = 0; r < n.length; r++) t += n[r].degree(e);
+ return t
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ on: e.define.on(),
+ one: e.define.on({
+ unbindSelfOnTrigger: !0
+ }),
+ once: e.define.on({
+ unbindAllBindersOnTrigger: !0
+ }),
+ off: e.define.off(),
+ trigger: e.define.trigger(),
+ rtrigger: function(e, t) {
+ return 0 !== this.length ? (this.cy().notify({
+ type: e,
+ collection: this
+ }), this.trigger(e, t), this) : void 0
+ }
+ }), e.define.eventAliasesOn(e.elesfn)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ nodes: function(e) {
+ return this.filter(function(e, t) {
+ return t.isNode()
+ }).filter(e)
+ },
+ edges: function(e) {
+ return this.filter(function(e, t) {
+ return t.isEdge()
+ }).filter(e)
+ },
+ filter: function(t) {
+ var n = this._private.cy;
+ if (e.is.fn(t)) {
+ for (var r = [], i = 0; i < this.length; i++) {
+ var a = this[i];
+ t.apply(a, [i, a]) && r.push(a)
+ }
+ return new e.Collection(n, r)
+ }
+ return e.is.string(t) || e.is.elementOrCollection(t) ? new e.Selector(t).filter(this) : void 0 === t ? this : new e.Collection(n)
+ },
+ not: function(t) {
+ var n = this._private.cy;
+ if (t) {
+ e.is.string(t) && (t = this.filter(t));
+ for (var r = [], i = 0; i < this.length; i++) {
+ var a = this[i],
+ o = t._private.ids[a.id()];
+ o || r.push(a)
+ }
+ return new e.Collection(n, r)
+ }
+ return this
+ },
+ absoluteComplement: function() {
+ var e = this._private.cy;
+ return e.elements().not(this)
+ },
+ intersect: function(t) {
+ var n = this._private.cy;
+ if (e.is.string(t)) {
+ var r = t;
+ return this.filter(r)
+ }
+ for (var i = [], a = this, o = t, s = this.length < t.length, l = s ? o._private.ids : a._private.ids, u = s ? a : o, c = 0; c < u.length; c++) {
+ var d = u[c]._private.data.id,
+ h = l[d];
+ h && i.push(h)
+ }
+ return new e.Collection(n, i)
+ },
+ xor: function(t) {
+ var n = this._private.cy;
+ e.is.string(t) && (t = n.$(t));
+ var r = [],
+ i = this,
+ a = t,
+ o = function(e, t) {
+ for (var n = 0; n < e.length; n++) {
+ var i = e[n],
+ a = i._private.data.id,
+ o = t._private.ids[a];
+ o || r.push(i)
+ }
+ };
+ return o(i, a), o(a, i), new e.Collection(n, r)
+ },
+ diff: function(t) {
+ var n = this._private.cy;
+ e.is.string(t) && (t = n.$(t));
+ var r = [],
+ i = [],
+ a = [],
+ o = this,
+ s = t,
+ l = function(e, t, n) {
+ for (var r = 0; r < e.length; r++) {
+ var i = e[r],
+ o = i._private.data.id,
+ s = t._private.ids[o];
+ s ? a.push(i) : n.push(i)
+ }
+ };
+ return l(o, s, r), l(s, o, i), {
+ left: new e.Collection(n, r, {
+ unique: !0
+ }),
+ right: new e.Collection(n, i, {
+ unique: !0
+ }),
+ both: new e.Collection(n, a, {
+ unique: !0
+ })
+ }
+ },
+ add: function(t) {
+ var n = this._private.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var r = t;
+ t = n.elements(r)
+ }
+ for (var i = [], a = 0; a < this.length; a++) i.push(this[a]);
+ for (var a = 0; a < t.length; a++) {
+ var o = !this._private.ids[t[a].id()];
+ o && i.push(t[a])
+ }
+ return new e.Collection(n, i)
+ },
+ merge: function(t) {
+ var n = this._private,
+ r = n.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var i = t;
+ t = r.elements(i)
+ }
+ for (var a = 0; a < t.length; a++) {
+ var o = t[a],
+ s = o.id(),
+ l = !n.ids[s];
+ if (l) {
+ var u = this.length++;
+ this[u] = o, n.ids[s] = o, n.indexes[s] = u
+ }
+ }
+ return this
+ },
+ unmergeOne: function(e) {
+ e = e[0];
+ var t = this._private,
+ n = e.id(),
+ r = t.indexes[n];
+ if (null == r) return this;
+ this[r] = void 0, t.ids[n] = void 0, t.indexes[n] = void 0;
+ var i = r === this.length - 1;
+ if (this.length > 1 && !i) {
+ var a = this.length - 1,
+ o = this[a];
+ this[a] = void 0, this[r] = o, t.indexes[o.id()] = r
+ }
+ return this.length--, this
+ },
+ unmerge: function(t) {
+ var n = this._private.cy;
+ if (!t) return this;
+ if (e.is.string(t)) {
+ var r = t;
+ t = n.elements(r)
+ }
+ for (var i = 0; i < t.length; i++) this.unmergeOne(t[i]);
+ return this
+ },
+ map: function(e, t) {
+ for (var n = [], r = this, i = 0; i < r.length; i++) {
+ var a = r[i],
+ o = t ? e.apply(t, [a, i, r]) : e(a, i, r);
+ n.push(o)
+ }
+ return n
+ },
+ stdFilter: function(t, n) {
+ for (var r = [], i = this, a = this._private.cy, o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = n ? t.apply(n, [s, o, i]) : t(s, o, i);
+ l && r.push(s)
+ }
+ return new e.Collection(a, r)
+ },
+ max: function(e, t) {
+ for (var n, r = -(1 / 0), i = this, a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = t ? e.apply(t, [o, a, i]) : e(o, a, i);
+ s > r && (r = s, n = o)
+ }
+ return {
+ value: r,
+ ele: n
+ }
+ },
+ min: function(e, t) {
+ for (var n, r = 1 / 0, i = this, a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = t ? e.apply(t, [o, a, i]) : e(o, a, i);
+ r > s && (r = s, n = o)
+ }
+ return {
+ value: r,
+ ele: n
+ }
+ }
+ });
+ var t = e.elesfn;
+ t.u = t["|"] = t["+"] = t.union = t.or = t.add, t["\\"] = t["!"] = t["-"] = t.difference = t.relativeComplement = t.not, t.n = t["&"] = t["."] = t.and = t.intersection = t.intersect, t["^"] = t["(+)"] = t["(-)"] = t.symmetricDifference = t.symdiff = t.xor, t.fnFilter = t.filterFn = t.stdFilter, t.complement = t.abscomp = t.absoluteComplement
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ isNode: function() {
+ return "nodes" === this.group()
+ },
+ isEdge: function() {
+ return "edges" === this.group()
+ },
+ isLoop: function() {
+ return this.isEdge() && this.source().id() === this.target().id()
+ },
+ isSimple: function() {
+ return this.isEdge() && this.source().id() !== this.target().id()
+ },
+ group: function() {
+ var e = this[0];
+ return e ? e._private.group : void 0
+ }
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ each: function(t) {
+ if (e.is.fn(t))
+ for (var n = 0; n < this.length; n++) {
+ var r = this[n],
+ i = t.apply(r, [n, r]);
+ if (i === !1) break
+ }
+ return this
+ },
+ forEach: function(t, n) {
+ if (e.is.fn(t))
+ for (var r = 0; r < this.length; r++) {
+ var i = this[r],
+ a = n ? t.apply(n, [i, r, this]) : t(i, r, this);
+ if (a === !1) break
+ }
+ return this
+ },
+ toArray: function() {
+ for (var e = [], t = 0; t < this.length; t++) e.push(this[t]);
+ return e
+ },
+ slice: function(t, n) {
+ var r = [],
+ i = this.length;
+ null == n && (n = i), null == t && (t = 0), 0 > t && (t = i + t), 0 > n && (n = i + n);
+ for (var a = t; a >= 0 && n > a && i > a; a++) r.push(this[a]);
+ return new e.Collection(this.cy(), r)
+ },
+ size: function() {
+ return this.length
+ },
+ eq: function(t) {
+ return this[t] || new e.Collection(this.cy())
+ },
+ first: function() {
+ return this[0] || new e.Collection(this.cy())
+ },
+ last: function() {
+ return this[this.length - 1] || new e.Collection(this.cy())
+ },
+ empty: function() {
+ return 0 === this.length
+ },
+ nonempty: function() {
+ return !this.empty()
+ },
+ sort: function(t) {
+ if (!e.is.fn(t)) return this;
+ var n = this.cy(),
+ r = this.toArray().sort(t);
+ return new e.Collection(n, r)
+ },
+ sortByZIndex: function() {
+ return this.sort(e.Collection.zIndexSort)
+ },
+ zDepth: function() {
+ var e = this[0];
+ if (!e) return void 0;
+ var t = e._private,
+ n = t.group;
+ if ("nodes" === n) {
+ var r = t.data.parent ? e.parents().size() : 0;
+ return e.isParent() ? r : Number.MAX_VALUE
+ }
+ var i = t.source,
+ a = t.target,
+ o = i.zDepth(),
+ s = a.zDepth();
+ return Math.max(o, s, 0)
+ }
+ }), e.Collection.zIndexSort = function(e, t) {
+ var n = e.cy(),
+ r = e._private,
+ i = t._private,
+ a = r.style["z-index"].value - i.style["z-index"].value,
+ o = 0,
+ s = 0,
+ l = n.hasCompoundNodes(),
+ u = "nodes" === r.group,
+ c = "edges" === r.group,
+ d = "nodes" === i.group,
+ h = "edges" === i.group;
+ l && (o = e.zDepth(), s = t.zDepth());
+ var p = o - s,
+ f = 0 === p;
+ return f ? u && h ? 1 : c && d ? -1 : 0 === a ? r.index - i.index : a : p
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ layoutPositions: function(t, n, r) {
+ var i = this.nodes(),
+ a = this.cy();
+ if (t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), n.animate) {
+ for (var o = 0; o < i.length; o++) {
+ var s = i[o],
+ l = o === i.length - 1,
+ u = r.call(s, o, s),
+ c = s.position();
+ e.is.number(c.x) && e.is.number(c.y) || s.silentPosition({
+ x: 0,
+ y: 0
+ }), s.animate({
+ position: u
+ }, {
+ duration: n.animationDuration,
+ step: l ? function() {
+ n.fit && a.fit(n.eles, n.padding)
+ } : void 0,
+ complete: l ? function() {
+ null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), n.fit && a.fit(n.eles, n.padding), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ } : void 0
+ })
+ }
+ t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })
+ } else i.positions(r), n.fit && a.fit(n.eles, n.padding), null != n.zoom && a.zoom(n.zoom), n.pan && a.pan(n.pan), t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ });
+ return this
+ },
+ layout: function(t) {
+ var n = this.cy();
+ return n.layout(e.util.extend({}, t, {
+ eles: this
+ })), this
+ },
+ makeLayout: function(t) {
+ var n = this.cy();
+ return n.makeLayout(e.util.extend({}, t, {
+ eles: this
+ }))
+ }
+ }), e.elesfn.createLayout = e.elesfn.makeLayout
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ updateStyle: function(e) {
+ var t = this._private.cy;
+ if (!t.styleEnabled()) return this;
+ if (t._private.batchingStyle) {
+ for (var n = t._private.batchStyleEles, r = 0; r < this.length; r++) {
+ var i = this[r];
+ n.ids[i._private.id] || n.push(i)
+ }
+ return this
+ }
+ var a = t.style();
+ e = e || void 0 === e ? !0 : !1, a.apply(this);
+ var o = this.updateCompoundBounds(),
+ s = o.length > 0 ? this.add(o) : this;
+ return e ? s.rtrigger("style") : s.trigger("style"), this
+ },
+ updateMappers: function(e) {
+ var t = this._private.cy,
+ n = t.style();
+ if (e = e || void 0 === e ? !0 : !1, !t.styleEnabled()) return this;
+ n.updateMappers(this);
+ var r = this.updateCompoundBounds(),
+ i = r.length > 0 ? this.add(r) : this;
+ return e ? i.rtrigger("style") : i.trigger("style"), this
+ },
+ renderedCss: function(e) {
+ var t = this.cy();
+ if (!t.styleEnabled()) return this;
+ var n = this[0];
+ if (n) {
+ var r = n.cy().style().getRenderedStyle(n);
+ return void 0 === e ? r : r[e]
+ }
+ },
+ css: function(t, n) {
+ var r = this.cy();
+ if (!r.styleEnabled()) return this;
+ var i = !1,
+ a = r.style();
+ if (e.is.plainObject(t)) {
+ var o = t;
+ a.applyBypass(this, o, i);
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ l.rtrigger("style")
+ } else if (e.is.string(t)) {
+ if (void 0 === n) {
+ var u = this[0];
+ return u ? u._private.style[t].strValue : void 0
+ }
+ a.applyBypass(this, t, n, i);
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ l.rtrigger("style")
+ } else if (void 0 === t) {
+ var u = this[0];
+ return u ? a.getRawStyle(u) : void 0
+ }
+ return this
+ },
+ removeCss: function(e) {
+ var t = this.cy();
+ if (!t.styleEnabled()) return this;
+ var n = !1,
+ r = t.style(),
+ i = this;
+ if (void 0 === e)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ r.removeAllBypasses(o, n)
+ } else {
+ e = e.split(/\s+/);
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ r.removeBypasses(o, e, n)
+ }
+ }
+ var s = this.updateCompoundBounds(),
+ l = s.length > 0 ? this.add(s) : this;
+ return l.rtrigger("style"), this
+ },
+ show: function() {
+ return this.css("display", "element"), this
+ },
+ hide: function() {
+ return this.css("display", "none"), this
+ },
+ visible: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !0;
+ var t = this[0],
+ n = e.hasCompoundNodes();
+ if (t) {
+ var r = t._private.style;
+ if ("visible" !== r.visibility.value || "element" !== r.display.value) return !1;
+ if ("nodes" === t._private.group) {
+ if (!n) return !0;
+ var i = t._private.data.parent ? t.parents() : null;
+ if (i)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a],
+ s = o._private.style,
+ l = s.visibility.value,
+ u = s.display.value;
+ if ("visible" !== l || "element" !== u) return !1
+ }
+ return !0
+ }
+ var c = t._private.source,
+ d = t._private.target;
+ return c.visible() && d.visible()
+ }
+ },
+ hidden: function() {
+ var e = this[0];
+ return e ? !e.visible() : void 0
+ },
+ effectiveOpacity: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return 1;
+ var t = e.hasCompoundNodes(),
+ n = this[0];
+ if (n) {
+ var r = n._private,
+ i = r.style.opacity.value;
+ if (!t) return i;
+ var a = r.data.parent ? n.parents() : null;
+ if (a)
+ for (var o = 0; o < a.length; o++) {
+ var s = a[o],
+ l = s._private.style.opacity.value;
+ i = l * i
+ }
+ return i
+ }
+ },
+ transparent: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0],
+ n = t.cy().hasCompoundNodes();
+ return t ? n ? 0 === t.effectiveOpacity() : 0 === t._private.style.opacity.value : void 0
+ },
+ isFullAutoParent: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0];
+ if (t) {
+ var n = "auto" === t._private.style.width.value,
+ r = "auto" === t._private.style.height.value;
+ return t.isParent() && n && r
+ }
+ },
+ backgrounding: function() {
+ var e = this.cy();
+ if (!e.styleEnabled()) return !1;
+ var t = this[0];
+ return t._private.backgrounding ? !0 : !1
+ }
+ }), e.elesfn.bypass = e.elesfn.style = e.elesfn.css, e.elesfn.renderedStyle = e.elesfn.renderedCss, e.elesfn.removeBypass = e.elesfn.removeStyle = e.elesfn.removeCss
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ return function() {
+ var n = arguments,
+ r = [];
+ if (2 === n.length) {
+ var i = n[0],
+ a = n[1];
+ this.bind(t.event, i, a)
+ } else if (1 === n.length) {
+ var a = n[0];
+ this.bind(t.event, a)
+ } else if (0 === n.length) {
+ for (var o = 0; o < this.length; o++) {
+ var s = this[o],
+ l = !t.ableField || s._private[t.ableField],
+ u = s._private[t.field] != t.value;
+ if (t.overrideAble) {
+ var c = t.overrideAble(s);
+ if (void 0 !== c && (l = c, !c)) return this
+ }
+ l && (s._private[t.field] = t.value, u && r.push(s))
+ }
+ var d = e.Collection(this.cy(), r);
+ d.updateStyle(), d.trigger(t.event)
+ }
+ return this
+ }
+ }
+
+ function n(n) {
+ e.elesfn[n.field] = function() {
+ var e = this[0];
+ if (e) {
+ if (n.overrideField) {
+ var t = n.overrideField(e);
+ if (void 0 !== t) return t
+ }
+ return e._private[n.field]
+ }
+ }, e.elesfn[n.on] = t({
+ event: n.on,
+ field: n.field,
+ ableField: n.ableField,
+ overrideAble: n.overrideAble,
+ value: !0
+ }), e.elesfn[n.off] = t({
+ event: n.off,
+ field: n.field,
+ ableField: n.ableField,
+ overrideAble: n.overrideAble,
+ value: !1
+ })
+ }
+ n({
+ field: "locked",
+ overrideField: function(e) {
+ return e.cy().autolock() ? !0 : void 0
+ },
+ on: "lock",
+ off: "unlock"
+ }), n({
+ field: "grabbable",
+ overrideField: function(e) {
+ return e.cy().autoungrabify() ? !1 : void 0
+ },
+ on: "grabify",
+ off: "ungrabify"
+ }), n({
+ field: "selected",
+ ableField: "selectable",
+ overrideAble: function(e) {
+ return e.cy().autounselectify() ? !1 : void 0
+ },
+ on: "select",
+ off: "unselect"
+ }), n({
+ field: "selectable",
+ overrideField: function(e) {
+ return e.cy().autounselectify() ? !1 : void 0
+ },
+ on: "selectify",
+ off: "unselectify"
+ }), e.elesfn.deselect = e.elesfn.unselect, e.elesfn.grabbed = function() {
+ var e = this[0];
+ return e ? e._private.grabbed : void 0
+ }, n({
+ field: "active",
+ on: "activate",
+ off: "unactivate"
+ }), e.elesfn.inactive = function() {
+ var e = this[0];
+ return e ? !e._private.active : void 0
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ return function(n) {
+ for (var r = [], i = this._private.cy, a = 0; a < this.length; a++) {
+ var o = this[a],
+ s = o._private[t.attr];
+ s && r.push(s)
+ }
+ return new e.Collection(i, r, {
+ unique: !0
+ }).filter(n)
+ }
+ }
+
+ function n(t) {
+ return function(n) {
+ var r = [],
+ i = this._private.cy,
+ a = t || {};
+ e.is.string(n) && (n = i.$(n));
+ for (var o = this._private.ids, s = n._private.ids, l = 0; l < n.length; l++)
+ for (var u = n[l]._private.edges, c = 0; c < u.length; c++) {
+ var d = u[c],
+ h = d._private.data,
+ p = o[h.source] && s[h.target],
+ f = s[h.source] && o[h.target],
+ v = p || f;
+ if (v) {
+ if (a.thisIs) {
+ if ("source" === a.thisIs && !p) continue;
+ if ("target" === a.thisIs && !f) continue
+ }
+ r.push(d)
+ }
+ }
+ return new e.Collection(i, r, {
+ unique: !0
+ })
+ }
+ }
+
+ function r(t) {
+ var n = {
+ codirected: !1
+ };
+ return t = e.util.extend({}, n, t),
+ function(n) {
+ for (var r = this._private.cy, i = [], a = this.edges(), o = t, s = 0; s < a.length; s++)
+ for (var l = a[s], u = l.source()[0], c = u.id(), d = l.target()[0], h = d.id(), p = u._private.edges, f = 0; f < p.length; f++) {
+ var v = p[f],
+ g = v._private.data,
+ y = g.target,
+ m = g.source,
+ x = y === h && m === c,
+ b = c === y && h === m;
+ (o.codirected && x || !o.codirected && (x || b)) && i.push(v)
+ }
+ return new e.Collection(r, i, {
+ unique: !0
+ }).filter(n)
+ }
+ }
+ e.fn.eles({
+ roots: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i];
+ if (a.isNode()) {
+ var o = a.connectedEdges(function() {
+ return this.data("target") === a.id() && this.data("source") !== a.id()
+ }).length > 0;
+ o || r.push(a)
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ leaves: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i];
+ if (a.isNode()) {
+ var o = a.connectedEdges(function() {
+ return this.data("source") === a.id() && this.data("target") !== a.id()
+ }).length > 0;
+ o || r.push(a)
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ outgoers: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i],
+ o = a.id();
+ if (a.isNode())
+ for (var s = a._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u._private.data.source,
+ d = u._private.data.target;
+ c === o && d !== o && (r.push(u), r.push(u.target()[0]))
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ successors: function(t) {
+ for (var n = this, r = [], i = {};;) {
+ var a = n.outgoers();
+ if (0 === a.length) break;
+ for (var o = !1, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = l.id();
+ i[u] || (i[u] = !0, r.push(l), o = !0)
+ }
+ if (!o) break;
+ n = a
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ incomers: function(t) {
+ for (var n = this, r = [], i = 0; i < n.length; i++) {
+ var a = n[i],
+ o = a.id();
+ if (a.isNode())
+ for (var s = a._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u._private.data.source,
+ d = u._private.data.target;
+ d === o && c !== o && (r.push(u), r.push(u.source()[0]))
+ }
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ },
+ predecessors: function(t) {
+ for (var n = this, r = [], i = {};;) {
+ var a = n.incomers();
+ if (0 === a.length) break;
+ for (var o = !1, s = 0; s < a.length; s++) {
+ var l = a[s],
+ u = l.id();
+ i[u] || (i[u] = !0, r.push(l), o = !0)
+ }
+ if (!o) break;
+ n = a
+ }
+ return new e.Collection(this._private.cy, r, {
+ unique: !0
+ }).filter(t)
+ }
+ }), e.fn.eles({
+ neighborhood: function(t) {
+ for (var n = [], r = this._private.cy, i = this.nodes(), a = 0; a < i.length; a++)
+ for (var o = i[a], s = o.connectedEdges(), l = 0; l < s.length; l++) {
+ var u = s[l],
+ c = u.connectedNodes().not(o);
+ c.length > 0 && n.push(c[0]), n.push(u[0])
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ closedNeighborhood: function(e) {
+ return this.neighborhood().add(this).filter(e)
+ },
+ openNeighborhood: function(e) {
+ return this.neighborhood(e)
+ }
+ }), e.elesfn.neighbourhood = e.elesfn.neighborhood, e.elesfn.closedNeighbourhood = e.elesfn.closedNeighborhood, e.elesfn.openNeighbourhood = e.elesfn.openNeighborhood, e.fn.eles({
+ source: function(e) {
+ var t, n = this[0];
+ return n && (t = n._private.source), t && e ? t.filter(e) : t
+ },
+ target: function(e) {
+ var t, n = this[0];
+ return n && (t = n._private.target), t && e ? t.filter(e) : t
+ },
+ sources: t({
+ attr: "source"
+ }),
+ targets: t({
+ attr: "target"
+ })
+ }), e.fn.eles({
+ edgesWith: n(),
+ edgesTo: n({
+ thisIs: "source"
+ })
+ }), e.fn.eles({
+ connectedEdges: function(t) {
+ for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) {
+ var o = i[a];
+ if (o.isNode())
+ for (var s = o._private.edges, l = 0; l < s.length; l++) {
+ var u = s[l];
+ n.push(u)
+ }
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ connectedNodes: function(t) {
+ for (var n = [], r = this._private.cy, i = this, a = 0; a < i.length; a++) {
+ var o = i[a];
+ o.isEdge() && (n.push(o.source()[0]), n.push(o.target()[0]))
+ }
+ return new e.Collection(r, n, {
+ unique: !0
+ }).filter(t)
+ },
+ parallelEdges: r(),
+ codirectedEdges: r({
+ codirected: !0
+ })
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.fn.eles({
+ fit: function() {},
+ center: function() {}
+ })
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ e.Minheap = function(t, n, r) {
+ return new e.Heap(t, n, e.Heap.minHeapComparator, r)
+ }, e.Maxheap = function(t, n, r) {
+ return new e.Heap(t, n, e.Heap.maxHeapComparator, r)
+ }, e.Heap = function(t, n, r, i) {
+ if ("undefined" != typeof r && "undefined" != typeof n) {
+ "undefined" == typeof i && (i = e.Heap.idFn);
+ var a, o, s, l = [],
+ u = {},
+ c = [],
+ d = 0;
+ for (n = this.getArgumentAsCollection(n, t), s = n.length, d = 0; s > d; d += 1) {
+ if (l.push(i.call(t, n[d], d, n)), a = n[d].id(), u.hasOwnProperty(a)) throw "ERROR: Multiple items with the same id found: " + a;
+ u[a] = d, c.push(a)
+ }
+ for (this._private = {
+ cy: t,
+ heap: l,
+ pointers: u,
+ elements: c,
+ comparator: r,
+ extractor: i,
+ length: s
+ }, d = Math.floor(s / 2); d >= 0; d -= 1) o = this.heapify(d);
+ return o
+ }
+ }, e.Heap.idFn = function(e) {
+ return e.id()
+ }, e.Heap.minHeapComparator = function(e, t) {
+ return e >= t
+ }, e.Heap.maxHeapComparator = function(e, t) {
+ return t >= e
+ }, e.fn.heap = function(t, n) {
+ for (var r in t) {
+ var i = t[r];
+ e.Heap.prototype[r] = i
+ }
+ }, e.heapfn = e.Heap.prototype, e.heapfn.size = function() {
+ return this._private.length
+ }, e.heapfn.getArgumentAsCollection = function(t, n) {
+ var r;
+ if ("undefined" == typeof n && (n = this._private.cy), e.is.elementOrCollection(t)) r = t;
+ else {
+ for (var i = [], a = [].concat.apply([], [t]), o = 0; o < a.length; o++) {
+ var s = a[o],
+ l = n.getElementById(s);
+ l.length > 0 && i.push(l)
+ }
+ r = new e.Collection(n, i)
+ }
+ return r
+ }, e.heapfn.isHeap = function() {
+ var e, t, n, r, i, a = this._private.heap,
+ o = a.length,
+ s = this._private.comparator;
+ for (e = 0; o > e; e += 1)
+ if (t = 2 * e + 1, n = t + 1, r = o > t ? s(a[t], a[e]) : !0, i = o > n ? s(a[n], a[e]) : !0, !r || !i) return !1;
+ return !0
+ }, e.heapfn.heapSwap = function(e, t) {
+ var n = this._private.heap,
+ r = this._private.pointers,
+ i = this._private.elements,
+ a = n[e],
+ o = i[e],
+ s = i[e],
+ l = i[t];
+ n[e] = n[t],
+ i[e] = i[t], r[s] = t, r[l] = e, n[t] = a, i[t] = o
+ }, e.heapfn.heapify = function(e, t) {
+ var n, r, i, a, o, s, l, u = 0,
+ c = !1;
+ for ("undefined" == typeof t && (t = !0), n = this._private.heap, u = n.length, s = this._private.comparator, r = e; !c;) t ? (i = 2 * r + 1, a = i + 1, o = r, u > i && !s(n[i], n[o]) && (o = i), u > a && !s(n[a], n[o]) && (o = a), c = o === r, c || (this.heapSwap(o, r), r = o)) : (l = Math.floor((r - 1) / 2), o = r, c = 0 > l || s(n[o], n[l]), c || (this.heapSwap(o, l), r = l))
+ }, e.heapfn.insert = function(e) {
+ var t, n, r, i, a, o = this.getArgumentAsCollection(e),
+ s = o.length;
+ for (a = 0; s > a; a += 1) {
+ if (t = o[a], n = this._private.heap.length, r = this._private.extractor(t), i = t.id(), this._private.pointers.hasOwnProperty(i)) throw "ERROR: Multiple items with the same id found: " + i;
+ this._private.heap.push(r), this._private.elements.push(i), this._private.pointers[i] = n, this.heapify(n, !1)
+ }
+ this._private.length = this._private.heap.length
+ }, e.heapfn.getValueById = function(e) {
+ if (this._private.pointers.hasOwnProperty(e)) {
+ var t = this._private.pointers[e];
+ return this._private.heap[t]
+ }
+ }, e.heapfn.contains = function(e) {
+ for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) {
+ var r = t[n].id();
+ if (!this._private.pointers.hasOwnProperty(r)) return !1
+ }
+ return !0
+ }, e.heapfn.top = function() {
+ return this._private.length > 0 ? {
+ value: this._private.heap[0],
+ id: this._private.elements[0]
+ } : void 0
+ }, e.heapfn.pop = function() {
+ if (this._private.length > 0) {
+ var e, t, n, r = this.top(),
+ i = this._private.length - 1;
+ return this.heapSwap(0, i), e = this._private.elements[i], t = this._private.heap[i], n = e, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[n] = void 0, this.heapify(0), r
+ }
+ }, e.heapfn.findDirectionHeapify = function(e) {
+ var t = Math.floor((e - 1) / 2),
+ n = this._private.heap,
+ r = 0 > t || this._private.comparator(n[e], n[t]);
+ this.heapify(e, r)
+ }, e.heapfn.edit = function(t, n) {
+ for (var r = this.getArgumentAsCollection(t), i = 0; i < r.length; i += 1) {
+ var a = r[i].id(),
+ o = this._private.pointers[a],
+ s = this._private.heap[o];
+ e.is.number(n) ? this._private.heap[o] = n : e.is.fn(n) && (this._private.heap[o] = n.call(this._private.cy, s, o)), this.findDirectionHeapify(o)
+ }
+ }, e.heapfn.remove = function(e) {
+ for (var t = this.getArgumentAsCollection(e), n = 0; n < t.length; n += 1) {
+ var r, i, a, o = t[n].id(),
+ s = this._private.pointers[o],
+ l = this._private.length - 1;
+ s !== l && this.heapSwap(s, l), r = this._private.elements[l], i = this._private.heap[l], a = r, this._private.heap.pop(), this._private.elements.pop(), this._private.length = this._private.heap.length, this._private.pointers[a] = void 0, this.findDirectionHeapify(s)
+ }
+ return i
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ this.options = e, this.data = {
+ select: [void 0, void 0, void 0, void 0, 0],
+ renderer: this,
+ cy: e.cy,
+ container: e.cy.container(),
+ canvases: new Array(t.CANVAS_LAYERS),
+ contexts: new Array(t.CANVAS_LAYERS),
+ canvasNeedsRedraw: new Array(t.CANVAS_LAYERS),
+ bufferCanvases: new Array(t.BUFFER_COUNT),
+ bufferContexts: new Array(t.CANVAS_LAYERS)
+ }, this.hoverData = {
+ down: null,
+ last: null,
+ downTime: null,
+ triggerMode: null,
+ dragging: !1,
+ initialPan: [null, null],
+ capture: !1
+ }, this.timeoutData = {
+ panTimeout: null
+ }, this.dragData = {
+ possibleDragElements: []
+ }, this.touchData = {
+ start: null,
+ capture: !1,
+ startPosition: [null, null, null, null, null, null],
+ singleTouchStartTime: null,
+ singleTouchMoved: !0,
+ now: [null, null, null, null, null, null],
+ earlier: [null, null, null, null, null, null]
+ }, this.zoomData = {
+ freeToZoom: !1,
+ lastPointerX: null
+ }, this.redraws = 0, this.showFps = e.showFps, this.bindings = [], this.data.canvasContainer = document.createElement("div");
+ var n = this.data.canvasContainer.style;
+ n.position = "absolute", n.zIndex = "0", n.overflow = "hidden", this.data.container.appendChild(this.data.canvasContainer);
+ for (var r = 0; r < t.CANVAS_LAYERS; r++) this.data.canvases[r] = document.createElement("canvas"), this.data.contexts[r] = this.data.canvases[r].getContext("2d"), this.data.canvases[r].style.position = "absolute", this.data.canvases[r].setAttribute("data-id", "layer" + r), this.data.canvases[r].style.zIndex = String(t.CANVAS_LAYERS - r), this.data.canvasContainer.appendChild(this.data.canvases[r]), this.data.canvasNeedsRedraw[r] = !1;
+ this.data.topCanvas = this.data.canvases[0], this.data.canvases[t.NODE].setAttribute("data-id", "layer" + t.NODE + "-node"), this.data.canvases[t.SELECT_BOX].setAttribute("data-id", "layer" + t.SELECT_BOX + "-selectbox"), this.data.canvases[t.DRAG].setAttribute("data-id", "layer" + t.DRAG + "-drag");
+ for (var r = 0; r < t.BUFFER_COUNT; r++) this.data.bufferCanvases[r] = document.createElement("canvas"), this.data.bufferContexts[r] = this.data.bufferCanvases[r].getContext("2d"), this.data.bufferCanvases[r].style.position = "absolute", this.data.bufferCanvases[r].setAttribute("data-id", "buffer" + r), this.data.bufferCanvases[r].style.zIndex = String(-r - 1), this.data.bufferCanvases[r].style.visibility = "hidden";
+ this.hideEdgesOnViewport = e.hideEdgesOnViewport, this.hideLabelsOnViewport = e.hideLabelsOnViewport, this.textureOnViewport = e.textureOnViewport, this.wheelSensitivity = e.wheelSensitivity, this.motionBlurEnabled = e.motionBlur, this.forcedPixelRatio = e.pixelRatio, this.motionBlur = !0, this.motionBlurOpacity = e.motionBlurOpacity, this.motionBlurTransparency = 1 - this.motionBlurOpacity, this.motionBlurPxRatio = 1, this.mbPxRBlurry = 1, this.minMbLowQualFrames = 4, this.fullQualityMb = !1, this.clearedForMotionBlur = [], this.desktopTapThreshold = e.desktopTapThreshold, this.desktopTapThreshold2 = e.desktopTapThreshold * e.desktopTapThreshold, this.touchTapThreshold = e.touchTapThreshold, this.touchTapThreshold2 = e.touchTapThreshold * e.touchTapThreshold, this.tapholdDuration = 500, this.load()
+ }
+ t.CANVAS_LAYERS = 3, t.SELECT_BOX = 0, t.DRAG = 1, t.NODE = 2, t.BUFFER_COUNT = 3, t.TEXTURE_BUFFER = 0, t.MOTIONBLUR_BUFFER_NODE = 1, t.MOTIONBLUR_BUFFER_DRAG = 2, t.panOrBoxSelectDelay = 400;
+ var n = "undefined" != typeof Path2D;
+ t.usePaths = function() {
+ return n
+ }, t.prototype.notify = function(n) {
+ var r;
+ r = e.is.array(n.type) ? n.type : [n.type];
+ for (var i = 0; i < r.length; i++) {
+ var a = r[i];
+ switch (a) {
+ case "destroy":
+ return void this.destroy();
+ case "add":
+ case "remove":
+ case "load":
+ this.updateNodesCache(), this.updateEdgesCache();
+ break;
+ case "viewport":
+ this.data.canvasNeedsRedraw[t.SELECT_BOX] = !0;
+ break;
+ case "style":
+ this.updateCachedZSortedEles()
+ }("load" === a || "resize" === a) && (this.invalidateContainerClientCoordsCache(), this.matchCanvasSize(this.data.container))
+ }
+ this.data.canvasNeedsRedraw[t.NODE] = !0, this.data.canvasNeedsRedraw[t.DRAG] = !0, this.redraw()
+ }, t.prototype.destroy = function() {
+ this.destroyed = !0;
+ for (var e = 0; e < this.bindings.length; e++) {
+ var t = this.bindings[e],
+ n = t;
+ n.target.removeEventListener(n.event, n.handler, n.useCapture)
+ }
+ if (this.removeObserver && this.removeObserver.disconnect(), this.labelCalcDiv) try {
+ document.body.removeChild(this.labelCalcDiv)
+ } catch (r) {}
+ };
+ for (var r in e.math) t.prototype[r] = e.math[r];
+ e("renderer", "canvas", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype,
+ r = t.arrowShapes = {};
+ t.arrowShapeHeight = .3;
+ var i = function(e, t, n, r, i, a, o, s) {
+ var l = n - i / 2,
+ u = n + i / 2,
+ c = r - a / 2,
+ d = r + a / 2;
+ return e >= l && u >= e && t >= c && d >= t
+ },
+ a = function(e, t, n, r, i) {
+ r = -r;
+ var a = e * Math.cos(r) - t * Math.sin(r),
+ o = e * Math.sin(r) + t * Math.cos(r),
+ s = a * n,
+ l = o * n,
+ u = s + i.x,
+ c = l + i.y;
+ return {
+ x: u,
+ y: c
+ }
+ };
+ r.arrow = {
+ _points: [-.15, -.3, 0, 0, .15, -.3],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.arrow._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.arrow._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.triangle = r.arrow, r["triangle-backcurve"] = {
+ _ctrlPt: [0, -.15],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.triangle._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o, s = r.triangle._points, l = 0; l < s.length / 2; l++) {
+ var u = a(s[2 * l], s[2 * l + 1], t, n, i);
+ 0 === l && (o = u), e.lineTo(u.x, u.y)
+ }
+ var c = this._ctrlPt,
+ d = a(c[0], c[1], t, n, i);
+ e.quadraticCurveTo(d.x, d.y, o.x, o.y)
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r["triangle-tee"] = {
+ _points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3],
+ _pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r["triangle-tee"]._points,
+ d = r["triangle-tee"]._pointsTee,
+ h = e.math.pointInsidePolygon(t, n, d, i, a, o, s, l, u) || e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u);
+ return h
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r["triangle-tee"]._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ var u = r["triangle-tee"]._pointsTee,
+ c = a(u[0], u[1], t, n, i);
+ e.moveTo(c.x, c.y);
+ for (var s = 0; s < u.length / 2; s++) {
+ var l = a(u[2 * s], u[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r["half-triangle-overshot"] = {
+ _points: [0, -.25, -.5, -.25, .5, .25],
+ leavePathOpen: !0,
+ matchEdgeWidth: !0,
+ collide: function(t, n, r, i, a, o, s, l) {
+ var u = this._points;
+ return e.math.pointInsidePolygon(t, n, u, r, i, a, o, s, l)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, r) {
+ for (var i = this._points, o = 0; o < i.length / 2; o++) {
+ var s = a(i[2 * o], i[2 * o + 1], t, n, r);
+ e.lineTo(s.x, s.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.none = {
+ collide: function(e, t, n, r, i, a, o, s) {
+ return !1
+ },
+ roughCollide: function(e, t, n, r, i, a, o, s) {
+ return !1
+ },
+ draw: function(e) {},
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 0
+ }
+ }, r.circle = {
+ _baseRadius: .15,
+ collide: function(e, t, n, i, a, o, s, l) {
+ if (a != o) {
+ var u = (o + l) / (a + l);
+ return t /= u, i /= u, Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2)
+ }
+ return Math.pow(n - e, 2) + Math.pow(i - t, 2) <= Math.pow((a + l) * r.circle._baseRadius, 2)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ e.arc(i.x, i.y, r.circle._baseRadius * t, 0, 2 * Math.PI, !1)
+ },
+ spacing: function(e) {
+ return n.getArrowWidth(e._private.style.width.pxValue) * r.circle._baseRadius
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.inhibitor = {
+ _points: [-.25, 0, -.25, -.1, .25, -.1, .25, 0],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.inhibitor._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.inhibitor._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 1
+ },
+ gap: function(e) {
+ return 1
+ }
+ }, r.tee = r.inhibitor, r.square = {
+ _points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.square._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.square._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return 2 * e._private.style.width.pxValue
+ }
+ }, r.diamond = {
+ _points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0],
+ collide: function(t, n, i, a, o, s, l, u) {
+ var c = r.diamond._points;
+ return e.math.pointInsidePolygon(t, n, c, i, a, o, s, l, u)
+ },
+ roughCollide: i,
+ draw: function(e, t, n, i) {
+ for (var o = r.diamond._points, s = 0; s < o.length / 2; s++) {
+ var l = a(o[2 * s], o[2 * s + 1], t, n, i);
+ e.lineTo(l.x, l.y)
+ }
+ },
+ spacing: function(e) {
+ return 0
+ },
+ gap: function(e) {
+ return e._private.style.width.pxValue
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.getCachedNodes = function() {
+ var e = this.data,
+ t = this.data.cy;
+ return null == e.cache && (e.cache = {}), null == e.cache.cachedNodes && (e.cache.cachedNodes = t.nodes()), e.cache.cachedNodes
+ }, n.updateNodesCache = function() {
+ var e = this.data,
+ t = this.data.cy;
+ null == e.cache && (e.cache = {}), e.cache.cachedNodes = t.nodes()
+ }, n.getCachedEdges = function() {
+ var e = this.data,
+ t = this.data.cy;
+ return null == e.cache && (e.cache = {}), null == e.cache.cachedEdges && (e.cache.cachedEdges = t.edges()), e.cache.cachedEdges
+ }, n.updateEdgesCache = function() {
+ var e = this.data,
+ t = this.data.cy;
+ null == e.cache && (e.cache = {}), e.cache.cachedEdges = t.edges()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.projectIntoViewport = function(e, t) {
+ var n = this.findContainerClientCoords(),
+ r = n[0],
+ i = n[1],
+ a = e - r,
+ o = t - i;
+ return a -= this.data.cy.pan().x, o -= this.data.cy.pan().y, a /= this.data.cy.zoom(), o /= this.data.cy.zoom(), [a, o]
+ }, n.findContainerClientCoords = function() {
+ var e = this.data.container,
+ t = this.containerBB = this.containerBB || e.getBoundingClientRect();
+ return [t.left, t.top, t.right - t.left, t.bottom - t.top]
+ }, n.invalidateContainerClientCoordsCache = function() {
+ this.containerBB = null
+ }, n.findNearestElement = function(n, r, i, a) {
+ function o(e) {
+ var a = e.outerWidth() + 2 * f,
+ o = e.outerHeight() + 2 * f,
+ s = a / 2,
+ u = o / 2,
+ d = e._private.position;
+ if (d.x - s <= n && n <= d.x + s && d.y - u <= r && r <= d.y + u) {
+ var h = !i || e.visible() && !e.transparent();
+ if (i && !h) return;
+ var p = t.nodeShapes[l.getNodeShape(e)];
+ e._private.style["border-width"].pxValue / 2;
+ p.checkPoint(n, r, 0, a, o, d.x, d.y) && c.push(e)
+ }
+ }
+
+ function s(a) {
+ var s, u, d = a._private.rscratch,
+ f = a._private.style,
+ v = f.width.pxValue / 2 + p,
+ g = v * v,
+ y = 2 * v,
+ m = a._private.source,
+ x = a._private.target,
+ b = !1,
+ w = function() {
+ if (void 0 !== u) return u;
+ if (!i) return u = !0, !0;
+ var e = a.visible() && !a.transparent();
+ return e ? (u = !0, !0) : (u = !1, !1)
+ };
+ if ("self" === d.edgeType || "compound" === d.edgeType)((b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2ax, d.cp2ay, d.selfEdgeMidX, d.selfEdgeMidY)) || (b = e.math.inBezierVicinity(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.selfEdgeMidX, d.selfEdgeMidY, d.cp2cx, d.cp2cy, d.endX, d.endY))) && c.push(a);
+ else if ("haystack" === d.edgeType) {
+ var _ = f["haystack-radius"].value,
+ E = _ / 2,
+ T = x._private.position,
+ S = x.width(),
+ C = x.height(),
+ k = m._private.position,
+ D = m.width(),
+ N = m.height(),
+ P = k.x + d.source.x * D * E,
+ M = k.y + d.source.y * N * E,
+ B = T.x + d.target.x * S * E,
+ L = T.y + d.target.y * C * E;
+ (b = e.math.inLineVicinity(n, r, P, M, B, L, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, P, M, B, L)) && c.push(a)
+ } else "straight" === d.edgeType ? (b = e.math.inLineVicinity(n, r, d.startX, d.startY, d.endX, d.endY, y)) && w() && g > (s = e.math.sqDistanceToFiniteLine(n, r, d.startX, d.startY, d.endX, d.endY)) && c.push(a) : "bezier" === d.edgeType && (b = e.math.inBezierVicinity(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY, g)) && w() && g > (s = e.math.sqDistanceToQuadraticBezier(n, r, d.startX, d.startY, d.cp2x, d.cp2y, d.endX, d.endY)) && c.push(a);
+ if (b && w() && 0 === c.length || c[c.length - 1] !== a) {
+ var O = t.arrowShapes[f["source-arrow-shape"].value],
+ A = t.arrowShapes[f["target-arrow-shape"].value],
+ m = m || a._private.source,
+ x = x || a._private.target,
+ T = x._private.position,
+ k = m._private.position,
+ I = l.getArrowWidth(f.width.pxValue),
+ z = l.getArrowHeight(f.width.pxValue),
+ R = I,
+ j = z;
+ (O.roughCollide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) && O.collide(n, r, d.arrowStartX, d.arrowStartY, I, z, [d.arrowStartX - k.x, d.arrowStartY - k.y], p) || A.roughCollide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p) && A.collide(n, r, d.arrowEndX, d.arrowEndY, R, j, [d.arrowEndX - T.x, d.arrowEndY - T.y], p)) && c.push(a)
+ }
+ h && c.length > 0 && c[c.length - 1] === a && (o(m), o(x))
+ }
+ for (var l = this, u = this.getCachedZSortedEles(), c = [], d = this.data.cy.zoom(), h = this.data.cy.hasCompoundNodes(), p = (a ? 24 : 8) / d, f = (a ? 8 : 2) / d, v = u.length - 1; v >= 0; v--) {
+ var g = u[v];
+ if (c.length > 0) break;
+ "nodes" === g._private.group ? o(u[v]) : s(u[v])
+ }
+ return c.length > 0 ? c[c.length - 1] : null
+ }, n.getAllInBox = function(n, r, i, a) {
+ var o = this.getCachedNodes(),
+ s = this.getCachedEdges(),
+ l = [],
+ u = Math.min(n, i),
+ c = Math.max(n, i),
+ d = Math.min(r, a),
+ h = Math.max(r, a);
+ n = u, i = c, r = d, a = h;
+ for (var p, f = 0; f < o.length; f++) {
+ var v = o[f]._private.position,
+ g = this.getNodeShape(o[f]),
+ y = this.getNodeWidth(o[f]),
+ m = this.getNodeHeight(o[f]),
+ x = o[f]._private.style["border-width"].pxValue / 2,
+ b = t.nodeShapes[g];
+ b.intersectBox(n, r, i, a, y, m, v.x, v.y, x) && l.push(o[f])
+ }
+ for (var f = 0; f < s.length; f++) {
+ var w = s[f]._private.rscratch;
+ if ("self" == s[f]._private.rscratch.edgeType && ((p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2ax, w.cp2ay, w.endX, w.endY, s[f]._private.style.width.pxValue)) || (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2cx, w.cp2cy, w.endX, w.endY, s[f]._private.style.width.pxValue))) && l.push(s[f]), "bezier" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkBezierInBox(n, r, i, a, w.startX, w.startY, w.cp2x, w.cp2y, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "straight" == w.edgeType && (p = e.math.boxInBezierVicinity(n, r, i, a, w.startX, w.startY, .5 * w.startX + .5 * w.endX, .5 * w.startY + .5 * w.endY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && (2 == p || 1 == p && e.math.checkStraightEdgeInBox(n, r, i, a, w.startX, w.startY, w.endX, w.endY, s[f]._private.style.width.pxValue)) && l.push(s[f]), "haystack" == w.edgeType) {
+ var _ = s[f].target()[0],
+ E = _.position(),
+ T = s[f].source()[0],
+ S = T.position(),
+ C = S.x + w.source.x,
+ k = S.y + w.source.y,
+ D = E.x + w.target.x,
+ N = E.y + w.target.y,
+ P = C >= n && i >= C && k >= r && a >= k,
+ M = D >= n && i >= D && N >= r && a >= N;
+ P && M && l.push(s[f])
+ }
+ }
+ return l
+ }, n.getNodeWidth = function(e) {
+ return e.width()
+ }, n.getNodeHeight = function(e) {
+ return e.height()
+ }, n.getNodeShape = function(e) {
+ var t = e._private.style.shape.value;
+ return e.isParent() ? "rectangle" === t || "roundrectangle" === t ? t : "rectangle" : t
+ }, n.getNodePadding = function(e) {
+ var t = e._private.style["padding-left"].pxValue,
+ n = e._private.style["padding-right"].pxValue,
+ r = e._private.style["padding-top"].pxValue,
+ i = e._private.style["padding-bottom"].pxValue;
+ return isNaN(t) && (t = 0), isNaN(n) && (n = 0), isNaN(r) && (r = 0), isNaN(i) && (i = 0), {
+ left: t,
+ right: n,
+ top: r,
+ bottom: i
+ }
+ }, n.zOrderSort = e.Collection.zIndexSort, n.updateCachedZSortedEles = function() {
+ this.getCachedZSortedEles(!0)
+ }, n.getCachedZSortedEles = function(e) {
+ var t = this.lastZOrderCachedNodes,
+ n = this.lastZOrderCachedEdges,
+ r = this.getCachedNodes(),
+ i = this.getCachedEdges(),
+ a = [];
+ if (!e && t && n && t === r && n === i) a = this.cachedZSortedEles;
+ else {
+ for (var o = 0; o < r.length; o++) {
+ var s = r[o];
+ (s.animated() || s.visible() && !s.transparent()) && a.push(s)
+ }
+ for (var o = 0; o < i.length; o++) {
+ var l = i[o];
+ (l.animated() || l.visible() && !l.transparent()) && a.push(l)
+ }
+ a.sort(this.zOrderSort), this.cachedZSortedEles = a
+ }
+ return this.lastZOrderCachedNodes = r, this.lastZOrderCachedEdges = i, a
+ }, n.projectBezier = function(t) {
+ function n(e) {
+ a.push({
+ x: r(e[0], e[2], e[4], .05),
+ y: r(e[1], e[3], e[5], .05)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .25),
+ y: r(e[1], e[3], e[5], .25)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .4),
+ y: r(e[1], e[3], e[5], .4)
+ });
+ var t = {
+ x: r(e[0], e[2], e[4], .5),
+ y: r(e[1], e[3], e[5], .5)
+ };
+ a.push(t), "self" === i.edgeType || "compound" === i.edgeType ? (i.midX = i.selfEdgeMidX, i.midY = i.selfEdgeMidY) : (i.midX = t.x, i.midY = t.y), a.push({
+ x: r(e[0], e[2], e[4], .6),
+ y: r(e[1], e[3], e[5], .6)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .75),
+ y: r(e[1], e[3], e[5], .75)
+ }), a.push({
+ x: r(e[0], e[2], e[4], .95),
+ y: r(e[1], e[3], e[5], .95)
+ })
+ }
+ var r = e.math.qbezierAt,
+ i = t._private.rscratch,
+ a = t._private.rstyle.bezierPts = [];
+ "self" === i.edgeType ? (n([i.startX, i.startY, i.cp2ax, i.cp2ay, i.selfEdgeMidX, i.selfEdgeMidY]), n([i.selfEdgeMidX, i.selfEdgeMidY, i.cp2cx, i.cp2cy, i.endX, i.endY])) : "bezier" === i.edgeType && n([i.startX, i.startY, i.cp2x, i.cp2y, i.endX, i.endY])
+ }, n.recalculateNodeLabelProjection = function(e) {
+ var t = e._private.style.content.strValue;
+ if (t && !t.match(/^\s+$/)) {
+ var n, r, i = e.outerWidth(),
+ a = e.outerHeight(),
+ o = e._private.position,
+ s = e._private.style["text-halign"].strValue,
+ l = e._private.style["text-valign"].strValue,
+ u = e._private.rscratch,
+ c = e._private.rstyle;
+ switch (s) {
+ case "left":
+ n = o.x - i / 2;
+ break;
+ case "right":
+ n = o.x + i / 2;
+ break;
+ default:
+ n = o.x
+ }
+ switch (l) {
+ case "top":
+ r = o.y - a / 2;
+ break;
+ case "bottom":
+ r = o.y + a / 2;
+ break;
+ default:
+ r = o.y
+ }
+ u.labelX = n, u.labelY = r, c.labelX = n, c.labelY = r, this.applyLabelDimensions(e)
+ }
+ }, n.recalculateEdgeLabelProjection = function(t) {
+ var n = t._private.style.content.strValue;
+ if (n && !n.match(/^\s+$/)) {
+ var r, i, a, o, s = t._private,
+ l = s.rscratch,
+ u = s.rstyle;
+ if ("self" == l.edgeType) a = l.selfEdgeMidX, o = l.selfEdgeMidY;
+ else if ("straight" == l.edgeType) a = (l.startX + l.endX) / 2, o = (l.startY + l.endY) / 2;
+ else if ("bezier" == l.edgeType) a = e.math.qbezierAt(l.startX, l.cp2x, l.endX, .5), o = e.math.qbezierAt(l.startY, l.cp2y, l.endY, .5);
+ else if ("haystack" == l.edgeType) {
+ var c = l.haystackPts;
+ a = (c[0] + c[2]) / 2, o = (c[1] + c[3]) / 2
+ }
+ r = a, i = o, l.labelX = r, l.labelY = i, u.labelX = r, u.labelY = i, this.applyLabelDimensions(t)
+ }
+ }, n.applyLabelDimensions = function(e) {
+ var t = e._private.rscratch,
+ n = e._private.rstyle,
+ r = this.getLabelText(e),
+ i = this.calculateLabelDimensions(e, r);
+ n.labelWidth = i.width, t.labelWidth = i.width, n.labelHeight = i.height, t.labelHeight = i.height
+ }, n.getLabelText = function(e) {
+ var t = e._private.style,
+ n = e._private.style.content.strValue,
+ r = t["text-transform"].value,
+ i = e._private.rscratch;
+ if ("none" == r || ("uppercase" == r ? n = n.toUpperCase() : "lowercase" == r && (n = n.toLowerCase())), "wrap" === t["text-wrap"].value) {
+ if (i.labelWrapKey === i.labelKey) return i.labelWrapCachedText;
+ for (var a = n.split("\n"), o = t["text-max-width"].pxValue, s = [], l = 0; l < a.length; l++) {
+ var u = a[l],
+ c = this.calculateLabelDimensions(e, u, "line=" + u),
+ d = c.width;
+ if (d > o) {
+ for (var h = u.split(/\s+/), p = "", f = 0; f < h.length; f++) {
+ var v = h[f],
+ g = 0 === p.length ? v : p + " " + v,
+ y = this.calculateLabelDimensions(e, g, "testLine=" + g),
+ m = y.width;
+ o >= m ? p += v + " " : (s.push(p), p = v + " ")
+ }
+ p.match(/^\s+$/) || s.push(p)
+ } else s.push(u)
+ }
+ i.labelWrapCachedLines = s, i.labelWrapCachedText = n = s.join("\n"), i.labelWrapKey = i.labelKey
+ }
+ return n
+ }, n.calculateLabelDimensions = function(e, t, n) {
+ var r = this,
+ i = e._private.style,
+ a = i["font-style"].strValue,
+ o = i["font-size"].pxValue + "px",
+ s = i["font-family"].strValue,
+ l = i["font-weight"].strValue,
+ u = e._private.labelKey;
+ n && (u += "$@$" + n);
+ var c = r.labelDimCache || (r.labelDimCache = {});
+ if (c[u]) return c[u];
+ var d = this.labelCalcDiv;
+ d || (d = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(d));
+ var h = d.style;
+ return h.fontFamily = s, h.fontStyle = a, h.fontSize = o, h.fontWeight = l, h.position = "absolute", h.left = "-9999px", h.top = "-9999px", h.zIndex = "-1", h.visibility = "hidden", h.pointerEvents = "none", h.padding = "0", h.lineHeight = "1", "wrap" === i["text-wrap"].value ? h.whiteSpace = "pre" : h.whiteSpace = "normal", d.textContent = t, c[u] = {
+ width: d.clientWidth,
+ height: d.clientHeight
+ }, c[u]
+ }, n.recalculateRenderedStyle = function(e) {
+ for (var t = [], n = [], r = {}, i = 0; i < e.length; i++) {
+ var a = e[i],
+ o = a._private,
+ s = o.style,
+ l = o.rscratch,
+ u = o.rstyle,
+ c = o.data.id,
+ d = null != l.boundingBoxKey && o.boundingBoxKey === l.boundingBoxKey,
+ h = null != l.labelKey && o.labelKey === l.labelKey,
+ p = d && h;
+ if ("nodes" === a._private.group) {
+ var f = o.position,
+ v = null != u.nodeX && null != u.nodeY && f.x === u.nodeX && f.y === u.nodeY,
+ g = null != u.nodeW && u.nodeW === s.width.pxValue,
+ y = null != u.nodeH && u.nodeH === s.height.pxValue;
+ v && p && g && y || n.push(a), u.nodeX = f.x, u.nodeY = f.y, u.nodeW = s.width.pxValue, u.nodeH = s.height.pxValue
+ } else {
+ var m = a._private.source._private.position,
+ x = a._private.target._private.position,
+ b = null != u.srcX && null != u.srcY && m.x === u.srcX && m.y === u.srcY,
+ w = null != u.tgtX && null != u.tgtY && x.x === u.tgtX && x.y === u.tgtY,
+ _ = b && w;
+ if (!_ || !p) {
+ var E = o.style["curve-style"].value;
+ if ("bezier" === E) {
+ if (!r[c]) {
+ t.push(a), r[c] = !0;
+ for (var T = a.parallelEdges(), i = 0; i < T.length; i++) {
+ var S = T[i],
+ C = S._private.data.id;
+ r[C] || (t.push(S), r[C] = !0)
+ }
+ }
+ } else t.push(a)
+ }
+ u.srcX = m.x, u.srcY = m.y, u.tgtX = x.x, u.tgtY = x.y
+ }
+ l.boundingBoxKey = o.boundingBoxKey, l.labelKey = o.labelKey
+ }
+ this.recalculateEdgeProjections(t), this.recalculateLabelProjections(n, t)
+ }, n.recalculateLabelProjections = function(e, t) {
+ for (var n = 0; n < e.length; n++) this.recalculateNodeLabelProjection(e[n]);
+ for (var n = 0; n < t.length; n++) this.recalculateEdgeLabelProjection(t[n])
+ }, n.recalculateEdgeProjections = function(e) {
+ this.findEdgeControlPoints(e)
+ }, n.findEdgeControlPoints = function(n) {
+ if (n && 0 !== n.length) {
+ for (var r, i = this.data.cy, a = i.hasCompoundNodes(), o = {}, s = [], l = [], u = 0; u < n.length; u++) {
+ var c = n[u],
+ d = c._private.style,
+ h = "unbundled-bezier" === d["curve-style"].value;
+ if ("none" !== d.display.value)
+ if ("haystack" !== d["curve-style"].value) {
+ var p = c._private.data.source,
+ f = c._private.data.target;
+ r = p > f ? f + "-" + p : p + "-" + f, h && (r = "unbundled" + c._private.data.id), null == o[r] && (o[r] = [], s.push(r)), o[r].push(c), h && (o[r].hasUnbundled = !0)
+ } else l.push(c)
+ }
+ for (var v, g, y, m, x, b, w, _, E, T, S, C, k, D, N = 0; N < s.length; N++) {
+ r = s[N];
+ var P = o[r];
+ if (P.sort(function(e, t) {
+ return e._private.index - t._private.index
+ }), v = P[0]._private.source, g = P[0]._private.target, v._private.data.id > g._private.data.id) {
+ var M = v;
+ v = g, g = M
+ }
+ if (y = v._private.position, m = g._private.position, x = this.getNodeWidth(v), b = this.getNodeHeight(v), w = this.getNodeWidth(g), _ = this.getNodeHeight(g), E = t.nodeShapes[this.getNodeShape(v)], T = t.nodeShapes[this.getNodeShape(g)], S = v._private.style["border-width"].pxValue, C = g._private.style["border-width"].pxValue, D = !1, P.length > 1 && v !== g || P.hasUnbundled) {
+ var B = E.intersectLine(y.x, y.y, x, b, m.x, m.y, S / 2),
+ L = T.intersectLine(m.x, m.y, w, _, y.x, y.y, C / 2),
+ O = {
+ x1: B[0],
+ x2: L[0],
+ y1: B[1],
+ y2: L[1]
+ },
+ A = L[1] - B[1],
+ I = L[0] - B[0],
+ z = Math.sqrt(I * I + A * A),
+ R = {
+ x: I,
+ y: A
+ },
+ j = {
+ x: R.x / z,
+ y: R.y / z
+ };
+ k = {
+ x: -j.y,
+ y: j.x
+ }, (T.checkPoint(B[0], B[1], C / 2, w, _, m.x, m.y) || E.checkPoint(L[0], L[1], S / 2, x, b, y.x, y.y)) && (k = {}, D = !0)
+ }
+ for (var c, F, u = 0; u < P.length; u++) {
+ c = P[u], F = c._private.rscratch;
+ var q = F.lastEdgeIndex,
+ V = u,
+ X = F.lastNumEdges,
+ H = P.length,
+ Y = c._private.style,
+ $ = Y["control-point-step-size"].pxValue,
+ W = void 0 !== Y["control-point-distance"] ? Y["control-point-distance"].pxValue : void 0,
+ U = Y["control-point-weight"].value,
+ h = "unbundled-bezier" === Y["curve-style"].value,
+ Z = c._private.source !== v;
+ Z && h && (W *= -1);
+ var G = F.lastSrcCtlPtX,
+ K = y.x,
+ J = F.lastSrcCtlPtY,
+ Q = y.y,
+ ee = F.lastSrcCtlPtW,
+ te = v.outerWidth(),
+ ne = F.lastSrcCtlPtH,
+ re = v.outerHeight(),
+ ie = F.lastTgtCtlPtX,
+ ae = m.x,
+ oe = F.lastTgtCtlPtY,
+ se = m.y,
+ le = F.lastTgtCtlPtW,
+ ue = g.outerWidth(),
+ ce = F.lastTgtCtlPtH,
+ de = g.outerHeight(),
+ he = F.lastW,
+ pe = Y["control-point-step-size"].pxValue;
+ if (D ? F.badBezier = !0 : F.badBezier = !1, G !== K || J !== Q || ee !== te || ne !== re || ie !== ae || oe !== se || le !== ue || ce !== de || he !== pe || !(q === V && X === H || h)) {
+ if (F.lastSrcCtlPtX = K, F.lastSrcCtlPtY = Q, F.lastSrcCtlPtW = te, F.lastSrcCtlPtH = re, F.lastTgtCtlPtX = ae, F.lastTgtCtlPtY = se, F.lastTgtCtlPtW = ue, F.lastTgtCtlPtH = de, F.lastEdgeIndex = V, F.lastNumEdges = H, F.lastWidth = pe, v === g) {
+ F.edgeType = "self";
+ var fe = u,
+ ve = $;
+ h && (fe = 0, ve = W), F.cp2ax = y.x, F.cp2ay = y.y - (1 + Math.pow(b, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cx = y.x - (1 + Math.pow(x, 1.12) / 100) * ve * (fe / 3 + 1), F.cp2cy = y.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2
+ } else if (a && (v.isParent() || v.isChild() || g.isParent() || g.isChild()) && (v.parents().anySame(g) || g.parents().anySame(v))) {
+ F.edgeType = "compound", F.badBezier = !1;
+ var fe = u,
+ ve = $;
+ h && (fe = 0, ve = W);
+ var ge = 50,
+ ye = {
+ x: y.x - x / 2,
+ y: y.y - b / 2
+ },
+ me = {
+ x: m.x - w / 2,
+ y: m.y - _ / 2
+ },
+ xe = 1;
+ F.cp2ax = ye.x, F.compoundStretchA = Math.max(xe, Math.log(.01 * x)), F.cp2ay = ye.y - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchA, F.compoundStretchB = Math.max(xe, Math.log(.01 * w)), F.cp2cx = me.x - (1 + Math.pow(ge, 1.12) / 100) * ve * (fe / 3 + 1) * F.compoundStretchB, F.cp2cy = me.y, F.selfEdgeMidX = (F.cp2ax + F.cp2cx) / 2, F.selfEdgeMidY = (F.cp2ay + F.cp2cy) / 2
+ } else if (P.length % 2 !== 1 || u !== Math.floor(P.length / 2) || h) {
+ var be, we = (.5 - P.length / 2 + u) * $,
+ _e = e.math.signum(we);
+ be = h ? W : void 0 !== W ? _e * W : void 0;
+ var Ee = void 0 !== be ? be : we,
+ Te = 1 - U,
+ Se = U;
+ Z && (Te = U, Se = 1 - U);
+ var Ce = {
+ x: O.x1 * Te + O.x2 * Se,
+ y: O.y1 * Te + O.y2 * Se
+ };
+ F.edgeType = "bezier", F.cp2x = Ce.x + k.x * Ee, F.cp2y = Ce.y + k.y * Ee
+ } else F.edgeType = "straight";
+ this.findEndpoints(c);
+ var ke = !e.is.number(F.startX) || !e.is.number(F.startY),
+ De = !e.is.number(F.arrowStartX) || !e.is.number(F.arrowStartY),
+ Ne = !e.is.number(F.endX) || !e.is.number(F.endY),
+ Pe = !e.is.number(F.arrowEndX) || !e.is.number(F.arrowEndY),
+ Me = 3,
+ Be = this.getArrowWidth(c._private.style.width.pxValue) * t.arrowShapeHeight,
+ Le = Me * Be,
+ Oe = e.math.distance({
+ x: F.cp2x,
+ y: F.cp2y
+ }, {
+ x: F.startX,
+ y: F.startY
+ }),
+ Ae = Le > Oe,
+ Ie = e.math.distance({
+ x: F.cp2x,
+ y: F.cp2y
+ }, {
+ x: F.endX,
+ y: F.endY
+ }),
+ ze = Le > Ie;
+ if ("bezier" === F.edgeType) {
+ var Re = !1;
+ if (ke || De || Ae) {
+ Re = !0;
+ var je = {
+ x: F.cp2x - y.x,
+ y: F.cp2y - y.y
+ },
+ Fe = Math.sqrt(je.x * je.x + je.y * je.y),
+ qe = {
+ x: je.x / Fe,
+ y: je.y / Fe
+ },
+ Ve = Math.max(x, b),
+ Xe = {
+ x: F.cp2x + 2 * qe.x * Ve,
+ y: F.cp2y + 2 * qe.y * Ve
+ },
+ He = E.intersectLine(y.x, y.y, x, b, Xe.x, Xe.y, S / 2);
+ Ae ? (F.cp2x = F.cp2x + qe.x * (Le - Oe), F.cp2y = F.cp2y + qe.y * (Le - Oe)) : (F.cp2x = He[0] + qe.x * Le, F.cp2y = He[1] + qe.y * Le)
+ }
+ if (Ne || Pe || ze) {
+ Re = !0;
+ var je = {
+ x: F.cp2x - m.x,
+ y: F.cp2y - m.y
+ },
+ Fe = Math.sqrt(je.x * je.x + je.y * je.y),
+ qe = {
+ x: je.x / Fe,
+ y: je.y / Fe
+ },
+ Ve = Math.max(x, b),
+ Xe = {
+ x: F.cp2x + 2 * qe.x * Ve,
+ y: F.cp2y + 2 * qe.y * Ve
+ },
+ Ye = T.intersectLine(m.x, m.y, w, _, Xe.x, Xe.y, C / 2);
+ ze ? (F.cp2x = F.cp2x + qe.x * (Le - Ie), F.cp2y = F.cp2y + qe.y * (Le - Ie)) : (F.cp2x = Ye[0] + qe.x * Le, F.cp2y = Ye[1] + qe.y * Le)
+ }
+ Re && this.findEndpoints(c)
+ } else "straight" === F.edgeType && (F.midX = (K + ae) / 2, F.midY = (Q + se) / 2);
+ this.projectBezier(c), this.recalculateEdgeLabelProjection(c)
+ }
+ }
+ }
+ for (var u = 0; u < l.length; u++) {
+ var c = l[u],
+ $e = c._private,
+ We = $e.rscratch,
+ F = We;
+ if (!We.haystack) {
+ var Ue = 2 * Math.random() * Math.PI;
+ We.source = {
+ x: Math.cos(Ue),
+ y: Math.sin(Ue)
+ };
+ var Ue = 2 * Math.random() * Math.PI;
+ We.target = {
+ x: Math.cos(Ue),
+ y: Math.sin(Ue)
+ }
+ }
+ var v = $e.source,
+ g = $e.target,
+ y = v._private.position,
+ m = g._private.position,
+ x = v.width(),
+ w = g.width(),
+ b = v.height(),
+ _ = g.height(),
+ Ve = d["haystack-radius"].value,
+ Ze = Ve / 2;
+ F.haystackPts = [F.source.x * x * Ze + y.x, F.source.y * b * Ze + y.y, F.target.x * w * Ze + m.x, F.target.y * _ * Ze + m.y], We.edgeType = "haystack", We.haystack = !0, this.recalculateEdgeLabelProjection(c)
+ }
+ return o
+ }
+ }, n.findEndpoints = function(n) {
+ var r, i = n.source()[0],
+ a = n.target()[0],
+ o = n._private.style["target-arrow-shape"].value,
+ s = n._private.style["source-arrow-shape"].value,
+ l = a._private.style["border-width"].pxValue,
+ u = i._private.style["border-width"].pxValue,
+ c = n._private.rscratch;
+ if ("self" == c.edgeType || "compound" == c.edgeType) {
+ var d = [c.cp2cx, c.cp2cy];
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2);
+ var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1];
+ var d = [c.cp2ax, c.cp2ay];
+ r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2);
+ var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1]
+ } else if ("straight" == c.edgeType) {
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), i.position().x, i.position().y, l / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1;
+ var h = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, [i.position().x, i.position().y], t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), a.position().x, a.position().y, u / 2), 0 === r.length ? c.noArrowPlacement = !0 : c.noArrowPlacement = !1;
+ var f = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, [a.position().x, a.position().y], t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1], e.is.number(c.startX) && e.is.number(c.startY) && e.is.number(c.endX) && e.is.number(c.endY) ? c.badLine = !1 : c.badLine = !0
+ } else if ("bezier" == c.edgeType) {
+ var d = [c.cp2x, c.cp2y];
+ r = t.nodeShapes[this.getNodeShape(a)].intersectLine(a._private.position.x, a._private.position.y, this.getNodeWidth(a), this.getNodeHeight(a), d[0], d[1], l / 2);
+ var h = e.math.shortenIntersection(r, d, t.arrowShapes[o].spacing(n)),
+ p = e.math.shortenIntersection(r, d, t.arrowShapes[o].gap(n));
+ c.endX = p[0], c.endY = p[1], c.arrowEndX = h[0], c.arrowEndY = h[1], r = t.nodeShapes[this.getNodeShape(i)].intersectLine(i._private.position.x, i._private.position.y, this.getNodeWidth(i), this.getNodeHeight(i), d[0], d[1], u / 2);
+ var f = e.math.shortenIntersection(r, d, t.arrowShapes[s].spacing(n)),
+ v = e.math.shortenIntersection(r, d, t.arrowShapes[s].gap(n));
+ c.startX = v[0], c.startY = v[1], c.arrowStartX = f[0], c.arrowStartY = f[1]
+ } else if (c.isArcEdge) return
+ }, n.findEdges = function(e) {
+ for (var t = this.getCachedEdges(), n = {}, r = [], i = 0; i < e.length; i++) n[e[i]._private.data.id] = e[i];
+ for (var i = 0; i < t.length; i++)(n[t[i]._private.data.source] || n[t[i]._private.data.target]) && r.push(t[i]);
+ return r
+ }, n.getArrowWidth = n.getArrowHeight = function(e) {
+ var t = this.arrowWidthCache = this.arrowWidthCache || {},
+ n = t[e];
+ return n ? n : (n = Math.max(Math.pow(13.37 * e, .9), 29), t[e] = n, n)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawEdge = function(e, n, r) {
+ var i = n._private.rscratch,
+ a = t.usePaths();
+ if (!i.badBezier && ("bezier" !== i.edgeType && "straight" !== i.edgeType || !isNaN(i.startX))) {
+ var o = n._private.style;
+ if (!(o.width.pxValue <= 0)) {
+ var s = o["overlay-padding"].pxValue,
+ l = o["overlay-opacity"].value,
+ u = o["overlay-color"].value;
+ if (r) {
+ if (0 === l) return;
+ this.strokeStyle(e, u[0], u[1], u[2], l), e.lineCap = "round", "self" != n._private.rscratch.edgeType || a || (e.lineCap = "butt")
+ } else {
+ var c = o["line-color"].value;
+ this.strokeStyle(e, c[0], c[1], c[2], o.opacity.value), e.lineCap = "butt"
+ }
+ var d, h, p, f;
+ p = d = n._private.source, f = h = n._private.target;
+ var v = o.width.pxValue + (r ? 2 * s : 0),
+ g = r ? "solid" : o["line-style"].value;
+ e.lineWidth = v;
+ var y = o["shadow-blur"].pxValue,
+ m = o["shadow-opacity"].value,
+ x = o["shadow-color"].value,
+ b = o["shadow-offset-x"].pxValue,
+ w = o["shadow-offset-y"].pxValue;
+ if (this.shadowStyle(e, x, r ? 0 : m, y, b, w), "haystack" === i.edgeType) this.drawStyledEdge(n, e, i.haystackPts, g, v);
+ else if ("self" === i.edgeType || "compound" === i.edgeType) {
+ var _ = n._private.rscratch,
+ E = [_.startX, _.startY, _.cp2ax, _.cp2ay, _.selfEdgeMidX, _.selfEdgeMidY, _.selfEdgeMidX, _.selfEdgeMidY, _.cp2cx, _.cp2cy, _.endX, _.endY];
+ this.drawStyledEdge(n, e, E, g, v)
+ } else if ("straight" === i.edgeType) {
+ var T = h._private.position.x - d._private.position.x,
+ S = h._private.position.y - d._private.position.y,
+ C = i.endX - i.startX,
+ k = i.endY - i.startY;
+ if (0 > T * C + S * k) i.straightEdgeTooShort = !0;
+ else {
+ var _ = i;
+ this.drawStyledEdge(n, e, [_.startX, _.startY, _.endX, _.endY], g, v), i.straightEdgeTooShort = !1
+ }
+ } else {
+ var _ = i;
+ this.drawStyledEdge(n, e, [_.startX, _.startY, _.cp2x, _.cp2y, _.endX, _.endY], g, v)
+ }
+ "haystack" === i.edgeType ? this.drawArrowheads(e, n, r) : i.noArrowPlacement !== !0 && void 0 !== i.startX && this.drawArrowheads(e, n, r), this.shadowStyle(e, "transparent", 0)
+ }
+ }
+ }, n.drawStyledEdge = function(e, n, r, i, a) {
+ var o, s = e._private.rscratch,
+ l = n,
+ u = !1,
+ c = t.usePaths();
+ if (c) {
+ for (var d = r, h = s.pathCacheKey && d.length === s.pathCacheKey.length, p = h, f = 0; p && f < d.length; f++) s.pathCacheKey[f] !== d[f] && (p = !1);
+ p ? (o = n = s.pathCache, u = !0) : (o = n = new Path2D, s.pathCacheKey = d, s.pathCache = o)
+ }
+ if (l.setLineDash) switch (i) {
+ case "dotted":
+ l.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ l.setLineDash([6, 3]);
+ break;
+ case "solid":
+ l.setLineDash([])
+ }
+ u || (n.beginPath && n.beginPath(), n.moveTo(r[0], r[1]), 6 !== r.length || s.badBezier ? 12 !== r.length || s.badBezier ? 4 !== r.length || s.badLine || n.lineTo(r[2], r[3]) : (n.quadraticCurveTo(r[2], r[3], r[4], r[5]), n.quadraticCurveTo(r[8], r[9], r[10], r[11])) : n.quadraticCurveTo(r[2], r[3], r[4], r[5])), n = l, c ? n.stroke(o) : n.stroke(), n.setLineDash && n.setLineDash([])
+ }, n.drawArrowheads = function(e, t, n) {
+ function r(n, r, i, a, o) {
+ var s = v[n + "-arrow-shape"].value;
+ if ("none" !== s) {
+ var l = e.globalCompositeOperation,
+ u = "hollow" === v[n + "-arrow-fill"].value ? "both" : "filled",
+ c = v[n + "-arrow-fill"].value;
+ "half-triangle-overshot" === s && (c = "hollow", u = "hollow"), (1 !== v.opacity.value || "hollow" === c) && (e.globalCompositeOperation = "destination-out", d.fillStyle(e, 255, 255, 255, 1), d.strokeStyle(e, 255, 255, 255, 1), d.drawArrowShape(t, n, e, u, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o), e.globalCompositeOperation = l);
+ var h = v[n + "-arrow-color"].value;
+ d.fillStyle(e, h[0], h[1], h[2], v.opacity.value), d.strokeStyle(e, h[0], h[1], h[2], v.opacity.value), d.drawArrowShape(t, n, e, c, v.width.pxValue, v[n + "-arrow-shape"].value, r, i, a, o)
+ }
+ }
+ if (!n) {
+ var i, a, o, s, l, u, c = t._private.rscratch,
+ d = this,
+ h = "haystack" === c.edgeType,
+ p = t.source().position(),
+ f = t.target().position();
+ h ? (o = c.haystackPts[0], s = c.haystackPts[1], l = c.haystackPts[2], u = c.haystackPts[3]) : (o = c.arrowStartX, s = c.arrowStartY, l = c.arrowEndX, u = c.arrowEndY);
+ var v = t._private.style;
+ i = o - p.x, a = s - p.y, h || isNaN(o) || isNaN(s) || isNaN(i) || isNaN(a) || r("source", o, s, i, a);
+ var g = c.midX,
+ y = c.midY;
+ h && (g = (o + l) / 2, y = (s + u) / 2), i = o - l, a = s - u, "self" === c.edgeType && (i = 1, a = -1), isNaN(g) || isNaN(y) || r("mid-target", g, y, i, a), i *= -1, a *= -1, isNaN(g) || isNaN(y) || r("mid-source", g, y, i, a), i = l - f.x, a = u - f.y, h || isNaN(l) || isNaN(u) || isNaN(i) || isNaN(a) || r("target", l, u, i, a)
+ }
+ }, n.drawArrowShape = function(e, n, r, i, a, o, s, l, u, c) {
+ var d, h = t.usePaths(),
+ p = e._private.rscratch,
+ f = !1,
+ v = r,
+ g = {
+ x: s,
+ y: l
+ },
+ y = Math.asin(c / Math.sqrt(u * u + c * c));
+ 0 > u ? y += Math.PI / 2 : y = -(Math.PI / 2 + y);
+ var m = this.getArrowWidth(a),
+ x = t.arrowShapes[o];
+ if (h) {
+ var b = m + "$" + o + "$" + y + "$" + s + "$" + l;
+ p.arrowPathCacheKey = p.arrowPathCacheKey || {}, p.arrowPathCache = p.arrowPathCache || {};
+ var w = p.arrowPathCacheKey[n] === b;
+ w ? (d = r = p.arrowPathCache[n], f = !0) : (d = r = new Path2D, p.arrowPathCacheKey[n] = b, p.arrowPathCache[n] = d)
+ }
+ r.beginPath && r.beginPath(), f || x.draw(r, m, y, g), !x.leavePathOpen && r.closePath && r.closePath(), r = v, ("filled" === i || "both" === i) && (h ? r.fill(d) : r.fill()), ("hollow" === i || "both" === i) && (r.lineWidth = x.matchEdgeWidth ? a : 1, r.lineJoin = "miter", h ? r.stroke(d) : r.stroke())
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.getCachedImage = function(e, t) {
+ var n = this,
+ r = n.imageCache = n.imageCache || {};
+ if (r[e] && r[e].image) return r[e].image;
+ var i = r[e] = r[e] || {},
+ a = i.image = new Image;
+ return a.addEventListener("load", t), a.src = e, a
+ }, n.safeDrawImage = function(e, n, r, i, a, o, s, l, u, c) {
+ var d = this;
+ try {
+ e.drawImage(n, r, i, a, o, s, l, u, c)
+ } catch (h) {
+ d.data.canvasNeedsRedraw[t.NODE] = !0, d.data.canvasNeedsRedraw[t.DRAG] = !0, d.drawingImage = !0, d.redraw()
+ }
+ }, n.drawInscribedImage = function(e, n, r) {
+ var i = this,
+ a = r._private.position.x,
+ o = r._private.position.y,
+ s = r._private.style,
+ l = s["background-fit"].value,
+ u = s["background-position-x"],
+ c = s["background-position-y"],
+ d = s["background-repeat"].value,
+ h = r.width(),
+ p = r.height(),
+ f = r._private.rscratch,
+ v = s["background-clip"].value,
+ g = "node" === v,
+ y = s["background-image-opacity"].value,
+ m = n.width,
+ x = n.height;
+ if (0 !== m && 0 !== x) {
+ var b = s["background-width"];
+ "auto" !== b.value && (m = "%" === b.units ? b.value / 100 * h : b.pxValue);
+ var w = s["background-height"];
+ if ("auto" !== w.value && (x = "%" === w.units ? w.value / 100 * p : w.pxValue), 0 !== m && 0 !== x) {
+ if ("contain" === l) {
+ var _ = Math.min(h / m, p / x);
+ m *= _, x *= _
+ } else if ("cover" === l) {
+ var _ = Math.max(h / m, p / x);
+ m *= _, x *= _
+ }
+ var E = a - h / 2;
+ E += "%" === u.units ? (h - m) * u.value / 100 : u.pxValue;
+ var T = o - p / 2;
+ T += "%" === c.units ? (p - x) * c.value / 100 : c.pxValue, f.pathCache && (E -= a, T -= o, a = 0, o = 0);
+ var S = e.globalAlpha;
+ if (e.globalAlpha = y, "no-repeat" === d) g && (e.save(), f.pathCache ? e.clip(f.pathCache) : (t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.clip())), i.safeDrawImage(e, n, 0, 0, n.width, n.height, E, T, m, x), g && e.restore();
+ else {
+ var C = e.createPattern(n, d);
+ e.fillStyle = C, t.nodeShapes[i.getNodeShape(r)].drawPath(e, a, o, h, p), e.translate(E, T), e.fill(), e.translate(-E, -T)
+ }
+ e.globalAlpha = S
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e, t, n, r, i, a) {
+ var a = a || 5;
+ e.beginPath(), e.moveTo(t + a, n), e.lineTo(t + r - a, n), e.quadraticCurveTo(t + r, n, t + r, n + a), e.lineTo(t + r, n + i - a), e.quadraticCurveTo(t + r, n + i, t + r - a, n + i), e.lineTo(t + a, n + i), e.quadraticCurveTo(t, n + i, t, n + i - a), e.lineTo(t, n + a), e.quadraticCurveTo(t, n, t + a, n), e.closePath(), e.fill()
+ }
+ var n = e("renderer", "canvas"),
+ r = n.prototype;
+ r.drawEdgeText = function(t, n) {
+ var r = n._private.style.content.strValue;
+ if (r && !r.match(/^\s+$/) && (!this.hideEdgesOnViewport || !(this.dragData.didDrag || this.pinching || this.hoverData.dragging || this.data.wheel || this.swipePanning))) {
+ var i = n._private.style["font-size"].pxValue * n.cy().zoom(),
+ a = n._private.style["min-zoomed-font-size"].pxValue;
+ if (!(a > i)) {
+ t.textAlign = "center", t.textBaseline = "middle";
+ var o = n._private.rscratch;
+ if (e.is.number(o.labelX) && e.is.number(o.labelY)) {
+ var s, l, u, c = n._private.style,
+ d = "autorotate" === c["edge-text-rotation"].strValue;
+ if (d) {
+ switch (o.edgeType) {
+ case "haystack":
+ l = o.haystackPts[2] - o.haystackPts[0], u = o.haystackPts[3] - o.haystackPts[1];
+ break;
+ default:
+ l = o.endX - o.startX, u = o.endY - o.startY
+ }
+ s = Math.atan(u / l), t.translate(o.labelX, o.labelY), t.rotate(s), this.drawText(t, n, 0, 0), t.rotate(-s), t.translate(-o.labelX, -o.labelY)
+ } else this.drawText(t, n, o.labelX, o.labelY)
+ }
+ }
+ }
+ }, r.drawNodeText = function(t, n) {
+ var r = n._private.style.content.strValue;
+ if (r && !r.match(/^\s+$/)) {
+ var i = n._private.style["font-size"].pxValue * n.cy().zoom(),
+ a = n._private.style["min-zoomed-font-size"].pxValue;
+ if (!(a > i)) {
+ var o = n._private.style["text-halign"].strValue,
+ s = n._private.style["text-valign"].strValue,
+ l = n._private.rscratch;
+ if (e.is.number(l.labelX) && e.is.number(l.labelY)) {
+ switch (o) {
+ case "left":
+ t.textAlign = "right";
+ break;
+ case "right":
+ t.textAlign = "left";
+ break;
+ default:
+ t.textAlign = "center"
+ }
+ switch (s) {
+ case "top":
+ t.textBaseline = "bottom";
+ break;
+ case "bottom":
+ t.textBaseline = "top";
+ break;
+ default:
+ t.textBaseline = "middle"
+ }
+ this.drawText(t, n, l.labelX, l.labelY)
+ }
+ }
+ }
+ }, r.getFontCache = function(e) {
+ var t;
+ this.fontCaches = this.fontCaches || [];
+ for (var n = 0; n < this.fontCaches.length; n++)
+ if (t = this.fontCaches[n], t.context === e) return t;
+ return t = {
+ context: e
+ }, this.fontCaches.push(t), t
+ }, r.setupTextStyle = function(e, t) {
+ var n = t.effectiveOpacity(),
+ r = t._private.style,
+ i = r["font-style"].strValue,
+ a = r["font-size"].pxValue + "px",
+ o = r["font-family"].strValue,
+ s = r["font-weight"].strValue,
+ l = r["text-opacity"].value * r.opacity.value * n,
+ u = r["text-outline-opacity"].value * l,
+ c = r.color.value,
+ d = r["text-outline-color"].value,
+ h = r["text-shadow-blur"].pxValue,
+ p = r["text-shadow-opacity"].value,
+ f = r["text-shadow-color"].value,
+ v = r["text-shadow-offset-x"].pxValue,
+ g = r["text-shadow-offset-y"].pxValue,
+ y = t._private.fontKey,
+ m = this.getFontCache(e);
+ m.key !== y && (e.font = i + " " + s + " " + a + " " + o, m.key = y);
+ var x = this.getLabelText(t);
+ return e.lineJoin = "round", this.fillStyle(e, c[0], c[1], c[2], l), this.strokeStyle(e, d[0], d[1], d[2], u), this.shadowStyle(e, f, p, h, v, g), x
+ }, r.drawText = function(e, n, r, i) {
+ var a = n._private,
+ o = a.style,
+ s = a.rstyle,
+ l = a.rscratch,
+ u = n.effectiveOpacity();
+ if (0 !== u && 0 !== o["text-opacity"].value) {
+ var c = this.setupTextStyle(e, n),
+ d = o["text-halign"].value,
+ h = o["text-valign"].value;
+ if (n.isEdge() && (d = "center", h = "center"), null != c && !isNaN(r) && !isNaN(i)) {
+ var p = o["text-background-opacity"].value,
+ f = o["text-border-opacity"].value,
+ v = o["text-border-width"].pxValue;
+ if (p > 0 || v > 0 && f > 0) {
+ var g = 4 + v / 2;
+ n.isNode() && ("top" === h ? i -= g : "bottom" === h && (i += g), "left" === d ? r -= g : "right" === d && (r += g));
+ var y = s.labelWidth,
+ m = s.labelHeight,
+ x = r;
+ d && ("center" == d ? x -= y / 2 : "left" == d && (x -= y));
+ var b = i;
+ if (n.isNode() ? "top" == h ? b -= m : "center" == h && (b -= m / 2) : b -= m / 2, "autorotate" === o["edge-text-rotation"].strValue ? (i = 0, y += 4, x = r - y / 2, b = i - m / 2) : (x -= g, b -= g, m += 2 * g, y += 2 * g), p > 0) {
+ var w = e.fillStyle,
+ _ = o["text-background-color"].value;
+ e.fillStyle = "rgba(" + _[0] + "," + _[1] + "," + _[2] + "," + p * u + ")";
+ var E = o["text-background-shape"].strValue;
+ "roundrectangle" == E ? t(e, x, b, y, m, 2) : e.fillRect(x, b, y, m), e.fillStyle = w
+ }
+ if (v > 0 && f > 0) {
+ var T = e.strokeStyle,
+ S = e.lineWidth,
+ C = o["text-border-color"].value,
+ k = o["text-border-style"].value;
+ if (e.strokeStyle = "rgba(" + C[0] + "," + C[1] + "," + C[2] + "," + f * u + ")", e.lineWidth = v, e.setLineDash) switch (k) {
+ case "dotted":
+ e.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ e.setLineDash([4, 2]);
+ break;
+ case "double":
+ e.lineWidth = v / 4, e.setLineDash([]);
+ break;
+ case "solid":
+ e.setLineDash([])
+ }
+ if (e.strokeRect(x, b, y, m), "double" === k) {
+ var D = v / 2;
+ e.strokeRect(x + D, b + D, y - 2 * D, m - 2 * D)
+ }
+ e.setLineDash && e.setLineDash([]), e.lineWidth = S, e.strokeStyle = T
+ }
+ }
+ var N = 2 * o["text-outline-width"].pxValue;
+ if (N > 0 && (e.lineWidth = N), "wrap" === o["text-wrap"].value) {
+ var P = l.labelWrapCachedLines,
+ M = s.labelHeight / P.length;
+ switch (h) {
+ case "top":
+ i -= (P.length - 1) * M;
+ break;
+ case "bottom":
+ break;
+ default:
+ case "center":
+ i -= (P.length - 1) * M / 2
+ }
+ for (var B = 0; B < P.length; B++) N > 0 && e.strokeText(P[B], r, i), e.fillText(P[B], r, i), i += M
+ } else N > 0 && e.strokeText(c, r, i), e.fillText(c, r, i);
+ this.shadowStyle(e, "transparent", 0)
+ }
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawNode = function(e, n, r) {
+ var i, a, o = this,
+ s = n._private.style,
+ l = n._private.rscratch,
+ u = n._private,
+ c = u.position;
+ if (void 0 !== c.x && void 0 !== c.y) {
+ var d, h = t.usePaths(),
+ p = e,
+ f = !1,
+ v = s["overlay-padding"].pxValue,
+ g = s["overlay-opacity"].value,
+ y = s["overlay-color"].value;
+ if (!r || 0 !== g) {
+ var m = n.effectiveOpacity();
+ if (0 !== m)
+ if (i = this.getNodeWidth(n), a = this.getNodeHeight(n), e.lineWidth = s["border-width"].pxValue, void 0 !== r && r) g > 0 && (this.fillStyle(e, y[0], y[1], y[2], g), t.nodeShapes.roundrectangle.drawPath(e, n._private.position.x, n._private.position.y, i + 2 * v, a + 2 * v), e.fill());
+ else {
+ var x, b = s["background-image"].value[2] || s["background-image"].value[1];
+ if (void 0 !== b) {
+ x = this.getCachedImage(b, function() {
+ o.data.canvasNeedsRedraw[t.NODE] = !0, o.data.canvasNeedsRedraw[t.DRAG] = !0, o.drawingImage = !0, o.redraw()
+ });
+ var w = u.backgrounding;
+ u.backgrounding = !x.complete, w !== u.backgrounding && n.updateStyle(!1)
+ }
+ var _ = s["background-color"].value,
+ E = s["border-color"].value,
+ T = s["border-style"].value;
+ this.fillStyle(e, _[0], _[1], _[2], s["background-opacity"].value * m), this.strokeStyle(e, E[0], E[1], E[2], s["border-opacity"].value * m);
+ var S = s["shadow-blur"].pxValue,
+ C = s["shadow-opacity"].value,
+ k = s["shadow-color"].value,
+ D = s["shadow-offset-x"].pxValue,
+ N = s["shadow-offset-y"].pxValue;
+ if (this.shadowStyle(e, k, C, S, D, N), e.lineJoin = "miter", e.setLineDash) switch (T) {
+ case "dotted":
+ e.setLineDash([1, 1]);
+ break;
+ case "dashed":
+ e.setLineDash([4, 2]);
+ break;
+ case "solid":
+ case "double":
+ e.setLineDash([])
+ }
+ var P = s.shape.strValue;
+ if (h) {
+ var M = P + "$" + i + "$" + a;
+ e.translate(c.x, c.y), l.pathCacheKey === M ? (d = e = l.pathCache, f = !0) : (d = e = new Path2D, l.pathCacheKey = M, l.pathCache = d)
+ }
+ if (!f) {
+ var B = c;
+ h && (B = {
+ x: 0,
+ y: 0
+ }), t.nodeShapes[this.getNodeShape(n)].drawPath(e, B.x, B.y, i, a)
+ }
+ e = p, h ? e.fill(d) : e.fill(), this.shadowStyle(e, "transparent", 0), void 0 !== b && x.complete && this.drawInscribedImage(e, x, n);
+ var L = s["background-blacken"].value,
+ O = s["border-width"].pxValue;
+ if (this.hasPie(n) && (this.drawPie(e, n, m), (0 !== L || 0 !== O) && (h || t.nodeShapes[this.getNodeShape(n)].drawPath(e, c.x, c.y, i, a))), L > 0 ? (this.fillStyle(e, 0, 0, 0, L), h ? e.fill(d) : e.fill()) : 0 > L && (this.fillStyle(e, 255, 255, 255, -L), h ? e.fill(d) : e.fill()), O > 0 && (h ? e.stroke(d) : e.stroke(), "double" === T)) {
+ e.lineWidth = s["border-width"].pxValue / 3;
+ var A = e.globalCompositeOperation;
+ e.globalCompositeOperation = "destination-out", h ? e.stroke(d) : e.stroke(), e.globalCompositeOperation = A
+ }
+ h && e.translate(-c.x, -c.y), e.setLineDash && e.setLineDash([])
+ }
+ }
+ }
+ }, n.hasPie = function(e) {
+ return e = e[0], e._private.hasPie
+ }, n.drawPie = function(n, r, i) {
+ r = r[0];
+ var a = r._private,
+ o = a.style,
+ s = o["pie-size"],
+ l = this.getNodeWidth(r),
+ u = this.getNodeHeight(r),
+ c = a.position.x,
+ d = a.position.y,
+ h = Math.min(l, u) / 2,
+ p = 0,
+ f = t.usePaths();
+ f && (c = 0, d = 0), "%" === s.units ? h = h * s.value / 100 : void 0 !== s.pxValue && (h = s.pxValue / 2);
+ for (var v = 1; v <= e.style.pieBackgroundN; v++) {
+ var g = o["pie-" + v + "-background-size"].value,
+ y = o["pie-" + v + "-background-color"].value,
+ m = o["pie-" + v + "-background-opacity"].value * i,
+ x = g / 100;
+ x + p > 1 && (x = 1 - p);
+ var b = 1.5 * Math.PI + 2 * Math.PI * p,
+ w = 2 * Math.PI * x,
+ _ = b + w;
+ 0 === g || p >= 1 || p + x > 1 || (n.beginPath(), n.moveTo(c, d), n.arc(c, d, h, b, _), n.closePath(), this.fillStyle(n, y[0], y[1], y[2], m), n.fill(), p += x)
+ }
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t,
+ r = t.prototype;
+ r.getPixelRatio = function() {
+ var e = this.data.contexts[0];
+ if (null != this.forcedPixelRatio) return this.forcedPixelRatio;
+ var t = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1;
+ return (window.devicePixelRatio || 1) / t
+ }, r.paintCache = function(e) {
+ for (var t, n = this.paintCaches = this.paintCaches || [], r = !0, i = 0; i < n.length; i++)
+ if (t = n[i], t.context === e) {
+ r = !1;
+ break
+ }
+ return r && (t = {
+ context: e
+ }, n.push(t)), t
+ }, r.fillStyle = function(e, t, n, r, i) {
+ e.fillStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")"
+ }, r.strokeStyle = function(e, t, n, r, i) {
+ e.strokeStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")"
+ }, r.shadowStyle = function(e, t, n, r, i, a) {
+ var o = this.data.cy.zoom(),
+ s = this.paintCache(e);
+ (0 !== s.shadowOpacity || 0 !== n) && (s.shadowOpacity = n, n > 0 ? (e.shadowBlur = r * o, e.shadowColor = "rgba(" + t[0] + "," + t[1] + "," + t[2] + "," + n + ")", e.shadowOffsetX = i * o, e.shadowOffsetY = a * o) : (e.shadowBlur = 0, e.shadowColor = "transparent"))
+ }, r.matchCanvasSize = function(e) {
+ var r = this.data,
+ i = e.clientWidth,
+ a = e.clientHeight,
+ o = this.getPixelRatio(),
+ s = this.motionBlurPxRatio;
+ (e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE] || e === this.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG]) && (o = s);
+ var l, u = i * o,
+ c = a * o;
+ if (u !== this.canvasWidth || c !== this.canvasHeight) {
+ this.fontCaches = null;
+ var d = r.canvasContainer;
+ d.style.width = i + "px", d.style.height = a + "px";
+ for (var h = 0; h < t.CANVAS_LAYERS; h++) l = r.canvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px");
+ for (var h = 0; h < t.BUFFER_COUNT; h++) l = r.bufferCanvases[h], (l.width !== u || l.height !== c) && (l.width = u, l.height = c, l.style.width = i + "px", l.style.height = a + "px");
+ this.textureMult = 1, 1 >= o && (l = r.bufferCanvases[t.TEXTURE_BUFFER], this.textureMult = 2, l.width = u * this.textureMult, l.height = c * this.textureMult), this.canvasWidth = u, this.canvasHeight = c
+ }
+ }, r.renderTo = function(e, t, n, r) {
+ this.redraw({
+ forcedContext: e,
+ forcedZoom: t,
+ forcedPan: n,
+ drawAllLayers: !0,
+ forcedPxRatio: r
+ })
+ }, r.timeToRender = function() {
+ return this.redrawTotalTime / this.redrawCount
+ }, t.minRedrawLimit = 1e3 / 60, t.maxRedrawLimit = 1e3, t.motionBlurDelay = 100, r.redraw = function(r) {
+ function i() {
+ function r(e, t, n, r, i) {
+ var a = e.globalCompositeOperation;
+ e.globalCompositeOperation = "destination-out", c.fillStyle(e, 255, 255, 255, c.motionBlurTransparency), e.fillRect(t, n, r, i), e.globalCompositeOperation = a
+ }
+
+ function i(e, t) {
+ var i, s, d, h;
+ c.clearingMotionBlur || e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] && e !== p.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] ? (i = k, s = S, d = c.canvasWidth, h = c.canvasHeight) : (i = {
+ x: C.x * y,
+ y: C.y * y
+ }, s = T * y, d = c.canvasWidth * y, h = c.canvasHeight * y), e.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === t ? r(e, 0, 0, d, h) : a || void 0 !== t && !t || e.clearRect(0, 0, d, h), o || (e.translate(i.x, i.y), e.scale(s, s)), u && e.translate(u.x, u.y), l && e.scale(l, l)
+ }
+
+ function b(e, t) {
+ for (var n = e.eles, r = 0; r < n.length; r++) {
+ var i = n[r];
+ i.isNode() ? (c.drawNode(t, i), q || c.drawNodeText(t, i), c.drawNode(t, i, !0)) : F || (c.drawEdge(t, i), q || c.drawEdgeText(t, i), c.drawEdge(t, i, !0))
+ }
+ }
+ c.textureDrawLastFrame && !v && (f[n.NODE] = !0, f[n.SELECT_BOX] = !0);
+ var _ = c.getCachedEdges(),
+ E = h.style()._private.coreStyle,
+ T = h.zoom(),
+ S = void 0 !== l ? l : T,
+ C = h.pan(),
+ k = {
+ x: C.x,
+ y: C.y
+ },
+ N = {
+ zoom: T,
+ pan: {
+ x: C.x,
+ y: C.y
+ }
+ },
+ P = c.prevViewport,
+ M = void 0 === P || N.zoom !== P.zoom || N.pan.x !== P.pan.x || N.pan.y !== P.pan.y;
+ M || x && !m || (c.motionBlurPxRatio = 1), u && (k = u), S *= d, k.x *= d, k.y *= d;
+ var B = {
+ drag: {
+ nodes: [],
+ edges: [],
+ eles: []
+ },
+ nondrag: {
+ nodes: [],
+ edges: [],
+ eles: []
+ }
+ };
+ if (v || (c.textureDrawLastFrame = !1), v) {
+ c.textureDrawLastFrame = !0;
+ var L;
+ if (!c.textureCache) {
+ c.textureCache = {}, L = c.textureCache.bb = h.elements().boundingBox(), c.textureCache.texture = c.data.bufferCanvases[t.TEXTURE_BUFFER];
+ var O = c.data.bufferContexts[t.TEXTURE_BUFFER];
+ O.setTransform(1, 0, 0, 1, 0, 0), O.clearRect(0, 0, c.canvasWidth * c.textureMult, c.canvasHeight * c.textureMult), c.redraw({
+ forcedContext: O,
+ drawOnlyNodeLayer: !0,
+ forcedPxRatio: d * c.textureMult
+ });
+ var N = c.textureCache.viewport = {
+ zoom: h.zoom(),
+ pan: h.pan(),
+ width: c.canvasWidth,
+ height: c.canvasHeight
+ };
+ N.mpan = {
+ x: (0 - N.pan.x) / N.zoom,
+ y: (0 - N.pan.y) / N.zoom
+ }
+ }
+ f[n.DRAG] = !1, f[n.NODE] = !1;
+ var A = p.contexts[n.NODE],
+ I = c.textureCache.texture,
+ N = c.textureCache.viewport;
+ L = c.textureCache.bb, A.setTransform(1, 0, 0, 1, 0, 0), g ? r(A, 0, 0, N.width, N.height) : A.clearRect(0, 0, N.width, N.height);
+ var z = E["outside-texture-bg-color"].value,
+ R = E["outside-texture-bg-opacity"].value;
+ c.fillStyle(A, z[0], z[1], z[2], R), A.fillRect(0, 0, N.width, N.height);
+ var T = h.zoom();
+ i(A, !1), A.clearRect(N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d), A.drawImage(I, N.mpan.x, N.mpan.y, N.width / N.zoom / d, N.height / N.zoom / d)
+ } else c.textureOnViewport && !a && (c.textureCache = null);
+ var j = c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming || c.hoverData.draggingEles,
+ F = c.hideEdgesOnViewport && j,
+ q = c.hideLabelsOnViewport && j;
+ if (f[n.DRAG] || f[n.NODE] || o || s) {
+ F || c.findEdgeControlPoints(_);
+ for (var V = c.getCachedZSortedEles(), X = h.extent(), H = 0; H < V.length; H++) {
+ var Y, $ = V[H],
+ L = a ? null : $.boundingBox(),
+ W = a ? !0 : e.math.boundingBoxesIntersect(X, L);
+ W && (Y = $._private.rscratch.inDragLayer ? B.drag : B.nondrag, Y.eles.push($))
+ }
+ }
+ var U = [];
+ if (U[n.NODE] = !f[n.NODE] && g && !c.clearedForMotionBlur[n.NODE] || c.clearingMotionBlur, U[n.NODE] && (c.clearedForMotionBlur[n.NODE] = !0), U[n.DRAG] = !f[n.DRAG] && g && !c.clearedForMotionBlur[n.DRAG] || c.clearingMotionBlur, U[n.DRAG] && (c.clearedForMotionBlur[n.DRAG] = !0), f[n.NODE] || o || s || U[n.NODE]) {
+ var Z = g && !U[n.NODE] && 1 !== y,
+ A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_NODE] : p.contexts[n.NODE]),
+ G = g && !Z ? "motionBlur" : void 0;
+ i(A, G), b(B.nondrag, A), o || g || (f[n.NODE] = !1)
+ }
+ if (!s && (f[n.DRAG] || o || U[n.DRAG])) {
+ var Z = g && !U[n.DRAG] && 1 !== y,
+ A = a || (Z ? c.data.bufferContexts[n.MOTIONBLUR_BUFFER_DRAG] : p.contexts[n.DRAG]);
+ i(A, g && !Z ? "motionBlur" : void 0), b(B.drag, A), o || g || (f[n.DRAG] = !1)
+ }
+ if (c.showFps || !s && f[n.SELECT_BOX] && !o) {
+ var A = a || p.contexts[n.SELECT_BOX];
+ if (i(A), 1 == p.select[4] && (c.hoverData.selecting || c.touchData.selecting)) {
+ var T = p.cy.zoom(),
+ K = E["selection-box-border-width"].value / T;
+ A.lineWidth = K, A.fillStyle = "rgba(" + E["selection-box-color"].value[0] + "," + E["selection-box-color"].value[1] + "," + E["selection-box-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.fillRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1]), K > 0 && (A.strokeStyle = "rgba(" + E["selection-box-border-color"].value[0] + "," + E["selection-box-border-color"].value[1] + "," + E["selection-box-border-color"].value[2] + "," + E["selection-box-opacity"].value + ")", A.strokeRect(p.select[0], p.select[1], p.select[2] - p.select[0], p.select[3] - p.select[1]))
+ }
+ if (p.bgActivePosistion && !c.hoverData.selecting) {
+ var T = p.cy.zoom(),
+ J = p.bgActivePosistion;
+ A.fillStyle = "rgba(" + E["active-bg-color"].value[0] + "," + E["active-bg-color"].value[1] + "," + E["active-bg-color"].value[2] + "," + E["active-bg-opacity"].value + ")", A.beginPath(), A.arc(J.x, J.y, E["active-bg-size"].pxValue / T, 0, 2 * Math.PI), A.fill()
+ }
+ var Q = c.averageRedrawTime;
+ if (c.showFps && Q) {
+ Q = Math.round(Q);
+ var ee = Math.round(1e3 / Q);
+ A.setTransform(1, 0, 0, 1, 0, 0), A.fillStyle = "rgba(255, 0, 0, 0.75)", A.strokeStyle = "rgba(255, 0, 0, 0.75)", A.lineWidth = 1, A.fillText("1 frame = " + Q + " ms = " + ee + " fps", 0, 20);
+ var te = 60;
+ A.strokeRect(0, 30, 250, 20), A.fillRect(0, 30, 250 * Math.min(ee / te, 1), 20)
+ }
+ o || (f[n.SELECT_BOX] = !1)
+ }
+ if (g && 1 !== y) {
+ var ne = p.contexts[n.NODE],
+ re = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_NODE],
+ ie = p.contexts[n.DRAG],
+ ae = c.data.bufferCanvases[n.MOTIONBLUR_BUFFER_DRAG],
+ oe = function(e, t, n) {
+ e.setTransform(1, 0, 0, 1, 0, 0), n || !w ? e.clearRect(0, 0, c.canvasWidth, c.canvasHeight) : r(e, 0, 0, c.canvasWidth, c.canvasHeight);
+ var i = y;
+ e.drawImage(t, 0, 0, c.canvasWidth * i, c.canvasHeight * i, 0, 0, c.canvasWidth, c.canvasHeight)
+ };
+ (f[n.NODE] || U[n.NODE]) && (oe(ne, re, U[n.NODE]), f[n.NODE] = !1), (f[n.DRAG] || U[n.DRAG]) && (oe(ie, ae, U[n.DRAG]), f[n.DRAG] = !1)
+ }
+ var se = Date.now();
+ void 0 === c.averageRedrawTime && (c.averageRedrawTime = se - D), void 0 === c.redrawCount && (c.redrawCount = 0), c.redrawCount++, void 0 === c.redrawTotalTime && (c.redrawTotalTime = 0), c.redrawTotalTime += se - D, c.lastRedrawTime = se - D, c.averageRedrawTime = c.averageRedrawTime / 2 + (se - D) / 2, c.currentlyDrawing = !1, c.prevViewport = N, c.clearingMotionBlur && (c.clearingMotionBlur = !1, c.motionBlurCleared = !0, c.motionBlur = !0), g && (c.motionBlurTimeout = setTimeout(function() {
+ c.motionBlurTimeout = null, c.clearedForMotionBlur[n.NODE] = !1, c.clearedForMotionBlur[n.DRAG] = !1, c.motionBlur = !1, c.clearingMotionBlur = !v, c.mbFrames = 0, f[n.NODE] = !0, f[n.DRAG] = !0, c.redraw()
+ }, t.motionBlurDelay)), c.drawingImage = !1
+ }
+ r = r || {};
+ var a = r.forcedContext,
+ o = r.drawAllLayers,
+ s = r.drawOnlyNodeLayer,
+ l = r.forcedZoom,
+ u = r.forcedPan,
+ c = this,
+ d = void 0 === r.forcedPxRatio ? this.getPixelRatio() : r.forcedPxRatio,
+ h = c.data.cy,
+ p = c.data,
+ f = p.canvasNeedsRedraw,
+ v = c.textureOnViewport && !a && (c.pinching || c.hoverData.dragging || c.swipePanning || c.data.wheelZooming),
+ g = void 0 !== r.motionBlur ? r.motionBlur : c.motionBlur,
+ y = c.motionBlurPxRatio,
+ m = h.hasCompoundNodes(),
+ x = c.hoverData.draggingEles,
+ b = c.hoverData.selecting || c.touchData.selecting ? !0 : !1;
+ g = g && !a && c.motionBlurEnabled && !b;
+ var w = g;
+ !a && c.motionBlurTimeout && clearTimeout(c.motionBlurTimeout), !a && this.redrawTimeout && clearTimeout(this.redrawTimeout), this.redrawTimeout = null, void 0 === this.averageRedrawTime && (this.averageRedrawTime = 0);
+ var _ = t.minRedrawLimit,
+ E = t.maxRedrawLimit,
+ T = this.averageRedrawTime;
+ T = _ > T ? _ : T, T = E > T ? T : E, void 0 === this.lastDrawTime && (this.lastDrawTime = 0);
+ var S = Date.now(),
+ C = S - this.lastDrawTime,
+ k = C >= T;
+ if (!a && !c.clearingMotionBlur) {
+ if (!k || this.currentlyDrawing) return void(this.redrawTimeout = setTimeout(function() {
+ c.redraw()
+ }, T));
+ this.lastDrawTime = S, this.currentlyDrawing = !0
+ }
+ g && (null == c.mbFrames && (c.mbFrames = 0), c.drawingImage || c.mbFrames++, c.mbFrames < 3 && (w = !1), c.mbFrames > c.minMbLowQualFrames && (c.motionBlurPxRatio = c.mbPxRBlurry)), c.clearingMotionBlur && (c.motionBlurPxRatio = 1);
+ var D = Date.now();
+ a ? i() : e.util.requestAnimationFrame(i), a || c.initrender || (c.initrender = !0, h.trigger("initrender")), a || h.triggerOnRender()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.drawPolygonPath = function(e, t, n, r, i, a) {
+ var o = r / 2,
+ s = i / 2;
+ e.beginPath && e.beginPath(), e.moveTo(t + o * a[0], n + s * a[1]);
+ for (var l = 1; l < a.length / 2; l++) e.lineTo(t + o * a[2 * l], n + s * a[2 * l + 1]);
+ e.closePath()
+ }, n.drawPolygon = function(e, t, n, r, i, a) {
+ this.drawPolygonPath(e, t, n, r, i, a), e.fill()
+ }, n.drawRoundRectanglePath = function(t, n, r, i, a, o) {
+ var s = i / 2,
+ l = a / 2,
+ u = e.math.getRoundRectangleRadius(i, a);
+ t.beginPath && t.beginPath(), t.moveTo(n, r - l), t.arcTo(n + s, r - l, n + s, r, u), t.arcTo(n + s, r + l, n, r + l, u), t.arcTo(n - s, r + l, n - s, r, u), t.arcTo(n - s, r - l, n, r - l, u), t.lineTo(n, r - l), t.closePath()
+ }, n.drawRoundRectangle = function(e, t, n, r, i, a) {
+ this.drawRoundRectanglePath(e, t, n, r, i, a), e.fill()
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t.prototype;
+ n.createBuffer = function(e, t) {
+ var n = document.createElement("canvas");
+ return n.width = e, n.height = t, [n, n.getContext("2d")]
+ }, n.bufferCanvasImage = function(t) {
+ var n = this.data,
+ r = n.cy,
+ i = r.elements().boundingBox(),
+ a = t.full ? Math.ceil(i.w) : this.data.container.clientWidth,
+ o = t.full ? Math.ceil(i.h) : this.data.container.clientHeight,
+ s = 1;
+ if (void 0 !== t.scale) a *= t.scale, o *= t.scale, s = t.scale;
+ else if (e.is.number(t.maxWidth) || e.is.number(t.maxHeight)) {
+ var l = 1 / 0,
+ u = 1 / 0;
+ e.is.number(t.maxWidth) && (l = s * t.maxWidth / a), e.is.number(t.maxHeight) && (u = s * t.maxHeight / o), s = Math.min(l, u), a *= s, o *= s
+ }
+ var c = document.createElement("canvas");
+ c.width = a, c.height = o, c.style.width = a + "px", c.style.height = o + "px";
+ var d = c.getContext("2d");
+ if (a > 0 && o > 0)
+ if (d.clearRect(0, 0, a, o), t.bg && (d.fillStyle = t.bg, d.rect(0, 0, a, o), d.fill()), d.globalCompositeOperation = "source-over", t.full) this.redraw({
+ forcedContext: d,
+ drawAllLayers: !0,
+ forcedZoom: s,
+ forcedPan: {
+ x: -i.x1 * s,
+ y: -i.y1 * s
+ },
+ forcedPxRatio: 1
+ });
+ else {
+ var h = r.pan(),
+ p = {
+ x: h.x * s,
+ y: h.y * s
+ },
+ f = r.zoom() * s;
+ this.redraw({
+ forcedContext: d,
+ drawAllLayers: !0,
+ forcedZoom: f,
+ forcedPan: p,
+ forcedPxRatio: 1
+ })
+ }
+ return c
+ }, n.png = function(e) {
+ return this.bufferCanvasImage(e).toDataURL("image/png")
+ }, n.jpg = function(e) {
+ return this.bufferCanvasImage(e).toDataURL("image/jpeg")
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+ var t = e("renderer", "canvas"),
+ n = t,
+ r = n.prototype;
+ r.registerBinding = function(e, t, n, r) {
+ this.bindings.push({
+ target: e,
+ event: t,
+ handler: n,
+ useCapture: r
+ }), e.addEventListener(t, n, r)
+ }, r.nodeIsDraggable = function(e) {
+ return 0 !== e._private.style.opacity.value && "visible" == e._private.style.visibility.value && "element" == e._private.style.display.value && !e.locked() && e.grabbable() ? !0 : !1
+ }, r.load = function() {
+ var t = this,
+ r = function(e) {
+ var n;
+ if (e.addToList && t.data.cy.hasCompoundNodes()) {
+ if (!e.addToList.hasId) {
+ e.addToList.hasId = {};
+ for (var r = 0; r < e.addToList.length; r++) {
+ var i = e.addToList[r];
+ e.addToList.hasId[i.id()] = !0
+ }
+ }
+ n = e.addToList.hasId
+ }
+ return n || {}
+ },
+ i = function(e, t) {
+ if (e._private.cy.hasCompoundNodes() && (null != t.inDragLayer || null != t.addToList))
+ for (var n = r(t), i = e.descendants(), a = 0; a < i.size(); a++) {
+ var o = i[a],
+ s = o._private;
+ t.inDragLayer && (s.rscratch.inDragLayer = !0), t.addToList && !n[o.id()] && (t.addToList.push(o), n[o.id()] = !0, s.grabbed = !0);
+ for (var l = s.edges, u = 0; t.inDragLayer && u < l.length; u++) l[u]._private.rscratch.inDragLayer = !0
+ }
+ },
+ a = function(e, t) {
+ var n = e._private,
+ a = r(t);
+ t.inDragLayer && (n.rscratch.inDragLayer = !0), t.addToList && !a[e.id()] && (t.addToList.push(e), a[e.id()] = !0, n.grabbed = !0);
+ for (var o = n.edges, l = 0; t.inDragLayer && l < o.length; l++) o[l]._private.rscratch.inDragLayer = !0;
+ i(e, t), s(e, {
+ inDragLayer: t.inDragLayer
+ })
+ },
+ o = function(e) {
+ if (e)
+ for (var t = 0; t < e.length; t++) {
+ var n = e[t]._private;
+ if ("nodes" === n.group) {
+ n.rscratch.inDragLayer = !1, n.grabbed = !1;
+ for (var r = n.edges, i = 0; i < r.length; i++) r[i]._private.rscratch.inDragLayer = !1;
+ s(e[t], {
+ inDragLayer: !1
+ })
+ } else "edges" === n.group && (n.rscratch.inDragLayer = !1)
+ }
+ },
+ s = function(e, t) {
+ if (null != t.inDragLayer || null != t.addToList) {
+ var n = e;
+ if (e._private.cy.hasCompoundNodes()) {
+ for (; n.parent().nonempty();) n = n.parent()[0];
+ if (n != e) {
+ for (var i = n.descendants().merge(n).unmerge(e).unmerge(e.descendants()), a = i.connectedEdges(), o = r(t), s = 0; s < i.size(); s++) void 0 !== t.inDragLayer && (i[s]._private.rscratch.inDragLayer = t.inDragLayer), t.addToList && !o[i[s].id()] && (t.addToList.push(i[s]), o[i[s].id()] = !0, i[s]._private.grabbed = !0);
+ for (var l = 0; void 0 !== t.inDragLayer && l < a.length; l++) a[l]._private.rscratch.inDragLayer = t.inDragLayer
+ }
+ }
+ }
+ };
+ "undefined" != typeof MutationObserver ? (t.removeObserver = new MutationObserver(function(e) {
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n],
+ i = r.removedNodes;
+ if (i)
+ for (var a = 0; a < i.length; a++) {
+ var o = i[a];
+ if (o === t.data.container) {
+ t.destroy();
+ break
+ }
+ }
+ }
+ }), t.removeObserver.observe(t.data.container.parentNode, {
+ childList: !0
+ })) : t.registerBinding(t.data.container, "DOMNodeRemoved", function(e) {
+ t.destroy()
+ }), t.registerBinding(window, "resize", e.util.debounce(function(e) {
+ t.invalidateContainerClientCoordsCache(), t.matchCanvasSize(t.data.container), t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw()
+ }, 100));
+ for (var l = function(e) {
+ t.registerBinding(e, "scroll", function(e) {
+ t.invalidateContainerClientCoordsCache()
+ })
+ }, u = t.data.cy.container(); l(u), u.parentNode;) u = u.parentNode;
+ t.registerBinding(t.data.container, "contextmenu", function(e) {
+ e.preventDefault()
+ });
+ var c = function() {
+ return 0 !== t.data.select[4]
+ };
+ t.registerBinding(t.data.container, "mousedown", function(r) {
+ r.preventDefault(), t.hoverData.capture = !0, t.hoverData.which = r.which;
+ var i = t.data.cy,
+ o = t.projectIntoViewport(r.clientX, r.clientY),
+ s = t.data.select,
+ l = t.findNearestElement(o[0], o[1], !0, !1),
+ u = t.dragData.possibleDragElements;
+ t.hoverData.mdownPos = o;
+ var c = t.data.canvasNeedsRedraw,
+ d = function() {
+ t.hoverData.tapholdCancelled = !1, clearTimeout(t.hoverData.tapholdTimeout), t.hoverData.tapholdTimeout = setTimeout(function() {
+ if (!t.hoverData.tapholdCancelled) {
+ var n = t.hoverData.down;
+ n ? n.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })) : i.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }))
+ }
+ }, t.tapholdDuration)
+ };
+ if (3 == r.which) {
+ t.hoverData.cxtStarted = !0;
+ var h = new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ });
+ l ? (l.activate(), l.trigger(h), t.hoverData.down = l) : i.trigger(h), t.hoverData.downTime = (new Date).getTime(), t.hoverData.cxtDragged = !1
+ } else if (1 == r.which) {
+ if (l && l.activate(), null != l) {
+ if (t.nodeIsDraggable(l)) {
+ var p = new e.Event(r, {
+ type: "grab",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ });
+ if (l.isNode() && !l.selected()) u = t.dragData.possibleDragElements = [], a(l, {
+ addToList: u
+ }), l.trigger(p);
+ else if (l.isNode() && l.selected()) {
+ u = t.dragData.possibleDragElements = [];
+ for (var f = i.$(function() {
+ return this.isNode() && this.selected()
+ }), v = 0; v < f.length; v++) t.nodeIsDraggable(f[v]) && a(f[v], {
+ addToList: u
+ });
+ l.trigger(p)
+ }
+ c[n.NODE] = !0, c[n.DRAG] = !0
+ }
+ l.trigger(new e.Event(r, {
+ type: "mousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }))
+ } else null == l && i.trigger(new e.Event(r, {
+ type: "mousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: o[0],
+ y: o[1]
+ }
+ }));
+ if (t.hoverData.down = l, t.hoverData.downTime = (new Date).getTime(), null == l || l.isEdge()) {
+ s[4] = 1;
+ var g = Math.max(0, n.panOrBoxSelectDelay - (+new Date - t.hoverData.downTime));
+ clearTimeout(t.bgActiveTimeout), i.boxSelectionEnabled() || l && l.isEdge() ? t.bgActiveTimeout = setTimeout(function() {
+ l && l.unactivate(), t.data.bgActivePosistion = {
+ x: o[0],
+ y: o[1]
+ }, t.hoverData.dragging = !0, c[n.SELECT_BOX] = !0, t.redraw()
+ }, g) : (t.data.bgActivePosistion = {
+ x: o[0],
+ y: o[1]
+ }, c[n.SELECT_BOX] = !0, t.redraw())
+ }
+ d()
+ }
+ s[0] = s[2] = o[0], s[1] = s[3] = o[1]
+ }, !1), t.registerBinding(window, "mousemove", e.util.throttle(function(r) {
+ var i = !1,
+ o = t.hoverData.capture;
+ if (!o) {
+ var s = t.findContainerClientCoords();
+ if (!(r.clientX > s[0] && r.clientX < s[0] + t.canvasWidth && r.clientY > s[1] && r.clientY < s[1] + t.canvasHeight)) return;
+ for (var l = t.data.container, u = r.target, c = u.parentNode, d = !1; c;) {
+ if (c === l) {
+ d = !0;
+ break
+ }
+ c = c.parentNode
+ }
+ if (!d) return
+ }
+ var h = t.data.cy,
+ p = h.zoom(),
+ f = t.projectIntoViewport(r.clientX, r.clientY),
+ v = t.data.select,
+ g = t.data.canvasNeedsRedraw,
+ y = null;
+ t.hoverData.draggingEles || (y = t.findNearestElement(f[0], f[1], !0, !1));
+ var m = t.hoverData.last,
+ x = t.hoverData.down,
+ b = [f[0] - v[2], f[1] - v[3]],
+ w = t.dragData.possibleDragElements,
+ _ = v[2] - v[0],
+ E = _ * _,
+ T = v[3] - v[1],
+ S = T * T,
+ C = E + S,
+ k = C * p * p;
+ t.hoverData.tapholdCancelled = !0;
+ var D = function() {
+ var e = t.hoverData.dragDelta = t.hoverData.dragDelta || [];
+ 0 === e.length ? (e.push(b[0]), e.push(b[1])) : (e[0] += b[0], e[1] += b[1])
+ };
+ if (i = !0, null != y ? y.trigger(new e.Event(r, {
+ type: "mousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })) : null == y && h.trigger(new e.Event(r, {
+ type: "mousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), 3 === t.hoverData.which) {
+ var N = new e.Event(r, {
+ type: "cxtdrag",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ });
+ x ? x.trigger(N) : h.trigger(N), t.hoverData.cxtDragged = !0, t.hoverData.cxtOver && y === t.hoverData.cxtOver || (t.hoverData.cxtOver && t.hoverData.cxtOver.trigger(new e.Event(r, {
+ type: "cxtdragout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), t.hoverData.cxtOver = y, y && y.trigger(new e.Event(r, {
+ type: "cxtdragover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })))
+ } else if (t.hoverData.dragging) {
+ if (i = !0, h.panningEnabled() && h.userPanningEnabled()) {
+ var P;
+ if (t.hoverData.justStartedPan) {
+ var M = t.hoverData.mdownPos;
+ P = {
+ x: (f[0] - M[0]) * p,
+ y: (f[1] - M[1]) * p
+ }, t.hoverData.justStartedPan = !1
+ } else P = {
+ x: b[0] * p,
+ y: b[1] * p
+ };
+ h.panBy(P), t.hoverData.dragged = !0
+ }
+ f = t.projectIntoViewport(r.clientX, r.clientY)
+ } else if (1 == v[4] && (null == x || x.isEdge()) && (!h.boxSelectionEnabled() || +new Date - t.hoverData.downTime >= n.panOrBoxSelectDelay) && !t.hoverData.selecting && k >= t.desktopTapThreshold2 && h.panningEnabled() && h.userPanningEnabled()) t.hoverData.dragging = !0, t.hoverData.selecting = !1, t.hoverData.justStartedPan = !0, v[4] = 0;
+ else {
+ if (h.boxSelectionEnabled() && !t.hoverData.dragging && Math.pow(v[2] - v[0], 2) + Math.pow(v[3] - v[1], 2) > 7 && v[4] && (clearTimeout(t.bgActiveTimeout), t.data.bgActivePosistion = void 0, t.hoverData.selecting = !0, g[n.SELECT_BOX] = !0, t.redraw()), x && x.isEdge() && x.active() && x.unactivate(), y != m && (m && (m.trigger(new e.Event(r, {
+ type: "mouseout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), m.trigger(new e.Event(r, {
+ type: "tapdragout",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ }))), y && (y.trigger(new e.Event(r, {
+ type: "mouseover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ })), y.trigger(new e.Event(r, {
+ type: "tapdragover",
+ cyPosition: {
+ x: f[0],
+ y: f[1]
+ }
+ }))), t.hoverData.last = y), x && x.isNode() && t.nodeIsDraggable(x))
+ if (k >= t.desktopTapThreshold2) {
+ var B = !t.dragData.didDrag;
+ B && (g[n.NODE] = !0), t.dragData.didDrag = !0;
+ for (var L = [], O = 0; O < w.length; O++) {
+ var A = w[O];
+ if (t.hoverData.draggingEles || a(A, {
+ inDragLayer: !0
+ }), A.isNode() && t.nodeIsDraggable(A) && A.grabbed()) {
+ var I = A._private.position;
+ if (L.push(A), e.is.number(b[0]) && e.is.number(b[1]) && (I.x += b[0], I.y += b[1], B)) {
+ var z = t.hoverData.dragDelta;
+ e.is.number(z[0]) && e.is.number(z[1]) && (I.x += z[0], I.y += z[1])
+ }
+ }
+ }
+ t.hoverData.draggingEles = !0;
+ var R = new e.Collection(h, L);
+ R.updateCompoundBounds(), R.trigger("position drag"), g[n.DRAG] = !0, t.redraw()
+ } else D();
+ i = !0
+ }
+ return v[2] = f[0], v[3] = f[1], i ? (r.stopPropagation && r.stopPropagation(), r.preventDefault && r.preventDefault(), !1) : void 0
+ }, 1e3 / 30, {
+ trailing: !0
+ }), !1), t.registerBinding(window, "mouseup", function(r) {
+ var i = t.hoverData.capture;
+ if (i) {
+ t.hoverData.capture = !1;
+ var a = t.data.cy,
+ s = t.projectIntoViewport(r.clientX, r.clientY),
+ l = t.data.select,
+ u = t.findNearestElement(s[0], s[1], !0, !1),
+ c = t.dragData.possibleDragElements,
+ d = t.hoverData.down,
+ h = r.shiftKey,
+ p = t.data.canvasNeedsRedraw;
+ if (t.data.bgActivePosistion && (p[n.SELECT_BOX] = !0, t.redraw()), t.hoverData.tapholdCancelled = !0, t.data.bgActivePosistion = void 0, clearTimeout(t.bgActiveTimeout), d && d.unactivate(), 3 === t.hoverData.which) {
+ var f = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ });
+ if (d ? d.trigger(f) : a.trigger(f), !t.hoverData.cxtDragged) {
+ var v = new e.Event(r, {
+ type: "cxttap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ });
+ d ? d.trigger(v) : a.trigger(v)
+ }
+ t.hoverData.cxtDragged = !1, t.hoverData.which = null
+ } else {
+ if (null != d || t.dragData.didDrag || t.hoverData.dragged || (a.$(function() {
+ return this.selected()
+ }).unselect(), c.length > 0 && (p[n.NODE] = !0), t.dragData.possibleDragElements = c = []), null != u ? u.trigger(new e.Event(r, {
+ type: "mouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })) : null == u && a.trigger(new e.Event(r, {
+ type: "mouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })), t.dragData.didDrag || t.hoverData.dragged || (null != u ? u.trigger(new e.Event(r, {
+ type: "click",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })) : null == u && a.trigger(new e.Event(r, {
+ type: "click",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: s[0],
+ y: s[1]
+ }
+ }))), u != d || t.dragData.didDrag || null != u && u._private.selectable && (t.hoverData.dragging || ("additive" === a.selectionType() || h ? u.selected() ? u.unselect() : u.select() : h || (a.$(":selected").unmerge(u).unselect(), u.select())), p[n.NODE] = !0), t.hoverData.selecting && a.boxSelectionEnabled() && Math.pow(l[2] - l[0], 2) + Math.pow(l[3] - l[1], 2) > 7 && l[4]) {
+ var g = [],
+ y = t.getAllInBox(l[0], l[1], l[2], l[3]);
+ p[n.SELECT_BOX] = !0, y.length > 0 && (p[n.NODE] = !0);
+ for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]);
+ var x = new e.Collection(a, g);
+ "additive" === a.selectionType() ? x.select() : (h || a.$(":selected").unmerge(x).unselect(), x.select()), t.redraw()
+ }
+ t.hoverData.dragging && (t.hoverData.dragging = !1, p[n.SELECT_BOX] = !0, p[n.NODE] = !0, t.redraw()), l[4] || (p[n.DRAG] = !0, p[n.NODE] = !0, o(c), d && d.trigger("free"))
+ }
+ l[4] = 0, t.hoverData.down = null, t.hoverData.cxtStarted = !1, t.hoverData.draggingEles = !1, t.hoverData.selecting = !1, t.dragData.didDrag = !1, t.hoverData.dragged = !1, t.hoverData.dragDelta = []
+ }
+ }, !1);
+ var d = function(e) {
+ if (!t.scrollingPage) {
+ var r = t.data.cy,
+ i = t.projectIntoViewport(e.clientX, e.clientY),
+ a = [i[0] * r.zoom() + r.pan().x, i[1] * r.zoom() + r.pan().y];
+ if (t.hoverData.draggingEles || t.hoverData.dragging || t.hoverData.cxtStarted || c()) return void e.preventDefault();
+ if (r.panningEnabled() && r.userPanningEnabled() && r.zoomingEnabled() && r.userZoomingEnabled()) {
+ e.preventDefault(), t.data.wheelZooming = !0, clearTimeout(t.data.wheelTimeout), t.data.wheelTimeout = setTimeout(function() {
+ t.data.wheelZooming = !1, t.data.canvasNeedsRedraw[n.NODE] = !0, t.redraw()
+ }, 150);
+ var o = e.deltaY / -250 || e.wheelDeltaY / 1e3 || e.wheelDelta / 1e3;
+ o *= t.wheelSensitivity;
+ var s = 1 === e.deltaMode;
+ s && (o *= 33), r.zoom({
+ level: r.zoom() * Math.pow(10, o),
+ renderedPosition: {
+ x: a[0],
+ y: a[1]
+ }
+ })
+ }
+ }
+ };
+ t.registerBinding(t.data.container, "wheel", d, !0), t.registerBinding(window, "scroll", function(e) {
+ t.scrollingPage = !0, clearTimeout(t.scrollingPageTimeout), t.scrollingPageTimeout = setTimeout(function() {
+ t.scrollingPage = !1
+ }, 250)
+ }, !0), t.registerBinding(t.data.container, "mouseout", function(n) {
+ var r = t.projectIntoViewport(n.clientX, n.clientY);
+ t.data.cy.trigger(new e.Event(n, {
+ type: "mouseout",
+ cyPosition: {
+ x: r[0],
+ y: r[1]
+ }
+ }))
+ }, !1), t.registerBinding(t.data.container, "mouseover", function(n) {
+ var r = t.projectIntoViewport(n.clientX, n.clientY);
+ t.data.cy.trigger(new e.Event(n, {
+ type: "mouseover",
+ cyPosition: {
+ x: r[0],
+ y: r[1]
+ }
+ }))
+ }, !1);
+ var h, p, f, v, g, y, m, x, b, w, _, E, T, S = function(e, t, n, r) {
+ return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t))
+ },
+ C = function(e, t, n, r) {
+ return (n - e) * (n - e) + (r - t) * (r - t)
+ };
+ t.registerBinding(t.data.container, "touchstart", function(r) {
+ clearTimeout(this.threeFingerSelectTimeout), r.target !== t.data.link && r.preventDefault(), t.touchData.capture = !0, t.data.bgActivePosistion = void 0;
+ var i = t.data.cy,
+ o = t.getCachedNodes(),
+ s = t.getCachedEdges(),
+ l = t.touchData.now,
+ u = t.touchData.earlier,
+ c = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var d = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = d[0], l[1] = d[1]
+ }
+ if (r.touches[1]) {
+ var d = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = d[0], l[3] = d[1]
+ }
+ if (r.touches[2]) {
+ var d = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = d[0], l[5] = d[1]
+ }
+ if (r.touches[1]) {
+ var k = function(e) {
+ for (var t = 0; t < e.length; t++) e[t]._private.grabbed = !1, e[t]._private.rscratch.inDragLayer = !1, e[t].active() && e[t].unactivate()
+ };
+ k(o), k(s);
+ var D = t.findContainerClientCoords();
+ b = D[0], w = D[1], _ = D[2], E = D[3], h = r.touches[0].clientX - b, p = r.touches[0].clientY - w, f = r.touches[1].clientX - b, v = r.touches[1].clientY - w, T = h >= 0 && _ >= h && f >= 0 && _ >= f && p >= 0 && E >= p && v >= 0 && E >= v;
+ var N = i.pan(),
+ P = i.zoom();
+ g = S(h, p, f, v), y = C(h, p, f, v), m = [(h + f) / 2, (p + v) / 2], x = [(m[0] - N.x) / P, (m[1] - N.y) / P];
+ var M = 200,
+ B = M * M;
+ if (B > y && !r.touches[2]) {
+ var L = t.findNearestElement(l[0], l[1], !0, !0),
+ O = t.findNearestElement(l[2], l[3], !0, !0);
+ return L && L.isNode() ? (L.activate().trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = L) : O && O.isNode() ? (O.activate().trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = O) : (i.trigger(new e.Event(r, {
+ type: "cxttapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.start = null), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !0, t.touchData.cxtDragged = !1, t.data.bgActivePosistion = void 0, void t.redraw()
+ }
+ }
+ if (r.touches[2]);
+ else if (r.touches[1]);
+ else if (r.touches[0]) {
+ var A = t.findNearestElement(l[0], l[1], !0, !0);
+ if (null != A) {
+ if (A.activate(), t.touchData.start = A, A.isNode() && t.nodeIsDraggable(A)) {
+ var I = t.dragData.touchDragEles = [];
+ if (c[n.NODE] = !0, c[n.DRAG] = !0, A.selected())
+ for (var z = i.$(function() {
+ return this.isNode() && this.selected()
+ }), R = 0; R < z.length; R++) {
+ var j = z[R];
+ t.nodeIsDraggable(j) && a(j, {
+ addToList: I
+ })
+ } else a(A, {
+ addToList: I
+ });
+ A.trigger(new e.Event(r, {
+ type: "grab",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))
+ }
+ A.trigger(new e.Event(r, {
+ type: "touchstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousdown",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))
+ }
+ null == A && (i.trigger(new e.Event(r, {
+ type: "touchstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapstart",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmousedown",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.data.bgActivePosistion = {
+ x: d[0],
+ y: d[1]
+ }, c[n.SELECT_BOX] = !0, t.redraw());
+ for (var F = 0; F < l.length; F++) u[F] = l[F], t.touchData.startPosition[F] = l[F];
+ t.touchData.singleTouchMoved = !1, t.touchData.singleTouchStartTime = +new Date, clearTimeout(t.touchData.tapholdTimeout), t.touchData.tapholdTimeout = setTimeout(function() {
+ t.touchData.singleTouchMoved !== !1 || t.pinching || (t.touchData.start ? t.touchData.start.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })) : (t.data.cy.trigger(new e.Event(r, {
+ type: "taphold",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), i.$(":selected").unselect()))
+ }, t.tapholdDuration)
+ }
+ }, !1), t.registerBinding(window, "touchmove", e.util.throttle(function(r) {
+ var i = t.data.select,
+ o = t.touchData.capture;
+ o && r.preventDefault();
+ var s = t.data.cy,
+ l = t.touchData.now,
+ u = t.touchData.earlier,
+ c = s.zoom(),
+ d = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ if (r.touches[1]) {
+ var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = m[0], l[3] = m[1]
+ }
+ if (r.touches[2]) {
+ var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = m[0], l[5] = m[1]
+ }
+ for (var _ = [], E = 0; E < l.length; E++) _[E] = l[E] - u[E];
+ var k = t.touchData.startPosition,
+ D = l[0] - k[0],
+ N = D * D,
+ P = l[1] - k[1],
+ M = P * P,
+ B = N + M,
+ L = B * c * c;
+ if (o && t.touchData.cxt) {
+ var O = r.touches[0].clientX - b,
+ A = r.touches[0].clientY - w,
+ I = r.touches[1].clientX - b,
+ z = r.touches[1].clientY - w,
+ R = C(O, A, I, z),
+ j = R / y,
+ F = 150,
+ q = F * F,
+ V = 1.5,
+ X = V * V;
+ if (j >= X || R >= q) {
+ t.touchData.cxt = !1, t.touchData.start && (t.touchData.start.unactivate(), t.touchData.start = null), t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0;
+ var H = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ });
+ t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H)
+ }
+ }
+ if (o && t.touchData.cxt) {
+ var H = new e.Event(r, {
+ type: "cxtdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ });
+ t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0, t.touchData.start ? t.touchData.start.trigger(H) : s.trigger(H), t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxtDragged = !0;
+ var Y = t.findNearestElement(l[0], l[1], !0, !0);
+ t.touchData.cxtOver && Y === t.touchData.cxtOver || (t.touchData.cxtOver && t.touchData.cxtOver.trigger(new e.Event(r, {
+ type: "cxtdragout",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), t.touchData.cxtOver = Y, Y && Y.trigger(new e.Event(r, {
+ type: "cxtdragover",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })))
+ } else if (o && r.touches[2] && s.boxSelectionEnabled()) t.data.bgActivePosistion = void 0, clearTimeout(this.threeFingerSelectTimeout), this.lastThreeTouch = +new Date, t.touchData.selecting = !0, d[n.SELECT_BOX] = !0, i && 0 !== i.length && void 0 !== i[0] ? (i[2] = (l[0] + l[2] + l[4]) / 3, i[3] = (l[1] + l[3] + l[5]) / 3) : (i[0] = (l[0] + l[2] + l[4]) / 3, i[1] = (l[1] + l[3] + l[5]) / 3, i[2] = (l[0] + l[2] + l[4]) / 3 + 1, i[3] = (l[1] + l[3] + l[5]) / 3 + 1), i[4] = 1, t.touchData.selecting = !0, t.redraw();
+ else if (o && r.touches[1] && s.zoomingEnabled() && s.panningEnabled() && s.userZoomingEnabled() && s.userPanningEnabled()) {
+ t.data.bgActivePosistion = void 0, d[n.SELECT_BOX] = !0;
+ var $ = t.dragData.touchDragEles;
+ if ($) {
+ d[n.DRAG] = !0;
+ for (var W = 0; W < $.length; W++) $[W]._private.grabbed = !1, $[W]._private.rscratch.inDragLayer = !1
+ }
+ var O = r.touches[0].clientX - b,
+ A = r.touches[0].clientY - w,
+ I = r.touches[1].clientX - b,
+ z = r.touches[1].clientY - w,
+ U = S(O, A, I, z),
+ Z = U / g;
+ if (1 != Z && T) {
+ var G = O - h,
+ K = A - p,
+ J = I - f,
+ Q = z - v,
+ ee = (G + J) / 2,
+ te = (K + Q) / 2,
+ ne = s.zoom(),
+ re = ne * Z,
+ ie = s.pan(),
+ ae = x[0] * ne + ie.x,
+ oe = x[1] * ne + ie.y,
+ se = {
+ x: -re / ne * (ae - ie.x - ee) + ae,
+ y: -re / ne * (oe - ie.y - te) + oe
+ };
+ if (t.touchData.start) {
+ var $ = t.dragData.touchDragEles;
+ if ($)
+ for (var W = 0; W < $.length; W++) {
+ var le = $[W]._private;
+ le.grabbed = !1, le.rscratch.inDragLayer = !1
+ }
+ var ue = t.touchData.start._private;
+ ue.active = !1, ue.grabbed = !1, ue.rscratch.inDragLayer = !1, d[n.DRAG] = !0, t.touchData.start.trigger("free").trigger("unactivate")
+ }
+ s.viewport({
+ zoom: re,
+ pan: se,
+ cancelOnFailedZoom: !0
+ }), g = U, h = O, p = A, f = I, v = z, t.pinching = !0
+ }
+ if (r.touches[0]) {
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ if (r.touches[1]) {
+ var m = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ l[2] = m[0], l[3] = m[1]
+ }
+ if (r.touches[2]) {
+ var m = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ l[4] = m[0], l[5] = m[1]
+ }
+ } else if (r.touches[0]) {
+ var ce = t.touchData.start,
+ de = t.touchData.last,
+ Y = Y || t.findNearestElement(l[0], l[1], !0, !0);
+ if (null != ce && "nodes" == ce._private.group && t.nodeIsDraggable(ce))
+ if (L >= t.touchTapThreshold2) {
+ for (var $ = t.dragData.touchDragEles, he = 0; he < $.length; he++) {
+ var pe = $[he];
+ if (t.nodeIsDraggable(pe) && pe.isNode() && pe.grabbed()) {
+ t.dragData.didDrag = !0;
+ var fe = pe._private.position,
+ ve = !t.hoverData.draggingEles;
+ if (e.is.number(_[0]) && e.is.number(_[1]) && (fe.x += _[0], fe.y += _[1]), ve) {
+ a(pe, {
+ inDragLayer: !0
+ }), d[n.NODE] = !0;
+ var ge = t.touchData.dragDelta;
+ e.is.number(ge[0]) && e.is.number(ge[1]) && (fe.x += ge[0], fe.y += ge[1])
+ }
+ }
+ }
+ var ye = new e.Collection(s, pe);
+ ye.updateCompoundBounds(), ye.trigger("position drag"), t.hoverData.draggingEles = !0, d[n.DRAG] = !0, t.touchData.startPosition[0] == u[0] && t.touchData.startPosition[1] == u[1] && (d[n.NODE] = !0), t.redraw()
+ } else {
+ var ge = t.touchData.dragDelta = t.touchData.dragDelta || [];
+ 0 === ge.length ? (ge.push(_[0]), ge.push(_[1])) : (ge[0] += _[0], ge[1] += _[1])
+ }
+ null != ce && (ce.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), ce.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), ce.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), null == ce && (null != Y && (Y.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), null == Y && (s.trigger(new e.Event(r, {
+ type: "touchmove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), s.trigger(new e.Event(r, {
+ type: "tapdrag",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), s.trigger(new e.Event(r, {
+ type: "vmousemove",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })))), Y != de && (de && de.trigger(new e.Event(r, {
+ type: "tapdragout",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ })), Y && Y.trigger(new e.Event(r, {
+ type: "tapdragover",
+ cyPosition: {
+ x: l[0],
+ y: l[1]
+ }
+ }))), t.touchData.last = Y;
+ for (var W = 0; W < l.length; W++) l[W] && t.touchData.startPosition[W] && Math.abs(l[W] - t.touchData.startPosition[W]) > 4 && (t.touchData.singleTouchMoved = !0);
+ if (o && (null == ce || ce.isEdge()) && s.panningEnabled() && s.userPanningEnabled()) {
+ t.swipePanning ? s.panBy({
+ x: _[0] * c,
+ y: _[1] * c
+ }) : L >= t.touchTapThreshold2 && (t.swipePanning = !0, s.panBy({
+ x: D * c,
+ y: P * c
+ })), ce && (ce.unactivate(), t.data.bgActivePosistion || (t.data.bgActivePosistion = {
+ x: l[0],
+ y: l[1]
+ }), d[n.SELECT_BOX] = !0, t.touchData.start = null);
+ var m = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ l[0] = m[0], l[1] = m[1]
+ }
+ }
+ for (var E = 0; E < l.length; E++) u[E] = l[E]
+ }, 1e3 / 30, {
+ trailing: !0
+ }), !1), t.registerBinding(window, "touchcancel", function(e) {
+ var n = t.touchData.start;
+ t.touchData.capture = !1, n && n.unactivate()
+ }), t.registerBinding(window, "touchend", function(r) {
+ var i = t.touchData.start,
+ a = t.touchData.capture;
+ if (a) {
+ t.touchData.capture = !1, r.preventDefault();
+ var s = t.data.select;
+ t.swipePanning = !1, t.hoverData.draggingEles = !1;
+ var l = t.data.cy,
+ u = l.zoom(),
+ c = t.touchData.now,
+ d = t.touchData.earlier,
+ h = t.data.canvasNeedsRedraw;
+ if (r.touches[0]) {
+ var p = t.projectIntoViewport(r.touches[0].clientX, r.touches[0].clientY);
+ c[0] = p[0], c[1] = p[1]
+ }
+ if (r.touches[1]) {
+ var p = t.projectIntoViewport(r.touches[1].clientX, r.touches[1].clientY);
+ c[2] = p[0], c[3] = p[1]
+ }
+ if (r.touches[2]) {
+ var p = t.projectIntoViewport(r.touches[2].clientX, r.touches[2].clientY);
+ c[4] = p[0], c[5] = p[1]
+ }
+ i && i.unactivate();
+ var f;
+ if (t.touchData.cxt) {
+ if (f = new e.Event(r, {
+ type: "cxttapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }), i ? i.trigger(f) : l.trigger(f), !t.touchData.cxtDragged) {
+ var v = new e.Event(r, {
+ type: "cxttap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ });
+ i ? i.trigger(v) : l.trigger(v)
+ }
+ return t.touchData.start && (t.touchData.start._private.grabbed = !1), t.touchData.cxt = !1, t.touchData.start = null, void t.redraw()
+ }
+ if (!r.touches[2] && l.boxSelectionEnabled() && t.touchData.selecting) {
+ t.touchData.selecting = !1, clearTimeout(this.threeFingerSelectTimeout);
+ var g = [],
+ y = t.getAllInBox(s[0], s[1], s[2], s[3]);
+ s[0] = void 0, s[1] = void 0, s[2] = void 0, s[3] = void 0, s[4] = 0, h[n.SELECT_BOX] = !0;
+ for (var m = 0; m < y.length; m++) y[m]._private.selectable && g.push(y[m]);
+ var x = new e.Collection(l, g);
+ "single" === l.selectionType() && l.$(":selected").unmerge(x).unselect(), x.select(), x.length > 0 ? h[n.NODE] = !0 : t.redraw()
+ }
+ var b = !1;
+ if (null != i && (i._private.active = !1, b = !0, i.unactivate()), r.touches[2]) t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0;
+ else if (r.touches[1]);
+ else if (r.touches[0]);
+ else if (!r.touches[0]) {
+ t.data.bgActivePosistion = void 0, h[n.SELECT_BOX] = !0;
+ var w = t.dragData.touchDragEles;
+ if (null != i) {
+ var _ = i._private.grabbed;
+ o(w), h[n.DRAG] = !0, h[n.NODE] = !0, _ && i.trigger("free"), i.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })), i.unactivate(), t.touchData.start = null
+ } else {
+ var E = t.findNearestElement(c[0], c[1], !0, !0);
+ null != E && E.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })), null == E && l.trigger(new e.Event(r, {
+ type: "touchend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "tapend",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vmouseup",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }))
+ }
+ var T = t.touchData.startPosition[0] - c[0],
+ S = T * T,
+ C = t.touchData.startPosition[1] - c[1],
+ k = C * C,
+ D = S + k,
+ N = D * u * u;
+ null != i && !t.dragData.didDrag && i._private.selectable && N < t.touchTapThreshold2 && !t.pinching && ("single" === l.selectionType() ? (l.$(":selected").unmerge(i).unselect(), i.select()) : i.selected() ? i.unselect() : i.select(), b = !0, h[n.NODE] = !0), t.touchData.singleTouchMoved === !1 && (i ? i.trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })) : l.trigger(new e.Event(r, {
+ type: "tap",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ })).trigger(new e.Event(r, {
+ type: "vclick",
+ cyPosition: {
+ x: c[0],
+ y: c[1]
+ }
+ }))), t.touchData.singleTouchMoved = !0
+ }
+ for (var P = 0; P < c.length; P++) d[P] = c[P];
+ t.dragData.didDrag = !1, 0 === r.touches.length && (t.touchData.dragDelta = []), b && i && i.updateStyle(!1), r.touches.length < 2 && (t.pinching = !1, h[n.NODE] = !0, t.redraw())
+ }
+ }, !1)
+ }
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t, n) {
+ a[t] = {
+ points: n,
+ draw: function(e, n, i, o, s) {
+ r.drawPolygon(e, n, i, o, s, a[t].points)
+ },
+ drawPath: function(e, n, i, o, s) {
+ r.drawPolygonPath(e, n, i, o, s, a[t].points)
+ },
+ intersectLine: function(n, r, i, o, s, l, u) {
+ return e.math.polygonIntersectLine(s, l, a[t].points, n, r, i / 2, o / 2, u)
+ },
+ intersectBox: function(n, r, i, o, s, l, u, c, d) {
+ var h = a[t].points;
+ return e.math.boxIntersectPolygon(n, r, i, o, h, s, l, u, c, [0, -1], d)
+ },
+ checkPoint: function(n, r, i, o, s, l, u) {
+ return e.math.pointInsidePolygon(n, r, a[t].points, l, u, o, s, [0, -1], i)
+ }
+ }
+ }
+ for (var n = e("renderer", "canvas"), r = n.prototype, i = n.usePaths(), a = n.nodeShapes = {}, o = Math.sin(0), s = Math.cos(0), l = {}, u = {}, c = .1, d = 0 * Math.PI; d < 2 * Math.PI; d += c) l[d] = Math.sin(d), u[d] = Math.cos(d);
+ a.ellipse = {
+ draw: function(e, t, n, r, i) {
+ a.ellipse.drawPath(e, t, n, r, i), e.fill()
+ },
+ drawPath: function(e, t, n, r, a) {
+ if (i) {
+ e.beginPath && e.beginPath();
+ for (var d, h, p = r / 2, f = a / 2, v = 0 * Math.PI; v < 2 * Math.PI; v += c) d = t - p * l[v] * o + p * u[v] * s, h = n + f * u[v] * o + f * l[v] * s, 0 === v ? e.moveTo(d, h) : e.lineTo(d, h);
+ e.closePath()
+ } else e.beginPath && e.beginPath(), e.translate(t, n), e.scale(r / 2, a / 2), e.arc(0, 0, 1, 0, 2 * Math.PI * .999, !1), e.closePath(), e.scale(2 / r, 2 / a), e.translate(-t, -n)
+ },
+ intersectLine: function(t, n, r, i, a, o, s) {
+ var l = e.math.intersectLineEllipse(a, o, t, n, r / 2 + s, i / 2 + s);
+ return l
+ },
+ intersectBox: function(t, n, r, i, a, o, s, l, u) {
+ return e.math.boxIntersectEllipse(t, n, r, i, u, a, o, s, l)
+ },
+ checkPoint: function(e, t, n, r, i, a, o) {
+ return e -= a, t -= o, e /= r / 2 + n, t /= i / 2 + n, Math.pow(e, 2) + Math.pow(t, 2) <= 1
+ }
+ }, t("triangle", e.math.generateUnitNgonPointsFitToSquare(3, 0)), t("square", e.math.generateUnitNgonPointsFitToSquare(4, 0)), a.rectangle = a.square, a.roundrectangle = {
+ points: e.math.generateUnitNgonPointsFitToSquare(4, 0),
+ draw: function(e, t, n, i, a) {
+ r.drawRoundRectangle(e, t, n, i, a, 10)
+ },
+ drawPath: function(e, t, n, i, a) {
+ r.drawRoundRectanglePath(e, t, n, i, a, 10)
+ },
+ intersectLine: function(t, n, r, i, a, o, s) {
+ return e.math.roundRectangleIntersectLine(a, o, t, n, r, i, s)
+ },
+ intersectBox: function(t, n, r, i, a, o, s, l, u) {
+ return e.math.roundRectangleIntersectBox(t, n, r, i, a, o, s, l, u)
+ },
+ checkPoint: function(t, n, r, i, o, s, l) {
+ var u = e.math.getRoundRectangleRadius(i, o);
+ if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i, o - 2 * u, [0, -1], r)) return !0;
+ if (e.math.pointInsidePolygon(t, n, a.roundrectangle.points, s, l, i - 2 * u, o, [0, -1], r)) return !0;
+ var c = function(e, t, n, r, i, a, o) {
+ return e -= n, t -= r, e /= i / 2 + o, t /= a / 2 + o, Math.pow(e, 2) + Math.pow(t, 2) <= 1
+ };
+ return c(t, n, s - i / 2 + u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l - o / 2 + u, 2 * u, 2 * u, r) ? !0 : c(t, n, s + i / 2 - u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : c(t, n, s - i / 2 + u, l + o / 2 - u, 2 * u, 2 * u, r) ? !0 : !1
+ }
+ }, t("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), t("pentagon", e.math.generateUnitNgonPointsFitToSquare(5, 0)), t("hexagon", e.math.generateUnitNgonPointsFitToSquare(6, 0)), t("heptagon", e.math.generateUnitNgonPointsFitToSquare(7, 0)), t("octagon", e.math.generateUnitNgonPointsFitToSquare(8, 0));
+ var h = new Array(20),
+ p = e.math.generateUnitNgonPoints(5, 0),
+ f = e.math.generateUnitNgonPoints(5, Math.PI / 5),
+ v = .5 * (3 - Math.sqrt(5));
+ v *= 1.57;
+ for (var d = 0; d < f.length / 2; d++) f[2 * d] *= v, f[2 * d + 1] *= v;
+ for (var d = 0; 5 > d; d++) h[4 * d] = p[2 * d], h[4 * d + 1] = p[2 * d + 1], h[4 * d + 2] = f[2 * d], h[4 * d + 3] = f[2 * d + 1];
+ h = e.math.fitPolygonToSquare(h), t("star", h), t("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), t("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1])
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this._private = {}, this._private.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ animate: !0,
+ maxSimulationTime: 4e3,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ ungrabifyWhileSimulating: !1,
+ ready: void 0,
+ stop: void 0,
+ repulsion: void 0,
+ stiffness: void 0,
+ friction: void 0,
+ gravity: !0,
+ fps: void 0,
+ precision: void 0,
+ nodeMass: void 0,
+ edgeLength: void 0,
+ stepSize: .1,
+ stableEnergy: function(e) {
+ var t = e;
+ return t.max <= .5 || t.mean <= .3
+ },
+ infinite: !1
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this._private.options;
+ return e.util.require("arbor", function(r) {
+ function i(e, t) {
+ return null == t ? void 0 : "function" == typeof t ? t.apply(e, [e._private.data, {
+ nodes: u.length,
+ edges: c.length,
+ element: e
+ }]) : t
+ }
+
+ function a(e) {
+ if (!e.isFullAutoParent()) {
+ var t = e._private.data.id,
+ r = i(e, n.nodeMass),
+ a = e._private.locked,
+ o = e.position(),
+ s = p.fromScreen({
+ x: o.x,
+ y: o.y
+ });
+ e.scratch().arbor = p.addNode(t, {
+ element: e,
+ mass: r,
+ fixed: a,
+ x: a && s ? s.x : void 0,
+ y: a && s ? s.y : void 0
+ })
+ }
+ }
+
+ function o(e) {
+ var t = e.source().id(),
+ r = e.target().id(),
+ a = i(e, n.edgeLength);
+ e.scratch().arbor = p.addEdge(t, r, {
+ length: a
+ })
+ }
+ var s = n.cy,
+ l = n.eles,
+ u = l.nodes().not(":parent"),
+ c = l.edges(),
+ d = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: s.width(),
+ h: s.height()
+ }),
+ h = !1;
+ if (t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), void 0 !== n.liveUpdate && (n.animate = n.liveUpdate), l.nodes().size() <= 1) return n.fit && s.reset(), l.nodes().position({
+ x: Math.round((d.x1 + d.x2) / 2),
+ y: Math.round((d.y1 + d.y2) / 2)
+ }), t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }), t.one("layoutstop", n.stop), void t.trigger({
+ type: "layoutstop",
+ layout: t
+ });
+ var p = t._private.system = r.ParticleSystem();
+ p.parameters({
+ repulsion: n.repulsion,
+ stiffness: n.stiffness,
+ friction: n.friction,
+ gravity: n.gravity,
+ fps: n.fps,
+ dt: n.dt,
+ precision: n.precision
+ }), n.animate && n.fit && s.fit(d, n.padding);
+ var f, v = 250,
+ g = !1,
+ y = +new Date,
+ m = {
+ init: function(e) {},
+ redraw: function() {
+ var e = p.energy();
+ if (!n.infinite && null != n.stableEnergy && null != e && e.n > 0 && n.stableEnergy(e)) return void t.stop();
+ n.infinite || v == 1 / 0 || (clearTimeout(f), f = setTimeout(S, v));
+ var r = s.collection();
+ p.eachNode(function(e, t) {
+ var n = e.data,
+ i = n.element;
+ null != i && (i.locked() || i.grabbed() || (i.silentPosition({
+ x: d.x1 + t.x,
+ y: d.y1 + t.y
+ }), r.merge(i)))
+ }), n.animate && r.length > 0 && (h = !0, r.rtrigger("position"), n.fit && s.fit(n.padding), y = +new Date, h = !1), g || (g = !0, t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ }))
+ }
+ };
+ p.renderer = m, p.screenSize(d.w, d.h), p.screenPadding(n.padding, n.padding, n.padding, n.padding), p.screenStep(n.stepSize);
+ var x;
+ u.on("grab free position", x = function(e) {
+ if (!h) {
+ var t = this.position(),
+ i = p.fromScreen(t);
+ if (i) {
+ var a = r.Point(i.x, i.y),
+ o = n.padding;
+ switch (d.x1 + o <= t.x && t.x <= d.x2 - o && d.y1 + o <= t.y && t.y <= d.y2 - o && (this.scratch().arbor.p = a), e.type) {
+ case "grab":
+ this.scratch().arbor.fixed = !0;
+ break;
+ case "free":
+ this.scratch().arbor.fixed = !1
+ }
+ }
+ }
+ });
+ var b;
+ u.on("lock unlock", b = function(e) {
+ node.scratch().arbor.fixed = node.locked()
+ });
+ var w;
+ l.on("remove", w = function(e) {});
+ var _;
+ s.on("add", "*", _ = function() {});
+ var E;
+ s.on("resize", E = function() {
+ if (null == n.boundingBox && null != t._private.system) {
+ var e = s.width(),
+ r = s.height();
+ p.screenSize(e, r)
+ }
+ }), u.each(function(e, t) {
+ a(t)
+ }), c.each(function(e, t) {
+ o(t)
+ });
+ var T = u.filter(":grabbable");
+ n.ungrabifyWhileSimulating && T.ungrabify();
+ var S = t._private.doneHandler = function() {
+ t._private.doneHandler = null, n.animate || (n.fit && s.reset(), u.rtrigger("position")), u.off("grab free position", x), u.off("lock unlock", b), l.off("remove", w), s.off("add", "*", _), s.off("resize", E), n.ungrabifyWhileSimulating && T.grabify(), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ };
+ p.start(), !n.infinite && null != n.maxSimulationTime && n.maxSimulationTime > 0 && n.maxSimulationTime !== 1 / 0 && setTimeout(function() {
+ t.stop()
+ }, n.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return null != this._private.system && this._private.system.stop(), this._private.doneHandler && this._private.doneHandler(), this
+ }, e("layout", "arbor", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ directed: !1,
+ padding: 30,
+ circle: !1,
+ spacingFactor: 1.75,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ roots: void 0,
+ maximalAdjustments: 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t, n = this.options,
+ r = n,
+ i = n.cy,
+ a = r.eles,
+ o = a.nodes().not(":parent"),
+ s = a,
+ l = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ });
+ if (e.is.elementOrCollection(r.roots)) t = r.roots;
+ else if (e.is.array(r.roots)) {
+ for (var u = [], c = 0; c < r.roots.length; c++) {
+ var d = r.roots[c],
+ h = i.getElementById(d);
+ u.push(h)
+ }
+ t = new e.Collection(i, u)
+ } else if (e.is.string(r.roots)) t = i.$(r.roots);
+ else if (r.directed) t = o.roots();
+ else {
+ for (var p = [], f = o; f.length > 0;) {
+ var v = i.collection();
+ a.bfs({
+ roots: f[0],
+ visit: function(e, t, n, r, i) {
+ v = v.add(n)
+ },
+ directed: !1
+ }), f = f.not(v), p.push(v)
+ }
+ t = i.collection();
+ for (var c = 0; c < p.length; c++) {
+ var g = p[c],
+ y = g.maxDegree(!1),
+ m = g.filter(function() {
+ return this.degree(!1) === y
+ });
+ t = t.add(m)
+ }
+ }
+ var x = [],
+ b = {},
+ w = {},
+ _ = {},
+ E = {},
+ T = {};
+ s.bfs({
+ roots: t,
+ directed: r.directed,
+ visit: function(e, t, n, r, i) {
+ var a = this[0],
+ o = a.id();
+ if (x[t] || (x[t] = []), x[t].push(a), b[o] = !0, w[o] = t, _[o] = i, E[o] = r, i) {
+ var s = i.id(),
+ l = T[s] = T[s] || [];
+ l.push(n)
+ }
+ }
+ });
+ for (var S = [], c = 0; c < o.length; c++) {
+ var h = o[c];
+ b[h.id()] || S.push(h)
+ }
+ for (var C = 3 * S.length, k = 0; 0 !== S.length && C > k;) {
+ for (var D = S.shift(), N = D.neighborhood().nodes(), P = !1, c = 0; c < N.length; c++) {
+ var M = w[N[c].id()];
+ if (void 0 !== M) {
+ x[M].push(D), P = !0;
+ break
+ }
+ }
+ P || S.push(D), k++
+ }
+ for (; 0 !== S.length;) {
+ var D = S.shift(),
+ P = !1;
+ P || (0 === x.length && x.push([]), x[0].push(D))
+ }
+ var B = function() {
+ for (var e = 0; e < x.length; e++)
+ for (var t = x[e], n = 0; n < t.length; n++) {
+ var r = t[n];
+ r._private.scratch.breadthfirst = {
+ depth: e,
+ index: n
+ }
+ }
+ };
+ B();
+ for (var L = function(e) {
+ for (var t, n = e.connectedEdges(function() {
+ return this.data("target") === e.id()
+ }), r = e._private.scratch.breadthfirst, i = 0, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o.source()[0],
+ l = s._private.scratch.breadthfirst;
+ r.depth <= l.depth && i < l.depth && (i = l.depth, t = s)
+ }
+ return t
+ }, O = 0; O < r.maximalAdjustments; O++) {
+ for (var A = x.length, I = [], c = 0; A > c; c++)
+ for (var M = x[c], z = M.length, R = 0; z > R; R++) {
+ var h = M[R],
+ j = h._private.scratch.breadthfirst,
+ F = L(h);
+ F && (j.intEle = F, I.push(h))
+ }
+ for (var c = 0; c < I.length; c++) {
+ var h = I[c],
+ j = h._private.scratch.breadthfirst,
+ F = j.intEle,
+ q = F._private.scratch.breadthfirst;
+ x[j.depth].splice(j.index, 1);
+ for (var V = q.depth + 1; V > x.length - 1;) x.push([]);
+ x[V].push(h), j.depth = V, j.index = x[V].length - 1
+ }
+ B()
+ }
+ var X = 0;
+ if (r.avoidOverlap) {
+ for (var c = 0; c < o.length; c++) {
+ var H = o[c].outerWidth(),
+ Y = o[c].outerHeight();
+ X = Math.max(X, H, Y)
+ }
+ X *= r.spacingFactor
+ }
+ for (var $ = {}, W = function(e) {
+ if ($[e.id()]) return $[e.id()];
+ for (var t = e._private.scratch.breadthfirst.depth, n = e.neighborhood().nodes().not(":parent"), r = 0, i = 0, a = 0; a < n.length; a++) {
+ var o = n[a],
+ s = o._private.scratch.breadthfirst,
+ l = s.index,
+ u = s.depth,
+ c = x[u].length;
+ (t > u || 0 === t) && (r += l / c, i++)
+ }
+ return i = Math.max(1, i), r /= i, 0 === i && (r = void 0), $[e.id()] = r, r
+ }, U = function(e, t) {
+ var n = W(e),
+ r = W(t);
+ return n - r
+ }, Z = 0; 3 > Z; Z++) {
+ for (var c = 0; c < x.length; c++) x[c] = x[c].sort(U);
+ B()
+ }
+ for (var G = 0, c = 0; c < x.length; c++) G = Math.max(x[c].length, G);
+ for (var K = {
+ x: l.x1 + l.w / 2,
+ y: l.x1 + l.h / 2
+ }, J = function(e, t) {
+ var n = e._private.scratch.breadthfirst,
+ i = n.depth,
+ a = n.index,
+ o = x[i].length,
+ s = Math.max(l.w / (o + 1), X),
+ u = Math.max(l.h / (x.length + 1), X),
+ c = Math.min(l.w / 2 / x.length, l.h / 2 / x.length);
+ if (c = Math.max(c, X), r.circle) {
+ if (r.circle) {
+ var d = c * i + c - (x.length > 0 && x[0].length <= 3 ? c / 2 : 0),
+ h = 2 * Math.PI / x[i].length * a;
+ return 0 === i && 1 === x[0].length && (d = 1), {
+ x: K.x + d * Math.cos(h),
+ y: K.y + d * Math.sin(h)
+ }
+ }
+ return {
+ x: K.x + (a + 1 - (o + 1) / 2) * s,
+ y: (i + 1) * u
+ }
+ }
+ var p = {
+ x: K.x + (a + 1 - (o + 1) / 2) * s,
+ y: (i + 1) * u
+ };
+ return t ? p : p
+ }, Q = {}, c = x.length - 1; c >= 0; c--)
+ for (var M = x[c], R = 0; R < M.length; R++) {
+ var D = M[R];
+ Q[D.id()] = J(D, c === x.length - 1)
+ }
+ return o.layoutPositions(this, r, function() {
+ return Q[this.id()]
+ }), this
+ }, e("layout", "breadthfirst", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ radius: void 0,
+ startAngle: 1.5 * Math.PI,
+ counterclockwise: !1,
+ sort: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t,
+ r = t.cy,
+ i = n.eles,
+ a = i.nodes().not(":parent");
+ n.sort && (a = a.sort(n.sort));
+ for (var o, s = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ }), l = {
+ x: s.x1 + s.w / 2,
+ y: s.y1 + s.h / 2
+ }, u = n.startAngle, c = 2 * Math.PI / a.length, d = 0, h = 0; h < a.length; h++) {
+ var p = a[h].outerWidth(),
+ f = a[h].outerHeight();
+ d = Math.max(d, p, f)
+ }
+ if (o = e.is.number(n.radius) ? n.radius : a.length <= 1 ? 0 : Math.min(s.h, s.w) / 2 - d, a.length > 1 && n.avoidOverlap) {
+ d *= 1.75;
+ var c = 2 * Math.PI / a.length,
+ v = Math.cos(c) - Math.cos(0),
+ g = Math.sin(c) - Math.sin(0),
+ y = Math.sqrt(d * d / (v * v + g * g));
+ o = Math.max(y, o)
+ }
+ var m = function(e, t) {
+ var r = o * Math.cos(u),
+ i = o * Math.sin(u),
+ a = {
+ x: l.x + r,
+ y: l.y + i
+ };
+ return u = n.counterclockwise ? u - c : u + c, a
+ };
+ return a.layoutPositions(this, n, m), this
+ }, e("layout", "circle", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ animate: !0,
+ refresh: 1,
+ maxSimulationTime: 4e3,
+ ungrabifyWhileSimulating: !1,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ ready: function() {},
+ stop: function() {},
+ randomize: !1,
+ avoidOverlap: !0,
+ handleDisconnected: !0,
+ nodeSpacing: function(e) {
+ return 10
+ },
+ flow: void 0,
+ alignment: void 0,
+ edgeLength: void 0,
+ edgeSymDiffLength: void 0,
+ edgeJaccardLength: void 0,
+ unconstrIter: void 0,
+ userConstIter: void 0,
+ allConstIter: void 0,
+ infinite: !1
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this.options;
+ return t.manuallyStopped = !1, e.util.require("cola", function(r) {
+ var i = n.cy,
+ a = n.eles,
+ o = a.nodes(),
+ s = a.edges(),
+ l = !1,
+ u = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ }),
+ c = function(t, n) {
+ if (e.is.fn(t)) {
+ var r = t;
+ return r.apply(n, [n])
+ }
+ return t
+ },
+ d = function() {
+ for (var t = {
+ min: 1 / 0,
+ max: -(1 / 0)
+ }, r = {
+ min: 1 / 0,
+ max: -(1 / 0)
+ }, a = 0; a < o.length; a++) {
+ var s = o[a],
+ d = s._private.scratch.cola;
+ if (t.min = Math.min(t.min, d.x || 0), t.max = Math.max(t.max, d.x || 0), r.min = Math.min(r.min, d.y || 0), r.max = Math.max(r.max, d.y || 0), !d.updatedDims) {
+ var h = s.boundingBox(),
+ f = c(n.nodeSpacing, s);
+ d.width = h.w + 2 * f, d.height = h.h + 2 * f
+ }
+ }
+ o.positions(function(n, i) {
+ var a, o = i._private.scratch.cola;
+ return i.grabbed() || i.isParent() || (a = {
+ x: u.x1 + o.x - t.min,
+ y: u.y1 + o.y - r.min
+ }, e.is.number(a.x) && e.is.number(a.y) || (a = void 0)), a
+ }), o.updateCompoundBounds(), l || (p(), l = !0), n.fit && i.fit(n.padding)
+ },
+ h = function() {
+ n.ungrabifyWhileSimulating && y.grabify(), o.off("grab free position", m), o.off("lock unlock", x), t.one("layoutstop", n.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ })
+ },
+ p = function() {
+ t.one("layoutready", n.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })
+ },
+ f = n.refresh,
+ v = 1;
+ n.refresh < 0 ? (v = Math.abs(n.refresh), f = 1) : f = Math.max(1, f);
+ var g = t.adaptor = r.adaptor({
+ trigger: function(e) {
+ var t = r.EventType ? r.EventType.tick : null,
+ i = r.EventType ? r.EventType.end : null;
+ switch (e.type) {
+ case "tick":
+ case t:
+ n.animate && d();
+ break;
+ case "end":
+ case i:
+ d(), n.infinite || h()
+ }
+ },
+ kick: function() {
+ var r = function() {
+ if (t.manuallyStopped) return h(), !0;
+ var e = g.tick();
+ return e && n.infinite && g.resume(), e
+ },
+ i = function() {
+ for (var e, t = 0; f > t && !e; t++) e = e || r();
+ return e
+ };
+ if (n.animate) {
+ var a = function() {
+ i() || e.util.requestAnimationFrame(a)
+ };
+ e.util.requestAnimationFrame(a)
+ } else
+ for (; !r(););
+ },
+ on: function(e, t) {},
+ drag: function() {}
+ });
+ t.adaptor = g;
+ var y = o.filter(":grabbable");
+ n.ungrabifyWhileSimulating && y.ungrabify();
+ var m;
+ o.on("grab free position", m = function(t) {
+ var n = this,
+ r = n._private.scratch.cola,
+ i = n._private.position;
+ switch (n.grabbed() ? (r.x = i.x - u.x1, r.y = i.y - u.y1, g.dragstart(r)) : e.is.number(r.x) && e.is.number(r.y) && (i.x = r.x + u.x1, i.y = r.y + u.y1), t.type) {
+ case "grab":
+ g.dragstart(r), g.resume();
+ break;
+ case "free":
+ g.dragend(r)
+ }
+ });
+ var x;
+ o.on("lock unlock", x = function(e) {
+ var t = this,
+ n = t._private.scratch.cola;
+ t.locked() ? g.dragstart(n) : g.dragend(n)
+ });
+ var b = o.stdFilter(function(e) {
+ return !e.isParent()
+ });
+ if (g.nodes(b.map(function(e, t) {
+ var r = c(n.nodeSpacing, e),
+ i = e.position(),
+ a = e.boundingBox(),
+ o = e._private.scratch.cola = {
+ x: n.randomize || void 0 === i.x ? Math.round(Math.random() * u.w) : i.x,
+ y: n.randomize || void 0 === i.y ? Math.round(Math.random() * u.h) : i.y,
+ width: a.w + 2 * r,
+ height: a.h + 2 * r,
+ index: t
+ };
+ return o
+ })), n.alignment) {
+ var w = [],
+ _ = [];
+ b.forEach(function(e) {
+ var t = c(n.alignment, e),
+ r = e._private.scratch.cola,
+ i = r.index;
+ t && (null != t.x && w.push({
+ node: i,
+ offset: t.x
+ }), null != t.y && _.push({
+ node: i,
+ offset: t.y
+ }))
+ });
+ var E = [];
+ w.length > 0 && E.push({
+ type: "alignment",
+ axis: "x",
+ offsets: w
+ }), _.length > 0 && E.push({
+ type: "alignment",
+ axis: "y",
+ offsets: _
+ }), g.constraints(E)
+ }
+ g.groups(o.stdFilter(function(e) {
+ return e.isParent()
+ }).map(function(e, t) {
+ var r = e._private.style,
+ i = c(n.nodeSpacing, e),
+ a = r["padding-left"].pxValue + i,
+ o = r["padding-right"].pxValue + i,
+ s = r["padding-top"].pxValue + i,
+ l = r["padding-bottom"].pxValue + i;
+ return e._private.scratch.cola = {
+ index: t,
+ padding: Math.max(a, o, s, l),
+ leaves: e.descendants().stdFilter(function(e) {
+ return !e.isParent()
+ }).map(function(e) {
+ return e[0]._private.scratch.cola.index
+ })
+ }, e
+ }).map(function(e) {
+ return e._private.scratch.cola.groups = e.descendants().stdFilter(function(e) {
+ return e.isParent()
+ }).map(function(e) {
+ return e._private.scratch.cola.index
+ }), e._private.scratch.cola
+ }));
+ var T, S;
+ null != n.edgeLength ? (T = n.edgeLength, S = "linkDistance") : null != n.edgeSymDiffLength ? (T = n.edgeSymDiffLength, S = "symmetricDiffLinkLengths") : null != n.edgeJaccardLength ? (T = n.edgeJaccardLength, S = "jaccardLinkLengths") : (T = 100, S = "linkDistance");
+ var C = function(e) {
+ return e.calcLength
+ };
+ if (g.links(s.stdFilter(function(e) {
+ return !e.source().isParent() && !e.target().isParent()
+ }).map(function(e, t) {
+ var n = e._private.scratch.cola = {
+ source: e.source()[0]._private.scratch.cola.index,
+ target: e.target()[0]._private.scratch.cola.index
+ };
+ return null != T && (n.calcLength = c(T, e)), n
+ })), g.size([u.w, u.h]), null != T && g[S](C), n.flow) {
+ var k, D = "y",
+ N = 50;
+ e.is.string(n.flow) ? k = {
+ axis: n.flow,
+ minSeparation: N
+ } : e.is.number(n.flow) ? k = {
+ axis: D,
+ minSeparation: n.flow
+ } : e.is.plainObject(n.flow) ? (k = n.flow, k.axis = k.axis || D, k.minSeparation = null != k.minSeparation ? k.minSeparation : N) : k = {
+ axis: D,
+ minSeparation: N
+ }, g.flowLayout(k.axis, k.minSeparation)
+ }
+ t.trigger({
+ type: "layoutstart",
+ layout: t
+ }), g.avoidOverlaps(n.avoidOverlap).handleDisconnected(n.handleDisconnected).start(n.unconstrIter, n.userConstIter, n.allConstIter), n.infinite || setTimeout(function() {
+ t.manuallyStopped || g.stop()
+ }, n.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return this.adaptor && (this.manuallyStopped = !0, this.adaptor.stop()), this
+ }, e("layout", "cola", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ startAngle: 1.5 * Math.PI,
+ counterclockwise: !1,
+ minNodeSpacing: 10,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ height: void 0,
+ width: void 0,
+ concentric: function(e) {
+ return e.degree()
+ },
+ levelWidth: function(e) {
+ return e.maxDegree() / 4
+ },
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ for (var t = this.options, n = t, r = t.cy, i = n.eles, a = i.nodes().not(":parent"), o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ }), s = {
+ x: o.x1 + o.w / 2,
+ y: o.y1 + o.h / 2
+ }, l = [], u = n.startAngle, c = 0, d = 0; d < a.length; d++) {
+ var h, p = a[d];
+ h = n.concentric.apply(p, [p]), l.push({
+ value: h,
+ node: p
+ }), p._private.scratch.concentric = h
+ }
+ a.updateStyle();
+ for (var d = 0; d < a.length; d++) {
+ var p = a[d];
+ c = Math.max(c, p.outerWidth(), p.outerHeight())
+ }
+ l.sort(function(e, t) {
+ return t.value - e.value
+ });
+ for (var f = n.levelWidth(a), v = [
+ []
+ ], g = v[0], d = 0; d < l.length; d++) {
+ var y = l[d];
+ if (g.length > 0) {
+ var m = Math.abs(g[0].value - y.value);
+ m >= f && (g = [], v.push(g))
+ }
+ g.push(y)
+ }
+ var x = {},
+ b = 0,
+ w = c + n.minNodeSpacing;
+ if (!n.avoidOverlap) {
+ var _ = v.length > 0 && v[0].length > 1,
+ E = Math.min(o.w, o.h) / 2 - w,
+ T = E / (v.length + _ ? 1 : 0);
+ w = Math.min(w, T)
+ }
+ for (var d = 0; d < v.length; d++) {
+ var S = v[d],
+ C = 2 * Math.PI / S.length;
+ if (S.length > 1 && n.avoidOverlap) {
+ var k = Math.cos(C) - Math.cos(0),
+ D = Math.sin(C) - Math.sin(0),
+ N = Math.sqrt(w * w / (k * k + D * D));
+ b = Math.max(N, b)
+ }
+ for (var P = 0; P < S.length; P++) {
+ var y = S[P],
+ u = n.startAngle + (n.counterclockwise ? -1 : 1) * C * P,
+ M = {
+ x: s.x + b * Math.cos(u),
+ y: s.y + b * Math.sin(u)
+ };
+ x[y.node.id()] = M
+ }
+ b += w
+ }
+ return a.layoutPositions(this, n, function() {
+ var e = this.id();
+ return x[e]
+ }), this
+ }, e("layout", "concentric", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, r, t)
+ }
+ var n, r = {
+ ready: function() {},
+ stop: function() {},
+ animate: !0,
+ refresh: 4,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ randomize: !0,
+ debug: !1,
+ nodeRepulsion: 4e5,
+ nodeOverlap: 10,
+ idealEdgeLength: 10,
+ edgeElasticity: 100,
+ nestingFactor: 5,
+ gravity: 250,
+ numIter: 100,
+ initialTemp: 200,
+ coolingFactor: .95,
+ minTemp: 1
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ r = t.cy,
+ a = this;
+ a.stopped = !1, a.trigger({
+ type: "layoutstart",
+ layout: a
+ }), n = !0 === t.debug ? !0 : !1;
+ var o = new Date,
+ d = i(r, a, t);
+ n && s(d), !0 === t.randomize && l(d, r), m(d, r, t);
+ var h = function(e) {
+ return a.stopped ? !1 : (c(d, r, t, e), d.temperature = d.temperature * t.coolingFactor, d.temperature < t.minTemp ? !1 : !0)
+ },
+ p = function() {
+ u(d, r, t), !0 === t.fit && r.fit(t.padding);
+ var e = new Date;
+ console.info("Layout took " + (e - o) + " ms"), a.one("layoutstop", t.stop), a.trigger({
+ type: "layoutstop",
+ layout: a
+ })
+ };
+ if (t.animate) {
+ var f = 0,
+ v = function() {
+ for (var n, i = 0; i < t.refresh && f < t.numIter;) {
+ var n = h(f);
+ if (n === !1) break;
+ i++, f++
+ }
+ u(d, r, t), t.fit && r.fit(t.padding), n !== !1 && f + 1 < t.numIter ? e.util.requestAnimationFrame(v) : p()
+ };
+ e.util.requestAnimationFrame(v)
+ } else {
+ for (var f = 0; f < t.numIter && h(f) !== !1; f++);
+ p()
+ }
+ return this
+ }, t.prototype.stop = function() {
+ return this.stopped = !0, this
+ };
+ var i = function(t, n, r) {
+ for (var i = r.eles.edges(), o = r.eles.nodes(), s = {
+ layout: n,
+ layoutNodes: [],
+ idToIndex: {},
+ nodeSize: o.size(),
+ graphSet: [],
+ indexToGraph: [],
+ layoutEdges: [],
+ edgeSize: i.size(),
+ temperature: r.initialTemp,
+ clientWidth: t.width(),
+ clientHeight: t.width(),
+ boundingBox: e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: t.width(),
+ h: t.height()
+ })
+ }, l = 0; l < s.nodeSize; l++) {
+ var u = {};
+ u.id = o[l].data("id"), u.parentId = o[l].data("parent"), u.children = [], u.positionX = o[l].position("x"), u.positionY = o[l].position("y"), u.offsetX = 0, u.offsetY = 0, u.height = o[l].height(), u.width = o[l].width(), u.maxX = u.positionX + u.width / 2, u.minX = u.positionX - u.width / 2, u.maxY = u.positionY + u.height / 2, u.minY = u.positionY - u.height / 2, u.padLeft = o[l]._private.style["padding-left"].pxValue, u.padRight = o[l]._private.style["padding-right"].pxValue, u.padTop = o[l]._private.style["padding-top"].pxValue, u.padBottom = o[l]._private.style["padding-bottom"].pxValue, s.layoutNodes.push(u), s.idToIndex[u.id] = l
+ }
+ for (var c = [], d = 0, h = -1, p = [], l = 0; l < s.nodeSize; l++) {
+ var f = s.layoutNodes[l],
+ v = f.parentId;
+ null != v ? s.layoutNodes[s.idToIndex[v]].children.push(f.id) : (c[++h] = f.id, p.push(f.id))
+ }
+ for (s.graphSet.push(p); h >= d;) {
+ var g = c[d++],
+ y = s.idToIndex[g],
+ m = s.layoutNodes[y],
+ x = m.children;
+ if (x.length > 0) {
+ s.graphSet.push(x);
+ for (var l = 0; l < x.length; l++) c[++h] = x[l]
+ }
+ }
+ for (var l = 0; l < s.graphSet.length; l++)
+ for (var b = s.graphSet[l], w = 0; w < b.length; w++) {
+ var _ = s.idToIndex[b[w]];
+ s.indexToGraph[_] = l
+ }
+ for (var l = 0; l < s.edgeSize; l++) {
+ var E = i[l],
+ T = {};
+ T.id = E.data("id"), T.sourceId = E.data("source"), T.targetId = E.data("target");
+ var S = r.idealEdgeLength,
+ C = s.idToIndex[T.sourceId],
+ k = s.idToIndex[T.targetId],
+ D = s.indexToGraph[C],
+ N = s.indexToGraph[k];
+ if (D != N) {
+ for (var P = a(T.sourceId, T.targetId, s), M = s.graphSet[P], B = 0, u = s.layoutNodes[C]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++;
+ for (u = s.layoutNodes[k]; - 1 === $.inArray(u.id, M);) u = s.layoutNodes[s.idToIndex[u.parentId]], B++;
+ S *= B * r.nestingFactor
+ }
+ T.idealLength = S, s.layoutEdges.push(T)
+ }
+ return s
+ },
+ a = function(e, t, n) {
+ var r = o(e, t, 0, n);
+ return 2 > r.count ? 0 : r.graph
+ },
+ o = function(e, t, n, r) {
+ var i = r.graphSet[n];
+ if (-1 < $.inArray(e, i) && -1 < $.inArray(t, i)) return {
+ count: 2,
+ graph: n
+ };
+ for (var a = 0, s = 0; s < i.length; s++) {
+ var l = i[s],
+ u = r.idToIndex[l],
+ c = r.layoutNodes[u].children;
+ if (0 !== c.length) {
+ var d = r.indexToGraph[r.idToIndex[c[0]]],
+ h = o(e, t, d, r);
+ if (0 !== h.count) {
+ if (1 !== h.count) return h;
+ if (a++, 2 === a) break
+ }
+ }
+ }
+ return {
+ count: a,
+ graph: n
+ }
+ },
+ s = function(e) {
+ if (n) {
+ console.debug("layoutNodes:");
+ for (var t = 0; t < e.nodeSize; t++) {
+ var r = e.layoutNodes[t],
+ i = "\nindex: " + t + "\nId: " + r.id + "\nChildren: " + r.children.toString() + "\nparentId: " + r.parentId + "\npositionX: " + r.positionX + "\npositionY: " + r.positionY + "\nOffsetX: " + r.offsetX + "\nOffsetY: " + r.offsetY + "\npadLeft: " + r.padLeft + "\npadRight: " + r.padRight + "\npadTop: " + r.padTop + "\npadBottom: " + r.padBottom;
+ console.debug(i)
+ }
+ console.debug("idToIndex");
+ for (var t in e.idToIndex) console.debug("Id: " + t + "\nIndex: " + e.idToIndex[t]);
+ console.debug("Graph Set");
+ for (var a = e.graphSet, t = 0; t < a.length; t++) console.debug("Set : " + t + ": " + a[t].toString());
+ for (var i = "IndexToGraph", t = 0; t < e.indexToGraph.length; t++) i += "\nIndex : " + t + " Graph: " + e.indexToGraph[t];
+ console.debug(i), i = "Layout Edges";
+ for (var t = 0; t < e.layoutEdges.length; t++) {
+ var o = e.layoutEdges[t];
+ i += "\nEdge Index: " + t + " ID: " + o.id + " SouceID: " + o.sourceId + " TargetId: " + o.targetId + " Ideal Length: " + o.idealLength
+ }
+ console.debug(i), i = "nodeSize: " + e.nodeSize, i += "\nedgeSize: " + e.edgeSize, i += "\ntemperature: " + e.temperature, console.debug(i)
+ }
+ },
+ l = function(e, t) {
+ for (var n = e.clientWidth, r = e.clientHeight, i = 0; i < e.nodeSize; i++) {
+ var a = e.layoutNodes[i];
+ a.positionX = Math.random() * n, a.positionY = Math.random() * r
+ }
+ },
+ u = function(e, t, n) {
+ var r = e.layout,
+ i = n.eles.nodes(),
+ a = e.boundingBox,
+ o = {
+ x1: 1 / 0,
+ x2: -(1 / 0),
+ y1: 1 / 0,
+ y2: -(1 / 0)
+ };
+ n.boundingBox && (i.forEach(function(t) {
+ var n = e.layoutNodes[e.idToIndex[t.data("id")]];
+ o.x1 = Math.min(o.x1, n.positionX), o.x2 = Math.max(o.x2, n.positionX), o.y1 = Math.min(o.y1, n.positionY), o.y2 = Math.max(o.y2, n.positionY)
+ }), o.w = o.x2 - o.x1, o.h = o.y2 - o.y1), i.positions(function(t, r) {
+ var i = e.layoutNodes[e.idToIndex[r.data("id")]];
+ if (n.boundingBox) {
+ var s = (i.positionX - o.x1) / o.w,
+ l = (i.positionY - o.y1) / o.h;
+ return {
+ x: a.x1 + s * a.w,
+ y: a.y1 + l * a.h
+ }
+ }
+ return {
+ x: i.positionX,
+ y: i.positionY
+ }
+ }), !0 !== e.ready && (e.ready = !0, r.one("layoutready", n.ready), r.trigger({
+ type: "layoutready",
+ layout: this
+ }))
+ },
+ c = function(e, t, n, r) {
+ d(e, t, n), v(e, t, n), g(e, t, n), y(e, t, n), m(e, t, n)
+ },
+ d = function(e, t, n) {
+ for (var r = 0; r < e.graphSet.length; r++)
+ for (var i = e.graphSet[r], a = i.length, o = 0; a > o; o++)
+ for (var s = e.layoutNodes[e.idToIndex[i[o]]], l = o + 1; a > l; l++) {
+ var u = e.layoutNodes[e.idToIndex[i[l]]];
+ h(s, u, e, t, n)
+ }
+ },
+ h = function(e, t, n, r, i) {
+ var a = t.positionX - e.positionX,
+ o = t.positionY - e.positionY;
+ if (0 !== a || 0 !== o) {
+ var s = f(e, t, a, o);
+ if (s > 0) var l = i.nodeOverlap * s,
+ u = Math.sqrt(a * a + o * o),
+ c = l * a / u,
+ d = l * o / u;
+ else var h = p(e, a, o),
+ v = p(t, -1 * a, -1 * o),
+ g = v.x - h.x,
+ y = v.y - h.y,
+ m = g * g + y * y,
+ u = Math.sqrt(m),
+ l = i.nodeRepulsion / m,
+ c = l * g / u,
+ d = l * y / u;
+ e.offsetX -= c, e.offsetY -= d, t.offsetX += c, t.offsetY += d
+ }
+ },
+ p = function(e, t, n) {
+ var r = e.positionX,
+ i = e.positionY,
+ a = e.height,
+ o = e.width,
+ s = n / t,
+ l = a / o,
+ u = {};
+ do {
+ if (0 === t && n > 0) {
+ u.x = r, u.y = i + a / 2;
+ break
+ }
+ if (0 === t && 0 > n) {
+ u.x = r, u.y = i + a / 2;
+ break
+ }
+ if (t > 0 && s >= -1 * l && l >= s) {
+ u.x = r + o / 2, u.y = i + o * n / 2 / t;
+ break
+ }
+ if (0 > t && s >= -1 * l && l >= s) {
+ u.x = r - o / 2, u.y = i - o * n / 2 / t;
+ break
+ }
+ if (n > 0 && (-1 * l >= s || s >= l)) {
+ u.x = r + a * t / 2 / n, u.y = i + a / 2;
+ break
+ }
+ if (0 > n && (-1 * l >= s || s >= l)) {
+ u.x = r - a * t / 2 / n, u.y = i - a / 2;
+ break
+ }
+ } while (!1);
+ return u
+ },
+ f = function(e, t, n, r) {
+ if (n > 0) var i = e.maxX - t.minX;
+ else var i = t.maxX - e.minX;
+ if (r > 0) var a = e.maxY - t.minY;
+ else var a = t.maxY - e.minY;
+ return i >= 0 && a >= 0 ? Math.sqrt(i * i + a * a) : 0
+ },
+ v = function(e, t, n) {
+ for (var r = 0; r < e.edgeSize; r++) {
+ var i = e.layoutEdges[r],
+ a = e.idToIndex[i.sourceId],
+ o = e.layoutNodes[a],
+ s = e.idToIndex[i.targetId],
+ l = e.layoutNodes[s],
+ u = l.positionX - o.positionX,
+ c = l.positionY - o.positionY;
+ if (0 === u && 0 === c) return;
+ var d = p(o, u, c),
+ h = p(l, -1 * u, -1 * c),
+ f = h.x - d.x,
+ v = h.y - d.y,
+ g = Math.sqrt(f * f + v * v),
+ y = Math.pow(i.idealLength - g, 2) / n.edgeElasticity;
+ if (0 !== g) var m = y * f / g,
+ x = y * v / g;
+ else var m = 0,
+ x = 0;
+ o.offsetX += m, o.offsetY += x, l.offsetX -= m, l.offsetY -= x
+ }
+ },
+ g = function(e, t, n) {
+ for (var r = 0; r < e.graphSet.length; r++) {
+ var i = e.graphSet[r],
+ a = i.length;
+ if (0 === r) var o = e.clientHeight / 2,
+ s = e.clientWidth / 2;
+ else var l = e.layoutNodes[e.idToIndex[i[0]]],
+ u = e.layoutNodes[e.idToIndex[l.parentId]],
+ o = u.positionX,
+ s = u.positionY;
+ for (var c = 0; a > c; c++) {
+ var d = e.layoutNodes[e.idToIndex[i[c]]],
+ h = o - d.positionX,
+ p = s - d.positionY,
+ f = Math.sqrt(h * h + p * p);
+ if (f > 1) {
+ var v = n.gravity * h / f,
+ g = n.gravity * p / f;
+ d.offsetX += v, d.offsetY += g
+ }
+ }
+ }
+ },
+ y = function(e, t, n) {
+ var r = [],
+ i = 0,
+ a = -1;
+ for (r.push.apply(r, e.graphSet[0]), a += e.graphSet[0].length; a >= i;) {
+ var o = r[i++],
+ s = e.idToIndex[o],
+ l = e.layoutNodes[s],
+ u = l.children;
+ if (0 < u.length) {
+ for (var c = l.offsetX, d = l.offsetY, h = 0; h < u.length; h++) {
+ var p = e.layoutNodes[e.idToIndex[u[h]]];
+ p.offsetX += c, p.offsetY += d, r[++a] = u[h]
+ }
+ l.offsetX = 0, l.offsetY = 0
+ }
+ }
+ },
+ m = function(e, t, n) {
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ 0 < i.children.length && (i.maxX = void 0, i.minX = void 0, i.maxY = void 0, i.minY = void 0)
+ }
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ if (!(0 < i.children.length)) {
+ var a = x(i.offsetX, i.offsetY, e.temperature);
+ i.positionX += a.x, i.positionY += a.y, i.offsetX = 0, i.offsetY = 0, i.minX = i.positionX - i.width, i.maxX = i.positionX + i.width, i.minY = i.positionY - i.height, i.maxY = i.positionY + i.height, b(i, e)
+ }
+ }
+ for (var r = 0; r < e.nodeSize; r++) {
+ var i = e.layoutNodes[r];
+ 0 < i.children.length && (i.positionX = (i.maxX + i.minX) / 2, i.positionY = (i.maxY + i.minY) / 2, i.width = i.maxX - i.minX, i.height = i.maxY - i.minY)
+ }
+ },
+ x = function(e, t, n) {
+ var r = Math.sqrt(e * e + t * t);
+ if (r > n) var i = {
+ x: n * e / r,
+ y: n * t / r
+ };
+ else var i = {
+ x: e,
+ y: t
+ };
+ return i
+ },
+ b = function(e, t) {
+ var n = e.parentId;
+ if (null != n) {
+ var r = t.layoutNodes[t.idToIndex[n]],
+ i = !1;
+ return (null == r.maxX || e.maxX + r.padRight > r.maxX) && (r.maxX = e.maxX + r.padRight, i = !0), (null == r.minX || e.minX - r.padLeft < r.minX) && (r.minX = e.minX - r.padLeft, i = !0), (null == r.maxY || e.maxY + r.padBottom > r.maxY) && (r.maxY = e.maxY + r.padBottom, i = !0), (null == r.minY || e.minY - r.padTop < r.minY) && (r.minY = e.minY - r.padTop, i = !0), i ? b(r, t) : void 0
+ }
+ };
+ e("layout", "cose", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ nodeSep: void 0,
+ edgeSep: void 0,
+ rankSep: void 0,
+ rankDir: void 0,
+ minLen: function(e) {
+ return 1
+ },
+ edgeWeight: function(e) {
+ return 1
+ },
+ fit: !0,
+ padding: 30,
+ animate: !1,
+ animationDuration: 500,
+ boundingBox: void 0,
+ ready: function() {},
+ stop: function() {}
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = this;
+ return e.util.require("dagre", function(r) {
+ var i = t.cy,
+ a = t.eles,
+ o = function(t, n) {
+ return e.is.fn(n) ? n.apply(t, [t]) : n
+ },
+ s = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: i.width(),
+ h: i.height()
+ }),
+ l = new r.graphlib.Graph({
+ multigraph: !0,
+ compound: !0
+ }),
+ u = {},
+ c = function(e, t) {
+ null != t && (u[e] = t)
+ };
+ c("nodesep", t.nodeSep), c("edgesep", t.edgeSep), c("ranksep", t.rankSep), c("rankdir", t.rankDir), l.setGraph(u), l.setDefaultEdgeLabel(function() {
+ return {}
+ }), l.setDefaultNodeLabel(function() {
+ return {}
+ });
+ for (var d = a.nodes(), h = 0; h < d.length; h++) {
+ var p = d[h];
+ l.setNode(p.id(), {
+ width: p.width(),
+ height: p.height(),
+ name: p.id()
+ })
+ }
+ for (var h = 0; h < d.length; h++) {
+ var p = d[h];
+ p.isChild() && l.setParent(p.id(), p.parent().id())
+ }
+ for (var f = a.edges().stdFilter(function(e) {
+ return !e.source().isParent() && !e.target().isParent()
+ }), h = 0; h < f.length; h++) {
+ var v = f[h];
+ l.setEdge(v.source().id(), v.target().id(), {
+ minlen: o(v, t.minLen),
+ weight: o(v, t.edgeWeight),
+ name: v.id()
+ }, v.id())
+ }
+ r.layout(l);
+ for (var g = l.nodes(), h = 0; h < g.length; h++) {
+ var y = g[h],
+ m = l.node(y);
+ i.getElementById(y).scratch().dagre = m
+ }
+ var x;
+ t.boundingBox ? (x = {
+ x1: 1 / 0,
+ x2: -(1 / 0),
+ y1: 1 / 0,
+ y2: -(1 / 0)
+ }, d.forEach(function(e) {
+ var t = e.scratch().dagre;
+ x.x1 = Math.min(x.x1, t.x), x.x2 = Math.max(x.x2, t.x), x.y1 = Math.min(x.y1, t.y), x.y2 = Math.max(x.y2, t.y)
+ }), x.w = x.x2 - x.x1, x.h = x.y2 - x.y1) : x = s;
+ var b = function(e) {
+ if (t.boundingBox) {
+ var n = (e.x - x.x1) / x.w,
+ r = (e.y - x.y1) / x.h;
+ return {
+ x: s.x1 + n * s.w,
+ y: s.y1 + r * s.h
+ }
+ }
+ return e
+ };
+ d.layoutPositions(n, t, function() {
+ var e = this.scratch().dagre;
+ return b({
+ x: e.x,
+ y: e.y
+ })
+ })
+ }), this
+ }, e("layout", "dagre", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend({}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ avoidOverlap: !0,
+ rows: void 0,
+ columns: void 0,
+ position: function(e) {},
+ sort: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t,
+ r = t.cy,
+ i = n.eles,
+ a = i.nodes().not(":parent");
+ n.sort && (a = a.sort(n.sort));
+ var o = e.util.makeBoundingBox(n.boundingBox ? n.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: r.width(),
+ h: r.height()
+ });
+ if (0 === o.h || 0 === o.w) a.layoutPositions(this, n, function() {
+ return {
+ x: o.x1,
+ y: o.y1
+ }
+ });
+ else {
+ var s = a.size(),
+ l = Math.sqrt(s * o.h / o.w),
+ u = Math.round(l),
+ c = Math.round(o.w / o.h * l),
+ d = function(e) {
+ if (null == e) return Math.min(u, c);
+ var t = Math.min(u, c);
+ t == u ? u = e : c = e
+ },
+ h = function(e) {
+ if (null == e) return Math.max(u, c);
+ var t = Math.max(u, c);
+ t == u ? u = e : c = e
+ };
+ if (null != n.rows && null != n.columns) u = n.rows, c = n.columns;
+ else if (null != n.rows && null == n.columns) u = n.rows, c = Math.ceil(s / u);
+ else if (null == n.rows && null != n.columns) c = n.columns, u = Math.ceil(s / c);
+ else if (c * u > s) {
+ var p = d(),
+ f = h();
+ (p - 1) * f >= s ? d(p - 1) : (f - 1) * p >= s && h(f - 1)
+ } else
+ for (; s > c * u;) {
+ var p = d(),
+ f = h();
+ (f + 1) * p >= s ? h(f + 1) : d(p + 1)
+ }
+ var v = o.w / c,
+ g = o.h / u;
+ if (n.avoidOverlap)
+ for (var y = 0; y < a.length; y++) {
+ var m = a[y],
+ x = m.outerWidth(),
+ b = m.outerHeight();
+ v = Math.max(v, x), g = Math.max(g, b)
+ }
+ for (var w = {}, _ = function(e, t) {
+ return w["c-" + e + "-" + t] ? !0 : !1
+ }, E = function(e, t) {
+ w["c-" + e + "-" + t] = !0
+ }, T = 0, S = 0, C = function() {
+ S++, S >= c && (S = 0, T++)
+ }, k = {}, y = 0; y < a.length; y++) {
+ var m = a[y],
+ D = n.position(m);
+ if (D && (void 0 !== D.row || void 0 !== D.col)) {
+ var N = {
+ row: D.row,
+ col: D.col
+ };
+ if (void 0 === N.col)
+ for (N.col = 0; _(N.row, N.col);) N.col++;
+ else if (void 0 === N.row)
+ for (N.row = 0; _(N.row, N.col);) N.row++;
+ k[m.id()] = N, E(N.row, N.col)
+ }
+ }
+ var P = function(e, t) {
+ var n, r;
+ if (t.locked() || t.isFullAutoParent()) return !1;
+ var i = k[t.id()];
+ if (i) n = i.col * v + v / 2 + o.x1, r = i.row * g + g / 2 + o.y1;
+ else {
+ for (; _(T, S);) C();
+ n = S * v + v / 2 + o.x1, r = T * g + g / 2 + o.y1, E(T, S), C()
+ }
+ return {
+ x: n,
+ y: r
+ }
+ };
+ a.layoutPositions(this, n, P)
+ }
+ return this
+ }, e("layout", "grid", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ ready: function() {},
+ stop: function() {}
+ };
+ t.prototype.run = function() {
+ var e = this.options,
+ t = e.eles,
+ n = this;
+ e.cy;
+ return n.trigger("layoutstart"), t.nodes().positions(function() {
+ return {
+ x: 0,
+ y: 0
+ }
+ }), n.one("layoutready", e.ready), n.trigger("layoutready"), n.one("layoutstop", e.stop), n.trigger("layoutstop"), this
+ }, t.prototype.stop = function() {
+ return this
+ }, e("layout", "null", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ positions: void 0,
+ zoom: void 0,
+ pan: void 0,
+ fit: !0,
+ padding: 30,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ function t(e) {
+ if (null == n.positions) return null;
+ if (a) return n.positions.apply(e, [e]);
+ var t = n.positions[e._private.data.id];
+ return null == t ? null : t
+ }
+ var n = this.options,
+ r = n.eles,
+ i = r.nodes(),
+ a = e.is.fn(n.positions);
+ return i.layoutPositions(this, n, function(e, n) {
+ var r = t(n);
+ return n.locked() || null == r ? !1 : r
+ }), this
+ }, e("layout", "preset", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ animate: !1,
+ animationDuration: 500,
+ ready: void 0,
+ stop: void 0
+ };
+ t.prototype.run = function() {
+ var t = this.options,
+ n = t.cy,
+ r = t.eles,
+ i = r.nodes().not(":parent"),
+ a = e.util.makeBoundingBox(t.boundingBox ? t.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: n.width(),
+ h: n.height()
+ }),
+ o = function(e, t) {
+ return {
+ x: a.x1 + Math.round(Math.random() * a.w),
+ y: a.y1 + Math.round(Math.random() * a.h)
+ }
+ };
+ return i.layoutPositions(this, t, o), this
+ }, e("layout", "random", t)
+ }(cytoscape),
+ function($$) {
+ "use strict";
+
+ function SpreadLayout(e) {
+ this.options = $$.util.extend({}, defaults, e)
+ }
+
+ function cellCentroid(e) {
+ for (var t, n, r, i = e.halfedges, a = 0, o = 0, s = 0, l = 0; l < i.length; ++l) t = i[l].getEndpoint(), n = i[l].getStartpoint(), a += t.x * n.y, a -= t.y * n.x, r = t.x * n.y - n.x * t.y, o += (t.x + n.x) * r, s += (t.y + n.y) * r;
+ return a /= 2, r = 6 * a, {
+ x: o / r,
+ y: s / r
+ }
+ }
+
+ function sitesDistance(e, t) {
+ var n = e.x - t.x,
+ r = e.y - t.y;
+ return Math.sqrt(n * n + r * r)
+ }
+ var defaults = {
+ animate: !0,
+ ready: void 0,
+ stop: void 0,
+ fit: !0,
+ minDist: 20,
+ padding: 20,
+ expandingFactor: -1,
+ maxFruchtermanReingoldIterations: 50,
+ maxExpandIterations: 4,
+ boundingBox: void 0
+ };
+ SpreadLayout.prototype.run = function() {
+ var layout = this,
+ options = this.options;
+ return $$.util.requires(["foograph", "Voronoi"], function(foograph, Voronoi) {
+ function setPositions(e) {
+ for (var t = e.vertices, n = [], r = 0; r < t.length; ++r) {
+ var i = t[r];
+ n[i.id] = {
+ x: i.x,
+ y: i.y
+ }
+ }
+ nodes.positions(function(e, t) {
+ var r = t._private.data.id,
+ i = n[r];
+ return {
+ x: Math.round(simBB.x1 + i.x),
+ y: Math.round(simBB.y1 + i.y)
+ }
+ }), options.fit && cy.fit(options.padding), cy.nodes().rtrigger("position")
+ }
+ var cy = options.cy,
+ nodes = cy.nodes(),
+ edges = cy.edges(),
+ cWidth = cy.width(),
+ cHeight = cy.height(),
+ simulationBounds = options.boundingBox ? $$.util.makeBoundingBox(options.boundingBox) : null,
+ padding = options.padding,
+ simBBFactor = Math.max(1, .8 * Math.log(nodes.length));
+ nodes.length < 100 && (simBBFactor /= 2), layout.trigger({
+ type: "layoutstart",
+ layout: layout
+ });
+ var simBB = {
+ x1: 0,
+ y1: 0,
+ x2: cWidth * simBBFactor,
+ y2: cHeight * simBBFactor
+ };
+ simulationBounds && (simBB.x1 = simulationBounds.x1, simBB.y1 = simulationBounds.y1, simBB.x2 = simulationBounds.x2, simBB.y2 = simulationBounds.y2), simBB.x1 += padding, simBB.y1 += padding, simBB.x2 -= padding, simBB.y2 -= padding;
+ var width = simBB.x2 - simBB.x1,
+ height = simBB.y2 - simBB.y1,
+ startTime = Date.now();
+ if (nodes.size() <= 1) {
+ nodes.positions({
+ x: Math.round((simBB.x1 + simBB.x2) / 2),
+ y: Math.round((simBB.y1 + simBB.y2) / 2)
+ }), options.fit && cy.fit(options.padding);
+ var endTime = Date.now();
+ return console.info("Layout on " + nodes.size() + " nodes took " + (endTime - startTime) + " ms"), layout.one("layoutready", options.ready), layout.trigger("layoutready"), layout.one("layoutstop", options.stop), void layout.trigger("layoutstop")
+ }
+ var pData = {
+ width: width,
+ height: height,
+ minDist: options.minDist,
+ expFact: options.expandingFactor,
+ expIt: 0,
+ maxExpIt: options.maxExpandIterations,
+ vertices: [],
+ edges: [],
+ startTime: startTime,
+ maxFruchtermanReingoldIterations: options.maxFruchtermanReingoldIterations
+ };
+ nodes.each(function(e, t) {
+ var n = this._private.data.id;
+ pData.vertices.push({
+ id: n,
+ x: 0,
+ y: 0
+ })
+ }), edges.each(function() {
+ var e = this.source().id(),
+ t = this.target().id();
+ pData.edges.push({
+ src: e,
+ tgt: t
+ })
+ });
+ var t1 = $$.Thread();
+ t1.require(foograph, "foograph"), t1.require(Voronoi), t1.require(sitesDistance), t1.require(cellCentroid);
+ var didLayoutReady = !1;
+ t1.on("message", function(e) {
+ var t = e.message;
+ options.animate && (setPositions(t), didLayoutReady || (layout.trigger("layoutready"), didLayoutReady = !0))
+ }), layout.one("layoutready", options.ready), t1.pass(pData).run(function(pData) {
+ function checkMinDist(e) {
+ for (var t = 0, n = 0; n < e.length; ++n) {
+ var r = e[n];
+ null != r.lSite && null != r.rSite && sitesDistance(r.lSite, r.rSite) < lMinDist && ++t
+ }
+ return t
+ }
+ foograph = eval("foograph"), Voronoi = eval("Voronoi");
+ for (var lWidth = pData.width, lHeight = pData.height, lMinDist = pData.minDist, lExpFact = pData.expFact, lMaxExpIt = pData.maxExpIt, lMaxFruchtermanReingoldIterations = pData.maxFruchtermanReingoldIterations, savePositions = function() {
+ pData.width = lWidth, pData.height = lHeight, pData.expIt = expandIteration, pData.expFact = lExpFact, pData.vertices = [];
+ for (var e = 0; e < fv.length; ++e) pData.vertices.push({
+ id: fv[e].label,
+ x: fv[e].x,
+ y: fv[e].y
+ })
+ }, messagePositions = function() {
+ broadcast(pData)
+ }, frg = new foograph.Graph("FRgraph", !1), frgNodes = {}, dataVertices = pData.vertices, ni = 0; ni < dataVertices.length; ++ni) {
+ var id = dataVertices[ni].id,
+ v = new foograph.Vertex(id, Math.round(Math.random() * lHeight), Math.round(Math.random() * lHeight));
+ frgNodes[id] = v, frg.insertVertex(v)
+ }
+ for (var dataEdges = pData.edges, ei = 0; ei < dataEdges.length; ++ei) {
+ var srcNodeId = dataEdges[ei].src,
+ tgtNodeId = dataEdges[ei].tgt;
+ frg.insertEdge("", 1, frgNodes[srcNodeId], frgNodes[tgtNodeId])
+ }
+ var fv = frg.vertices,
+ iterations = lMaxFruchtermanReingoldIterations,
+ frLayoutManager = new foograph.ForceDirectedVertexLayout(lWidth, lHeight, iterations, !1, lMinDist);
+ frLayoutManager.callback = function() {
+ savePositions(), messagePositions()
+ }, frLayoutManager.layout(frg), savePositions(), messagePositions();
+ for (var voronoi = new Voronoi, bbox = {
+ xl: 0,
+ xr: lWidth,
+ yt: 0,
+ yb: lHeight
+ }, vSites = [], i = 0; i < fv.length; ++i) vSites[fv[i].label] = fv[i];
+ for (var diagram = voronoi.compute(fv, bbox), cells = diagram.cells, i = 0; i < cells.length; ++i) {
+ var cell = cells[i],
+ site = cell.site,
+ centroid = cellCentroid(cell),
+ currv = vSites[site.label];
+ currv.x = centroid.x, currv.y = centroid.y
+ }
+ 0 > lExpFact && (lExpFact = Math.max(.05, Math.min(.1, lMinDist / Math.sqrt(lWidth * lHeight / fv.length) * .5)));
+ for (var prevInfractions = checkMinDist(diagram.edges), bStop = 0 >= prevInfractions, voronoiIteration = 0, expandIteration = 0; !bStop;) {
+ ++voronoiIteration;
+ for (var it = 0; 4 >= it; ++it) {
+ voronoi.recycle(diagram), diagram = voronoi.compute(fv, bbox), cells = diagram.cells;
+ for (var i = 0; i < cells.length; ++i) {
+ var cell = cells[i],
+ site = cell.site,
+ centroid = cellCentroid(cell),
+ currv = vSites[site.label];
+ currv.x = centroid.x, currv.y = centroid.y
+ }
+ }
+ var currInfractions = checkMinDist(diagram.edges);
+ 0 >= currInfractions ? bStop = !0 : (currInfractions >= prevInfractions || voronoiIteration >= 4) && (expandIteration >= lMaxExpIt ? bStop = !0 : (lWidth += lWidth * lExpFact, lHeight += lHeight * lExpFact, bbox = {
+ xl: 0,
+ xr: lWidth,
+ yt: 0,
+ yb: lHeight
+ }, ++expandIteration, voronoiIteration = 0)), prevInfractions = currInfractions, savePositions(), messagePositions()
+ }
+ return savePositions(), pData
+ }).then(function(e) {
+ var t = e.vertices;
+ setPositions(e);
+ var n = e.startTime,
+ r = new Date;
+ console.info("Layout on " + t.length + " nodes took " + (r - n) + " ms"), layout.one("layoutstop", options.stop), options.animate || layout.trigger("layoutready"), layout.trigger("layoutstop"), t1.stop()
+ })
+ }), this
+ }, SpreadLayout.prototype.stop = function() {}, $$("layout", "spread", SpreadLayout)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(t) {
+ this.options = e.util.extend(!0, {}, n, t)
+ }
+ var n = {
+ animate: !0,
+ maxSimulationTime: 4e3,
+ ungrabifyWhileSimulating: !1,
+ fit: !0,
+ padding: 30,
+ boundingBox: void 0,
+ random: !1,
+ infinite: !1,
+ ready: void 0,
+ stop: void 0,
+ stiffness: 400,
+ repulsion: 400,
+ damping: .5
+ };
+ t.prototype.run = function() {
+ var t = this,
+ n = this,
+ r = this.options;
+ return e.util.require("Springy", function(i) {
+ function a(e) {
+ var t = e.scratch("springy").model.id,
+ n = w.layout.nodePoints[t].p,
+ r = e.position(),
+ i = null != r.x && null != r.y ? y(e.position()) : {
+ x: 4 * Math.random() - 2,
+ y: 4 * Math.random() - 2
+ };
+ n.x = i.x, n.y = i.y
+ }
+
+ function o() {
+ n.stopped = !1, r.ungrabifyWhileSimulating && E.ungrabify(), w.start()
+ }
+ var s = !1,
+ l = r.cy;
+ t.trigger({
+ type: "layoutstart",
+ layout: t
+ });
+ var u = r.eles,
+ c = u.nodes().not(":parent"),
+ d = u.edges(),
+ h = e.util.makeBoundingBox(r.boundingBox ? r.boundingBox : {
+ x1: 0,
+ y1: 0,
+ w: l.width(),
+ h: l.height()
+ }),
+ p = new i.Graph;
+ c.each(function(e, t) {
+ t.scratch("springy", {
+ model: p.newNode({
+ element: t
+ })
+ })
+ }), d.each(function(e, t) {
+ var n = t.source().scratch("springy").model,
+ r = t.target().scratch("springy").model;
+ t.scratch("springy", {
+ model: p.newEdge(n, r, {
+ element: t
+ })
+ })
+ });
+ var f = window.sim = new i.Layout.ForceDirected(p, r.stiffness, r.repulsion, r.damping);
+ r.infinite && (f.minEnergyThreshold = -(1 / 0));
+ var v = f.getBoundingBox(),
+ g = function(e) {
+ v = f.getBoundingBox();
+ var t = v.topright.subtract(v.bottomleft),
+ n = e.subtract(v.bottomleft).divide(t.x).x * h.w + h.x1,
+ r = e.subtract(v.bottomleft).divide(t.y).y * h.h + h.x1;
+ return new i.Vector(n, r)
+ },
+ y = function(e) {
+ v = f.getBoundingBox();
+ var t = v.topright.subtract(v.bottomleft),
+ n = (e.x - h.x1) / h.w * t.x + v.bottomleft.x,
+ r = (e.y - h.y1) / h.h * t.y + v.bottomleft.y;
+ return new i.Vector(n, r)
+ },
+ m = l.collection(),
+ x = l.nodes().size(),
+ b = 1,
+ w = new i.Renderer(f, function() {
+ n.stopped || m.length > 0 && r.animate && (s = !0, m.rtrigger("position"), r.fit && l.fit(r.padding), m = l.collection(), s = !1)
+ }, function(e, t, n) {}, function(e, i) {
+ if (!n.stopped) {
+ var a = g(i),
+ o = e.data.element;
+ o.locked() || o.grabbed() || (o._private.position = {
+ x: a.x,
+ y: a.y
+ }, m.merge(o)), b == x && (t.one("layoutready", r.ready), t.trigger({
+ type: "layoutready",
+ layout: t
+ })), b++
+ }
+ });
+ c.each(function(e, t) {
+ r.random || a(t)
+ });
+ var _;
+ c.on("position", _ = function() {
+ s || a(this)
+ });
+ var E = c.filter(":grabbable");
+ n.stopSystem = function() {
+ n.stopped = !0, p.filterNodes(function() {
+ return !1
+ }), r.ungrabifyWhileSimulating && E.grabify(), r.fit && l.fit(r.padding), c.off("drag position", _), t.one("layoutstop", r.stop), t.trigger({
+ type: "layoutstop",
+ layout: t
+ }), n.stopSystem = null
+ }, o(), r.infinite || setTimeout(function() {
+ n.stop()
+ }, r.maxSimulationTime)
+ }), this
+ }, t.prototype.stop = function() {
+ return null != this.stopSystem && this.stopSystem(), this
+ }, e("layout", "springy", t)
+ }(cytoscape),
+ function(e) {
+ "use strict";
+
+ function t(e) {
+ this.options = e
+ }
+ t.prototype.recalculateRenderedStyle = function() {}, t.prototype.notify = function() {}, e("renderer", "null", t)
+ }(cytoscape);
\ No newline at end of file
diff --git a/xquery/person-file-net/web_session/styles.js b/xquery/person-file-net/web_session/styles.js
new file mode 100644
index 0000000..71840c1
--- /dev/null
+++ b/xquery/person-file-net/web_session/styles.js
@@ -0,0 +1,95 @@
+var styles = [ {
+ "format_version" : "1.0",
+ "generated_by" : "cytoscape-3.9.1",
+ "target_cytoscapejs_version" : "~2.1",
+ "title" : "default",
+ "style" : [ {
+ "selector" : "node",
+ "css" : {
+ "color" : "rgb(255,255,255)",
+ "width" : 35.0,
+ "height" : 35.0,
+ "background-color" : "rgb(33,113,181)",
+ "font-family" : "SansSerif.plain",
+ "font-weight" : "normal",
+ "shape" : "roundrectangle",
+ "background-opacity" : 1.0,
+ "font-size" : 12,
+ "border-opacity" : 1.0,
+ "border-width" : 0.0,
+ "text-valign" : "center",
+ "text-halign" : "center",
+ "border-color" : "rgb(204,204,204)",
+ "text-opacity" : 1.0,
+ "content" : "data(name)"
+ }
+ }, {
+ "selector" : "node[Column_2 = 'person']",
+ "css" : {
+ "background-color" : "rgb(227,26,28)"
+ }
+ }, {
+ "selector" : "node[Column_2 = 'person']",
+ "css" : {
+ "shape" : "diamond"
+ }
+ }, {
+ "selector" : "node:selected",
+ "css" : {
+ "background-color" : "rgb(255,255,0)"
+ }
+ }, {
+ "selector" : "edge",
+ "css" : {
+ "line-style" : "solid",
+ "color" : "rgb(252,251,253)",
+ "line-color" : "rgb(132,132,132)",
+ "text-opacity" : 1.0,
+ "source-arrow-color" : "rgb(0,0,0)",
+ "target-arrow-color" : "rgb(0,0,0)",
+ "font-family" : "Dialog.plain",
+ "font-weight" : "normal",
+ "content" : "",
+ "font-size" : 10,
+ "width" : 2.0,
+ "source-arrow-shape" : "none",
+ "opacity" : 1.0,
+ "target-arrow-shape" : "none"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 2,826.99057424]",
+ "css" : {
+ "line-color" : "rgb(68,1,84)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness = 2,826.99057424]",
+ "css" : {
+ "line-color" : "rgb(68,2,86)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 1,414.49520293][EdgeBetweenness < 2,826.99057424]",
+ "css" : {
+ "line-color" : "mapData(EdgeBetweenness,1,414.49520293,2,826.99057424,rgb(33,145,140),rgb(68,2,86))"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness > 2][EdgeBetweenness < 1,414.49520293]",
+ "css" : {
+ "line-color" : "mapData(EdgeBetweenness,2,1,414.49520293,rgb(203,24,29),rgb(33,145,140))"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness = 2]",
+ "css" : {
+ "line-color" : "rgb(203,24,29)"
+ }
+ }, {
+ "selector" : "edge[EdgeBetweenness < 2]",
+ "css" : {
+ "line-color" : "rgb(253,231,37)"
+ }
+ }, {
+ "selector" : "edge:selected",
+ "css" : {
+ "line-color" : "rgb(255,0,0)"
+ }
+ } ]
+} ]
\ No newline at end of file
diff --git a/xquery/person-file-net/web_session/styles/main.css b/xquery/person-file-net/web_session/styles/main.css
new file mode 100644
index 0000000..71df565
--- /dev/null
+++ b/xquery/person-file-net/web_session/styles/main.css
@@ -0,0 +1 @@
+body{background:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#555;font-weight:100}.browsehappy{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}#cy{width:800px;height:600px;background-color:#eee}
\ No newline at end of file